瀏覽代碼

feature(前端): 代码风格统一

likai 3 年之前
父節點
當前提交
a8ec7a1efc

+ 6 - 1
src/api/plat/task.js

@@ -16,7 +16,12 @@ export default {
   },
   // 统计各类型督办数量
   statisticsTaskNumber(query) {
-    return micro_request.postRequest(basePath, 'Task', 'StatisticsTaskNumber', query)
+    return micro_request.postRequest(
+      basePath,
+      'Task',
+      'StatisticsTaskNumber',
+      query
+    )
   },
   // 数据导出
   exportTasks(query) {

+ 4 - 5
src/utils/base64ToFile.js

@@ -1,7 +1,6 @@
- 
 const util = {
   // 创建一个a标签,并做下载点击事件
-  downloadFile: function(blob, fileName) {
+  downloadFile: function (blob, fileName) {
     const link = document.createElement('a')
     link.href = window.URL.createObjectURL(blob)
     link.download = fileName
@@ -13,7 +12,7 @@ const util = {
     document.body.removeChild(link)
   },
   // 将Base64文件转为 Blob
-  buildBlobByByte: function(data) {
+  buildBlobByByte: function (data) {
     const raw = window.atob(data)
     const rawLength = raw.length
     const uInt8Array = new Uint8Array(rawLength)
@@ -24,6 +23,6 @@ const util = {
   },
 }
 // 二进制数组 生成文件
-export default function downloadFileByByte (data, fileName) {
+export default function downloadFileByByte(data, fileName) {
   return util.downloadFile(util.buildBlobByByte(data), fileName)
-}
+}

+ 71 - 97
src/views/opportunity/all.vue

@@ -10,129 +10,103 @@
   <div class="opportunity-container">
     <vab-query-form>
       <vab-query-form-left-panel :span="12">
-        <el-button icon="el-icon-plus"
-                   type="primary">
-          添加
-        </el-button>
-        <el-button icon="el-icon-delete">
-          转移商机
-        </el-button>
+        <el-button icon="el-icon-plus" type="primary">添加</el-button>
+        <el-button icon="el-icon-delete">转移商机</el-button>
       </vab-query-form-left-panel>
       <vab-query-form-right-panel :span="12">
-        <el-form :inline="true"
-                 :model="queryForm"
-                 @submit.native.prevent>
+        <el-form :inline="true" :model="queryForm" @submit.native.prevent>
           <el-form-item>
-            <el-input v-model.trim="queryForm.userName"
-                      clearable
-                      placeholder="请输入用户名" />
+            <el-input
+              v-model.trim="queryForm.userName"
+              clearable
+              placeholder="请输入用户名" />
           </el-form-item>
           <el-form-item>
-            <el-button icon="el-icon-search"
-                       type="primary"
-                       @click="fetchData">
+            <el-button icon="el-icon-search" type="primary" @click="fetchData">
               查询
             </el-button>
           </el-form-item>
         </el-form>
       </vab-query-form-right-panel>
     </vab-query-form>
-    <el-table v-loading="listLoading"
-              :data="list"
-              height="calc(100vh - 295px)"
-              @selection-change="setSelectRows">
-      <el-table-column show-overflow-tooltip
-                       type="selection" />
-      <el-table-column align="center"
-                       label="商机标题"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="关联客户"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="审批状态"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="商机状态"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="商机类别"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="商机金额"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="最后跟进"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="下次联系时间"
-                       prop=""></el-table-column>
-      <el-table-column align="center"
-                       label="操作">
+    <el-table
+      v-loading="listLoading"
+      :data="list"
+      height="calc(100vh - 295px)"
+      @selection-change="setSelectRows">
+      <el-table-column show-overflow-tooltip type="selection" />
+      <el-table-column align="center" label="商机标题" prop="" />
+      <el-table-column align="center" label="关联客户" prop="" />
+      <el-table-column align="center" label="审批状态" prop="" />
+      <el-table-column align="center" label="商机状态" prop="" />
+      <el-table-column align="center" label="商机类别" prop="" />
+      <el-table-column align="center" label="商机金额" prop="" />
+      <el-table-column align="center" label="最后跟进" prop="" />
+      <el-table-column align="center" label="下次联系时间" prop="" />
+      <el-table-column align="center" label="操作">
         <template slot-scope="scope">
-          <el-button type="text"></el-button>
+          <el-button type="text" />
         </template>
       </el-table-column>
     </el-table>
-    <el-pagination background
-                   :current-page="queryForm.pageNum"
-                   :layout="layout"
-                   :page-size="queryForm.pageSize"
-                   :total="total"
-                   @current-change="handleCurrentChange"
-                   @size-change="handleSizeChange" />
+    <el-pagination
+      background
+      :current-page="queryForm.pageNum"
+      :layout="layout"
+      :page-size="queryForm.pageSize"
+      :total="total"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange" />
   </div>
 </template>
 
 <script>
-export default {
-  name: 'OpportunityAll',
-  data () {
-    return {
-      listLoading: false,
-      layout: 'total, sizes, prev, pager, next, jumper',
-      list: [],
-      queryForm: {
-        pageSize: 10,
-        pageNum: 1
-      },
-      total: 0,
-      selectRows: []
-    }
-  },
-  computed: {
-    height () {
-      return this.$baseTableHeight(1)
-    },
-  },
-  mounted () {
-    this.fetchData()
-  },
-  methods: {
-    async fetchData () {
-      this.listLoading = true
-      this.list = [
-        { id: 1 }
-      ]
-      this.listLoading = false
+  export default {
+    name: 'OpportunityAll',
+    data() {
+      return {
+        listLoading: false,
+        layout: 'total, sizes, prev, pager, next, jumper',
+        list: [],
+        queryForm: {
+          pageSize: 10,
+          pageNum: 1,
+        },
+        total: 0,
+        selectRows: [],
+      }
     },
-    handleSizeChange (val) {
-      this.queryForm.pageSize = val
-      this.fetchData()
+    computed: {
+      height() {
+        return this.$baseTableHeight(1)
+      },
     },
-    handleCurrentChange (val) {
-      this.queryForm.pageNum = val
+    mounted() {
       this.fetchData()
     },
-    setSelectRows (val) {
-      this.selectRows = val
+    methods: {
+      async fetchData() {
+        this.listLoading = true
+        this.list = [{ id: 1 }]
+        this.listLoading = false
+      },
+      handleSizeChange(val) {
+        this.queryForm.pageSize = val
+        this.fetchData()
+      },
+      handleCurrentChange(val) {
+        this.queryForm.pageNum = val
+        this.fetchData()
+      },
+      setSelectRows(val) {
+        this.selectRows = val
+      },
     },
   }
-}
 </script>
 
 <style lang="scss" scoped>
-$base: '.opportunity';
-#{$base}-container {
-}
+  $base: '.opportunity';
+  #{$base}-container {
+  }
 </style>

+ 21 - 13
src/views/plat/task/components/CommentAdd.vue

@@ -1,20 +1,25 @@
+<!-- eslint-disable vue/no-mutating-props -->
 <template>
   <el-dialog
     title="评论"
     :visible.sync="selfVisible"
     width="500px"
-    @open="open"
-    @close="close">
+    @close="close"
+    @open="open">
     <el-form ref="form" label-width="80px" :model="form" :rules="rules">
       <el-row>
         <el-col :span="24">
           <el-form-item label="评论" prop="content">
-            <el-input type="textarea" v-model="form.content" placeholder="请输入评论"/>
+            <el-input
+              v-model="form.content"
+              placeholder="请输入评论"
+              type="textarea" />
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
     <template #footer>
+      <!-- eslint-disable-next-line vue/no-mutating-props -->
       <el-button @click="selfVisible = false">取 消</el-button>
       <el-button type="primary" @click="save">确 定</el-button>
     </template>
@@ -29,29 +34,25 @@
     props: {
       selfVisible: {
         type: Boolean,
-        default: false
+        default: false,
       },
       theTask: {
         type: Object,
-        default: {}
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: {},
       },
       doRefresh: {
         type: Function,
         default: undefined,
       },
     },
-    watch: {
-      selfVisible (val) {
-        this.$emit('update:selfVisible', val)
-      }
-    },
     data() {
       return {
         // 新增数据表单
         form: {
           taskId: '',
           content: '',
-          remark: ''
+          remark: '',
         },
         // 校验规则
         rules: {
@@ -61,6 +62,11 @@
         },
       }
     },
+    watch: {
+      selfVisible(val) {
+        this.$emit('update:selfVisible', val)
+      },
+    },
     methods: {
       // 打开弹窗
       open() {
@@ -77,12 +83,14 @@
         if (this.$refs['form']) {
           this.$refs['form'].resetFields()
         }
+        // eslint-disable-next-line vue/no-mutating-props
         this.selfVisible = false
       },
       // 保存数据
       save() {
         this.$refs['form'].validate(async (valid) => {
           if (valid) {
+            // eslint-disable-next-line vue/no-mutating-props
             this.selfVisible = false
             this.form.taskId = this.theTask.id
             const { msg } = await taskApi.createTaskComment(this.form)
@@ -93,6 +101,6 @@
           }
         })
       },
-    }
+    },
   }
-</script>
+</script>

+ 36 - 16
src/views/plat/task/components/ProgressAdd.vue

@@ -1,37 +1,54 @@
+<!-- eslint-disable vue/no-mutating-props -->
 <template>
   <el-dialog
     title="评论"
     :visible.sync="selfVisible"
     width="500px"
-    @open="open"
-    @close="close">
+    @close="close"
+    @open="open">
     <el-form ref="form" label-width="80px" :model="form" :rules="rules">
       <el-row>
         <el-col :span="12">
           <el-form-item label="进展时间" prop="progDate">
-            <el-date-picker v-model="form.progDate" style="width: 100%;" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择进展时间"/>
+            <el-date-picker
+              v-model="form.progDate"
+              placeholder="请选择进展时间"
+              style="width: 100%"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="附件" prop="progFile">
             <!-- 此处附件上传组件不可用,等以后再调整 -->
             <!-- <el-button size="mini" type="primary">上传</el-button> -->
-            <el-link v-show="form.progFile != ''" @click="showFile(form.progFile)">查看附件</el-link>
+            <el-link
+              v-show="form.progFile != ''"
+              @click="showFile(form.progFile)">
+              查看附件
+            </el-link>
           </el-form-item>
         </el-col>
         <el-col :span="24">
           <el-form-item label="进展说明" prop="progDesc">
-            <el-input type="textarea" v-model="form.progDesc" placeholder="请输入进展说明"/>
+            <el-input
+              v-model="form.progDesc"
+              placeholder="请输入进展说明"
+              type="textarea" />
           </el-form-item>
         </el-col>
         <el-col :span="24">
           <el-form-item label="备注" prop="remark">
-            <el-input type="textarea" v-model="form.remark" placeholder="请输入备注"/>
+            <el-input
+              v-model="form.remark"
+              placeholder="请输入备注"
+              type="textarea" />
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
     <template #footer>
+      <!-- eslint-disable-next-line vue/no-mutating-props -->
       <el-button @click="selfVisible = false">取 消</el-button>
       <el-button type="primary" @click="save">确 定</el-button>
     </template>
@@ -46,22 +63,18 @@
     props: {
       selfVisible: {
         type: Boolean,
-        default: false
+        default: false,
       },
       theTask: {
         type: Object,
-        default: {}
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: {},
       },
       doRefresh: {
         type: Function,
         default: undefined,
       },
     },
-    watch: {
-      selfVisible (val) {
-        this.$emit('update:selfVisible', val)
-      }
-    },
     data() {
       return {
         // 新增数据表单
@@ -70,7 +83,7 @@
           progDate: '',
           progDesc: '',
           progFile: '',
-          remark: ''
+          remark: '',
         },
         // 校验规则
         rules: {
@@ -80,6 +93,11 @@
         },
       }
     },
+    watch: {
+      selfVisible(val) {
+        this.$emit('update:selfVisible', val)
+      },
+    },
     methods: {
       // 打开弹窗
       open() {
@@ -98,6 +116,7 @@
         if (this.$refs['form']) {
           this.$refs['form'].resetFields()
         }
+        // eslint-disable-next-line vue/no-mutating-props
         this.selfVisible = false
       },
       // 查看附件
@@ -112,6 +131,7 @@
       save() {
         this.$refs['form'].validate(async (valid) => {
           if (valid) {
+            // eslint-disable-next-line vue/no-mutating-props
             this.selfVisible = false
             this.form.taskId = this.theTask.id
             const { msg } = await taskApi.createTaskProgress(this.form)
@@ -122,6 +142,6 @@
           }
         })
       },
-    }
+    },
   }
-</script>
+</script>

+ 109 - 35
src/views/plat/task/components/TaskAdd.vue

@@ -1,70 +1,126 @@
+<!-- eslint-disable vue/no-mutating-props -->
 <template>
   <el-dialog
     title="添加"
     :visible.sync="selfVisible"
     width="650px"
-    @open="open"
-    @close="close">
+    @close="close"
+    @open="open">
     <el-form ref="form" label-width="80px" :model="form" :rules="rules">
       <el-row>
         <el-col :span="12">
           <el-form-item label="标题" prop="taskTitle">
-            <el-input v-model="form.taskTitle" placeholder="请输入标题"/>
+            <el-input v-model="form.taskTitle" placeholder="请输入标题" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="类型" prop="taskType">
-            <el-select v-model="form.taskType" style="width: 100%;" placeholder="请选择类型">
-              <el-option v-for="item in types" :key="item.dictCode" :value="item.dictValue" :label="item.dictLabel" />
+            <el-select
+              v-model="form.taskType"
+              placeholder="请选择类型"
+              style="width: 100%">
+              <el-option
+                v-for="item in types"
+                :key="item.dictCode"
+                :label="item.dictLabel"
+                :value="item.dictValue" />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="开始时间" prop="taskStartDate">
-            <el-date-picker v-model="form.taskStartDate" style="width: 100%;" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择开始时间"/>
+            <el-date-picker
+              v-model="form.taskStartDate"
+              placeholder="请选择开始时间"
+              style="width: 100%"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="结束时间" prop="taskEndDate">
-            <el-date-picker v-model="form.taskEndDate" style="width: 100%;" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择结束时间"/>
+            <el-date-picker
+              v-model="form.taskEndDate"
+              placeholder="请选择结束时间"
+              style="width: 100%"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss" />
           </el-form-item>
         </el-col>
         <el-col :span="24">
           <el-form-item label="说明" prop="taskDesc">
-            <el-input type="textarea" v-model="form.taskDesc" placeholder="请输入说明"/>
+            <el-input
+              v-model="form.taskDesc"
+              placeholder="请输入说明"
+              type="textarea" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="督办人" prop="supervisorUserId">
-            <el-select v-model="form.supervisorUserId" style="width: 100%;" placeholder="请选择督办人">
-              <el-option v-for="item in users" :key="item.id" :value="item.id" :label="item.userName" />
+            <el-select
+              v-model="form.supervisorUserId"
+              placeholder="请选择督办人"
+              style="width: 100%">
+              <el-option
+                v-for="item in users"
+                :key="item.id"
+                :label="item.userName"
+                :value="item.id" />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="监办人" prop="watchUserId">
-            <el-select v-model="form.watchUserId" style="width: 100%;" placeholder="请选择监办人" clear>
-              <el-option v-for="item in users" :key="item.id" :value="item.id" :label="item.userName" />
+            <el-select
+              v-model="form.watchUserId"
+              clear
+              placeholder="请选择监办人"
+              style="width: 100%">
+              <el-option
+                v-for="item in users"
+                :key="item.id"
+                :label="item.userName"
+                :value="item.id" />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="负责人" prop="mainUserId">
-            <el-select v-model="form.mainUserId" style="width: 100%;" placeholder="请选择负责人">
-              <el-option v-for="item in users" :key="item.id" :value="item.id" :label="item.userName" />
+            <el-select
+              v-model="form.mainUserId"
+              placeholder="请选择负责人"
+              style="width: 100%">
+              <el-option
+                v-for="item in users"
+                :key="item.id"
+                :label="item.userName"
+                :value="item.id" />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="团队成员">
-            <el-select v-model="teamIds" style="width: 100%;" clear multiple placeholder="请选择团队成员">
-              <el-option v-for="item in users" :key="item.id" :value="item.id" :label="item.userName" />
+            <el-select
+              v-model="teamIds"
+              clear
+              multiple
+              placeholder="请选择团队成员"
+              style="width: 100%">
+              <el-option
+                v-for="item in users"
+                :key="item.id"
+                :label="item.userName"
+                :value="item.id" />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="关联类型" prop="targetType">
-            <el-select v-model="form.targetType" style="width: 100%;" @change="targetTypeChange" placeholder="请选择关联对象类型">
+            <el-select
+              v-model="form.targetType"
+              placeholder="请选择关联对象类型"
+              style="width: 100%"
+              @change="targetTypeChange">
               <el-option label="客户" value="10" />
               <el-option label="项目" value="20" />
               <el-option label="合同" value="30" />
@@ -74,19 +130,31 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="关联对象" prop="targetId">
-            <el-select v-model="form.targetId" style="width: 100%;" placeholder="请选择关联对象" @change="targetChange">
-              <el-option v-for="item in targets" :key="item.value" :value="item.value" :label="item.label" />
+            <el-select
+              v-model="form.targetId"
+              placeholder="请选择关联对象"
+              style="width: 100%"
+              @change="targetChange">
+              <el-option
+                v-for="item in targets"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value" />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="24">
           <el-form-item label="备注" prop="remark">
-            <el-input type="textarea" v-model="form.remark" placeholder="请输入备注"/>
+            <el-input
+              v-model="form.remark"
+              placeholder="请输入备注"
+              type="textarea" />
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
     <template #footer>
+      <!-- eslint-disable-next-line vue/no-mutating-props -->
       <el-button @click="selfVisible = false">取 消</el-button>
       <el-button type="primary" @click="save">确 定</el-button>
     </template>
@@ -102,26 +170,23 @@
     props: {
       selfVisible: {
         type: Boolean,
-        default: false
+        default: false,
       },
       users: {
         type: Array,
-        default: []
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: [],
       },
       types: {
         type: Array,
-        default: []
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: [],
       },
       doRefresh: {
         type: Function,
         default: undefined,
       },
     },
-    watch: {
-      selfVisible (val) {
-        this.$emit('update:selfVisible', val)
-      }
-    },
     data() {
       return {
         // 团队成员
@@ -147,7 +212,7 @@
           targetId: '',
           targetType: '',
           targetName: '',
-          remark: ''
+          remark: '',
         },
         // 校验规则
         rules: {
@@ -172,6 +237,11 @@
         },
       }
     },
+    watch: {
+      selfVisible(val) {
+        this.$emit('update:selfVisible', val)
+      },
+    },
     methods: {
       // 关联类型变化
       targetTypeChange() {
@@ -196,18 +266,20 @@
       // 获取基本数据
       getData() {
         this.customers = []
-        custApi.getList({targetType: '10'})
-          .then(res => {
+        custApi
+          .getList({ targetType: '10' })
+          .then((res) => {
             if (res.data.list) {
               for (let cust of res.data.list) {
                 let data = {
                   value: cust.id,
-                  label: cust.custName
+                  label: cust.custName,
                 }
                 this.customers.push(data)
               }
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
       },
@@ -240,6 +312,7 @@
         if (this.$refs['form']) {
           this.$refs['form'].resetFields()
         }
+        // eslint-disable-next-line vue/no-mutating-props
         this.selfVisible = false
       },
       // 保存数据
@@ -251,6 +324,7 @@
             } else {
               this.form.ownerUserId = ''
             }
+            // eslint-disable-next-line vue/no-mutating-props
             this.selfVisible = false
             const { msg } = await taskApi.createTask(this.form)
             this.$baseMessage(msg, 'success', 'vab-hey-message-success')
@@ -260,6 +334,6 @@
           }
         })
       },
-    }
+    },
   }
