浏览代码

Merge branch 'cc-dev' into 'dev'

修改部分样式

See merge request product-group-fe/sfy-safety-group/sfy-safety!48
陈昶 11 月之前
父节点
当前提交
5dc767194d
共有 22 个文件被更改,包括 545 次插入273 次删除
  1. 4 0
      src/api/disaster-control/index.ts
  2. 11 0
      src/api/system/person-group.ts
  3. 45 30
      src/layout/MenuLayout.vue
  4. 1 1
      src/styles/common.scss
  5. 19 0
      src/types/disaster-control/index.ts
  6. 17 14
      src/views/disaster/components/InspectorSelect.vue
  7. 1 1
      src/views/disaster/components/Search.vue
  8. 30 2
      src/views/disaster/disaster-control/PageLossReportItem.vue
  9. 1 2
      src/views/disaster/disaster-control/src/components/LossRecord.vue
  10. 40 2
      src/views/disaster/disaster-control/src/components/ReportTask.vue
  11. 110 0
      src/views/disaster/disaster-control/src/config/form.ts
  12. 6 0
      src/views/disaster/disaster-control/src/config/index.ts
  13. 12 1
      src/views/disaster/disaster-precaution/PageTaskExecution.vue
  14. 38 31
      src/views/disaster/disaster-precaution/src/components/CreateTaskItem.vue
  15. 28 21
      src/views/disaster/disaster-precaution/src/components/EditTaskItem.vue
  16. 33 26
      src/views/disaster/disaster-precaution/src/components/ViewTaskItem.vue
  17. 38 36
      src/views/disaster/disaster-warning/src/components/CreateDefenseNoticeItem.vue
  18. 35 33
      src/views/disaster/disaster-warning/src/components/CreateWarningInfoItem.vue
  19. 38 36
      src/views/disaster/disaster-warning/src/components/EditDefenseNoticeItem.vue
  20. 35 33
      src/views/disaster/disaster-warning/src/components/EditWarningInfoItem.vue
  21. 2 2
      src/views/disaster/disaster-warning/src/config/form.ts
  22. 1 2
      src/views/disaster/style/info-container.scss

+ 4 - 0
src/api/disaster-control/index.ts

@@ -123,3 +123,7 @@ export const getLossRecordTableData = (query: LossRecordTableQuery) => {
     data: query,
   });
 };
+
+/**
+ * 添加上报责任人
+ */

+ 11 - 0
src/api/system/person-group.ts

@@ -8,6 +8,7 @@ import {
   QueryPersonGroupDetailRes,
   QueryAvailablePersonPageRes,
   UserGroupOption,
+  PersonGroupItem,
 } from '@/types/person-group/type';
 
 /**
@@ -104,3 +105,13 @@ export const getUserFirstLevelTree = () => {
     method: 'get',
   });
 };
+
+/**
+ * 根据ids查询用户信息
+ */
+export const queryUserInfoByIds = (userIds: number[]) => {
+  return http.request<PersonGroupItem[]>({
+    url: `/admin/user/queryUserList?userIds=${userIds.join(',')}`,
+    method: 'get',
+  });
+};

+ 45 - 30
src/layout/MenuLayout.vue

@@ -2,28 +2,30 @@
 <template>
   <div class="component-container home-container">
     <aside class="aside">
-      <el-menu :default-active="selectedKeys" :default-openeds="openKeys" router class="el-menu-vertical">
-        <template v-for="item in subMenus" :key="item.name">
-          <el-sub-menu v-if="item.children" :index="item.path">
-            <template #title>
-              <component v-if="item.meta?.icon" :is="item.meta.icon" />
-              <span class="menu-title">{{ item.meta?.title }}</span>
-            </template>
-            <el-menu-item v-for="child in item.children" :key="child.name" :index="child.path">
-              <div style="margin-left: 12px">
-                {{ child.meta?.title }}
-              </div>
+      <header class="aside__header" />
+      <main class="aside__main">
+        <el-menu :default-active="selectedKeys" :default-openeds="openKeys" router class="el-menu-vertical">
+          <template v-for="item in subMenus" :key="item.name">
+            <el-sub-menu v-if="item.children" :index="item.path">
+              <template #title>
+                <component v-if="item.meta?.icon" :is="item.meta.icon" />
+                <span class="menu-title">{{ item.meta?.title }}</span>
+              </template>
+              <el-menu-item v-for="child in item.children" :key="child.name" :index="child.path">
+                <div style="margin-left: 12px">
+                  {{ child.meta?.title }}
+                </div>
+              </el-menu-item>
+            </el-sub-menu>
+            <el-menu-item v-else :index="item.path">
+              <component v-if="item.meta?.icon" :is="item.meta?.icon" />
+              <span class="menu-title">
+                {{ item.meta?.title }}
+              </span>
             </el-menu-item>
