|
@@ -4,8 +4,8 @@
|
|
|
<custom-button-bar :fields="buttonFields" @add="toAdd"></custom-button-bar>
|
|
|
<custom-table :data="data" :fields="fields" @search="search" :total="total" :opera="opera" @edit="toEdit" @changeUse="toChangeUse" @delete="toDelete" @rp="toResetPwd">
|
|
|
<template #is_use="{ row }">
|
|
|
- <el-tag v-if="row.is_use == '0'" type="success">启用</el-tag>
|
|
|
- <el-tag v-else type="info">禁用</el-tag>
|
|
|
+ <el-tag v-if="row.is_use == '0'" type="success">{{ $t('common.is_use_abled') }}</el-tag>
|
|
|
+ <el-tag v-else type="info">{{ $t('common.is_use_disabled') }}</el-tag>
|
|
|
</template>
|
|
|
</custom-table>
|
|
|
<el-dialog v-model="dialog" :title="$t('pages.menus.dialogTitle')" :destroy-on-close="false" @close="toClose">
|
|
@@ -16,22 +16,27 @@
|
|
|
<template #role>
|
|
|
<el-option v-for="i in roleList" :key="i._id" :label="i.name" :value="i.code"></el-option>
|
|
|
</template>
|
|
|
+ <template #dept>
|
|
|
+ <el-tree-select :props="defaultProps" node-key="_id" accordion v-model="form.dept" :data="deptList" check-strictly :render-after-expand="false" />
|
|
|
+ </template>
|
|
|
</custom-form>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
+import { DeptStore } from '@/store/api/system/dept'
|
|
|
import { AdminStore } from '@/store/api/user/admin'
|
|
|
import { LoginStore } from '@/store/api/login'
|
|
|
import { RoleStore } from '@/store/api/system/role'
|
|
|
import { DictDataStore } from '@/store/api/system/dictData'
|
|
|
-import { cloneDeep, get } from 'lodash-es'
|
|
|
+import { cloneDeep, get, omit, isArray } from 'lodash-es'
|
|
|
const $checkRes = inject('$checkRes')
|
|
|
const store = AdminStore()
|
|
|
const loginStore = LoginStore()
|
|
|
const dictDataStore = DictDataStore()
|
|
|
const roleStore = RoleStore()
|
|
|
+const deptStore = DeptStore()
|
|
|
const { t } = useI18n()
|
|
|
const loading = ref(false)
|
|
|
let skip = 0
|
|
@@ -49,6 +54,7 @@ const fields = [
|
|
|
{ label: t('pages.admin.account'), model: 'account', filter: true },
|
|
|
{ label: t('pages.admin.nick_name'), model: 'nick_name' },
|
|
|
{ label: t('pages.admin.role'), model: 'role', format: (i) => getRole(i) },
|
|
|
+ { label: t('所属部门'), model: 'dept', format: (i) => getDept(i) },
|
|
|
{ label: t('pages.admin.is_super'), model: 'is_super', format: (i) => (i === '0' ? t('common.yes') : t('common.no')) },
|
|
|
{ label: t('pages.admin.is_use'), model: 'is_use', format: (i) => getDict(i), custom: true }
|
|
|
]
|
|
@@ -74,7 +80,7 @@ const opera = [
|
|
|
},
|
|
|
{ label: t('common.delete'), method: 'delete', confirm: true, type: 'danger', display: (i) => i.is_super !== '0' }
|
|
|
]
|
|
|
-const buttonFields = [{ label: t('common.add'), method: 'add' }]
|
|
|
+const buttonFields = [{ label: t('common.create'), method: 'add' }]
|
|
|
const searchForm = ref({})
|
|
|
const search = async (query = { skip: 0, limit }) => {
|
|
|
const info = { skip: query.skip, limit: query.limit, ...searchForm.value }
|
|
@@ -86,6 +92,11 @@ const search = async (query = { skip: 0, limit }) => {
|
|
|
}
|
|
|
const isUseList = ref([])
|
|
|
const roleList = ref([])
|
|
|
+const deptList = ref([])
|
|
|
+const defaultProps = {
|
|
|
+ children: 'children',
|
|
|
+ label: 'name'
|
|
|
+}
|
|
|
const searchOther = async () => {
|
|
|
const result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
|
|
|
if ($checkRes(result)) {
|
|
@@ -95,6 +106,10 @@ const searchOther = async () => {
|
|
|
if ($checkRes(roleResult)) {
|
|
|
roleList.value = roleResult.data
|
|
|
}
|
|
|
+ const deptResult = await deptStore.query({ status: '0' })
|
|
|
+ if ($checkRes(deptResult)) {
|
|
|
+ deptList.value = deptResult.data
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
const toDelete = async (data) => {
|
|
@@ -137,17 +152,20 @@ const formFieldsForUpdate = [
|
|
|
{ label: t('pages.admin.nick_name'), model: 'nick_name' },
|
|
|
{ label: t('pages.admin.is_use'), model: 'is_use', type: 'radio' }
|
|
|
]
|
|
|
-const roleField = { label: t('pages.admin.role'), model: 'role', type: 'select' }
|
|
|
+const notSuperFields = [
|
|
|
+ { label: t('所属部门'), model: 'dept', custom: true },
|
|
|
+ { label: t('pages.admin.role'), model: 'role', type: 'select' }
|
|
|
+]
|
|
|
const toAdd = () => {
|
|
|
formFields.value = formFieldsForCreate
|
|
|
- formFields.value.push(roleField)
|
|
|
+ formFields.value.push(...notSuperFields)
|
|
|
form.value = cloneDeep(defaultForm)
|
|
|
dialog.value = true
|
|
|
}
|
|
|
const toEdit = (data) => {
|
|
|
formFields.value = cloneDeep(formFieldsForUpdate)
|
|
|
form.value = data
|
|
|
- if (data.is_super !== '0') formFields.value.push(roleField)
|
|
|
+ if (data.is_super !== '0') formFields.value.push(...notSuperFields)
|
|
|
dialog.value = true
|
|
|
}
|
|
|
const toSave = async () => {
|
|
@@ -160,6 +178,24 @@ const toSave = async () => {
|
|
|
toClose()
|
|
|
}
|
|
|
}
|
|
|
+const getDept = (data) => {
|
|
|
+ const resetList = (list) => {
|
|
|
+ const result = []
|
|
|
+ for (const i of list) {
|
|
|
+ const d = omit(i, ['children'])
|
|
|
+ result.push(d)
|
|
|
+ if (isArray(i.children) && i.children.length > 0) {
|
|
|
+ const ml = resetList(i.children)
|
|
|
+ result.push(...ml)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result
|
|
|
+ }
|
|
|
+ const odDeptList = resetList(deptList.value)
|
|
|
+ const result = odDeptList.find((f) => f._id === data)
|
|
|
+ if (!result) return '暂无'
|
|
|
+ return result.name
|
|
|
+}
|
|
|
const getRole = (data) => {
|
|
|
const res = roleList.value.find((f) => f.code === data)
|
|
|
return get(res, 'name')
|