瀏覽代碼

迭代八数据填报:实现巡查任务下的已完成页面和未完成页面及接口(部门树传参还有些问题)

zhangyihao 6 月之前
父節點
當前提交
48b2a77329

+ 20 - 0
src/api/inspectionWork/inspector.ts

@@ -147,3 +147,23 @@ export function fileDownload(url) {
     params: url
   });
 }
+// 查询巡查已完成果列表
+export function patrolNum(children_task_id, queryParams) {
+  return request({
+    url: '/api/riskManagement/inspection/task/children/task/log/' + children_task_id + '/' + 'completed' + '/list',
+    method: 'get',
+    params: {
+      area_code: queryParams.area_code
+    }
+  });
+}
+// 查询巡查未完成果列表
+export function patrolNum_1(children_task_id, queryParams) {
+  return request({
+    url: '/api/riskManagement/inspection/task/children/task/log/' + children_task_id + '/' + 'incomplete' + '/list',
+    method: 'get',
+    params: {
+      area_code: queryParams.area_code
+    }
+  });
+}

+ 138 - 0
src/views/inspectionWork/completed.vue

@@ -0,0 +1,138 @@
+<template>
+  <el-dialog v-model="showSearch" title="已完成" width="80%" @close="$emit('close')">
+    <el-row :gutter="20">
+      <el-col :lg="4" :xs="24">
+        <el-tree
+          ref="deptTreeRef"
+          class="mt-2"
+          node-key="id"
+          :data="deptOptions"
+          :props="{ label: 'label', children: 'children' }"
+          :expand-on-click-node="false"
+          :filter-node-method="filterNode"
+          highlight-current
+          default-expand-all
+          @node-click="handleNodeClick"
+        />
+      </el-col>
+      <el-col :lg="20" :xs="24">
+        <transition name="fade">
+          <div v-show="showSearch">
+            <el-form ref="queryFormRef" :model="queryParams">
+              <el-button type="primary" @click="handleExport">导出</el-button>
+            </el-form>
+          </div>
+        </transition>
+        <el-table ref="multipleTable" v-loading="loading" :data="tableData" @selection-change="handleSelectionChange">
+          <el-table-column label="排查范围" align="center" prop="area" />
+          <el-table-column label="任务进度" align="center" prop="task_status">
+            <!-- 使用自定义槽来渲染转换后的文本 -->
+            <template #default="scope">
+              {{ formatStatus(scope.row.task_status) }}
+            </template>
+          </el-table-column>
+          <el-table-column label="巡查人员" align="center" prop="nick_name" />
+          <el-table-column label="上报时间" align="center" prop="create_time" />
+        </el-table>
+      </el-col>
+    </el-row>
+  </el-dialog>
+</template>
+
+<script setup lang="ts">
+import { onMounted, reactive, ref, watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { deptList, patrolNum } from '@/api/inspectionWork/inspector';
+
+const router = useRouter();
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<number | string>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const deptOptions = ref([]);
+const deptTreeRef = ref(null);
+const tableData = ref([]);
+const props = defineProps<{ eventId: string }>();
+
+const initFormData = reactive({
+  area: '',
+  task_status: '',
+  yzy_organization: '',
+  nick_name: '',
+  create_time: ''
+});
+
+const data = reactive({
+  form: { ...initFormData },
+  queryParams: {
+    area_code: '',
+    deptId: ''
+  }
+});
+
+const { queryParams, form } = toRefs(data);
+
+const formatStatus = (status) => {
+  return Number(status) === 1 ? '已完成' : '未完成';
+};
+
+const filterNode = (value: string, data: any) => {
+  if (!value) return true;
+  return data.label.indexOf(value) !== -1;
+};
+
+const getTreeSelect = async () => {
+  const res = await deptList();
+  deptOptions.value = res.data; // 直接赋值给 deptOptions
+  queryParams.value.area_code = res.data.code;
+  loading.value = false; // 加载完成后关闭加载提示
+};
+
+const fetchUserData = async () => {
+  loading.value = true; // 开始加载
+  return patrolNum(props.eventId, queryParams.value)
+    .then((res) => {
+      if (res.code === 200) {
+        tableData.value = res.data; // 确保tableData是一个数组
+        total.value = res.total;
+      } else {
+        console.error(res.msg);
+      }
+      loading.value = false; // 结束加载
+    })
+    .catch((error) => {
+      console.error('Error fetching sub tasks:', error);
+      loading.value = false; // 结束加载
+    });
+};
+
+watch(queryParams, () => {
+  fetchUserData();
+});
+
+const handleNodeClick = (data: any) => {
+  queryParams.value.deptId = data.id;
+  fetchUserData();
+};
+
+const handleSelectionChange = (selection) => {
+  ids.value = selection.map((item) => item.id);
+};
+
+onMounted(async () => {
+  await getTreeSelect();
+  fetchUserData();
+});
+</script>
+
+<style scoped>
+.mt-2 {
+  max-width: 300px; /* 设置最大宽度 */
+  max-height: 800px; /* 设置最大高度 */
+  overflow-y: auto; /* 如果内容超出高度则显示滚动条 */
+}
+</style>

+ 138 - 0
src/views/inspectionWork/incompleted.vue

@@ -0,0 +1,138 @@
+<template>
+  <el-dialog v-model="showSearch" title="未完成" width="80%" @close="$emit('close')">
+    <el-row :gutter="20">
+      <el-col :lg="4" :xs="24">
+        <el-tree
+          ref="deptTreeRef"
+          class="mt-2"
+          node-key="id"
+          :data="deptOptions"
+          :props="{ label: 'label', children: 'children' }"
+          :expand-on-click-node="false"
+          :filter-node-method="filterNode"
+          highlight-current
+          default-expand-all
+          @node-click="handleNodeClick"
+        />
+      </el-col>
+      <el-col :lg="20" :xs="24">
+        <transition name="fade">
+          <div v-show="showSearch">
+            <el-form ref="queryFormRef" :model="queryParams">
+              <el-button type="primary" @click="handleExport">导出</el-button>
+            </el-form>
+          </div>
+        </transition>
+        <el-table ref="multipleTable" v-loading="loading" :data="tableData" @selection-change="handleSelectionChange">
+          <el-table-column label="排查范围" align="center" prop="area" />
+          <el-table-column label="任务进度" align="center" prop="task_status">
+            <!-- 使用自定义槽来渲染转换后的文本 -->
+            <template #default="scope">
+              {{ formatStatus(scope.row.task_status) }}
+            </template>
+          </el-table-column>
+          <el-table-column label="巡查人员" align="center" prop="nick_name" />
+          <el-table-column label="上报时间" align="center" prop="create_time" />
+        </el-table>
+      </el-col>
+    </el-row>
+  </el-dialog>
+</template>
+
+<script setup lang="ts">
+import { onMounted, reactive, ref, watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { deptList, patrolNum_1 } from '@/api/inspectionWork/inspector';
+
+const router = useRouter();
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<number | string>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const deptOptions = ref([]);
+const deptTreeRef = ref(null);
+const tableData = ref([]);
+const props = defineProps<{ eventId: string }>();
+
+const initFormData = reactive({
+  area: '',
+  task_status: '',
+  yzy_organization: '',
+  nick_name: '',
+  create_time: ''
+});
+
+const data = reactive({
+  form: { ...initFormData },
+  queryParams: {
+    area_code: '',
+    deptId: ''
+  }
+});
+
+const { queryParams, form } = toRefs(data);
+
+const formatStatus = (status) => {
+  return Number(status) === 1 ? '已完成' : '未完成';
+};
+
+const filterNode = (value: string, data: any) => {
+  if (!value) return true;
+  return data.label.indexOf(value) !== -1;
+};
+
+const getTreeSelect = async () => {
+  const res = await deptList();
+  deptOptions.value = res.data; // 直接赋值给 deptOptions
+  queryParams.value.area_code = res.data.code;
+  loading.value = false; // 加载完成后关闭加载提示
+};
+
+const fetchUserData = async () => {
+  loading.value = true; // 开始加载
+  return patrolNum_1(props.eventId, queryParams.value)
+    .then((res) => {
+      if (res.code === 200) {
+        tableData.value = res.data; // 确保tableData是一个数组
+        total.value = res.total;
+      } else {
+        console.error(res.msg);
+      }
+      loading.value = false; // 结束加载
+    })
+    .catch((error) => {
+      console.error('Error fetching sub tasks:', error);
+      loading.value = false; // 结束加载
+    });
+};
+
+watch(queryParams, () => {
+  fetchUserData();
+});
+
+const handleNodeClick = (data: any) => {
+  queryParams.value.deptId = data.id;
+  fetchUserData();
+};
+
+const handleSelectionChange = (selection) => {
+  ids.value = selection.map((item) => item.id);
+};
+
+onMounted(async () => {
+  await getTreeSelect();
+  fetchUserData();
+});
+</script>
+
+<style scoped>
+.mt-2 {
+  max-width: 300px; /* 设置最大宽度 */
+  max-height: 800px; /* 设置最大高度 */
+  overflow-y: auto; /* 如果内容超出高度则显示滚动条 */
+}
+</style>

+ 36 - 2
src/views/inspectionWork/patrolSubTasks.vue

@@ -47,8 +47,16 @@
             <el-table-column label="巡查周期" align="center" :formatter="(row) => cycleMap[row.cycle]" />
             <el-table-column label="巡查范围" align="center" :formatter="(row) => inspectionRangeMap[row.inspection_range]" />
             <el-table-column label="执行日期" align="center" prop="create_time" />
-            <el-table-column label="已完成" align="center" prop="completed_num" />
-            <el-table-column label="未完成" align="center" prop="incomplete_num" />
+            <el-table-column label="已完成" align="center" prop="completed_num">
+              <template #default="scope">
+                <el-text class="common-btn-text-primary" @click="handleCompletedClick(scope.row)">{{ scope.row.completed_num }}</el-text>
+              </template>
+            </el-table-column>
+            <el-table-column label="未完成" align="center" prop="incomplete_num">
+            <template #default="scope">
+              <el-text class="common-btn-text-primary" @click="handleIncompletedClick(scope.row)">{{ scope.row.incomplete_num }}</el-text>
+            </template>
+            </el-table-column>
             <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
               <template #default="scope">
                 <el-text class="common-btn-text-primary" @click="handleResult(scope.row)">巡查结果</el-text>
@@ -68,6 +76,8 @@
   </div>
   <PatrolSubResult v-if="patrolSubResultState.show" :event-id="patrolSubResultState.eventId" @close="handleCancel" />
   <PatrolTaskEdit v-if="patrolTaskEditState.show" :event-id="patrolTaskEditState.eventId" @close="handleCancel" @refresh-parent="refreshBoth" />
+  <Completed v-if="completedState.show" :event-id="completedState.eventId" @close="handleCancel" />
+  <Incompleted v-if="incompletedState.show" :event-id="incompletedState.eventId" @close="handleCancel" />
 </template>
 <script setup lang="ts">
 import { workDetail, workSubList, updatetask, deleteRisk } from '@/api/inspectionWork/inspector';
@@ -75,6 +85,8 @@ import { reactive, ref } from 'vue';
 import { ElMessageBox } from 'element-plus';
 import PatrolSubResult from './patrolSubResult.vue';
 import PatrolTaskEdit from './patrolTaskEdit.vue';
+import Completed from './completed.vue';
+import Incompleted from './incompleted.vue';
 import { to } from 'await-to-js';
 const props = defineProps<{ eventId: string }>();
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -150,9 +162,19 @@ let patrolSubResultState = reactive({
   show: false,
   eventId: ''
 });
+let completedState = reactive({
+  show: false,
+  eventId: ''
+});
+let incompletedState = reactive({
+  show: false,
+  eventId: ''
+});
 const handleCancel = () => {
   patrolTaskEditState.show = false;
   patrolSubResultState.show = false;
+  completedState.show = false;
+  incompletedState.show = false;
 };
 const handleUpdate = () => {
   patrolTaskEditState.eventId = props.eventId; // 假设eventId是id字段
@@ -164,6 +186,18 @@ const handleResult = (row) => {
     patrolSubResultState.show = true;
   }
 };
+const handleCompletedClick = (row) => {
+  if (row) {
+    completedState.eventId = row.id; // 假设eventId是id字段
+    completedState.show = true;
+  }
+};
+const handleIncompletedClick = (row) => {
+  if (row) {
+    incompletedState.eventId = row.id; // 假设eventId是id字段
+    incompletedState.show = true;
+  }
+};
 const loading = ref(false);
 const fetchWorkDetail = () => {
   loading.value = true;