diff --git a/src/api/modules/system/worker.ts b/src/api/modules/system/worker.ts new file mode 100644 index 0000000..69d883f --- /dev/null +++ b/src/api/modules/system/worker.ts @@ -0,0 +1,45 @@ +import { request } from '@/api'; +import type { + WorkerListResponse, + WorkerFormParams, + EditWorkerParams, + WorkerRoleOption, + WorkerRoleOptionResponse, +} from '@/api/types/system/worker.d'; + +/** + * 获取员工列表 + * @param params 查询参数(用户名) + * @returns Promise 员工列表数据 + */ +export async function getWorkerListApi(params: { username?: string } = {}): Promise { + return request.get('/worker/getWorkerList', params); +} + +/** + * 获取员工角色下拉选项 + * @returns Promise 角色选项列表 + */ +export async function getWorkerRoleIdOptionApi(): Promise { + return request.get('/worker/getWorkerRoleIdOptions', undefined, { showMessage: false }); +} + +/** + * 新增员工 + * @param params 员工表单参数(username、email、role_id) + * @returns Promise + */ +export async function addWorkerApi(params: WorkerFormParams): Promise { + return request.post('/worker/addWorker', params); +} + +/** + * 编辑员工 + * @param params 编辑员工参数(user_id、username、email、status) + * @returns Promise + */ +export async function editWorkerApi(params: EditWorkerParams): Promise { + return request.post('/worker/editWorker', params, { showMessage: false }); +} + +export type { WorkerRoleOption }; \ No newline at end of file diff --git a/src/api/types/system/worker.d.ts b/src/api/types/system/worker.d.ts new file mode 100644 index 0000000..1404a55 --- /dev/null +++ b/src/api/types/system/worker.d.ts @@ -0,0 +1,49 @@ +import type { ApiResponse } from '../index'; + +/** 员工角色信息 */ +export interface WorkerRoleInfo { + id: number; + title: string; +} + +/** 员工列表单条数据 */ +export interface WorkerItem { + id: number; + username: string; + email: string; + role_id: number; + status: number; // 1:正常 2:封禁 + created_at: string; + role: WorkerRoleInfo; +} + +/** 员工列表响应 */ +export type WorkerListResponse = WorkerItem[]; + +/** 员工角色下拉选项 */ +export interface WorkerRoleOption { + id: number; + title: string; +} + +/** 员工角色下拉选项响应 */ +export type WorkerRoleOptionResponse = WorkerRoleOption[]; + +/** 新增员工表单参数 */ +export interface WorkerFormParams { + username: string; + email: string; + role_id: number | null; +} + +/** 编辑员工表单参数 */ +export interface EditWorkerParams { + user_id: number; + username: string; + email: string; + status: number; // 1:正常 2:封禁 +} + +/** 接口返回结构(兼容 data 包裹场景) */ +export interface WorkerListApiResponse extends ApiResponse {} +export interface WorkerRoleOptionApiResponse extends ApiResponse {} \ No newline at end of file diff --git a/src/views/system/worder/index.vue b/src/views/system/worder/index.vue new file mode 100644 index 0000000..dc0068f --- /dev/null +++ b/src/views/system/worder/index.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/src/views/system/worder/options.ts b/src/views/system/worder/options.ts new file mode 100644 index 0000000..ec7a1a9 --- /dev/null +++ b/src/views/system/worder/options.ts @@ -0,0 +1,73 @@ +/** + * @description: 搜索配置 + */ +export const search = [ + { + prop: 'username', + label: '用户名', + type: 'input' as const, + placeholder: '请输入用户名', + width: '220px', + }, +] + +/** + * @description: 表格列配置 + */ +export const tableColumns = [ + { prop: 'username', label: '用户名' }, + { prop: 'email', label: '邮箱' }, + { prop: 'roleTitle', label: '角色' }, + { slotName: 'status', label: '状态' }, + { prop: 'created_at', label: '创建时间' }, + { slotName: 'action', label: '操作' }, +] + +/** + * @description: 新增员工表单配置 + * 入参:email(校验格式)、role_id(下拉) + */ +export const addFormItem = [ + { + prop: 'email', + label: '邮箱', + type: 'input' as const, + placeholder: '请输入邮箱', + required: true, + }, + { + prop: 'role_id', + label: '角色', + type: 'select' as const, + placeholder: '请选择角色', + required: true, + }, +] + +/** + * @description: 编辑员工表单配置 + * 入参:username、email、status + */ +export const editFormItem = [ + { + prop: 'username', + label: '用户名', + type: 'input' as const, + placeholder: '请输入用户名', + required: true, + }, + { + prop: 'email', + label: '邮箱', + type: 'input' as const, + placeholder: '请输入邮箱', + required: true, + }, + { + prop: 'status', + label: '状态', + type: 'radio' as const, + placeholder: '请选择状态', + required: true, + }, +] diff --git a/src/views/system/worder/rules.ts b/src/views/system/worder/rules.ts new file mode 100644 index 0000000..a83fee6 --- /dev/null +++ b/src/views/system/worder/rules.ts @@ -0,0 +1,54 @@ +import type { FormRules } from 'element-plus' + +/** 邮箱格式校验 */ +const emailValidator = (rule: any, value: any, callback: any) => { + if (!value) { + callback() + return + } + const emailReg = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/ + if (!emailReg.test(value)) { + callback(new Error('邮箱格式不正确')) + return + } + callback() +} + +/** + * @description: 新增员工表单校验规则 + * 入参:email、role_id + */ +export const addRules = (): FormRules => { + return { + email: [ + { required: true, message: '请输入邮箱', trigger: 'blur' }, + { validator: emailValidator, trigger: 'blur' }, + ], + role_id: [ + { required: true, message: '请选择角色', trigger: 'change' }, + ], + } +} + +/** + * @description: 编辑员工表单校验规则 + * 入参:username、email、status + */ +export const editRules = (): FormRules => { + return { + username: [ + { required: true, message: '请输入用户名', trigger: 'blur' }, + { min: 2, max: 50, message: '用户名长度在 2 到 50 个字符', trigger: 'blur' }, + ], + email: [ + { required: true, message: '请输入邮箱', trigger: 'blur' }, + { validator: emailValidator, trigger: 'blur' }, + ], + status: [ + { required: true, message: '请选择状态', trigger: 'change' }, + ], + } +} + +/** 兼容旧引用 */ +export const rules = (): FormRules => editRules()