ソースを参照

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

zhangyihao 7 ヶ月 前
コミット
5f441967f3

+ 1 - 1
src/api/globalMap/KeyVehicles.ts

@@ -16,7 +16,7 @@ export const getVehicleTrajectory = (id) => {
     method: 'post',
     data: {
       query: {
-        id: id
+        vehicle_no: id
       }
     }
   });

BIN
src/assets/images/car.png


+ 5 - 1
src/hooks/AMap/useAMap.ts

@@ -2,6 +2,7 @@ import AMapLoader from '@amap/amap-jsapi-loader';
 import { nanoid } from 'nanoid';
 import { deepClone, initDrag } from '@/utils';
 import { mergeGeoJsonPolygons, wgs_gcj_encrypts } from '@/utils/gisUtils';
+import carImg from '@/assets/images/car.png';
 
 export function useAMap(options) {
   let AMap, map, nowLayer, labelsLayer, scale, cluster;
@@ -398,6 +399,9 @@ export function useAMap(options) {
   };
   let moveMarker, movePolyline, movePassedPolyline, timerId;
   const trackPlayback = (lineArr) => {
+    if (!lineArr || lineArr.length === 0) {
+      return;
+    }
     if (timerId) {
       clearTimeout(timerId);
     }
@@ -407,7 +411,7 @@ export function useAMap(options) {
     let index = 0;
     const icon = new AMap.Icon({
       size: new AMap.Size(26, 52),
-      image: 'https://a.amap.com/jsapi_demos/static/demo-center-v2/car.png'
+      image: carImg
     });
     moveMarker = new AMap.Marker({
       map: map,

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

@@ -31,13 +31,10 @@ declare module 'vue' {
     ElButton: typeof import('element-plus/es')['ElButton']
     ElCard: typeof import('element-plus/es')['ElCard']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
-    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
     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']
@@ -55,8 +52,6 @@ declare module 'vue' {
     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']

+ 94 - 0
src/utils/olMap/olMap.ts

@@ -37,6 +37,7 @@ import { deepClone, hexToRgba, initDrag } from '@/utils';
 import { createBox } from 'ol/interaction/Draw';
 import * as turf from '@turf/turf';
 import { nanoid } from 'nanoid';
+import carImg from '@/assets/images/car.png';
 
 const tk = 'a8df87f1695d224d2679aa805c1268d9';
 const commonUrl = import.meta.env.VITE_APP_BASE_API2 + 'api/oneShare/proxyHandler/gd/';
@@ -86,6 +87,10 @@ export class olMap {
   // 显示信息框
   private infoWindow;
   private select;
+  // 车辆轨迹
+  private carLayer;
+  private carFeature;
+  private traceFeature;
 
   constructor(options) {
     this.options = options;
@@ -927,6 +932,95 @@ export class olMap {
     this.drawVector.getSource().addFeature(feature);
     return feature;
   }
+  trackPlayback(lineArr) {
+    if (!!this.carFeature) {
+      this.carLayer.getSource().removeFeature(this.carFeature);
+    }
+    if (!!this.traceFeature) {
+      this.carLayer.getSource().removeFeature(this.traceFeature);
+    }
+    const getAngle = (point1, point2) => {
+      let arc = 0;
+      if (point2 && point2.length && point1 && point1.length) {
+        if ((point2[0] - point1[0] >= 0 && point2[1] - point1[1] >= 0) || (point2[0] - point1[0] < 0 && point2[1] - point1[1] > 0)) {
+          arc = Math.atan((point2[0] - point1[0]) / (point2[1] - point1[1]));
+        } else if ((point2[0] - point1[0] > 0 && point2[1] - point1[1] < 0) || (point2[0] - point1[0] < 0 && point2[1] - point1[1] < 0)) {
+          arc = Math.PI + Math.atan((point2[0] - point1[0]) / (point2[1] - point1[1]));
+        }
+      }
+      return arc;
+    };
+    let lastTime = Date.now();
+    const source = new VectorSource();
+    let distance = 0;
+    const angle = getAngle(lineArr[0], lineArr[1]);
+    const speed = 500;
+    let animationFlag = false;
+    this.carFeature = new Feature({
+      geometry: new Point(lineArr[0])
+    });
+    const icon = new Icon({
+      crossOrigin: 'anonymous',
+      src: carImg,
+      width: 26,
+      height: 52,
+      rotation: angle
+    });
+    this.carFeature.setStyle(
+      new Style({
+        image: icon
+      })
+    );
+    this.traceFeature = new Feature({
+      geometry: new LineString(lineArr)
+    });
+    let route = new LineString(lineArr);
+    this.carLayer = new VectorLayer({
+      source: source,
+      style: new Style({
+        stroke: new Stroke({
+          color: 'rgb(37,232,142)',
+          width: 5
+        })
+      })
+    });
+    this.carLayer.getSource().addFeatures([this.carFeature, this.traceFeature]);
+    const move = (e) => {
+      const time = e.frameState.time;
+      // 时间戳差(毫秒)
+      const elapsedTime = time - lastTime;
+      // 距离(其实是比例的概念)
+      distance = distance + (speed * elapsedTime) / 1e6;
+      if (distance >= 1) {
+        distance = 0;
+        animationFlag = false;
+        stopAnimation();
+        return;
+      }
+      // 保存当前时间
+      lastTime = time;
+      // 上次坐标
+      const lastCoord = this.carFeature.getGeometry().getCoordinates();
+      // 获取新位置的坐标点
+      const curCoord = route.getCoordinateAt(distance);
+      // 设置新坐标
+      this.carFeature.getGeometry().setCoordinates(curCoord);
+      this.map.getView().setCenter(curCoord);
+      // 设置角度
+      this.carFeature.getStyle().getImage().setRotation(getAngle(lastCoord, curCoord));
+      // 调用地图渲染
+      this.map.render();
+    };
+
+    const stopAnimation = () => {
+      this.carLayer.un('postrender', move);
+    };
+    this.map.addLayer(this.carLayer);
+    this.carLayer.on('postrender', move);
+    // 触发地图渲染
+    const geo = this.carFeature.getGeometry().clone();
+    this.carFeature.setGeometry(geo);
+  }
   getVectorLayer() {
     return this.vectorLayer;
   }

+ 12 - 12
src/views/comprehensiveGuarantee/MaterialReserveManagement/addOutbound.vue

@@ -7,11 +7,11 @@
       </div>
       <div class="common-dialog-box">
         <el-form ref="eventFormRef" :model="form" :rules="rules" label-width="200px">
-          <el-form-item label="出库单号:" prop="invoice_number">
+          <el-form-item label="出库单号:" prop="outbound_number">
             <el-input v-model="form.outbound_number" placeholder="请输入出库单号" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="库房名称:" prop="warehouse_number">
+          <el-form-item label="库房名称:" prop="warehouse_id">
             <el-tree-select
               v-model="form.warehouse_id"
               :data="warehouseName"
@@ -22,35 +22,35 @@
             />
           </el-form-item>
 
-          <el-form-item label="出库单商品总体积(cm³):" prop="commodity_volume">
+          <el-form-item label="出库单商品总体积(cm³):" prop="total_volume">
             <el-input v-model="form.total_volume" placeholder="请输入出库单商品总体积" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="出库单商品总重量(kg):" prop="commodity_weight">
+          <el-form-item label="出库单商品总重量(kg):" prop="total_weight">
             <el-input v-model="form.total_weight" placeholder="请输入出库单商品总重量" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="出库单发货总体积(cm³):" prop="shipped_volume">
+          <el-form-item label="出库单发货总体积(cm³):" prop="total_shipping_volume">
             <el-input v-model="form.total_shipping_volume" placeholder="请输入出库单发货总体积" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="出库单发货总重量(kg):" prop="shipped_weight">
+          <el-form-item label="出库单发货总重量(kg):" prop="total_shipping_weight">
             <el-input v-model="form.total_shipping_weight" placeholder="请输入出库单发货总重量" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="出库单商品总数量:" prop="commodity_number">
+          <el-form-item label="出库单商品总数量:" prop="total_quantity">
             <el-input v-model="form.total_quantity" placeholder="请输入出库单商品总数量" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="出库单发货时间:" prop="delivery_time">
-            <el-input v-model="form.shipping_time" placeholder="请输入出库单发货时间" style="width: 468px !important" />
+          <el-form-item label="出库单发货时间:" prop="shipping_time">
+            <el-date-picker v-model="form.shipping_time" type="datetime" placeholder="请输入出库单发货时间" value-format="YYYY-MM-DD" style="width: 468px"></el-date-picker>
           </el-form-item>
 
-          <el-form-item label="灾种名称:" prop="disaster_name">
+          <el-form-item label="灾种名称:" prop="disaster_type">
             <el-input v-model="form.disaster_type" placeholder="请输入灾种名称" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="调运机构名称:" prop="organization_name">
+          <el-form-item label="调运机构名称:" prop="dispatching_agency">
             <el-input v-model="form.dispatching_agency" placeholder="请输入调运机构名称" style="width: 468px !important" />
           </el-form-item>
 
@@ -58,7 +58,7 @@
             <el-input v-model="form.shipper_name" placeholder="请输入发货人姓名" style="width: 468px !important" />
           </el-form-item>
 
-          <el-form-item label="发货人手机:" prop="shipper_phone">
+          <el-form-item label="发货人手机:" prop="shipper_mobile">
             <el-input v-model="form.shipper_mobile" placeholder="请输入发货人手机" style="width: 468px !important" />
           </el-form-item>
 

+ 2 - 2
src/views/comprehensiveGuarantee/MaterialReserveManagement/outboundDetails.vue

@@ -5,9 +5,9 @@
         <h3 class="common-dialog-title">查看详情</h3>
       </div>
       <div class="common-dialog-box">
-        <el-form ref="formRef" :model="form" label-width="160px">
+        <el-form ref="formRef" :model="form" label-width="160px"  disabled class="custom-disabled" >
           <el-form-item label="仓库名称:" prop="warehouse_id">
-            <el-input v-model="form.warehouse_id" disabled class="custom-disabled" style="width: 468px" />
+            <el-input v-model="form.warehouse_id" style="width: 468px" />
           </el-form-item>
           <el-form-item label="出库单商品总体积(cm³):" prop="total_volume">
             <el-input v-model="form.total_volume" style="width: 468px" />

+ 2 - 2
src/views/globalMap/RightMenu/KeyVehicles.vue

@@ -74,10 +74,10 @@ const handleConnect = () => {};
 const handleCollaborate = () => {};
 // 轨迹
 const handleTrack = (item) => {
-  getVehicleTrajectory(item.id).then((res) => {
+  getVehicleTrajectory(item.vehicle_no).then((res) => {
     const trajectory = [];
     res.rows.forEach((item) => {
-      trajectory.push([item.longitude, item.latitude]);
+      trajectory.push([item.lng, item.lat]);
     });
     trackPlayback(trajectory);
   });

+ 1 - 1
src/views/globalMap/index.vue

@@ -288,7 +288,7 @@ const getPlaceSearch = () => {
 };
 const trackPlayback = (data) => {
   if (YMapType.includes(activeMap.value)) {
-    return map2Ref.value.trackPlayback(data);
+    return map2Ref.value.getMapUtils().trackPlayback(data);
   } else if (AMapType.includes(activeMap.value)) {
     return mapRef.value.trackPlayback(data);
   }

+ 25 - 13
src/views/riskPrevention/SafetyProductionManagement/BusinessPortraits.vue

@@ -6,7 +6,7 @@
         <transition name="fade">
           <div v-show="showSearch" class="mb-[10px]">
             <el-form ref="queryFormRef" :model="queryParams" :inline="true">
-              <el-form-item :span="5" label="辖区县:" prop="area_code" label-width="auto">
+              <el-form-item :span="5" label="辖区县" prop="area_code" label-width="auto">
                 <el-select v-model="queryParams.area_code" placeholder="全部" clearable>
                   <el-option v-for="item in county" :key="item.value" :label="item.label" :value="item.value"></el-option>
                 </el-select>
@@ -31,25 +31,25 @@
                 <el-button type="primary" icon="Plus" @click="handleAdd">新建</el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain :disabled="multiple" icon="Delete" @click="handleDelete(selectedRow)"> 删除 </el-button>
+                <el-button type="danger" plain :disabled="selected === 0" icon="Delete" @click="handleDelete(selectedRow)"> 删除 </el-button>
               </el-col>
             </el-row>
           </div>
         </transition>
         <el-table ref="multipleTable" v-loading="loading" :data="tableData" border :max-height="maxHeight" style="width: 96%" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" fixed />
-          <el-table-column label="企业名称" align="center" prop="company_name" fixed show-overflow-tooltip/>
-          <el-table-column label="辖区省" align="center" prop="province" show-overflow-tooltip/>
-          <el-table-column label="辖区市" align="center" prop="city" show-overflow-tooltip/>
-          <el-table-column label="辖区县" align="center" prop="district" show-overflow-tooltip/>
-          <el-table-column label="企业地址" align="center" prop="company_address" show-overflow-tooltip/>
-          <el-table-column label="企业负责人" align="center" prop="responsible_person" show-overflow-tooltip/>
-          <el-table-column label="移动电话" align="center" prop="phone" show-overflow-tooltip/>
-          <el-table-column label="企业类型" align="center" prop="company_type" show-overflow-tooltip/>
-                    <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
+          <el-table-column label="企业名称" align="center" prop="company_name" fixed />
+          <el-table-column label="辖区省" align="center" prop="province" />
+          <el-table-column label="辖区市" align="center" prop="city" />
+          <el-table-column label="辖区县" align="center" prop="district" />
+          <el-table-column label="企业地址" align="center" prop="company_address" />
+          <el-table-column label="企业负责人" align="center" prop="responsible_person" />
+          <el-table-column label="移动电话" align="center" prop="phone" />
+          <el-table-column label="企业类型" align="center" prop="company_type" />
+          <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
             <template #default="scope">
               <el-button type="text" class="common-btn-text-primary" @click="handleedit(scope.row)">编辑</el-button>
-              <el-button type="text" class="common-btn-text-primary" @click="handleDelete(scope.row)">移除</el-button>
+              <el-button type="text" class="common-btn-text-danger" @click="handleDelete(scope.row)">移除</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -58,7 +58,7 @@
           v-model:page="queryParams.page"
           v-model:limit="queryParams.pageSize"
           :total="total"
-          @pagination="tableData"
+          @pagination="fetchWorkrData"
         />
       </div>
     </div>
@@ -84,6 +84,8 @@ const single = ref(true);
 const loading = ref(false);
 const maxHeight = ref(window.innerHeight * 0.8);
 const total = ref();
+const selectedRow = ref();
+const selected = ref(0);
 // 处理窗口大小变化
 const handleResize = () => {
   maxHeight.value = window.innerHeight * 0.8;
@@ -169,6 +171,15 @@ const fetchWorkrData = () => {
   loading.value = true;
   getCompanyList(queryParams.value)
     .then((res) => {
+      res.data.forEach(item => {
+        if (item.company_type === '1') {
+          item.company_type = "危化企业";
+        } else if (item.company_type === '2') {
+          item.company_type = "非煤矿山";
+        } else {
+          item.company_type = "工贸";
+        }
+      })
       tableData.value = res.data;
       total.value = res.total;
     })
@@ -180,6 +191,7 @@ const fetchWorkrData = () => {
 const handleSelectionChange = (selection) => {
   ids.value = selection.map((item) => item.id);
   selectedRow.value = selection.length === 1 ? selection[0] : null;
+  selected.value = selection.length;
   single.value = selection.length != 1;
   multiple.value = !selection.length;
 };

+ 29 - 23
src/views/riskPrevention/SafetyProductionManagement/BussinessAdd.vue

@@ -5,27 +5,27 @@
       <div class="common-dialog-content">
         <div class="common-dialog-title-box">
           <i class="common-dialog-title-icon" />
-          <el-form-item>
-            <div class="back-btn" @click="goBack">
-              <el-icon><Back /></el-icon>
-              返回上一级
-            </div>
-          </el-form-item>
           <div>新建企业</div>
         </div>
         <div class="common-dialog-box">
           <el-form ref="demoFormRef" :model="form" label-width="100px" :rules="rules">
             <el-form-item label="企业名称:" prop="company_name">
-              <el-input v-model="form.company_name" placeholder="请输入企业名称" />
-            </el-form-item>
-            <el-form-item label="辖区省:" prop="province">
-              <el-input v-model="form.province" placeholder="请输入辖区省" />
-            </el-form-item>
-            <el-form-item label="辖区市:" prop="city">
-              <el-input v-model="form.city" placeholder="请输入辖区市" />
+              <el-input v-model="form.company_name" placeholder="请输入企业名称" style="width: 468px" />
             </el-form-item>
+<!--            <el-form-item label="辖区省:" prop="province">-->
+<!--              <el-select v-model="form.province" placeholder="请选择辖区省">-->
+<!--                <el-option v-for="item in provinceList" :label="item.label" :value="item.value" />-->
+<!--              </el-select>-->
+<!--            </el-form-item>-->
+<!--            <el-form-item label="辖区市:" prop="city">-->
+<!--              <el-select v-model="form.city" placeholder="请选择辖区市">-->
+<!--                <el-option v-for="item in cityList" :label="item.label" :value="item.value" />-->
+<!--              </el-select>-->
+<!--            </el-form-item>-->
             <el-form-item label="辖区县:" prop="district">
-              <el-input v-model="form.district" placeholder="请输入辖区县" />
+              <el-select v-model="form.district" placeholder="请选择辖区县">
+                <el-option v-for="item in district_type" :label="item.label" :value="item.value" />
+              </el-select>
             </el-form-item>
             <el-form-item label="企业地址:" prop="company_address">
               <el-input v-model="form.company_address" placeholder="请输入企业地址" />
@@ -37,7 +37,9 @@
               <el-input v-model="form.phone" placeholder="请输入移动电话" />
             </el-form-item>
             <el-form-item label="企业类型:" prop="company_type">
-              <el-input v-model="form.company_type" placeholder="请输入企业类型" />
+              <el-select v-model="form.company_type" placeholder="请选择企业类型">
+                <el-option v-for="item in enterprise_type" :label="item.label" :value="item.value" />
+              </el-select>
             </el-form-item>
           </el-form>
         </div>
@@ -50,18 +52,20 @@
   </div>
 </template>
 <script setup lang="ts">
-import { ref } from 'vue';
+import { ref, toRefs } from 'vue';
 import {addCompany, updateCompany} from "@/api/riskPrevention/BusinessPortraits";
+import { validatePhone } from '@/utils/validate';
 const demoFormRef = ref(null);
 const buttonLoading = ref(false);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { enterprise_type, district_type } = toRefs<any>(proxy?.useDict('enterprise_type','district_type'));
 const emits = defineEmits(['close']);
 let form = ref({
   company_name: '',
   province: '',
-  province_code: '0',
+  province_code: '440000000000',
   city: '',
-  city_code: '1',
+  city_code: '440900000000',
   district: '',
   district_code: '2',
   company_address: '',
@@ -78,19 +82,20 @@ const rules = ref({
   district: [{ required: true, message: '请选择辖区县', trigger: 'change' }],
   company_address: [{ required: true, message: '请选择企业地址', trigger: 'change' }],
   responsible_person: [{ required: true, message: '请选择企业负责人', trigger: 'change' }],
-  phone: [{ required: true, message: '请选择手机号码', trigger: 'change' }],
+  phone: [
+    { required: true, message: '电话不能为空', trigger: 'blur' },
+    { validator: validatePhone, message: '请输入正确格式的联系电话', trigger: 'blur' }
+  ],
   company_type: [{ required: true, message: '请选择企业类型', trigger: 'change' }],
 });
 // 提交表单
 const submitForm = () => {
-
   demoFormRef.value?.validate(async (valid) => {
     if (valid) {
       try {
         buttonLoading.value = true;
-
-        form.value.task_number ? await updateCompany(form.value) : await addCompany(form.value);
-        proxy?.$modal.msgSuccess(form.value.task_number ? '修改成功' : '新增成功');
+        await addCompany(form.value);
+        proxy?.$modal.msgSuccess('新增成功');
         emits('refresh'); // 提交成功后通知父组件刷新
         emits('close'); // 关闭弹窗
       } finally {
@@ -118,4 +123,5 @@ const cancel = () => {
   resetForm();
   emits('close');
 };
+
 </script>

+ 33 - 11
src/views/riskPrevention/SafetyProductionManagement/BussinessEdit.vue

@@ -5,21 +5,27 @@
       <div class="common-dialog-content">
         <div class="common-dialog-title-box">
           <i class="common-dialog-title-icon" />
-          <div>新建</div>
+          <div>编辑</div>
         </div>
         <div class="common-dialog-box">
           <el-form ref="demoFormRef" :model="form" label-width="100px" :rules="rules">
             <el-form-item label="企业名称:" prop="company_name">
-              <el-input v-model="form.company_name" placeholder="请输入企业名称" />
-            </el-form-item>
-            <el-form-item label="辖区省:" prop="province">
-              <el-input v-model="form.province" placeholder="请输入辖区省" />
-            </el-form-item>
-            <el-form-item label="辖区市:" prop="city">
-              <el-input v-model="form.city" placeholder="请输入辖区市" />
+              <el-input v-model="form.company_name" placeholder="请输入企业名称" style="width: 468px" />
             </el-form-item>
+<!--            <el-form-item label="辖区省:" prop="province">-->
+<!--              <el-select v-model="form.province" placeholder="请选择辖区省">-->
+<!--                <el-option v-for="item in provinceList" :label="item.label" :value="item.value" />-->
+<!--              </el-select>-->
+<!--            </el-form-item>-->
+<!--            <el-form-item label="辖区市:" prop="city">-->
+<!--              <el-select v-model="form.city" placeholder="请选择辖区市">-->
+<!--                <el-option v-for="item in cityList" :label="item.label" :value="item.value" />-->
+<!--              </el-select>-->
+<!--            </el-form-item>-->
             <el-form-item label="辖区县:" prop="district">
-              <el-input v-model="form.district" placeholder="请输入辖区县" />
+              <el-select v-model="form.district" placeholder="请选择辖区县">
+                <el-option v-for="item in district_type" :label="item.label" :value="item.value" />
+              </el-select>
             </el-form-item>
             <el-form-item label="企业地址:" prop="company_address">
               <el-input v-model="form.company_address" placeholder="请输入企业地址" />
@@ -31,7 +37,9 @@
               <el-input v-model="form.phone" placeholder="请输入移动电话" />
             </el-form-item>
             <el-form-item label="企业类型:" prop="company_type">
-              <el-input v-model="form.company_type" placeholder="请输入企业类型" />
+              <el-select v-model="form.company_type" placeholder="请选择企业类型">
+                <el-option v-for="item in enterprise_type" :label="item.label" :value="item.value" />
+              </el-select>
             </el-form-item>
           </el-form>
         </div>
@@ -45,12 +53,14 @@
 </template>
 <script setup lang="ts">
 import { workDetail, updatetask } from '@/api/inspectionWork/inspector';
-import { ref, watch } from 'vue';
+import { ref, toRefs, watch } from 'vue';
 import { ElMessage } from 'element-plus';
 import {CompanyDetail, updateCompany} from "@/api/riskPrevention/BusinessPortraits";
+import { validatePhone } from '@/utils/validate';
 const demoFormRef = ref(null);
 const buttonLoading = ref(false);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { enterprise_type, district_type } = toRefs<any>(proxy?.useDict('enterprise_type','district_type'));
 const emit = defineEmits(['close']);
 const props = defineProps<{ eventId: string }>();
 let form = ref({
@@ -66,6 +76,7 @@ let form = ref({
   phone: '',
   company_type: ''
 });
+
 // 巡查业务选项
 const businessOptions = [
   { value: '0', label: '城市隐患巡查' },
@@ -84,6 +95,17 @@ const fetchDetail = async () => {
 
 const rules = ref({
   // id: [{ required: true, message: '主键不能为空', trigger: 'blur' }],
+  company_name: [{ required: true, message: '请选择企业名称', trigger: 'blur' }],
+  province: [{ required: true, message: '请选择辖区省', trigger: 'change' }],
+  city: [{ required: true, message: '请选择辖区市', trigger: 'change' }],
+  district: [{ required: true, message: '请选择辖区县', trigger: 'change' }],
+  company_address: [{ required: true, message: '请选择企业地址', trigger: 'change' }],
+  responsible_person: [{ required: true, message: '请选择企业负责人', trigger: 'change' }],
+  phone: [
+    { required: true, message: '电话不能为空', trigger: 'blur' },
+    { validator: validatePhone, message: '请输入正确格式的联系电话', trigger: 'blur' }
+  ],
+  company_type: [{ required: true, message: '请选择企业类型', trigger: 'change' }],
 });
 watch(
   () => props.eventId,