| | |
| | | "userNamePlaceholder": "Please enter user name", |
| | | "userPhonePlaceholder": "Please enter user phone", |
| | | "rolePlaceholder": "Please select role", |
| | | "accountStatusPlaceholder": "Please select status" |
| | | "accountStatusPlaceholder": "Please select account status" |
| | | }, |
| | | "table": { |
| | | "index": "No.", |
| | | "personName": "Person Name", |
| | | "number": "Number", |
| | | "loginAccount": "Login Account", |
| | | "phoneNumber": "Phone Number", |
| | | "phoneNumber": "User Phone", |
| | | "role": "Role", |
| | | "status": "Status", |
| | | "status": "Account Status", |
| | | "createTime": "Create Time", |
| | | "remark": "Remark", |
| | | "actions": "Actions" |
| | |
| | | "userName": "User Name", |
| | | "number": "Number", |
| | | "loginAccount": "Login Account", |
| | | "phoneNumber": "Phone Number", |
| | | "phoneNumber": "User Phone", |
| | | "initialPassword": "Initial Password", |
| | | "role": "Role" |
| | | }, |
| | |
| | | "userName": "Please enter user name", |
| | | "number": "Auto-generated by system", |
| | | "loginAccount": "Please enter login account", |
| | | "phoneNumber": "Please enter phone number", |
| | | "phoneNumber": "Please enter user phone", |
| | | "initialPassword": "Please enter initial password", |
| | | "role": "Please select role" |
| | | }, |
| | |
| | | "userNameFormat": "User name only supports Chinese, English, numbers, and spaces", |
| | | "loginAccountRequired": "Please enter login account", |
| | | "loginAccountFormat": "Login account must be 11-digit phone number or email format", |
| | | "phoneNumberRequired": "Please enter phone number", |
| | | "phoneNumberRequired": "Please enter user phone", |
| | | "phoneNumberFormat": "Please enter a valid 11-digit phone number", |
| | | "passwordRequired": "Please enter initial password", |
| | | "passwordLength": "Initial password length should be 8-20 characters", |
| | |
| | | "accountManagement": { |
| | | "search": { |
| | | "userName": "用户名称", |
| | | "userPhone": "联系电话", |
| | | "userPhone": "用户电话", |
| | | "role": "角色", |
| | | "accountStatus": "账号状态", |
| | | "userNamePlaceholder": "请输入", |
| | | "userPhonePlaceholder": "请输入", |
| | | "userPhonePlaceholder": "请输入用户电话", |
| | | "rolePlaceholder": "请选择", |
| | | "accountStatusPlaceholder": "请选择" |
| | | "accountStatusPlaceholder": "请选择账号状态" |
| | | }, |
| | | "table": { |
| | | "index": "序号", |
| | | "personName": "用户名称", |
| | | "number": "编号", |
| | | "loginAccount": "登录账号", |
| | | "phoneNumber": "联系电话", |
| | | "phoneNumber": "用户电话", |
| | | "role": "角色", |
| | | "status": "状态", |
| | | "status": "账号状态", |
| | | "createTime": "创建时间", |
| | | "remark": "备注", |
| | | "actions": "操作" |
| | |
| | | "userName": "用户名称", |
| | | "number": "编号", |
| | | "loginAccount": "登录账号", |
| | | "phoneNumber": "联系电话", |
| | | "phoneNumber": "用户电话", |
| | | "initialPassword": "初始密码", |
| | | "role": "所属角色" |
| | | }, |
| | |
| | | "userName": "请输入", |
| | | "number": "系统自动生成", |
| | | "loginAccount": "请输入", |
| | | "phoneNumber": "请输入", |
| | | "phoneNumber": "请输入用户电话", |
| | | "initialPassword": "请输入", |
| | | "role": "请选择" |
| | | }, |
| | |
| | | "userNameFormat": "用户姓名仅支持中英文、数字、空格", |
| | | "loginAccountRequired": "请输入登录账号", |
| | | "loginAccountFormat": "登录账号需为 11 位手机号或邮箱格式", |
| | | "phoneNumberRequired": "请输入联系电话", |
| | | "phoneNumberRequired": "请输入用户电话", |
| | | "phoneNumberFormat": "请输入正确的 11 位手机号", |
| | | "passwordRequired": "请输入初始密码", |
| | | "passwordLength": "初始密码长度为 8-20 位", |
| | |
| | | resizable: true, |
| | | render: row => <span>{dayjs(row.createTime).format('YYYY/MM/DD HH:mm') || '-'}</span>, |
| | | }, |
| | | { |
| | | title: t('accountManagement.table.remark'), |
| | | align: 'left', |
| | | key: 'remark', |
| | | minWidth: 170, |
| | | ellipsis: true, |
| | | resizable: true, |
| | | render: row => <span>{row.remark || '-'}</span>, |
| | | }, |
| | | // { |
| | | // title: t('accountManagement.table.remark'), |
| | | // align: 'left', |
| | | // key: 'remark', |
| | | // minWidth: 170, |
| | | // ellipsis: true, |
| | | // resizable: true, |
| | | // render: row => <span>{row.remark || '-'}</span>, |
| | | // }, |
| | | { |
| | | title: t('accountManagement.table.actions'), |
| | | align: 'left', |
| | |
| | | const showResetPasswordModal = ref(false) |
| | | const resetPasswordRow = ref<any>(null) |
| | | |
| | | function handleAdd() { |
| | | modalMode.value = 'add' |
| | | currentRow.value = null |
| | | async function openAccountModal(mode: 'add' | 'edit', row: any = null) { |
| | | await getRoleList() |
| | | modalMode.value = mode |
| | | currentRow.value = row |
| | | showModal.value = true |
| | | } |
| | | |
| | | async function handleAdd() { |
| | | await openAccountModal('add') |
| | | } |
| | | |
| | | const showOperationLogModal = ref(false) |
| | |
| | | showOperationLogModal.value = true |
| | | } |
| | | |
| | | function handleEdit(row: any) { |
| | | modalMode.value = 'edit' |
| | | currentRow.value = row |
| | | showModal.value = true |
| | | async function handleEdit(row: any) { |
| | | await openAccountModal('edit', row) |
| | | } |
| | | |
| | | function handleResetPassword(row: any) { |
| | |
| | | { |
| | | label: '登录账号', |
| | | path: 'userAccount', |
| | | render: () => <n-input v-model:value={model.value.userAccount} placeholder="请输入登录账号" />, |
| | | render: () => <n-input v-model:value={model.value.userAccount} placeholder="请输入" />, |
| | | }, |
| | | { |
| | | label: '创建时间', |
| | |
| | | /> |
| | | ), |
| | | }, |
| | | { |
| | | label: '备注', |
| | | path: 'remark', |
| | | render: () => <n-input v-model:value={model.value.remark} placeholder="请输入备注" />, |
| | | }, |
| | | // { |
| | | // label: '备注', |
| | | // path: 'remark', |
| | | // render: () => <n-input v-model:value={model.value.remark} placeholder="请输入" />, |
| | | // }, |
| | | ]) |
| | | |
| | | onMounted(() => { |
| | |
| | | |
| | | defineExpose({ |
| | | applyRoleFilter, |
| | | refreshRoleOptions: getRoleList, |
| | | }) |
| | | </script> |
| | | |
| | |
| | | type AccountPermissionTab = 'account' | 'role' |
| | | interface AccountManagementExpose { |
| | | applyRoleFilter: (roleId: string | number | null) => void |
| | | refreshRoleOptions: () => Promise<void> |
| | | } |
| | | |
| | | interface TabConfig { |
| | |
| | | if (activeTab.value === tab) |
| | | return |
| | | activeTab.value = tab |
| | | if (tab === 'account') |
| | | void accountManagementRef.value?.refreshRoleOptions() |
| | | } |
| | | |
| | | function handleOpenAccountTab(payload: { roleId: string | number }) { |
| | | activeTab.value = 'account' |
| | | void accountManagementRef.value?.refreshRoleOptions() |
| | | // 账号页组件常驻,通过 ref 直接应用角色筛选条件 |
| | | accountManagementRef.value?.applyRoleFilter(payload.roleId) |
| | | } |
| | |
| | | <NFormItem label="权限名称" path="permissionKeyword" class="permission-search-item"> |
| | | <NInput |
| | | v-model:value="formModel.permissionKeyword" |
| | | placeholder="请输入权限名称进行搜索" |
| | | placeholder="请输入" |
| | | clearable |
| | | :disabled="isReadOnlyMode" |
| | | /> |
| | |
| | | 权限预览 |
| | | </span> |
| | | <span |
| | | style={{ color: hasAccounts ? '#ccc' : '#0068FF', cursor: hasAccounts ? 'not-allowed' : 'pointer' }} |
| | | style={{ color: hasAccounts ? '#ccc' : '#EA0000', cursor: hasAccounts ? 'not-allowed' : 'pointer' }} |
| | | v-permission="20154" |
| | | onClick={() => !hasAccounts && handleDelete(row.id!)} |
| | | > |