-          </el-sub-menu>
-          <el-menu-item v-else :index="item.path">
-            <!-- <SvgIcon icon-name="overview" /> -->
-            <component v-if="item.meta?.icon" :is="item.meta?.icon" />
-            <span class="menu-title">
-              {{ item.meta?.title }}
-            </span>
-          </el-menu-item>
-        </template>
-      </el-menu>
+          </template>
+        </el-menu>
+      </main>
     </aside>
     <div class="main">
       <router-view></router-view>
@@ -82,18 +84,28 @@
     padding: 10px;
     height: 100%;
   }
-  .aside,
-  .main {
-    height: 100%;
-    border-radius: 4px;
-  }
   .aside {
+    display: flex;
+    flex-direction: column;
     width: 270px;
+    height: 100%;
     flex-shrink: 0;
+    border-radius: 4px;
+    background-color: $white-color;
+    &__header {
+      width: inherit;
+      height: 10px;
+      flex-shrink: 0;
+    }
+    &__main {
+      width: inherit;
+      flex: 1;
+    }
   }
   .main {
     flex: 1;
     overflow: auto;
+    border-radius: 4px;
   }
   .el-menu-vertical {
     width: 100%;
@@ -109,15 +121,12 @@
       color: $white-color;
       background-color: $primary-color;
     }
-    .el-menu-item:first-child.is-active {
-      border-radius: 4px 4px 0 0;
-    }
   }
 
   .el-menu-item,
   .el-sub-menu {
     svg {
-      color: #1777ff;
+      color: $primary-color;
     }
   }
   .el-menu-item {
@@ -127,4 +136,10 @@
       }
     }
   }
+  :deep(.el-sub-menu__title),
+  :deep(.el-menu-item) {
+    display: flex;
+    align-items: center;
+    gap: 12px;
+  }
 </style>

+ 1 - 1
src/styles/common.scss

@@ -30,5 +30,5 @@
 }
 
 .el-button--primary {
-  --el-button-bg-color: #1890ff !important;
+  --el-button-bg-color: #1777ff !important;
 }

+ 19 - 0
src/types/disaster-control/index.ts

@@ -70,6 +70,8 @@ export interface LossReportReportTaskResponse extends BasicResponse {
   handleTaskId: number;
   taskName: string;
   isReportPrincipal: boolean; //是否上报责任人
+  updatedAt: string;
+  reporterList: string; //上报责任人列表
 }
 
 export interface DisposalManagementCreateQuery {
@@ -109,3 +111,20 @@ export interface DisposalManagementRuleFormEdit extends Omit<DisposalManagementC
   deptName: string;
   isPush: number | null;
 }
+
+export interface LossReportItemFormData
+  extends Omit<disasterReportRecordDetailListResponse, 'id' | 'isLoss' | 'priority'> {
+  reportTaskName: string;
+  isLoss: number | null;
+  images: string[];
+  description: string;
+  safetyLevel: string;
+  isAffectWork: number | null;
+  estimatedLoss: number;
+  responsibleDeptId: number | null;
+  userGroupList: number[];
+  isPush: number | null;
+  priority: number | null;
+  remark: string;
+  createdBy: string;
+}

+ 17 - 14
src/views/disaster/components/InspectorSelect.vue

@@ -47,14 +47,23 @@
       </div>
       <div class="footer">
         <el-button @click="emit('cancel')">取消</el-button>
-        <el-button type="primary" @click="handleSubmit">确定</el-button>
+        <el-button
+          type="primary"
+          @click="
+            emit(
+              'submit',
+              selectedPersonList.map((item) => item.id),
+            )
+          "
+          >确定
+        </el-button>
       </div>
     </div>
   </div>
 </template>
 
 <script lang="ts" setup>
-  import { onMounted, ref, watch, computed } from 'vue';
+  import { onMounted, ref, watch, computed, nextTick } from 'vue';
   import empty from 'assets/images/empty@1X.png';
   import type { TreeNode } from '@/views/disaster/types';
   import type { PersonGroupItem } from '@/types/person-group/type';
