Browse Source

fix: 任务管理调整

zhangying 8 months ago
parent
commit
c836b72a4a

+ 2 - 4
h5app/src/views/pages/work/task/edit.vue

@@ -147,10 +147,8 @@ export default defineComponent({
     const bodyLoading = ref(false);
     const workTaskRules = computed(() => {
       return {dataModel:{
-          doTaskName:{required},
-          workTypeID:{required},
-          content:{required},
-          finishTime:{required},
+          completeTime: {required},
+          taskStatus: {required},
           completeDesc:{required},
         }}});
     const workTaskValid = useVuelidate(workTaskRules, workTaskData);

+ 2 - 0
src/main/java/com/hz/employmentsite/vo/taskAndLog/DoTaskVo.java

@@ -31,6 +31,8 @@ public class DoTaskVo {
 
     public int userCount;
 
+    public int completeCount;
+
     public String workTypeName;
 
     public String regionName;

+ 57 - 20
src/main/resources/mapping/cquery/DoTaskCQuery.xml

@@ -2,26 +2,63 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.hz.employmentsite.mapper.cquery.DoTaskCQuery">
     <select id="getList" resultType="com.hz.employmentsite.vo.taskAndLog.DoTaskVo">
-        select task.dotaskID,task.siteID,task.workTypeID,task.content,task.dotaskName,task.CreateUserID as createUserID, u.`Name` as
-        createName,task.finishTime,task.createTime,task.modifyTime,
-        task.taskStatus,dic_taskStatus.Name as taskStatusName,
-        (select count(*) from pc_dotask_user du where du.DotaskID = task.DotaskID group by task.DotaskID)as userCount,
-        city.`name` as regionName,
-        area.`name` as streetName,item.`Name` as
-        workTypeName,task.regionCode,task.streetCode,doTaskUser.siteUserID,doTaskUser.completeDesc,
-        modifyUser.Name as modifyUserName
-        , task.taskLevel,dic_taskLevel.name as taskLevelName
-        from pc_dotask task
-        left join pc_dotask_user doTaskUser on task.dotaskID = doTaskUser.dotaskID and doTaskUser.doTaskUserID != null
-        left join sys_dictionary_item item on item.`Value` = task.WorkTypeID
-        left join (select * from sys_dictionary_item where DictionaryCode ='TaskStatusType') dic_taskStatus on
-        dic_taskStatus.`Value` = task.taskStatus
-        left join sys_user u on u.UserID = task.CreateUserID
-        left join area_code city on city.`code` = task.RegionCode
-        left join area_code area on area.`code` = task.StreetCode
-        left join sys_user modifyUser on task.ModifyUserID = modifyUser.UserID
-        left join sys_dictionary_item dic_taskLevel on task.taskLevel = dic_taskLevel.value and dic_taskLevel.DictionaryCode = 'TaskLevel'
-        where item.DictionaryCode='TaskType'
+        SELECT
+            task.dotaskID,
+            task.siteID,
+            task.workTypeID,
+            task.content,
+            task.dotaskName,
+            task.CreateUserID AS createUserID,
+            u.`Name` AS createName,
+            task.finishTime,
+            task.createTime,
+            task.modifyTime,
+            task.taskStatus,
+            dic_taskStatus.NAME AS taskStatusName,
+            userCounts.userCount,
+            completeCounts.completeCount,
+            city.`name` AS regionName,
+            area.`name` AS streetName,
+            item.`Name` AS workTypeName,
+            task.regionCode,
+            task.streetCode,
+            doTaskUser.siteUserID,
+            doTaskUser.completeDesc,
+            modifyUser.NAME AS modifyUserName,
+            task.taskLevel,
+            dic_taskLevel.NAME AS taskLevelName
+        FROM
+        pc_dotask task
+            LEFT JOIN (
+                SELECT
+                    dotaskID,
+                    COUNT(1) AS userCount
+                FROM
+                    pc_dotask_user
+                GROUP BY
+                    dotaskID
+            ) AS userCounts ON task.dotaskID = userCounts.dotaskID
+            LEFT JOIN (
+                SELECT
+                    dotaskID,
+                    COUNT(1) AS completeCount
+                FROM
+                    pc_dotask_user
+                WHERE
+                    UserTaskStatus = 1
+                GROUP BY
+                    dotaskID
+            ) AS completeCounts ON task.dotaskID = completeCounts.dotaskID
+            LEFT JOIN pc_dotask_user doTaskUser ON task.dotaskID = doTaskUser.dotaskID AND doTaskUser.doTaskUserID != NULL
+            LEFT JOIN sys_dictionary_item item ON item.`Value` = task.WorkTypeID AND item.DictionaryCode = 'TaskType'
+            LEFT JOIN sys_dictionary_item dic_taskStatus ON dic_taskStatus.`Value` = task.taskStatus AND dic_taskStatus.DictionaryCode = 'TaskStatusType'
+            LEFT JOIN sys_user u ON u.UserID = task.CreateUserID
+            LEFT JOIN area_code city ON city.`code` = task.RegionCode
+            LEFT JOIN area_code area ON area.`code` = task.StreetCode
+            LEFT JOIN sys_user modifyUser ON task.ModifyUserID = modifyUser.UserID
+            LEFT JOIN sys_dictionary_item dic_taskLevel ON task.taskLevel = dic_taskLevel.`Value` AND dic_taskLevel.DictionaryCode = 'TaskLevel'
+        where
+            1=1
         <if test="doTaskIDList != '' and doTaskIDList != null">
             and task.dotaskID in (${doTaskIDList})
         </if>

+ 46 - 29
vue/src/views/taskAndLog/dotask/index.vue

@@ -8,15 +8,22 @@
           </a-form-item>
         </a-col>
         <a-col :span="6">
-          <a-form-item :label-col="{span:6}" label="下达时间" name="orderDate">
+          <a-form-item :label-col="{span:6}" label="发布时间" name="orderDate">
             <a-range-picker v-model:value="orderDate" :placeholder="['开始日期', '结束日期']" format="YYYY-MM-DD"
                             @change="onRangeChange"/>
           </a-form-item>
         </a-col>
         <a-col :span="6">
-          <a-form-item :label-col="{span:6}" label="完成时间" name="finishDate">
-            <a-range-picker v-model:value="finishDate" :placeholder="['开始日期', '结束日期']" format="YYYY-MM-DD"
-                            @change="onFinishChange"/>
+          <a-form-item :label-col="{span:6}" label="所属县区" name="regionCode">
+            <a-select
+              ref="select"
+              v-model:value="searchParams.regionCode"
+              :allow-clear="true"
+              :field-names="{ label: 'name', value: 'code' }"
+              :options="regionList"
+              @change="changeCity"
+            >
+            </a-select>
           </a-form-item>
         </a-col>
         <a-col :span="6" style="text-align: left">
@@ -34,19 +41,6 @@
         </a-col>
       </a-row>
       <a-row v-show="expand" :gutter="24">
-        <a-col :span="6">
-          <a-form-item :label-col="{span:6}" label="所属县区" name="regionCode">
-            <a-select
-              ref="select"
-              v-model:value="searchParams.regionCode"
-              :allow-clear="true"
-              :field-names="{ label: 'name', value: 'code' }"
-              :options="regionList"
-              @change="changeCity"
-            >
-            </a-select>
-          </a-form-item>
-        </a-col>
         <a-col :span="6">
           <a-form-item :label-col="{span:6}" label="任务类型" name="workTypeId">
             <a-select
@@ -61,10 +55,8 @@
           </a-form-item>
         </a-col>
         <a-col :span="6">
-          <a-form-item label="登记时间" :label-col="{ span: 6 }" name="isAccomplish">
-            <a-range-picker v-model:value="createDate" :placeholder="['开始日期', '结束日期']" format="YYYY-MM-DD"
-                            @change="onCreateTimeChange"/>
-          </a-form-item>
+        </a-col>
+        <a-col :span="6">
         </a-col>
       </a-row>
       <a-row class="edit-operation">
@@ -92,6 +84,11 @@
                bordered
                @change="handleTableChange">
         <template #bodyCell="{ column, text, record }">
+          <template v-if="column.key === 'completeProgress'">
+            <div :style="{ color: getProgressColor(computeProgress(record)) }">
+              {{ computeProgress(record) }}%
+            </div>
+          </template>
           <template v-if="column.key === 'operation'">
             <div class="table-operation">
               <a-button functioncode="T01040101" size="small" type="link" @click='onDetail(record)'>查看</a-button>
@@ -154,6 +151,7 @@ export default defineComponent({
     const originalColumns = [
       {
         title: '序号',
+        width: 120,
         align: "center",
         key: 'institutionID',
         customRender: item => `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`,
@@ -161,19 +159,16 @@ export default defineComponent({
       },
       {title: '任务名称', dataIndex: 'doTaskName', key: 'doTaskName', align: "center"},
       {title: '任务类型', dataIndex: 'workTypeName', key: 'workTypeName', width: 120, align: "center"},
+      {title: '发布县区', dataIndex: 'regionName', key: 'regionName', align: "center"},
       {
-        title: '任务完成时间', dataIndex: 'finishTime', key: 'finishTime', align: "center", customRender: (item) => {
-          return item.record.finishTime == null ? "" : (dayjs(item.record.finishTime).format('YYYY-MM-DD'))
-        }
+        title: '完成进度', dataIndex: 'completeProgress', key: 'completeProgress', width: 120, align: "center"
       },
-      {title: '所属县区', dataIndex: 'regionName', key: 'regionName', align: "center"},
-      {title: '执行用户数', dataIndex: 'userCount', key: 'userCount', align: "center"},
       {
-        title: '下达时间', dataIndex: 'createTime', key: 'createTime', align: "center", customRender: (item) => {
+        title: '发布时间', dataIndex: 'createTime', key: 'createTime', align: "center", customRender: (item) => {
           return item.record.createTime == null ? "" : (dayjs(item.record.createTime).format('YYYY-MM-DD'))
         }
       },
-      {title: '下达人', dataIndex: 'createName', key: 'createName', align: "center", isDefaultClose: true},
+      {title: '发布人', dataIndex: 'createName', key: 'createName', align: "center", isDefaultClose: false},
       {title: '操作', key: 'operation', fixed: 'right', width: 150, align: "center", isDisabled: true},
     ];
     // 响应式表格定义
@@ -317,6 +312,26 @@ export default defineComponent({
       columns.value = originalColumns.filter((item: any) => columnsKeys.includes(item.key));
     }
 
+    // 计算完成度
+    function computeProgress(record: any) {
+      if (record.completeCount == 0) {
+        return 0;
+      }
+      let num: number = record.completeCount / record.userCount;
+      return (Number(num) * 100).toFixed(2);
+    }
+
+    // 按进度显示时间
+    function getProgressColor(progress: any) {
+      if (progress < 30) {
+        return 'red';
+      } else if (progress >= 30 && progress < 80) {
+        return 'yellow';
+      } else {
+        return 'green';
+      }
+    }
+
     return {
       expand,
       orderDate,
@@ -347,7 +362,9 @@ export default defineComponent({
       onDetail,
       exportSearchParams,
       onCreateTimeChange,
-      createDate
+      createDate,
+      computeProgress,
+      getProgressColor
     };
   },
   created() {