feat(system): 新增审批白名单功能并优化用户列表
This commit is contained in:
@@ -233,3 +233,19 @@ export const editAgentInfo=(data)=>{
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const addWhiteUser=(data)=>{
|
||||||
|
return request({
|
||||||
|
url:'/admin/approve/white',
|
||||||
|
method:'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const delWhiteUser=(data)=>{
|
||||||
|
return request({
|
||||||
|
url:'/admin/approve/white',
|
||||||
|
method:'delete',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
142
src/views/system/approvalWhitelist/index.vue
Normal file
142
src/views/system/approvalWhitelist/index.vue
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
<template>
|
||||||
|
<fvSearchForm :searchConfig="searchConfig" @search="search" style="margin-left: 16px" ></fvSearchForm>
|
||||||
|
<fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick"
|
||||||
|
@selectionChange="selectionChange"></fvTable>
|
||||||
|
<user-picker :multiple="true" ref="whiteUserRef" title="请选择人员"
|
||||||
|
v-model:value="whiteUserList" @ok="whiteUserPickerOk" @cancelOrClear="whiteUserPickerOk"/>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="jsx">
|
||||||
|
import UserPicker from "@/views/workflow/process/common/UserPicker.vue";
|
||||||
|
import {addWhiteUser, delWhiteUser} from "@/api/user/user";
|
||||||
|
const tableIns = ref()
|
||||||
|
const router = useRouter()
|
||||||
|
const whiteUserRef = ref()
|
||||||
|
const whiteUserList = ref([])
|
||||||
|
const selectUser = ref([])
|
||||||
|
const searchConfig = ref([
|
||||||
|
{
|
||||||
|
label: '名称',
|
||||||
|
prop: 'name',
|
||||||
|
component:'el-input',
|
||||||
|
props: {
|
||||||
|
placeholder: '请输入名称',
|
||||||
|
clearable: true,
|
||||||
|
filterable: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '电话',
|
||||||
|
prop: 'phone',
|
||||||
|
component:'el-input',
|
||||||
|
props: {
|
||||||
|
placeholder: '请输入电话',
|
||||||
|
clearable: true,
|
||||||
|
filterable: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
])
|
||||||
|
const tableConfig = reactive({
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
type: 'selection',
|
||||||
|
prop: 'selection',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'index',
|
||||||
|
type: 'index',
|
||||||
|
label: '序号',
|
||||||
|
align: 'center',
|
||||||
|
width:60,
|
||||||
|
index: index => {
|
||||||
|
return (tableIns.value.getQuery().pageNum - 1) * tableIns.value.getQuery().pageSize + index + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'name',
|
||||||
|
label: '名称',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'phone',
|
||||||
|
label: '手机号码',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'companyName',
|
||||||
|
label: '公司名称',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'accountType',
|
||||||
|
label: '主次账号',
|
||||||
|
align: 'center',
|
||||||
|
showOverflowTooltip: false,
|
||||||
|
currentRender: ({row, index}) => (<Tag dictType={'account_type'} value={row.accountType}/>)
|
||||||
|
},
|
||||||
|
],
|
||||||
|
api: '/admin/approve/white/list',
|
||||||
|
params: {},
|
||||||
|
btns: [
|
||||||
|
{name: '新增', key: 'add', color: '#DED0B2'},
|
||||||
|
{name: '删除', key: 'del', type:'danger'},
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const whiteUserPickerOk = (userList) => {
|
||||||
|
whiteUserList.value = userList.map(item => item.id)
|
||||||
|
addUser()
|
||||||
|
}
|
||||||
|
const addUser=async () => {
|
||||||
|
const res = await addWhiteUser({
|
||||||
|
userIds: whiteUserList.value
|
||||||
|
})
|
||||||
|
console.log('res',res)
|
||||||
|
if (res.code === 1000) {
|
||||||
|
ElMessage.success('新增成功')
|
||||||
|
tableIns.value.refresh()
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const search = (val) => {
|
||||||
|
tableConfig.params = val
|
||||||
|
tableIns.value.refresh()
|
||||||
|
}
|
||||||
|
const selectionChange = (data) => {
|
||||||
|
selectUser.value=data.map(item=>item.id)
|
||||||
|
}
|
||||||
|
const headBtnClick = (key) => {
|
||||||
|
switch (key) {
|
||||||
|
case 'add':
|
||||||
|
handleAddWhiteUser()
|
||||||
|
break;
|
||||||
|
case 'del':
|
||||||
|
handleDeleteWhiteUser()
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const handleAddWhiteUser = () => {
|
||||||
|
whiteUserRef.value.showUserPicker()
|
||||||
|
}
|
||||||
|
const handleDeleteWhiteUser = async () => {
|
||||||
|
// if (selectUser.value.length === 0) {
|
||||||
|
// ElMessage.warning('请选择要删除的用户')
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
const res = await delWhiteUser({
|
||||||
|
userIds: selectUser.value
|
||||||
|
})
|
||||||
|
console.log('res',res)
|
||||||
|
if (res.code === 1000) {
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
tableIns.value.refresh()
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<el-table-column prop="jobActivityDesc" label="岗位名称" align="center"/>
|
<el-table-column prop="jobActivityDesc" label="岗位名称" align="center"/>
|
||||||
<el-table-column prop="departmentName" label="部门" align="center"/>
|
<el-table-column prop="departmentName" label="部门" align="center"/>
|
||||||
<el-table-column prop="mobile" label="手机号码" align="center"/>
|
<el-table-column prop="mobile" label="手机号码" align="center"/>
|
||||||
<el-table-column prop="accountType" label="主子账号" align="center" width="100">
|
<el-table-column prop="accountType" label="主次账号" align="center" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<Tag dictType="account_type" :value="scope.row.accountType"/>
|
<Tag dictType="account_type" :value="scope.row.accountType"/>
|
||||||
</template>
|
</template>
|
||||||
@@ -200,7 +200,7 @@ const tableConfig = reactive({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'accountType',
|
prop: 'accountType',
|
||||||
label: '主子账号',
|
label: '主次账号',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
width: 100,
|
width: 100,
|
||||||
showOverflowTooltip: false,
|
showOverflowTooltip: false,
|
||||||
|
|||||||
172
vite.config.js
172
vite.config.js
@@ -12,90 +12,96 @@ import viteSvgIcons from 'vite-plugin-svg-icons'
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
vue(),
|
vue(),
|
||||||
vueJsx(),
|
vueJsx(),
|
||||||
AutoImport({
|
AutoImport({
|
||||||
//自动导入vue相关函数
|
//自动导入vue相关函数
|
||||||
imports: ['vue', 'vue-router'],
|
imports: ['vue', 'vue-router'],
|
||||||
resolvers: [
|
resolvers: [
|
||||||
ElementPlusResolver(),
|
ElementPlusResolver(),
|
||||||
//自动导入图标组件
|
//自动导入图标组件
|
||||||
IconsResolver({
|
IconsResolver({
|
||||||
prefix: 'Icon',
|
prefix: 'Icon',
|
||||||
|
}),
|
||||||
|
],
|
||||||
}),
|
}),
|
||||||
],
|
Components({
|
||||||
}),
|
dirs: ['src/components', 'src/fvcomponents'],
|
||||||
Components({
|
resolvers: [
|
||||||
dirs: ['src/components', 'src/fvcomponents'],
|
// 自动注册图标组件
|
||||||
resolvers: [
|
IconsResolver({
|
||||||
// 自动注册图标组件
|
enabledRequirements: ['ep'],
|
||||||
IconsResolver({
|
}),
|
||||||
enabledRequirements: ['ep'],
|
//自动导入组件
|
||||||
|
ElementPlusResolver()
|
||||||
|
],
|
||||||
}),
|
}),
|
||||||
//自动导入组件
|
Icons({
|
||||||
ElementPlusResolver()
|
autoInstall: true,
|
||||||
],
|
}),
|
||||||
}),
|
viteSvgIcons({
|
||||||
Icons({
|
// 指定需要缓存的图标文件夹
|
||||||
autoInstall: true,
|
iconDirs: [path.resolve(__dirname, 'src/assets/svg')],
|
||||||
}),
|
// 指定symbolId格式
|
||||||
viteSvgIcons({
|
symbolId: 'icon-[dir]-[name]',
|
||||||
// 指定需要缓存的图标文件夹
|
}),
|
||||||
iconDirs: [path.resolve(__dirname, 'src/assets/svg')],
|
Inspect(),
|
||||||
// 指定symbolId格式
|
],
|
||||||
symbolId: 'icon-[dir]-[name]',
|
resolve: {
|
||||||
}),
|
alias: {
|
||||||
Inspect(),
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||||
],
|
}
|
||||||
resolve: {
|
},
|
||||||
alias: {
|
build: {
|
||||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
minify: 'esbuild',
|
||||||
|
terserOptions: {
|
||||||
|
compress: {
|
||||||
|
drop_console: false, // 生产环境移除log
|
||||||
|
drop_debugger: true // 生产环境禁用debugger
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
host: '0.0.0.0',
|
||||||
|
port: 8888,
|
||||||
|
strictPort: false,
|
||||||
|
open: true,
|
||||||
|
proxy: {
|
||||||
|
// '/api/workflow': {
|
||||||
|
// // target: 'http://frp.feashow.cn:31800/',
|
||||||
|
// target: 'http://clay.frp.feashow.cn/',
|
||||||
|
// // target: 'http://192.168.31.175:8000',
|
||||||
|
// changeOrigin: true,
|
||||||
|
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
|
// },
|
||||||
|
// '/api/admin': {
|
||||||
|
// // target: 'http://frp.feashow.cn:31800/',
|
||||||
|
// target: 'http://clay.frp.feashow.cn/',
|
||||||
|
// // target: 'http://192.168.31.175:8000',
|
||||||
|
// changeOrigin: true,
|
||||||
|
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
|
// },
|
||||||
|
// '/api/auth': {
|
||||||
|
// // target: 'http://frp.feashow.cn:31800/',
|
||||||
|
// target: 'http://clay.frp.feashow.cn/',
|
||||||
|
// // target: 'http://192.168.31.175:8000',
|
||||||
|
// changeOrigin: true,
|
||||||
|
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
|
// },
|
||||||
|
'/api': {
|
||||||
|
target: 'http://mosr.feashow.cn',
|
||||||
|
// target: 'http://kyglweb.scgzjy.com:8080/',
|
||||||
|
// target: 'http://clay.frp.feashow.cn/',
|
||||||
|
// target: 'http://10.7.127.57:8000',
|
||||||
|
changeOrigin: true,
|
||||||
|
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
|
},
|
||||||
|
// '/api/notice-ws': {
|
||||||
|
// target: 'ws://mosr.feashow.cn/summary/notice-ws',
|
||||||
|
// ws: true,
|
||||||
|
// changeOrigin: true,
|
||||||
|
// }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
build: {
|
|
||||||
minify: 'esbuild',
|
|
||||||
terserOptions: {
|
|
||||||
compress: {
|
|
||||||
drop_console: false, // 生产环境移除log
|
|
||||||
drop_debugger: true // 生产环境禁用debugger
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
server: {
|
|
||||||
host: '0.0.0.0',
|
|
||||||
port: 8888,
|
|
||||||
strictPort: false,
|
|
||||||
open: true,
|
|
||||||
proxy: {
|
|
||||||
// '/api/workflow': {
|
|
||||||
// target: 'http://frp.feashow.cn:31800/',
|
|
||||||
// // target: 'http://clay.frp.feashow.cn/',
|
|
||||||
// // target: 'http://192.168.31.175:8000',
|
|
||||||
// changeOrigin: true,
|
|
||||||
// rewrite: (path) => path.replace(/^\/api/, '')
|
|
||||||
// },
|
|
||||||
// '/api/admin': {
|
|
||||||
// // target: 'http://frp.feashow.cn:31800/',
|
|
||||||
// target: 'http://clay.frp.feashow.cn/',
|
|
||||||
// // target: 'http://192.168.31.175:8000',
|
|
||||||
// changeOrigin: true,
|
|
||||||
// rewrite: (path) => path.replace(/^\/api/, '')
|
|
||||||
// },
|
|
||||||
'/api': {
|
|
||||||
// target: 'http://kyglweb.scgzjy.com:8080/',
|
|
||||||
target: 'http://mosr.feashow.cn',
|
|
||||||
changeOrigin: true,
|
|
||||||
// target: 'http://clay.frp.feashow.cn',
|
|
||||||
// // target: 'http://frp.feashow.cn:31800/',
|
|
||||||
// changeOrigin: true,
|
|
||||||
// rewrite: (path) => path.replace(/^\/api/, '')
|
|
||||||
},
|
|
||||||
// '/api/notice-ws': {
|
|
||||||
// target: 'ws://mosr.feashow.cn/summary/notice-ws',
|
|
||||||
// ws: true,
|
|
||||||
// changeOrigin: true,
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user