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