-</script>
+</script>

+ 151 - 69
src/views/plat/task/components/TaskDetail.vue

@@ -1,72 +1,138 @@
 <template>
   <div>
-    <el-dialog
-      title="督办事项"
-      :visible.sync="selfVisible"
-      @open="open">
+    <!-- eslint-disable-next-line vue/no-mutating-props, vue/no-mutating-props -->
+    <el-dialog title="督办事项" :visible.sync="selfVisible" @open="open">
       <el-row :gutter="20">
         <el-col :span="18">
-          <span style="font-size: 18px; margin-right: 10px;">{{theTask.taskTitle}}</span>
-          <el-button type="primary" v-show="theTask.isOverdue === '10'" @click="changeStatus('IsOverdue', '20')">超期</el-button>
-          <el-button type="primary" v-show="theTask.taskStatus === '10'" @click="changeStatus('TaskStatus', '20')">关闭</el-button>
-          <div style="border-bottom: solid 1px; margin-top: 1px;"></div>
-          <el-row :gutter="20" style="margin-top: 10px;">
-            <el-col :span="8">督办类型:{{typeMap[theTask.taskType]}}</el-col>
-            <el-col :span="8">状态:{{theTask.taskStatus === '10' ? '进行中' : '关闭'}}</el-col>
-            <el-col :span="8">超期:{{theTask.isOverdue === '10' ? '否' : '是'}}</el-col>
-            <el-col :span="8">开始时间:{{parseTime(theTask.taskStartDate)}}</el-col>
-            <el-col :span="8">结束时间:{{parseTime(theTask.taskEndDate)}}</el-col>
-            <el-col :span="24">说明:{{theTask.taskDesc}}</el-col>
-            <el-col :span="8">督办人:{{userMap[theTask.supervisorUserId]}}</el-col>
-            <el-col :span="8">监办人:{{userMap[theTask.watchUserId]}}</el-col>
-            <el-col :span="8">负责人:{{userMap[theTask.mainUserId]}}</el-col>
-            <el-col :span="16">团队成员:{{teamNames}}</el-col>
-            <el-col :span="8">关联类型:
+          <span style="font-size: 18px; margin-right: 10px">
+            {{ theTask.taskTitle }}
+          </span>
+          <el-button
+            v-show="theTask.isOverdue === '10'"
+            type="primary"
+            @click="changeStatus('IsOverdue', '20')">
+            超期
+          </el-button>
+          <el-button
+            v-show="theTask.taskStatus === '10'"
+            type="primary"
+            @click="changeStatus('TaskStatus', '20')">
+            关闭
+          </el-button>
+          <div style="border-bottom: solid 1px; margin-top: 1px"></div>
+          <el-row :gutter="20" style="margin-top: 10px">
+            <el-col :span="8">督办类型:{{ typeMap[theTask.taskType] }}</el-col>
+            <el-col :span="8">
+              状态:{{ theTask.taskStatus === '10' ? '进行中' : '关闭' }}
+            </el-col>
+            <el-col :span="8">
+              超期:{{ theTask.isOverdue === '10' ? '否' : '是' }}
+            </el-col>
+            <el-col :span="8">
+              开始时间:{{ parseTime(theTask.taskStartDate) }}
+            </el-col>
+            <el-col :span="8">
+              结束时间:{{ parseTime(theTask.taskEndDate) }}
+            </el-col>
+            <el-col :span="24">说明:{{ theTask.taskDesc }}</el-col>
+            <el-col :span="8">
+              督办人:{{ userMap[theTask.supervisorUserId] }}
+            </el-col>
+            <el-col :span="8">
+              监办人:{{ userMap[theTask.watchUserId] }}
+            </el-col>
+            <el-col :span="8">负责人:{{ userMap[theTask.mainUserId] }}</el-col>
+            <el-col :span="16">团队成员:{{ teamNames }}</el-col>
+            <el-col :span="8">
+              关联类型:
               <span v-show="theTask.targetType == '10'">客户</span>
               <span v-show="theTask.targetType == '20'">项目</span>
               <span v-show="theTask.targetType == '30'">合同</span>
               <span v-show="theTask.targetType == '40'">回款</span>
             </el-col>
