scorpio 2 years ago
parent
commit
f1f98b3cf4

+ 3 - 1
src/api/index.js

@@ -4,6 +4,7 @@ import project from './project/index.js'
 import common from './common.js'
 import recycle from './recycle/index.js'
 import database from './database/index.js'
+import task from './task/index.js'
 
 export default {
   uploadPath: '/api/wutong-file/minio/file/upload', // 上传
@@ -12,5 +13,6 @@ export default {
   project,
   common,
   recycle,
-  database
+  database,
+  task
 }

+ 12 - 0
src/api/task/index.js

@@ -0,0 +1,12 @@
+import fetch from '../fetch.js'
+
+export default {
+  /**
+     * 创建任务
+     * @returns {Promise<unknown>}
+     */
+  add (params) {
+    return fetch('/blade-project-manage-v2/userTask/v2/createTask', params, 'post', 'json')
+  }
+
+}

+ 5 - 0
src/layout/left.vue

@@ -28,6 +28,11 @@ export default {
           img: new URL('../assets/svg/icon1.svg', import.meta.url).href,
           path: '/'
         },
+        {
+          name: '任务列表',
+          img: new URL('../assets/svg/icon1.svg', import.meta.url).href,
+          path: '/task'
+        },
         {
           name: '资料库',
           img: new URL('../assets/svg/icon2.svg', import.meta.url).href,

+ 1 - 1
src/views/home/component/authorize.vue

@@ -90,7 +90,7 @@
     </el-tabs>
     <el-dialog v-model='qrCodeShow' top='20%' width='400px'>
       <div class='flex flex-col flex-center' style='height: 400rpx;width: 400rpx'>
-        <vue-qr :currentLevel='3' :logoCornerRadius='4' :logoScale='0.25' :logoSrc='logoSrc' :text='qrCodeText'
+        <vue-qr :currentLevel='3' :logoCornerRadius='4' :logoScale='0.25' :text='qrCodeText'
                 size='340'/>
         <span>右键复制二维码,通过微信进行分享</span>
       </div>

+ 22 - 2
src/views/home/component/folder_list.vue

@@ -29,6 +29,8 @@
         <div class="flex flex-center" style="flex: 3">
           <main-button icon="View" title="详情" width="85"
                        @click="fileView(item)"/>
+          <main-button icon="Position" title="任务下发" width="85"
+                       @click="sendTask(item)"/>
           <main-button v-if='permissions && permissions.permissions.home_folder_add  && item.isAccess === 2 '
                        icon="Upload"
                        title="上传文件" width="85" @click="uploadFiles(item)"/>
@@ -137,6 +139,10 @@
         </div>
       </div>
     </el-dialog>
+<!--    任务下发-->
+    <el-dialog v-model='taskShow' append-to-body title='任务下发'>
+      <task :project-id='projectId' :folders='currentFolders' @close='closeTask'></task>
+    </el-dialog>
   </div>
 </template>
 
@@ -147,10 +153,11 @@ import authorize from '@/views/home/component/authorize.vue'
 import permissionStore from '@/store/permission.js'
 import { useStore } from '@/store/user.js'
 import baseButton from '@/components/base-button.vue'
+import task from './task.vue'
 
 export default {
   name: 'file_list',
-  components: { mainButton, uploadFile, authorize, baseButton },
+  components: { mainButton, uploadFile, authorize, baseButton, task },
   setup () {
     const permissions = permissionStore()
     const user = useStore()
@@ -169,6 +176,7 @@ export default {
   },
   data () {
     return {
+      taskShow: false,
       show: false,
       updateShow: false,
       sendMsg: false,
@@ -197,13 +205,21 @@ export default {
         id: '',
         title: ''
       },
-      folderName: ''
+      folderName: '',
+      currentFolders: []
     }
   },
   created () {
 
   },
   methods: {
+    sendTask (item) {
+      const index = this.currentFolders.findIndex(sub => sub.id === item.id)
+      if (index === -1) {
+        this.currentFolders.push(item)
+      }
+      this.taskShow = true
+    },
     fileView (item) {
       if (this.type === 0) {
         console.log(item)
@@ -385,6 +401,10 @@ export default {
     },
     changePage (res) {
       this.$emit('change', res)
+    },
+    closeTask () {
+      this.taskShow = false
+      this.currentFolders = []
     }
   }
 }

+ 105 - 0
src/views/home/component/task.vue

@@ -0,0 +1,105 @@
+<template>
+  <div>
+    <el-form :rules='rules' :model='form'>
+      <el-form-item label='任务名称' prop='title'>
+        <el-input v-model='form.title' placeholder='请填写任务名称'></el-input>
+      </el-form-item>
+      <el-form-item label='任务说明' prop='remark'>
+        <el-input v-model='form.remark' type='textarea' :rows='6' placeholder='请填写任务说明'></el-input>
+      </el-form-item>
+      <el-form-item label='任务期限'>
+        <el-date-picker
+            v-model="form.date"
+            type="daterange"
+            unlink-panels
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="截止日期"
+            format='YYYY-MM-DD'
+            value-format="YYYY-MM-DD"
+        />
+      </el-form-item>
+      <div class='full-width flex flex-align-center mt-10'>
+        <span class='font-14 bold'>生成二维码</span>
+        <el-button circle class='ml-20' icon="Picture" type="danger" @click='initCode()'/>
+      </div>
+      <div class='full-width mt-20 border-top padding-top flex flex-justify-end'>
+        <el-button @click='close'>取消</el-button>
+        <el-button type='primary' @click='close'>关闭</el-button>
+      </div>
+    </el-form>
+    <el-dialog v-model='qrCodeShow' width='400px'>
+      <div class='flex flex-col flex-center' style='height: 400rpx;width: 400rpx'>
+        <vue-qr :currentLevel='3' :logoCornerRadius='4' :logoScale='0.25'  :text='qrCodeText'
+                size='340'/>
+        <span>右键复制二维码,通过微信进行分享</span>
+      </div>
+    </el-dialog>
+  </div>
+
+</template>
+
+<script>
+import VueQr from 'vue-qr/src/packages/vue-qr.vue'
+export default {
+  name: 'task',
+  components: { VueQr },
+  props: {
+    projectId: {
+      type: String,
+      default: ''
+    },
+    folders: {
+      type: Array,
+      default: []
+    }
+  },
+  data () {
+    return {
+      qrCodeText: '',
+      qrCodeShow: false,
+      rules: {
+        title: [
+          { required: true, message: '请输入任务名称', trigger: 'blur' }
+        ],
+        remark: [
+          { required: true, message: '请输入任务说明', trigger: 'blur' }
+        ]
+      },
+      form: {
+        title: '',
+        remark: '',
+        date: '',
+        taskStartTime: '',
+        taskEndTime: ''
+      }
+    }
+  },
+  methods: {
+    initCode () {
+      // this.qrCodeShow = true
+      if (this.form.date.length !== 2) {
+        this.$message.error('请按要求选择时间段')
+        return
+      }
+      this.form.folderIds = this.folders.map(sub => sub.fileFolderId)
+      this.form.taskStartTime = this.form.date[0]
+      this.form.taskEndTime = this.form.date[1]
+      this.$api.task.add(this.form).then(res => {
+        if (res.code === 200) {
+          console.log(res)
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    close () {
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 73 - 0
src/views/task/Index.vue

@@ -0,0 +1,73 @@
+<template>
+  <basic-container class='margin'>
+    <avue-crud
+          :option="option"
+          :data="data"
+          ref="crud"
+          v-model="form"
+          :before-open="beforeOpen"
+          @row-del="rowDel"
+          @row-save="rowSave"
+          @row-update="rowUpdate"
+          @on-load="onLoad">
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+import BasicContainer from '@/components/basic-container/main.vue'
+export default {
+  name: 'Index',
+  components: { BasicContainer },
+  data () {
+    return {
+      taskShow: false,
+      form: {},
+      data: [],
+      option: {
+        align: 'center',
+        menuAlign: 'center',
+        menuWidth: 380,
+        size: 'mini',
+        addBtn: false,
+        refreshBtn: false,
+        columnBtn: false,
+        labelWidth: 140,
+        border: true,
+        column: [
+          {
+            label: '任务名称',
+            prop: 'noticeType'
+          },
+          {
+            label: '任务要求',
+            prop: 'noticeType'
+          },
+          {
+            label: '所属项目',
+            prop: 'noticeType'
+          },
+          {
+            label: '下发人',
+            prop: 'noticeType'
+          },
+          {
+            label: '下发时间',
+            prop: 'noticeType'
+          },
+          {
+            label: '任务状态',
+            prop: 'noticeType'
+          }
+        ]
+      }
+    }
+  },
+  methods: {
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 2 - 2
vite.config.js

@@ -34,9 +34,9 @@ export default defineConfig({
     proxy: {
       '/api': {
         // 正式环境地址
-        target: 'https://dev.wutongresearch.club/api',
+        // target: 'https://dev.wutongresearch.club/api',
         // target: 'https://prod.wutongshucloud.com/api',
-        // target: 'http://192.168.31.181:8110',
+        target: 'http://192.168.31.181:8110',
         changeOrigin: true,
         rewrite: (path) => path.replace(/^\/api/, '')
       }