Prechádzať zdrojové kódy

feat(pl): 基础信息库四菜单分册(三方/山峡)

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 3 mesiacov pred
rodič
commit
8ba55dd6f6

+ 65 - 0
backend/scripts/migration_20260725_pl_tripartite_menus.sql

@@ -0,0 +1,65 @@
+-- 基础信息库:全部车辆/驾押人员拆分为三方与山峡四菜单
+
+-- 三方车辆(原全部车辆信息)
+UPDATE sys_menu
+SET menu_name = '三方车辆', order_num = 2, remark = '承运商/三方车辆', update_time = NOW()
+WHERE id = 'PL_VEHICLE' AND del_flag = 0;
+
+-- 三方驾押人员(新建)
+INSERT INTO sys_menu (
+  id, menu_name, parent_id, menu_type, path, component, perms,
+  is_frame, visible, status, tenant_no, order_num, remark,
+  create_by, create_dept_id, create_time, update_by, update_time, del_flag
+) SELECT
+  'PL_PERSONNEL_CARRIER', '三方驾押人员', 'PL_GROUP_BASE', 'C',
+  'personnel-carrier', 'pl/personnel/index', 'pl:personnel-carrier:list',
+  1, '1', '1', 'shanxia2.0', 3, '非山峡驾押人员',
+  'system', '', NOW(), NULL, NOW(), 0
+FROM DUAL
+WHERE NOT EXISTS (
+  SELECT 1 FROM sys_menu WHERE id = 'PL_PERSONNEL_CARRIER' AND del_flag = 0
+);
+
+-- 山峡自有车辆
+UPDATE sys_menu
+SET order_num = 4, update_time = NOW()
+WHERE id = 'PL_SELF_VEHICLE' AND del_flag = 0;
+
+-- 山峡驾押人员(原驾押人员信息)
+UPDATE sys_menu
+SET menu_name = '山峡驾押人员', order_num = 5, update_time = NOW()
+WHERE id = 'PL_DRIVER' AND del_flag = 0;
+
+-- 运输地址库顺延
+UPDATE sys_menu
+SET order_num = 6, update_time = NOW()
+WHERE id = 'PL_TRANSPORT_ADDRESS' AND del_flag = 0;
+
+-- 拥有 PL_DRIVER 或 PL_VEHICLE 权限的角色,补全三方驾押人员菜单
+INSERT INTO sys_role_menu (
+  id, role_id, menu_id, tenant_no, order_num, remark,
+  create_by, create_dept_id, create_time, update_by, update_time, del_flag
+)
+SELECT DISTINCT
+  CONCAT('PLPCM_', SUBSTRING(MD5(CONCAT(rm.role_id, '-PL_PERSONNEL_CARRIER')), 1, 24)),
+  rm.role_id,
+  'PL_PERSONNEL_CARRIER',
+  COALESCE(rm.tenant_no, 'shanxia2.0'),
+  0,
+  'pl personnel carrier menu auto grant',
+  'system',
+  '',
+  NOW(),
+  NULL,
+  NOW(),
+  0
+FROM sys_role_menu rm
+WHERE rm.del_flag = 0
+  AND rm.menu_id IN ('PL_DRIVER', 'PL_VEHICLE')
+  AND NOT EXISTS (
+    SELECT 1
+    FROM sys_role_menu x
+    WHERE x.role_id = rm.role_id
+      AND x.menu_id = 'PL_PERSONNEL_CARRIER'
+      AND x.del_flag = 0
+  );

+ 5 - 4
backend/scripts/seed_sys_menu.sql

