| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /**
- * 删除租户库「多模型路由配置」菜单(sys_menu + company_menu)
- * Usage: node scripts/drop-lobster-model-route-menu.js [dbName|all]
- */
- const mysql = require('mysql2/promise')
- const DB_CFG = {
- host: 'cq-cdb-8fjmemkb.sql.tencentcdb.com',
- port: 27220,
- user: 'root',
- password: 'Ylrz_1q2w3e4r5t6y',
- multipleStatements: true,
- charset: 'utf8mb4'
- }
- const MENU_IDS = [29946, 3005]
- async function dropMenus(conn) {
- const [sysBefore] = await conn.query(
- `SELECT menu_id, menu_name, path, component FROM sys_menu
- WHERE menu_id IN (?) OR component = 'lobster/model-route/index'
- OR path IN ('model-route', 'lobster-model-route')`,
- [MENU_IDS]
- )
- const [cmBefore] = await conn.query(
- `SELECT menu_id, menu_name, path, component FROM company_menu
- WHERE menu_id IN (?) OR component = 'lobster/model-route/index'
- OR path IN ('model-route', 'lobster-model-route')`,
- [MENU_IDS]
- )
- console.log('sys_menu before:', sysBefore.length, sysBefore.map(r => `${r.menu_id}:${r.menu_name}`).join(', ') || '-')
- console.log('company_menu before:', cmBefore.length, cmBefore.map(r => `${r.menu_id}:${r.menu_name}`).join(', ') || '-')
- await conn.query('DELETE FROM sys_role_menu WHERE menu_id IN (?)', [MENU_IDS])
- await conn.query('DELETE FROM company_role_menu WHERE menu_id IN (?)', [MENU_IDS])
- await conn.query(
- `DELETE FROM company_menu
- WHERE menu_id IN (?)
- OR path IN ('model-route', 'lobster-model-route')
- OR component = 'lobster/model-route/index'`,
- [MENU_IDS]
- )
- await conn.query(
- `DELETE FROM sys_menu
- WHERE menu_id IN (?)
- OR path IN ('model-route', 'lobster-model-route')
- OR component = 'lobster/model-route/index'`,
- [MENU_IDS]
- )
- const [sysAfter] = await conn.query(
- `SELECT COUNT(*) AS c FROM sys_menu WHERE component = 'lobster/model-route/index'`
- )
- const [cmAfter] = await conn.query(
- `SELECT COUNT(*) AS c FROM company_menu WHERE component = 'lobster/model-route/index'`
- )
- console.log('sys_menu model-route left:', sysAfter[0].c)
- console.log('company_menu model-route left:', cmAfter[0].c)
- }
- async function listTenantDbs(conn) {
- const [rows] = await conn.query(
- "SELECT SCHEMA_NAME AS dbName FROM information_schema.SCHEMATA WHERE SCHEMA_NAME LIKE 'fs\\_tenant\\_%' ESCAPE '\\\\' ORDER BY SCHEMA_NAME"
- )
- return rows.map(r => r.dbName)
- }
- async function main() {
- const target = process.argv[2] || 'fs_tenant_cs1'
- const root = await mysql.createConnection({ ...DB_CFG, database: 'mysql' })
- const dbs = target === 'all' ? await listTenantDbs(root) : [target]
- await root.end()
- for (const db of dbs) {
- console.log('\n===', db, '===')
- const conn = await mysql.createConnection({ ...DB_CFG, database: db })
- try {
- await dropMenus(conn)
- } catch (e) {
- console.error('failed:', db, e.message)
- }
- await conn.end()
- }
- }
- main().catch(e => { console.error(e); process.exit(1) })
|