CzRger 7 månader sedan
förälder
incheckning
3622089107

+ 24 - 0
src/mock/config/api.js

@@ -0,0 +1,24 @@
+const resultCode = {
+    200: '请求成功',
+    500: '请求失败',
+    401: '验证失败'
+}
+module.exports = class ApiResult {
+    constructor(code, data, msg) {
+        this.code = code
+        this.data = data
+        this.msg = msg
+    }
+    success(data, msg) {
+        const c = 200
+        return new ApiResult(c, data, msg || resultCode[c])
+    }
+    error(data, msg) {
+        const c = 500
+        return new ApiResult(c, data, msg || resultCode[c])
+    }
+    authError() {
+        const c = 401
+        return new ApiResult(c, null, resultCode[c])
+    }
+}

+ 48 - 0
src/mock/config/db.js

@@ -0,0 +1,48 @@
+const mysql = require('mysql')
+const fs = require("fs");
+const configFile = fs.readFileSync('./config.json');
+const globalConfig = JSON.parse(configFile)
+const shipTestConfig = globalConfig['ship-test'][globalConfig['ship-test']['version']]
+const db_config = shipTestConfig.db
+// 进行数据库交互
+const sqlHandle = (sql, values) => {
+    let connect = mysql.createConnection(db_config)
+    // 开始链接数据库
+    connect.connect(function (err) {
+        if (err) {
+            console.log(`mysql连接失败: ${err}!`)
+        } else {
+            console.log('mysql连接成功!')
+        }
+    })
+    // 返回一个Promise承诺对象
+    return new Promise((resolve, reject) => {
+        connect.query(sql, values, (err, result) => {
+            if (err) {
+                reject(err)
+            } else {
+                // 此处需要将返回数据转为JSON再转回来,否则原数据不为任何数据类型
+                let res = JSON.parse(JSON.stringify(result))
+                console.log('执行:', sql)
+                console.log('参数:', values)
+                console.log('结果:', res)
+                closeMysql(connect)
+                resolve(res)
+            }
+        });
+    })
+}
+// 查询成功后关闭mysql
+const closeMysql = (connect) => {
+    connect.end((err) => {
+        if (err) {
+            console.log(`mysql关闭失败:${err}!`)
+        } else {
+            console.log('mysql关闭成功!')
+        }
+    })
+}
+// 导出方法
+module.exports = {
+    sqlHandle
+}

+ 10 - 0
src/mock/config/page.js

@@ -0,0 +1,10 @@
+const {sqlHandle} = require("./db")
+
+const PageResult = async (sql, pageNum, pageSize, Entity) => {
+    const result = await sqlHandle(sql)
+    return {
+        data: result.slice((pageNum - 1) * pageSize, pageNum * pageSize).map(v => Entity ? new Entity(v) : v),
+        total: result.length
+    }
+}
+module.exports = PageResult

+ 61 - 0
src/mock/control/mock-control.js

@@ -0,0 +1,61 @@
+const MockService = require("../service/mock-service")
+const ApiResult = require("../config/api")
+const MockControl = {
+  getUserInfo: async (req, res) => {
+    try {
+      if (req.headers.authorization) {
+        MockService.getUserInfo().then(data => {
+          res.send(new ApiResult().success(data))
+        }).catch((e) => {
+          res.send(new ApiResult().error(null, e))
+        })
+      } else {
+        res.send(new ApiResult().authError())
+      }
+    } catch (e) {
+      res.send(new ApiResult().error(e))
+    }
+  },
+  mockGetConfig: async (req, res) => {
+    try {
+      MockService.mockGetConfig().then(data => {
+        res.send(new ApiResult().success(data))
+      }).catch((e) => {
+        res.send(new ApiResult().error(null, e))
+      })
+    } catch (e) {
+      res.send(new ApiResult().error(e))
+    }
+  },
+  getSearchArea: async (req, res) => {
+    try {
+      if (req.headers.authorization) {
+        MockService.getSearchArea().then(data => {
+          res.send(new ApiResult().success(data))
+        }).catch((e) => {
+          res.send(new ApiResult().error(null, e))
+        })
+      } else {
+        res.send(new ApiResult().authError())
+      }
+    } catch (e) {
+      res.send(new ApiResult().error(e))
+    }
+  },
+  getSearchHistory: async (req, res) => {
+    try {
+      if (req.headers.authorization) {
+        MockService.getSearchHistory().then(data => {
+          res.send(new ApiResult().success(data))
+        }).catch((e) => {
+          res.send(new ApiResult().error(null, e))
+        })
+      } else {
+        res.send(new ApiResult().authError())
+      }
+    } catch (e) {
+      res.send(new ApiResult().error(e))
+    }
+  },
+}
+module.exports = MockControl