@@ -112,14 +112,15 @@ INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `co
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEH_RECHARGE_APPLY', 'ETC加油申请', 'PL_GROUP_VEHICLE', 'C', 'vehicle-recharge-apply', 'pl/vehicle-recharge-apply/index', 'pl:vehicle-recharge-apply:list', 1, '1', '1', 'shanxia2.0', 1, NULL, 'system', '', '2026-06-29 08:32:30', NULL, '2026-06-29 08:37:03', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_FREIGHT_APPROVAL', '运费结算审批', 'PL_GROUP_FREIGHT', 'C', 'freight-approval', 'pl/freight-approval/index', 'pl:freight-approval:list', 1, '1', '1', 'shanxia2.0', 2, '待审批与已审批结算单', 'system', '', '2026-06-28 16:41:25', NULL, '2026-06-28 16:41:25', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_PLAN_ARCHIVE', '运输计划归档', 'PL_GROUP_PLAN', 'C', 'plan-archive', 'pl/plan-archive/index', 'pl:plan-archive:list', 1, '1', '1', 'shanxia2.0', 2, NULL, 'system', '', '2026-06-25 06:14:17', NULL, '2026-06-25 06:14:17', 0);
-INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEHICLE', '全部车辆信息', 'PL_GROUP_BASE', 'C', 'vehicle', 'pl/vehicle/index', 'pl:vehicle:list', 1, '1', '1', 'shanxia2.0', 2, NULL, 'system', '', '2026-06-11 05:17:12', NULL, '2026-06-28 16:01:18', 0);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEHICLE', '三方车辆', 'PL_GROUP_BASE', 'C', 'vehicle', 'pl/vehicle/index', 'pl:vehicle:list', 1, '1', '1', 'shanxia2.0', 2, '承运商/三方车辆', 'system', '', '2026-06-11 05:17:12', NULL, '2026-06-28 16:01:18', 0);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_PERSONNEL_CARRIER', '三方驾押人员', 'PL_GROUP_BASE', 'C', 'personnel-carrier', 'pl/personnel/index', 'pl:personnel-carrier:list', 1, '1', '1', 'shanxia2.0', 3, '非山峡驾押人员', 'system', '', '2026-07-25 00:00:00', NULL, '2026-07-25 00:00:00', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEH_RECHARGE_RECORD', 'ETC加油发放登记', 'PL_GROUP_VEHICLE', 'C', 'vehicle-recharge-record', 'pl/vehicle-recharge-record/index', 'pl:vehicle-recharge-record:list', 1, '1', '1', 'shanxia2.0', 2, NULL, 'system', '', '2026-06-29 08:32:30', NULL, '2026-06-29 08:37:03', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_FREIGHT_DISBURSE_MENU', '运费财务发放', 'PL_GROUP_FREIGHT', 'C', 'freight-disburse', 'pl/freight-disburse/index', 'pl:freight-disburse:list', 1, '1', '1', 'shanxia2.0', 3, '待发放与已发放结算单', 'system', '', '2026-06-28 16:41:25', NULL, '2026-06-28 16:41:25', 0);
-INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_SELF_VEHICLE', '山峡自有车辆', 'PL_GROUP_BASE', 'C', 'self-vehicle', 'pl/self-vehicle/index', 'pl:self-vehicle:list', 1, '1', '1', 'shanxia2.0', 3, '展示全部自有类型车辆', 'system', '', '2026-06-20 08:07:00', NULL, '2026-06-28 16:01:18', 0);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_SELF_VEHICLE', '山峡自有车辆', 'PL_GROUP_BASE', 'C', 'self-vehicle', 'pl/self-vehicle/index', 'pl:self-vehicle:list', 1, '1', '1', 'shanxia2.0', 4, '展示全部自有类型车辆', 'system', '', '2026-06-20 08:07:00', NULL, '2026-06-28 16:01:18', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEH_MAINT_APPLY', '车辆维保申请', 'PL_GROUP_VEHICLE', 'C', 'vehicle-maintenance-apply', 'pl/vehicle-maintenance-apply/index', 'pl:vehicle-maintenance-apply:list', 1, '1', '1', 'shanxia2.0', 3, NULL, 'system', '', '2026-06-29 09:02:16', NULL, '2026-06-29 09:13:01', 0);
-INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_DRIVER', '驾押人员信息', 'PL_GROUP_BASE', 'C', 'personnel', 'pl/personnel/index', 'pl:driver:list', 1, '1', '1', 'shanxia2.0', 4, NULL, 'system', '', '2026-06-11 05:17:12', NULL, '2026-06-19 22:55:10', 0);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_DRIVER', '山峡驾押人员', 'PL_GROUP_BASE', 'C', 'personnel', 'pl/personnel/index', 'pl:driver:list', 1, '1', '1', 'shanxia2.0', 5, NULL, 'system', '', '2026-06-11 05:17:12', NULL, '2026-06-19 22:55:10', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEH_MAINT_PROCESS', '车辆维保处理登记', 'PL_GROUP_VEHICLE', 'C', 'vehicle-maintenance-process', 'pl/vehicle-maintenance-process/index', 'pl:vehicle-maintenance-process:list', 1, '1', '1', 'shanxia2.0', 4, NULL, 'system', '', '2026-06-29 09:02:16', NULL, '2026-06-29 09:13:01', 0);
-INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_TRANSPORT_ADDRESS', '运输地址库', 'PL_GROUP_BASE', 'C', 'transport-address', 'pl/transport-address/index', 'pl:transport-address:list', 1, '1', '1', 'shanxia2.0', 5, '运输通用地址库', 'system', '', '2026-07-01 19:54:09', NULL, '2026-07-01 19:54:09', 0);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_TRANSPORT_ADDRESS', '运输地址库', 'PL_GROUP_BASE', 'C', 'transport-address', 'pl/transport-address/index', 'pl:transport-address:list', 1, '1', '1', 'shanxia2.0', 6, '运输通用地址库', 'system', '', '2026-07-01 19:54:09', NULL, '2026-07-01 19:54:09', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEH_UREA_APPLY', '车辆尿素申请', 'PL_GROUP_VEHICLE', 'C', 'vehicle-urea-apply', 'pl/vehicle-urea-apply/index', 'pl:vehicle-urea-apply:list', 1, '0', '1', 'shanxia2.0', 5, '侧栏不展示', 'system', '', '2026-06-29 09:26:30', NULL, '2026-06-29 09:26:30', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('PL_VEH_UREA_DISBURSE', '车辆尿素发放登记', 'PL_GROUP_VEHICLE', 'C', 'vehicle-urea-disburse', 'pl/vehicle-urea-disburse/index', 'pl:vehicle-urea-disburse:list', 1, '0', '1', 'shanxia2.0', 6, '侧栏不展示', 'system', '', '2026-06-29 09:26:30', NULL, '2026-06-29 09:26:30', 0);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`) VALUES ('SYS_OPERLOG_Q', '查询', 'SYS_OPERLOG', 'F', '', '', 'system:operlog:query', 1, '1', '1', 'shanxia2.0', 1, NULL, 'system', '', '2026-06-29 10:23:01', NULL, '2026-06-29 10:23:01', 0);

