From 39868da3de6192d19dfd316c8be1c080b2d3ebe7 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期五, 18 四月 2025 14:35:46 +0800
Subject: [PATCH] 修改

---
 .env.development                                                               |    2 
 src/views/homePage.vue                                                         |    4 
 src/store/modules/user.js                                                      |    6 +
 src/views/hazardousChemicals/systemManage/config/components/mapLocation.vue    |  169 ++++++++++++++++++++++++++++
 src/views/hazardousChemicals/systemManage/user/components/userDialog.vue       |    7 
 src/views/hazardousChemicals/systemManage/company/index.vue                    |    5 
 src/assets/images/map.png                                                      |    0 
 src/views/hazardousChemicals/systemManage/user/index.vue                       |    2 
 src/views/hazardousChemicals/systemManage/config/components/configDialog.vue   |   58 ++++++++-
 src/views/hazardousChemicals/systemManage/config/index.vue                     |    2 
 src/views/components/flowDetail.vue                                            |   21 ++-
 src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue |   29 ++++
 12 files changed, 286 insertions(+), 19 deletions(-)

diff --git a/.env.development b/.env.development
index 855a986..243b591 100644
--- a/.env.development
+++ b/.env.development
@@ -11,7 +11,7 @@
 VITE_APP_RESOURCE_API = 'http://192.168.2.16:9000/trainexam/'
 
 #董
-VITE_APP_BASE_API = 'http://192.168.2.24:8083/api'
+VITE_APP_BASE_API = 'http://192.168.2.37:8083/api'
 
 #贺
 #VITE_APP_BASE_API = 'http://192.168.2.11:5812/api'
diff --git a/src/assets/images/map.png b/src/assets/images/map.png
new file mode 100644
index 0000000..aa27924
--- /dev/null
+++ b/src/assets/images/map.png
Binary files differ
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 8461d2e..7fdf5a5 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -4,6 +4,7 @@
 import Cookies from "js-cookie";
 import {getUserById} from "@/api/hazardousChemicals/user";
 import {getConfigById} from "@/api/hazardousChemicals/config";
