From 5e51b460f4f8aa6781c4b9ddf24ad264b8e8f53a Mon Sep 17 00:00:00 2001 From: zhx Date: Thu, 21 May 2026 11:12:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B7=A5=E8=B5=84=E5=8F=91?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/src/api/legacy/operate.ts | 16 + apps/src/router/routes/modules/app-user.ts | 7 + .../views/operate/manual-salary-payment.vue | 379 ++++++++++++++++++ .../sql/sync_manual_salary_payment_menu.sql | 76 ++++ 4 files changed, 478 insertions(+) create mode 100644 apps/src/views/operate/manual-salary-payment.vue create mode 100644 scripts/sql/sync_manual_salary_payment_menu.sql diff --git a/apps/src/api/legacy/operate.ts b/apps/src/api/legacy/operate.ts index f6889ce..59fef6b 100644 --- a/apps/src/api/legacy/operate.ts +++ b/apps/src/api/legacy/operate.ts @@ -138,6 +138,22 @@ export async function pageSalary(params: Record) { ); } +export async function pageManualSalary(params: Record) { + return requestClient.get>>( + '/team/salary/manual/page', + { + params, + }, + ); +} + +export async function confirmManualSalary(data: Record) { + return requestClient.post>>( + '/team/salary/manual/pay', + data, + ); +} + export async function pageCpApply(params: Record) { return requestClient.get>>( '/user-cp-apply/page', diff --git a/apps/src/router/routes/modules/app-user.ts b/apps/src/router/routes/modules/app-user.ts index 268a147..5a06d14 100644 --- a/apps/src/router/routes/modules/app-user.ts +++ b/apps/src/router/routes/modules/app-user.ts @@ -25,6 +25,13 @@ const routes: RouteRecordRaw[] = [ component: () => import('#/views/operate/auto-salary-pay-record.vue'), meta: { title: '自动发放工资凭据' }, }, + { + name: 'ManualSalaryPayment', + path: 'manual-salary-payment', + alias: '/manual-salary-payment', + component: () => import('#/views/operate/manual-salary-payment.vue'), + meta: { title: '工资发放' }, + }, { name: 'UserBankWithdrawMoneyApply', path: 'withdraw-money-apply-page', diff --git a/apps/src/views/operate/manual-salary-payment.vue b/apps/src/views/operate/manual-salary-payment.vue new file mode 100644 index 0000000..281375f --- /dev/null +++ b/apps/src/views/operate/manual-salary-payment.vue @@ -0,0 +1,379 @@ + + + + + diff --git a/scripts/sql/sync_manual_salary_payment_menu.sql b/scripts/sql/sync_manual_salary_payment_menu.sql new file mode 100644 index 0000000..09dc833 --- /dev/null +++ b/scripts/sql/sync_manual_salary_payment_menu.sql @@ -0,0 +1,76 @@ +SET NAMES utf8mb4; + +SET @app_user_manager_id := ( + SELECT id + FROM sys_menu + WHERE alias IN ('AppUserManager', 'OperateManager') + ORDER BY FIELD(alias, 'AppUserManager', 'OperateManager') + LIMIT 1 +); + +INSERT INTO sys_menu ( + id, + parent_id, + menu_name, + path, + menu_type, + icon, + create_user, + update_user, + sort, + status, + router, + alias +) +SELECT + menu_id.next_id, + @app_user_manager_id, + '工资发放', + 'operate/manual-salary-payment', + 2, + 'form', + '0', + '0', + 49, + 0, + '/manual-salary-payment', + 'ManualSalaryPayment' +FROM ( + SELECT COALESCE(MAX(id), 1700000000) + 1 AS next_id + FROM sys_menu +) AS menu_id +WHERE @app_user_manager_id IS NOT NULL + AND NOT EXISTS ( + SELECT 1 FROM sys_menu WHERE alias = 'ManualSalaryPayment' + ); + +UPDATE sys_menu +SET + parent_id = @app_user_manager_id, + menu_name = '工资发放', + path = 'operate/manual-salary-payment', + menu_type = 2, + icon = 'form', + update_user = '0', + sort = 49, + status = 0, + router = '/manual-salary-payment' +WHERE alias = 'ManualSalaryPayment' + AND @app_user_manager_id IS NOT NULL; + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT DISTINCT + role_menu.role_id, + target_menu.id +FROM sys_role_menu AS role_menu +JOIN sys_menu AS source_menu + ON source_menu.id = role_menu.menu_id + AND source_menu.alias IN ('AutoSalaryPayRecord', 'AppUserManager', 'OperateManager') +JOIN sys_menu AS target_menu + ON target_menu.alias = 'ManualSalaryPayment' +WHERE NOT EXISTS ( + SELECT 1 + FROM sys_role_menu AS existing_role_menu + WHERE existing_role_menu.role_id = role_menu.role_id + AND existing_role_menu.menu_id = target_menu.id +);