From 4a836815f12e8ba717702cc8ed431e1b4f96134c Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 25 四月 2025 13:55:34 +0800
Subject: [PATCH] 新增内部线索相关管理逻辑

---
 src/views/overlay-clue/task/ClueTaskEdit.vue |  294 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 292 insertions(+), 2 deletions(-)

diff --git a/src/views/overlay-clue/task/ClueTaskEdit.vue b/src/views/overlay-clue/task/ClueTaskEdit.vue
index 61c7765..ee4a4dc 100644
--- a/src/views/overlay-clue/task/ClueTaskEdit.vue
+++ b/src/views/overlay-clue/task/ClueTaskEdit.vue
@@ -1,3 +1,293 @@
 <template>
-  
-</template>
\ No newline at end of file
+  <el-dialog
+    style="pointer-events: auto"
+    :model-value="modelValue"
+    @update:modelValue="handleDialogChange"
+    width="50%"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    destroy-on-close
+  >
+    <template #header>
+      <span> {{ create ? '鍙戝竷绾跨储浠诲姟' : '鏇存柊绾跨储浠诲姟' }}</span>
+    </template>
+    <el-form
+      label-width="120px"
+      label-position="right"
+      :rules="rules"
+      :model="formObj"
+      ref="formRef"
+    >
+      <el-form-item label="绾跨储缂栧彿" prop="clueId">
+        <el-input
+          v-model="formObj.clueId"
+          placeholder="璇疯緭鍏ョ嚎绱㈢紪鍙�"
+          class="w-200"
+          :disabled="true"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="浠诲姟鏃堕棿" prop="taskTime">
+        <el-date-picker
+          v-model="formObj.taskTime"
+          type="date"
+          placeholder="閫夋嫨鏃ユ湡"
+        />
+      </el-form-item>
+      <el-form-item label="鍖哄幙" prop="_location">
+        <OptionLocation
+          :level="3"
+          :initValue="false"
+          :checkStrictly="false"
+          :allOption="false"
+          v-model="formObj._location"
+        ></OptionLocation>
+      </el-form-item>
+      <el-form-item label="鍝嶅簲绾у埆" prop="responseLevel">
+        <OptionResponseLevel
+          v-model="formObj.responseLevel"
+        ></OptionResponseLevel>
+      </el-form-item>
+      <el-form-item label="鍑鸿鏂瑰紡" prop="travelMode">
+        <OptionTravelMode
+          v-model="formObj.travelMode"
+        ></OptionTravelMode>
+      </el-form-item>
+      <el-form-item label="鏃犱汉鏈�" prop="hasUav">
+        <el-switch
+          v-model="formObj.hasUav"
+          inline-prompt
+          active-text="鏈�"
+          inactive-text="鏃�"
+        />
+      </el-form-item>
+      <el-form-item label="鎵ц浜�" prop="executorIds">
+        <OptionExecutors
+          v-model="formObj.executorIds"
+        ></OptionExecutors>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="onCancel">鍙栨秷</el-button>
+      <el-button
+        :disabled="!edit"
+        type="primary"
+        :loading="loading"
+        @click="onSubmit"
+        >纭畾</el-button
+      >
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { ref, reactive, watch, onMounted } from 'vue';
+import { useFormConfirm } from '@/composables/formConfirm';
+import clueTaskApi from '@/api/clue/clueTaskApi';
+
+const props = defineProps({
+  modelValue: Boolean,
+  clueData: Object,
+  clueTask: Object,
+  create: {
+    type: Boolean,
+    default: true
+  },
+  // 鑷畾涔夊垱寤烘柟娉�
+  onCreate: Function,
+  // 鑷畾涔夋洿鏂版柟娉�
+  onUpdate: Function
+});
+
+const emits = defineEmits(['update:modelValue', 'onSubmit']);
+
+function handleDialogChange(value) {
+  emits('update:modelValue', value);
+}
+
+const { formObj, formRef, edit, onSubmit, onCancel, clear } =
+  useFormConfirm({
+    submit: {
+      do: submit
+    },
+    cancel: {
+      do: cancel
+    }
+  });
+const loading = ref(false);
+// 琛ㄥ崟妫�鏌ヨ鍒�
+const rules = reactive({
+  // clueId: [
+  //   {
+  //     required: true,
+  //     message: '绾跨储缂栧彿涓嶈兘涓虹┖',
+  //     trigger: 'blur'
+  //   }
+  // ],
+  taskTime: [
+    {
+      required: true,
+      message: '绾跨储鏃堕棿涓嶈兘涓虹┖',
+      trigger: 'change'
+    }
+  ],
+  _location: [
+    {
+      required: true,
+      message: '鍖哄幙涓嶈兘涓虹┖',
+      trigger: 'change'
+    }
+  ],
+  responseLevel: [
+    {
+      required: true,
+      message: '鍝嶅簲绾у埆涓嶈兘涓虹┖',
+      trigger: 'change'
+    }
+  ],
+  executorIds: [
+    {
+      required: true,
+      message: '鎵ц浜轰笉鑳戒负绌�',
+      trigger: 'change'
+    }
+  ]
+});
+
+function submit() {
+  const param = getParams();
+  return props.create
+    ? props.onCreate
+      ? props.onCreate(param)
+      : createClueTask(param)
+    : props.onUpdate
+    ? props.onUpdate(param)
+    : updateClueTask(param);
+}
+
+function cancel() {
+  emits('update:modelValue', false);
+}
+
+function createClueTask(param) {
+  return clueTaskApi
+    .createClueTask(param)
+    .then(() => {
+      emits('update:modelValue', false);
+      emits('onSubmit');
+      // clear();
+    })
+    .finally(() => {
+      loading.value = false;
+    });
+}
+
+function updateClueTask(param) {
+  return clueTaskApi
+    .updateClueTask(param)
+    .then(() => {
+      emits('update:modelValue', false);
+      emits('onSubmit');
+      // clear();
+    })
+    .finally(() => {
+      loading.value = false;
+    });
+}
+
+function getParams() {
+  return {
+    guid: formObj.value.guid,
+    clueId: formObj.value.clueId,
+    taskTime: formObj.value.taskTime,
+    provinceCode: formObj.value._location.pCode,
+    provinceName: formObj.value._location.pName,
+    cityCode: formObj.value._location.cCode,
+    cityName: formObj.value._location.cName,
+    districtCode: formObj.value._location.dCode,
+    districtName: formObj.value._location.dName,
+    townCode: formObj.value._location.tCode,
+    townName: formObj.value._location.tName,
+    responseLevel: formObj.value.responseLevel,
+    travelMode: formObj.value.travelMode,
+    hasUav: formObj.value.hasUav,
+    executorIds: formObj.value.executorIds.join(';')
+  };
+}
+
+// watch(
+//   () => props.clueData,
+//   (nV, oV) => {
+//     if (nV && nV != oV) {
+//       formObj.value.clueId = nV.cid;
+//     }
+//   }
+// );
+
+// watch(
+//   () => props.clueTask,
+//   (nV, oV) => {
+//     if (nV && nV != oV) {
+//       formObj.value.guid = nV.guid;
+//       formObj.value.clueId = nV.clueId;
+//       formObj.value.taskTime = nV.taskTime;
+//       formObj.value._location = {
+//         pCode: nV.provinceCode,
+//         pName: nV.provinceName,
+//         cCode: nV.cityCode,
+//         cName: nV.cityName,
+//         dCode: nV.districtCode,
+//         dName: nV.districtName,
+//         tCode: nV.townCode,
+//         tName: nV.townName
+//       };
+//       formObj.value.responseLevel = nV.responseLevel;
+//       formObj.value.travelMode = nV.travelMode;
+//       formObj.value.hasUav = nV.hasUav;
+//       formObj.value.executorIds = nV.executorIds.split(';');
+//     }
+//   }
+// );
+
+watch(
+  () => [props.modelValue, props.clueData, props.clueTask],
+  (nV, oV) => {
+    const [m, d, t] = nV;
+    if (m) {
+      formObj.value = {
+        taskTime: new Date(),
+        _location: {
+          pCode: '31',
+          pName: '涓婃捣甯�',
+          cCode: '3100',
+          cName: '涓婃捣甯�',
+          dCode: '310106',
+          dName: '闈欏畨鍖�',
+          tCode: undefined,
+          tName: undefined
+        }
+      };
+      if (d) {
+        formObj.value.clueId = d.cid;
+      }
+      if (t) {
+        formObj.value.guid = t.guid;
+        formObj.value.clueId = t.clueId;
+        formObj.value.taskTime = t.taskTime;
+        formObj.value._location = {
+          pCode: t.provinceCode,
+          pName: t.provinceName,
+          cCode: t.cityCode,
+          cName: t.cityName,
+          dCode: t.districtCode,
+          dName: t.districtName,
+          tCode: t.townCode,
+          tName: t.townName
+        };
+        formObj.value.responseLevel = t.responseLevel;
+        formObj.value.travelMode = t.travelMode;
+        formObj.value.hasUav = t.hasUav;
+        formObj.value.executorIds = t.executorIds.split(';');
+      }
+    }
+  }
+);
+</script>

--
Gitblit v1.9.3