+import {ElMessage} from "element-plus";
 const useUserStore = defineStore(
   'user',
   {
@@ -31,6 +32,11 @@
               if(info.code === 200){
                 Cookies.set('userInfo',JSON.stringify(info.data))
               }
+              if(info.data.userType == 3){
+                ElMessage.warning('监管部门账号不可登录')
+                loading.value = false
+                return
+              }
               if(info.data.userType != 0){
                 const con = await getConfigById(res.data.companyId);
                 if(con.code === 200){
diff --git a/src/views/components/flowDetail.vue b/src/views/components/flowDetail.vue
index 00b2bce..a20c893 100644
--- a/src/views/components/flowDetail.vue
+++ b/src/views/components/flowDetail.vue
@@ -36,6 +36,7 @@
 import {ElMessage} from "element-plus";
 import {getAllProFlow, getFlowByCode} from "@/api/hazardousChemicals/productRecord";
 import { MoreFilled } from '@element-plus/icons-vue'
+import Cookies from "js-cookie";
 const busRef = ref();
 const length = ref()
 const title = ref('')
@@ -49,17 +50,16 @@
   dataList: [],
   active: null
 })
-
+const userInfo = ref()
 
 const openDialog = async (type, value) => {
+  userInfo.value = JSON.parse(Cookies.get('userInfo'))
   title.value = type;
   if(type === 'code'){
     state.form.code = value
   }else {
-
     state.form = JSON.parse(JSON.stringify(value))
   }
-
   await getAllFlow()
 }
 
@@ -68,11 +68,13 @@
     let param = {}
     if(title.value == 'pro'){
       param = {
-        productId: state.form.id
+        productId: state.form.id,
+        companyId: userInfo.value.companyId
       }
     }else {
       param = {
-        productId: state.form.productId
+        productId: state.form.productId,
+        companyId: userInfo.value.companyId
       }
     }
     const res = await getAllProFlow(param)
@@ -103,11 +105,13 @@
     let param = {}
     if(title.value == 'raw'){
       param = {
-        hazmatId: state.form.id
+        hazmatId: state.form.id,
+        companyId: userInfo.value.companyId
       }
     }else {
       param = {
-        hazmatId: state.form.hazmatId
+        hazmatId: state.form.hazmatId,
+        companyId: userInfo.value.companyId
       }
     }
     const res = await getAllRawFlow(param)
@@ -136,7 +140,8 @@
     }
   }else if(title.value == 'code'){
     const param = {
-      code: state.form.code
+      code: state.form.code,
+      companyId: userInfo.value.companyId
     }
     const res = await getFlowByCode(param)
     if(res.code == 200){
diff --git a/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue b/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue
index afc3789..f12a4ea 100644
--- a/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue
@@ -18,6 +18,20 @@
         <el-form-item label="企业名称:" prop="name" >
           <el-input v-model.trim="state.form.name" placeholder="请输入企业名称"></el-input>
         </el-form-item>
+        <el-form-item label="企业类型:" prop="type" >
+          <el-select
+              v-model="state.form.type"
+              placeholder="请选择企业类型"
+              style="width: 100%"
+          >
+            <el-option
+                v-for="item in state.typeList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item label="负责人:" prop="major" >
           <el-input v-model.trim="state.form.major" placeholder="请输入负责人"></el-input>
         </el-form-item>
@@ -114,7 +128,22 @@
     name: [{ required: true, trigger: "blur", validator: validateName }],
     phone:[{ required: true, trigger: "blur", validator: validatePhone }],
     code:[{ required: true, validator: validateCode, trigger: 'blur' }],
+    type: [{ required: true, message: '请选择企业类型', trigger: 'blur' }],
   },
+  typeList: [
+    {
+      id: 0,
+      name: '研发类'
+    },
+    {
+      id: 1,
+      name: '生产类'
+    },
+    {
+      id: 2,
+      name: '中试类'
+    },
+  ]
 })
 
 
diff --git a/src/views/hazardousChemicals/systemManage/company/index.vue b/src/views/hazardousChemicals/systemManage/company/index.vue
index c0a6397..619acf0 100644
--- a/src/views/hazardousChemicals/systemManage/company/index.vue
+++ b/src/views/hazardousChemicals/systemManage/company/index.vue
@@ -32,6 +32,11 @@
       <el-table-column label="企业信用代码" prop="creditCode" align="center"  />
       <el-table-column label="企业编码" prop="code" align="center" />
       <el-table-column label="企业名称" prop="name" align="center" />
+      <el-table-column label="企业类型" prop="type" align="center" >
+        <template #default="scope">
+          <span>{{scope.row.type == 0 ? '研发类' : scope.row.type == 1 ? '生产类' : scope.row.type == 2?'中试类':'' }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="负责人" prop="major" align="center"  />
       <el-table-column label="联系电话" prop="phone" align="center"/>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
diff --git a/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue b/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue
index 8082c6f..d765c2c 100644
--- a/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue
@@ -3,7 +3,7 @@
     <el-dialog
         v-model="dialogVisible"
         :title="title"
-        width="500px"
+        width="600px"
         :before-close="handleClose"
         :close-on-press-escape="false"
         :close-on-click-modal="false"
@@ -44,7 +44,21 @@
             </template>
           </el-upload>
         </el-form-item>
-
+        <el-row :gutter="24">
+          <el-col :span="12">
+            <el-form-item label="经度:" prop="longitude" label-width="90px">
+              <el-input v-model="state.form.longitude"  style="width:165px" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="纬度:" prop="latitude" label-width="60px">
+              <el-input v-model="state.form.latitude"  style="width:165px"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="1">
+            <img :src="mapPng" class="enterpriseBasicInformation_image" @click="showMapLocation" />
+          </el-col>
+        </el-row>
       </el-form>
       <template #footer>
         <span class="dialog-footer">
@@ -53,14 +67,18 @@
         </span>
       </template>
     </el-dialog>
+    <mapLo ref="mapLocationRef" @giveLatLng="achieveLatLng"></mapLo>
   </div>
 </template>
 <script setup>
 import {reactive, ref, toRefs} from 'vue'
 import {ElMessage} from "element-plus";
+import mapLo from './mapLocation.vue'
 import {addWarehouse, checkName, editWarehouse} from "@/api/hazardousChemicals/warehouse";
 import {verifyPhone} from "@/utils/validate";
 import {checkBasicName} from "@/api/hazardousChemicals/basicInfo";
+import mapPng from '@/assets/images/map.png'
+const mapLocationRef = ref()
 import {addConfig, editConfig} from "@/api/hazardousChemicals/config";
 import {getCompany} from "@/api/hazardousChemicals/company";
 import {getToken} from "@/utils/auth";
@@ -77,13 +95,16 @@
     companyId: null,
     companyName: '',
     logoPath: '',
-    useProd: 0
-
+    useProd: 0,
+    longitude:'',
+    latitude: ''
   },
   companyList: [],
   formRules:{
     companyName: [{ required: true, message: '请选择企业', trigger: 'blur' }],
     useProd: [{ required: true, message: '请选择是否使用成品', trigger: 'blur' }],
+    longitude:[{ required: true, message: '请填写经度', trigger: 'blur' }],
+    latitude:[{ required: true, message: '请填写纬度', trigger: 'blur' }],
   },
   uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
   header: {
@@ -214,6 +235,9 @@
     })
   }
 }