-            <el-col :span="8">关联对象:{{theTask.targetName}}</el-col>
-            <el-col :span="8">创建人:{{theTask.createdName}}</el-col>
-            <el-col :span="8">创建时间:{{parseTime(theTask.createdTime)}}</el-col>
-            <el-col :span="24">备注:{{theTask.remark}}</el-col>
-            <el-button type="primary" v-show="theTask.taskStatus === '10'" @click="addProgress">添加进展</el-button>
+            <el-col :span="8">关联对象:{{ theTask.targetName }}</el-col>
+            <el-col :span="8">创建人:{{ theTask.createdName }}</el-col>
+            <el-col :span="8">
+              创建时间:{{ parseTime(theTask.createdTime) }}
+            </el-col>
+            <el-col :span="24">备注:{{ theTask.remark }}</el-col>
+            <el-button
+              v-show="theTask.taskStatus === '10'"
+              type="primary"
+              @click="addProgress">
+              添加进展
+            </el-button>
             <el-table border :data="progressList" height="440">
-              <el-table-column align="center" label="进展说明" prop="progDesc"></el-table-column>
+              <el-table-column
+                align="center"
+                label="进展说明"
+                prop="progDesc" />
               <el-table-column align="center" label="时间" prop="progDate">
                 <template #default="{ row }">
