feat: 完成user新增编辑详情接口对接

This commit is contained in:
lilinyuan
2024-03-26 16:31:16 +08:00
parent f782587b79
commit 462c2e2110
3 changed files with 297 additions and 9 deletions

View File

@@ -16,6 +16,22 @@ export const getSubCompOpt = () => {
})
}
// 查询角色信息
export const getRolesOpt = () => {
return request({
url: '/admin/role/option',
method: 'get',
})
}
// 获取岗位下拉
export const getJobOpt = () => {
return request({
url: '/admin/job/option',
method: 'get',
})
}
export const getUserList = (params) => {
return request({
url: '/admin/user',
@@ -23,18 +39,17 @@ export const getUserList = (params) => {
params
})
}
//获取用户详情
export const getUserDetail = (userId) => {
return request({
url: `/admin/user/info/${userId}`,
url: `/admin/mosr/user/info/${userId}`,
method: "get"
});
};
// 新增用户
export const addUser = (data) => {
return request({
url: '/admin/user',
url: '/admin/mosr/user',
method: 'post',
data
})
@@ -42,7 +57,7 @@ export const addUser = (data) => {
// 修改用户
export const editUser = (data) => {
return request({
url: '/admin/user',
url: '/admin/mosr/user',
method: 'put',
data
})

View File

@@ -0,0 +1,235 @@
<template>
<baseTitle :title="'用户信息录入'"></baseTitle>
<fvForm :schema="schame" @getInstance="getInstance" :rules="rules"></fvForm>
<div class="oper-page-btn">
<el-button type="primary" @click="handleSubmit">提交</el-button>
<el-button type="primary" @click="handleBack">返回</el-button>
</div>
</template>
<script setup lang="jsx">
import { addUser, editUser } from '@/api/user/user.js'
import { ElLoading, ElNotification } from 'element-plus';
import { useTagsView } from '@/stores/tagsview.js'
import { useAuthStore } from '@/stores/userstore.js'
import { useCacheStore } from "@/stores/cache.js";
import { getDeptOpt, getSubCompOpt, getRolesOpt, getJobOpt, getUserDetail } from '@/api/user/user.js'
const tagsViewStore = useTagsView()
const authStore = useAuthStore()
const cacheStore = useCacheStore();
const route = useRoute()
const form = ref(null)
const localData = reactive({
subCompanyIdOpt: [],
departmentIdOpt: [],
roleOpt: [],
jobOpt: []
})
const schame = computed(()=>{
let arr = [
{
label: '子公司',
prop: 'subCompanyId',
component: 'el-tree-select',
props: {
placeholder: '请输入',
clearable: true,
filterable: true,
checkStrictly: true,
data: localData.subCompanyIdOpt
},
on: {
change: async (val) => {
const { data } = await getDeptOpt({subCompanyId: val})
localData.departmentIdOpt = data
}
}
},
{
label: '归属部门',
prop: 'departmentId',
component: 'el-tree-select',
props: {
placeholder: '请选择',
clearable: true,
data: localData.departmentIdOpt,
filterable: true,
checkStrictly: true
}
},
{
label: '用户账号',
prop: 'userName',
component: 'el-input',
props: {
placeholder: '请输入'
}
},
{
label: '用户昵称',
prop: 'nickName',
component: 'el-input',
props: {
placeholder: '请输入'
}
},
{
label: '用户密码',
prop: 'password',
component: 'el-input',
props: {
placeholder: '请输入',
type: 'password'
}
},
{
label: '岗位',
prop: 'jobId',
component: 'el-tree-select',
props: {
placeholder: '请选择',
filterable: true,
checkStrictly: true,
data: localData.jobOpt
}
},
{
label: '角色',
prop: 'roleIds',
component: 'el-tree-select',
props: {
placeholder: '请选择',
multiple: true,
data: localData.roleOpt
}
},
{
label: '性别',
prop: 'sex',
component: 'el-tree-select',
props: {
placeholder: '请选择',
data: cacheStore.getDict('user_sex')
}
},
{
label: '帐号状态',
prop: 'state',
component: 'el-tree-select',
props: {
placeholder: '请选择',
data: cacheStore.getDict('normal_disable')
}
},
{
label: '手机号码',
prop: 'mobile',
component: 'el-input',
props: {
placeholder: '请输入'
}
},
{
label: '邮箱',
prop: 'email',
component: 'el-input',
props: {
placeholder: '请输入'
}
},
]
let editArr = []
if(!route.query.isAdd) {
arr.forEach(item=>{
if(item.prop != 'password') {
editArr.push(item)
}
})
return !authStore.roles.includes('superAdmin') ? editArr.slice(1) : editArr
}
return !authStore.roles.includes('superAdmin') ? arr.slice(1) : arr
})
const rules = reactive({
userName: [{required: true, message: '请输入', trigger: 'change'}],
nickName: [{required: true, message: '请输入', trigger: 'change'}],
password: [{required: true, message: '请输入', trigger: 'change'}],
departmentId: [{required: true, message: '请选择', trigger: 'change'}],
subCompanyId: [{required: true, message: '请选择', trigger: 'change'}],
jobId: [{required: true, message: '请选择', trigger: 'change'}],
roleIds: [{required: true, message: '请选择', trigger: 'change'}],
sex: [{required: true, message: '请选择', trigger: 'change'}],
state: [{required: true, message: '请选择', trigger: 'change'}],
})
const getInstance = (e) => {
form.value = e
}
const init = async () => {
const { data } = await getDeptOpt()
localData.departmentIdOpt = data
const res = await getSubCompOpt()
localData.subCompanyIdOpt = res.data
const roleRes = await getRolesOpt()
localData.roleOpt = roleRes.data
const jobRes = await getJobOpt()
localData.jobOpt = jobRes.data
}
const getInfo = async () => {
if(!route.query.id) return
// 获取详情数据
const { data } = await getUserDetail(route.query.id)
form.value.setValues(data)
}
const handleSubmit = async () => {
const loading = ElLoading.service({fullscreen: true})
try {
const { isValidate } = await form.value.validate()
if(!isValidate) return Promise.reject()
const values = form.value.getValues()
let message
if(route.query.isAdd) {
const { code, msg } = await addUser(values)
code === 1000 ? message = msg : null
} else {
const { code, msg } = await editUser(values)
code === 1000 ? message = msg : null
}
ElNotification({
title: route.query.isAdd ? '新增' : '编辑',
message: message,
type: 'success'
})
loading.close()
tagsViewStore.delViewAndGoView('/system/user')
} catch {
loading.close()
return Promise.reject()
}
}
const handleBack = () => {
history.back()
}
onMounted(()=>{
if(!route.query.isAdd) {
getInfo()
}
init()
})
</script>
<style lang="scss" scoped>
</style>

View File

@@ -7,9 +7,11 @@
import Tag from '@/components/Tag.vue'
import fvSelect from '@/fvcomponents/fvSelect/index.vue'
import { useAuthStore } from '@/stores/userstore.js'
import { getDeptOpt, getSubCompOpt } from '../../../api/user/user';
import { getDeptOpt, getSubCompOpt } from '../../../api/user/user.js';
import { ElMessageBox } from 'element-plus';
const authStore = useAuthStore()
const router = useRouter()
const searchConfig = ref([
{
@@ -117,15 +119,18 @@ const tableConfig = reactive({
currentRender: ({row, index}) => {
return (
<div>
<el-button type="primary" link>编辑</el-button>
<el-button type="danger" link>删除</el-button>
<el-button type="primary" link onClick={()=>handleEdit(row)}>编辑</el-button>
<el-button type="danger" link onClick={()=>handleDel(row)}>删除</el-button>
</div>
)
}
}
],
api: '/admin/mosr/user',
params: {}
params: {},
btns: [
{name: '新增', type: 'primary', auth: ['admin:user:add'], key: 'add'}
]
})
const init = async () => {
@@ -147,7 +152,40 @@ const search = (val) => {
tableIns.value.refresh()
}
const headBtnClick = (key) => {}
const handleAdd = () => {
router.push({
path: '/system/useradd',
query: {
isAdd: 1
}
})
}
const handleEdit = (row) => {
router.push({
path: '/system/useredit',
query: {
id: row.userId
}
})
}
const handleDel = (row) => {
ElMessageBox.confirm('确定删除该条数据吗?', '确定删除', {
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(async res => {
// const { code } = await
}).catch(()=>{})
}
const headBtnClick = (key) => {
switch(key) {
case 'add': handleAdd()
break;
}
}
</script>
<style lang="scss" scoped>