+ 33 - 4
web-admin/src/router/modules/pl.ts

@@ -192,7 +192,24 @@ export const plRoutes: AppRouteRecord[] = [
             name: 'PlVehicle',
             path: 'vehicle',
             component: '/pl/vehicle/index',
-            meta: { title: '全部车辆信息', keepAlive: true, menuCode: 'pl:vehicle:list' }
+            meta: {
+              title: '三方车辆',
+              keepAlive: true,
+              menuCode: 'pl:vehicle:list',
+              vehicleTypeLock: 'carrier'
+            }
+          },
+          {
+            id: 'PL_PERSONNEL_CARRIER',
+            name: 'PlPersonnelCarrier',
+            path: 'personnel-carrier',
+            component: '/pl/personnel/index',
+            meta: {
+              title: '三方驾押人员',
+              keepAlive: true,
+              menuCode: 'pl:personnel-carrier:list',
+              affiliationMode: 'carrier'
+            }
           },
           {
             id: 'PL00000000000000000000000000003S',
@@ -206,7 +223,12 @@ export const plRoutes: AppRouteRecord[] = [
             name: 'PlPersonnel',
             path: 'personnel',
             component: '/pl/personnel/index',
-            meta: { title: '驾押人员信息', keepAlive: true, menuCode: 'pl:driver:list' }
+            meta: {
+              title: '山峡驾押人员',
+              keepAlive: true,
+              menuCode: 'pl:driver:list',
+              affiliationMode: 'self'
+            }
           },
           {
             id: 'PL00000000000000000000000000004A',
@@ -321,7 +343,7 @@ export const plRoutes: AppRouteRecord[] = [
         name: 'PlVehicleRedirect',
         path: 'vehicle',
         redirect: '/pl/base-info/vehicle',
-        meta: { title: '全部车辆信息', isHide: true }
+        meta: { title: '三方车辆', isHide: true }
       },
       {
         id: 'PL_REDIRECT_SELF_VEHICLE',
@@ -335,7 +357,14 @@ export const plRoutes: AppRouteRecord[] = [
         name: 'PlPersonnelRedirect',
         path: 'personnel',
         redirect: '/pl/base-info/personnel',
-        meta: { title: '驾押人员信息', isHide: true }
+        meta: { title: '山峡驾押人员', isHide: true }
+      },
+      {
+        id: 'PL_REDIRECT_PERSONNEL_CARRIER',
+        name: 'PlPersonnelCarrierRedirect',
+        path: 'personnel-carrier',
+        redirect: '/pl/base-info/personnel-carrier',
+        meta: { title: '三方驾押人员', isHide: true }
       },
       {
         id: 'PL_REDIRECT_TRANSPORT_ADDRESS',