Procházet zdrojové kódy

任务登记、任务更新BUG修复

lizhouming před 6 měsíci
rodič
revize
47689bfc59

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

@@ -20,8 +20,6 @@ declare module 'vue' {
     ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
     ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
     ElButton: typeof import('element-plus/es')['ElButton']
-    ElCard: typeof import('element-plus/es')['ElCard']
-    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
@@ -42,29 +40,19 @@ declare module 'vue' {
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElOption: typeof import('element-plus/es')['ElOption']
     ElPagination: typeof import('element-plus/es')['ElPagination']
-    ElPopover: typeof import('element-plus/es')['ElPopover']
-    ElRadio: typeof import('element-plus/es')['ElRadio']
-    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
     ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
     ElSlider: typeof import('element-plus/es')['ElSlider']
-    ElStep: typeof import('element-plus/es')['ElStep']
-    ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
-    ElTable: typeof import('element-plus/es')['ElTable']
-    ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
-    ElTabPane: typeof import('element-plus/es')['ElTabPane']
-    ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTimeline: typeof import('element-plus/es')['ElTimeline']
     ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
-    ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
-    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
     ElUpload: typeof import('element-plus/es')['ElUpload']
+    ElUploadListItem: typeof import('element-plus/es')['ElUploadListItem']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     FooterSection: typeof import('./../components/FooterSection/index.vue')['default']
     Hamburger: typeof import('./../components/Hamburger/index.vue')['default']
@@ -74,7 +62,6 @@ declare module 'vue' {
     HikvisionPlayer: typeof import('./../components/HKVideo/hikvision-player.vue')['default']
     HKVideo: typeof import('./../components/HKVideo/index.vue')['default']
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
-    IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']
@@ -109,7 +96,4 @@ declare module 'vue' {
     YMap: typeof import('./../components/Map/YMap.vue')['default']
     YztMap: typeof import('./../components/Map/YztMap/index.vue')['default']
   }
-  export interface ComponentCustomProperties {
-    vLoading: typeof import('element-plus/es')['ElLoadingDirective']
-  }
 }

+ 30 - 3
src/views/emergencyCommandMap/RightSection/RenWuDengJi.vue

@@ -1,12 +1,26 @@
 <template>
   // type分别为sm、md、lg
-  <Dialog custom-show type="sm" title="任务登记" @confirm="confirmRegister" @close="closeDialog">
+  <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-item>
+          <el-form-item label="任务类型" label-width="200px">
+            <el-select
+              v-model="newTask.task_type"
+              placeholder="选择任务类型"
+              class="custom-select"
+              size="large"
+              popper-class="custom-select-popper"
+              :teleported="false"
+              clearable
+              filterable
+            >
+              <el-option v-for="type in taskTypes" :key="type.id" :label="type.name" />
+            </el-select>
+          </el-form-item>
           <el-form-item label="执行单位" label-width="200px">
             <el-select
               v-model="newTask.unit_name"
@@ -22,9 +36,18 @@
               <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>
           <el-form-item label="登记人" label-width="200px">
             <el-input v-model="newTask.registrar" class="custom-input2" type="text" readonly />
           </el-form-item>
+          <el-form-item label="联系电话" label-width="200px">
+            <el-input v-model="newTask.contact_phone" class="custom-input2" placeholder="发布人的联系电话" />
+          </el-form-item>
+          <el-form-item label="完成时限" label-width="200px">
+            <el-date-picker v-model="newTask.complete_time" type="date" placeholder="选择完成时间" style="width: 100%" />
+          </el-form-item>
         </el-form>
       </div>
     </div>
@@ -35,11 +58,14 @@
 import { ref, reactive, onMounted } from 'vue';
 import { addTask, getUnits, getUser } from '@/api/emergencyCommandMap/JointDuty.ts';
 
-const showRegisterDialog = ref(true);
+const taskTypes = ref([{ name: '事件处置' }, { name: '防范措施' }, { name: '险情处理' }, { name: '督办任务' }]);
 const newTask = reactive({
   task_description: '',
+  task_type: '',
   unit_name: '',
-  registrar: ''
+  registrar: '',
+  contact_phone: '',
+  complete_time: ''
 });
 const units = ref([]);
 const filteredUnits = ref([]);
@@ -55,6 +81,7 @@ const fetchUser = async () => {
     if (response.code === 200) {
       // 假设返回的用户信息中包含 username 字段
       newTask.registrar = response.data.user.userName;
+      newTask.contact_phone = response.data.user.contactPhone;
     } else {
       console.error('获取用户信息失败:', response.msg);
     }

+ 57 - 11
src/views/emergencyCommandMap/RightSection/RenWuGenZong.vue

@@ -11,21 +11,33 @@
               {{ item.processing_status }}
             </div>
           </div>
-          <div class="btn" @click="openUpdateDialog(item)">更新</div>
+          <div class="btn" @click="handleLeaderInstruction(item)">领导批示</div>
+          <div class="btn" @click="openUpdateDialog(item)">任务反馈</div>
+          <div class="box-title">
+            <template v-if="item.isExpanded">
+              <div class="btn" @click="toggleExpand(item)">收起</div>
+            </template>
+            <template v-else>
+              <div class="btn" @click="toggleExpand(item)">展开</div>
+            </template>
+          </div>
         </div>
         <div class="box-content">{{ item.task_description }}</div>
+        <div v-if="item.isExpanded" class="box3">
+          <div class="box-header">
+            <div class="box-title">任务反馈</div>
+            <div class="time">{{ item.update_time }}</div>
+            <div class="people">{{ item.registrar }}</div>
+          </div>
+          <div class="box-title">{{ item.feedback_content }}</div>
+          <div class="time">附件</div>
+        </div>
       </div>
     </div>
   </div>
   <div class="more" @click="showMoreEventManageList">查看更多</div>
 
-  <RenWuGengXin
-    v-model="newSectionState.showListDialog"
-    :task="selectedTask"
-    :event-id="eventId"
-    title="任务进度更新"
-    @update-success="handleUpdateSuccess"
-  />
+  <RenWuGengXin v-model="newSectionState.showListDialog" :task="selectedTask" :event-id="eventId" @update-success="handleUpdateSuccess" />
 
   <!--弹窗-->
   <RenWuGenZongInfo v-if="eventManageState.showListDialog" v-model="eventManageState.showListDialog" :event-id="eventId" />
@@ -51,7 +63,6 @@ const selectedTask = ref({
 });
 // ref()创建一个响应式对象
 const dataList = ref([]);
-const showScroll = ref(false);
 
 const props = defineProps<{
   eventId?: string; // 使用可选属性
@@ -90,9 +101,13 @@ const handleUpdateSuccess = (updatedData) => {
   console.log('任务进度更新成功:', updatedData);
   fetchData(); // 重新加载任务列表
 };
+const handleLeaderInstruction = (item) => {
+  // 处理领导批示逻辑
+  console.log('领导批示:', item);
+};
 
-const toggleScroll = () => {
-  showScroll.value = !showScroll.value;
+const toggleExpand = (item) => {
+  item.isExpanded = !item.isExpanded;
 };
 
 // 设置定时器
@@ -249,4 +264,35 @@ watch(
     transform: translateX(0);
   }
 }
+.box-box {
+  display: flex;
+  justify-content: space-between;
+
+  .header-left {
+    display: flex;
+    align-items: center;
+
+    .box-title {
+      font-size: 44px;
+      font-family: YouSheBiaoTiHei;
+      color: #ffffff;
+      background-image: url('@/assets/images/taskTracking/titleBox.png');
+      background-repeat: no-repeat;
+      background-size: 311px 56px;
+      background-position: bottom left;
+      padding-left: 50px;
+    }
+
+    .time {
+      font-size: 32px;
+      color: #00e8ff;
+      margin-left: 70px;
+    }
+    .people {
+      font-size: 32px;
+      color: #00e8ff;
+      margin-left: 70px;
+    }
+  }
+}
 </style>

+ 49 - 4
src/views/emergencyCommandMap/RightSection/RenWuGengXin.vue

@@ -1,21 +1,44 @@
 <template>
-  <Dialog v-model="visible" type="sm" title="任务进度更新" height="auto" hide-footer>
+  <Dialog v-model="visible" type="sm" title="任务反馈" class="box1">
     <div class="dialog-content">
       <div class="dialog-body">
         <el-form ref="taskForm" :model="newTask">
           <el-row :gutter="20">
             <el-col :span="24">
               <el-form-item label="任务描述:">
-                <!--                <el-input v-model="newTask.task_description" class="custom-input2" readonly />-->
                 <div class="display-field">{{ newTask.task_description }}</div>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="任务类型:">
+                <div class="display-field">{{ newTask.task_type }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="执行人:">
+                <div class="display-field">{{ newTask.registrar }}</div>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="执行单位:">
-                <!--                <el-input v-model="newTask.unit_name" class="custom-input2" readonly />-->
                 <div class="display-field">{{ newTask.unit_name }}</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="反馈人:">
+                <div class="display-field">{{ newTask.registrar }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="反馈内容:">
+                <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-select
@@ -29,10 +52,32 @@
                 </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>
+            </el-col>
           </el-row>
         </el-form>
       </div>
-
       <div class="footer">
         <div class="flex">
           <div class="common-btn-primary" :disabled="!isFormValid" @click="confirmRegister">确定</div>

+ 1 - 1
src/views/emergencyCommandMap/RightSection/index.vue

@@ -23,7 +23,7 @@
         <div class="icon">
           <div class="icon4"></div>
         </div>
-        <div class="task-text gradient-text">任务登记</div>
+        <div class="task-text gradient-text">任务下达</div>
       </div>
       <div class="task-item" @click="openKnowledgeWarehouse">
         <div class="icon">