+ 10 - 0
src/mock/routers/index.js

@@ -0,0 +1,10 @@
+const express = require("express")
+const MockControl = require("../control/mock-control")
+const mockRouter = express.Router()
+// 模拟
+mockRouter.get('/getUserInfo', MockControl.getUserInfo)
+mockRouter.get('/getConfig', MockControl.mockGetConfig)
+mockRouter.get('/getSearchArea', MockControl.getSearchArea)
+mockRouter.get('/getSearchHistory', MockControl.getSearchHistory)
+
+module.exports = mockRouter

+ 88 - 0
src/mock/routers/ws-search.js

@@ -0,0 +1,88 @@
+const {randomNum} = require("../../util");
+const wsSearch = (WebSocket) => {
+// 服务器端监听连接事件
+  WebSocket.on('connection', (ws, req) => {
+    console.log('智搜:WebSocket连接成功');
+    ws.send(JSON.stringify('websocket返回的sessionId'))
+    ws.on('message', (message) => {
+      const params = JSON.parse(message)
+      switch (params.type) {
+        case 'count': {
+          sendCount(ws, params)
+        } break
+        case 'list': {
+          sendList(ws, params)
+        } break
+      }
+    });
+    // 监听连接断开事件
+    ws.on('close', () => {
+      console.log('智搜:WebSocket关闭成功');
+    });
+  });
+}
+const sendCount = (ws, params) => {
+  console.log(params)
+  const arr = []
+  params.builder.forEach(tag => {
+    tag.datas.forEach(type => {
+      const obj = {
+        tagCode: tag.tagCode,
+        datas: [{
+          typeCode: type.typeCode,
+          datas: type.datas.map(index => ({
+            indexCode: index.indexCode,
+            data: randomNum(0, 1)
+          }))
+        }]
+      }
+      arr.push(obj)
+    })
+  })
+  let i = 0
+  let timer = setInterval(() => {
+    if (i < arr.length) {
+      ws.send(JSON.stringify({
+        timestamp: params.timestamp,
+        type: params.type,
+        sessionId: params.sessionId,
+        "respCode": "0",
+        "respMsg": "查询成功",
+        datas: [arr[i]]
+      }))
+      i++
+    } else {
+      clearInterval(timer)
+    }
+  }, 2000)
+}
+const sendList = (ws, params) => {
+  console.log(params)
+  setTimeout(() => {
+    ws.send(JSON.stringify({
+      timestamp: params.timestamp,
+      type: params.type,
+      sessionId: params.sessionId,
+      pageNumber: params.pageNumber,
+      pageSize: params.pageSize,
+      records: 100,
+      "respCode": "0",
+      "respMsg": "查询成功",
+      datas: [
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+        {name: '胡杰<span style="color: red;">顶顶顶</span>顶顶', sex: '男', a: 1, b: 2, c: 3, d: 4, avatar: 'https://element-plus.org/images/element-plus-logo.svg'},
+      ]
+    }))
+  }, 1000)
+}
+module.exports = {
+  wsSearch,
+}

+ 183 - 0
src/mock/service/mock-service.js