-                  {{parseTime(row.progDate)}}
+                  {{ parseTime(row.progDate) }}
                 </template>
               </el-table-column>
               <el-table-column align="center" label="附件" prop="progFile">
                 <template #default="{ row }">
-                  <el-link v-show="row.progFile != ''" @click="showFile(row.progFile)">查看附件</el-link>
+                  <el-link
+                    v-show="row.progFile != ''"
+                    @click="showFile(row.progFile)">
+                    查看附件
+                  </el-link>
                 </template>
               </el-table-column>
-              <el-table-column align="center" label="备注" prop="remark"></el-table-column>
+              <el-table-column align="center" label="备注" prop="remark" />
             </el-table>
           </el-row>
         </el-col>
         <el-col :span="6">
-          <el-button :type="rightInfo == 'log' ? 'primary' : 'none'" round @click="changeRightInfo('log')">流程动态</el-button>
-          <el-button :type="rightInfo == 'comment' ? 'primary' : 'none'" round @click="changeRightInfo('comment')">评论</el-button>
-          <div style="border-bottom: solid 1px; margin-top: 1px;"></div>
-          <div style="height: 560px; width: 100%;">
-            <div v-for="log in logList" :key="log.id" style="margin-top: 10px;" v-show="rightInfo == 'log'">
-              {{log.nodeName}}
-              <div style="margin-top: 5px;">
-                <span style="margin-top: 5px;">{{log.createdName}}</span><span style="float: right; margin-top: 5px;">{{log.desc}}</span>
-                <div style="margin-top: 5px;">开始处理:{{log.startTime}}</div>
-                <div style="margin-top: 5px;">完成处理:{{log.endTime}}</div>
+          <el-button
+            round
+            :type="rightInfo == 'log' ? 'primary' : 'none'"
+            @click="changeRightInfo('log')">
+            流程动态
+          </el-button>
+          <el-button
+            round
+            :type="rightInfo == 'comment' ? 'primary' : 'none'"
+            @click="changeRightInfo('comment')">
+            评论
+          </el-button>
+          <div style="border-bottom: solid 1px; margin-top: 1px"></div>
+          <div style="height: 560px; width: 100%">
+            <div
+              v-for="log in logList"
+              v-show="rightInfo == 'log'"
+              :key="log.id"
+              style="margin-top: 10px">
+              {{ log.nodeName }}
+              <div style="margin-top: 5px">
+                <span style="margin-top: 5px">{{ log.createdName }}</span>
+                <span style="float: right; margin-top: 5px">
+                  {{ log.desc }}
+                </span>
+                <div style="margin-top: 5px">开始处理:{{ log.startTime }}</div>
+                <div style="margin-top: 5px">完成处理:{{ log.endTime }}</div>
               </div>
             </div>
