Quellcode durchsuchen

Merge remote-tracking branch 'origin/dev' into dev

Hwf vor 7 Monaten
Ursprung
Commit
13d600acbf

+ 0 - 1
src/types/components.d.ts

@@ -109,7 +109,6 @@ declare module 'vue' {
     VideoContainer2: typeof import('./../components/HKVideo/video-container2.vue')['default']
     VideoTagEdit: typeof import('./../components/VideoTagEdit/index.vue')['default']
     YMap: typeof import('./../components/Map/YMap.vue')['default']
-    YMapold: typeof import('./../components/Map/YMapold.vue')['default']
     YztMap: typeof import('./../components/Map/YztMap/index.vue')['default']
   }
   export interface ComponentCustomProperties {

+ 6 - 5
src/views/emergencyCommandMap/RightSection/JointDuty.vue

@@ -8,8 +8,9 @@
     <div class="card-content">
       <div class="custom-table">
         <div class="table-header">
-          <div v-for="(item, index) in tableHeader" :key="index" class="td">{{ item.name }}</div>
-          <div class="td2"></div>
+          <div class="td">值守单位</div>
+          <div class="td">值守人员</div>
+          <div class="td2">联系方式</div>
         </div>
         <div class="table-content">
           <div v-for="(item, index) in listData" :key="index" class="tr">
@@ -17,9 +18,9 @@
             <div class="td">
               <div>{{ item.nick_name }}({{ item.duties }})</div>
             </div>
-            <div class="td text">{{ item.phone }}</div>
-            <div class="td2">
+            <div class="td2 text">
               <div class="phone-btn"></div>
+              {{ item.phone }}
             </div>
           </div>
         </div>
@@ -106,7 +107,7 @@ const handleDownLoad = () => {
 };
 
 // 设置定时器
-const fetchInterval = process.env.NODE_ENV === 'development' ? 60000 : 3000; // 每60秒刷新一次(刷新太频繁影响调试)
+const fetchInterval = process.env.NODE_ENV === 'development' ? 60000 : 1500; // 每60秒刷新一次(刷新太频繁影响调试)
 
 const nextFetchData = ()=> {
   setTimeout(()=>{

+ 73 - 41
src/views/emergencyCommandMap/RightSection/RenWuDengJi.vue

@@ -2,13 +2,13 @@
   <Dialog custom-show type="sm" title="任务下达" @confirm="confirmRegister" @close="closeDialog">
     <div class="dialog-content">
       <div class="dialog-body">
-        <el-form ref="taskFormRef" :model="newTask">
-          <el-form-item label="任务内容" label-width="200px">
-            <el-input v-model="newTask.task_description" class="custom-input2" clearable placeholder="请输入相关任务描述" />
+        <el-form ref="taskFormRef" :model="form" :rules="rules">
+          <el-form-item label="任务内容" label-width="200px" prop="task_description">
+            <el-input v-model="form.task_description" class="custom-input2" clearable placeholder="请输入相关任务描述" />
           </el-form-item>
-          <el-form-item label="任务类型" label-width="200px">
+          <el-form-item label="任务类型" label-width="200px" prop="task_type">
             <el-select
-              v-model="newTask.task_type"
+              v-model="form.task_type"
               placeholder="选择任务类型"
               class="custom-select"
               size="large"
@@ -17,36 +17,42 @@
               clearable
               filterable
             >
-              <el-option v-for="type in taskTypes" :key="type.id" :label="type.name" />
+            <el-option v-for="type in opt_task_type" :key="type.value" :label="type.text" />
             </el-select>
           </el-form-item>
-          <el-form-item label="执行单位" label-width="200px">
+          <el-form-item label="执行单位" label-width="200px" prop="unit_name">
             <el-select
-              v-model="newTask.unit_name"
-              placeholder="全部"
+              v-model="form.unit_name"
+              placeholder="选择执行单位"
               class="custom-select"
               size="large"
               popper-class="custom-select-popper"
               :teleported="false"
               clearable
-              filterable
-              @input="fetchFilteredUnits"
-            >
+              filterable>
               <el-option v-for="unit in filteredUnits" :key="unit.id" :label="unit.unit_name" :value="unit.unit_name" />
             </el-select>
           </el-form-item>
-          <el-form-item label="执行人" label-width="200px">
-            <el-input v-model="newTask.registrar" class="custom-input2" type="text" readonly />
+          <el-form-item label="执行人" label-width="200px" prop="executor">
+            <el-input v-model="form.executor" class="custom-input2" type="text" />
+          </el-form-item>
+          <el-form-item label="登记人" label-width="200px" prop="registrar">
+            <el-input v-model="form.registrar" class="custom-input2" type="text" readonly />
           </el-form-item>
-          <el-form-item label="登记人" label-width="200px">
-            <el-input v-model="newTask.registrar" class="custom-input2" type="text" readonly />
+          <el-form-item label="联系电话" label-width="200px" prop="contact_phone">
+            <el-input v-model="form.contact_phone" class="custom-input2" placeholder="发布人的联系电话" />
           </el-form-item>
-          <el-form-item label="联系电话" label-width="200px">
-            <el-input v-model="newTask.contact_phone" class="custom-input2" placeholder="发布人的联系电话" />
+          <el-form-item label="完成时限" label-width="200px" prop="expire_time">
+            <el-date-picker v-model="form.expire_time" value-format="YYYY-MM-DD" type="date" class="common-date-picker" :teleported="false" popper-class="common-date-popper" placeholder="选择完成时间" style="width: 100%" />
           </el-form-item>
-          <el-form-item label="完成时限" label-width="200px">
-            <el-date-picker v-model="newTask.complete_time" type="date" class="common-date-picker" :teleported="false" popper-class="common-date-popper" placeholder="选择完成时间" style="width: 100%" />
+          <!-- 不会调整大小,隐藏
+          <el-form-item label="上传图片:" label-width="200px" prop="imgList">
+            <FileUpload v-model="form.imgList" :file-type="['jpg', 'jpeg', 'png']" :limit="9" :file-size="5" class="upload-box" />
           </el-form-item>
+          <el-form-item label="上传文件:" label-width="200px" prop="fileList">
+            <FileUpload v-model="form.fileList" :file-type="['mp4', 'avi', 'wmv']" :limit="6" :file-size="1024" class="upload-box" />
+          </el-form-item>
+          -->
         </el-form>
       </div>
     </div>
@@ -56,18 +62,43 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted } from 'vue';
 import { addTask, getUnits, getUser } from '@/api/emergencyCommandMap/JointDuty';
+const proxy = getCurrentInstance()?.proxy;
 
-const taskTypes = ref([{ name: '事件处置' }, { name: '防范措施' }, { name: '险情处理' }, { name: '督办任务' }]);
-const newTask = reactive({
+const opt_task_type = [
+  { text: "事件处置", value: "0" },
+  { text: "防范措施", value: "1" },
+  { text: "险情处理", value: "2" },
+  { text: "督办任务", value: "3" }
+];
+// 表单初始数据
+const initFormData = {
   task_description: '',
   task_type: '',
   unit_name: '',
   registrar: '',
+  executor: '',
   contact_phone: '',
-  complete_time: ''
+  expire_time: '',
+  event_code: '',
+  imgList: [],
+  fileList: []
+};
+
+const data = reactive({
+  form: { ...initFormData },
+  rules: {
+    task_description: [{ required: true, message: '任务描述不能为空', trigger: 'blur' }],
+    task_type: [{ required: true, message: '任务类型不能为空', trigger: 'blur' }],
+    unit_name: [{ required: true, message: '执行单位不能为空', trigger: 'blur' }],
+    registrar: [{ required: true, message: '登记人不能为空', trigger: 'blur' }],
+    executor: [{ required: true, message: '执行人不能为空', trigger: 'blur' }],
+    contact_phone: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }],
+    expire_time: [{ required: true, message: '完成时限不能为空', trigger: 'blur' }],
+  }
 });
-const units = ref([]);
+const taskFormRef = ref();
 const filteredUnits = ref([]);
+const { form, rules } = toRefs(data);
 
 const props = defineProps<{
   eventId?: string;
@@ -76,11 +107,11 @@ const props = defineProps<{
 // 获取当前登录用户信息
 const fetchUser = async () => {
   try {
-    const response = await getUser();
+    const response = await getUser({});
     if (response.code === 200) {
-      // 假设返回的用户信息中包含 username 字段
-      newTask.registrar = response.data.user.userName;
-      newTask.contact_phone = response.data.user.contactPhone;
+      form.value.registrar = response.data.user.nickName;
+      form.value.executor = response.data.user.nickName;
+      form.value.contact_phone = response.data.user.phonenumber;
     } else {
       console.error('获取用户信息失败:', response.msg);
     }
@@ -108,24 +139,25 @@ const closeDialog = () => {
   emit('update:show', false);
 };
 
-const confirmRegister = async () => {
-  try {
-    newTask.event_code = props.eventId;
-    const response = await addTask(newTask);
-    if (response.code === 200) {
-      console.log('任务登记成功');
-      closeDialog();
-    } else {
-      console.error('任务登记失败:', response.msg);
+const confirmRegister = () => {
+  taskFormRef.value?.validate((valid) => {
+    if (valid) {
+      form.value.event_code = props.eventId;
+        addTask(form.value).then((response)=>{
+          if (response.code === 200) {
+            proxy?.$modal.msgSuccess('任务登记成功');
+            closeDialog();
+          } else {
+            console.error('任务登记失败:', response.msg);
+          }
+      });
     }
-  } catch (error) {
-    console.error('请求任务登记失败:', error);
-  }
+  });
 };
 
 onMounted(() => {
   fetchUser();
-  fetchUnits();
+  fetchUnits("");
 });
 </script>
 

+ 70 - 48
src/views/emergencyCommandMap/RightSection/RenWuGengXin.vue

@@ -1,46 +1,68 @@
 <template>
-  <Dialog v-model="visible" type="sm" title="任务反馈" class="box1" hide-footer>
+  <Dialog v-model="visible" type="sm" title="任务反馈" class="box1" height="1500px" hide-footer>
     <div class="dialog-content">
       <div class="dialog-body">
-        <el-form ref="taskForm" :model="newTask">
+        <el-form ref="taskFormRef" :model="newTask" :rules="rules">
           <el-row :gutter="20">
             <el-col :span="24">
-              <el-form-item label="任务描述:">
+              <el-form-item label="任务描述:" label-width="300px" >
                 <div class="display-field">{{ newTask.task_description }}</div>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="任务类型:">
+              <el-form-item label="任务类型:" label-width="300px" >
                 <div class="display-field">{{ get_task_type_text(newTask.task_type) }}</div>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="执行人:">
+              <el-form-item label="登记人:" label-width="300px" >
                 <div class="display-field">{{ newTask.registrar }}</div>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="执行单位:">
+              <el-form-item label="执行人:" label-width="300px" >
+                <div class="display-field">{{ newTask.executor }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="执行单位:" label-width="300px" >
                 <div class="display-field">{{ newTask.unit_name }}</div>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="预估完成时间:">
+              <el-form-item label="联系电话:" label-width="300px" >
+                <div class="display-field">{{ newTask.contact_phone }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="完成时限:" label-width="300px" >
+                <div class="display-field">{{ newTask.expire_time }}</div>
+              </el-form-item>
+            </el-col>
+            <!--
+            <el-col :span="24">
+              <el-form-item label="图片:">
                 <div class="display-field">{{ newTask.complete_time }}</div>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="反馈人:">
+              <el-form-item label="文件:">
+                <div class="display-field">{{ newTask.complete_time }}</div>
+              </el-form-item>
+            </el-col>
+            -->
+            <el-col :span="24">
+              <el-form-item label="反馈人:" label-width="300px" >
                 <div class="display-field">{{ newTask.registrar }}</div>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="反馈内容:">
+              <el-form-item label="反馈内容:" label-width="300px"  prop="feedback_content">
                 <el-input v-model="newTask.feedback_content" class="custom-input2" clearable placeholder="请输入反馈内容"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="完成进度">
+              <el-form-item label="完成进度:" label-width="300px"  prop="processing_status">
                 <el-select
                   v-model="newTask.processing_status"
                   class="custom-select"
@@ -52,36 +74,22 @@
                 </el-select>
               </el-form-item>
             </el-col>
+            <!-- 不会调整大小,隐藏
             <el-col :span="24">
-              <el-form-item label="上传图片">
-                <!--                <el-upload-->
-                <!--                  v-model="newTask.attachments"-->
-                <!--                  action="/uploadAttachments"-->
-                <!--                  list-type="picture-card"-->
-                <!--                  :teleported="false"-->
-                <!--                  auto-upload="true"-->
-                <!--                  limit="9"-->
-                <!--                  :teleported="false"-->
-                <!--                  popper-class="custom-uploadper"-->
-                <!--                  class="custom-upload"-->
-                <!--                  :teleported="false"-->
-                <!--                  clearable-->
-                <!--                  filterable-->
-                <!--                >-->
-                <!--                  <el-upload-list-item v-for="file in newTask.attachments" :key="file.name">-->
-                <!--                    <el-icon name="el-icon-upload" class="upload-icon"></el-icon>-->
-                <!--                    <el-button type="danger" size="mini" @click="removeAttachment(file)">移除</el-button>-->
-                <!--                  </el-upload-list-item>-->
-                <!--                </el-upload>-->
+              <el-form-item label="上传图片:" label-width="300px" prop="attachList">
+                <FileUpload v-model="newTask.attachList" :file-type="['jpg', 'jpeg', 'png']" :limit="9" :file-size="5" class="upload-box" />
               </el-form-item>
             </el-col>
+            -->
           </el-row>
         </el-form>
       </div>
       <div class="footer">
         <div class="flex">
-          <div class="common-btn-primary" :disabled="!isFormValid" @click="confirmRegister">确定</div>
           <div class="common-btn" @click="closeDialog">取消</div>
+          
+          <div class="common-btn-primary" :disabled="!isFormValid" @click="confirmRegister">确定</div>
+          
         </div>
       </div>
     </div>
@@ -90,14 +98,18 @@
 
 <script lang="ts" setup>
 import { ref, reactive, defineEmits, computed, watch } from 'vue';
-import { updateTaskRegistration } from '@/api/emergencyCommandMap/JointDuty.ts';
+import { updateTaskRegistration } from '@/api/emergencyCommandMap/JointDuty';
+const proxy = getCurrentInstance()?.proxy;
 
 const props = defineProps({
   modelValue: { type: Boolean, required: true },
-  task: { type: Object, default: () => ({ task_id: '', task_description: '', unit_name: '', registrar: '', processing_status: '' }) },
+  task: { type: Object, default: () => (
+    { task_id: '', task_description: '', unit_name: '', registrar: '', processing_status: '', feedback_content: '', attachList: [] }) 
+  },
   eventId: { type: String, required: true }
 });
 
+const taskFormRef = ref();
 const emit = defineEmits(['update:modelValue', 'update-success']);
 const newTask = reactive({ ...props.task });
 const units = ref(['待处理', '已完成']);
@@ -110,6 +122,11 @@ const opt_task_type = [
   { text: "督办任务", value: "3" }
 ];
 
+const rules = ref({
+  processing_status: [{ required: true, message: '完成进度不能为空', trigger: 'blur' }],
+  feedback_content: [{ required: true, message: '反馈内容不能为空', trigger: 'blur' }]
+});
+
 const get_task_type_text = (val) => {
   return opt_task_type.find(item => item.value == val).text
 }
@@ -128,26 +145,31 @@ const resetForm = () => {
   newTask.unit_name = '';
   newTask.registrar = '';
   newTask.processing_status = '';
+  newTask.attachList = [];
 };
 
 // 任务进度更新
-const confirmRegister = async () => {
+const confirmRegister = () => {
   console.log('任务进度更新:', newTask);
-  try {
-    const response = await updateTaskRegistration({
-      task_id: newTask.task_id,
-      processing_status: newTask.processing_status,
-      event_code: props.eventId
-    });
-    if (response.code === 200) {
-      emit('update-success', newTask);
-      closeDialog();
-    } else {
-      console.error('任务进度更新失败:', response.msg);
+  taskFormRef.value?.validate((valid) => {
+    if (valid) {
+      updateTaskRegistration({
+        task_id: newTask.task_id,
+        processing_status: newTask.processing_status,
+        feedback_content: newTask.feedback_content,
+        attachList: newTask.attachList,
+        event_code: props.eventId
+      }).then((response)=>{
+        if (response.code === 200) {
+          proxy?.$modal.msgSuccess('任务进度更新成功');
+          emit('update-success', newTask);
+          closeDialog();
+        } else {
+          console.error('任务进度更新失败:', response.msg);
+        }
+      })
     }
-  } catch (error) {
-    console.error('请求任务进度更新失败:', error);
-  }
+  });
 };
 
 const closeDialog = () => {

+ 4 - 1
src/views/emergencyCommandMap/RightSection/RightTop.vue

@@ -108,12 +108,15 @@ const updateTaskList = (tasks) => {
   nextFetchData();
 };
 
+// 设置定时器
+const fetchInterval = process.env.NODE_ENV === 'development' ? 60000 : 1500; // 每60秒刷新一次(刷新太频繁影响调试)
+
 const nextFetchData = ()=> {
   setTimeout(()=>{
     if(notifications.value.length === 0) {
       fetchData();
     }
-  }, 1500)
+  }, fetchInterval)
 }
 
 watch(