+const showMapLocation = () => {
+  mapLocationRef.value.openMapLocation(state.form.longitude,state.form.latitude)
+}
 const handleRemove = async (file, uploadFiles) => {
   let path = state.form.logoPath;
   await delPic({path: path}).then(res => {
@@ -233,11 +257,24 @@
     state.form.logoPath = ''
   });
 }
+const achieveLatLng=(lng,lat)=>{
+  if(lng && lat){
+    state.form.longitude = lng
+    state.form.latitude = lat
+  }else {
+    ElMessage.warning('请选择公司经纬度')
+  }
+
+}
 const reset = () => {
   state.form = {
     id: '',
-    name: '',
-    remark: '',
+    companyId: null,
+    companyName: '',
+    logoPath: '',
+    useProd: 0,
+    longitude:'',
+    latitude: ''
   }
 }
 defineExpose({
@@ -256,5 +293,14 @@
     flex-direction: column;
     align-items: flex-start;
   }
+  .enterpriseBasicInformation_image{
+    cursor: pointer;
+    width:30px;
+    height:30px;
+    margin-left: -35px;
+  }
+  .enterpriseBasicInformation_input{
+    width:100%;
+  }
 }
 </style>
diff --git a/src/views/hazardousChemicals/systemManage/config/components/mapLocation.vue b/src/views/hazardousChemicals/systemManage/config/components/mapLocation.vue
new file mode 100644
index 0000000..115c24a
--- /dev/null
+++ b/src/views/hazardousChemicals/systemManage/config/components/mapLocation.vue
@@ -0,0 +1,169 @@
+<template>
+  <el-dialog
+      v-model="state.mapLocationVisible"
+      v-if="state.mapLocationVisible"
+      append-to-body
+      :close-on-click-modal="false"
+      width="75%"
+      :title="state.title"
+      @close="handleClose"
+  >
+    <div class="mapLocation_head">
+      <div>
+        <el-alert
+            title="点击地点获取经纬度信息"
+            type="info"
+            :closable="false"
+        >
+        </el-alert>
+      </div>
+      <div class="mapLocation_latlng">
+        <span>经度:</span>
+        <el-input class="mapLocation_latlng_input" id="lng" v-model.trim="state.longitude" @change="getAdress"></el-input>
+      </div>
+      <div class="mapLocation_latlng">
+        <span>纬度:</span>
+        <el-input class="mapLocation_latlng_input" id="lat" v-model.trim="state.latitude" @change="getAdress"></el-input>
+      </div>
+      <div class="mapLocation_latlng">
+        <span>地址:</span>
+        <el-input class="mapLocation_latlng_input" id="lat" v-model.trim="state.BAddress"></el-input>
+      </div>
+
+    </div>
+    <div class="mapLocation_body">
+      <baidu-map class="map"  @ready="getAdress" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="state.center" :zoom="state.zoom" scroll-wheel-zoom  @click="getPosition">
+<!--        <div style="position: absolute;z-index: 999;margin-top: -495px">-->
+<!--          <label>搜索:<input v-model="state.keyword"></label>-->
+<!--          <bm-local-search-->
+<!--              :keyword="state.keyword"-->
+<!--              :auto-viewport="true"-->
+<!--              location="新疆"-->
+<!--              :pageCapacity="3"-->
+<!--          ></bm-local-search>-->
+<!--        </div>-->
+        <bm-marker  :position="{lng: state.longitude, lat: state.latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE">
+<!--          <bm-label :labelStyle="{color: 'red'}" :offset="{width: -35, height: 30}"/>-->
+        </bm-marker>
+      </baidu-map>
+    </div>
+    <div  align="right" style="margin-top: 10px">
+      <el-button @click="handleClose()">取消</el-button>
+      <el-button type="primary" @click="submitLatLng()">确认</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script setup>
+import {ref, onMounted, reactive, toRefs, defineComponent, defineExpose, defineEmits, watch} from 'vue';
+import { BaiduMap,BmMarker,BmLocalSearch,BmLabel } from 'vue-baidu-map-3x'
+const state = reactive({
+  title: '',
+  longitude: '',
+  latitude: '',
+  mapLocationVisible: false,
+  zoom: 7,
+  center: {
+    lng: '120.622500',
+    lat: '31.305800'
+  },
+  keyword:'',
+  location: '',
+  BAddress: ''
+})
+
+const emit = defineEmits(['giveLatLng'])
+
+onMounted(() => {
+  // ...(mounted钩子中的代码不变)
+});
+const map = reactive({})
+
+const getPosition = ({type, target, point, pixel, overlay})=>{
+  state.longitude = point.lng
+  state.latitude = point.lat
+  getAdress()
+}
+
+const openMapLocation=(longitude,latitude)=>{
+
+  if(longitude){
+    state.longitude = longitude
+    state.latitude = latitude
+    state.zoom = 10
+    state.center = {
+      lng: longitude,
+      lat: latitude
+    }
+  }else {
+    state.zoom = 10
+    state.center = {
+      lng: '120.622500',
+      lat: '31.305800'
+    }
+  }
+
+  state.mapLocationVisible = true
+}
+
+const submitLatLng=()=>{
+  emit('giveLatLng',state.longitude,state.latitude);
+  handleClose()
+}
+
+const initMap=()=>{
+
+}
+const myGeo = ref(null)
+const getAdress = () => {
+  myGeo.value = new BMap.Geocoder();
+  const pt = new BMap.Point(state.longitude, state.latitude);
+  myGeo.value.getLocation(pt,function(result){
+        state.BAddress = result.address; //获取到当前定位的详细地址信息
+      },
+      { enableHighAccuracy: true }
+  );
+}
+const handleClose = () => {
+  state.longitude = ''
+  state.latitude = ''
+  state.BAddress = ''
+  state.mapLocationVisible = false
+}
+defineExpose({
+  openMapLocation
+})
+</script>
+
+<style lang="scss" scoped>
+.map {
+  width: 100%;
+  height: 500px;
+
+  :deep(.BMap_cpyCtrl){
+    display: none!important;
+    visibility: hidden!important;
+  }
+
+  :deep(.anchorBL) {
+    display: none!important;
+    visibility: hidden!important;
+  }
+}
+.mapLocation_head{
+  width:100%;
+  height:100px;
+}
+.mapLocation_body{
+  width:100%;
+  height:500px
+}
+.mapLocation_latlng{
+  padding-top:10px;
+  display:inline-block;
+  margin-right: 20px;
+}
+.mapLocation_latlng_input{
+  width:250px;
+}
+</style>
diff --git a/src/views/hazardousChemicals/systemManage/config/index.vue b/src/views/hazardousChemicals/systemManage/config/index.vue
index a381fb3..b7b29be 100644
--- a/src/views/hazardousChemicals/systemManage/config/index.vue
+++ b/src/views/hazardousChemicals/systemManage/config/index.vue
@@ -52,6 +52,8 @@
           <span>{{scope.row.useProd == 0 ? '不使用' : '使用' }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="经度" prop="longitude" align="center"  />
+      <el-table-column label="纬度" prop="latitude" align="center"  />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
         <template #default="scope">
           <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>
diff --git a/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue b/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue
index 9492f5a..52d9de5 100644
--- a/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue
@@ -34,12 +34,13 @@
         <el-form-item label="用户类型:" v-if="state.title !== '修改密码'" prop="userType" >
           <el-radio-group v-model="state.form.userType" @change="changeType" v-if="state.title == '新增用户'" >
             <el-radio :label="0" v-if="state.isAdmin">管理员</el-radio>
+            <el-radio :label="3" v-if="state.isAdmin">监管部门</el-radio>
             <el-radio :label="1" v-if="state.isAdmin">企业用户</el-radio>
             <el-radio :label="2" v-if="!state.isAdmin">普通用户</el-radio>
           </el-radio-group>
-          <span v-else>{{state.form.userType ==0 ? '管理员':state.form.userType ==1 ? '企业用户' : '普通用户'}}</span>
+          <span v-else>{{state.form.userType ==0 ? '管理员':state.form.userType ==1 ? '企业用户' : state.form.userType ==2?'普通用户':'监管用户'}}</span>
         </el-form-item>
-        <el-form-item label="所属企业:" prop="companyName" v-if="state.title !== '修改密码' && state.form.userType !=0">
+        <el-form-item label="所属企业:" prop="companyName" v-if="state.title !== '修改密码' && state.form.userType !=0 && state.form.userType !=3">
           <el-select
               v-if="state.isAdmin"
               clearable
@@ -64,7 +65,7 @@
           </el-select>
           <el-input v-else disabled style="width: 100%" v-model="state.form.companyName"></el-input>
         </el-form-item>
-        <el-form-item label="所属部门:" prop="departId" v-if="state.form.userType !=0 && state.title !== '修改密码'" >
+        <el-form-item label="所属部门:" prop="departId" v-if="state.form.userType !=3 && state.form.userType !=0 && state.title !== '修改密码'" >
           <el-cascader
               v-if="state.title == '新增用户' || state.title == '编辑用户'"
               style="width: 100%"
diff --git a/src/views/hazardousChemicals/systemManage/user/index.vue b/src/views/hazardousChemicals/systemManage/user/index.vue
index f845f60..79afaf4 100644
--- a/src/views/hazardousChemicals/systemManage/user/index.vue
+++ b/src/views/hazardousChemicals/systemManage/user/index.vue
@@ -40,7 +40,7 @@
       </el-table-column>
       <el-table-column label="用户类型" prop="userType" align="center">
         <template #default="scope">
-          <span>{{scope.row.userType == 0 ?'管理员':scope.row.userType == 1 ? '企业用户':'普通用户'}}</span>
+          <span>{{scope.row.userType == 0 ?'管理员':scope.row.userType == 1 ? '企业用户':scope.row.userType ==2 ? '普通用户' : '监管用户'}}</span>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
diff --git a/src/views/homePage.vue b/src/views/homePage.vue
index cb2c2a8..f136db4 100644
--- a/src/views/homePage.vue
+++ b/src/views/homePage.vue
@@ -293,6 +293,10 @@
             sidebarRouters.value =  menu.commonMenu
           }
           Cookies.set('routers',JSON.stringify(sidebarRouters.value))
+        }else {
+          ElMessage.warning('监管部门账号不可登录')
+          loading.value = false
+          return
         }
         let path = ""
         if(sidebarRouters.value[0].children && sidebarRouters.value[0].children.length > 0){

--
Gitblit v1.9.2