|
|
@@ -1,282 +1,230 @@
|
|
|
<template>
|
|
|
- <div>
|
|
|
- <PageWrapper dense contentFullHeight contentClass="flex">
|
|
|
- <OrganizationIdTree @select="handleSelect" ref="organizationIdTreeRef" />
|
|
|
- <BasicTable style="flex: auto" :clickToRowSelect="false" @register="registerTable" class="w-3/4 xl:w-4/5">
|
|
|
+ <div class="p-4">
|
|
|
+ <div class="account-body">
|
|
|
+ <BasicTable @register="registerTable" class="basic-table">
|
|
|
<template #toolbar>
|
|
|
- <Authority>
|
|
|
- <a-button type="primary" @click="handleCreate">新增账号</a-button>
|
|
|
- </Authority>
|
|
|
- <Authority value="api:yt:user:delete">
|
|
|
- <Popconfirm title="您确定要批量删除数据" ok-text="确定" cancel-text="取消" @confirm="handleDeleteOrBatchDelete(null)">
|
|
|
- <a-button color="error" :disabled="hasBatchDelete"> 批量删除 </a-button>
|
|
|
- </Popconfirm>
|
|
|
- </Authority>
|
|
|
- </template>
|
|
|
- <template #status="{ record }">
|
|
|
- <Tag :color="record.userStatusEnum === 'NORMAL'
|
|
|
- ? 'green'
|
|
|
- : record.userStatusEnum === 'DISABLED'
|
|
|
- ? 'red'
|
|
|
- : 'orange'
|
|
|
- ">
|
|
|
- {{
|
|
|
- record.userStatusEnum === 'NORMAL'
|
|
|
- ? '正常'
|
|
|
- : record.userStatusEnum === 'DISABLED'
|
|
|
- ? '已禁用'
|
|
|
- : '已过期'
|
|
|
- }}
|
|
|
- </Tag>
|
|
|
+ <Button type="primary" @click="handleAdd">
|
|
|
+ 新增用户
|
|
|
+ </Button>
|
|
|
+ <Button type="primary" @click="handlePermissionEdit">
|
|
|
+ 权限绑定
|
|
|
+ </Button>
|
|
|
</template>
|
|
|
<template #SEX="{ record }">
|
|
|
<span>{{ record.SEX ? '男' : '女' }}</span>
|
|
|
</template>
|
|
|
- <template #statusT="{ record }">
|
|
|
- <Tag :color="record.locked == true ? 'red' : 'green'">
|
|
|
- {{ record.locked == true ? '已锁定' : '正常' }}
|
|
|
- </Tag>
|
|
|
- </template>
|
|
|
<template #action="{ record }">
|
|
|
<TableAction :actions="[
|
|
|
- // {
|
|
|
- // label: '进入',
|
|
|
- // icon: 'ant-design:login-outlined',
|
|
|
- // tooltip: '以客户用户身份登录',
|
|
|
- // onClick: handleLoginCustomAdmin.bind(null, record),
|
|
|
- // ifShow: !isAdmin(role),
|
|
|
- // },
|
|
|
- // {
|
|
|
- // label: '用户详情',
|
|
|
- // // auth: 'api:yt:user:get',
|
|
|
- // icon: 'clarity:info-standard-line',
|
|
|
- // tooltip: '用户详情',
|
|
|
- // onClick: handleView.bind(null, record),
|
|
|
- // ifShow: record.level != 0,
|
|
|
- // },
|
|
|
- // {
|
|
|
- // label: '编辑',
|
|
|
- // // auth: 'api:yt:user:update',
|
|
|
- // icon: 'clarity:note-edit-line',
|
|
|
- // tooltip: '编辑',
|
|
|
- // onClick: handleEdit.bind(null, record),
|
|
|
- // ifShow: record.level != 0,
|
|
|
- // },
|
|
|
{
|
|
|
- label: '权限设置',
|
|
|
- icon: 'ant-design:key-outlined',
|
|
|
- onClick: power.bind(null, record),
|
|
|
+ label: '编辑',
|
|
|
+ tooltip: '编辑',
|
|
|
+ onClick: handleEdit.bind(null, record),
|
|
|
},
|
|
|
{
|
|
|
label: '删除',
|
|
|
- // auth: 'api:yt:user:delete',
|
|
|
- icon: 'ant-design:delete-outlined',
|
|
|
- color: 'error',
|
|
|
tooltip: '删除',
|
|
|
- ifShow: record.level != 0,
|
|
|
- popConfirm: {
|
|
|
- title: '是否确认删除',
|
|
|
- confirm: handleDeleteOrBatchDelete.bind(null, record),
|
|
|
- },
|
|
|
+ color: 'error',
|
|
|
+ onClick: handleDelete.bind(null, record.departid),
|
|
|
},
|
|
|
- ]" :drop-down-actions="[
|
|
|
- // {
|
|
|
- // label: '删除',
|
|
|
- // // auth: 'api:yt:user:delete',
|
|
|
- // icon: 'ant-design:delete-outlined',
|
|
|
- // color: 'error',
|
|
|
- // tooltip: '删除',
|
|
|
- // ifShow: record.level != 0,
|
|
|
- // popConfirm: {
|
|
|
- // title: '是否确认删除',
|
|
|
- // confirm: handleDeleteOrBatchDelete.bind(null, record),
|
|
|
- // },
|
|
|
- // },
|
|
|
- // {
|
|
|
- // label: '解锁',
|
|
|
- // auth: 'api:yt:user:delete',
|
|
|
- // icon: 'ant-design:key-outlined',
|
|
|
- // color: 'error',
|
|
|
- // tooltip: '解锁',
|
|
|
- // ifShow: record.level != 0,
|
|
|
- // popConfirm: {
|
|
|
- // title: '是否确认解锁',
|
|
|
- // confirm: unlock.bind(null, record),
|
|
|
- // },
|
|
|
- // },
|
|
|
-]" />
|
|
|
+ ]" />
|
|
|
</template>
|
|
|
</BasicTable>
|
|
|
- <AccountModal @register="registerModal" @success="handleSuccess" />
|
|
|
- </PageWrapper>
|
|
|
- <PowerDrawer @register="registerDrawer" @success="handleSuccess"></PowerDrawer>
|
|
|
+ </div>
|
|
|
+ <AccountModal1 v-if="ifShowModal" :title="modalTitle" :formData="formData" @closeModal="ifShowModal = false"
|
|
|
+ @onSubmit="onSubmit" />
|
|
|
</div>
|
|
|
</template>
|
|
|
-<script lang="ts">
|
|
|
-import { defineComponent, reactive, nextTick, toRaw } from 'vue';
|
|
|
-import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
|
|
-import { deleteUser, getAccountList, alterUnlock } from '/@/api/system/system';
|
|
|
-import { PageWrapper } from '/@/components/Page';
|
|
|
-import { useResetOrganizationTree, OrganizationIdTree } from '/@/views/common/organizationIdTree';
|
|
|
-import { Tag, Popconfirm } from 'ant-design-vue';
|
|
|
-import { useModal } from '/@/components/Modal';
|
|
|
-import AccountModal from './AccountModal.vue';
|
|
|
-import { columns, searchFormSchema } from './account.data';
|
|
|
-import { useGo } from '/@/hooks/web/usePage';
|
|
|
-import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
|
|
|
-import { Authority } from '/@/components/Authority';
|
|
|
-import { getMyInfo, getPermCode, getUserToken } from '/@/api/sys/user';
|
|
|
-import { useUserStore } from '/@/store/modules/user';
|
|
|
-import { usePermissionStore } from '/@/store/modules/permission';
|
|
|
-import { router } from '/@/router';
|
|
|
-import { RoleEnum } from '/@/enums/roleEnum';
|
|
|
-import { RouteRecordRaw } from 'vue-router';
|
|
|
-import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
|
|
|
-import { PageEnum } from '/@/enums/pageEnum';
|
|
|
-import { getAuthCache } from '/@/utils/auth';
|
|
|
-import { USER_INFO_KEY } from '/@/enums/cacheEnum';
|
|
|
-import { isAdmin } from '/@/enums/roleEnum';
|
|
|
-import { useDrawer } from '/@/components/Drawer';
|
|
|
-import PowerDrawer from './PowerDrawer.vue';
|
|
|
|
|
|
+<script>
|
|
|
+import { defineComponent, reactive, ref, toRefs, computed, onMounted, watch } from 'vue';
|
|
|
+
|
|
|
+// 导入表格组件,表格事件
|
|
|
+import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
|
|
+import AccountModal1 from './AccountModal1.vue';
|
|
|
+// 操作用户数据api
|
|
|
+import { deleteUser, getAccountList } from '/@/api/system/system';
|
|
|
+import { FormOutlined } from '@ant-design/icons-vue';
|
|
|
+import moment from 'moment';
|
|
|
+import { Button, Modal, message } from 'ant-design-vue';
|
|
|
+import { getUserInfoByLoginCode } from '/@/api/system/system';
|
|
|
+import { getUserIdInfo } from '/@/api/sys/user';
|
|
|
|
|
|
export default defineComponent({
|
|
|
- name: 'AccountManagement',
|
|
|
- components: {
|
|
|
- BasicTable,
|
|
|
- PageWrapper,
|
|
|
- OrganizationIdTree,
|
|
|
- AccountModal,
|
|
|
- TableAction,
|
|
|
- Tag,
|
|
|
- Authority,
|
|
|
- Popconfirm,
|
|
|
- PowerDrawer,
|
|
|
- },
|
|
|
+ name: 'account',
|
|
|
+ components: { BasicTable, TableAction, Button, AccountModal1 },
|
|
|
setup() {
|
|
|
- const userInfo: any = getAuthCache(USER_INFO_KEY);
|
|
|
- const role: string = userInfo?.roles[0];
|
|
|
- const [registerDrawer, { openDrawer }] = useDrawer();
|
|
|
- const go = useGo();
|
|
|
- const [registerModal, { openModal }] = useModal();
|
|
|
- let searchInfo = reactive<Recordable>({});
|
|
|
- const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo);
|
|
|
- const [registerTable, { reload, setProps }] = useTable({
|
|
|
- title: '账号列表',
|
|
|
- api: getAccountList,
|
|
|
- rowKey: 'id',
|
|
|
- columns,
|
|
|
- searchInfo,
|
|
|
- formConfig: {
|
|
|
- labelWidth: 120,
|
|
|
- schemas: searchFormSchema,
|
|
|
- // autoSubmitOnEnter: true,
|
|
|
- resetFunc: resetFn,
|
|
|
+ const getAllData = () => {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ let params = {
|
|
|
+ keyStr: '',
|
|
|
+ page: 1,
|
|
|
+ pageSize: 100000000,
|
|
|
+ }
|
|
|
+ getAccountList(params).then(res => {
|
|
|
+ if (res.items?.length) {
|
|
|
+ resolve(res.items)
|
|
|
+ } else {
|
|
|
+ message.info('未查询到用户数据')
|
|
|
+ resolve([])
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ const columns = [
|
|
|
+ {
|
|
|
+ title: '用户名',
|
|
|
+ dataIndex: 'NAME',
|
|
|
+ align: 'center'
|
|
|
},
|
|
|
- useSearchForm: true,
|
|
|
- showTableSetting: true,
|
|
|
- bordered: true,
|
|
|
- actionColumn: {
|
|
|
- width: 240,
|
|
|
- title: '操作',
|
|
|
- dataIndex: 'action',
|
|
|
- slots: { customRender: 'action' },
|
|
|
- fixed: 'right',
|
|
|
+ {
|
|
|
+ title: '登录姓名',
|
|
|
+ dataIndex: 'LOGIN_NAME',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '用户ID',
|
|
|
+ dataIndex: 'EMPLOYEE_ID',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '性别',
|
|
|
+ dataIndex: 'SEX',
|
|
|
+ align: 'center',
|
|
|
+ slots: { customRender: 'SEX' },
|
|
|
},
|
|
|
+ ]
|
|
|
+ //注册表格
|
|
|
+ const [
|
|
|
+ registerTable,
|
|
|
+ { reload },
|
|
|
+ ] = useTable({
|
|
|
+ title: '用户列表', //'菜单列表'
|
|
|
+ api: getAllData, //加载数据
|
|
|
+ // dataSource: [],
|
|
|
+ columns: columns,
|
|
|
+ useSearchForm: false, //开启搜索区域
|
|
|
+ bordered: false,
|
|
|
+ striped: false,
|
|
|
+ showTableSetting: true, // 显示表格设置
|
|
|
tableSetting: {
|
|
|
redo: true,
|
|
|
size: true,
|
|
|
setting: false,
|
|
|
fullScreen: false
|
|
|
},
|
|
|
+ canResize: true,
|
|
|
+ showIndexColumn: true,
|
|
|
+ pagination: {
|
|
|
+ // pageSize: 10,
|
|
|
+ hideOnSinglePage: false
|
|
|
+ },
|
|
|
+ actionColumn: {
|
|
|
+ width: 100,
|
|
|
+ title: '操作',
|
|
|
+ dataIndex: 'action',
|
|
|
+ slots: { customRender: 'action' },
|
|
|
+ }
|
|
|
});
|
|
|
- const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete(
|
|
|
- deleteUser,
|
|
|
- handleSuccess,
|
|
|
- setProps
|
|
|
- );
|
|
|
- nextTick(() => {
|
|
|
- setProps(selectionOptions);
|
|
|
- });
|
|
|
-
|
|
|
- function handleCreate() {
|
|
|
- openModal(true, {
|
|
|
- isUpdate: false,
|
|
|
- });
|
|
|
- }
|
|
|
+ const formData = ref(null)
|
|
|
+ const ifShowModal = ref(false)
|
|
|
+ const modalTitle = ref('新增用户')
|
|
|
+ //绑定权限
|
|
|
+ const handlePermissionEdit = () => {
|
|
|
|
|
|
- function unlock(data) {
|
|
|
- alterUnlock(data.tbUser).then(() => {
|
|
|
- reload();
|
|
|
- });
|
|
|
}
|
|
|
- function handleEdit(record: Recordable) {
|
|
|
- openModal(true, {
|
|
|
- record,
|
|
|
- isUpdate: true,
|
|
|
- });
|
|
|
- }
|
|
|
- function handleSuccess() {
|
|
|
- reload();
|
|
|
- }
|
|
|
-
|
|
|
- function handleSelect(organization) {
|
|
|
- searchInfo.organizationId = organization;
|
|
|
- reload();
|
|
|
+ // 新增
|
|
|
+ const handleAdd = () => {
|
|
|
+ formData.value = {
|
|
|
+ loginName: "",
|
|
|
+ userName: "",
|
|
|
+ pwd: '',
|
|
|
+ mobile: "",
|
|
|
+ sex: '0',
|
|
|
+ sszw: "",
|
|
|
+ ssgw: "",
|
|
|
+ userjs: [],
|
|
|
+ userid: ""
|
|
|
+ }
|
|
|
+ modalTitle.value = '新增用户'
|
|
|
+ ifShowModal.value = true
|
|
|
}
|
|
|
-
|
|
|
- function handleView(record: Recordable) {
|
|
|
- go('/system/account_detail/' + record.id);
|
|
|
+ // 编辑
|
|
|
+ const handleEdit = (record) => {
|
|
|
+ getUserInfoByLoginCode(record.LOGIN_NAME).then(res => {
|
|
|
+ if (res.user?.userid) {
|
|
|
+ getUserIdInfo(res.user.userid).then(roleRes => {
|
|
|
+ //组合信息传给修改弹窗
|
|
|
+ formData.value = {
|
|
|
+ loginName: res.user.loginName,
|
|
|
+ userName: res.user.userName,
|
|
|
+ pwd: "",
|
|
|
+ mobile: res.user.mobile,
|
|
|
+ sex: res.user.sex,
|
|
|
+ ssjg: res.department[0].departid,
|
|
|
+ sszw: res.zw[0].departid,
|
|
|
+ ssgw: res.gw[0].id,
|
|
|
+ userjsArr: roleRes,
|
|
|
+ userjs:roleRes.join(';'),
|
|
|
+ userid: res.user.userid
|
|
|
+ }
|
|
|
+ modalTitle.value = '修改用户'
|
|
|
+ ifShowModal.value = true
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ message.error('用户信息查询失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
- const userStore = useUserStore();
|
|
|
+ // 删除
|
|
|
+ const handleDelete = () => {
|
|
|
|
|
|
- const permissionStore = usePermissionStore();
|
|
|
- async function handleLoginCustomAdmin(record: { tbUser: string; id: string }) {
|
|
|
- try {
|
|
|
- const { token, refreshToken } = await getUserToken(record.id);
|
|
|
- userStore.storeToken(token, refreshToken);
|
|
|
- const userInfo = await getMyInfo();
|
|
|
- const permissionList = await getPermCode();
|
|
|
- permissionStore.setPermCodeList(permissionList);
|
|
|
- userStore.setUserInfo(userInfo);
|
|
|
- userStore.setRoleList(userInfo.roles as RoleEnum[]);
|
|
|
- const routes = await permissionStore.buildRoutesAction();
|
|
|
- routes.forEach((route) => {
|
|
|
- router.addRoute(route as unknown as RouteRecordRaw);
|
|
|
- });
|
|
|
- router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
|
|
|
- permissionStore.setDynamicAddedRoute(true);
|
|
|
- go(PageEnum.BASE_HOME);
|
|
|
- } catch (error) {
|
|
|
- } finally {
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
- function power(record: Recordable) {
|
|
|
- openDrawer(true, {
|
|
|
- record,
|
|
|
- isUpdate: true,
|
|
|
- });
|
|
|
+ //新增或修改的提交
|
|
|
+ const onSubmit = (e) => {
|
|
|
+ ifShowModal.value = false
|
|
|
+ e && reload();
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
- registerDrawer,
|
|
|
- power,
|
|
|
- handleLoginCustomAdmin,
|
|
|
+ formData,
|
|
|
+ ifShowModal,
|
|
|
+ modalTitle,
|
|
|
registerTable,
|
|
|
- registerModal,
|
|
|
- handleCreate,
|
|
|
+ handlePermissionEdit,
|
|
|
+ handleAdd,
|
|
|
handleEdit,
|
|
|
- handleSuccess,
|
|
|
- handleSelect,
|
|
|
- handleView,
|
|
|
- unlock,
|
|
|
- organizationIdTreeRef,
|
|
|
- hasBatchDelete,
|
|
|
- handleDeleteOrBatchDelete,
|
|
|
- isAdmin,
|
|
|
- role,
|
|
|
+ handleDelete,
|
|
|
+ onSubmit
|
|
|
};
|
|
|
},
|
|
|
});
|
|
|
</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.p-4 {
|
|
|
+ height: 100%;
|
|
|
+
|
|
|
+ .account-body {
|
|
|
+ padding: 0 20px;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background-color: #fff;
|
|
|
+
|
|
|
+ .basic-table {
|
|
|
+ height: 100%;
|
|
|
+
|
|
|
+ ::v-deep .ant-table-title {
|
|
|
+ padding: 0 !important;
|
|
|
+
|
|
|
+ .vben-basic-title {
|
|
|
+ font-family: '阿里巴巴普惠体 2.0';
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333333;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|