@@ -66,7 +75,6 @@
 
   const props = defineProps<{
     customUserList: PersonGroupItem[];
-    currentTaskId: number | undefined;
   }>();
   interface Tree {
     [key: string]: any;
@@ -127,17 +135,7 @@
       treeRef.value!.setChecked(id, false, true);
     }
   };
-  const emit = defineEmits(['cancel']);
-  const handleSubmit = async () => {
-    if (!props.currentTaskId) return;
-    const ids = selectedPersonList.value.map((item) => item.id);
-    await updateTaskInspector({
-      id: props.currentTaskId,
-      inspectorIdList: ids,
-    });
-    ElMessage.success('添加检查人员成功');
-    emit('cancel');
-  };
+  const emit = defineEmits(['cancel', 'submit']);
   onMounted(async () => {
     await getUserFirstLevelTreeList();
   });
@@ -148,6 +146,11 @@
     () => props.customUserList,
     (newVal) => {
       selectedPersonList.value = newVal;
+      const selectedIds = newVal.map((item) => item.id);
+      nextTick(() => {
+        if (!treeRef.value) return;
+        treeRef.value.setCheckedKeys(selectedIds, true);
+      });
     },
     {
       immediate: true,

+ 1 - 1
src/views/disaster/components/Search.vue

@@ -55,7 +55,7 @@
     display: flex;
     align-items: center;
     flex-wrap: wrap;
-    gap: 28px;
+    gap: 32px;
     &--item {
       @include flex-center;
       white-space: nowrap;

+ 30 - 2
src/views/disaster/disaster-control/PageLossReportItem.vue

@@ -4,7 +4,18 @@
       <img :src="BackIcon" alt="back" class="back-icon" @click="router.back()" />
       <span class="disaster-precaution-container__title">创建损失记录</span>
     </header>
-    <main class="disaster-precaution-container__main"> </main>
+    <main class="disaster-precaution-container__main">
+      <div class="loss-report-form-container">
+        <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+          <template #isLoss>
+            <el-radio-group v-model="ruleFormData.isLoss">
+              <el-radio :label="1">是</el-radio>
+              <el-radio :label="0">否</el-radio>
+            </el-radio-group>
+          </template>
+        </BasicForm>
+      </div>
+    </main>
     <footer class="disaster-precaution-container__footer">
       <el-button @click="router.back()">取消</el-button>
       <el-button type="primary">提交,并创建下一条</el-button>
@@ -14,12 +25,29 @@
 </template>
 
 <script lang="ts" setup>
+  import { onMounted } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
+  import BasicForm from '@/components/BasicForm.vue';
+  import { useFormConfigHook } from '@/hooks/useFormConfigHook';
+  import { LOSS_REPORT_ITEM_FORM_CONFIG, LOSS_REPORT_ITEM_FORM_DATA, LOSS_REPORT_ITEM_FROM_RULES } from './src/config';
+  import type { LossReportItemFormData } from '@/types/disaster-control';
   import BackIcon from 'assets/svg/back.svg';
+  import { useUserInfoHook } from '@/views/disaster/hooks/userInfo';
   const route = useRoute();
   const router = useRouter();
-  const taskName = route.query.taskName;
+  const taskName = String(route.query.taskName);
   const id = Number(route.params.id);
+  const { ruleFormConfig, ruleFormData, formRules, cloneRuleFormData, beforeRouteLeave } =
+    useFormConfigHook<LossReportItemFormData>(
+      LOSS_REPORT_ITEM_FORM_CONFIG,
+      LOSS_REPORT_ITEM_FORM_DATA,
+      LOSS_REPORT_ITEM_FROM_RULES,
+    );
+  const { realname } = useUserInfoHook();
+  onMounted(() => {
+    ruleFormData.reportTaskName = taskName;
+    ruleFormData.createdBy = realname;
+  });
 </script>
 
 <style lang="scss" scoped>

+ 1 - 2
src/views/disaster/disaster-control/src/components/LossRecord.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="disaster-precaution">
     <header class="disaster-precaution__header">
-      <!-- <el-button type="primary" class="disaster-precaution__header--button" :icon="Plus"> 创建灾害损失记录 </el-button> -->
       <Search
         :searchConfig="LOSS_RECORD_LOSS_RECORD_SEARCH_CONFIG"
         :searchData="searchData"
@@ -146,7 +145,7 @@
     collapseList.value = res.records.map((item) => ({
       id: item.handleTaskId,
       taskName: item.taskName,
-      updatedAt: item.dueCompleteTime,
+      updatedAt: item.updatedAt,
       tableData: [
         {
           handleTaskId: item.handleTaskId,

+ 40 - 2
src/views/disaster/disaster-control/src/components/ReportTask.vue

@@ -25,7 +25,11 @@
             v-if="isOverdue(scope.row.dueCompleteTime)"
             @click="handleReport(scope.row.handleTaskId, scope.row.taskName)"
           />
-          <ActionButton text="添加上报人" v-if="scope.row.isReportPrincipal" />
+          <ActionButton
+            text="添加上报人"
+            v-if="scope.row.isReportPrincipal"
+            @click="handleAddReporter(scope.row.handleTaskId, scope.row.reporterList)"
+          />
         </div>
         <!-- 已上报任务阶段 -->
         <div
@@ -41,6 +45,13 @@
         </div>
       </template>
     </BasicTable>
+    <el-dialog v-model="userInfo" title="添加上报人" destroy-on-close>
+      <InspectorSelect
+        :customUserList="currentTaskInspectorList"
+        @cancel="userInfo = false"
+        @submit="handleSubmitReporter"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -49,6 +60,7 @@
   import Search from '@/views/disaster/components/Search.vue';
   import BasicTable from '@/components/BasicTable.vue';
   import ActionButton from '@/components/ActionButton.vue';
+  import InspectorSelect from '@/views/disaster/components/InspectorSelect.vue';
   import {
     LOSS_REPORT_REPORT_TASK_SEARCH_CONFIG,
     LOSS_REPORT_REPORT_TASK_TABLE_OPTIONS,
@@ -60,8 +72,10 @@
   import type { QueryPageRequest } from '@/types/disaster';
   import { TASK_STAGE } from '../constant';
   import { getTaskStage } from '../util';
+  import type { PersonGroupItem } from '@/types/person-group/type';
   import { useRouter } from 'vue-router';
-
+  import { queryUserInfoByIds } from '@/api/system/person-group';
+  import { ElMessage } from 'element-plus';
   const router = useRouter();
   const searchData = reactive({
     taskStage: '',
@@ -113,6 +127,30 @@
       query: { taskName },
     });
   };
+  const userInfo = ref(false);
+  const currentTaskId = ref<number>();
+  const currentTaskInspectorList = ref<PersonGroupItem[]>([]);
+  const handleAddReporter = async (id: number, userList: string) => {
+    currentTaskId.value = id;
+    const userIds = JSON.parse(userList) || [];
+    if (!userIds.length) return;
+    const res = await queryUserInfoByIds(userIds);
+    currentTaskInspectorList.value = res.map((user) => {
+      return {
+        ...user,
+        checked: true,
+      };
+    });
+    userInfo.value = true;
+  };
+  const handleSubmitReporter = async (ids: number[]) => {
+    if (!currentTaskId.value) return;
+    console.log(ids);
+    console.log(currentTaskId.value);
+    ElMessage.success('添加上报责任人成功');
+    userInfo.value = false;
+    getTableData();
+  };
   // 添加刷新时间变量,用于触发视图更新
   const refreshTime = ref(Date.now());
   let refreshTimer: number | null = null;

+ 110 - 0
src/views/disaster/disaster-control/src/config/form.ts

@@ -3,6 +3,7 @@
  */
 import type { FormConfig } from '@/types/basic-form';
 import { validateFormTime } from '@/views/disaster/utils/validateTime';
+import { number } from 'echarts';
 // 通用表单信息
 const BASIC_FROM_CONFIG = {};
 
@@ -112,6 +113,91 @@ export const DISPOSAL_MANAGEMENT_ITEM_FROM_CONFIG_EDIT: FormConfig[] = [
   ...DISPOSAL_MANAGEMENT_BASIC_FROM_CONFIG,
 ];
 
+// 创建损失记录表单信息
+export const LOSS_REPORT_ITEM_FORM_CONFIG: FormConfig[] = [
+  {
+    label: '任务名称',
+    prop: 'reportTaskName',
+    component: 'ElInput',
+    componentProps: {
+      disabled: true,
+    },
+  },
+  {
+    label: '是否损失',
+    prop: 'isLoss',
+    slot: 'isLoss',
+  },
+  {
+    label: '损失楼号、楼层、房间号',
+    prop: 'affectedRoom',
+    slot: 'affectedRoom',
+  },
+  {
+    label: '受灾物品',
+    prop: 'affectedItems',
+    slot: 'affectedItems',
+  },
+  {
+    label: '受灾图片',
+    prop: 'images',
+    slot: 'affectedImages',
+  },
+  {
+    label: '损失描述',
+    prop: 'description',
+    slot: 'description',
+  },
+  {
+    label: '影响安全评估',
+    prop: 'safetyLevel',
+    slot: 'safetyLevel',
+  },
+  {
+    label: '是否影响正常工作',
+    prop: 'isAffectWork',
+    slot: 'isAffectWork',
+  },
+  {
+    label: '损失评估金额',
+    prop: 'lossAssessmentAmount',
+    slot: 'lossAssessmentAmount',
+  },
+  {
+    label: '处置优先级',
+    prop: 'priority',
+    slot: 'priority',
+  },
+  {
+    label: '整改责任部门',
+    prop: 'responsibleDeptId',
+    slot: 'responsibleDeptId',
+  },
+  {
+    label: '整改责任人',
+    prop: 'userGroupList',
+    slot: 'userGroupList',
+  },
+  {
+    label: '是否推送',
+    prop: 'isPush',
+    slot: 'isPush',
+  },
+  {
+    label: '备注',
+    prop: 'remark',
+    slot: 'remark',
+  },
+  {
+    label: '创建人',
+    prop: 'createdBy',
+    component: 'ElInput',
+    componentProps: {
+      disabled: true,
+    },
+  },
+];
+
 // 通用表单数据
 const BASIC_FROM_DATA = {};
 const DISPOSAL_MANAGEMENT_BASIC_FROM_DATA = {
@@ -130,6 +216,25 @@ export const DISPOSAL_MANAGEMENT_TASK_FROM_DATA_EDIT = {
   ...DISPOSAL_MANAGEMENT_BASIC_FROM_DATA,
   deptName: '',
 };
+export const LOSS_REPORT_ITEM_FORM_DATA = {
+  reportTaskName: '',
+  isLoss: null,
+  buildingNo: '',
+  floorNo: '',
+  roomNo: '',
+  affectedItems: '',
+  images: [],
+  description: '',
+  safetyLevel: '',
+  isAffectWork: null,
+  estimatedLoss: 0,
+  responsibleDeptId: null,
+  userGroupList: [],
+  isPush: null,
+  priority: null,
+  remark: '',
+  createdBy: '',
+};
 
 // 通用表单规则
 const BASIC_FROM_RULES = {};
@@ -161,3 +266,8 @@ export const DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_CREATE = {
 export const DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_EDIT = {
   ...DISPOSAL_MANAGEMENT_BASIC_FROM_RULES,
 };
+
+// 创建损失记录表单规则(无损失)
+export const LOSS_REPORT_ITEM_FROM_RULES = {
+  isLoss: [{ required: true, message: '请选择是否损失', trigger: 'change' }],
+};

+ 6 - 0
src/views/disaster/disaster-control/src/config/index.ts

@@ -20,6 +20,9 @@ import {
   DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_CREATE,
   DISPOSAL_MANAGEMENT_ITEM_FROM_CONFIG_EDIT,
   DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_EDIT,
+  LOSS_REPORT_ITEM_FORM_CONFIG,
+  LOSS_REPORT_ITEM_FORM_DATA,
+  LOSS_REPORT_ITEM_FROM_RULES,
 } from './form';
 
 export {
@@ -40,4 +43,7 @@ export {
   DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_EDIT,
   DISPOSAL_RECTIFICATION_SEARCH_CONFIG,
   DISPOSAL_MANAGEMENT_TASK_FROM_DATA_EDIT,
+  LOSS_REPORT_ITEM_FORM_CONFIG,
+  LOSS_REPORT_ITEM_FORM_DATA,
+  LOSS_REPORT_ITEM_FROM_RULES,
 };

+ 12 - 1
src/views/disaster/disaster-precaution/PageTaskExecution.vue

@@ -84,8 +84,8 @@
     <el-dialog v-model="userInfo" title="添加检查人" destroy-on-close>
       <InspectorSelect
         :customUserList="currentTaskInspectorList"
-        :currentTaskId="currentTaskId"
         @cancel="userInfo = false"
+        @submit="handleSubmitCheckUser"
       />
     </el-dialog>
   </div>
@@ -103,6 +103,7 @@
     getTaskInspectorList,
     withdrawTaskInspect,
     withdrawTaskApproval,
+    updateTaskInspector,
   } from '@/api/disaster-precaution';
   import type { TaskExecutionListResponse } from '@/types/disaster-precaution';
   import OverdueIcon from '@/assets/svg/overdue.svg';
@@ -202,6 +203,16 @@
     pagination.total = res.totalRow;
     tableConfig.loading = false;
   };
+  const handleSubmitCheckUser = async (ids: number[]) => {
+    if (!currentTaskId.value) return;
+    await updateTaskInspector({
+      id: currentTaskId.value,
+      inspectorIdList: ids,
+    });
+    ElMessage.success('添加检查人员成功!');
+    userInfo.value = false;
+    getTableData();
+  };
   // 判断是否超过应完成时间24小时
   const isOverdue24Hours = (dueCompleteTime: string) => {
     if (!dueCompleteTime) return false;

+ 38 - 31
src/views/disaster/disaster-precaution/src/components/CreateTaskItem.vue

@@ -1,37 +1,44 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
-      <template #deptName>
-        <el-select
-          v-model="ruleFormData.deptIdList"
-          multiple
-          placeholder="请选择被检查(自查)单位"
-          filterable
-          class="custom-select"
-        >
-          <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" />
-        </el-select>
-      </template>
-      <template #inspectType>
-        <div class="task-type-container">
-          <el-select v-model="ruleFormData.inspectType" placeholder="请选择检查类型" @change="handleTaskTypeChange">
-            <el-option v-for="item in INSPECT_TYPE_OPTIONS" :key="item.value" :label="item.label" :value="item.value" />
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+        <template #deptName>
+          <el-select
+            v-model="ruleFormData.deptIdList"
+            multiple
+            placeholder="请选择被检查(自查)单位"
+            filterable
+            class="custom-select"
+          >
+            <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" />
           </el-select>
-          <el-select v-model="ruleFormData.templateId" placeholder="请选择关联模板" disabled>
-            <el-option v-for="item in TASK_TEMPLATE_LIST" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
-        </div>
-      </template>
-      <template #userGroupList>
-        <GroupSelect v-model="ruleFormData.userGroupList" :groupOptions="groupOptions" />
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush">
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-      </template>
-    </BasicForm>
+        </template>
+        <template #inspectType>
+          <div class="task-type-container">
+            <el-select v-model="ruleFormData.inspectType" placeholder="请选择检查类型" @change="handleTaskTypeChange">
+              <el-option
+                v-for="item in INSPECT_TYPE_OPTIONS"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+            <el-select v-model="ruleFormData.templateId" placeholder="请选择关联模板" disabled>
+              <el-option v-for="item in TASK_TEMPLATE_LIST" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </div>
+        </template>
+        <template #userGroupList>
+          <GroupSelect v-model="ruleFormData.userGroupList" :groupOptions="groupOptions" />
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush">
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 28 - 21
src/views/disaster/disaster-precaution/src/components/EditTaskItem.vue

@@ -1,26 +1,33 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
-      <template #inspectType>
-        <div class="task-type-container">
-          <el-select v-model="ruleFormData.inspectType" placeholder="请选择检查类型" @change="handleTaskTypeChange">
-            <el-option v-for="item in INSPECT_TYPE_OPTIONS" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-          <el-select v-model="ruleFormData.templateId" placeholder="请选择关联模板" disabled>
-            <el-option v-for="item in TASK_TEMPLATE_LIST" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
-        </div>
-      </template>
-      <template #userGroupList>
-        <GroupSelect v-model="ruleFormData.userGroupList" :groupOptions="groupOptions" />
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush">
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-      </template>
-    </BasicForm>
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+        <template #inspectType>
+          <div class="task-type-container">
+            <el-select v-model="ruleFormData.inspectType" placeholder="请选择检查类型" @change="handleTaskTypeChange">
+              <el-option
+                v-for="item in INSPECT_TYPE_OPTIONS"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+            <el-select v-model="ruleFormData.templateId" placeholder="请选择关联模板" disabled>
+              <el-option v-for="item in TASK_TEMPLATE_LIST" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </div>
+        </template>
+        <template #userGroupList>
+          <GroupSelect v-model="ruleFormData.userGroupList" :groupOptions="groupOptions" />
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush">
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 33 - 26
src/views/disaster/disaster-precaution/src/components/ViewTaskItem.vue

@@ -1,31 +1,38 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formConfig="ruleFormConfig">
-      <template #inspectType>
-        <div class="task-type-container">
-          <el-select
-            v-model="ruleFormData.inspectType"
-            placeholder="请选择检查类型"
-            @change="handleTaskTypeChange"
-            disabled
-          >
-            <el-option v-for="item in INSPECT_TYPE_OPTIONS" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-          <el-select v-model="ruleFormData.templateId" placeholder="请选择关联模板" disabled>
-            <el-option v-for="item in TASK_TEMPLATE_LIST" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
-        </div>
-      </template>
-      <template #userGroupList>
-        <GroupSelect v-model="ruleFormData.userGroupList" :groupOptions="groupOptions" disabled />
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush" disabled>
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-      </template>
-    </BasicForm>
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formConfig="ruleFormConfig">
+        <template #inspectType>
+          <div class="task-type-container">
+            <el-select
+              v-model="ruleFormData.inspectType"
+              placeholder="请选择检查类型"
+              @change="handleTaskTypeChange"
+              disabled
+            >
+              <el-option
+                v-for="item in INSPECT_TYPE_OPTIONS"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+            <el-select v-model="ruleFormData.templateId" placeholder="请选择关联模板" disabled>
+              <el-option v-for="item in TASK_TEMPLATE_LIST" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </div>
+        </template>
+        <template #userGroupList>
+          <GroupSelect v-model="ruleFormData.userGroupList" :groupOptions="groupOptions" disabled />
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush" disabled>
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 38 - 36
src/views/disaster/disaster-warning/src/components/CreateDefenseNoticeItem.vue

@@ -1,42 +1,44 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
-      <template #disasterType>
-        <el-select v-model="ruleFormData.disasterType" placeholder="请选择灾害类型" filterable>
-          <el-option
-            v-for="item in disasterTypeDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+        <template #disasterType>
+          <el-select v-model="ruleFormData.disasterType" placeholder="请选择灾害类型" filterable>
+            <el-option
+              v-for="item in disasterTypeDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #disasterLevel>
+          <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
+            <el-option
+              v-for="item in disasterLevelDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #attachmentListRes>
+          <Upload label="上传附件" @uploadSuccess="handleUploadSuccess" />
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush">
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+          <SelectGroup
+            v-if="ruleFormData.isPush === IS_PUSH.PUSH"
+            ref="selectGroupRef"
+            :userGroupList="ruleFormData.userGroupList || []"
+            @userGroupListChange="handleUserGroupListChange"
           />
-        </el-select>
-      </template>
-      <template #disasterLevel>
-        <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
-          <el-option
-            v-for="item in disasterLevelDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
-          />
-        </el-select>
-      </template>
-      <template #attachmentListRes>
-        <Upload label="上传附件" @uploadSuccess="handleUploadSuccess" />
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush">
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-        <SelectGroup
-          v-if="ruleFormData.isPush === IS_PUSH.PUSH"
-          ref="selectGroupRef"
-          :userGroupList="ruleFormData.userGroupList || []"
-          @userGroupListChange="handleUserGroupListChange"
-        />
-      </template>
-    </BasicForm>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 35 - 33
src/views/disaster/disaster-warning/src/components/CreateWarningInfoItem.vue

@@ -1,39 +1,41 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
-      <template #disasterType>
-        <el-select v-model="ruleFormData.disasterType" placeholder="请选择预警类型" filterable>
-          <el-option
-            v-for="item in warningTypeDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+        <template #disasterType>
+          <el-select v-model="ruleFormData.disasterType" placeholder="请选择预警类型" filterable>
+            <el-option
+              v-for="item in warningTypeDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #disasterLevel>
+          <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
+            <el-option
+              v-for="item in disasterLevelDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush">
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+          <SelectGroup
+            v-if="ruleFormData.isPush"
+            ref="selectGroupRef"
+            :userGroupList="ruleFormData.userGroupList || []"
+            @userGroupListChange="handleUserGroupListChange"
           />
-        </el-select>
-      </template>
-      <template #disasterLevel>
-        <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
-          <el-option
-            v-for="item in disasterLevelDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
-          />
-        </el-select>
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush">
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-        <SelectGroup
-          v-if="ruleFormData.isPush"
-          ref="selectGroupRef"
-          :userGroupList="ruleFormData.userGroupList || []"
-          @userGroupListChange="handleUserGroupListChange"
-        />
-      </template>
-    </BasicForm>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 38 - 36
src/views/disaster/disaster-warning/src/components/EditDefenseNoticeItem.vue

@@ -1,42 +1,44 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
-      <template #disasterType>
-        <el-select v-model="ruleFormData.disasterType" placeholder="请选择灾害类型" filterable>
-          <el-option
-            v-for="item in disasterTypeDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+        <template #disasterType>
+          <el-select v-model="ruleFormData.disasterType" placeholder="请选择灾害类型" filterable>
+            <el-option
+              v-for="item in disasterTypeDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #disasterLevel>
+          <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
+            <el-option
+              v-for="item in disasterLevelDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #attachmentListRes>
+          <Upload label="上传附件" :fileList="ruleFormData.attachmentListRes" @uploadSuccess="handleUploadSuccess" />
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush">
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+          <SelectGroup
+            v-if="ruleFormData.isPush"
+            ref="selectGroupRef"
+            :userGroupList="ruleFormData.userGroupList || []"
+            @userGroupListChange="handleUserGroupListChange"
           />
-        </el-select>
-      </template>
-      <template #disasterLevel>
-        <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
-          <el-option
-            v-for="item in disasterLevelDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
-          />
-        </el-select>
-      </template>
-      <template #attachmentListRes>
-        <Upload label="上传附件" :fileList="ruleFormData.attachmentListRes" @uploadSuccess="handleUploadSuccess" />
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush">
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-        <SelectGroup
-          v-if="ruleFormData.isPush"
-          ref="selectGroupRef"
-          :userGroupList="ruleFormData.userGroupList || []"
-          @userGroupListChange="handleUserGroupListChange"
-        />
-      </template>
-    </BasicForm>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 35 - 33
src/views/disaster/disaster-warning/src/components/EditWarningInfoItem.vue

@@ -1,39 +1,41 @@
 <template>
   <div class="info-container">
-    <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
-      <template #disasterType>
-        <el-select v-model="ruleFormData.disasterType" placeholder="请选择预警类型" filterable>
-          <el-option
-            v-for="item in warningTypeDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
+    <section>
+      <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
+        <template #disasterType>
+          <el-select v-model="ruleFormData.disasterType" placeholder="请选择预警类型" filterable>
+            <el-option
+              v-for="item in warningTypeDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #disasterLevel>
+          <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
+            <el-option
+              v-for="item in disasterLevelDice"
+              :key="item.itemCode"
+              :label="item.itemValue"
+              :value="item.itemCode"
+            />
+          </el-select>
+        </template>
+        <template #isPush>
+          <el-radio-group v-model="ruleFormData.isPush">
+            <el-radio :value="IS_PUSH.PUSH">是</el-radio>
+            <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
+          </el-radio-group>
+          <SelectGroup
+            v-if="ruleFormData.isPush"
+            ref="selectGroupRef"
+            :userGroupList="ruleFormData.userGroupList || []"
+            @userGroupListChange="handleUserGroupListChange"
           />
-        </el-select>
-      </template>
-      <template #disasterLevel>
-        <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
-          <el-option
-            v-for="item in disasterLevelDice"
-            :key="item.itemCode"
-            :label="item.itemValue"
-            :value="item.itemCode"
-          />
-        </el-select>
-      </template>
-      <template #isPush>
-        <el-radio-group v-model="ruleFormData.isPush">
-          <el-radio :value="IS_PUSH.PUSH">是</el-radio>
-          <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
-        </el-radio-group>
-        <SelectGroup
-          v-if="ruleFormData.isPush"
-          ref="selectGroupRef"
-          :userGroupList="ruleFormData.userGroupList || []"
-          @userGroupListChange="handleUserGroupListChange"
-        />
-      </template>
-    </BasicForm>
+        </template>
+      </BasicForm>
+    </section>
   </div>
 </template>
 

+ 2 - 2
src/views/disaster/disaster-warning/src/config/form.ts

@@ -133,6 +133,7 @@ export const DEFENSE_NOTICE_FROM_DATA = {
   title: '',
   attachmentListRes: [],
   pushTime: '',
+  createdAt: '',
 };
 
 // 通用表单规则
@@ -161,6 +162,5 @@ export const DEFENSE_NOTICE_FROM_RULES = {
   disasterType: [{ required: true, message: '请选择灾害类型', trigger: 'change' }],
   ...BASIC_FROM_RULES,
   title: [{ required: true, message: '请输入通知标题', trigger: 'blur' }],
-  content: [{ required: true, message: '请输入通知内容', trigger: 'blur' }],
-  attachmentListRes: [{ required: true, message: '请上传通知附件', trigger: 'change' }],
+  content: [{ required: true, message: '请输入通知内容', trigger: 'blur' }]
 };

+ 1 - 2
src/views/disaster/style/info-container.scss

@@ -1,5 +1,4 @@
 .info-container {
   width: 100%;
-  max-height: calc(100vh - 350px);
-  overflow: auto;
+  height: 100%;
 }