@@ -0,0 +1,183 @@
+const {sqlHandle} = require("../config/db")
+const {isValue, paramToUnder} = require("../../util/index")
+const PageResult = require("../config/page")
+const HoverService = {
+  getUserInfo: () => {
+    return new Promise(async (resolve, reject) => {
+      try {
+        const userInfo = {
+          username: 'admin',
+          timestamp: new Date().getTime(),
+          isAdmin: true
+        }
+        setTimeout(() => {
+          return resolve(userInfo)
+        }, 1000)
+      } catch (e) {
+        return reject(e.sqlMessage)
+      }
+    })
+  },
+  mockGetConfig: () => {
+    return new Promise(async (resolve, reject) => {
+      try {
+        const result = {
+          // mainColor: 'rgba(46, 129, 255, 1)',
+          mainColor: 'rgba(255,46,84, 1)',
+          textColor1: 'rgba(48,49,51,1)',
+          textColor2: 'rgba(96,98,102,1)',
+          textColor3: 'rgba(144,147,153,1)',
+          textColor4: 'rgba(192,196,204,1)',
+        }
+        setTimeout(() => {
+          return resolve(result)
+        }, 1000)
+      } catch (e) {
+        return reject(e.sqlMessage)
+      }
+    })
+  },
+  getSearchArea: () => {
+    return new Promise(async (resolve, reject) => {
+      try {
+        const result = [
+          {
+            name: '对象标签',
+            children: [
+              {indexName: '人员', indexKey: 'index_dx_ry', children: [
+                  {indexName: '人员档案信息', indexKey: 'index_dx_ry-1'},
+                  {indexName: '户籍人口信息', indexKey: 'index_dx_ry-2'},
+                  {indexName: '人口基本信息', indexKey: 'index_dx_ry-3'},
+                ]
+              },
+              {indexName: '物品', indexKey: 'index_dx_wp', children: [
+                  {indexName: '车辆基础信息', indexKey: 'index_dx_wp-1'},
+                  {indexName: '出港车辆信息', indexKey: 'index_dx_wp—2'},
+                  {indexName: '出租汽车基础信息', indexKey: 'index_dx_wp-3'},
+                ]
+              },
+              {indexName: '地址', indexKey: 'index_dx_dz', children: [
+                  {indexName: '摄像头点位信息', indexKey: 'index_dx_dz-1'},
+                  {indexName: '房屋出租信息', indexKey: 'index_dx_dz—2'},
+                  {indexName: '隧道信息', indexKey: 'index_dx_dz-3'},
+                ]
+              },
+              {indexName: '组织', indexKey: 'index_dx_zz', children: [
+                  {indexName: '政法机构信息', indexKey: 'index_dx_zz-1'},
+                  {indexName: '安全生产监管企业违规记录信息', indexKey: 'index_dx_zz—2'},
+                ]
+              },
+              {indexName: '公共', indexKey: 'index_dx_gg', children: [
+                  {indexName: '全省景区信息', indexKey: 'index_dx_gg-1'},
+                  {indexName: '环岛码头信息', indexKey: 'index_dx_gg—2'},
+                ]
+              },
+              {indexName: '其他', indexKey: 'index_dx_qt', children: [
+                  {indexName: 'XXXXXXXXX子项1', indexKey: 'index_dx_qt-1'},
+                  {indexName: 'XXXXXXXXX子项2', indexKey: 'index_dx_qt—2'},
+                  {indexName: 'XXXXXXXXX子项3', indexKey: 'index_dx_qt—3'},
+                  {indexName: 'XXXXXXXXX子项4', indexKey: 'index_dx_qt—4'},
+                  {indexName: 'XXXXXXXXX子项5', indexKey: 'index_dx_qt—5'},
+                  {indexName: 'XXXXXXXXX子项6', indexKey: 'index_dx_qt—6'},
+                  {indexName: 'XXXXXXXXX子项7', indexKey: 'index_dx_qt—7'},
+                  {indexName: 'XXXXXXXXX子项8', indexKey: 'index_dx_qt—8'},
+                  {indexName: 'XXXXXXXXX子项9', indexKey: 'index_dx_qt—9'},
+                  {indexName: 'XXXXXXXXX子项10', indexKey: 'index_dx_qt—10'},
+                  {indexName: 'XXXXXXXXX子项11', indexKey: 'index_dx_qt—11'},
+                  {indexName: 'XXXXXXXXX子项12', indexKey: 'index_dx_qt—12'},
+                ]
+              },
+            ]
+          },
+          {
+            name: '主题标签',
+            children: [
+              {indexName: '人口库', indexKey: 'index_zt_rkk', children: [
+                  {indexName: '常住人口信息', indexKey: 'index_zt_rkk-1'},
+                  {indexName: '流动人口信息', indexKey: 'index_zt_rkk—2'},
+                  {indexName: '境外人员基本信息', indexKey: 'index_zt_rkk—3'},
+                ]
+              },
+              {indexName: '法人库', indexKey: 'index_zt_frk', children: [
+                  {indexName: '企业法人基本信息', indexKey: 'index_zt_frk-1'},
+                  {indexName: '企业法人行政处罚记录', indexKey: 'index_zt_frk—2'},
+                  {indexName: '企业基本信息', indexKey: 'index_zt_frk—3'},
+                ]
+              },
+              {indexName: '警情案事件', indexKey: 'index_zt_jqasj', children: [
+                  {indexName: '案件基本信息', indexKey: 'index_zt_jqasj-1'},
+                ]
+              },
+              {indexName: '重点关注对象', indexKey: 'index_zt_zdgzdx', children: [
+                  {indexName: '涉毒前科人员基本信息', indexKey: 'index_zt_zdgzdx-1'},
+                ]
+              },
+              {indexName: '关注群体', indexKey: 'index_zt_gzqt', children: [
+                  {indexName: '社区矫正人员', indexKey: 'index_zt_gzqt-1'},
+                ]
+              },
+              {indexName: '车辆库', indexKey: 'index_zt_clk', children: [
+                  {indexName: '家用汽车基本信息', indexKey: 'index_zt_clk-1'},
+                ]
+              },
+              {indexName: '船舶库', indexKey: 'index_zt_cbk', children: [
+                  {indexName: '三无船舶信息', indexKey: 'index_zt_cbk-1'},
+                ]
+              },
+              {indexName: '非机动车库', indexKey: 'index_zt_fjdck', children: [
+                  {indexName: '电瓶车证件信息', indexKey: 'index_zt_fjdck-1'},
+                ]
+              },
+            ]
+          },
+          {
+            name: '专题标签',
+            children: [
+              {indexName: '人际关系', indexKey: 'index_zhuant_rjgx', children: [
+                  {indexName: '同届校生关系', indexKey: 'index_zhuant_rjgx-1'},
+                  {indexName: '同期社保记录', indexKey: 'index_zhuant_rjgx—2'},
+                  {indexName: '同期公积金记录', indexKey: 'index_zhuant_rjgx—3'},
+                ]
+              },
+              {indexName: '离岛免税', indexKey: 'index_zhuant_ldms', children: [
+                  {indexName: '同行车辆人员', indexKey: 'index_zhuant_ldms-1'},
+                  {indexName: '同行船舶人员', indexKey: 'index_zhuant_ldms—2'},
+                  {indexName: '频繁往返进出岛人员', indexKey: 'index_zhuant_ldms—3'},
+                ]
+              },
+            ]
+          },
+        ]
+        return resolve(result)
+      } catch (e) {
+        return reject(e.sqlMessage)
+      }
+    })
+  },
+  getSearchHistory: () => {
+    return new Promise(async (resolve, reject) => {
+      try {
+        const result = [
+          '胡杰',
+          '临1234567',
+          '123012301204012591295192',
+          '爱神的箭阿三代售点加上基地啊家是',
+          'asfasfasfasf',
+          'asfasfas',
+          'gas啊军嫂上岛萨克管阿莎',
+          'asdasdas',
+          '1',
+          '2',
+          '这是一个国家城市省份的地址',
+          '海南省 海口市 龙华区 海垦街道 海南省公安厅 胡杰 琼 宝马'
+        ]
+        setTimeout(() => {
+          return resolve(result)
+        }, 1000)
+      } catch (e) {
+        return reject(e.sqlMessage)
+      }
+    })
+  },
+}
+module.exports = HoverService

+ 6 - 0
src/util/index.js

@@ -98,4 +98,10 @@ module.exports.randomNum = (min = 0, max = 0, decimal=0) => {
   } else {
     return parseInt(String(Math.random() * (max_z - min_z + 1) + min_z), 10);
   }
+}
+
+module.exports.delayLoop = (s) => {
+  return new Promise(resolve => {
+    setTimeout(resolve, s * 1000);
+  });
 }