zhouwenxuan
2023-12-06 c1b2db87bab550a24c5a7fd5899342d56e7f414a
专家用户、地区维护
已修改9个文件
290 ■■■■ 文件已修改
src/api/backManage/area.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/backManage/insitution.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/sysUsers.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Register/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/baseSet/area/components/areaDialog.vue 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/baseSet/area/index.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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'
    })
}
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
    })
}
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
  })
}
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{
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
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({
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)
            }
        })
}
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
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>