Forráskód Böngészése

实体管理增删改查、导入,事务封装,增加一些方法

R 1 éve
szülő
commit
a7c0c5d825

+ 26 - 0
.gitignore

@@ -0,0 +1,26 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+stats.html
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+!.vscode/settings.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 34 - 32
app.js

@@ -1,36 +1,38 @@
-const express = require('express');
-const bodyparser = require('body-parser'); //body中间件
-const cors = require('cors'); //解决跨域的中间件
-const utils = require("./utils/index.js");
-const {errLog}= require("./utils/err");
-const server = express();
-server.listen(3000);
-server.use(cors({origin: "*",}));
-server.use(express.static('./public')); //用户的静态资源
-server.use(bodyparser.json());
+const express = require('express')
+const bodyparser = require('body-parser') //body中间件
+const cors = require('cors') //解决跨域的中间件
+const utils = require('./utils/index.js')
+const { errLog } = require('./utils/err')
+const server = express()
+server.listen(3000)
+server.use(cors({ origin: '*' }))
+server.use(express.static('./public')) //用户的静态资源
+server.use(bodyparser.json())
 // server.use(bodyparser.urlencoded({//body中间件
 // 	extended:false
 // }));
-server.use(async function (req, res, next)  {
-	if(req.headers.token){
-		let user=await utils.getUserInfo({req,res});
-		if(user.status===0) return res.send(utils.returnData({code: 203, msg: "你账号已被禁用,请联系管理员!!",req}));
-	}
-	next();
+server.use(async function (req, res, next) {
+  if (req.headers.token) {
+    let user = await utils.getUserInfo({ req, res })
+    if (user.status === 0) return res.send(utils.returnData({ code: 203, msg: '你账号已被禁用,请联系管理员!!', req }))
+  }
+  next()
 })
-process.on('unhandledRejection', (err, test) => {
-	errLog({err,code:500,msg:"后端系统错误!",funName:"fatal"});
-	}).on('uncaughtException', err => {
-	errLog({err,code:500,msg:"后端系统错误!!",funName:"fatal"});
-	});
-const adminRouter = require('./router/system/admin.js'); //管理菜单等路由
-const fileRouter = require('./router/system/file.js'); //文件等路由
-const testsRouter=require("./router/tests.js");//测试信息路由
-const componentsRouter=require("./router/components.js");//测试信息路由
-const annotationRouter=require("./router/annotation/bigEntity.js");//测试信息路由
-server.use('/admin', adminRouter);
-server.use('/file', fileRouter);
-server.use("/tests",testsRouter);
-server.use("/components",componentsRouter);
-server.use("/annotation",annotationRouter);
-console.log('后端接口启动成功');
+process
+  .on('unhandledRejection', (err, test) => {
+    errLog({ err, code: 500, msg: '后端系统错误!', funName: 'fatal' })
+  })
+  .on('uncaughtException', (err) => {
+    errLog({ err, code: 500, msg: '后端系统错误!!', funName: 'fatal' })
+  })
+const adminRouter = require('./router/system/admin.js') //管理菜单等路由
+const fileRouter = require('./router/system/file.js') //文件等路由
+const testsRouter = require('./router/tests.js') //测试信息路由
+const componentsRouter = require('./router/components.js') //测试信息路由
+const dataMarkRouter = require('./router/dataMark/entity.js') //测试信息路由
+server.use('/admin', adminRouter)
+server.use('/file', fileRouter)
+server.use('/tests', testsRouter)
+server.use('/components', componentsRouter)
+server.use('/dataMark', dataMarkRouter)
+console.log('后端接口启动成功')

+ 0 - 0
logs/error.2024-02-21.log


+ 0 - 68
logs/error.2024-03-28.log

@@ -1,68 +0,0 @@
-{"date":"2024-03-28 15:32:08","type":"ERROR","data":"{
-  err: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe,is_show FROM entity_big WHERE 1=1 ORDER BY id DESC LIMIT 0,10' at line 1
-      at Query.Sequence._packetToError (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
-      at Query.ErrorPacket (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\sequences\Query.js:79:18)
-      at Protocol._parsePacket (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Protocol.js:291:23)
-      at Parser._parsePacket (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Parser.js:433:10)
-      at Parser.write (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Parser.js:43:10)
-      at Protocol.write (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Protocol.js:38:16)
-      at Socket.<anonymous> (F:\workspace\annotations\APP\node_modules\mysql\lib\Connection.js:88:28)
-      at Socket.<anonymous> (F:\workspace\annotations\APP\node_modules\mysql\lib\Connection.js:526:10)
-      at Socket.emit (node:events:513:28)
-      at addChunk (node:internal/streams/readable:315:12)
-      --------------------
-      at Pool.query (F:\workspace\annotations\APP\node_modules\mysql\lib\Pool.js:199:23)
-      at F:\workspace\annotations\APP\utils\pools.js:13:14
-      at new Promise (<anonymous>)
-      at pools (F:\workspace\annotations\APP\utils\pools.js:12:12)
-      at F:\workspace\annotations\APP\router\annotation\bigEntity.js:28:26
-      at processTicksAndRejections (node:internal/process/task_queues:96:5) {
-    code: 'ER_PARSE_ERROR',
-    errno: 1064,
-    sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe,is_show FROM entity_big WHERE 1=1 ORDER BY id DESC LIMIT 0,10' at line 1",
-    sqlState: '42000',
-    index: 0,
-    sql: 'SELECT name,describe,is_show FROM entity_big WHERE 1=1 ORDER BY id DESC LIMIT 0,10'
-  },
-  code: -1,
-  msg: '服务器异常!',
-  portName: '/annotation/getBigEntityList',
-  body: { page: 1, size: 10 },
-  query: {},
-  method: 'POST'
-}"} 
-
-{"date":"2024-03-28 15:32:12","type":"ERROR","data":"{
-  err: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe,is_show FROM entity_big WHERE 1=1 ORDER BY id DESC LIMIT 0,10' at line 1
-      at Query.Sequence._packetToError (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
-      at Query.ErrorPacket (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\sequences\Query.js:79:18)
-      at Protocol._parsePacket (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Protocol.js:291:23)
-      at Parser._parsePacket (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Parser.js:433:10)
-      at Parser.write (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Parser.js:43:10)
-      at Protocol.write (F:\workspace\annotations\APP\node_modules\mysql\lib\protocol\Protocol.js:38:16)
-      at Socket.<anonymous> (F:\workspace\annotations\APP\node_modules\mysql\lib\Connection.js:88:28)
-      at Socket.<anonymous> (F:\workspace\annotations\APP\node_modules\mysql\lib\Connection.js:526:10)
-      at Socket.emit (node:events:513:28)
-      at addChunk (node:internal/streams/readable:315:12)
-      --------------------
-      at Pool.query (F:\workspace\annotations\APP\node_modules\mysql\lib\Pool.js:199:23)
-      at F:\workspace\annotations\APP\utils\pools.js:13:14
-      at new Promise (<anonymous>)
-      at pools (F:\workspace\annotations\APP\utils\pools.js:12:12)
-      at F:\workspace\annotations\APP\router\annotation\bigEntity.js:28:26
-      at processTicksAndRejections (node:internal/process/task_queues:96:5) {
-    code: 'ER_PARSE_ERROR',
-    errno: 1064,
-    sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe,is_show FROM entity_big WHERE 1=1 ORDER BY id DESC LIMIT 0,10' at line 1",
-    sqlState: '42000',
-    index: 0,
-    sql: 'SELECT name,describe,is_show FROM entity_big WHERE 1=1 ORDER BY id DESC LIMIT 0,10'
-  },
-  code: -1,
-  msg: '服务器异常!',
-  portName: '/annotation/getBigEntityList',
-  body: { page: 1, size: 10 },
-  query: {},
-  method: 'POST'
-}"} 
-

+ 0 - 10
logs/error.2024-03-29.log

@@ -1,10 +0,0 @@
-{"date":"2024-03-29 15:05:10","type":"ERROR","data":"{
-  err: undefined,
-  code: 203,
-  msg: '登陆失效,请重新登陆!',
-  portName: '/admin/getUserInfo',
-  body: {},
-  query: {},
-  method: 'POST'
-}"} 
-

+ 0 - 40
logs/fatal.2024-02-21.log

@@ -1,40 +0,0 @@
-{"date":"2024-02-21 17:30:14","type":"FATAL","data":"{
-  err: false,
-  code: 500,
-  msg: '后端系统错误!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-02-21 17:51:55","type":"FATAL","data":"{
-  err: false,
-  code: 500,
-  msg: '后端系统错误!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-02-21 18:17:25","type":"FATAL","data":"{
-  err: ReferenceError: user is not defined
-      at F:\workspace\annotations\APP\router\annotation\bigEntity.js:12:20
-      at Layer.handle [as handle_request] (F:\workspace\annotations\APP\node_modules\express\lib\router\layer.js:95:5)
-      at next (F:\workspace\annotations\APP\node_modules\express\lib\router\route.js:144:13)
-      at Route.dispatch (F:\workspace\annotations\APP\node_modules\express\lib\router\route.js:114:3)
-      at Layer.handle [as handle_request] (F:\workspace\annotations\APP\node_modules\express\lib\router\layer.js:95:5)
-      at F:\workspace\annotations\APP\node_modules\express\lib\router\index.js:284:15
-      at Function.process_params (F:\workspace\annotations\APP\node_modules\express\lib\router\index.js:346:12)
-      at next (F:\workspace\annotations\APP\node_modules\express\lib\router\index.js:280:10)
-      at Function.handle (F:\workspace\annotations\APP\node_modules\express\lib\router\index.js:175:3)
-      at router (F:\workspace\annotations\APP\node_modules\express\lib\router\index.js:47:12),
-  code: 500,
-  msg: '后端系统错误!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-

+ 0 - 78
logs/fatal.2024-03-28.log

@@ -1,78 +0,0 @@
-{"date":"2024-03-28 14:23:30","type":"FATAL","data":"{
-  err: Error: listen EADDRINUSE: address already in use :::3000
-      at Server.setupListenHandle [as _listen2] (node:net:1872:16)
-      at listenInCluster (node:net:1920:12)
-      at Server.listen (node:net:2008:7)
-      at Function.listen (F:\workspace\annotations\APP\node_modules\express\lib\application.js:635:24)
-      at Object.<anonymous> (F:\workspace\annotations\APP\app.js:7:8)
-      at Module._compile (node:internal/modules/cjs/loader:1233:14)
-      at Module._extensions..js (node:internal/modules/cjs/loader:1287:10)
-      at Module.load (node:internal/modules/cjs/loader:1091:32)
-      at Module._load (node:internal/modules/cjs/loader:938:12)
-      at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12) {
-    code: 'EADDRINUSE',
-    errno: -4091,
-    syscall: 'listen',
-    address: '::',
-    port: 3000
-  },
-  code: 500,
-  msg: '后端系统错误!!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-03-28 14:34:22","type":"FATAL","data":"{
-  err: Error: listen EADDRINUSE: address already in use :::3000
-      at Server.setupListenHandle [as _listen2] (node:net:1463:16)
-      at listenInCluster (node:net:1511:12)
-      at Server.listen (node:net:1599:7)
-      at Function.listen (F:\workspace\annotations\APP\node_modules\express\lib\application.js:635:24)
-      at Object.<anonymous> (F:\workspace\annotations\APP\app.js:7:8)
-      at Module._compile (node:internal/modules/cjs/loader:1196:14)
-      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1250:10)
-      at Module.load (node:internal/modules/cjs/loader:1074:32)
-      at Function.Module._load (node:internal/modules/cjs/loader:909:12)
-      at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) {
-    code: 'EADDRINUSE',
-    errno: -4091,
-    syscall: 'listen',
-    address: '::',
-    port: 3000
-  },
-  code: 500,
-  msg: '后端系统错误!!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-03-28 14:42:12","type":"FATAL","data":"{
-  err: Error: listen EADDRINUSE: address already in use :::3000
-      at Server.setupListenHandle [as _listen2] (node:net:1463:16)
-      at listenInCluster (node:net:1511:12)
-      at Server.listen (node:net:1599:7)
-      at Function.listen (F:\workspace\annotations\APP\node_modules\express\lib\application.js:635:24)
-      at Object.<anonymous> (F:\workspace\annotations\APP\app.js:7:8)
-      at Module._compile (node:internal/modules/cjs/loader:1196:14)
-      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1250:10)
-      at Module.load (node:internal/modules/cjs/loader:1074:32)
-      at Function.Module._load (node:internal/modules/cjs/loader:909:12)
-      at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) {
-    code: 'EADDRINUSE',
-    errno: -4091,
-    syscall: 'listen',
-    address: '::',
-    port: 3000
-  },
-  code: 500,
-  msg: '后端系统错误!!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-

+ 0 - 72
logs/fatal.2024-03-29.log

@@ -1,72 +0,0 @@
-{"date":"2024-03-29 15:11:18","type":"FATAL","data":"{
-  err: ReferenceError: Cannot access 'name' before initialization
-      at F:\workspace\annotations\APP\router\system\admin.js:93:49
-      at Array.map (<anonymous>)
-      at filterAsyncRoutes (F:\workspace\annotations\APP\router\system\admin.js:82:13)
-      at F:\workspace\annotations\APP\router\system\admin.js:102:23
-      at Array.map (<anonymous>)
-      at filterAsyncRoutes (F:\workspace\annotations\APP\router\system\admin.js:82:13)
-      at F:\workspace\annotations\APP\router\system\admin.js:124:22
-      at processTicksAndRejections (node:internal/process/task_queues:96:5),
-  code: 500,
-  msg: '后端系统错误!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-03-29 15:14:51","type":"FATAL","data":"{
-  err: F:\workspace\annotations\APP\router\system\admin.js:103
-              children: {...sss, objs.name + 1}
-                                     ^
-  
-  SyntaxError: Unexpected token '.'
-      at Object.compileFunction (node:vm:360:18)
-      at wrapSafe (node:internal/modules/cjs/loader:1124:15)
-      at Module._compile (node:internal/modules/cjs/loader:1160:27)
-      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1250:10)
-      at Module.load (node:internal/modules/cjs/loader:1074:32)
-      at Function.Module._load (node:internal/modules/cjs/loader:909:12)
-      at Module.require (node:internal/modules/cjs/loader:1098:19)
-      at require (node:internal/modules/cjs/helpers:108:18)
-      at Object.<anonymous> (F:\workspace\annotations\APP\app.js:26:21)
-      at Module._compile (node:internal/modules/cjs/loader:1196:14),
-  code: 500,
-  msg: '后端系统错误!!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-03-29 15:14:58","type":"FATAL","data":"{
-  err: TypeError: Found non-callable @@iterator
-      at F:\workspace\annotations\APP\router\system\admin.js:111:23
-      at Array.map (<anonymous>)
-      at filterAsyncRoutes (F:\workspace\annotations\APP\router\system\admin.js:82:13)
-      at F:\workspace\annotations\APP\router\system\admin.js:125:22
-      at processTicksAndRejections (node:internal/process/task_queues:96:5),
-  code: 500,
-  msg: '后端系统错误!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-
-{"date":"2024-03-29 15:21:23","type":"FATAL","data":"{
-  err: ReferenceError: Cannot access 'objs' before initialization
-      at F:\workspace\annotations\APP\router\system\admin.js:85:15
-      at Array.map (<anonymous>)
-      at filterAsyncRoutes (F:\workspace\annotations\APP\router\system\admin.js:82:13)
-      at F:\workspace\annotations\APP\router\system\admin.js:131:22
-      at processTicksAndRejections (node:internal/process/task_queues:96:5),
-  code: 500,
-  msg: '后端系统错误!',
-  portName: undefined,
-  body: undefined,
-  query: undefined,
-  method: undefined
-}"} 
-

+ 11 - 11
pool.js

@@ -1,11 +1,11 @@
-const mysql=require("mysql");
-const pool=mysql.createPool({
-	host:"127.0.0.1",
-	port:3306,
-	user:"root",
-	password:"123456zxc",
-	database:"annotations",
-	connectionLimit:15,
-	dateStrings:true
-});
-module.exports=pool;
+const mysql = require('mysql')
+const pool = mysql.createPool({
+  host: '127.0.0.1',
+  port: 3306,
+  user: 'root',
+  password: '123456zxc',
+  database: 'data_mark',
+  connectionLimit: 15,
+  dateStrings: true
+})
+module.exports = pool

+ 0 - 36
router/annotation/bigEntity.js

@@ -1,36 +0,0 @@
-const express = require('express')
-const router = express.Router()
-const utils = require('../../utils/index.js')
-const pools = require('../../utils/pools.js')
-
-// 增加实体大类
-router.post('/addBigEntity', async (req, res) => {
-  let sql = 'INSERT INTO entity_big(`name`,`introduce`,is_show) VALUES (?,?,?)',
-    obj = req.body
-  await pools({
-    sql,
-    val: [obj.name, obj.introduce, obj.is_show],
-    run: false,
-    res,
-    req
-  })
-})
-//查询大类
-router.post('/getBigEntityList', async (req, res) => {
-  let user = await utils.getUserInfo({ req, res }),
-    obj = req.body
-  let sql = `SELECT id AS Id,name,introduce,is_show,parent_id AS parentId,has_children AS hasChildren FROM entity_big WHERE 1=1` // WHERE 1=1是一个始终为真的条件,后续动态添加查询条件的起点
-  sql = utils.setLike(sql, 'name', obj.name) // 添加一个基于name字段的模糊匹配条件,匹配的值来自obj.name
-  sql = utils.setMoreId(sql, user)
-  let { total } = await utils.getSum({ sql, name: 'entity_big', res, req }) // 执行SQL查询并获取结果中的总数
-  sql += ` ORDER BY id DESC` // 在SQL查询语句的末尾添加了一个ORDER BY子句,用于根据id字段降序排序结果
-  sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
-  let { result } = await pools({ sql, res, req })
-  //   result = result.map((item) => ({
-  //     ...item,
-  //     hasChildren: item.hasChildren === 1 // 或者使用 Boolean(item.hasChildren) 如果hasChildren是数字类型
-  //   }))
-  res.send(utils.returnData({ data: result, total }))
-})
-
-module.exports = router

+ 121 - 0
router/dataMark/entity.js

@@ -0,0 +1,121 @@
+const express = require('express')
+const router = express.Router()
+const utils = require('../../utils/index.js')
+const pool = require('../../pool.js')
+const pools = require('../../utils/pools.js')
+const execTransection = require('../../utils/pools.js')
+const xlsx = require('node-xlsx')
+const path = require('path')
+const fileEvent = require('../../utils/file')
+const getNewSqlParamEntity = require('../../utils/tool.js')
+const execTrans = require('../../utils/dbHelper.js')
+
+// 增加实体大类
+router.post('/addEntity', async (req, res) => {
+  let sql = 'INSERT INTO entity(`name`,`introduce`,is_show,parent_id) VALUES (?,?,?,?)',
+    obj = req.body
+  await pools({
+    sql,
+    val: [obj.name, obj.introduce, obj.is_show, obj.parentId],
+    run: false,
+    res,
+    req
+  })
+})
+
+//查询
+router.post('/getEntityList', async (req, res) => {
+  let user = await utils.getUserInfo({ req, res }),
+    obj = req.body
+  let sql = `SELECT entity_id AS entityId,name,introduce,is_show,parent_id AS parentId FROM entity WHERE 1=1` // WHERE 1=1是一个始终为真的条件,后续动态添加查询条件的起点
+  sql = utils.setLike(sql, 'name', obj.name) // 添加一个基于name字段的模糊匹配条件,匹配的值来自obj.name
+  sql = utils.setMoreId(sql, user)
+  sql = utils.setOr(sql, 'name', obj.name)
+  let { total } = await utils.getSum({ sql, name: 'entity', res, req }) // 执行SQL查询并获取结果中的总数
+  sql += ` ORDER BY entity_id ASC` // 在SQL查询语句的末尾添加了一个ORDER BY子句,用于根据id字段排序结果 ASC升序、DESC降序
+  // sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
+  let { result } = await pools({ sql, res, req })
+  result = result.map((item) => ({
+    ...item,
+    is_show: item.is_show === 1 // 或者使用 Boolean(item.hasChildren) 如果hasChildren是数字类型
+  }))
+  res.send(utils.returnData({ data: result, total }))
+})
+
+//修改
+router.post('/updataEntity', async (req, res) => {
+  let sql = 'UPDATE entity SET name=?,introduce=?,is_show=?,parent_id=? WHERE entity_id=?',
+    obj = req.body
+  await pools({ sql, val: [obj.name, obj.introduce, obj.is_show, obj.parentId, obj.entityId], run: false, res, req })
+})
+
+//删除
+router.post('/delEntity', async (req, res) => {
+  // await utils.checkPermi({ req, res, role: [systemSettings.menus.menuDelte] })  //检查是否有删除权限
+  let obj = req.body // 假设这是一个包含所有要删除的entityId的数组
+  let hasChildren = false
+  let selectSql = 'SELECT entity_id FROM entity WHERE parent_id=?'
+  // 检查是否有子项
+  for (let entity_id of obj) {
+    let { result } = await pools({ sql: selectSql, val: [entity_id], res, req })
+    if (result.length !== 0) {
+      hasChildren = true
+      break
+    }
+  }
+  if (hasChildren) {
+    return res.send(utils.returnData({ code: -1, msg: '删除失败,请先删除子级', req }))
+  } else {
+    // 构建参数化查询的参数
+    let placeholders = obj.map(() => '?').join(',')
+    let sql = `DELETE FROM entity WHERE entity_id in (${placeholders})`
+    await pools({ sql, val: obj, run: false, res, req }) // 注意这里直接传递obj数组作为参数
+  }
+})
+
+router.post('/importEntity', async (req, res) => {
+  let sql = 'INSERT INTO entity(`name`,`introduce`,is_show,parent_id) VALUES ?'
+  let fileArr = await fileEvent(req, res)
+  let filename = fileArr[0].filename
+  //配置获取文件路径
+  let xlsxRes = xlsx.parse(`${path.join(__dirname, '../../', 'public/uploadFile/')}${filename}`, { cellDates: true })
+  let list = xlsxRes[0].data
+  list.splice(0, 1)
+  console.log('list', list)
+  for (let i = 0; i < list.length; i++) {
+    let item = list[i]
+    if (item[item.length - 1] === 0) {
+      let res1 = await pools({ sql, val: [[item]], run: true, res, req, msg: '请确认导入的一级节点的值没有问题!!!' })
+      console.log('res1', res1)
+    } else {
+      let parentName = item[item.length - 1]
+      let parentSql = 'SELECT entity_id FROM entity WHERE `name` = ?'
+      let parentId
+      try {
+        let result = await pools({ sql: parentSql, val: [parentName], run: true, res, req })
+        console.log('result', result)
+        parentId = result.result[0].entity_id
+        console.log('parentId', parentId)
+      } catch (error) {
+        console.log('获取父节点id失败', error)
+        res.status(500).send('获取父节点id失败')
+        return
+      }
+      // 将父节点id添加到item中替换父节点名称
+      item[item.length - 1] = parentId
+      // 插入数据库
+      try {
+        if (i === list.length - 1) {
+          await pools({ sql, val: [[item]], run: false, res, req, msg: '请确认导入的节点的值没有问题!!!' })
+        } else {
+          await pools({ sql, val: [[item]], run: true, res, req, msg: '请确认导入的节点的值没有问题!!!' })
+        }
+      } catch (error) {
+        console.log('插入数据失败', error)
+        res.status(500).send('插入数据失败')
+        return
+      }
+    }
+  }
+})
+module.exports = router

+ 7 - 8
utils/config.js

@@ -1,9 +1,8 @@
-
-module.exports={
-    //上传文件位置
-    fileSite:"public",
-    //上传name
-    fileName:"file",
-    //文件host
-    fileHost:"http://127.0.0.1:3000"
+module.exports = {
+  //上传文件位置
+  fileSite: 'public/uploadFile',
+  //上传name
+  fileName: 'file',
+  //文件host
+  fileHost: 'http://127.0.0.1:3000'
 }

+ 64 - 0
utils/dbHelper.js

@@ -0,0 +1,64 @@
+const pool = require('../pool.js')
+// var async = require('async')
+
+module.exports = {
+  execTrans: execTrans
+}
+
+function execTrans(sqlparamsEntities, callback) {
+  pool.getConnection(function (err, connection) {
+    if (err) {
+      return callback(err, null)
+    }
+    connection.beginTransaction(function (err) {
+      if (err) {
+        return callback(err, null)
+      }
+      console.log('开始执行transaction,共执行' + sqlparamsEntities.length + '条数据')
+      var funcAry = []
+      sqlparamsEntities.forEach(function (sql_param) {
+        var temp = function (cb) {
+          var sql = sql_param.sql
+          var param = sql_param.params
+          connection.query(sql, param, function (tErr, rows, fields) {
+            if (tErr) {
+              connection.rollback(function () {
+                console.log('事务失败,' + sql_param + ',ERROR:' + tErr)
+                throw tErr
+              })
+            } else {
+              return cb(null, 'ok')
+            }
+          })
+        }
+        funcAry.push(temp)
+      })
+
+      async.series(funcAry, function (err, result) {
+        console.log('transaction error: ' + err)
+        if (err) {
+          connection.rollback(function (err) {
+            console.log('transaction error: ' + err)
+            connection.release()
+            return callback(err, null)
+          })
+        } else {
+          connection.commit(function (err, info) {
+            console.log('transaction info: ' + JSON.stringify(info))
+            if (err) {
+              console.log('执行事务失败,' + err)
+              connection.rollback(function (err) {
+                console.log('transaction error: ' + err)
+                connection.release()
+                return callback(err, null)
+              })
+            } else {
+              connection.release()
+              return callback(null, info)
+            }
+          })
+        }
+      })
+    })
+  })
+}

+ 288 - 282
utils/index.js

@@ -1,286 +1,292 @@
-const jwt = require("jsonwebtoken");
-const pool = require("../pool.js");
-const {errLog}=require("../utils/err");
+const jwt = require('jsonwebtoken')
+const pool = require('../pool.js')
+const { errLog } = require('../utils/err')
 //日志记录
 module.exports = {
-    poolsEvent(){
-        const pools = require("./pools");
-        return pools
-    },
-    setToken({uid,captcha,name="user"}) {
-        let token = jwt.sign({uid,captcha}, name, {
-            expiresIn: "86400s", // 授权时间
-        });
-        return token;
-    },
-    verToken({token,name="user"}) {
-        try {
-            return jwt.verify(token, name);
-        } catch (err) {
-            return false;
-        }
-    },
-    /**
-     * 判断名称是否重复
-     * @param sql  sql语句
-     * @param name  sql查询参数name
-     * @param msg  提示语
-     * @param req  请求主体
-     * @param res  响应主体
-     * */
-    async existName({sql, name,msg="名称已存在!",req,res}) {
-        if(!name) return true;
-        let {result}=await this.poolsEvent()({sql,res,req,val:[name]});
-        if (result.length > 0){
-            res.send(this.returnData({code:-1,msg,req}))
-            return Promise.reject(false);
-        }
-        return true;
-    },
-    /**
-     * 判断修改的名称是否和修改前的一样
-     * @param sql  sql语句
-     * @param sqlName  修改前的属性名
-     * @param name  修改后的值
-     * @param id  sql条件参数
-     * @param req  请求主体
-     * @param res  响应主体
-     * */
-    async judgeUserName({sql,sqlName="name", name,id,req,res}) {
-        let {result}=await this.poolsEvent()({sql,val:[id],res,req});
-        if (result[0][sqlName] == name) return -1;
-        return 1;
-    },
-    /**
-     * 响应总函数
-     * @param code  状态码
-     * @param msg  提示文字
-     * @param total  查询总数量
-     * @param data  数据
-     * @param err  错误信息
-     * @param req  错误信息
-     * @param funName  错误信息记录名称
-     * */
-    returnData({code = 1, msg, total=undefined,data = {},err,req={},funName} = {}) {
-        if (code == 1 && !msg) msg = "请求成功!";
-        if (code == -1 && !msg) msg = "服务器异常!";
-        if (code == 203 && !msg) msg = "登陆失效,请重新登陆!";
-        let res={code, msg, data};
-        if(total!==undefined) res.total=total;
-        if(err) res.err=err;
-        //记录错误日志
-        if(code!=1) errLog({err,code,msg,req,funName});
-        return res;
-    },
-    /**
-     * 获取用户信息
-     * @param req  请求主体
-     * @param res  响应主体
-     * @param addMore  是否拒绝管理员添加多账户信息
-     * */
-    async getUserInfo({req, res,addMore=false}={}) {
-        let token = req.headers.token;
-        if (!token) {
-            res.send(this.returnData({code: 203,req}));
-            return Promise.reject(false);
-        }
-        let user = this.verToken({token});
-        if (!user) {
-            res.send(this.returnData({code: 203,req}));
-            return Promise.reject(false);
-        }
-        let sql = "SELECT id,name,status,roles_id AS rolesId,admin,more_id AS moreId,url FROM user WHERE id=?";
-        let {result}=await this.poolsEvent()({sql,val:[user.uid],res,req});
-        if (result.length === 0) {
-            res.send(this.returnData({code: -1, msg: "用户不存在!",req}));
-            return Promise.reject(false);
-        }
-        if(addMore&&result[0].admin===1) {
-            res.send(this.returnData({code: -1, msg: "终极管理员无权 增加多账号数据~",req}));
-            return Promise.reject(false);
-        }
-        return result[0];
-    },
-
-    /**
-     * 获取用户权限
-     * @param req  请求主体
-     * @param res  响应主体
-     * */
-    async getUserRole(req, res) {
-        let user = await this.getUserInfo({req, res});
-        let userSql = "SELECT roles,role_key FROM roles WHERE FIND_IN_SET(id,?)";
-        let {result}=await this.poolsEvent()({sql:userSql,val:[user.rolesId],res,req});
-        if (result.length == 0) {
-            res.send(this.returnData({code:-1,msg:"获取权限失败!",req}));
-            return Promise.reject(false);
-        }
-        let roles = result.map(t => t.roles);
-        //权限字符
-        let roleKey=result.map(t=>t.role_key);
-        //角色权限
-        let roleAdmin=roleKey.some(t=>t==="admin");
-        return {userRole: roles.join(","),roleKey,user,roleAdmin};
-    },
-    /**
-     * 菜单字符权限拦截
-     * @param req  主体
-     * @param res  主体
-     * @param role  接口权限字符数组
-     * @param admin  是否管理员也要遵守(默认否)
-     * @param run  是否不拦截,返回结果
-     * */
-    async checkPermi({req,res,role=[],admin=false,run=false}){
-        let userRole=await this.getUserRole(req,res);
-        if((userRole.roleAdmin|| userRole.user.admin===1)&&!admin) return true;
-        let sql = "SELECT role_key AS roleKey FROM router_menu WHERE FIND_IN_SET(id,?)";
-        let {result}=await this.poolsEvent()({sql,val:[userRole.userRole],res,req});
-        try {
-            let roleKeyArr=result.map(t=>t.roleKey).filter(t=>t);
-            const hasPermission = role.some(permission => {
-                return roleKeyArr.includes(permission)
-            });
-            if(hasPermission||run) return hasPermission;
-            res.send(this.returnData({code:-1,msg:"暂无此功能请求权限!",req}));
-            return Promise.reject(false);
-        }catch (e) {
-            res.send(this.returnData({code:-1,msg:"菜单权限判断错误!!",req}));
-            return Promise.reject(false);
-        }
-    },
-    /**
-     * 角色权限拦截
-     * @param req  主体
-     * @param res  主体
-     * @param role  角色权限数组
-     * @param admin  是否管理员也要遵守(默认否)
-     * @param run  是否不拦截,返回结果
-     * */
-    async checkRole({req,res,role=[],admin=false,run=false}){
-        try {
-            let userRole=await this.getUserRole(req,res);
-            if((userRole.roleAdmin|| userRole.user.admin===1)&&!admin) return true;
-            let roleKeyArr=userRole.roleKey;
-            const hasPermission = role.some(permission => {
-                return roleKeyArr.includes(permission)
-            });
-            if(hasPermission||run) return hasPermission;
-            res.send(this.returnData({code:-1,msg:"暂无对应角色请求权限!",req}))
-            return Promise.reject(false);
-        }catch (e) {
-            res.send(this.returnData({code:-1,msg:"角色权限判断错误!",err:e,req}))
-            return Promise.reject(false);
-        }
-
-    },
-    /**
-     * 是否操作的是用户总管理员
-     * @param req  请求主体
-     * @param res  响应主体
-     * @param id  查询条件id
-     * */
-    async upAdmin({req,res,id}){
-        let sql = "SELECT admin FROM user WHERE id=?";
-        let {result}=await this.poolsEvent()({sql,val:[id],res,req});
-        if(result.length===0){
-            res.send(this.returnData({code:-1,msg:"管理信息判断错误!",req}));
-            return Promise.reject(false);
-        }
-        if(result[0].admin===1) {
-            res.send(this.returnData({code:-1,msg:"无法对《总管理》执行此操作!",req}));
-            return Promise.reject(false);
-        }
-        return result;
-    },
-    /**
-     * 是否操作的是角色总管理员
-     * @param req  请求主体
-     * @param res  响应主体
-     * @param id  查询条件id
-     * */
-    async upAdminRole({req,res,id}){
-        let sql = "SELECT role_key FROM roles WHERE id=?";
-        let {result}=await this.poolsEvent()({sql,val:[id],res,req});
-        if(result.length===0) {
-            res.send(this.returnData({code:-1,msg:"管理信息判断错误!!",req}));
-            return Promise.reject(false);
-        }
-        if(result[0].role_key==="admin") {
-            res.send(this.returnData({code:-1,msg:"无法对《角色总管理》执行此操作!",req}));
-            return Promise.reject(false);
-        }
-        return result;
+  poolsEvent() {
+    const pools = require('./pools')
+    return pools
+  },
+  setToken({ uid, captcha, name = 'user' }) {
+    let token = jwt.sign({ uid, captcha }, name, {
+      expiresIn: '86400s' // 授权时间
+    })
+    return token
+  },
+  verToken({ token, name = 'user' }) {
+    try {
+      return jwt.verify(token, name)
+    } catch (err) {
+      return false
+    }
+  },
+  /**
+   * 判断名称是否重复
+   * @param sql  sql语句
+   * @param name  sql查询参数name
+   * @param msg  提示语
+   * @param req  请求主体
+   * @param res  响应主体
+   * */
+  async existName({ sql, name, msg = '名称已存在!', req, res }) {
+    if (!name) return true
+    let { result } = await this.poolsEvent()({ sql, res, req, val: [name] })
+    if (result.length > 0) {
+      res.send(this.returnData({ code: -1, msg, req }))
+      return Promise.reject(false)
+    }
+    return true
+  },
+  /**
+   * 判断修改的名称是否和修改前的一样
+   * @param sql  sql语句
+   * @param sqlName  修改前的属性名
+   * @param name  修改后的值
+   * @param id  sql条件参数
+   * @param req  请求主体
+   * @param res  响应主体
+   * */
+  async judgeUserName({ sql, sqlName = 'name', name, id, req, res }) {
+    let { result } = await this.poolsEvent()({ sql, val: [id], res, req })
+    if (result[0][sqlName] == name) return -1
+    return 1
+  },
+  /**
+   * 响应总函数
+   * @param code  状态码
+   * @param msg  提示文字
+   * @param total  查询总数量
+   * @param data  数据
+   * @param err  错误信息
+   * @param req  错误信息
+   * @param funName  错误信息记录名称
+   * */
+  returnData({ code = 1, msg, total = undefined, data = {}, err, req = {}, funName } = {}) {
+    if (code == 1 && !msg) msg = '请求成功!'
+    if (code == -1 && !msg) msg = '服务器异常!'
+    if (code == 203 && !msg) msg = '登陆失效,请重新登陆!'
+    let res = { code, msg, data }
+    if (total !== undefined) res.total = total
+    if (err) res.err = err
+    //记录错误日志
+    if (code != 1) errLog({ err, code, msg, req, funName })
+    return res
+  },
+  /**
+   * 获取用户信息
+   * @param req  请求主体
+   * @param res  响应主体
+   * @param addMore  是否拒绝管理员添加多账户信息
+   * */
+  async getUserInfo({ req, res, addMore = false } = {}) {
+    let token = req.headers.token
+    if (!token) {
+      res.send(this.returnData({ code: 203, req }))
+      return Promise.reject(false)
+    }
+    let user = this.verToken({ token })
+    if (!user) {
+      res.send(this.returnData({ code: 203, req }))
+      return Promise.reject(false)
+    }
+    let sql = 'SELECT id,name,status,roles_id AS rolesId,admin,more_id AS moreId,url FROM user WHERE id=?'
+    let { result } = await this.poolsEvent()({ sql, val: [user.uid], res, req })
+    if (result.length === 0) {
+      res.send(this.returnData({ code: -1, msg: '用户不存在!', req }))
+      return Promise.reject(false)
+    }
+    if (addMore && result[0].admin === 1) {
+      res.send(this.returnData({ code: -1, msg: '终极管理员无权 增加多账号数据~', req }))
+      return Promise.reject(false)
+    }
+    return result[0]
+  },
 
-    },
-    /**
-     * 通过id获取用户信息
-     * @param req  请求主体
-     * @param res  响应主体
-     * @param id  查询条件id
-     * */
-    async getUserId({req,res,id}){
-        let sql = "SELECT admin FROM user WHERE id=?";
-        let {result}=await this.poolsEvent()({sql,val:[id],res,req});
-        if(result.length===0) {
-            res.send(this.returnData({code:-1,msg:"用户信息错误!!",req}));
-            return Promise.reject(false);
-        }
-        return result[0];
-    },
-    /**
-     * 分页页码处理
-     * @param sql  sql语句
-     * @param page  页码
-     * @param size  最大数量
-     * */
-    pageSize(sql,page,size){
-        if(!page){page=1};
-        if(!size){size=10};
-        page = (page-1)*size;
-        size = parseInt(size);
-        return sql+=` LIMIT ${page},${size}`;
-    },
-    /**
-     * 查询总数
-     * @param sql  sql语句
-     * @param name  表名
-     * @param res  响应主体
-     * @param req  请求主体
-     * */
-    async getSum({sql="",name,res,req}) {
-        const regex = /WHERE(.+)/;
-        const result = sql.match(regex);
-        let where="1=1";
-        if (result && result[1])  where = result[1].trim();
-        let sqlRes = `SELECT count(1) FROM ${name} WHERE ${where}`;
-        let {result:resultRes}=await this.poolsEvent()({sql:sqlRes,res,req});
-        return { total: resultRes[0]["count(1)"] };
-    },
-    /**
-     * 将多账户id加入sql判断
-     * @param sql  sql语句
-     * @param user  用户信息
-     * @param name  字段名
-     * */
-    setMoreId(sql,user,name='more_id'){
-        if (user.admin !== 1) return sql += ` AND ${name} = ${user.moreId}`;
-        return sql;
-    },
-    /**
-     * 模糊查询
-     * @param sql sql语句
-     * @param name 字段名
-     * @param val 值
-     * */
-    setLike(sql,name="",val=""){
-        if(this.exist(val)) sql+=` AND ${name} LIKE "%${val}%"`;
-        return sql
-    },
-    /**
-     * 判断是否为空
-     * @param str any
-     * */
-    exist(str){
-        return str !== undefined && str !== "" && str !== null;
+  /**
+   * 获取用户权限
+   * @param req  请求主体
+   * @param res  响应主体
+   * */
+  async getUserRole(req, res) {
+    let user = await this.getUserInfo({ req, res })
+    let userSql = 'SELECT roles,role_key FROM roles WHERE FIND_IN_SET(id,?)'
+    let { result } = await this.poolsEvent()({ sql: userSql, val: [user.rolesId], res, req })
+    if (result.length == 0) {
+      res.send(this.returnData({ code: -1, msg: '获取权限失败!', req }))
+      return Promise.reject(false)
+    }
+    let roles = result.map((t) => t.roles)
+    //权限字符
+    let roleKey = result.map((t) => t.role_key)
+    //角色权限
+    let roleAdmin = roleKey.some((t) => t === 'admin')
+    return { userRole: roles.join(','), roleKey, user, roleAdmin }
+  },
+  /**
+   * 菜单字符权限拦截
+   * @param req  主体
+   * @param res  主体
+   * @param role  接口权限字符数组
+   * @param admin  是否管理员也要遵守(默认否)
+   * @param run  是否不拦截,返回结果
+   * */
+  async checkPermi({ req, res, role = [], admin = false, run = false }) {
+    let userRole = await this.getUserRole(req, res)
+    if ((userRole.roleAdmin || userRole.user.admin === 1) && !admin) return true
+    let sql = 'SELECT role_key AS roleKey FROM router_menu WHERE FIND_IN_SET(id,?)'
+    let { result } = await this.poolsEvent()({ sql, val: [userRole.userRole], res, req })
+    try {
+      let roleKeyArr = result.map((t) => t.roleKey).filter((t) => t)
+      const hasPermission = role.some((permission) => {
+        return roleKeyArr.includes(permission)
+      })
+      if (hasPermission || run) return hasPermission
+      res.send(this.returnData({ code: -1, msg: '暂无此功能请求权限!', req }))
+      return Promise.reject(false)
+    } catch (e) {
+      res.send(this.returnData({ code: -1, msg: '菜单权限判断错误!!', req }))
+      return Promise.reject(false)
+    }
+  },
+  /**
+   * 角色权限拦截
+   * @param req  主体
+   * @param res  主体
+   * @param role  角色权限数组
+   * @param admin  是否管理员也要遵守(默认否)
+   * @param run  是否不拦截,返回结果
+   * */
+  async checkRole({ req, res, role = [], admin = false, run = false }) {
+    try {
+      let userRole = await this.getUserRole(req, res)
+      if ((userRole.roleAdmin || userRole.user.admin === 1) && !admin) return true
+      let roleKeyArr = userRole.roleKey
+      const hasPermission = role.some((permission) => {
+        return roleKeyArr.includes(permission)
+      })
+      if (hasPermission || run) return hasPermission
+      res.send(this.returnData({ code: -1, msg: '暂无对应角色请求权限!', req }))
+      return Promise.reject(false)
+    } catch (e) {
+      res.send(this.returnData({ code: -1, msg: '角色权限判断错误!', err: e, req }))
+      return Promise.reject(false)
+    }
+  },
+  /**
+   * 是否操作的是用户总管理员
+   * @param req  请求主体
+   * @param res  响应主体
+   * @param id  查询条件id
+   * */
+  async upAdmin({ req, res, id }) {
+    let sql = 'SELECT admin FROM user WHERE id=?'
+    let { result } = await this.poolsEvent()({ sql, val: [id], res, req })
+    if (result.length === 0) {
+      res.send(this.returnData({ code: -1, msg: '管理信息判断错误!', req }))
+      return Promise.reject(false)
+    }
+    if (result[0].admin === 1) {
+      res.send(this.returnData({ code: -1, msg: '无法对《总管理》执行此操作!', req }))
+      return Promise.reject(false)
+    }
+    return result
+  },
+  /**
+   * 是否操作的是角色总管理员
+   * @param req  请求主体
+   * @param res  响应主体
+   * @param id  查询条件id
+   * */
+  async upAdminRole({ req, res, id }) {
+    let sql = 'SELECT role_key FROM roles WHERE id=?'
+    let { result } = await this.poolsEvent()({ sql, val: [id], res, req })
+    if (result.length === 0) {
+      res.send(this.returnData({ code: -1, msg: '管理信息判断错误!!', req }))
+      return Promise.reject(false)
+    }
+    if (result[0].role_key === 'admin') {
+      res.send(this.returnData({ code: -1, msg: '无法对《角色总管理》执行此操作!', req }))
+      return Promise.reject(false)
+    }
+    return result
+  },
+  /**
+   * 通过id获取用户信息
+   * @param req  请求主体
+   * @param res  响应主体
+   * @param id  查询条件id
+   * */
+  async getUserId({ req, res, id }) {
+    let sql = 'SELECT admin FROM user WHERE id=?'
+    let { result } = await this.poolsEvent()({ sql, val: [id], res, req })
+    if (result.length === 0) {
+      res.send(this.returnData({ code: -1, msg: '用户信息错误!!', req }))
+      return Promise.reject(false)
+    }
+    return result[0]
+  },
+  /**
+   * 分页页码处理
+   * @param sql  sql语句
+   * @param page  页码
+   * @param size  最大数量
+   * */
+  pageSize(sql, page, size) {
+    if (!page) {
+      page = 1
+    }
+    if (!size) {
+      size = 10
     }
-};
+    page = (page - 1) * size
+    size = parseInt(size)
+    return (sql += ` LIMIT ${page},${size}`)
+  },
+  /**
+   * 查询总数
+   * @param sql  sql语句
+   * @param name  表名
+   * @param res  响应主体
+   * @param req  请求主体
+   * */
+  async getSum({ sql = '', name, res, req }) {
+    const regex = /WHERE(.+)/
+    const result = sql.match(regex)
+    let where = '1=1'
+    if (result && result[1]) where = result[1].trim()
+    let sqlRes = `SELECT count(1) FROM ${name} WHERE ${where}`
+    let { result: resultRes } = await this.poolsEvent()({ sql: sqlRes, res, req })
+    return { total: resultRes[0]['count(1)'] }
+  },
+  /**
+   * 将多账户id加入sql判断
+   * @param sql  sql语句
+   * @param user  用户信息
+   * @param name  字段名
+   * */
+  setMoreId(sql, user, name = 'more_id') {
+    if (user.admin !== 1) return (sql += ` AND ${name} = ${user.moreId}`)
+    return sql
+  },
+  /**
+   * 模糊查询
+   * @param sql sql语句
+   * @param name 字段名
+   * @param val 值
+   * */
+  setLike(sql, name = '', val = '') {
+    if (this.exist(val)) sql += ` AND ${name} LIKE "%${val}%"`
+    return sql
+  },
+  setOr(sql, name = '', val = '') {
+    if (this.exist(val)) sql += ` or entity_id in (SELECT parent_id FROM entity where name LIKE '%${val}%')`
+    return sql
+  },
+  /**
+   * 判断是否为空
+   * @param str any
+   * */
+  exist(str) {
+    return str !== undefined && str !== '' && str !== null
+  }
+}

+ 10 - 10
utils/pools.js

@@ -1,5 +1,5 @@
-const pool = require('../pool.js');
-const utils = require("./index.js");
+const pool = require('../pool.js')
+const utils = require('./index.js')
 /**
  * @param sql sql语句
  * @param val ?另加值
@@ -8,12 +8,12 @@ const utils = require("./index.js");
  * @param res 响应主体
  * @param req 请求主体
  * */
-module.exports=function pools({sql,val=[],msg,run=true,res,req}={}){
-    return new Promise((resolve)=>{
-        pool.query(sql, val,(err, result) => {
-            if (err) return res.send(utils.returnData({code: -1, msg,err,req}));
-            if(run) return resolve({result});
-            return res.send(utils.returnData({ data: result }));
-        });
+module.exports = function pools({ sql, val = [], msg, run = true, res, req } = {}) {
+  return new Promise((resolve) => {
+    pool.query(sql, val, (err, result) => {
+      if (err) return res.send(utils.returnData({ code: -1, msg, err, req }))
+      if (run) return resolve({ result })
+      return res.send(utils.returnData({ data: result }))
     })
-}
+  })
+}

+ 12 - 0
utils/tool.js

@@ -0,0 +1,12 @@
+module.exports = function getNewSqlParamEntity(sql, params, callback) {
+  if (callback) {
+    return callback(null, {
+      sql: sql,
+      params: params
+    })
+  }
+  return {
+    sql: sql,
+    params: params
+  }
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 3
数据库/vue_admin.sql


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott