From c1b2db87bab550a24c5a7fd5899342d56e7f414a Mon Sep 17 00:00:00 2001
From: zhouwenxuan <1175765986@qq.com>
Date: 星期三, 06 十二月 2023 15:54:46 +0800
Subject: [PATCH] 专家用户、地区维护

---
 src/layout/components/Register/index.vue                                  |   14 +-
 src/utils/request.js                                                      |    2 
 src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue |   77 ++++++++++----
 src/api/backManage/insitution.js                                          |    5 
 src/views/safetyReview/userManage/expertUsers/index.vue                   |    2 
 src/api/sysUsers.js                                                       |   17 +++
 src/views/safetyReview/baseSet/area/components/areaDialog.vue             |   98 ++++++++++++++++---
 src/views/safetyReview/baseSet/area/index.vue                             |   50 ++++++---
 src/api/backManage/area.js                                                |   25 ++++
 9 files changed, 222 insertions(+), 68 deletions(-)

diff --git a/src/api/backManage/area.js b/src/api/backManage/area.js
index 9dc7b47..72ad7ae 100644
--- a/src/api/backManage/area.js
+++ b/src/api/backManage/area.js
@@ -2,7 +2,30 @@
 
 export function getArea() {
     return request({
-        url: 'api/system/region/regionTree',
+        url: '/system/region/regionTree',
         method: 'get'
     })
 }
+
+export function addArea(data) {
+    return request({
+        url: '/system/region/addRegion',
+        method: 'post',
+        data: data
+    })
+}
+
+export function editArea(params) {
+    return request({
+        url: `/system/region/editRegion`,
+        method: 'put',
+        data: params
+    })
+}
+
+export function delArea(data) {
+    return request({
+        url: `/system/region/remove/` + data.id,
+        method: 'delete'
+    })
+}
diff --git a/src/api/backManage/insitution.js b/src/api/backManage/insitution.js
index de05492..1c31720 100644
--- a/src/api/backManage/insitution.js
+++ b/src/api/backManage/insitution.js
@@ -1,9 +1,10 @@
 import request from '@/utils/request'
 
-export function getInsitutionList() {
+export function getInsitutionList(params) {
     return request({
         url: '/system/agency/agencyList',
-        method: 'get'
+        method: 'get',
+        params: params
     })
 }
 
diff --git a/src/api/sysUsers.js b/src/api/sysUsers.js
index 4ad2986..096bfb4 100644
--- a/src/api/sysUsers.js
+++ b/src/api/sysUsers.js
@@ -98,3 +98,20 @@
     data: data
   })
 }
+
+// 修改
+export function editExpert(data) {
+  return request({
+    url: '/system/user/editExpert',
+    method: 'put',
+    data: data
+  })
+}
+// 获取用户详情
+export function getUserById(params) {
+  return request({
+    url: '/system/user/getUserById',
+    method: 'get',
+    params: params
+  })
+}
diff --git a/src/layout/components/Register/index.vue b/src/layout/components/Register/index.vue
index 88446c0..a643b20 100644
--- a/src/layout/components/Register/index.vue
+++ b/src/layout/components/Register/index.vue
@@ -108,7 +108,7 @@
               <el-input
                   v-model="registerForm.agency.certNumber"
                   size="large"
-                  placeholder="请输入机构负责人"
+                  placeholder="请输入资质证书编号"
               />
             </el-form-item>
           </el-col>
@@ -466,8 +466,11 @@
 const registerRef = ref(null)
 
 onMounted(()=>{
-  const userInfo = JSON.parse(Cookies.get('userInfo'))
-  if(userInfo.identity == 0){isSuper.value = true}
+    if(getToken()){
+        const userInfo = JSON.parse(Cookies.get('userInfo'))
+        if(userInfo.identity == 0){isSuper.value = true}
+    }
+
   getBusiness()
   watchEffect(() => {
     // 在副作用中调用 getArea()
@@ -484,9 +487,9 @@
     startUsername.value = value.username
     startPhone.value = value.phone
     state.registerForm.agency.id = value.agencyId
-    if(value.state == 2 && isSuper.value){
+    if( isSuper.value){
         isAbleEdit.value = false
-    }else {
+    }else{
         isAbleEdit.value = true
     }
     getAgencyById({agencyId: value.agencyId}).then((res)=>{
@@ -629,6 +632,7 @@
               proxy.$refs.registerRef.resetFields()
               proxy.$refs.registerRef.clearValidate()
               state.fileList = []
+                loading.value = false
               // router.push("/homePage")
             }).catch(() => {})
           }else{
diff --git a/src/utils/request.js b/src/utils/request.js
index 6664bbb..a782727 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -76,7 +76,7 @@
     // 未设置状态码则默认成功状态
     const code = res.data.code || 200;
     // 获取错误信息
-    const msg = errorCode[code] || res.data.msg || errorCode['default']
+    const msg = errorCode[code] || res.data.message || errorCode['default']
     // 二进制数据则直接返回
     if (res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer') {
       return res.data
diff --git a/src/views/safetyReview/baseSet/area/components/areaDialog.vue b/src/views/safetyReview/baseSet/area/components/areaDialog.vue
index 3a5be65..a220b59 100644
--- a/src/views/safetyReview/baseSet/area/components/areaDialog.vue
+++ b/src/views/safetyReview/baseSet/area/components/areaDialog.vue
@@ -8,7 +8,7 @@
         >
             <el-form :model="state.form" size="default" ref="areaRef" :rules="state.formRules" label-width="110px" >
                 <el-form-item>
-                    <el-radio-group v-model="state.form.area" style="margin-left: -50px" >
+                    <el-radio-group v-model="state.form.area" style="margin-left: -50px" :disabled="title === '编辑'">
                         <el-radio :label="1">地(市、州)</el-radio>
                         <el-radio :label="2">区县</el-radio>
                     </el-radio-group>
@@ -18,12 +18,12 @@
                 </el-form-item>
                 <div v-if="state.form.area === 2">
                     <el-form-item style="margin-left: -50px" prop="stateCode">
-                        <el-select v-model="state.form.stateCode" class="m-2" placeholder="请选择所属地(市、州)" style="width: 100%">
+                        <el-select v-model="state.form.stateCode" class="m-2" placeholder="请选择所属地(市、州)" style="width: 100%" >
                             <el-option
-                                v-for="item in state.areaList"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
+                                v-for="item in state.cityList"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id"
                             />
                         </el-select>
                     </el-form-item>
@@ -43,15 +43,18 @@
     </div>
 </template>
 <script setup>
-import {reactive, ref, toRefs} from 'vue'
+import {defineEmits, reactive, ref, toRefs} from 'vue'
 import Editor from "@/components/Editor/index.vue";
 import {ElMessage} from "element-plus";
+import {addArea, editArea, getArea} from "@/api/backManage/area";
 
 const dialogVisible = ref(false);
 const title = ref("");
 const areaRef = ref();
+const emit = defineEmits(["getList"]);
 const state = reactive({
     form: {
+        id: '',
         area: 1,
         stateCode: '',
         stateName: '',
@@ -62,14 +65,23 @@
         countyName: [{ required: true, message: '请输入区县名', trigger: 'blur' }],
         stateCode: [{ required: true, message: '请选择所属地(市、州)', trigger: 'blur' }],
     },
-    areaList: []
-
+    cityList: [],
 })
 
-const openDialog = (type, value) => {
+const openDialog = (type, value,cityList) => {
     title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
+    state.cityList = cityList;
     if(type === 'edit') {
-        state.form = value;
+        if(value.parentId!=0){
+            state.form.id = value.id;
+            state.form.area = 2;
+            state.form.stateCode = value.parentId;
+            state.form.countyName = value.name;
+        }else {
+            state.form.id = value.id;
+            state.form.area = 1;
+            state.form.stateName = value.name
+        }
     }
     dialogVisible.value = true;
 }
@@ -77,25 +89,77 @@
 const onSubmit = async () => {
     const valid = await areaRef.value.validate();
     if(valid){
-        areaRef.value.clearValidate();
-        reset();
-        dialogVisible.value = false;
+        if(title.value === '新增'){
+            let param = {}
+            if(state.form.area == 1){
+                param = {
+                    name: state.form.stateName,
+                    regionType: 0
 
+                }
+            }else if(state.form.area == 2){
+                param = {
+                    name: state.form.countyName,
+                    regionType: 0,
+                    parentId: state.form.stateCode
+                }
+            }
+            console.log("parma",param)
+            const res = await addArea(param);
+            if(res.code === 200){
+                ElMessage.success(res.message)
+                emit('getList')
+                areaRef.value.clearValidate();
+                reset()
+                dialogVisible.value = false;
+            }else{
+                ElMessage.warning(res.message)
+            }
+        }else if (title.value === '编辑'){
+            let param = {}
+            if(state.form.area == 1){
+                param = {
+                    id: state.form.id,
+                    name: state.form.stateName,
+                    parentId: 0,
+                    regionType: 0
+
+                }
+            }else if(state.form.area == 2){
+                param = {
+                    id: state.form.id,
+                    name: state.form.countyName,
+                    regionType: 0,
+                    parentId: state.form.stateCode
+                }
+            }
+            const res = await editArea(param);
+            if(res.code === 200){
+                ElMessage.success(res.message)
+                emit('getList')
+                areaRef.value.clearValidate();
+                reset()
+                dialogVisible.value = false;
+            }else{
+                ElMessage.warning(res.message)
+            }
+        }
     }
 }
 
 const handleClose = () => {
     areaRef.value.clearValidate();
-    reset();
+    reset()
     dialogVisible.value = false;
 
 }
 const reset = () => {
     state.form = {
+        id: '',
         area: 1,
-        state: '',
-        county: '',
         stateCode: '',
+        stateName: '',
+        countyName: ''
     }
 }
 defineExpose({
diff --git a/src/views/safetyReview/baseSet/area/index.vue b/src/views/safetyReview/baseSet/area/index.vue
index 309e39b..42bfcfd 100644
--- a/src/views/safetyReview/baseSet/area/index.vue
+++ b/src/views/safetyReview/baseSet/area/index.vue
@@ -9,7 +9,7 @@
             >新增</el-button>
         </div>
         <!-- 表格数据 -->
-        <el-table v-loading="loading" :data="dataList" :border="true" row-key="name">
+        <el-table v-loading="loading" :data="dataList" :border="true" row-key="id">
             <el-table-column label="地区"  align="center">
                 <template #default="scope">
                     <span>{{scope.row.name}}</span>
@@ -18,31 +18,26 @@
             </el-table-column>
             <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
                 <template #default="scope">
-                    <el-button link type="primary"  @click="openDialog('edit',scope.row)" v-hasPermi="['system:role:edit']">编辑</el-button>
-                    <el-button link type="danger"  @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']">删除</el-button>
+                    <el-button link type="primary"  @click="openDialog('edit',scope.row)" >编辑</el-button>
+                    <el-button link type="danger"  @click="handleDelete(scope.row)" >删除</el-button>
                 </template>
             </el-table-column>
         </el-table>
-
-        <pagination
-            v-show="total > 0"
-            :total="total"
-            v-model:page="queryParams.pageNum"
-            v-model:limit="queryParams.pageSize"
-            @pagination="getList"
-        />
         <area-dialog ref="areaRef" @getList="getList"></area-dialog>
     </div>
 </template>
 
 <script setup>
 import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
-import {ElMessageBox} from "element-plus";
+import {ElMessage, ElMessageBox} from "element-plus";
 import areaDialog from "./components/areaDialog.vue"
-import { getArea } from "@/api/backManage/area";
+import {delArea, getArea} from "@/api/backManage/area";
+import {getDictList} from "@/api/backManage/evaluate";
+import {delMonitor} from "@/api/sysUsers";
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
 const areaRef = ref();
+const cityList = ref([])
 const data = reactive({
     queryParams: {
         pageNum: 1,
@@ -51,8 +46,6 @@
     total: 0,
     dataList: [
     ]
-
-
 });
 
 const { queryParams, total, dataList } = toRefs(data);
@@ -63,12 +56,27 @@
 });
 const getList = async () => {
     loading.value = true;
-    // let res = await getArea();
+    const res = await getArea();
+    if(res.code === 200){
+        dataList.value = res.data
+        cityList.value = res.data.map(item => {
+            return {
+                id: item.id,
+                name: item.name,
+                parentId: item.parentId,
+                regionType: item.regionType,
+                sort: item.sort
+
+            }
+        })
+    }else{
+        ElMessage.warning(res.message)
+    }
     loading.value = false;
 }
 
 const openDialog = (type, value) => {
-    areaRef.value.openDialog(type, value);
+    areaRef.value.openDialog(type, value,cityList.value);
 }
 
 /** 重置新增的表单以及其他数据  */
@@ -85,7 +93,13 @@
             type: 'warning',
         })
         .then( async() => {
-
+            const res = await delArea(val)
+            if(res.code == 200){
+                ElMessage.success('数据删除成功')
+                getList()
+            }else{
+                ElMessage.warning(res.message)
+            }
         })
 }
 
diff --git a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
index 3c833b2..adcc458 100644
--- a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
+++ b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
@@ -165,7 +165,7 @@
 import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate";
 import {checkUserName, checkPhone, delPic} from "@/api/login"
 import { getRegionTree } from "@/api/area"
-import {addExpert, addMonitor, editMonitor, getMonitorList} from "@/api/sysUsers"
+import {addExpert, addMonitor, editExpert, editMonitor, getMonitorList, getUserById} from "@/api/sysUsers"
 import {Base64} from "js-base64"
 import {resetUserPwd} from "../../../../../api/sysUsers";
 import {getToken} from "@/utils/auth";
@@ -283,15 +283,38 @@
     getAgency()
 })
 
-const openDialog = (type, value) => {
+const openDialog = async (type, value) => {
     getArea()
     state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ;
     if(type === 'edit') {
-        for(let i in state.form){
-            if(validKey(i,value)){
-                state.form[i] = value[i]
-            }
+        const param = {
+            userId: value.id
         }
+        const res = await getUserById(param);
+        if(res.code == 200){
+            state.form = res.data
+            state.socialList = res.data.socialAttach.map(url => {
+                return {
+                    url:  import.meta.env.VITE_APP_BASE_API +'/'+url.path,
+                    name: url.name
+                }
+            });
+            state.medicalList = res.data.medicalAttach.map(url => {
+                return {
+                    url:  import.meta.env.VITE_APP_BASE_API +'/'+url.path,
+                    name: url.name
+                }
+            });
+            state.salaryList = res.data.salaryAttach.map(url => {
+                return {
+                    url:  import.meta.env.VITE_APP_BASE_API +'/'+url.path,
+                    name: url.name
+                }
+            });
+        }else{
+            ElMessage.warning(res.message)
+        }
+
     }
     if(type == 'pwd'){
         state.form.id = value.id
@@ -337,18 +360,19 @@
                 ElMessage.warning(res.message)
             }
         }else if(state.title == '编辑'){
-            // const {confirmPassword,...data} = state.form
-            // data.password = Base64.encode(data.password)
-            // const res = await editMonitor(data)
-            // if(res.code == 200){
-            //     ElMessage.success(res.message)
-            //     emit('getList')
-            //     superRef.value.clearValidate();
-            //     superRef.value.resetFields();
-            //     dialogVisible.value = false;
-            // }else{
-            //     ElMessage.warning(res.message)
-            // }
+            const {confirmPassword,socialList,salaryList,medicalList,...data} = state.form
+            data.password = Base64.encode(data.password)
+            console.log('editdata',data)
+            const res = await editExpert(data)
+            if(res.code == 200){
+                ElMessage.success(res.message)
+                emit('getList')
+                superRef.value.clearValidate();
+                superRef.value.resetFields();
+                dialogVisible.value = false;
+            }else{
+                ElMessage.warning(res.message)
+            }
         }else{
             const {id,password} = state.form
             const data = {id,password}
@@ -428,7 +452,14 @@
 
 
 const handleRemove = async (file, uploadFiles,type) => {
-    const path = file.response.data.path
+    let path = ""
+    if(state.title === '编辑') {
+        const base = import.meta.env.VITE_APP_BASE_API
+        path = file.url.substring(base.length+1,file.url.length )
+    }else {
+        path = file.response.data.path
+    }
+
     const res = await delPic({path: path})
     if(res.code == 200){
         ElMessage({
@@ -442,11 +473,11 @@
         })
     }
     if(type === 1){
-        state.form.socialAttach = state.form.socialAttach.filter(item => item.path !== file.response.data.path)
+        state.form.socialAttach = state.form.socialAttach.filter(item => item.path !== path)
     }else if(type === 2){
-        state.form.medicalAttach = state.form.medicalAttach.filter(item => item.path !== file.response.data.path)
+        state.form.medicalAttach = state.form.medicalAttach.filter(item => item.path !== path)
     }else {
-        state.form.salaryAttach = state.form.salaryAttach.filter(item => item.path !== file.response.data.path)
+        state.form.salaryAttach = state.form.salaryAttach.filter(item => item.path !== path)
     }
 }
 const finshed = ref(false)
@@ -457,7 +488,7 @@
     }
     const res = await getInsitutionList(queryParams)
     if(res.code == 200){
-        if(res.data.pageNum !== state.pageNum){
+        if(res.data.pageNum === state.pageNum){
             finshed.value = false;
             if(state.pageNum == 1){
                 state.agencyList = res.data.list
diff --git a/src/views/safetyReview/userManage/expertUsers/index.vue b/src/views/safetyReview/userManage/expertUsers/index.vue
index d081eb8..46a7b12 100644
--- a/src/views/safetyReview/userManage/expertUsers/index.vue
+++ b/src/views/safetyReview/userManage/expertUsers/index.vue
@@ -101,8 +101,8 @@
             v-model:limit="queryParams.pageSize"
             @pagination="getList"
         />
+        <expert-dialog ref="expertRef" @getList="getList"></expert-dialog>
     </div>
-    <expert-dialog ref="expertRef" @getList="getList"></expert-dialog>
 </template>
 
 <script setup>

--
Gitblit v1.9.2