-            <el-button style="margin-top: 10px;" type="primary" v-show="rightInfo == 'comment'" @click="addComment">评论</el-button>
-            <div v-for="comment in commentList" :key="comment.id" style="margin-top: 10px;" v-show="rightInfo == 'comment'">
-              {{comment.createdName}}
-              <div style="margin-top: 5px;">
-                <span style="margin-top: 5px;">评论时间:{{comment.createdTime}}</span>
-                <div style="margin-top: 5px;">评论:{{comment.content}}</div>
+            <el-button
+              v-show="rightInfo == 'comment'"
+              style="margin-top: 10px"
+              type="primary"
+              @click="addComment">
+              评论
+            </el-button>
+            <div
+              v-for="comment in commentList"
+              v-show="rightInfo == 'comment'"
+              :key="comment.id"
+              style="margin-top: 10px">
+              {{ comment.createdName }}
+              <div style="margin-top: 5px">
+                <span style="margin-top: 5px">
+                  评论时间:{{ comment.createdTime }}
+                </span>
+                <div style="margin-top: 5px">评论:{{ comment.content }}</div>
               </div>
             </div>
           </div>
@@ -74,9 +140,15 @@
       </el-row>
     </el-dialog>
     <!-- 评论添加 -->
-    <commentAdd :theTask="theTask" :doRefresh="getCommentList" :selfVisible.sync="commentAddDialogVisible"></commentAdd>
+    <commentAdd
+      :do-refresh="getCommentList"
+      :self-visible.sync="commentAddDialogVisible"
+      :the-task="theTask" />
     <!-- 进展添加 -->
