riku
2025-07-23 fe7fd6e4b1450c01faba724bb22b1d050e896c92
src/views/fysp/task/TaskManage.vue
@@ -39,19 +39,29 @@
          <el-tabs model-value="first">
            <el-tab-pane label="监管计划" name="first">
              <el-row>
                <el-col :span="curSubTaskList.length > 0 ? 16 : 24">
                <el-col :span="curSubTaskList ? 16 : 24">
                  <CompMonitorPlan
                    ref="planRef"
                    :task="curTask.data"
                    :day-task-list="curDayTaskList"
                    @date-change="onDateChange"
                  ></CompMonitorPlan>
                </el-col>
                <el-col v-if="curSubTaskList.length > 0" :span="8">
                  <CompSubTaskList :data="curSubTaskList" height="56vh"></CompSubTaskList>
                <el-col v-if="curSubTaskList" :span="8">
                  <CompSubTaskList
                    create
                    v-model="curSubTaskList"
                    :loading="subTaskLoading"
                    :create-loading="daytaskCreateLoading"
                    height="56vh"
                    @add="handleAddSubtask"
                    @submit="handleSubtaskSubmit"
                  ></CompSubTaskList>
                </el-col>
              </el-row>
            </el-tab-pane>
            <el-tab-pane label="监管地图" name="second">
              <CompTaskMap></CompTaskMap>
              <CompTaskMap :plans="curMonitorObjList"></CompTaskMap>
            </el-tab-pane>
          </el-tabs>
        </el-row>
@@ -87,6 +97,7 @@
    <CompDayTask
      :day-task="curDayTask"
      :mObjList="curMonitorObjList"
      @submit="handleSubtaskSubmit"
    ></CompDayTask>
  </el-drawer>
  <el-dialog
@@ -106,6 +117,9 @@
</template>
<script>
import { unref } from 'vue';
import { useCloned } from '@vueuse/core';
import dayjs from 'dayjs';
import taskApi from '@/api/fysp/taskApi';
import CompMonitorObj from './components/CompMonitorObj.vue';
import CompMonitorPlan from './components/CompMonitorPlan.vue';
@@ -154,6 +168,9 @@
      showMonitorObjList: [],
      //当前选中的任务
      curTask: {},
      //当前选中的日任务
      curDayTaskList: [],
      daytaskLoading: false,
      //操作按钮
      buttons: [
        {
@@ -172,19 +189,36 @@
      subTaskDrawer: false,
      // 当前选择的日任务
      curDayTask: {},
      curDay: undefined,
      daytaskCreateLoading: false,
      // 当前选择的日任务下的子任务
      curSubTaskList: [],
      curSubTaskList: undefined,
      subTaskLoading: false,
      // 总任务新增弹出框
      topTaskAddVisible: false
    };
  },
  provide() {
    return {
      topTask: this.curTask
    };
  },
  computed: {
    // 总任务状态统计
    taskStatus() {
      let total = 0,
        inspected = 0;
      this.curMonitorObjList.forEach((obj) => {
        total += parseInt(obj.monitornum);
        inspected += obj.extension1 ? parseInt(obj.extension1) : 0;
      });
      return [
        { name: '场景数', value: 100 },
        { name: '未巡查', value: 0 },
        { name: '已巡查', value: 0 }
        { name: '场景数', value: total },
        {
          name: '未巡查',
          value: total - inspected > 0 ? total - inspected : 0
        },
        { name: '已巡查', value: inspected }
      ];
    }
  },
@@ -219,10 +253,10 @@
          type = 0;
          break;
        case '正在执行':
          type = 1;
          type = 5;
          break;
        case '已结束':
          type = 2;
          type = 6;
          break;
        default:
          type = 0;
@@ -234,15 +268,27 @@
      this.task = task;
      this.sideLoading = false;
      this.mainLoading = true;
      this.curSubTaskList = undefined;
      this.curTask = task;
      taskApi
        .fetchMonitorObjectVersion(task.data.tguid)
        .then((res) => {
          this.curMonitorObjList = res;
          this.curTask = task;
        })
        .finally(() => {
          this.mainLoading = false;
          this.fetchDayTasks();
        });
    },
    fetchDayTasks() {
      // 获取日任务统计信息
      this.dayTaskLoading = true;
      return taskApi
        .fetchDayTasks(this.curTask.data.tguid)
        .then((res) => {
          this.curDayTaskList = res;
        })
        .finally(() => (this.dayTaskLoading = false));
    },
    editTask() {
      this.$router.push({
@@ -262,12 +308,22 @@
        }
      });
    },
    onDateChange(dayTask) {
      // this.subTaskDrawer = true;
      this.curDayTask = dayTask;
      taskApi.fetchSubtaskByDayTask(dayTask.guid).then((res) => {
        this.curSubTaskList = res;
      });
    onDateChange(dayTask, day) {
      this.curDay = day;
      if (dayTask) {
        this.subTaskLoading = true;
        // this.subTaskDrawer = true;
        this.curDayTask = dayTask;
        taskApi
          .fetchSubtaskByDayTask(dayTask.guid)
          .then((res) => {
            this.curSubTaskList = res;
          })
          .finally(() => (this.subTaskLoading = false));
      } else {
        this.curSubTaskList = [];
        this.curDayTask = {};
      }
    },
    navToTaskCreate(value) {
      this.topTaskAddVisible = false;
@@ -277,6 +333,49 @@
          task: encodeURIComponent(JSON.stringify(value))
        }
      });
    },
    handleSubtaskSubmit() {
      this.subTaskLoading = true;
      this.$refs.planRef
        .fetchDayTasks()
        .finally(() => (this.subTaskLoading = false));
    },
    handleAddSubtask() {
      // 判断当日是否有日任务,若没有,先创建在跳转子任务创建界面
      if (this.curDayTask.guid) {
        this.subTaskDrawer = true;
      } else {
        const _dayTask = useCloned(this.curTask.data).cloned.value;
        const taskDate = dayjs(this.curDay);
        _dayTask.tsguid = _dayTask.tguid;
        _dayTask.tguid = null;
        _dayTask.levelnum = null;
        _dayTask.name = `${taskDate.format('YYYY年MM月DD日')}${
          _dayTask.cityname
        }${_dayTask.districtname}${_dayTask.typename}任务`;
        _dayTask.starttime = taskDate.startOf('day').toDate();
        _dayTask.endtime = taskDate.endOf('day').millisecond(0).toDate();
        _dayTask.settime = dayjs().toDate();
        _dayTask.t1stverifytime = dayjs().toDate();
        _dayTask.runingstatus = '未执行';
        this.daytaskCreateLoading = true;
        taskApi
          .putTask(_dayTask)
          .then((res) => {
            this.curDayTask = {
              guid: res.data.tguid,
              tsGuid: res.data.tsguid,
              changedTaskNum: 0,
              check: true,
              completeTaskNum: 0,
              date: res.data.starttime,
              totalTaskNum: 0
            };
            this.subTaskDrawer = true;
            this.handleSubtaskSubmit();
          })
          .finally(() => (this.daytaskCreateLoading = false));
      }
    }
  },
  mounted() {