| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- -- Run this script in database `eduepos-plat`.
- -- It adds `/delivery/deliveryerManage1` under the same module as the existing
- -- `/delivery/deliveryerManage` menu, then copies menu/button permissions from
- -- the existing rider management menu.
- -- 1. Create menu by copying the existing rider management menu.
- INSERT INTO sys_menu (
- MODEL_CODE,
- MENU_NAME,
- URL,
- LEVEL,
- ORDER_KEY,
- FATHER_ID,
- STATUS,
- CREATE_DATE
- )
- SELECT
- old_menu.MODEL_CODE,
- '新配送员管理',
- '/delivery/deliveryerManage1',
- old_menu.LEVEL,
- old_menu.ORDER_KEY + 1,
- old_menu.FATHER_ID,
- old_menu.STATUS,
- NOW()
- FROM sys_menu old_menu
- WHERE old_menu.URL = '/delivery/deliveryerManage'
- AND NOT EXISTS (
- SELECT 1
- FROM (
- SELECT MENU_ID
- FROM sys_menu
- WHERE URL = '/delivery/deliveryerManage1'
- ) exists_menu
- )
- LIMIT 1;
- -- 2. Copy selectable button permissions from the existing rider management menu.
- INSERT INTO sys_menu_button (
- MENU_ID,
- BUTTON_CODE
- )
- SELECT
- new_menu.MENU_ID,
- old_button.BUTTON_CODE
- FROM sys_menu old_menu
- JOIN sys_menu new_menu ON new_menu.URL = '/delivery/deliveryerManage1'
- JOIN sys_menu_button old_button ON old_button.MENU_ID = old_menu.MENU_ID
- WHERE old_menu.URL = '/delivery/deliveryerManage'
- AND NOT EXISTS (
- SELECT 1
- FROM sys_menu_button exists_button
- WHERE exists_button.MENU_ID = new_menu.MENU_ID
- AND exists_button.BUTTON_CODE = old_button.BUTTON_CODE
- );
- -- 3. Fallback: if the existing rider menu has no button rows, create common buttons.
- INSERT INTO sys_menu_button (
- MENU_ID,
- BUTTON_CODE
- )
- SELECT
- new_menu.MENU_ID,
- buttons.BUTTON_CODE
- FROM sys_menu new_menu
- JOIN (
- SELECT 'add' AS BUTTON_CODE
- UNION ALL SELECT 'edit'
- UNION ALL SELECT 'delete'
- ) buttons
- WHERE new_menu.URL = '/delivery/deliveryerManage1'
- AND NOT EXISTS (
- SELECT 1
- FROM sys_menu_button exists_button
- WHERE exists_button.MENU_ID = new_menu.MENU_ID
- AND exists_button.BUTTON_CODE = buttons.BUTTON_CODE
- );
- -- 4. Grant the new menu to every role that already has the old rider management menu.
- INSERT INTO sys_role (
- CHARACTOR_ID,
- MENU_ID
- )
- SELECT
- old_role.CHARACTOR_ID,
- new_menu.MENU_ID
- FROM sys_role old_role
- JOIN sys_menu old_menu ON old_menu.MENU_ID = old_role.MENU_ID
- JOIN sys_menu new_menu ON new_menu.URL = '/delivery/deliveryerManage1'
- WHERE old_menu.URL = '/delivery/deliveryerManage'
- AND NOT EXISTS (
- SELECT 1
- FROM sys_role exists_role
- WHERE exists_role.CHARACTOR_ID = old_role.CHARACTOR_ID
- AND exists_role.MENU_ID = new_menu.MENU_ID
- );
- -- 5. Grant matching button permissions to roles copied in step 4.
- INSERT INTO sys_role_menu_button (
- MENU_ID,
- ROLE_ID,
- BUTTON_CODE
- )
- SELECT
- new_menu.MENU_ID,
- old_button_role.ROLE_ID,
- old_button_role.BUTTON_CODE
- FROM sys_role_menu_button old_button_role
- JOIN sys_menu old_menu ON old_menu.MENU_ID = old_button_role.MENU_ID
- JOIN sys_menu new_menu ON new_menu.URL = '/delivery/deliveryerManage1'
- JOIN sys_menu_button new_button ON new_button.MENU_ID = new_menu.MENU_ID
- AND new_button.BUTTON_CODE = old_button_role.BUTTON_CODE
- WHERE old_menu.URL = '/delivery/deliveryerManage'
- AND NOT EXISTS (
- SELECT 1
- FROM sys_role_menu_button exists_button_role
- WHERE exists_button_role.MENU_ID = new_menu.MENU_ID
- AND exists_button_role.ROLE_ID = old_button_role.ROLE_ID
- AND exists_button_role.BUTTON_CODE = old_button_role.BUTTON_CODE
- );
- -- 6. Verify.
- SELECT
- m.MENU_ID,
- m.MENU_NAME,
- m.URL,
- m.MODEL_CODE,
- m.ORDER_KEY,
- b.BUTTON_CODE,
- r.CHARACTOR_ID
- FROM sys_menu m
- LEFT JOIN sys_menu_button b ON b.MENU_ID = m.MENU_ID
- LEFT JOIN sys_role r ON r.MENU_ID = m.MENU_ID
- WHERE m.URL IN ('/delivery/deliveryerManage', '/delivery/deliveryerManage1')
- ORDER BY m.URL, b.BUTTON_CODE, r.CHARACTOR_ID;
|