Bläddra i källkod

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

Hwf 4 månader sedan
förälder
incheckning
5dd617bf85

+ 26 - 0
src/api/PreventionResponsible/index.ts

@@ -58,3 +58,29 @@ export function getRegionalTree(id) {
     method: 'get'
   });
 }
+
+//获取区划树3
+export function getRegionalTree3() {
+  return request({
+    url: `/api/system/area/allTree`,
+    method: 'get'
+  });
+}
+
+//数据批量导入
+export function dataImport(data) {
+  return request({
+    url: '/api/ThreeProofingResponsible/person/createImport',
+    method: 'post',
+    data: data
+  });
+}
+
+//导入情况
+export function getSituation(data) {
+  return request({
+    url: `/api/ThreeProofingResponsible/import_status/list`,
+    method: 'get',
+    params: data
+  });
+}

+ 24 - 0
src/api/comprehensiveGuarantee/materialReserveManagement/materialsDistribution.ts

@@ -0,0 +1,24 @@
+import request from '@/utils/request';
+// 查询
+export function getDispatchtList(params?: any) {
+  return request({
+    url: '/api/resource_provison/material/dispatch/list',
+    method: 'get',
+    params: params
+  });
+}
+// 详情
+export function getDispatchInfo(id) {
+  return request({
+    url: '/api/resource_provison/material/dispatch/info/' + id,
+    method: 'get'
+  });
+}
+// 新增
+export function createDispatch(data) {
+  return request({
+    url: '/api/resource_provison/material/dispatch/create',
+    method: 'post',
+    data: data
+  });
+}

+ 13 - 6
src/components/DataImport/DataImportDetail.vue

@@ -1,13 +1,13 @@
 <template>
   <el-dialog v-model="dialogVisible" :title="showDetails ? '详情' : '查看导入情况'" width="780px" append-to-body>
     <el-table v-show="!showDetails" ref="tableRef" :data="dataList">
-      <el-table-column label="文件名称" align="center" prop="event_id" />
-      <el-table-column label="时间" align="center" prop="event_title" />
+      <el-table-column label="文件名称" align="center" prop="file_name" />
+      <el-table-column label="时间" align="center" prop="update_time" />
       <el-table-column label="操作账号" align="center" prop="event_title" />
-      <el-table-column label="状态" align="center" prop="event_title">
+      <el-table-column label="状态" align="center" prop="status">
         <template #default="scope">
-          <el-text v-if="scope.row.event_type === '1'" type="success">已完成</el-text>
-          <el-text v-if="scope.row.event_type === '2'" type="primary">进行中</el-text>
+          <el-text v-if="scope.row.status === '1'" type="success">已完成</el-text>
+          <el-text v-if="scope.row.status === '2'" type="primary">进行中</el-text>
         </template>
       </el-table-column>
       <el-table-column label="备注" align="center" prop="event_title">
@@ -33,6 +33,8 @@
 </template>
 
 <script lang="ts" setup name="DataImportDetail">
+import { getSituation } from '@/api/PreventionResponsible';
+
 const props = defineProps({
   modelValue: Boolean
 });
