更新功能

This commit is contained in:
13684185576
2025-11-05 09:32:01 +08:00
parent e4dd119b5d
commit d127865f14
2 changed files with 207 additions and 208 deletions

View File

@ -4,25 +4,14 @@
<div class="head_box"> <div class="head_box">
<span class="title">{{ title }}</span> <span class="title">{{ title }}</span>
<div> <div>
<el-button <el-button v-if="!infoActive" type="primary" size="small" @click="submit" :loading="btnLoading">保存</el-button>
v-if="!infoActive"
type="primary"
size="small"
@click="submit"
:loading="btnLoading"
>保存</el-button
>
<el-button size="small" @click="close">关闭</el-button> <el-button size="small" @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="dialogWrapper"> <div class="dialogWrapper">
<div class="label">任务包基本信息</div> <div class="label">任务包基本信息</div>
<el-descriptions <el-descriptions class="margin-top" :column="3" border>
class="margin-top"
:column="3"
border
>
<!-- <template #extra>--> <!-- <template #extra>-->
<!-- <el-button type="primary">Operation</el-button>--> <!-- <el-button type="primary">Operation</el-button>-->
<!-- </template>--> <!-- </template>-->
@ -50,90 +39,42 @@
</el-descriptions> </el-descriptions>
<div class="label" style="margin-top: 1rem">任务包下发编辑信息</div> <div class="label" style="margin-top: 1rem">任务包下发编辑信息</div>
<el-form <el-form ref="formRef" :model="form" :rules="rules" :inline="true">
ref="formRef"
:model="form"
:rules="rules"
:inline="true"
>
<el-form-item prop="xlghSc" label="巡逻时长:"> <el-form-item prop="xlghSc" label="巡逻时长:">
<el-input-number <el-input-number style="width: 80%" min="0" :disabled="disabled" placeholder="请填写巡逻时长"
style="width: 80%;" v-model="form.xlghSc"></el-input-number>
min="0"
:disabled="disabled"
placeholder="请填写巡逻时长"
v-model="form.xlghSc"
></el-input-number>
<el-tag size="small" type="warning">分钟</el-tag> <el-tag size="small" type="warning">分钟</el-tag>
</el-form-item> </el-form-item>
<el-form-item prop="xlghPcRy" label="盘查人员:"> <el-form-item prop="xlghPcRy" label="盘查人员:">
<el-input <el-input placeholder="请填写盘查人员" clearable :disabled="disabled" v-model="form.xlghPcRy"></el-input>
placeholder="请填写盘查人员"
clearable
:disabled="disabled"
v-model="form.xlghPcRy"
></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="xlghPcCl" label="盘查车辆:"> <el-form-item prop="xlghPcCl" label="盘查车辆:">
<el-input <el-input placeholder="请填写盘查车辆" clearable :disabled="disabled" v-model="form.xlghPcCl"></el-input>
placeholder="请填写盘查车辆"
clearable
:disabled="disabled"
v-model="form.xlghPcCl"
></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="xlghXllc" label="巡逻里程:"> <el-form-item prop="xlghXllc" label="巡逻里程:">
<el-input-number <el-input-number style="width: 80%" min="0" :disabled="disabled" placeholder="请填写巡逻里程"
style="width: 80%;" v-model="form.xlghXllc"></el-input-number>
min="0"
:disabled="disabled"
placeholder="请填写巡逻里程"
v-model="form.xlghXllc"
></el-input-number>
<el-tag size="small" type="warning">公里</el-tag> <el-tag size="small" type="warning">公里</el-tag>
</el-form-item> </el-form-item>
<el-form-item label="下发巡组:"> <el-form-item label="下发巡组:">
<el-input <el-input placeholder="请填写下发巡组" clearable :disabled="disabled" v-model="form.xfbbName"
placeholder="请填写下发巡组" @click="visible = true" readonly></el-input>
clearable
:disabled="disabled"
v-model="form.xfbbName"
@click="visible = true"
readonly
></el-input>
</el-form-item> </el-form-item>
<div v-if="form?.rwZt !== '01'" style="flex: 1; display: flex; justify-content: flex-end">
<div v-if="form?.rwZt !== '01'" style="flex: 1; display: flex; justify-content: flex-end;">
<el-button :disabled="isButtonDisabled" @click="checkInCardOpen">追加打卡</el-button> <el-button :disabled="isButtonDisabled" @click="checkInCardOpen">追加打卡</el-button>
</div> </div>
<el-row style="width: 100%">
<el-row style="width:100%;">
<el-col> <el-col>
<MyTable <MyTable :tableData="form?.bddList" :tableColumn="pageData.tableColumn"
:tableData="form?.bddList" :tableConfiger="pageData.tableConfiger" @chooseData="handleChooseDataChange" :selectable="selectable">
:tableColumn="pageData.tableColumn"
:tableConfiger="pageData.tableConfiger"
@chooseData="handleChooseDataChange"
:selectable="selectable"
>
<template #xlghDkcs="{ row, $index }"> <template #xlghDkcs="{ row, $index }">
<div class="validation-container"> <div class="validation-container">
<el-input-number <el-input-number style="width: 30%" :placeholder="`输入打卡点${$index + 1}需打卡次数`" clearable min="0"
style="width: 30%;" :disabled="!selectable(row)" v-model="row.xlghDkcs" :class="{ 'is-error': hasError($index) }"
:placeholder="`输入打卡点${$index + 1}需打卡次数`" @blur="validateField($index)" />
clearable
min="0"
:disabled="!selectable(row)"
v-model="row.xlghDkcs"
:class="{ 'is-error': hasError($index) }"
@blur="validateField($index)"
/>
<!-- 展示错误信息 --> <!-- 展示错误信息 -->
<span <span v-if="hasError($index)" class="error-message">
v-if="hasError($index)"
class="error-message"
>
{{ getError($index) }} {{ getError($index) }}
</span> </span>
</div> </div>
@ -142,12 +83,8 @@
<div style="display: none"> <div style="display: none">
<template v-for="(item, index) in form?.bddList" :key="index"> <template v-for="(item, index) in form?.bddList" :key="index">
<el-form-item :prop="`bddList[${index}].xlghDkcs`" :label="item?.bddMc" :rules="checkPointRules"> <el-form-item :prop="`bddList[${index}].xlghDkcs`" :label="item?.bddMc" :rules="checkPointRules">
<el-input-number <el-input-number style="width: 100%" :placeholder="`输入打卡点${index + 1}需打卡次数`" clearable
style="width: 100%;" v-model="item.xlghDkcs" />
:placeholder="`输入打卡点${index + 1}需打卡次数`"
clearable
v-model="item.xlghDkcs"
/>
</el-form-item> </el-form-item>
</template> </template>
</div> </div>
@ -158,7 +95,8 @@
</div> </div>
<distribute-patrol-team-dialog v-model="visible" @selection-change="handleChange" /> <distribute-patrol-team-dialog v-model="visible" @selection-change="handleChange" />
<add-check-in-card ref="addCheckInCardRef" :disabledIds="disabledIds" :bddList="form?.bddList" v-model="checkInCardVisible" @change="handleSelectChange" /> <add-check-in-card ref="addCheckInCardRef" :disabledIds="disabledIds" :bddList="form?.bddList"
v-model="checkInCardVisible" @change="handleSelectChange" />
</div> </div>
</template> </template>
@ -167,25 +105,24 @@ import { ref, reactive, getCurrentInstance, computed, watch } from "vue";
import { updateData } from "@/api/service/dailyTaskPackage"; import { updateData } from "@/api/service/dailyTaskPackage";
import DictTag from "@/components/DictTag/index.vue"; import DictTag from "@/components/DictTag/index.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import DistributePatrolTeamDialog import DistributePatrolTeamDialog from "@/views/backOfficeSystem/service/taskPage/dailyTaskPackage/components/DistributePatrolTeamDialog.vue";
from "@/views/backOfficeSystem/service/taskPage/dailyTaskPackage/components/DistributePatrolTeamDialog.vue"; import AddCheckInCard from "@/views/backOfficeSystem/service/taskPage/dailyTaskPackage/components/addCheckInCard.vue";
import AddCheckInCard from "@/views/backOfficeSystem/service/taskPage/dailyTaskPackage/components/addCheckInCard.vue"
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_ZDXL_FGXLRW_YJDJ } = proxy.$dict("D_ZDXL_FGXLRW_YJDJ"); const { D_ZDXL_FGXLRW_YJDJ } = proxy.$dict("D_ZDXL_FGXLRW_YJDJ");
const btnLoading = ref(false); //按钮截流 const btnLoading = ref(false); //按钮截流
const title = ref("修改"); const title = ref("修改");
const formRef = ref(null); const formRef = ref(null);
const addCheckInCardRef = ref(null) const addCheckInCardRef = ref(null);
const infoActive = ref(true); const infoActive = ref(true);
const visible = ref(false); const visible = ref(false);
const checkInCardVisible = ref(false) const checkInCardVisible = ref(false);
const pageData = reactive({ const pageData = reactive({
tableConfiger: { tableConfiger: {
rowKey: 'bddId', rowKey: "bddId",
rowHieght: 61, rowHieght: 61,
haveControls: false, haveControls: false,
showSelectType: 'checkBox', showSelectType: "checkBox",
defaultSelectKeys: [], defaultSelectKeys: [],
loading: false loading: false
}, },
@ -200,9 +137,9 @@ const pageData = reactive({
label: "打卡次数", label: "打卡次数",
prop: "xlghDkcs", prop: "xlghDkcs",
showSolt: true showSolt: true
}, }
] ]
}) });
//级联选择器配置 //级联选择器配置
const props = defineProps({ const props = defineProps({
@ -212,7 +149,7 @@ const props = defineProps({
} }
}); });
const emits = defineEmits(['update:modelValue', 'ok']); const emits = defineEmits(["update:modelValue", "ok"]);
const dialogFormVisible = computed({ const dialogFormVisible = computed({
get() { get() {
@ -221,7 +158,7 @@ const dialogFormVisible = computed({
set(val) { set(val) {
emits("update:modelValue", val); emits("update:modelValue", val);
} }
}) });
//表单数据 //表单数据
const form = ref({ const form = ref({
@ -230,31 +167,31 @@ const form = ref({
const isButtonDisabled = computed(() => { const isButtonDisabled = computed(() => {
// const target = new Date('2025-09-18') // const target = new Date('2025-09-18')
const target = new Date(form.value?.rwRq) const target = new Date(form.value?.rwRq);
const now = new Date() const now = new Date();
// 只比较日期,忽略时间 // 只比较日期,忽略时间
return target.setHours(0, 0, 0, 0) < now.setHours(0, 0, 0, 0) return target.setHours(0, 0, 0, 0) < now.setHours(0, 0, 0, 0);
}) });
const disabled = computed(() => { const disabled = computed(() => {
// const targetDate = new Date(form.value?.rwRq); // const targetDate = new Date(form.value?.rwRq);
// const today = new Date(); // const today = new Date();
return (form.value?.rwZt === '03' || isButtonDisabled.value); return form.value?.rwZt === "03" || isButtonDisabled.value;
}) });
// 打卡点验证规则 // 打卡点验证规则
const checkPointRules = [ const checkPointRules = [
{ required: true, message: '请输入打卡次数', trigger: 'change' }, { required: true, message: "请输入打卡次数", trigger: "change" },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (value < 1) { if (value < 1) {
callback(new Error('打卡次数必须大于0')); callback(new Error("打卡次数必须大于0"));
} else { } else {
callback(); callback();
} }
}, },
trigger: 'change' trigger: "change"
} }
]; ];
@ -287,22 +224,22 @@ const rules = reactive({
message: "请填写盘查车辆", message: "请填写盘查车辆",
trigger: "change" trigger: "change"
} }
], ]
}); });
//新增 //新增
function open(row = {}, type) { function open(row = {}, type) {
infoActive.value = type === 'view'; infoActive.value = type === "view";
form.value = { ...row, xfbbName: row?.xfxz }; form.value = { ...row, xfbbName: row?.xfxz };
form.value?.bddList?.forEach((item, index) => { form.value?.bddList?.forEach((item, index) => {
item.index = index // 直接添加index属性 item.index = index; // 直接添加index属性
}) });
pageData.tableConfiger.defaultSelectKeys = form.value?.bddList?.map(i => { pageData.tableConfiger.defaultSelectKeys = form.value?.bddList?.map((i) => {
if (i?.selected) return i?.bddId if (i?.selected) return i?.bddId;
}) });
title.value = type === 'view' ? '查看详情' : "编辑信息"; title.value = type === "view" ? "查看详情" : "编辑信息";
dialogFormVisible.value = true; dialogFormVisible.value = true;
} }
@ -314,102 +251,107 @@ function close() {
const handleChange = (val) => { const handleChange = (val) => {
form.value.xfbbId = val?.id; form.value.xfbbId = val?.id;
form.value.xfbbQwJlId = val?.xfbbQwJlId?.[0] form.value.xfbbQwJlId = val?.xfbbQwJlId?.[0];
form.value.xfbbName = val?.xfbbName; form.value.xfbbName = val?.xfbbName;
} };
const selectList = ref([]) const selectList = ref([]);
const handleChooseDataChange = (event) => { const handleChooseDataChange = (event) => {
selectList.value = [...event] selectList.value = [...event];
} };
// 保存原始bddList的ID用于对比 // 保存原始bddList的ID用于对比
const disabledIds = ref(new Set()) const disabledIds = ref(new Set());
const updateDisabledIds = () => { const updateDisabledIds = () => {
disabledIds.value = new Set(form.value?.bddList?.map(i => i.bddId)) disabledIds.value = new Set(form.value?.bddList?.map((i) => i.bddId));
} };
const selectable = (row) => { const selectable = (row) => {
return !disabledIds.value.has(row.bddId) return !disabledIds.value.has(row.bddId);
} };
const handleSelectChange = (selection) => { const handleSelectChange = (selection) => {
pageData.selectCheckList = selection pageData.selectCheckList = selection;
// 添加新项目 // 添加新项目
const newItems = selection.filter(item => !disabledIds.value.has(item.bddId)) const newItems = selection.filter(
form.value.bddList = [...form.value.bddList, ...newItems] (item) => !disabledIds.value.has(item.bddId)
);
form.value.bddList = [...form.value.bddList, ...newItems];
// 更新禁用ID集合 // 更新禁用ID集合
updateDisabledIds() updateDisabledIds();
emits("ok", false) emits("ok", false);
} };
// 监听form.bddList的变化确保禁用集合同步更新 // 监听form.bddList的变化确保禁用集合同步更新
watch(() => form.value.bddList, () => { watch(
updateDisabledIds() () => form.value.bddList,
}, { deep: true }) () => {
updateDisabledIds();
},
{ deep: true }
);
const checkInCardOpen = () => { const checkInCardOpen = () => {
addCheckInCardRef.value?.open(form.value) addCheckInCardRef.value?.open(form.value);
} };
const fieldErrors = ref({}) const fieldErrors = ref({});
// 检查指定索引是否有错误 // 检查指定索引是否有错误
const hasError = (index) => { const hasError = (index) => {
const propPath = `bddList[${index}].xlghDkcs` const propPath = `bddList[${index}].xlghDkcs`;
return !!fieldErrors.value[propPath] return !!fieldErrors.value[propPath];
} };
// 获取指定索引的错误信息 // 获取指定索引的错误信息
const getError = (index) => { const getError = (index) => {
const propPath = `bddList[${index}].xlghDkcs` const propPath = `bddList[${index}].xlghDkcs`;
return fieldErrors.value[propPath] || '' return fieldErrors.value[propPath] || "";
} };
// 验证单个字段 // 验证单个字段
const validateField = async (propPath) => { const validateField = async (propPath) => {
return new Promise((resolve) => { return new Promise((resolve) => {
formRef.value.validateField(propPath, (errorMessage) => { formRef.value.validateField(propPath, (errorMessage) => {
fieldErrors.value[propPath] = errorMessage fieldErrors.value[propPath] = errorMessage;
resolve(!errorMessage) resolve(!errorMessage);
}) });
}) });
} };
const validateAllCheckpoints = async () => { const validateAllCheckpoints = async () => {
if (!form.value.bddList) return true if (!form.value.bddList) return true;
const validations = form.value?.bddList?.map((_, index) => const validations =
validateField(`bddList[${index}].xlghDkcs`) form.value?.bddList?.map((_, index) =>
) || [] validateField(`bddList[${index}].xlghDkcs`)
) || [];
const results = await Promise.all(validations) const results = await Promise.all(validations);
return results.every(result => result) return results.every((result) => result);
} };
//提交 //提交
const submit = async () => { const submit = async () => {
try { try {
await validateAllCheckpoints() await validateAllCheckpoints();
await formRef.value.validate() await formRef.value.validate();
await updateData({ ...form.value, bddList: selectList.value || [] }) await updateData({ ...form.value, bddList: selectList.value || [] });
proxy.$message({ proxy.$message({
type: "success", type: "success",
message: "修改成功" message: "修改成功"
}); });
dialogFormVisible.value = false; dialogFormVisible.value = false;
emits("ok") emits("ok");
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
} };
defineExpose({ open });
defineExpose({ open })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -454,7 +396,8 @@ defineExpose({ open })
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
gap: 4px; gap: 4px;
min-height: 60px; /* 预留错误信息空间 */ min-height: 60px;
/* 预留错误信息空间 */
} }
.error-message { .error-message {

View File

@ -1,8 +1,17 @@
<script setup> <script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import GdMap from "@/components/Map/GdMap/index.vue" import GdMap from "@/components/Map/GdMap/index.vue";
import { onMounted, reactive, ref, watchEffect, defineAsyncComponent } from "vue"; import {
import { fetchTbZdxlFgdwSelectList, fetchTbZdxlFgxlrwSelectList } from "@/api/service/taskProgress"; onMounted,
reactive,
ref,
watchEffect,
defineAsyncComponent
} from "vue";
import {
fetchTbZdxlFgdwSelectList,
fetchTbZdxlFgxlrwSelectList
} from "@/api/service/taskProgress";
import emitter from "@/utils/eventBus"; import emitter from "@/utils/eventBus";
import TaskDetailsDialog from "@/views/backOfficeSystem/service/taskPage/taskProgress/taskDetailsDialog.vue"; import TaskDetailsDialog from "@/views/backOfficeSystem/service/taskPage/taskProgress/taskDetailsDialog.vue";
@ -11,81 +20,117 @@ const taskDetailsRef = ref(null);
const data = reactive({ const data = reactive({
currentDate: "", currentDate: "",
list: [] list: []
}) });
const fetchTaskList = async () => { const fetchTaskList = async () => {
if (!data.currentDate) return if (!data.currentDate) return;
// const res = await fetchTbZdxlFgxlrwSelectList({ rwRq: data.currentDate }); // const res = await fetchTbZdxlFgxlrwSelectList({ rwRq: data.currentDate });
const res = await fetchTbZdxlFgxlrwSelectList({ rwRq: data.currentDate }); const res = await fetchTbZdxlFgxlrwSelectList({ rwRq: data.currentDate });
emitter.emit("deletePointArea", "zdxl_fzyc") emitter.emit("deletePointArea", "zdxl_fzyc");
if (res && res?.length > 0) { if (res && res?.length > 0) {
data.list = res; data.list = res;
let cc = [] let cc = [];
const list = data.list?.map((el, index) => { const list = data.list?.map((el, index) => {
let centerPoint = [el.zxX,el.zxY] let centerPoint = [el.zxX, el.zxY];
if(index == 0) cc = centerPoint; if (index == 0) cc = centerPoint;
let position = [[Number(el.x1),Number(el.y1)],[Number(el.x2),Number(el.y2)]] let position = [
let text = el.mc [Number(el.x1), Number(el.y1)],
let obj = { position: position, text, id: el.id ,userData: el} [Number(el.x2), Number(el.y2)]
];
let text = el.mc;
let obj = { position: position, text, id: el.id, userData: el };
return obj; return obj;
}) });
emitter.emit("echoPlane", { fontColor:'red',coords: list, type:'rectangle', flag:'zdxl_fzyc', color:'rgba(2,20,51,0.5)', linecolor:'#ee0629'}) emitter.emit("echoPlane", {
fontColor: "red",
coords: list,
type: "rectangle",
flag: "zdxl_fzyc",
color: "rgba(2,20,51,0.5)",
linecolor: "#ee0629"
});
emitter.emit("setMapCenter", { location: cc, zoomLevel: 14 }); emitter.emit("setMapCenter", { location: cc, zoomLevel: 14 });
} else { } else {
data.list = []; data.list = [];
} }
} };
const info = ref([]) const info = ref([]);
const getData = async () => { const getData = async () => {
const res = await fetchTbZdxlFgdwSelectList() const res = await fetchTbZdxlFgdwSelectList();
if (res && res?.length > 0) { if (res && res?.length > 0) {
emitter.emit("deletePointArea", "tbZdxlFgdw") emitter.emit("deletePointArea", "tbZdxlFgdw");
let cc = [] let cc = [];
const list = res?.map((el, index) => { const list = res?.map((el, index) => {
let centerPoint = [el.zxX,el.zxY] let centerPoint = [el.zxX, el.zxY];
if(index == 0) cc = centerPoint; if (index == 0) cc = centerPoint;
let position = [[Number(el.x1),Number(el.y1)],[Number(el.x2),Number(el.y2)]] let position = [
let text = el.mc [Number(el.x1), Number(el.y1)],
let obj = { position: position, text, id: el.id ,userData: el} [Number(el.x2), Number(el.y2)]
];
let text = el.mc;
let obj = { position: position, text, id: el.id, userData: el };
return obj; return obj;
}) });
info.value = list info.value = list;
emitter.emit("echoPlane", { fontColor:'#12fdb8',coords: list, type:'rectangle', flag:'tbZdxlFgdw', color:'rgba(2,20,51,0.5)', linecolor:'#1C97FF'}) emitter.emit("echoPlane", {
fontColor: "#12fdb8",
coords: list,
type: "rectangle",
flag: "tbZdxlFgdw",
color: "rgba(2,20,51,0.5)",
linecolor: "#1C97FF"
});
emitter.emit("setMapCenter", { location: cc, zoomLevel: 14 }); emitter.emit("setMapCenter", { location: cc, zoomLevel: 14 });
} }
await fetchTaskList() await fetchTaskList();
} };
const handleChange = (val) => { const handleChange = (val) => {
fetchTaskList() fetchTaskList();
} };
const handleItem = (item) => { const handleItem = (item) => {
const { zxX, zxY } = item const { zxX, zxY } = item;
emitter.emit("setMapCenter", { location: [zxX, zxY], zoomLevel: 14 }); emitter.emit("setMapCenter", { location: [zxX, zxY], zoomLevel: 14 });
} };
const handleUpdate = () => { const handleUpdate = () => {
emitter.emit("echoPlane", { fontColor:'#12fdb8',coords: info.value, type:'rectangle', flag:'tbZdxlFgdw', color:'rgba(2,20,51,0.5)', linecolor:'#1C97FF'}) emitter.emit("echoPlane", {
} fontColor: "#12fdb8",
coords: info.value,
type: "rectangle",
flag: "tbZdxlFgdw",
color: "rgba(2,20,51,0.5)",
linecolor: "#1C97FF"
});
};
onMounted(async () => { onMounted(async () => {
emitter.emit("addPointArea", {
coords: [{ jd: "104.454064", wd: "31.162123" }],
icon: require("@/assets/point/kfd.png"),
flag: "st"
});
// 设置当前日期 // 设置当前日期
const today = new Date(); const today = new Date();
data.currentDate = today.toISOString().split('T')[0]; // 格式化为 YYYY-MM-DD data.currentDate = today.toISOString().split("T")[0]; // 格式化为 YYYY-MM-DD
await getData() await getData();
emitter.on("showFzycInfo", (data) => { emitter.on("showFzycInfo", (data) => {
taskDetailsRef.value?.open(data?.info) taskDetailsRef.value?.open(data?.info);
}) });
}) emitter.emit("setMapCenter", {
location: [{ jd: "104.454064", wd: "31.162123" }],
zoomLevel: 14
});
});
</script> </script>
<template> <template>
@ -94,7 +139,7 @@ onMounted(async () => {
<PageTitle title="任务进度" /> <PageTitle title="任务进度" />
</div> </div>
<div class="task-page"> <div class="task-page">
<div style="height: 100vh; width: 80%;"> <div style="height: 100vh; width: 80%">
<gd-map /> <gd-map />
</div> </div>
<div class="right"> <div class="right">
@ -106,21 +151,28 @@ onMounted(async () => {
@change="handleChange" @change="handleChange"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/> />
<!-- <el-button @click="handleChange">查询</el-button>--> <!-- <el-button @click="handleChange">查询</el-button>-->
</div> </div>
<div class="listWrapper"> <div class="listWrapper">
<template v-for="(item, index) in data.list" :key="index"> <template v-for="(item, index) in data.list" :key="index">
<div class="item" @click="handleItem(item)"> <div class="item" @click="handleItem(item)">
<div>方格名称{{ item?.fgMc }}</div> <div>方格名称{{ item?.fgMc }}</div>
<!-- <div>必到点名称</div>--> <!-- <div>必到点名称</div>-->
<div> <div>
<div>打卡进度</div> <div>打卡进度</div>
<el-progress width="50" :percentage="item?.bddAllProgress || 0" /> <el-progress
width="50"
:percentage="item?.bddAllProgress || 0"
/>
</div> </div>
<div> <div>
<div>巡逻里程进度</div> <div>巡逻里程进度</div>
<el-progress width="50" color="#e6a23c" :percentage="item?.bddAllProgress || 0" /> <el-progress
width="50"
color="#e6a23c"
:percentage="item?.bddAllProgress || 0"
/>
</div> </div>
</div> </div>
</template> </template>
@ -128,7 +180,11 @@ onMounted(async () => {
</div> </div>
</div> </div>
<task-details-dialog ref="taskDetailsRef" v-model="visible" @update="handleUpdate" /> <task-details-dialog
ref="taskDetailsRef"
v-model="visible"
@update="handleUpdate"
/>
</div> </div>
</template> </template>