-    <progressAdd :theTask="theTask" :doRefresh="doRefreshProgressAndLogs" :selfVisible.sync="progressAddDialogVisible"></progressAdd>
+    <progressAdd
+      :do-refresh="doRefreshProgressAndLogs"
+      :self-visible.sync="progressAddDialogVisible"
+      :the-task="theTask" />
   </div>
 </template>
 
@@ -91,30 +163,28 @@
     props: {
       selfVisible: {
         type: Boolean,
-        default: false
+        default: false,
       },
       theTask: {
         type: Object,
-        default: {}
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: {},
       },
       userMap: {
         type: Object,
-        default: {}
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: {},
       },
       typeMap: {
         type: Object,
-        default: {}
+        // eslint-disable-next-line vue/require-valid-default-prop
+        default: {},
       },
       doRefresh: {
         type: Function,
         default: undefined,
       },
     },
-    watch: {
-      selfVisible (val) {
-        this.$emit('update:selfVisible', val)
-      }
-    },
     data() {
       return {
         // 进展新增弹窗
@@ -133,20 +203,26 @@
         commentList: [],
       }
     },
+    watch: {
+      selfVisible(val) {
+        this.$emit('update:selfVisible', val)
+      },
+    },
     methods: {
       // 改变督办状态
       changeStatus(type, status) {
         this.$confirm('确定修改督办状态?', '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
-          type: 'warning'
+          type: 'warning',
         }).then(async () => {
+          // eslint-disable-next-line vue/no-mutating-props
           this.selfVisible = false
           let data = {
             taskId: this.theTask.id + '',
             type: type,
             oldStatus: this.theTask.taskStatus,
-            nowStatus: status
+            nowStatus: status,
           }
           const { msg } = await taskApi.updateTaskStatus(data)
           this.$baseMessage(msg, 'success', 'vab-hey-message-success')
@@ -198,36 +274,42 @@
       // 获取进展信息
       getProgressList() {
         this.progressList = []
-        taskApi.getTaskProgressList({ taskId: this.theTask.id + '' })
-          .then(res => {
+        taskApi
+          .getTaskProgressList({ taskId: this.theTask.id + '' })
+          .then((res) => {
             if (res.data.list) {
               this.progressList = res.data.list
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
       },
       // 获取日志信息
       getLogList() {
         this.logList = []
-        taskApi.getTaskLogList({ taskId: this.theTask.id + '' })
-          .then(res => {
+        taskApi
+          .getTaskLogList({ taskId: this.theTask.id + '' })
+          .then((res) => {
             if (res.data.list) {
               this.logList = res.data.list
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
       },
       // 获取评论信息
       getCommentList() {
         this.commentList = []
-        taskApi.getTaskCommentList({ taskId: this.theTask.id + '' })
-          .then(res => {
+        taskApi
+          .getTaskCommentList({ taskId: this.theTask.id + '' })
+          .then((res) => {
             if (res.data.list) {
               this.commentList = res.data.list
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
       },
@@ -235,6 +317,6 @@
       changeRightInfo(info) {
         this.rightInfo = info
       },
-    }
+    },
   }
-</script>
+</script>

+ 89 - 39
src/views/plat/task/index.vue

@@ -3,45 +3,69 @@
     <el-row :gutter="20">
       <el-col :span="2">
         <span>操作类型</span>
-        <div style="margin-top: 25px; cursor: pointer;" @click="search('1')">
-          <i class="el-icon-message-solid" style="margin-right: 10px;"></i>我的待办({{statisticsForm.toDoNumber}})
+        <div style="margin-top: 25px; cursor: pointer" @click="search('1')">
+          <i class="el-icon-message-solid" style="margin-right: 10px"></i>
+          我的待办({{ statisticsForm.toDoNumber }})
         </div>
-        <div style="margin-top: 20px; cursor: pointer;" @click="search('2')">
-          <i class="el-icon-video-play" style="margin-right: 10px;"></i>我发起的({{statisticsForm.createNumber}})
+        <div style="margin-top: 20px; cursor: pointer" @click="search('2')">
+          <i class="el-icon-video-play" style="margin-right: 10px"></i>
+          我发起的({{ statisticsForm.createNumber }})
         </div>
-        <div style="margin-top: 20px; cursor: pointer;" @click="search('3')">
-          <i class="el-icon-folder-checked" style="margin-right: 10px;"></i>我处理的({{statisticsForm.completedNumber}})
+        <div style="margin-top: 20px; cursor: pointer" @click="search('3')">
+          <i class="el-icon-folder-checked" style="margin-right: 10px"></i>
+          我处理的({{ statisticsForm.completedNumber }})
         </div>
         <div style="margin-top: 50px">督办类型</div>
-        <div style="margin-top: 20px; cursor: pointer;" @click="searchType('')">
+        <div style="margin-top: 20px; cursor: pointer" @click="searchType('')">
           全部
         </div>
-        <div style="margin-top: 20px; cursor: pointer;" @click="searchType(item.dictValue)" v-for="item in types" :key="item.dictCode">
-          {{item.dictLabel}}
+        <div
+          v-for="item in types"
+          :key="item.dictCode"
+          style="margin-top: 20px; cursor: pointer"
+          @click="searchType(item.dictValue)">
+          {{ item.dictLabel }}
         </div>
       </el-col>
       <el-col :span="22">
-        <el-row :gutter="10" style="margin-bottom:10px">
+        <el-row :gutter="10" style="margin-bottom: 10px">
           <el-col :span="4">
-            <el-input v-model.trim="queryForm.taskTitle" clearable placeholder="请输入督办标题" />
+            <el-input
+              v-model.trim="queryForm.taskTitle"
+              clearable
+              placeholder="请输入督办标题" />
           </el-col>
           <el-col :span="12">
-            <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
-            <el-button icon="el-icon-refresh-right" @click="reset">重置</el-button>
+            <el-button icon="el-icon-search" type="primary" @click="queryData">
+              查询
+            </el-button>
+            <el-button icon="el-icon-refresh-right" @click="reset">
+              重置
+            </el-button>
           </el-col>
         </el-row>
         <vab-query-form>
           <vab-query-form-left-panel :span="12">
-            <el-button icon="el-icon-plus" type="primary" @click="handleAdd">添加</el-button>
+            <el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+              添加
+            </el-button>
           </vab-query-form-left-panel>
           <vab-query-form-right-panel :span="12">
-            <el-button icon="el-icon-download" @click="exportData"></el-button>
+            <el-button icon="el-icon-download" @click="exportData" />
             <table-tool :check-list.sync="checkList" :columns="columns" />
           </vab-query-form-right-panel>
         </vab-query-form>
         <!-- 主页面 -->
         <el-table v-loading="listLoading" border :data="list" :height="height">
-          <el-table-column v-for="(item, index) in finallyColumns" :key="index" align="center" :label="item.label" :prop="item.prop" show-overflow-tooltip :sortable="item.sortable" :width="item.width">
+          <el-table-column
+            v-for="(item, index) in finallyColumns"
+            :key="index"
+            align="center"
+            :label="item.label"
+            :prop="item.prop"
+            show-overflow-tooltip
+            :sortable="item.sortable"
+            :width="item.width">
             <template #default="{ row }">
               <span v-if="item.prop === 'taskType'">
                 {{ typeMap[row.taskType] }}
@@ -52,10 +76,18 @@
               <span v-else-if="item.prop === 'isOverdue'">
                 {{ row.isOverdue === '10' ? '否' : '是' }}
               </span>
-              <span v-else-if="item.prop === 'mainUserId' || item.prop === 'supervisorUserId'">
+              <span
+                v-else-if="
+                  item.prop === 'mainUserId' || item.prop === 'supervisorUserId'
+                ">
                 {{ userMap[row[item.prop]] }}
               </span>
-              <span v-else-if="item.prop === 'taskStartDate' || item.prop === 'taskEndDate' || item.prop === 'createdTime'">
+              <span
+                v-else-if="
+                  item.prop === 'taskStartDate' ||
+                  item.prop === 'taskEndDate' ||
+                  item.prop === 'createdTime'
+                ">
                 {{ parseTime(row[item.prop]) }}
               </span>
               <span v-else>{{ row[item.prop] }}</span>
@@ -83,9 +115,18 @@
       </el-col>
     </el-row>
     <!-- 新建督办 -->
-    <taskAdd :users="users" :types="types" :selfVisible.sync="addDialogVisible" :doRefresh="doRefresh"></taskAdd>
+    <taskAdd
+      :do-refresh="doRefresh"
+      :self-visible.sync="addDialogVisible"
+      :types="types"
+      :users="users" />
     <!-- 查看详情 -->
-    <taskDetail :theTask="theTask" :userMap="userMap" :typeMap="typeMap" :selfVisible.sync="detailDialogVisible" :doRefresh="doRefresh"></taskDetail>
+    <taskDetail
+      :do-refresh="doRefresh"
+      :self-visible.sync="detailDialogVisible"
+      :the-task="theTask"
+      :type-map="typeMap"
+      :user-map="userMap" />
   </div>
 </template>
 
@@ -107,7 +148,7 @@
         statisticsForm: {
           toDoNumber: 0,
           createNumber: 0,
-          completedNumber: 0
+          completedNumber: 0,
         },
         // 督办详情查看
         detailDialogVisible: false,
@@ -230,28 +271,31 @@
       },
       // 统计各类型督办数量
       statistics() {
-        taskApi.statisticsTaskNumber()
-          .then(res => {
+        taskApi
+          .statisticsTaskNumber()
+          .then((res) => {
             if (res.data.list) {
               this.statisticsForm = res.data.list
             }
-          }).catch(err => {
-            console.error()
+          })
+          .catch((err) => {
+            console.error(err)
           })
       },
       // 数据导出
       exportData() {
         let exportFrom = JSON.parse(JSON.stringify(this.queryForm))
-        exportFrom.columns = this.finallyColumns.map(item => item.label)
-        taskApi.exportTasks(exportFrom)
-          .then(res => {
+        exportFrom.columns = this.finallyColumns.map((item) => item.label)
+        taskApi
+          .exportTasks(exportFrom)
+          .then((res) => {
             if (res.data.list.content) {
               downloadFileByByte(res.data.list.content, '督办数据.xlsx')
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
-        console.info(this.finallyColumns.map(item => item.label))
       },
       // 重置查询数据
       reset() {
@@ -289,26 +333,30 @@
       },
       // 初始化数据
       async initData() {
-        await dictApi.getDictDataList({dictType: 'TaskType'})
-          .then(res => {
+        await dictApi
+          .getDictDataList({ dictType: 'TaskType' })
+          .then((res) => {
             if (res.data.list) {
               this.types = res.data.list
               for (let type of this.types) {
                 this.typeMap[type.dictValue] = type.dictLabel
               }
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
-        await userApi.getList()
-          .then(res => {
+        await userApi
+          .getList()
+          .then((res) => {
             if (res.data.list) {
               this.users = res.data.list
               for (let user of this.users) {
                 this.userMap[user.id] = user.userName
               }
             }
-          }).catch(err => {
+          })
+          .catch((err) => {
             console.error(err)
           })
       },
@@ -340,14 +388,16 @@
       fetchData() {
         this.listLoading = true
         this.list = []
-        taskApi.getTaskList(this.queryForm)
-          .then(res => {
+        taskApi
+          .getTaskList(this.queryForm)
+          .then((res) => {
             if (res.data.list) {
               this.list = res.data.list
             }
             this.total = res.data.total
             this.listLoading = false
-          }).catch(err => {
+          })
+          .catch((err) => {
             this.listLoading = false
             console.error(err)
           })