@@ -54,15 +56,20 @@ const queryParams = reactive({
 const dataList = ref([]);
 
 const getList = () => {
-  dataList.value = [{}];
+  getSituation(queryParams).then((res) => {
+    dataList.value = res.data;
+    total.value = res.total;
+  })
 };
 
+
 let showDetails = ref(false);
 const handleShowDetails = (id) => {
   showDetails.value = true;
 };
 onMounted(() => {
   getList();
+
 });
 </script>
 

+ 7 - 2
src/components/DataImport/index.vue

@@ -45,6 +45,7 @@ import { download2, globalHeaders } from '@/utils/request';
 import { propTypes } from '@/utils/propTypes';
 import { v1 as uuidv1 } from 'uuid';
 import axios from 'axios';
+import { dataImport } from '@/api/PreventionResponsible';
 
 const props = defineProps({
   modelValue: Boolean,
@@ -196,6 +197,10 @@ const uploadByPieces = async (url, { fileName, file }) => {
     // 文件分片上传完成后,调用合并接口
     const res = await mergeChunks(identifier, file.name);
     res.originalName = file.name;
+    const res2 = await dataImport({
+      filename: res.filename,
+      file_name_desc: res.originalName,
+    })
     return res;
   } catch (e) {
     return e;
@@ -248,8 +253,8 @@ const uploadedSuccessfully = () => {
 
 // 下载模板
 const handleDownload = () => {
-  if (props.url) return false;
-  download2(props.url, props.fileName);
+  if (!props.url) return false;
+  download2(baseUrl + downLoadApi + props.url, props.fileName);
 };
 </script>
 

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

@@ -24,24 +24,14 @@ declare module 'vue' {
     DistributionMap: typeof import('./../components/Map/YztMap/DistributionMap.vue')['default']
     DrawMap: typeof import('./../components/Map/YztMap/DrawMap.vue')['default']
     Editor: typeof import('./../components/Editor/index.vue')['default']
-    ElAnchor: typeof import('element-plus/es')['ElAnchor']
-    ElAnchorLink: typeof import('element-plus/es')['ElAnchorLink']
     ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
-    ElCard: typeof import('element-plus/es')['ElCard']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
-    ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
     ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
-    ElCollapse: typeof import('element-plus/es')['ElCollapse']
-    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
-    ElContainer: typeof import('element-plus/es')['ElContainer']
-    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
-    ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
-    ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
     ElDialog: typeof import('element-plus/es')['ElDialog']
     ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
@@ -51,45 +41,28 @@ declare module 'vue' {
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
-    ElHeader: typeof import('element-plus/es')['ElHeader']
     ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
-    ElLink: typeof import('element-plus/es')['ElLink']
-    ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     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']
-    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
-    ElSegmented: typeof import('element-plus/es')['ElSegmented']
     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']
-    ElSpace: typeof import('element-plus/es')['ElSpace']
-    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']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
-    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']
     ExcelEditor: typeof import('./../components/ExcelEditor/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     FooterSection: typeof import('./../components/FooterSection/index.vue')['default']
@@ -102,7 +75,6 @@ declare module 'vue' {
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
     IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
     IEpCaretTop: typeof import('~icons/ep/caret-top')['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']

+ 1 - 1
src/views/comprehensiveGuarantee/materialReserves/materialsDeclaration.vue

@@ -127,7 +127,7 @@ const handleCancel = (needUpdate) => {
 
 // 定义审批状态映射
 const approvalStatusMap = {
-  '1': '未审',
+  '1': '未审',
   '2': '通过',
   '3': '不通过'
 };

+ 1 - 2
src/views/comprehensiveGuarantee/materialReserves/materialsDeclarationView.vue

@@ -15,9 +15,8 @@
           </el-col>
           <el-col :span="12">
             <div class="text-box">
-              <div class="text1">审批状态2:</div>
+              <div class="text1">审批状态:</div>
               <div class="text2">
-                {{detailData.declaration_details}}f
                 <dict-tag :options="material_approval_status" :value="detailData.declaration_details" />
               </div>
             </div>

+ 34 - 44
src/views/comprehensiveGuarantee/materialReserves/materialsDistribution.vue

@@ -15,11 +15,11 @@
             {{ (queryParams.page - 1) * queryParams.pageSize + scope.$index + 1 }}
           </template>
         </el-table-column>
-        <el-table-column label="调度目的" align="center" prop="dispatching_purpose" />
+        <el-table-column label="调度目的" align="center" prop="dispatch_purpose" />
         <el-table-column label="调度日期" align="center" prop="dispatch_date" />
-        <el-table-column label="申报单位" align="center" prop="application_unit" />
-        <el-table-column label="申请人" align="center" prop="declarant" />
-        <el-table-column label="审批情况" align="center" prop="approval_status" />
+        <el-table-column label="申报单位" align="center" prop="dispatch_unit_name" />
+        <el-table-column label="申请人" align="center" prop="dispatch_person_name" />
+        <el-table-column label="审批情况" align="center" prop="dispatch_status" />
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
           <template #default="scope">
             <el-text class="common-btn-text-primary" @click="handleView(scope.row)">详情</el-text>
@@ -35,7 +35,7 @@
         @pagination="fetchWorkrData"
       />
     </div>
-    <MaterialsDistributionView v-if="materialsDistributionViewState.show" :event-id="materialsDistributionViewState.eventId" @close="handleCancel" />
+    <MaterialsDistributionView v-if="materialsDistributionViewState.show" :id="materialsDistributionViewState.id" @close="handleCancel" />
     <MaterialsDistributionAdd v-if="materialsDistributionAddState.show" @close="handleCancel" />
   </div>
 </template>
@@ -46,7 +46,8 @@ import { ElTable, ElTableColumn, ElButton, ElText } from 'element-plus';
 import { ComponentInternalInstance, getCurrentInstance } from 'vue';
 import Pagination from '@/components/Pagination/index.vue'; // 假设这是分页组件的路径
 import MaterialsDistributionView from './materialsDistributionView.vue'; // 查看详情组件
-import MaterialsDistributionAdd from './materialsDistributionAdd.vue'; // 编辑组件
+import MaterialsDistributionAdd from './materialsDistributionAdd.vue';
+import { getDispatchtList } from '@/api/comprehensiveGuarantee/materialReserveManagement/materialsDistribution'; // 编辑组件
 const loading = ref(true);
 const showSearch = ref(true);
 const multiple = ref(true);
@@ -59,11 +60,13 @@ const selectedRow = ref<any | null>(null);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
 const initFormData = reactive({
-  dispatching_purpose: '',
+  dispatch_purpose: '',
   dispatch_date: '',
-  application_unit: '',
-  declarant: '',
-  approval_status: ''
+  dispatch_unit: '',
+  dispatch_unit_name: '',
+  dispatch_person_name: '',
+  dispatch_person: '',
+  dispatch_status: ''
 });
 
 const data = reactive({
@@ -75,39 +78,26 @@ const data = reactive({
 });
 
 const { queryParams, form } = toRefs(data);
-const mockData = [
-  {
-    id: 1,
-    dispatch_date: '2024-10-29 12:23:00',
-    dispatching_purpose: '应对高州泰利台风前置',
-    application_unit: '茂名市应急管理局',
-    declarant: 'XX',
-    approval_status: '未审批'
-  },
-  {
-    id: 2,
-    dispatch_date: '2024-10-30 12:23:00',
-    dispatching_purpose: '应对电白泰利台风前置',
-    application_unit: '茂名市应急管理局',
-    declarant: 'XX',
-    approval_status: '审批通过'
-  },
-  {
-    id: 3,
-    dispatch_date: '2024-10-31 12:23:00',
-    dispatching_purpose: '应对茂南泰利台风前置',
-    application_unit: '茂名市应急管理局',
-    declarant: 'XX',
-    approval_status: '审批不通过'
-  }
-];
 
+const statusMap = {
+  '1': '未审批',
+  '2': '审批通过',
+  '3': '审批不通过'
+};
 const fetchWorkrData = () => {
   loading.value = true;
-  tableData.value = mockData;
-  total.value = mockData.length;
-
-  loading.value = false;
+  getDispatchtList(queryParams.value)
+    .then((res) => {
+      const transformedData = res.data.map(item => ({
+        ...item,
+        dispatch_status: statusMap[item.dispatch_status] || '未知状态'
+      }));
+      tableData.value = transformedData;
+      total.value = res.total;
+    })
+    .finally(() => {
+      loading.value = false;
+    });
 };
 
 const handleQuery = () => {
@@ -122,24 +112,24 @@ const resetQuery = () => {
 
 let materialsDistributionViewState = reactive({
   show: false,
-  eventId: ''
+  id: ''
 });
 
 let materialsDistributionAddState = reactive({
   show: false,
-  eventId: ''
+  id: ''
 });
 
 const handleAdd = () => {
   materialsDistributionAddState.show = true;
 };
 const handleView = (row: any) => {
-  materialsDistributionViewState.eventId = row.id;
+  materialsDistributionViewState.id = row.id;
   materialsDistributionViewState.show = true;
 };
 
 const handleUpdate = (row: any) => {
-  materialsDistributionAddState.eventId = row.id;
+  materialsDistributionAddState.id = row.id;
   materialsDistributionAddState.show = true;
 };
 

+ 73 - 69
src/views/comprehensiveGuarantee/materialReserves/materialsDistributionAdd.vue

@@ -1,77 +1,81 @@
 <template>
-  <div class="app-container p-2">
-    <el-row :gutter="20">
-      <el-col :span="6">
-        <h2>新增</h2>
-      </el-col>
-      <el-col :lg="24" :xs="24">
-        <el-table :data="tableData" border height="400">
-          <el-table-column label="序号" prop="seqNo" width="80">
-            <template #default="{ $index }">
-              <span>{{ $index + 1 }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="物资类型" prop="materialType">
-            <template #default="{ row, $index }">
-              <span
-                class="editable-span"
-                contenteditable="true"
-                @blur="saveEdit($index, 'materialType', $event.target.innerText)"
-                v-text="row.materialType"
-              ></span>
-            </template>
-          </el-table-column>
-          <el-table-column label="物资名称" prop="materialName">
-            <template #default="{ row, $index }">
-              <span
-                class="editable-span"
-                contenteditable="true"
-                @blur="saveEdit($index, 'materialName', $event.target.innerText)"
-                v-text="row.materialName"
-              ></span>
-            </template>
-          </el-table-column>
-          <el-table-column label="物资数量(件)" prop="quantity">
-            <template #default="{ row, $index }">
-              <span
-                class="editable-span"
-                contenteditable="true"
-                @blur="saveEdit($index, 'quantity', $event.target.innerText)"
-                v-text="row.quantity"
-              ></span>
-            </template>
-          </el-table-column>
-          <el-table-column label="物资用途" prop="purpose">
-            <template #default="{ row, $index }">
-              <span
-                class="editable-span"
-                contenteditable="true"
-                @blur="saveEdit($index, 'purpose', $event.target.innerText)"
-                v-text="row.purpose"
-              ></span>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-col>
-      <div class="common-dialog-footer" style="width: 100%; justify-content: center; display: flex">
-        <el-row :span="24" :gutter="10" class="mb8">
-          <el-col :span="1.5">
-            <el-button type="primary" @click="handleAddRow">新增一项</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="primary" @click="handleSave">提交</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" @click="handleReturn">取消</el-button>
-          </el-col>
-        </el-row>
-      </div>
-    </el-row>
+  <div class="common-dialog">
+    <div class="common-dialog-content">
+      <el-row :gutter="20">
+        <div class="common-dialog-title-box">
+          <i class="common-dialog-title-icon" />
+          <div>新增物资调度</div>
+        </div>
+        <el-col :lg="24" :xs="24">
+          <div class="common-dialog-box">
+            <el-table :data="tableData" border height="400">
+              <el-table-column label="序号" prop="seqNo" width="80">
+                <template #default="{ $index }">
+                  <span>{{ $index + 1 }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="物资类型" prop="materialType">
+                <template #default="{ row, $index }">
+                  <span
+                    class="editable-span"
+                    contenteditable="true"
+                    @blur="saveEdit($index, 'materialType', $event.target.innerText)"
+                    v-text="row.materialType"
+                  ></span>
+                </template>
+              </el-table-column>
+              <el-table-column label="物资名称" prop="materialName">
+                <template #default="{ row, $index }">
+                  <span
+                    class="editable-span"
+                    contenteditable="true"
+                    @blur="saveEdit($index, 'materialName', $event.target.innerText)"
+                    v-text="row.materialName"
+                  ></span>
+                </template>
+              </el-table-column>
+              <el-table-column label="物资数量(件)" prop="quantity">
+                <template #default="{ row, $index }">
+                  <span
+                    class="editable-span"
+                    contenteditable="true"
+                    @blur="saveEdit($index, 'quantity', $event.target.innerText)"
+                    v-text="row.quantity"
+                  ></span>
+                </template>
+              </el-table-column>
+              <el-table-column label="物资用途" prop="purpose">
+                <template #default="{ row, $index }">
+                  <span
+                    class="editable-span"
+                    contenteditable="true"
+                    @blur="saveEdit($index, 'purpose', $event.target.innerText)"
+                    v-text="row.purpose"
+                  ></span>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-col>
+        <div class="common-dialog-footer" style="width: 100%; justify-content: center; display: flex">
+          <el-row :span="24" :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button type="primary" @click="handleAddRow">新增一项</el-button>
+            </el-col>
+            <el-col :span="1.5">
+              <el-button type="primary" @click="handleSave">提交</el-button>
+            </el-col>
+            <el-col :span="1.5">
+              <el-button type="danger" @click="handleReturn">取消</el-button>
+            </el-col>
+          </el-row>
+        </div>
+      </el-row>
+    </div>
   </div>
 </template>
 
 <script setup lang="ts">
-
 const props = defineProps({
   eventId: String
 });

+ 100 - 62
src/views/comprehensiveGuarantee/materialReserves/materialsDistributionView.vue

@@ -2,49 +2,57 @@
   <div class="common-dialog">
     <div class="common-dialog-content">
       <div class="common-dialog-title-box">
-        <h3 class="common-dialog-title">查看详情</h3>
+        <i class="common-dialog-title-icon" />
+        <div>物资调度详情</div>
       </div>
       <div class="common-dialog-box">
-        <el-form ref="form" :model="formData" :rules="rules" label-width="120px">
-          <el-form-item label="姓名:" prop="name">
-            <el-input v-model="formData.name" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="所属区县:" prop="county">
-            <el-input v-model="formData.county" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="专家类型:" prop="expert_type">
-            <el-input v-model="formData.expert_type" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="职位:" prop="position">
-            <el-input v-model="formData.position" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="单位:" prop="unit">
-            <el-input v-model="formData.unit" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="联系电话:" prop="phone">
-            <el-input v-model="formData.phone" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="现在地址:" prop="address">
-            <el-input v-model="formData.address" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="状态:" prop="status">
-            <el-input v-model="formData.status" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="擅长事故类型:" prop="accident_type">
-            <el-input v-model="formData.accident_type" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="救援经历:" prop="rescue_experience">
-            <el-input v-model="formData.rescue_experience" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="出生日期:" prop="birthdate">
-            <el-input v-model="formData.birthdate" style="width: 468px !important" disabled />
-          </el-form-item>
-          <el-form-item label="工作日期:" prop="work_date">
-            <el-input v-model="formData.work_date" style="width: 468px !important" disabled />
-          </el-form-item>
-        </el-form>
-        <div class="common-dialog-footer">
-          <el-button type="primary" @click="closeDialog">返回</el-button>
+        <el-row :gutter="24" style="width: 100%">
+          <el-col :span="12">
+            <div class="text-box">
+              <div class="text1">调度目的:</div>
+              <div v-show="!!detailData.dispatch_purpose" class="text2">{{ detailData.dispatch_purpose }}</div>
+            </div>
+          </el-col>
+          <el-col :span="12">
+            <div class="text-box">
+              <div class="text1">调度日期:</div>
+              <div v-show="!!detailData.dispatch_date" class="text2">{{ detailData.dispatch_date }}</div>
+            </div>
+          </el-col>
+        </el-row>
+        <el-row :gutter="24" style="width: 100%">
+          <el-col :span="12">
+            <div class="text-box">
+              <div class="text1">申报单位:</div>
+              <div v-show="!!detailData.dispatch_unit_name" class="text2">{{ detailData.dispatch_unit_name }}</div>
+            </div>
+          </el-col>
+          <el-col :span="12">
+            <div class="text-box">
+              <div class="text1">申请人:</div>
+              <div v-show="!!detailData.dispatch_person_name" class="text2">{{ detailData.dispatch_person_name }}</div>
+            </div>
+          </el-col>
+        </el-row>
+        <el-table :data="detailData.detail" border :height="height">
+          <el-table-column label="序号" width="80" align="center">
+            <template #default="{ $index }">
+              <span>{{ $index + 1 }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="仓库" prop="warehouse_name" align="center" />
+          <el-table-column label="物资类型" prop="material_type" align="center" />
+          <el-table-column label="物资代码" prop="material_code" align="center" />
+          <el-table-column label="物资名称" prop="material_name" align="center" />
+          <el-table-column label="物资数量(件)" prop="material_quantity" align="center" />
+          <el-table-column label="物资用途" prop="material_purpose" align="center" />
+        </el-table>
+        <div class="common-dialog-footer" style="margin-top: 18px">
+          <el-row :span="24" :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button type="primary" @click="handleReturn">返回</el-button>
+            </el-col>
+          </el-row>
         </div>
       </div>
     </div>
@@ -52,32 +60,62 @@
 </template>
 
 <script setup lang="ts">
-import { ref, watch } from 'vue';
+import { getDispatchInfo } from '@/api/comprehensiveGuarantee/materialReserveManagement/materialsDistribution';
 
-const emits = defineEmits(['close']);
-const props = defineProps<{
-  eventId: string | number;
-}>();
+const props = defineProps({
+  id: String
+});
 
-// 模拟的数据
-const formData = ref({
-  name: '张三',
-  county: '朝阳区',
-  expert_type: '安全工程',
-  position: '高级工程师',
-  unit: '北京市应急管理局',
-  phone: '13800138000',
-  address: '北京市朝阳区XX路XX号',
-  status: '在职',
-  accident_type: '火灾、爆炸',
-  rescue_experience: '参与过多次重大事故救援,经验丰富。',
-  birthdate: '1975-05-20',
-  work_date: '2000-01-01'
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const emits = defineEmits(['close']);
+let detailData = reactive({
+  dispatch_date: '',
+  dispatch_purpose: '',
+  dispatch_unit_name: '',
+  dispatch_person_name: '',
+  dispatch_status: '',
+  detail: []
 });
 
-const closeDialog = () => {
+const handleReturn = () => {
   emits('close');
 };
+
+let height = ref(300);
+// 计算表格高度
+const calcHeight = () => {
+  const el = document.getElementsByClassName('common-dialog-content')[0];
+  height.value = el && el.clientHeight - 173 > 400 ? el.clientHeight - 173 : 300;
+};
+onMounted(() => {
+  getDispatchInfo(props.id).then((res) => {
+    detailData.dispatch_date = res.data.dispatch_date;
+    detailData.dispatch_purpose = res.data.dispatch_purpose;
+    detailData.dispatch_unit_name = res.data.dispatch_unit_name;
+    detailData.dispatch_person_name = res.data.dispatch_person_name;
+    detailData.dispatch_status = res.data.dispatch_status;
+    detailData.detail = res.data.detail;
+  });
+  calcHeight();
+  window.addEventListener('resize', calcHeight);
+});
+onUnmounted(() => {
+  window.removeEventListener('resize', calcHeight);
+});
 </script>
 
-<style scoped></style>
+<style lang="scss" scoped>
+.text-box {
+  display: flex;
+  align-items: center;
+  padding-bottom: 10px;
+  color: rgba(0, 0, 0, 0.85);
+  .text1 {
+    font-size: 18px;
+    font-weight: bold;
+  }
+  .text2 {
+    font-size: 18px;
+  }
+}
+</style>

+ 72 - 16
src/views/dataFilling/fillingManage.vue

@@ -4,21 +4,34 @@
       <div>
         <transition name="fade">
           <div v-show="showSearch">
-            <el-form ref="queryFormRef" :model="form">
+            <el-form ref="queryFormRef" :model="queryParams">
               <el-row :gutter="20">
                 <!-- 表格名称 -->
                 <el-col :span="6">
                   <el-form-item label="表格名称:" prop="table_name" label-width="auto">
-                    <el-input v-model="form.table_name" placeholder="请输入表格名称"></el-input>
+                    <el-input v-model="queryParams.table_name" placeholder="请输入表格名称"></el-input>
                   </el-form-item>
                 </el-col>
                 <!-- 表格状态 -->
                 <el-col :span="6">
-                  <el-form-item label="表格状态:" prop="task_status">
-                    <el-radio-group v-model="form.task_status">
-                      <el-radio value="0" size="large">在用</el-radio>
-                      <el-radio value="1" size="large">禁止</el-radio>
-                    </el-radio-group>
+                  <el-form-item label="任务状态:" prop="status">
+<!--                    <el-radio-group v-model="form.task_status">-->
+<!--                      <el-radio value="0" size="large">在用</el-radio>-->
+<!--                      <el-radio value="1" size="large">禁止</el-radio>-->
+<!--                    </el-radio-group>-->
+                    <el-select
+                      v-model="queryParams.status"
+                      clearable
+                      placeholder="请选择"
+                      style="width: 240px"
+                    >
+                      <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
                   </el-form-item>
                 </el-col>
                 <!-- 发布时间 -->
@@ -36,11 +49,24 @@
                 </el-col>
                 <!-- 下发状态 -->
                 <el-col :span="6">
-                  <el-form-item label="下发状态:" prop="release_status">
-                    <el-radio-group v-model="form.release_status">
-                      <el-radio value="0" size="large">待发布</el-radio>
-                      <el-radio value="1" size="large">已发布</el-radio>
-                    </el-radio-group>
+                  <el-form-item label="发布状态:" prop="issued_status">
+<!--                    <el-radio-group v-model="queryParams.issued_status">-->
+<!--                      <el-radio value="0" size="large">待发布</el-radio>-->
+<!--                      <el-radio value="1" size="large">已发布</el-radio>-->
+<!--                    </el-radio-group>-->
+                    <el-select
+                      v-model="queryParams.issued_status"
+                      clearable
+                      placeholder="请选择"
+                      style="width: 240px"
+                    >
+                      <el-option
+                        v-for="item in options1"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
                   </el-form-item>
                 </el-col>
                 <!-- 操作按钮 -->
@@ -58,7 +84,7 @@
         <el-table ref="multipleTable" v-loading="loading" :data="tableData" @selection-change="handleSelectionChange">
           <el-table-column label="序号" align="center" prop="id" />
           <el-table-column label="表格名称" align="center" prop="table_name" />
-          <el-table-column label="发布日期" align="center" prop="created_at" />
+          <el-table-column label="发布日期" align="center" prop="start_time" />
           <el-table-column label="发布状态" align="center" prop="issued_status">
             <template #default="scope">
               {{ scope.row.issued_status === 2 ? '已发布' : '待发布' }}
@@ -99,6 +125,8 @@ import TableDetails from './tableDetails.vue';
 import { ElButton, ElCol } from 'element-plus';
 import { fillingSelect, fillingRelease } from '@/api/dataFilling/fillingManage';
 import * as XLSX from 'xlsx';
+import { deepClone } from '@/utils';
+import { parseTime } from '@/utils/ruoyi';
 
 const loading = ref(true);
 const showSearch = ref(true);
@@ -108,13 +136,32 @@ const total = ref(0);
 const tableData = ref([]);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
+const options = [
+  {
+    value: '0',
+    label: '禁止',
+  },
+  {
+    value: '1',
+    label: '在用',
+  }]
+const options1 = [
+  {
+    value: '1',
+    label: '待发布',
+  },
+  {
+    value: '2',
+    label: '已发布',
+  }]
 const initFormData = reactive({
   table_id: '',
   table_name: '',
   filling_time: '',
   release_time: '',
   release_status: '',
-  task_status: ''
+  task_status: '',
+  status: ''
 });
 
 const data = reactive({
@@ -124,7 +171,9 @@ const data = reactive({
     pageSize: 10,
     table_name: '',
     release_status: '',
-    task_status: ''
+    task_status: '',
+    status: '',
+    issued_status:''
   }
 });
 
@@ -159,8 +208,15 @@ const handleView = (row) => {
 
 const fetchFillList = () => {
   loading.value = true;
-  fillingSelect(queryParams.value)
+  const params = deepClone(queryParams.value);
+  params.status = !queryParams.value.status ? [] : [queryParams.value.status];
+  params.issued_status = !queryParams.value.issued_status ? [] : [queryParams.value.issued_status];
+  fillingSelect(params)
     .then((res) => {
+      for(let i = 0; i < res.data.length; i++) {
+        res.data[i].end_time = parseTime(res.data[i].end_time);
+        res.data[i].start_time = parseTime(res.data[i].start_time);
+      }
       tableData.value = res.data;
       total.value = res.total;
     })

+ 38 - 7
src/views/dataFilling/myFilling.vue

@@ -12,11 +12,26 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
+<!--                  <el-form-item label="任务状态:" prop="submission_status">-->
+<!--                    <el-radio-group v-model="queryParams.submission_status">-->
+<!--                      <el-radio value="0" size="large">待填报</el-radio>-->
+<!--                      <el-radio value="1" size="large">已上报</el-radio>-->
+<!--                    </el-radio-group>-->
+<!--                  </el-form-item>-->
                   <el-form-item label="任务状态:" prop="submission_status">
-                    <el-radio-group v-model="queryParams.submission_status">
-                      <el-radio value="0" size="large">待填报</el-radio>
-                      <el-radio value="1" size="large">已上报</el-radio>
-                    </el-radio-group>
+                    <el-select
+                      v-model="queryParams.submission_status"
+                      clearable
+                      placeholder="请选择"
+                      style="width: 240px"
+                    >
+                      <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
@@ -66,6 +81,8 @@ import { fillList } from '@/api/dataFilling/datafilling';
 import WriteForm from './writeForm.vue';
 import FormDetail from './formDetail.vue';
 import { ComponentInternalInstance, getCurrentInstance } from 'vue';
+import { parseTime } from '@/utils/ruoyi';
+import { deepClone } from '@/utils';
 
 const loading = ref(true);
 const showSearch = ref(true);
@@ -75,7 +92,15 @@ const single = ref(true);
 const total = ref(0);
 const tableData = ref([]);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-
+const options = [
+  {
+    value: '0',
+    label: '待填报',
+  },
+  {
+    value: '1',
+    label: '已上报',
+  }]
 const initFormData = reactive({
   report_id: '',
   table_name: '',
@@ -90,7 +115,7 @@ const data = reactive({
     page: 1,
     pageSize: 10,
     table_name: '',
-    submission_status: []
+    submission_status: ''
   }
 });
 
@@ -127,8 +152,14 @@ const handleView = (row) => {
 
 const fetchFillList = () => {
   loading.value = true;
-  fillList(queryParams.value)
+  const params = deepClone(queryParams.value);
+  params.submission_status = !queryParams.value.submission_status ? [] : [queryParams.value.submission_status]
+  fillList(params)
     .then((res) => {
+      for(let i = 0; i < res.data.length; i++) {
+        res.data[i].end_time = parseTime(res.data[i].end_time);
+        res.data[i].start_time = parseTime(res.data[i].start_time);
+      }
       tableData.value = res.data;
       total.value = res.total;
     })

+ 14 - 10
src/views/setting/PreventionResponsible/Edit.vue

@@ -6,7 +6,7 @@
         <div>修改三防责任人信息</div>
       </div>
       <div class="common-dialog-box">
-        <el-form ref="formRef" :model="form" :rules="data.rules" style="width: 1000px">
+        <el-form ref="formRef" label-width="100px" :model="form" :rules="data.rules" style="width: 1000px" >
           <el-form-item label="姓名:" prop="name">
             <el-input v-model="form.name" />
           </el-form-item>
@@ -120,7 +120,7 @@
 </template>
 
 <script setup lang="ts">
-import { ElMessage } from 'element-plus';
+import { ElForm, ElMessage } from 'element-plus';
 import { updateData, getPersonRespon, getRegionalTree, responsibleDetail } from '@/api/PreventionResponsible';
 import { deepClone } from '@/utils';
 import { watch } from 'vue';
@@ -160,7 +160,7 @@ const data = reactive({
   }
 });
 const { form } = toRefs(data);
-const emits = defineEmits(['close']);
+const emits = defineEmits(['close','confirm']);
 const formRef = ref<InstanceType<typeof ElForm> | null>(null);
 const options1 = ref('');
 const options2 = ref('');
@@ -350,19 +350,23 @@ const setDefaultAreaSelection = (areaList, areaCode) => {
   data2.value = areaList[2] ? areaList[2].id : '';
   data3.value = areaList[3] ? areaList[3].id : '';
   form.value.area_code = areaCode;
-  getRegionalTree(data1.value).then((res) => {
-    options2.value = res.data;
-  });
-  getRegionalTree(data2.value).then((res) => {
-    options3.value = res.data;
-  });
+  if (!!data1.value) {
+    getRegionalTree(data1.value).then((res) => {
+      options2.value = res.data;
+    });
+  }
+  if (!!data2.value) {
+    getRegionalTree(data2.value).then((res) => {
+      options3.value = res.data;
+    });
+  }
 };
 const submitNewPerson = async () => {
   await formRef.value.validate((valid) => {
     if (valid) {
       updateData(form.value).then((res) => {
         proxy.$modal.msgSuccess('更新成功');
-        goBack();
+        emits('confirm');
       });
     }
   });

+ 1 - 1
src/views/setting/PreventionResponsible/add.vue

@@ -9,7 +9,7 @@
         <div>新建三防责任人信息</div>
       </div>
       <div class="common-dialog-box">
-        <el-form ref="formRef" :model="form" :rules="rules" label-width="70px">
+        <el-form ref="formRef" :model="form" :rules="data.rules" label-width="100px">
           <el-form-item label="姓名:" prop="name">
             <el-input v-model="form.name" placeholder="请输入姓名" />
           </el-form-item>

+ 27 - 16
src/views/setting/PreventionResponsible/index.vue

@@ -9,14 +9,13 @@
               ref="deptTreeRef"
               class="mt-2"
               node-key="id"
+              :data="treeData"
               :props="defaultProps"
               :expand-on-click-node="false"
               :filter-node-method="filterNode"
               highlight-current
               @node-click="handleNodeClick"
               :default-expanded-keys="treeExpandelKeys"
-              :load="loadNode"
-              lazy
             />
           </el-col>
           <el-col :lg="20" :xs="24">
@@ -96,11 +95,11 @@
           </el-col>
         </el-row>
       </div>
-      <DataImport v-model="uploadShow" url="" file-name="责任人信息批量导入模板" steps-text="责任人信息" />
-      <DataImportDetail v-model="showUploadDetails" />
+      <DataImport v-model="uploadShow" url="9b6a6246-d6de-11ef-bfa9-fa163e4bf12e.xlsx" file-name="责任人信息批量导入模板.xlsx" steps-text="责任人信息" />
+      <DataImportDetail v-model="showUploadDetails" v-if="showUploadDetails" />
       <detail v-if="detailState.show" :id="detailState.id" @close="handledetailClose"></detail>
       <add v-if="addState.show" @close="handleAddClose" @refresh="getList"></add>
-      <Edit v-if="EditState.show" :id="EditState.id" @close="handleEditClose" @refresh="getList"></Edit>
+      <Edit v-if="EditState.show" :id="EditState.id" @close="handleEditClose" @confirm="handleSure" @refresh="getList"></Edit>
     </div>
   </div>
 </template>
@@ -108,7 +107,7 @@
 <script setup lang="ts">
 import api from '@/api/system/user';
 import { UserForm, UserQuery, UserVO } from '@/api/system/user/types';
-import { deleteData, getRegionalTree, getTableList } from '@/api/PreventionResponsible/index';
+import { deleteData, getRegionalTree, getRegionalTree3, getTableList } from '@/api/PreventionResponsible/index';
 import { DeptVO } from '@/api/system/dept/types';
 import { RoleVO } from '@/api/system/role/types';
 import { PostQuery, PostVO } from '@/api/system/post/types';
@@ -137,6 +136,8 @@ const deptOptions = ref<DeptVO[]>([]);
 const initPassword = ref<string>('');
 const postOptions = ref<PostVO[]>([]);
 const roleOptions = ref<RoleVO[]>([]);
+// const treeData = ref({});
+const treeData: Tree[] = ref([]);
 // 列显隐信息
 const columns = ref<FieldOption[]>([
   { key: 0, label: `用户编号`, visible: false, children: [] },
@@ -167,7 +168,7 @@ const initFormData: UserForm = {
   type_parent_list: []
 };
 
-const initData: PageData<UserForm, UserQuery> = {
+const initData = {
   form: { ...initFormData },
   queryParams: {
     page: 1,
@@ -243,15 +244,16 @@ let defaultProps = reactive({
   children: "children",
   isLeaf: 'isShowSelect',
 });
-const loadNode = (node: Node, resolve: (data: Tree[]) => void) => {
-  const id = node.level === 0 ? "1" : node.data.id;
-  fetchData(resolve, id);
-};
+// const loadNode = (node: Node, resolve: (data: Tree[]) => void) => {
+//   const id = node.level === 0 ? "1" : node.data.id;
+//   fetchData(resolve, id);
+// };
 const fetchData = async (resolve, id) => {
   let res = await getRegionalTree(id);
   return resolve(res.data);
 };
 
+
 /** 查询用户列表 */
 const getList = async () => {
   loading.value = true;
@@ -273,14 +275,14 @@ const handleNodeClick = (data: DeptVO) => {
 
 /** 搜索按钮操作 */
 const handleQuery = () => {
-  queryParams.value.pageNum = 1;
+  queryParams.value.page = 1;
   getList();
 };
 
 /** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
-  queryParams.value.pageNum = 1;
+  queryParams.value.page = 1;
   deptTreeRef.value?.setCurrentKey(undefined);
   handleQuery();
 };
@@ -317,14 +319,20 @@ let EditState = reactive({
 // 新建责任人按钮操作
 const handleAddClose = () => {
   addState.show = false;
-  queryParams.value.pageNum = 1;
+  queryParams.value.page = 1;
   getList();
 };
 const handleEditClose = () => {
   EditState.show = false;
-  queryParams.value.pageNum = 1;
-  getList();
+
+  // queryParams.value.page = 1;
+  // getList();
 };
+const handleSure = () => {
+  EditState.show = false;
+  queryParams.value.page = 1;
+  getList();
+}
 const handleAdd = (row: UserVO) => {
   addState.show = true;
   addState.id = row.id;
@@ -413,6 +421,9 @@ onMounted(() => {
   proxy?.getConfigKey('sys.user.initPassword').then((response) => {
     initPassword.value = response.data;
   });
+  getRegionalTree3().then((res) => {
+    treeData.value = res.data;
+  })
 });
 // 监听查询参数变化并重新获取数据
 watch(queryParams, () => {