From 5f1967587e43df4f77f0e973c43f0b5dda444fbc Mon Sep 17 00:00:00 2001 From: wenlele Date: Tue, 18 Jul 2023 15:06:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/.vscode/launch.json | 3 +- api/app/lib/controllers/auth/index.js | 264 ++++++++---------- api/app/lib/index.js | 30 +- api/app/lib/models/department.js | 56 ---- api/app/lib/models/patrol_plan.js | 105 ------- api/app/lib/models/patrol_record.js | 55 ---- api/app/lib/models/point.js | 79 ------ api/app/lib/models/project.js | 97 ------- api/app/lib/models/resource.js | 44 --- api/app/lib/models/user.js | 58 +--- api/app/lib/models/user_resource.js | 52 ---- api/app/lib/models/user_token.js | 4 +- scripts/0.1/schema/0.1user.sql | 26 ++ web/client/assets/images/map.svg | 22 ++ web/client/assets/images/monitor/end.png | Bin 0 -> 10503 bytes .../assets/images/monitor/lower-left.png | Bin 0 -> 25040 bytes .../assets/images/monitor/lower-right.png | Bin 0 -> 24324 bytes web/client/assets/images/monitor/point.png | Bin 0 -> 14722 bytes web/client/assets/images/monitor/pump-p.png | Bin 0 -> 7090 bytes web/client/assets/images/monitor/pumpPP.png | Bin 0 -> 10188 bytes web/client/assets/images/monitor/pumpPo.png | Bin 0 -> 9381 bytes web/client/assets/images/number/good1.png | Bin 0 -> 3971 bytes web/client/assets/images/number/good10.png | Bin 0 -> 4568 bytes web/client/assets/images/number/good11.png | Bin 0 -> 4251 bytes web/client/assets/images/number/good12.png | Bin 0 -> 4648 bytes web/client/assets/images/number/good2.png | Bin 0 -> 4330 bytes web/client/assets/images/number/good3.png | Bin 0 -> 4415 bytes web/client/assets/images/number/good4.png | Bin 0 -> 4273 bytes web/client/assets/images/number/good5.png | Bin 0 -> 4266 bytes web/client/assets/images/number/good6.png | Bin 0 -> 4360 bytes web/client/assets/images/number/good7.png | Bin 0 -> 4150 bytes web/client/assets/images/number/good8.png | Bin 0 -> 4542 bytes web/client/assets/images/number/good9.png | Bin 0 -> 4338 bytes web/client/assets/images/number/problem1.png | Bin 0 -> 3271 bytes web/client/assets/images/number/problem10.png | Bin 0 -> 3673 bytes web/client/assets/images/number/problem11.png | Bin 0 -> 3457 bytes web/client/assets/images/number/problem12.png | Bin 0 -> 3787 bytes web/client/assets/images/number/problem2.png | Bin 0 -> 3519 bytes web/client/assets/images/number/problem3.png | Bin 0 -> 3593 bytes web/client/assets/images/number/problem4.png | Bin 0 -> 3503 bytes web/client/assets/images/number/problem5.png | Bin 0 -> 3493 bytes web/client/assets/images/number/problem6.png | Bin 0 -> 3557 bytes web/client/assets/images/number/problem7.png | Bin 0 -> 3438 bytes web/client/assets/images/number/problem8.png | Bin 0 -> 3659 bytes web/client/assets/images/number/problem9.png | Bin 0 -> 3515 bytes web/client/index.html | 2 +- .../src/layout/containers/layout/index.js | 2 +- .../src/layout/containers/layout/index.less | 3 +- .../src/sections/auth/containers/login.js | 1 - .../src/sections/bigScreen/components/amap.js | 150 +++++++--- .../sections/bigScreen/components/basis.js | 229 +++++++++++++-- .../sections/bigScreen/components/basis.less | 2 +- .../bigScreen/components/basis/left_1.js | 35 ++- .../bigScreen/components/basis/left_1.less | 87 +++--- .../bigScreen/components/basis/left_2.js | 13 - .../bigScreen/components/basis/right_1.js | 179 ++++++------ .../bigScreen/components/basis/right_1.less | 23 +- .../bigScreen/components/basis/right_2.js | 92 +++++- .../sections/bigScreen/components/capacity.js | 21 +- .../bigScreen/components/shuizhan_detail.js | 28 ++ .../bigScreen/containers/systemManagement.js | 9 +- web/package.json | 1 + 62 files changed, 799 insertions(+), 973 deletions(-) delete mode 100644 api/app/lib/models/department.js delete mode 100644 api/app/lib/models/patrol_plan.js delete mode 100644 api/app/lib/models/patrol_record.js delete mode 100644 api/app/lib/models/point.js delete mode 100644 api/app/lib/models/project.js delete mode 100644 api/app/lib/models/resource.js delete mode 100644 api/app/lib/models/user_resource.js create mode 100644 scripts/0.1/schema/0.1user.sql create mode 100644 web/client/assets/images/map.svg create mode 100644 web/client/assets/images/monitor/end.png create mode 100644 web/client/assets/images/monitor/lower-left.png create mode 100644 web/client/assets/images/monitor/lower-right.png create mode 100644 web/client/assets/images/monitor/point.png create mode 100644 web/client/assets/images/monitor/pump-p.png create mode 100644 web/client/assets/images/monitor/pumpPP.png create mode 100644 web/client/assets/images/monitor/pumpPo.png create mode 100644 web/client/assets/images/number/good1.png create mode 100644 web/client/assets/images/number/good10.png create mode 100644 web/client/assets/images/number/good11.png create mode 100644 web/client/assets/images/number/good12.png create mode 100644 web/client/assets/images/number/good2.png create mode 100644 web/client/assets/images/number/good3.png create mode 100644 web/client/assets/images/number/good4.png create mode 100644 web/client/assets/images/number/good5.png create mode 100644 web/client/assets/images/number/good6.png create mode 100644 web/client/assets/images/number/good7.png create mode 100644 web/client/assets/images/number/good8.png create mode 100644 web/client/assets/images/number/good9.png create mode 100644 web/client/assets/images/number/problem1.png create mode 100644 web/client/assets/images/number/problem10.png create mode 100644 web/client/assets/images/number/problem11.png create mode 100644 web/client/assets/images/number/problem12.png create mode 100644 web/client/assets/images/number/problem2.png create mode 100644 web/client/assets/images/number/problem3.png create mode 100644 web/client/assets/images/number/problem4.png create mode 100644 web/client/assets/images/number/problem5.png create mode 100644 web/client/assets/images/number/problem6.png create mode 100644 web/client/assets/images/number/problem7.png create mode 100644 web/client/assets/images/number/problem8.png create mode 100644 web/client/assets/images/number/problem9.png delete mode 100644 web/client/src/sections/bigScreen/components/basis/left_2.js create mode 100644 web/client/src/sections/bigScreen/components/shuizhan_detail.js diff --git a/api/.vscode/launch.json b/api/.vscode/launch.json index 18401bb..1adc141 100644 --- a/api/.vscode/launch.json +++ b/api/.vscode/launch.json @@ -15,7 +15,8 @@ "args": [ "-p 4900", // 研发 - "-g postgres://postgres:123456@10.8.30.166:5432/XunJian", + // "-g postgres://postgres:123456@10.8.30.39:5432/PumpStation", + "-g postgres://FashionAdmin:123456@10.8.30.156:5432/PumpStation", // 测试 // "--apiEmisUrl http://10.8.30.161:1111", // "--qnak XuDgkao6cL0HidoMAPnA5OB10Mc_Ew08mpIfRJK5", diff --git a/api/app/lib/controllers/auth/index.js b/api/app/lib/controllers/auth/index.js index 85a6ab1..7a163b4 100644 --- a/api/app/lib/controllers/auth/index.js +++ b/api/app/lib/controllers/auth/index.js @@ -5,158 +5,128 @@ const MD5 = require('crypto-js/md5'); const moment = require('moment'); const uuid = require('uuid'); -async function login(ctx, next) { - try { - const transaction = await ctx.fs.dc.orm.transaction(); - - const models = ctx.fs.dc.models; - const params = ctx.request.body; - let password = Hex.stringify(MD5(params.password)); - const userRes = await models.User.findOne({ - where: { - username: params.username, - password: password, - delete: false, - enable: true - }, - attributes: { exclude: ['password'] }, - include: [{ - attributes: ["resourceId"], - model: models.UserResource - }] - }); - - - if (!userRes) { - ctx.status = 400; - ctx.body = { - "message": "账号或密码错误" - } - } - - if (userRes) - if (userRes && !userRes.enable) { - ctx.status = 400; - ctx.body = { message: "该用户已被禁用" } - } else { - const token = uuid.v4(); - let deptInfo = null; - if (userRes) { - const { departmentId } = userRes.dataValues; - deptInfo = await models.Department.findOne({ - where: { - id: departmentId - } - }) - } - - if (!userRes) { - ctx.status = 400; - ctx.body = { message: "暂无登录权限,请联系管理员" } - return; - } - - let userData = userRes.dataValues; - let userRslt = Object.assign(userData, { - authorized: true, - token: token, - userResources: userRes ? userRes.userResources.map(r => r.resourceId) : [], - type: deptInfo ? deptInfo.type : '', - deptName: deptInfo ? deptInfo.name : '', - }); - await models.UserToken.create({ - token: token, - userInfo: userRslt, - expired: moment().add(30, 'days').format() - }); - - ctx.status = 200; - ctx.body = userRslt; - } - await transaction.commit(); - } catch (error) { - await transaction.rollback(); - ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); - ctx.status = 400; - ctx.body = { - "message": "登录失败" - } - } +async function login (ctx, next) { + try { + // const transaction = await ctx.fs.dc.orm.transaction(); + + const models = ctx.fs.dc.models; + const params = ctx.request.body; + let password = Hex.stringify(MD5(params.password)); + const userRes = await models.User.findOne({ + where: { + username: params.username, + password: password, + } + }); + + + if (userRes) { + const token = uuid.v4(); + const userInfo = { + authorized: true, + ...userRes.dataValues, + token, + }; + // 记录token + const expiredDay = 7; + const expired = moment().add(expiredDay, 'day').format('YYYY-MM-DD HH:mm:ss') + await models.UserToken.create({ + token: token, + userInfo: userInfo, + expired: expired + }); + ctx.status = 200; + ctx.body = userInfo; + } else { + ctx.status = 400; + ctx.body = { + "message": "账号或密码错误" + } + } + // await transaction.commit(); + } catch (error) { + // await transaction.rollback(); + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + "message": "登录失败" + } + } } -async function varfiyCode(ctx) { - try { - const { models } = ctx.fs.dc; - const { pushBySms, pushByEmail } = ctx.app.fs.utils - const { phone, sig, r } = ctx.request.body - - // 伪造的请求可能由相同的sig参数组成 - const checkSigUsed = await models.PhoneValidateCode.findOne({ - where: { sig: sig } - }); - if (checkSigUsed) { - throw '参数错误!' - } - - // 验证sig正确性 - const checkSig = Hex.stringify(SHA1(phone + r)); - if (!r || !sig || sig != checkSig) { - throw '参数错误!' - } - - let varifyCode = '' - for (let i = 0; i < 6; i++) { - varifyCode += Math.floor(Math.random() * 10) - } - - // await pushBySms({ - // phone: phone, - // templateCode: 'SMS_248250074', - // templateParam: { - // code: varifyCode - // }, - // }) - - await models.PhoneValidateCode.create({ - phone: phone, - code: varifyCode, - sig: sig, - expired: moment().add(10, 'minutes').format('YYYY-MM-DD HH:mm:ss') - }) - - ctx.status = 204; - } catch (error) { - ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); - ctx.status = 400; - ctx.body = { - message: typeof error == 'string' ? error : '获取验证码失败' - } - } +async function varfiyCode (ctx) { + try { + const { models } = ctx.fs.dc; + const { pushBySms, pushByEmail } = ctx.app.fs.utils + const { phone, sig, r } = ctx.request.body + + // 伪造的请求可能由相同的sig参数组成 + const checkSigUsed = await models.PhoneValidateCode.findOne({ + where: { sig: sig } + }); + if (checkSigUsed) { + throw '参数错误!' + } + + // 验证sig正确性 + const checkSig = Hex.stringify(SHA1(phone + r)); + if (!r || !sig || sig != checkSig) { + throw '参数错误!' + } + + let varifyCode = '' + for (let i = 0; i < 6; i++) { + varifyCode += Math.floor(Math.random() * 10) + } + + // await pushBySms({ + // phone: phone, + // templateCode: 'SMS_248250074', + // templateParam: { + // code: varifyCode + // }, + // }) + + await models.PhoneValidateCode.create({ + phone: phone, + code: varifyCode, + sig: sig, + expired: moment().add(10, 'minutes').format('YYYY-MM-DD HH:mm:ss') + }) + + ctx.status = 204; + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + message: typeof error == 'string' ? error : '获取验证码失败' + } + } } -async function logout(ctx) { - try { - const models = ctx.fs.dc.models; - const params = ctx.request.body; - - await models.UserToken.destroy({ - where: { - token: params.token, - } - }); - - ctx.status = 204; - } catch (error) { - ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); - ctx.status = 400; - ctx.body = { - message: typeof error == 'string' ? error : undefined - } - } +async function logout (ctx) { + try { + const models = ctx.fs.dc.models; + const params = ctx.request.body; + + await models.UserToken.destroy({ + where: { + token: params.token, + } + }); + + ctx.status = 204; + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + message: typeof error == 'string' ? error : undefined + } + } } module.exports = { - login, - varfiyCode, - logout, + login, + varfiyCode, + logout, }; \ No newline at end of file diff --git a/api/app/lib/index.js b/api/app/lib/index.js index ee32d26..c6224e4 100644 --- a/api/app/lib/index.js +++ b/api/app/lib/index.js @@ -53,25 +53,25 @@ module.exports.models = function (dc) { // dc = { orm: Sequelize对象, ORM: Seq require(`./models/${filename}`)(dc) }); - const { Department, User, UserResource, Resource, Project, Point, PatrolPlan - } = dc.models; + // const { Department, User, UserResource, Resource, Project, Point, PatrolPlan + // } = dc.models; - UserResource.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); - User.hasMany(UserResource, { foreignKey: 'userId', sourceKey: 'id' }); + // UserResource.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); + // User.hasMany(UserResource, { foreignKey: 'userId', sourceKey: 'id' }); - UserResource.belongsTo(Resource, { foreignKey: 'resourceId', targetKey: 'code' }); - Resource.hasMany(UserResource, { foreignKey: 'resourceId', sourceKey: 'code' }); - Resource.hasMany(Resource, { foreignKey: 'parentResource', sourceKey: 'code' }); + // UserResource.belongsTo(Resource, { foreignKey: 'resourceId', targetKey: 'code' }); + // Resource.hasMany(UserResource, { foreignKey: 'resourceId', sourceKey: 'code' }); + // Resource.hasMany(Resource, { foreignKey: 'parentResource', sourceKey: 'code' }); - User.belongsTo(Department, { foreignKey: 'departmentId', targetKey: 'id' }); - Department.hasMany(User, { foreignKey: 'departmentId', sourceKey: 'id' }); + // User.belongsTo(Department, { foreignKey: 'departmentId', targetKey: 'id' }); + // Department.hasMany(User, { foreignKey: 'departmentId', sourceKey: 'id' }); - Point.belongsTo(Project, { foreignKey: 'projectId', targetKey: 'id' }); - Project.hasMany(Point, { foreignKey: 'projectId', sourceKey: 'id' }); + // Point.belongsTo(Project, { foreignKey: 'projectId', targetKey: 'id' }); + // Project.hasMany(Point, { foreignKey: 'projectId', sourceKey: 'id' }); - PatrolPlan.belongsTo(Project, { foreignKey: 'structureId', targetKey: 'id' }); - Project.hasMany(PatrolPlan, { foreignKey: 'structureId', sourceKey: 'id' }); + // PatrolPlan.belongsTo(Project, { foreignKey: 'structureId', targetKey: 'id' }); + // Project.hasMany(PatrolPlan, { foreignKey: 'structureId', sourceKey: 'id' }); - PatrolPlan.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); - User.hasMany(PatrolPlan, { foreignKey: 'userId', sourceKey: 'id' }); + // PatrolPlan.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' }); + // User.hasMany(PatrolPlan, { foreignKey: 'userId', sourceKey: 'id' }); }; diff --git a/api/app/lib/models/department.js b/api/app/lib/models/department.js deleted file mode 100644 index db844db..0000000 --- a/api/app/lib/models/department.js +++ /dev/null @@ -1,56 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const Department = sequelize.define("department", { - id: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "id", - autoIncrement: true, - unique: "department_id_uindex" - }, - name: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "name", - autoIncrement: false - }, - dependence: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: "上级部门/从属", - primaryKey: false, - field: "dependence", - autoIncrement: false - }, - type: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: "", - primaryKey: false, - field: "type", - autoIncrement: false - } - }, { - tableName: "department", - comment: "", - indexes: [] - }); - - dc.models.Department = Department; - - - - return Department; -}; \ No newline at end of file diff --git a/api/app/lib/models/patrol_plan.js b/api/app/lib/models/patrol_plan.js deleted file mode 100644 index 91e5ddd..0000000 --- a/api/app/lib/models/patrol_plan.js +++ /dev/null @@ -1,105 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const PatrolPlan = sequelize.define("PatrolPlan", { - id: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "id", - autoIncrement: true, - unique: "patrol_plan_id_uindex" - }, - name: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "name", - autoIncrement: false - }, - way: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "way", - autoIncrement: false - }, - structureId: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "structure_id", - autoIncrement: false - }, - startTime: { - type: DataTypes.DATE, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "start_time", - autoIncrement: false - }, - endTime: { - type: DataTypes.DATE, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "end_time", - autoIncrement: false - }, - frequency: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "frequency", - autoIncrement: false - }, - points: { - type: DataTypes.JSONB, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "points", - autoIncrement: false - }, - userId: { - type: DataTypes.INTEGER, - allowNull: true, - comment: null, - primaryKey: false, - field: "user_id", - autoIncrement: false, - }, - patrolCount: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: 0, - comment: null, - primaryKey: false, - field: "patrol_count", - autoIncrement: false - }, - }, { - tableName: "patrol_plan", - comment: "", - indexes: [] - }); - dc.models.PatrolPlan = PatrolPlan; - return PatrolPlan; -}; \ No newline at end of file diff --git a/api/app/lib/models/patrol_record.js b/api/app/lib/models/patrol_record.js deleted file mode 100644 index a71d7ca..0000000 --- a/api/app/lib/models/patrol_record.js +++ /dev/null @@ -1,55 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const PatrolRecord = sequelize.define("PatrolRecord", { - id: { - field: "id", - type: DataTypes.INTEGER, - allowNull: false, - primaryKey: true, - autoIncrement: true, - }, - patrolPlanId: { - field: "patrol_plan_id", - type: DataTypes.INTEGER, - allowNull: false, - primaryKey: false, - autoIncrement: false - }, - lastInspectionTime: { - field: "last_inspection_time", - type: DataTypes.DATE, - allowNull: true, - }, - inspectionTime: { - field: "inspection_time", - type: DataTypes.DATE, - allowNull: true, - }, - points: { - field: "points", - type: DataTypes.JSONB, - allowNull: true, - }, - alarm: { - field: "alarm", - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: false, - }, - pointId: { - field: "point_id", - type: DataTypes.INTEGER, - allowNull: false, - }, - }, { - tableName: "patrol_record", - comment: "", - indexes: [] - }); - dc.models.PatrolRecord = PatrolRecord; - return PatrolRecord; -}; \ No newline at end of file diff --git a/api/app/lib/models/point.js b/api/app/lib/models/point.js deleted file mode 100644 index 978fc7c..0000000 --- a/api/app/lib/models/point.js +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const Point = sequelize.define("point", { - id: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "id", - autoIncrement: true, - unique: "point_id_uindex" - }, - projectId: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "project_id", - autoIncrement: false - }, - name: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "name", - autoIncrement: false - }, - longitude: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "longitude", - autoIncrement: false - }, - latitude: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "latitude", - autoIncrement: false - }, - describe: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "describe", - autoIncrement: false - }, - qrCode: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "qr_code", - autoIncrement: false - }, - }, { - tableName: "point", - comment: "", - indexes: [] - }); - dc.models.Point = Point; - return Point; -}; \ No newline at end of file diff --git a/api/app/lib/models/project.js b/api/app/lib/models/project.js deleted file mode 100644 index 8543137..0000000 --- a/api/app/lib/models/project.js +++ /dev/null @@ -1,97 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const Project = sequelize.define("project", { - id: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "id", - autoIncrement: true, - unique: "project_id_uindex" - }, - img: { - type: DataTypes.ARRAY(DataTypes.STRING), - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "img", - autoIncrement: false - }, - userId: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "user_id", - autoIncrement: false - }, - name: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "name", - autoIncrement: false - }, - type: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "type", - autoIncrement: false - }, - longitude: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "longitude", - autoIncrement: false - }, - latitude: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "latitude", - autoIncrement: false - }, - describe: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "describe", - autoIncrement: false - }, - qrCode: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "qr_code", - autoIncrement: false - }, - }, { - tableName: "project", - comment: "", - indexes: [] - }); - dc.models.Project = Project; - return Project; -}; \ No newline at end of file diff --git a/api/app/lib/models/resource.js b/api/app/lib/models/resource.js deleted file mode 100644 index f8ab18c..0000000 --- a/api/app/lib/models/resource.js +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const Resource = sequelize.define("resource", { - code: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "code", - autoIncrement: false, - unique: "resource_code_uindex" - }, - name: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "name", - autoIncrement: false, - unique: "resource_name_uindex" - }, - parentResource: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "parent_resource", - autoIncrement: false - } - }, { - tableName: "resource", - comment: "", - indexes: [] - }); - dc.models.Resource = Resource; - return Resource; -}; \ No newline at end of file diff --git a/api/app/lib/models/user.js b/api/app/lib/models/user.js index 3ea7040..a3196b9 100644 --- a/api/app/lib/models/user.js +++ b/api/app/lib/models/user.js @@ -13,7 +13,7 @@ module.exports = dc => { primaryKey: true, field: "id", autoIncrement: true, - unique: "user_id_uindex" + unique: "t_user_id_uindex" }, name: { type: DataTypes.STRING, @@ -42,62 +42,8 @@ module.exports = dc => { field: "password", autoIncrement: false }, - departmentId: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: "部门id", - primaryKey: false, - field: "department_id", - autoIncrement: false - }, - email: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "email", - autoIncrement: false - }, - enable: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: null, - comment: "启用状态", - primaryKey: false, - field: "enable", - autoIncrement: false - }, - delete: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "delete", - autoIncrement: false - }, - phone: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: "手机号(小程序使用手机号登录)", - primaryKey: false, - field: "phone", - autoIncrement: false - }, - post: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "职位", - primaryKey: false, - field: "post", - autoIncrement: false - } }, { - tableName: "user", + tableName: "t_user", comment: "", indexes: [] }); diff --git a/api/app/lib/models/user_resource.js b/api/app/lib/models/user_resource.js deleted file mode 100644 index dc8581b..0000000 --- a/api/app/lib/models/user_resource.js +++ /dev/null @@ -1,52 +0,0 @@ -/* eslint-disable*/ -'use strict'; - -module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const UserResource = sequelize.define("userResource", { - id: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "id", - autoIncrement: true, - unique: "post_resource_id_uindex" - }, - userId: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "user_id", - autoIncrement: false, - references: { - key: "id", - model: "post" - } - }, - resourceId: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "resource", - autoIncrement: false, - references: { - key: "code", - model: "resource" - } - } - }, { - tableName: "user_resource", - comment: "", - indexes: [] - }); - - dc.models.UserResource = UserResource; - return UserResource; -}; \ No newline at end of file diff --git a/api/app/lib/models/user_token.js b/api/app/lib/models/user_token.js index 3f2354e..9cd835a 100644 --- a/api/app/lib/models/user_token.js +++ b/api/app/lib/models/user_token.js @@ -13,7 +13,7 @@ module.exports = dc => { primaryKey: true, field: "token", autoIncrement: false, - unique: "user_token_token_uindex" + unique: "t_user_token_token_uindex" }, userInfo: { type: DataTypes.JSONB, @@ -34,7 +34,7 @@ module.exports = dc => { autoIncrement: false } }, { - tableName: "user_token", + tableName: "t_user_token", comment: "", indexes: [] }); diff --git a/scripts/0.1/schema/0.1user.sql b/scripts/0.1/schema/0.1user.sql new file mode 100644 index 0000000..0969ab7 --- /dev/null +++ b/scripts/0.1/schema/0.1user.sql @@ -0,0 +1,26 @@ +create table t_user +( + id serial not null + constraint t_user_pk + primary key, + name varchar(255), + username varchar(255) not null, + password varchar(255) not null +); + +comment on table t_user is '用户表'; + +comment on column t_user.id is '唯一标识'; + +comment on column t_user.name is '姓名'; + +comment on column t_user.username is '用户名'; + +comment on column t_user.password is '密码'; + + +create unique index t_user_id_uindex + on t_user (id); + + +INSERT INTO public.t_user (id, name, username, password) VALUES (DEFAULT, '超级管理员', 'SuperAdmin', 'e10adc3949ba59abbe56e057f20f883e') \ No newline at end of file diff --git a/web/client/assets/images/map.svg b/web/client/assets/images/map.svg new file mode 100644 index 0000000..03ae03a --- /dev/null +++ b/web/client/assets/images/map.svg @@ -0,0 +1,22 @@ + + + 南昌县 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/client/assets/images/monitor/end.png b/web/client/assets/images/monitor/end.png new file mode 100644 index 0000000000000000000000000000000000000000..32e9a76b1224948a94dd261f90cf2f8d59843d74 GIT binary patch literal 10503 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

C#A%X+#DdgPX8#L)- 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/monitor/lower-right.png b/web/client/assets/images/monitor/lower-right.png new file mode 100644 index 0000000000000000000000000000000000000000..323a78c28bcdfb42452694a3bc976f58de4b7f58 GIT binary patch literal 24324 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/monitor/point.png b/web/client/assets/images/monitor/point.png new file mode 100644 index 0000000000000000000000000000000000000000..53590195c63a51de277f7234e51c907e4fdd9d84 GIT binary patch literal 14722 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 QRR91007*qoM6N<$f*h=t2LJ#7 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/monitor/pump-p.png b/web/client/assets/images/monitor/pump-p.png new file mode 100644 index 0000000000000000000000000000000000000000..dea7a1cc62ae9ebe808f943068564defe7842506 GIT binary patch literal 7090 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/monitor/pumpPP.png b/web/client/assets/images/monitor/pumpPP.png new file mode 100644 index 0000000000000000000000000000000000000000..c9727d2881055268a3265e5139fad7d0cd4910f3 GIT binary patch literal 10188 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good1.png b/web/client/assets/images/number/good1.png new file mode 100644 index 0000000000000000000000000000000000000000..4191798e3faa99b49b06ec91d52a92ff3e105f50 GIT binary patch literal 3971 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good10.png b/web/client/assets/images/number/good10.png new file mode 100644 index 0000000000000000000000000000000000000000..bd930e707ac8b89885e3efd9deb6240957c1bd44 GIT binary patch literal 4568 zcmV;}5hw16P)Px`l1W5CR9Hv7SqpR()w%xnYv!E12|)ym1QmqfvWmGy0Wm%<2&fb^s8nkNFM7Qy zR`&ws-Q*hx?(E?ZEH&e1z$V_Ld8%J1VkdrD?kzCmFIcP?8krCo^uWa#n)Y{ zo#d>U*|TTnn}2`%e|($3|6?nStmLJz%0wa&)Bg4e6V?mAE6bFSl@;QQ0VE(Ew>=U7 zi8v(eUm|rLwAudzBs;acW}6@Zt(bFg$9wmA?cYIu4BoP`d90>yJwgiTRSz%A4M*t! z&iO#j-QK`O7l%99lslP>I|2|;X%CF@KuJIN86!a{k7((GRz67O11cZ1_QAHP)UlKv z8l}EO^eeWmcxnYiBGkV32LeU{k;jR>p{#74(~`{wQo(O#+`XPNH=l9`nQ(}G7$FQP zV;<$gfB_2*w3fu!pYn-P5|v75Bc-wJO8a26{TK;GB>|&WsC9xWr8AB8w{YEh*_PG+ z+XxV$-w)V+ncX50bNSEzcqQTN5zgH~j5{u&OljrsPWWxRmDhF%eVqVKfHH?67_Gf{ z!tK5E2)+8nbC5CaP?)MEPW;#4B)qNIK`R%W&bmXBK^JKZg0X^-1pk*;<47fS=k*6 zGjmV7&<$sIc0)!4qdR&`;5}>>|#AD6-n~&{V*K~B>_WXjP zK_ZkrKr0WG^oTL?OD(-aO35svJS~;n2F8DE>&j`HEm#1+Qvyy~_NOCfi~`E%3gKoO zqqn!U9A1%`nSW+hZs*IKP(}u2+@nNnqKvN=++89B+et!sM||)Tr{_DQxh%?;9`8)ISyN(uaMggN@6AL-NS~_d=vLrwxrIA`z z3Z*6zv5qWYT3`)8B-SKlWi`RXwe!L5uZ_Hwp$_2PO8HZaR=M%$vCU0K_AJlL>3j_V z(n~3CJsLB7<9m}2Cs~ks-boftfjxg%v}8Wp%5kF4VP!$ zwe;1|ha!;(-MY1y)YO!j_7D6nJ4Yf&w{EQ=ef!p<4LVnkTQJC1-m6;sMP8zHXXD|0 zZ)N2aj6q|%8tuQfY00BwlNbXle1j4Jsrz2>=$|+jV}X$Ep4YZCC%4PZ!U^S5DxPC~ z&U&aeQmU;*I~A8=-})q_B9DPSZq-vEMkHl5Ko8f~9v{(OUuKh+UMi7SjGy0KCtBas zN?wqNwXBb}9$6dC%)L!3KMRz)YxDB|o|UHQ2@a>Md)^hl9tDIipv;L$uXS!Xv*Qrq zW}M9^|7+d+yKl0?6R`mV9)n1PoD`P7&9c_2NjLtr{`MmtuMstoG5+9NU+JU0_!6U4 zVXW=gV&9K7I!?yTT6qT~(wqKprIg+xExn9r^yq9x*u{ugY_vDMzV^2dmX=0% zZEZvm8$F<=M)w{(X*3~hKIP(o(R!&H&Kb*vE2tv|uY3Kz4~~N+1k0-$CWFCB1fmEa zN5qkHA3bYPB(jo6BA2VAMU!C1RW)2<3_b+_{Q3D$2E%`?dB5Z(sfFu9HIZxdSIHqMToAz`V&>sFNGY9LOo3 zz3%M?$EOpINMx(iAhLc3Xzl_VX8|lY#}G37m5QSG(twYHeR9_jG~_KraM}U2_k>dS zQy}!$)fL^R+3OeGJgb1lVw<({x+Y>xe*%Mj5U?LAdGEFlpMBwYXg+uFJw4EfZIlX$ z1YdLAtg*~SFYXLlzi84%`>ue}Aqa0NiuHeX|K+wNn; zYD(yhvn#sKyLaYx_uw%fYa)I9^2*&80K!TD$O9nnR8J|o#&XnJvEPVki?#BHdWn|T z(CBlG!G4JP7dz@^zDn%OK4-whm6Wl|0O4ifW{l$8?I5VzXZ_-bKTrF>@+bD(ODN{d zsVJ(nAj&IuKL-dCzYaKJy@;KdmAhXAgga9sGNihq`?5#`x#g~<%noiDQf@uYx&NFt8|u`evI+Vdi2i9nfdRe*PwfUVl-JzDQ%&Y{f&$8O@up3w=Dh5 z(656%ejfPZe;(iqu70uzQSMZ}*XVoE`9R17K)w2cZU;(_115yFFvkAIMEEAoou!+< z4mgcA70v#cfPZ@J(>**tzC-zbqwlrN2Y?BP_~99DhteNMiGYyF@cYjMe8Gt615idk zR4Nfr0szKqlcGd&(#2O%$_o+5YmS?7D;I8Khc3FXw%TU=C+DO83cw}9pBgE(|EBg6 zpZY4k5e?po+RWea_n9}?T$7x0$;6eEvdaKYxHUI3v-i3;CVlZQ0$eXT9X;8tNq?#@ zqqR!;EyUn;2K9^`bu%ZW0>{KTgtBr3T;Pgu5fh<)jEe_8e)o}Q+vlPIjej5|#!YQ_ z$pHSxce%9$C>uC>5`b-OD)ti_P;CEx!=GHDwHgux4#b{D>kIq} zA$4NUky4w`_aFI8u~K@ql!?rEy!B;9$XKIgwn5!%N8R%~1Hip6zQ4$D@_D=D=jTi~ zS`cT@y0<57J_+>qShyAdY9p7c@~U08f+4R2aFc1|qd|#O48(@+@s$lDG~(OINC>m4 zD|*-r5c>aY`u$R>XO$P*l4t7=-hac%gjG zlpb?S%jcXPZEX5jORtL;Z+g`r>4T_Cv{n$7_<@r~6VB&T&JGx*m$@0a zV+D5@cg3JJuTQKyZsnAP+b2K3U|97dJr<|)VH<+26>qEB^BZE!<0%*J6CfWG0#O4{ z0*LlQtij%ms*gt5QmOyw7pjbwk4P{2MLgEJS_o&HR^C^r)!=QbXMB-P;FBd%S;WD^ zv06smOAzHdwn}!x*;i5~)={1@Y)#D_#{$sv%8d2Hw^cPfPYm7@fT1v|dUB69+gBX6 z*#ghn-Y^{zY(EyTBc{dP4Z?l!=)1+va9u6Uu%+tK%Y89ORO#w}XP!-o1L_3uyHdn&0au=IJCPx%WI&W!-%bKj4>pPkov ztPpMoN}cD}S7$v`TU)A2OKVweZL)Uz&dt&%z>+LrlE z>)TomtqEs#v}JydEseIUc;ba`mihK6=~914MIi;ZmT~7SV^p1z@%o&+Zntm|3Q;EB z;9>Tk%l|O;D_fKnK@pEa%=Cp~^<8Cuved7o)`M6*qHEVyw8iSx6BZ2e6Ny)~mVuDc zbY$Pc%dGsD(1l#MnZAxMR|$V-UdN)KwWh4P8Qp($Fj2XJ&tp~S#BWRsUy$o`TVb42uF{I?$ z86z3vvzc)65zY3t=0i&}vhs_v^SWFmoUqHdNKnEzbHP_L;Vu#M)N(6I|3YcyR;eyF zD0^DD)r&QMdF)8TGAm~1Q$G6yfBRhV@L&$kV^oMU z7;^~YJW83|DkLP%40NVHi&f+O7+T z`AYj-OG%9JL3(kBMH_cDAN$A0Uc9+6E4$N$!pSHJ)p=JW_&%mk&}0nUW73oMLTFpl8DAznQ8(Sd!N-sU3g4N-o}_6Vh0%GcI^TfbAWOIcCm$0ZYXy+;|}Fa5XuEI zDv)xHjHUM6<#wegSS3Pj*WggegcW}FXzBkMl>gVaU%cj%z(@Z;uqQa25-@C}1HvEW z%*kVpLo6>jbASl}R5(eVvH&!(A7g>q>x2ss_B^=e5W8pGvAJzR`tf60CcackeG1^O z%F2`l0^!0D7ahyNo=}bzaoe0fJ`qEGc!l`}g2p}A?%_&XKcCjZR zfKWJ4`Rs8>P)R^13gJ*oTG4DD<&x@satYzbZ2t#Uru$cvj==-~0000Px_RY^oaR9Hv7SqXGiMVkI=y>AKGfUvee3n(C?ghm8320=s+5bdD0q5*~OvB!1n zc0uI=vdp+m>rBsa89@ZJ$sAEcgDB>K2#6p(MvxX|Ut~>4-g57)ZBD(H2O%J+=jc7> zy<2scx?lbE|KGn9f}eC4R904jd-T|BT-Vi&hbSvsNZ7gO=Y~Q&tikYr8Urc&ga@8y z&$eURo;{`8>3%BJ&`n>2RQh2Ll&n4c#j>Xo0Du6%*uNijxUP#`cd`LM#=cl~XH|}e z^~HqK5`uX*Oj#RBojgi-lrYA@fYB-dDFcuq^Rs~nR-mSRwS4AV7Vi%S?7A2l0UbJiVLzau8!6>CV9Hxj#tp^{VN3vHYygpfP^Roh zln_R1fut1J0@W%oQUpp!Uu!ATptTYp(-RS(>{$s=fqhowC@l^V;`RJ;`CktFK)?op zI|YI3>VaeD_BEJJ;*<{|)Nv3ZT4}K}@Dtw#UgDrpA_*7)CY*q=-%EI&m-4jsmGlE4 zjnouV9*Pt+#~6pD^nIfN87%>{0c8|uBMj1Dl$L}LdbL)v$OtuH%j&1roE5Ou$%=|G zs_)Iu<#HLGf|>J2N;yM-l3uEAwddFEqR1iP+`@LzXhC}(&TYkcB!Veplv<4d75K@x zm#jUQs5`j**wMYajvm~;%Lz5hX>(4`>oH+nr0|56fy%6aPqY*yttK)sQUyp$v4bj9 zT)k>m%^3k_!S);Vd{5wX4kf%8Q|b#Zu`ZRW+Zu@$w2kJrx+oORZA}>mOc`Lp3?(ce zgdM_^698zgRlqX(DnJTrV6_L19o_#~&4F#3^IEj;9g5_aY9)xhCzU*`1AnhlB4Pn6 z>2DJtr*2t3bB#5;?**I%+h^31gE34=i<}xvg^Z+Fs6`Xda;~K$uh$ z!dDZq<-AP%P&9mL1N>5?QdlhR+;~F{_}|$=6y`C*p^y3JN=1 z5su_v&>+p_l(Cs%p0~Q<+5TzrI@?k9;QBn@uN$OgFiA^UEQK)fx&v!#4(?c$+r0e< zjPdzW_`9_d*KSzy=g%Q+>~_=)eV!uWEZCmIruHO;en6?yO3Pr4@6~^v-{PEWnGc&VZlxo*aOCxifXn{KgPz+)?=9Vf;i4!NTXS?9Laawt< zR7P7hp`Q2nmnW(TZ%5;{O&n98lHF(peisSDLo3Q92FYsQ| zN?s6n@x3*Nb}o!GD;x>NoU5gHe`7y6EDQD&373_Xk&226)pPJ;&mv6k#hC6%rH;Ls zo7d*I%n7$8l+4d*(eC!j=ZE=rC3^HIvogdDAhqkFlf2$(!5f3zDL`TngYc0Qv1465 zZeh!WNWHFw7$m&-mbzp6-w#C#ZqYJmuBCjudim68P*z5uqCy>4i7eP210NoMFo|Kp zArOh#;c(u?+{w9+5Vkxg938dnwObQuwOMGTnzq|U3x5{*ng-9>=$%rxipJc5vb20* zYniHDu9WPaN*!C}$B%u@o#=R}{8}YY$(EJVsx8J-bhul|gG(@F!x5O32;*8OoHvqC zwlx|iSAMkMUv^rsP*w&NW01Oa#&iFuRYDiKR-4!eso&d;ruH5bC33@ak8wS>=sfvx}`2b}9MS z5`xGIf>~TizakVV7)^O7pCU49?c#eE_n!Cy`}N?7+JY^gxxExL%m)K)8w_m0oX0xd zJn@C~?8V>zMw}E7Ei}ZwGx4c?Eu3HXmO>*1y*7XHZ=2E*&OY3A!2Po^VdVyyr35nwg>!~tLMzw5^QU2U zcCHJ^N@?88?Kc^XUIJsH0AP920f1NLJlg4Y*R7(iJ5Zirij2f3%=ose)Z`5VrWXL% z2{8cJ3lcidaXWdLpvu+Oqw0jJQbH65soDxK&KY)cOapY1)Prj8p41+*FIaWL@-+lZ@cH$EhmWHA%(xeNOc9u zO1De@yM_azO9&>L0r3CvQ1m9k*oM4ha7nCcva(VdH)CgaqxD7r;DF#WY+!)~m;nG` zgy5CglNw35kuH}{+a3c1mjj?$gv?X}=4LRcH$t%2h>V0A>;8}-bEAj({%uP5MSe2= z5`Y<^wd|mk7KMu zvQoQtF0Jv6pSf#@R_eXe0&cK6%Nnr1Eqifto0L_n+n?E8sFE^vR=`7NT`GHgKh<_K1&1cSn7sYaC9Fa90h~t@lbd?rTm*vh+g{X;zndZ^yJrHNWs9-~YWtypi-$h>Pa3?{BJh0?Bo-NM#u-q1(}25|-kB5l^f1Cm86XQB zCwvE?d|f+IP*PcWx1Y)VkVzYcjhm)4(Ay6MoN>o#N<16jtZ@2_diqzwORg5eD-<$0 z&nQz4S|^(T#>!y4z+sU)2xaS%q@d)R#(*2dm8Gj6BjM~jKOV4OC}d)umZls*1K^BG z)a(O*C;*wqo$z?d_|{N}UUrH~SP3_{*`EV&)?TbiDC4b`!uNeY`6dEA-e|qAkV1MBM_+-pv-N?nDr-Ut>4{?5hf!L zf;T7&_n|CwE+MpZW91_&va`+_&@UljOKVce`NGngNPP{)+@y`1f5LI}zt_bGO$G#& zlsQq#!X=dOM?bH8c=|6X;cV`fb{v5mE4=vI!l*o?RjD%ifs*tiP{mziFbEAiA_HUDcUlgS3UIK)!)LM2_S`2Cw{QRLE;PA(o zvQ8Sz%OM{9EulOghxlb17Co@4v6O!nz>R{RzN4NQC!}~q1l~5`9b1kto1kQ{(L! zm{KFjK z9zQaVAn0NM_mwi3za=*7mXovQhOD&vT!>935?w z(B2c*vkfo)MwCzAei0b-2!Lq@fZmz&Xve>1V}?`G(T4c=PWNC=f+eP61Lq?^d+Lwu zyT=w`F1zKmHb$hDYbm-VleMdSukI_(b0$dP*Bh-%HpgcC{nRA1pr6^}oMDY**} z-W7Q9x0~g)zMeUuwwSO5G(>KX%^Bx4<>s^1BTj!m6Qd0I!<$83efJO(pmi=B6mBt4$kvgFQf>|sa zj*hK-`T9L}kZ6yVECEFtx_4JLf;$^0rKe>=nzqj__jyJ-&%|{qO zU6lx`M6MjVxx%$+Ri>)Y^aI(M^tfv3g&fmmlsQFG$Tfj??DPB<9Y))N3MOEDHXV;QK>2tZBdE|?JWa;H!{J%4V905+juoktzNn=E=!l6#;9IH zrw<~G|BXQ2KR)ga{^SC5xpD zOuY8s+Sq}Spi|(5WB}gm?o44g!04bZG&_{ zTQDU9WcMvZkTPDPcF(bzy`LxRkA9bv+p;HjB7LL`n32I+rA7HC6?gvQ`;0mZI1RS< z2se_fORdM4b|Z`#Oc)}B10hUd$`v6@Q_2Ws4imzw{%%k8n_6pA*rL-pIeA4LA~}T} zop7_3jE5rxGlD6%`YnZ@s81$p_ND5N?5V3gxZmz~M4PqvwG+wjXS9w;k@B??{{epd ziCD!S<7Z-^lK^)ga9?7!hnDPrU)<)Ln#j_E$TflepJao zT7Z;shAF4aiEzdoP6$OxD~*joh&qvwlT*aQ%{o)cJ7_Jj6n;tyZz)n{`m$HYY)Av` zvDq{(uQnxxlK@*ft4k)UF=6MBv??$l)JmAzy^Hi72Ei04Wq{I4&j}?K7ekmbgE6&g zVK8IqGog%NLL8$t)<%PpzL7zIr1ZX%B6wXJe_`c+k6fDuWqm;Ae8!UP2_0^58r@1C z8jLZ0f-v5O+K*F?s0D5}U5MRyp^)y|iP%jT${YHb2~pzMYsj()pPx`;z>k7R9Hu)SqYRC)tUb9R#or4US*TLn*hNE+#m!5u|XpOVxsXu)KMFpfH9Fo zV-i^s3PrX=oZy)_AxMMK(a<59h%}3lhcF_FFo`y(U;x=^dVfn*-EGc&3p6b#I(^RT zS5>!e)p!5*{olV_1YhB=+}%veVT*EISGAsQu6Ib~M@T3y5}}F#IFL$t0AM}Ik{pEaL5KjP@Ij`(10)0ol|2_S0LjgVgOENb5rE*nmV&n^ zOdjh3)1Yx4J6i0kNxj*m|Cj|GB7-5Z>ML?VPdp`H#9#?@BzQ-j< zNid~OxS$;+b{^*`PisJ03jm=(Y6(hn4GNG_LJ&enDJgn`61VQ%`s6F+W7a54n393NGnuNdu|oyz^9wJ%$_W*Aqs#_E z8DLB`rYs=Ts-uR&8rlgSFeL?+GR;fyQ%$E^8c*!1J@N5B3X8jzg(8>SsH9+mdxj46 zTJpm}_+cqLEx9-$q1w6Q&WSA5hA+W6IVuMrw!-)pCa<41XgK4g*mgJU@P!3iuc){ozuI%Z=0VAkk7+ z`{{Z=*;rRl+<80#++7CVX{q&{J6`_Lrt)&viN)sl07!qXO60%}zGcBxT9ax@olaV- zeernhhJu35Lm~z3hhRbhW4413I*%3 zcSG&IzvmTn9!04&NN~SVNpb7WwLgnxuk`&$|Ek$=P)pEG*UUXBXq0h|Hb zd+dXDShfEv!E6jdXkRMTys@CTbCg+;js(;9s2#fJ@0Anx72T7Ii$gIjNmlB3313uj3^ z;QCoJF}9w-gw%On(@T;3PB+?iqz|U7+9@cw+Oa9 zj5TY@0QKJ!LjdJaQwF;K9?&s};g~y0ls~XKPc?fhwFtiJdx=k58jro~gbHuhT6UF^ z|L6Og9{W*iE9U^4Z{7d;8D*gG4nnOw!BZ|M_nw20JN!)woL*_~>x+hK?DrwS2Zkb2Yyv3ap` zRU#TCP*o+%uKPtLBD4Y!dIvxsa6-kCC}k%tW{=)lb^jg!Ko#zRLd4*k3J@g#$sWAt zmh*wift@`6cn7RfmjS}v6vk3%eMAJo`!BeCnp=Y&dG{Ymd6LJZ@Ova%>i?oa6=6(9 zOA%D>i7gzLr3D}p?$Tg~J$#j-WGi8oBP4$=6e<``nbVOFHf_f%KVD|QPW{cXcESt( zs6gM8wN!l~OuJP*+&u-x!B9?uG}0R2zWE35RT^dhz}EnPWan@UXs@RFSCx;J{?*JY zA2pZ6Vy+l=+wbm_(tm+-zbTcdUrnhsNeEt`L681u%i_)1(40vs`i}U?9D*%ZA-t7f zQg1tvZxhOP>dvFCF%120ccL;13^eTQb#H zInCj+GS}k8%{7>i-Wv3CwiOvcnbV6{PITvAANun>bN7!TlvZl3djddUUY33F2@p`4 z1MJQPWax3<{6oW~Qf~l&1prNe@B)NXOaZ1ytEkrKhX^zUj7|a4-&{GP^k8}UW*Uo) z65qIG$xTX$Y94q;{bci6Oz8K844N#dd)I7#sy+?4--zjhq$WEtCdU9^gYD!^Ce*HR z^6Zh@s~)bec>KVdfZ$pH)QFINOoP4)G#Z2u9M$}+h26P8To;LoCk{OWTHSA+jS+fe z#jKJijTMbLm<3hLJGdM`-p$qN_te@<2=oKE(H%SAo_;l@MP? zQhocQw}1P$G~nJtfBX<4XbD1O8zH2b*^zOSS}S+0n=#pBNF_JiyA=Sg)(DSNmi;#I zQ`-SxAVTPf=DJT?3s=lLPz?Y#X+UudtgLc&*Tb%>X$|bbRc`;FV!`2?K#JE4UX9Q* zt7ervV8&yyxnQ_FXu`s!A`lM-eqxi79@h$uQ(7$9|JKrddHsBVjnf$pA9RlN$3hh_dD6L<7*9%)!>^Jj}tn0EeKK{i6Hql0NksT ze0Bf!rMF}(JnX^s2$L~@P$gsGag?%7mc<6{d~MbTQMbk_hGM#GPUn;Xbl;N0m&l}u zT?p{!2a(Oxg!9Ss5By3in47s5FI+jh=L}Zu#ekp=D_gY@kfTk%W z-?MB{j=BwdDCB^QA&iG;faSIw`8P@}f=O}L-PO};b73*($rlA!Yh)ZSQ>0`9M{a(_ zbDghJlPkSC;>z zDDJB_0pS4%qm_(>?`F(yC=OJQSj_d(fK9%XQ-H5x;jBhKwB&H8F)7w+fYD|V2+%Jp zXP3-t8xhN*u4Ofo4}}OyxtCb3K~Gd##sTzMzzE?1fYD0J3g1m>8^GBND=k@H7I4% z87V^_BS+o%>?6GnwT+NDO2j>W(v(Yv5=bNCbQwzIoDO3;Mk6pzH=a_~(Z;O|1w}CGjI046lM$dQ%IvhPQAQ{2S~qKTt^)b8fOBA`Ed19MN}x>u&;bxKyuG_} zR?p{MH=`Kms7f})9enfRaf0V$EwSC?TuRBc`?oKhkPRHuA4Y^ci4fjK2y0T^zUnWNsY=#r3^6fq_IAt}FU6;d!nD|H!2 zaofk+m%iL8`Dv=bg!R^-p0lj*wTy*I8D+P=^Xen77+Uo2A5G^07YlgGyaT^g0MpZ0 z5xf(^_@-xO^lUiS$<7iYN4=pFo*K(FUnl(3QO|4o8%AuZlsv95@3VjF)3qqqv+8@z zPv#J6neucirL@tq^Cn=zcJvDM9B!(Di=jkLt0&L@^aonW-(|4EDMa;+D<19jkLZ%a zq2kENb9mcOJV@orEK?`0+gZpQnYUSO+A;~YUSi!nK|2EBIG>|PT_Oj^}f ziTLY6^6rUv{TfiR0AunkA^4`fu?06~B{384vnTrU@|go9LT?jlMNAROLizn1JAWu< z^j!+h_^nk_YNHE3DGWb&AWenB0~J+V;XQ@lh*aGDf8m6CsJZ*1XtT2)yM9C-cg zUm{E&!-Sspyrw@z@;i;O?MQDz=sLTw@J>_ax9$^sUUv5RW0@df%6#3Fs#KES&b`E^ zjde%=9Lg`gT}jbHNwMtx*XK?4a2!!Y$A^i^$kQlwcdO_`l02{4LulnjSZf}jPYD(?iN{iizWaGBt z;%?*ZP(d$D$O&TEGlqA)qVpXKw$T zR#iHC#pUIIO=P=r+~O+dvgwQJm_u@*)i926?q&la~t)JKWXUiSy-eZ^A`>Ut> zLvMTPYAw+VgxUQtg4*V$Q?FQ7IKQx6kFm@N7ZSoW#iRyN_7GG_hLc5?bT#ePo}8!ZwN!WPcxC#=T$paV_;XZZzzsjY48Wd? zF}*z9MQ2u=VAc^6*2OffF`?2+Hono^cxrc1`yK-eiaHIloxF~eIe-Z>U;Heq#? z+9v$A6T-KY5XfxKaPEPhY&_mne{@%(rS@nz(yoscD!4|;z?MAtrxN16|5qBo(+9RBrBq^KX-pVq%w|&Xk58W5yGEuG$)a{8J@bk> zbr0vaFLlBN27DeRj9_Y+R*(pSL_C#hI+19qJrZv^bxeq)pO@FZ#0eJ<(V&Y(;0Y!9 zAAAJvTYtRg)cI&|F5qm?=sWDE{V*fjFk!aVYAx0>t_dT6s3r&@jEHG60AQjmYB@rS zq@Qd)t%VRk2_n?C7-fXAkj+@g!jxgHh0sbP!t9XcL^?Q5-q#2X_0mcZ!F^wGKcFu9cB6Cm{?12fMBL5 zOP0@MJf6ezI}W>lMVL>N$W z53#_^GaEF7*a9K&I1id6PaT&^d>C-Pl~MLq)uO>ox%al-sQeWd#hvuiB?&G%xV=Nkj>(UMF eivijCp8o@y>%z=%GFMCh0000Px_q)9|UR9Hu)SqXF$Rl5G~R#n}d&H}Q?maqu|3c`pF+yVjv0*Yv09*znksPhy@ zpNb-C>p{TLQIVPFzzBF))JGH)QN~Chihvs+Tb>9K!C?zzPcL=Xcd9xK0Ybo;Iw$F> z+ts(e`!C=B->(q-s>7h%ND;|}&vhgc(e;0tmuHC8{p%3o=^<(%n^4=t;|T!p{s0n* zxPP8VB(EWn@U8&7VTjj_C;Uqj6NpGuv1RQORRDmzq13ayiwim;kqC}>ch&*Tdw5fT ztN0ZLlj|9?dSGg`qQuG~)Cy8!IS7!E$^|V2Na=!<0+dW$bEG8q$F<@h1qUSrc=vnb zO1Vb5qS|OVXLr%eHvtR+KtAXT0BjIMoUw;3r*8faH)9TAHRHM zd&<&{1CB&+-tKNFKYxt6;r6B7G)B`XvqlnTrxQ$#*5XjYjqMX|^r+%IY7o+tSrm-c zQgT-$Y7;_oB?T8s3q=uQb|5{AGAk@ZJYlqFHVGgNXrn+GWk4%1N*PS)0Ig&PE#>d` zZ2a>w$jc*;pRdjdI4^HG@qqTrdnG_{_z^;_Cn&Yj5GDyX5&b3>tK3fsf?%j=ODC;K zn?NAFC9{KJLL5pcK?q?bcp~n`Dobl?j{jU$cIaTmiIM|=5N?y*XEe0}mr0orQgEe} zz)Er~C8u6UXvvL~e%MrLX|CF{@lSgiw{Rqay%6X>`Y+iC;WrVr24QL`CE{D7wH3Pp zq4bNw87+D_fsD3**!6k4=J;=!RYJuM_GF$cyg)iz$DMc8wZ?R>+kcIX7Wpi(=z7U!j z8Tl?qs;aJ0Tt1%jILF{3q6q!1I<1wikN#VgjQXSBW138r#0cdWN@cy0|DZKzekOc@-1czy7B%`MoXEPt(5E};(QCXq*ZQuORpXT?Rbfg#!D6FxFg%#1hL6wRZyP*AU8f1t=R-_|Bwbxw-3U zQPJsOBN2lm&w>GztVH#X#=c8|zUl4{!{xE#tF#okZlZd7ZB4~S#|ho7BzKGvH|$nxlsdzW7S*#BT+-wy!W0Kpz7koh}GSvg~D$d~zl*wRou`G6uwkB^i%h@ox> zLpEp>)&NI{Q9mx2-r+!Fpi{=W?vB5=moZTw74H!x%z#@UV;v$c{-EhjD4vI6Z0WeVBj$$*UuC)S)9_$Mtp^We3}s5Qnw$eYIik_e0d zfB*m}03Zm#@(-5{X74NREHuz+f=C zAPESqUHD}75QLCPff_&a;3&{)WnH3txM+I&QRkz+K9lD$I8^zKlDt`&k>j&2BCfFVbNpml+NxsLD#WWpW%OcPD%cZ z;L##3-D;%aCZpxcdpE!SSjxh05RC6L2(6^d$!65)jhH=l`zKE; zI|T?6j&?7Iv@Q2z)Hf+IlV|^w!6hyNfL;htm9(AKOCD<(Jzw(m9yV*BHmXqY_+G)I zo57$vjh2ObH_sj9Pu=N1rmRC44*-ncVa&doQl}lIq~F#x)4ytn9nR<0lOCA$)0Lon zz(E9PTei&Z>xI&JEj;q&u8PMuap_{|Mwc4{_khv=WR+Q+ii;y0b?P^z7$MvhVYHMo zXCz||!i4qTwq{y!qkxS;UZ3CrI9WLAS$M(=B`b`9Taq!19$Pd$=j9Z;GzdD?c-{13 zE5pT?Qn=Z!8=Z%YnV^kA!8EJsj)Iq?9^hX9;g*l2C>Swa*_C^~{|DGjYcLz6#J90BGVB5sL5~3!ZBC?m79lzRS)L5@6H> zZ|@fjvs6etxE>*ri!i)HS>RVET?)+P7k<8&8?zn&y3}#=(~G9%%(x)1ej+5Bus$Pa zc2!(&lF~)otz8ZVCTXn>SyfFs`bpQh-$Q=`jP4}}t;EdArYzW-5SF)X&9wI#qqU?L zll_4g4hPtQRmPZMNmfH|FM2BH_C_0@GZG^8tR$^zpVqiryAc5zueDycZ}XfR{JB$w z10l4DP^*Hmz;I01o8SNAsYwkLj?=xE?A9jC{CTd?=7A&!!`Bdmp>I9hzViHWds! zXY)hK)pyM}Fa?30lf(*#0OKKxrezoZDzJ6a`=$AC^|w+adb)|)#RgPQqjXQCb>5y$ zulXKFZTdYN2w*5Ae)FT=vYfO5j5^trSik>v^`pxg?Sp6jd?V8Ep-D1A6capZ;gi{G zFF0;fcBqTrD@V<_K}&b7VYz9P* zI8JypA?({GSuF+>EV(mUzr9RZZo zzi61pPqmkQN4@$FCB<*uSoJ4Dx(Z`5Qc0fw?KljUwzwO zM++(5m)xzWjh@J7)EQ$G&lJiXv3J93AJ=c-eWBvg>mGjtQ|mqiu+<>5HxS4gODH{o zi9KZV`}c1*$YsM|?pxi`( zQoLilw(5&`c6dpc7b#{f%Pi#fsA^DqICBm2 z@9iV&3n?QeuWA=_qf51t*9so5C_7%VBoN5B8e`l?O1ax;K5$1tq_jaH#h<(`o-Q92 zX+wY&5^7&!jNTcIR;v&X5S!t@&5PK%Eo=W3}Zw%Z~h15YF<%K-ODwH=(rr&n+K4`oXz+ z@w2qGPQzZe_pO=YdU7j6_-#z>9)NLawCc!eY=xYxCT)jWcCZPhOkqs-AjUS!>}wCr$NW}D#{p&ZT=l?LS9 z->i6OWn+E#NvW!9?h`qLpxFdDy$E9j6Dvw7YlbOnMXBwH)+!OJDypeGwk7?dw%x;- zEv|H&^yY+Fo|p}UdV)3+gm{9sWxyA-xviBzo}w;90wrRV$7(8%Zmq2>Js3#K>}&@z z`fDj1sd=$+`NWMY{_xfL8m^RuQP=CI7GO*VQOY!-3}eCo6H5_Fm8Y%~YGFzprZwMN z`p+NUcX_lnvsrd_dU}g?p>We2I}mO`SujMXMG2+en*qVySTr83I2x-d`z2a+>~Ml7 z+_Z33+hAIgtBr;XDHBFXcY*7QshjifDZh|Cqz|~yps5*AZVr1umC`E^s2IW?Xo3K+ z_htw%MSy`APtF3ZxnN*x(LNR3)qsXGfaV%;DY>Fw?Mk`Pn5zBHcC#{*|q<0|1 z?g*fW5Ux_vU5~h&`RU@Z>yu32vuuN0UY~L5Zj9hdua9j;nD!-aoBHr!jKP>1N-gYdTa4BOjP_n>86{jKrCT9Y;(ep!+tKEs z4JlE){%f`KQToXk?lyQ@FC@{cgjpT@c*HjHTuZ6t#U~(Q0i`T??SW?$FtPmwQ9p*g z`z++$ONb>ALJ99JkPz+>A>1Fe<{Px+8$Wn$KxL9eJ#o+fydWM=E#x$o=rrs>+fgl= zdssXnGT?Y(q?6PnAyD_>fa8yQhj*U*^#41a2Iv4{Ooc!v>?XM8Y_%t;#Q!?={*>MS YAH_wN#441%?EnA(07*qoM6N<$g2sY2VgLXD literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good3.png b/web/client/assets/images/number/good3.png new file mode 100644 index 0000000000000000000000000000000000000000..7aaa37c49333330b6a5d8b091507008d4002f808 GIT binary patch literal 4415 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 TwTv8p00000NkvXXu0mjf&MYY{ literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good5.png b/web/client/assets/images/number/good5.png new file mode 100644 index 0000000000000000000000000000000000000000..882c39bbd109356eb63e45e67c4a48b43b574696 GIT binary patch literal 4266 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 M07*qoM6N<$f*DH(?f?J) literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good6.png b/web/client/assets/images/number/good6.png new file mode 100644 index 0000000000000000000000000000000000000000..2f68253fdcc76f447a53dfa8e543b553cd3d353b GIT binary patch literal 4360 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 A_y7O^ literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good8.png b/web/client/assets/images/number/good8.png new file mode 100644 index 0000000000000000000000000000000000000000..6c68bebccb62ca5bdb390edd7253d66e2d81fe0b GIT binary patch literal 4542 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/good9.png b/web/client/assets/images/number/good9.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0fc6628a6131030f8c1cef441b95c3d81187b8 GIT binary patch literal 4338 zcmVPx_tVu*cR9Hu?SqXGi)w%xnbj}@eF98w~5Sc*%MHEL;OQ_E$6h#DsRvZ9*s810q zG6+(SMG+_tk6K#LGE^Tb5o_xZu?it&bYM^h6_Cg*BtVjzd+*ufTj$(+A%rB-uE$!e zyK{!Uzy1H;{{G=0__zKUR8&-qi;Igi05Wx_C~~%20FY&Y32 z$)x|cf6e>x#)-t~vG-&$34(!6^61gsC6Bn7HPF9`x2R|tDek$$fa7TI-J8a*$^l^t zD4_*}ur8F^`Gm3vW_FlTMvOKfr3+ed5Q2je-dKW^Nu;CzC0!6wfRQdpDL_l^KQDy< zDO{~3->a2;Y)9G5&EPor+yOfd_BZD^x^U#8fW@-2hCl>q-&diRC@j*>1?N`DSlfik;*QVRefp(Nk!y0zupt*y{Xxr89V*doRl$&)onA(C86 zS4r39o?8fIb||ZPE3FMtlDo!eY_tNcH5g++8)1+#+8`6cfQKn9l$MbH?b_KjKMB~U zK=E+Z_l{TFGmYjTYTZhi1zN+=M7(k%PsV<<0$HI@B&Tg4l-(v6jJ6^y5cKFkC^K4V zCEVKTMD58#HB~>BR~J7TelRaudo?pe|N0%`|sf@uO{ z`UN4hj0CJtCV)`erHR6s>tXDY!gw;^2ySb;X|S z?AArvnAS?U8zfH--dr-}m}gaR{L}8M(pi+qSoX33(}x;N-=x%LoX6hNN>?^(ao#Y> zf)PUK28*#@m%KV`1Asw}^E4`jez*_{wc|iqmyrQu{P~@y0d3!2?2j|rT{Pw&&1y{i zaixU!KM=2}+*ozuz`95@Z>TZQUTb${0HYym|30b4TO*_QX9D(j`Xe)8L3Fgi*Kml&yrf4%az#YII$q`0_Pow9J|LeIj<_aVYw!G!+E zdF<_QR_+kWg69!N=dD}z;6sgpO2sBJRl>LK1qBl$n32td(9TNocbFY&Z3iOPV9Hk1 zki5Y=ii^?*>r9JzU_C%1oLy0y+T9E`9l$^Uklv37*|l&|yF)&o8?-b)=8#`|+k)Gr z;BN@wig@hUB0{X|jn*Bd663#FJ?jO}s3{8<6%i;dRu^77ek{UtF2c0jfcj@3*z7J! z?Bk4*e(U}^Zd>L+)-_-T?5JnT`x>KX144ZOAmBS4kVIhiA%tfwn%aIr-NSPh-_tz3 zYUs;<(vsiLd3;kc8QVoMy-f@L10tb|c9c3X53p}t00&=KP_qg%_H$*_QpQ3(EIZg6 zQ8MStzfG8su|nO2ik2BtJRGT!)AtPlte1f?tPW5G05$-46!8*_7Zy+HFg~-v#sFV^ z%OARH?UqTwb86!!{)`bW1g$!2A@BNj-3zayjCDI-{b&K9cn!w%FalM=0?|>FT9rYX zb%`h9^{taxc+8wbIU?zn8G!C75O^_Qv=D*fpy37pG}(X&de$Zc4_f#{yN@#)tq(fm z!9F)V|2w0_<2)HJ<05_pBRpJj{?4xTFAX~dxLe;x9s^9D2SBSZwOrc{4j|NeWzz?f z$DH=U=_LxCRn$A-qh{G zGPD@{QZFHsTZBl~@MO(W1o%Fs#Q|wV;VG5q()W?~Fs3&Gg10COUd&ja2PX8^%^yCo zyh-j(|9*}^XnY#bfJIX~t{6Lamwn_oH^oj*e&6)+juM&G0B}A6w7I=(f2HFf*_3AY z88e^hgU7dMA$qvUn!gxhuF^_gpp72r1MV_#tPNFo4@S5(!gvW|f!hePYbXvBd|5Ja zPhH`zztHGs_x@EI7yrv5n7qo)0A1dXlln1P0=9( zxX+-OgQOJi3m)GtWMT^_7-5WgH${oQk6r`DtOI1e!-Q?JtkCTQvp2W?<2S!*NY1=> zPN~FmkY4kck_&Z9-Ch7qu?9HtoHxAgJJfp+U{xA-V z_LRW$f;T5efV2VQ1rSeNC}k2IB2cvGHn=p=tl@c0HP#6F|daE;9T)3SCF@4*T~DKA7w4>}_>Bg~#R2CbwP6U++T zKnR(?>BA`xG!&W}0-WLJ$Qk8RK$~aN;re%rr*@c_3FYTv-79Z-{u1em&5|c$u3PiJ z2;qB;l7~Tfp*fvecE0*yuQ9R)VS3mY{ZSwo9Z9HFLBf$n!B?XJ=t;6IZ+{#_!Q0U zpql|hBCP3y4pUjjVz_w$VsV_dg(lSstA!PL4#h~$1zi!c8E z%UM;KLwBk~A{1}IjCE3izrzCI^K3hO6~@+wveh+1zFg2JodYx+rbj+oJ{ydgkg_g% zdC`*{#x@nzGTzB}?`OmR^eZXlQYl>#t3JAr(ZKaa%T7wkNjq21n(fi|beW&#a*zI# z$6(CnV?vK`9$Ov`=iWlCU>l6Bm)9@9f9zRBXxh47N?B7)W_YOy0E$_LOkFUo-JYM~ zZrvhOOSeQx-lDeV*xOo5L}_4{6v-Wgy8XZUc+S!Ktt#Kjefo@H$>w<_lvvjpFy2Z1 zEYd9RF2d{(CgkZgZ~j-~Wqy+qQ2%DVGGDsOl#&-DW5>&4@sm4)!RTluI5S3$`1+IS zOV29v{pr%gzvPB#J;AV5gxR@Lx}O-Sk3?JK-;ODxgjh=;YCr5XQXI#@+qd^XnQo3J zYlm7#e6KAS(?>Q`CD(7H+%T&6W})~isYXiGwv)#XejJYG-ffi3kxIPs)rx6j8f&EZ zm@^0K(t*=&MTovZs7<|Al~k&-d5gBgC<{agVH;S$dhDb5L)ZU*w5qfcf!dmijn$P0 z)`pwq4FQBYDaqGpmbhulyUxkRTU9ADlOnAhsOYVeDr0h77ZvcpR8ZPnFBS4N}xJtNKX`%x=E{dOy*Ul2^o zY-)W1v|hV4tfIPFBQKK&=UkvV20A!Njh`jCLiMWl^OMRj0mL zSuJ}oI~?&^vKUkEbAZN_CJ3=AD78Y`=;lgsqJ%(73lPb;iq}@|uBte&S-7>e;q1IC zDYY;5HlQ_Mrc~^~^~H}JZ!EH&p~GE&KCwGRXruoXh%iGaLxlJrTO^^(qW}!a%&j0V9J5#f&gZO80moSyOGaQvODm#VD}|vx7EeAq%{ZR7xp8not%D+kt2s zE0EQVVAfhG4pJm5wGhiGc4vI}=Mg`ofS&#BudX1bE$kJVj_z7Gp*PidBWBDZn8h$< z;9HgWt_Dmje~c+J1bZH^C}9>R-nR{pK9p)oyyrYBF+-U}0U_IHjl8c!Qo2S87b)R> zCnbL!K)(IKyc>6(mejM0-TLZXhr_8-r+eY#`v|7vFtei`SkL_gGa$?Y%ouopQs3k( zAd~`4QO3XKZOW$*WypVzGOo3bE8!kj!aX1~|4JHF%0kVycukg!jP~rg!<^M?ZX^gb zs1jWUI?*fxEfCJ~OZ#BJt0n!0Bm@FMf1LVBU-Rzy!$A6edd#p$+B_jPeN*kpWL*rW gyZ2{a|EXa4fA&S@p*(gB{r~^~07*qoM6N<$f=H26I{*Lx literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem1.png b/web/client/assets/images/number/problem1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2beb61e78f88529fbcc3e5560a1823ff783c85d GIT binary patch literal 3271 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 FV1g;wMY#X~ literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem10.png b/web/client/assets/images/number/problem10.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f193411ca2ff6e66b6419fac0ddd8c8a54a3e7 GIT binary patch literal 3673 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem11.png b/web/client/assets/images/number/problem11.png new file mode 100644 index 0000000000000000000000000000000000000000..61d5589f9bc6e1fd12fa01d831dc3fdbc77ae809 GIT binary patch literal 3457 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem12.png b/web/client/assets/images/number/problem12.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1c81122028ba71ae7e88a1e8c3d4111ed7d595 GIT binary patch literal 3787 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 B6XgH^ literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem2.png b/web/client/assets/images/number/problem2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac2bc828424890215fe6665d2560360d7a01483 GIT binary patch literal 3519 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 P00000NkvXXu0mjf9ag|) literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem4.png b/web/client/assets/images/number/problem4.png new file mode 100644 index 0000000000000000000000000000000000000000..00d7a7fe896dba0b1170218f159a088f6da165ff GIT binary patch literal 3503 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem5.png b/web/client/assets/images/number/problem5.png new file mode 100644 index 0000000000000000000000000000000000000000..4f149678774f5f8753ddbe053411334335978e4c GIT binary patch literal 3493 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 Tfl#lD00000NkvXXu0mjf3$&XY literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem6.png b/web/client/assets/images/number/problem6.png new file mode 100644 index 0000000000000000000000000000000000000000..8880b6c16ea92d407d516a02ef67cb241e871b2c GIT binary patch literal 3557 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 Q4FCWD07*qoM6N<$g2YLIng9R* literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem8.png b/web/client/assets/images/number/problem8.png new file mode 100644 index 0000000000000000000000000000000000000000..117c457a04ab695fb2346b49c7d192e69c1a0df2 GIT binary patch literal 3659 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/number/problem9.png b/web/client/assets/images/number/problem9.png new file mode 100644 index 0000000000000000000000000000000000000000..6fce066c8faa65569e8450bb7b146becdfde1c8e GIT binary patch literal 3515 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 p?iZgrdjk*wby;%$jX~RI{6978h + src="https://webapi.amap.com/maps?v=2.0&key=00f9a29dedcdbd8befec3dfe0cef5003&plugin=AMap.AutoComplete,AMap.PlaceSearch,aMap.DistrictSearch"> diff --git a/web/client/src/layout/containers/layout/index.js b/web/client/src/layout/containers/layout/index.js index 34f3d57..b04d7aa 100644 --- a/web/client/src/layout/containers/layout/index.js +++ b/web/client/src/layout/containers/layout/index.js @@ -34,7 +34,7 @@ const LayoutContainer = props => { const resize_ = (collapsed) => { const extraHeight = headerHeight + footerHeight; - console.log(document.body.clientHeight); + dispatch(resize( document.body.clientHeight - extraHeight - 12, document.body.clientWidth - (collapsed ? 120 : 220) diff --git a/web/client/src/layout/containers/layout/index.less b/web/client/src/layout/containers/layout/index.less index d55219a..ce3bc72 100644 --- a/web/client/src/layout/containers/layout/index.less +++ b/web/client/src/layout/containers/layout/index.less @@ -1,2 +1,3 @@ @import '~perfect-scrollbar/css/perfect-scrollbar.css'; -@import '~nprogress/nprogress.css'; \ No newline at end of file +@import '~nprogress/nprogress.css'; +@import '~simplebar-react/dist/simplebar.min.css'; \ No newline at end of file diff --git a/web/client/src/sections/auth/containers/login.js b/web/client/src/sections/auth/containers/login.js index 708058f..63b673b 100644 --- a/web/client/src/sections/auth/containers/login.js +++ b/web/client/src/sections/auth/containers/login.js @@ -157,7 +157,6 @@ const Login = props => { function mapStateToProps (state) { const { auth, global } = state; - console.log(global); return { user: auth.user, error: auth.error, diff --git a/web/client/src/sections/bigScreen/components/amap.js b/web/client/src/sections/bigScreen/components/amap.js index 24f5a60..240485d 100644 --- a/web/client/src/sections/bigScreen/components/amap.js +++ b/web/client/src/sections/bigScreen/components/amap.js @@ -1,48 +1,114 @@ import React, { useEffect, useState } from 'react'; let map = ''; -const Amap = (props) => { - const [mapComplete, setMapComplete] = useState(false); - - useEffect(() => { - drawMap(); - }, []); - const drawMap = () => { - try { - if (AMap) loadMap(); - } catch (e) { - var script = document.createElement("script"); - script.src = "https://webapi.amap.com/maps?v=2.0&key=00f9a29dedcdbd8befec3dfe0cef5003&plugin=AMap.AutoComplete,AMap.PlaceSearch"; - document.body.appendChild(script); - loadMap(); - } - } - - const loadMap = () => { - map = new AMap.Map("amapId", { - resizeEnable: true, - center: [115.99255, 28.503617], // 地图中心点,初始定位加载显示楼块 - zoom: 14, // 地图显示的缩放级别 - zooms: [5, 20], - pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度 - viewMode: '3D', // 地图模式 - mapStyle: 'amap://styles/fb26776387242721c2fc32e2cb1daccc', // 主题样式 - // rotation: 60 - // showLabel: false - }); - - map.on('complete', function () { - console.log("map-complete") - setMapComplete(true); - }); - window.onload = function () { - console.log("window.onload") - } - }; - - return

-
-
+const Amap = ({ showData }) => { + const [mapComplete, setMapComplete] = useState(false); + + useEffect(() => { + drawMap(); + }, []); + + useEffect(() => { + if (AMap && showData?.length) { + renderMarkers(showData) + } + }, [showData, AMap]); + + const drawMap = () => { + try { + if (AMap) loadMap(); + } catch (e) { + var script = document.createElement("script"); + script.src = "https://webapi.amap.com/maps?v=2.0&key=00f9a29dedcdbd8befec3dfe0cef5003&plugin=AMap.AutoComplete,AMap.PlaceSearch,AMap.Marker"; + document.body.appendChild(script); + loadMap(); + } + } + + const loadMap = () => { + // 图片图层 实现瓦片地图中国地图样式 bounds 第一个点为左下角 第二个点为右上角 + const imageLayer = new AMap.ImageLayer({ + url: '/assets/images/map.svg', + bounds: new AMap.Bounds( + [115.800221, 28.265659], + [116.334849, 28.973298], + ), + zooms: [3, 14], + }); + + map = new AMap.Map("amapId", { + resizeEnable: true, + center: [115.99255, 28.503617], // 地图中心点,初始定位加载显示楼块 + zoom: 10.3, // 地图显示的缩放级别 + zooms: [5, 20], + pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度 + viewMode: '3D', // 地图模式 + mapStyle: 'amap://styles/fb26776387242721c2fc32e2cb1daccc', // 主题样式 + // rotation: 60 + // showLabel: false + layers: [ + AMap.createDefaultLayer(), + imageLayer, + ], + }); + + + + + + map.on('complete', function () { + console.log("map-complete") + setMapComplete(true); + }); + window.onload = function () { + console.log("window.onload") + } + + + }; + + const renderMarkers = (data) => { + + + + // 初始层级 zoom14以下显示聚合点 + // const data = [ + // { lng: 116.117906, lat: 28.678096, name: 'ndjsa d dwqa', }, + + // ] + + + if (data?.length > 0) { + // map.clearMap(); + map.setZoom(10.3) + map.setCenter([116.054664, 28.538966]) + map.setPitch(22.9) + map.setRotation(1.7000) + data?.map((x, index) => { + let marker = new AMap.Marker({ + position: new AMap.LngLat(x.lng, x.lat), + // 将一张图片的地址设置为 icon + icon: '/assets/images/monitor/point.png', + // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 + offset: new AMap.Pixel(-13, -30), + zooms: [5, 20], + title: x.name, + content: `
+ +
${x.name}
+
` + }); + map.add(marker); + }) + } + + } + + return
+
+
} export default Amap; \ No newline at end of file diff --git a/web/client/src/sections/bigScreen/components/basis.js b/web/client/src/sections/bigScreen/components/basis.js index 71971b3..93a28da 100644 --- a/web/client/src/sections/bigScreen/components/basis.js +++ b/web/client/src/sections/bigScreen/components/basis.js @@ -1,47 +1,232 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useState, useRef } from 'react'; import { connect } from 'react-redux'; import { Spin, Card, Modal, TreeSelect, message } from 'antd'; import ProForm, { ProFormText, ModalForm, ProFormSwitch, ProFormTreeSelect } from '@ant-design/pro-form'; +import moment from 'moment' +import CardTitle from './public/cardTitle' +import SimpleBar from 'simplebar-react'; import Left_1 from './basis/left_1'; -import Left_2 from './basis/left_2'; import Right_1 from './basis/right_1'; import Right_2 from './basis/right_2'; +import { POWER_STATIONS } from './shuizhan_detail'; import './basis.less' -const Basis = ({ user, module, setModule }) => { +const Basis = ({ actions, dispatch, user, setshowData }) => { - useEffect(() => { + const { bigScreen } = actions + const [siteList, setSiteList] = useState([]) //站点列表 + const [strucId, setStrucId] = useState() //站点ID + const [pageRefresh1, setPageRefresh1] = useState(false) + const [pageRefresh2, setPageRefresh2] = useState(false) + const [pageRefresh3, setPageRefresh3] = useState(false) + const [left2List, setleft2List] = useState([]) + const [depthWater, setDepthWater] = useState([]) + const [information, setInformation] = useState({}) + + const left1Data = useRef([]) + const left2Data = useRef([]) + const pumpNumber = useRef(0) + + useEffect(async () => { + await dispatch(bigScreen.axyData({ type: 'get', url: `organizations/{orgId}/structures` })).then(async res => { + if (res.success) { + setSiteList(res.payload.data?.map(v => ({ value: v.id, label: v.name, latitude: v.latitude, longitude: v.longitude })) || []) + setshowData(res.payload.data?.map(v => ({ name: v.name, lat: v.latitude, lng: v.longitude })) || []) + setStrucId(res.payload.data[0]?.id) + for (let key in POWER_STATIONS) { + if (POWER_STATIONS[key]?.name == res.payload.data[0]?.name) { + setInformation(POWER_STATIONS[key]) + } + } + //获取所有泵站的集水池液位 + res.payload.data?.map(async v => { + await dispatch(bigScreen.axyData({ type: 'get', url: `structures/${v.id}/factors` })).then(async r => { + //泵站信息 + let informationId = r.payload.data?.find(v => v.name == '泵站信息')?.id + if (informationId) { + await dispatch(bigScreen.axyData({ + type: 'get', url: `structures/${v.id}/stations`, + params: { query: { factorId: informationId } } + })).then(async p => { + if (p.success) { + await dispatch(bigScreen.axyData({ + type: 'get', url: `stations/theme/data`, params: { + query: { + stations: p.payload.data[0]?.groups[0]?.stations[0]?.id, + startTime: moment().startOf('day').format('YYYY-MM-DD HH:mm:ss'), + endTime: moment().endOf('day').format('YYYY-MM-DD HH:mm:ss'), + limit: 1 + } + } + })).then(async d => { + if (d.success) { + left1Data.current?.push({ name: v.name, level: d.payload.data?.stations[0]?.data[0]?.sLiquid_level || 0 }) + setPageRefresh1(!pageRefresh1) + } + }) + } + + }) + } + + //水泵信息 + let waterId = r.payload.data?.find(v => v.name == '泵站水泵')?.id + if (waterId) { + await dispatch(bigScreen.axyData({ + type: 'get', url: `structures/${v.id}/stations`, + params: { query: { factorId: waterId } } + })).then(async p => { + if (p.success) { + pumpNumber.current += p.payload.data[0]?.groups[0]?.stations.length || 0 + setPageRefresh3(!pageRefresh3) + let dataId = [] + p.payload.data?.map(v => { + v.groups?.map(s => { + s.stations?.map(f => { + dataId.push(f.id) + }) + }) + }) + if (dataId.length) { + // 当前时间 + await dispatch(bigScreen.axyData({ + type: 'get', url: `stations/theme/data`, params: { + query: { + stations: dataId.join(), + startTime: moment().startOf('day').format('YYYY:MM:DD HH:mm:ss'), + endTime: moment().endOf('day').format('YYYY:MM:DD HH:mm:ss'), + limit: 1 + } + } + })).then(d => { + if (d.success) { + left2Data.current?.push({ name: v.name, data: d.payload.data?.stations }) + setPageRefresh2(!pageRefresh2) + } + }) + } + } + }) + } + }) + }) + } + }) }, []) - const left1Data = [ - { name: '雄溪站站站站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - { name: '雄溪站', level: 3 }, - ] + + useEffect(async () => { + if (strucId) { + await dispatch(bigScreen.axyData({ type: 'get', url: `structures/${strucId}/factors` })).then(async r => { + //泵站信息 + let informationId = r.payload.data?.find(v => v.name == '泵站信息')?.id + if (informationId) { + await dispatch(bigScreen.axyData({ + type: 'get', url: `structures/${strucId}/stations`, + params: { query: { factorId: informationId } } + })).then(async p => { + if (p.success) { + await dispatch(bigScreen.axyData({ + type: 'get', url: `stations/theme/data`, params: { + query: { + stations: p.payload.data[0]?.groups[0]?.stations[0]?.id, + startTime: moment().add(-24, 'hours').format('YYYY-MM-DD HH:mm:ss'), + endTime: moment().format('YYYY-MM-DD HH:mm:ss'), + limit: 1440 + } + } + })).then(async d => { + if (d.success) { + setDepthWater(d.payload.data?.stations[0]?.data) + } + }) + } + + }) + } + }) + } + + + }, [strucId]) + + return
- - -
+ +
+ +
+
+
地点
+
编号
+
+ + {left2Data.current.map(v =>
+
{v.name}
+
+ {v.data?.map((s, i) => ) + + } + +
+ + +
)} +
+ + + +
+ +
+ +
- - + + +
+
+
+ + 泵站数量:{siteList?.length || 0} +
+
+ + 提升泵数量:{pumpNumber.current} +
} -function mapStateToProps(state) { +function mapStateToProps (state) { const { auth, global } = state; return { user: auth.user, clientHeight: global.clientHeight, + actions: global.actions, }; } diff --git a/web/client/src/sections/bigScreen/components/basis.less b/web/client/src/sections/bigScreen/components/basis.less index fdb330f..b70b22b 100644 --- a/web/client/src/sections/bigScreen/components/basis.less +++ b/web/client/src/sections/bigScreen/components/basis.less @@ -6,7 +6,7 @@ .super-screen-card { position: absolute; top: 100px; - width: 23%; + width: 26%; height: calc(100% - 100px); z-index: 7; color: #fff; diff --git a/web/client/src/sections/bigScreen/components/basis/left_1.js b/web/client/src/sections/bigScreen/components/basis/left_1.js index c980b4c..49eb681 100644 --- a/web/client/src/sections/bigScreen/components/basis/left_1.js +++ b/web/client/src/sections/bigScreen/components/basis/left_1.js @@ -3,20 +3,25 @@ import CardTitle from '../public/cardTitle'; import '../basis.less'; import './left_1.less'; -export default function Left_1(props) { - const { data } = props; - return ( -
- -
- {data?.map(d =>
- -
-
{d.name}
-
{d.level} m
-
-
)} + +export default function Left_1 (props) { + const { data } = props; + + return ( +
+ +
+ {data?.map(d =>
+
+ +
+
{d.name}
+
{d.level?.toFixed(2) || 0} m
+
+
+
)} + +
-
- ) + ) } diff --git a/web/client/src/sections/bigScreen/components/basis/left_1.less b/web/client/src/sections/bigScreen/components/basis/left_1.less index cb505b3..f1f6e43 100644 --- a/web/client/src/sections/bigScreen/components/basis/left_1.less +++ b/web/client/src/sections/bigScreen/components/basis/left_1.less @@ -1,47 +1,54 @@ .liquid-level-content { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; - overflow-y: auto; - - .liquid-level { - width: 46%; - display: flex; - justify-content: space-evenly; - align-items: center; - - .img { - width: 84px; - height: 76px; - } + display: inline-block; + overflow-y: auto; - .info { - width: 101px; - height: 80%; - display: flex; - flex-direction: column; - justify-content: flex-end; - align-items: center; - font-size: 1rem; - text-align: center; - font-family: D-DIN-Italic; + .liquid-level { + width: 100%; + height: 80px; + display: flex; + align-items: center; + .img { + width: 84px; + height: 76px; + } - .name { - background-image: url(/assets/images/monitor/gradation-bg.svg); - width: 100%; - } + .info { + width: 100px; + height: 80%; + display: flex; + flex-direction: column; + align-items: center; + font-size: 1rem; + text-align: center; + font-family: D-DIN-Italic; + justify-content: space-around; + .name { + background-image: url(/assets/images/monitor/gradation-bg.svg); + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } - .level { - background-image: linear-gradient(90deg, #24396e00 2%, #24396e70 51%, #24396e00 100%); - width: 100%; - margin-top: 5px; + .level { + background-image: linear-gradient( + 90deg, + #24396e00 2%, + #24396e70 51%, + #24396e00 100% + ); + width: 100%; + margin-top: 5px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; - .num { - font-size: 1.25rem; - line-height: 1.25rem; - letter-spacing: 2.08px; - } - } + .num { + font-size: 1.25rem; + line-height: 1.25rem; + letter-spacing: 2.08px; } + } } -} \ No newline at end of file + } +} diff --git a/web/client/src/sections/bigScreen/components/basis/left_2.js b/web/client/src/sections/bigScreen/components/basis/left_2.js deleted file mode 100644 index b0caae0..0000000 --- a/web/client/src/sections/bigScreen/components/basis/left_2.js +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import CardTitle from '../public/cardTitle'; -import '../basis.less'; - -export default function Left_2(props) { - return ( -
- -
- -
- ) -} diff --git a/web/client/src/sections/bigScreen/components/basis/right_1.js b/web/client/src/sections/bigScreen/components/basis/right_1.js index 21299aa..3e2d114 100644 --- a/web/client/src/sections/bigScreen/components/basis/right_1.js +++ b/web/client/src/sections/bigScreen/components/basis/right_1.js @@ -4,97 +4,98 @@ import { Select } from 'antd'; import '../basis.less'; import './right_1.less'; -export default function Right_1(props) { - const renderSelect = () => { - return + } + + return ( +
+ +
+
+ +
+
+
+
{data?.water_type}
+
水泵型号
+
+
+
+
+
电动机型号:
+
{data?.elc_type}
+
+
+
+
+
+
变压器型号:
+
{data?.by_type}
+
+
+
+
-
-
-
所属区域:
-
{'象湖站'}
+
+
+
+
类型:
+
{data?.func}
+
+
+
+
泵站规模:
+
{data?.power} (kw)
+
+
+
+
+
机组数量:
+
{data?.num} 台
+
+
+
+
泵站建成时间:
+
{data?.year?.split(',')[0]}
+
+
+
+
+
泵站除险加固时间:
+
{data?.year?.split(',')[1]}
+
+
+
+
所属区域:
+
{data?.area}
+
+
-
-
+
-
- ) + ) } diff --git a/web/client/src/sections/bigScreen/components/basis/right_1.less b/web/client/src/sections/bigScreen/components/basis/right_1.less index 078d8d8..31c581f 100644 --- a/web/client/src/sections/bigScreen/components/basis/right_1.less +++ b/web/client/src/sections/bigScreen/components/basis/right_1.less @@ -23,6 +23,7 @@ justify-content: space-evenly; .detail-item { + width: 100%; height: 32%; .item { @@ -37,14 +38,14 @@ font-family: SourceHanSansCN-Regular; font-weight: 400; font-size: 14px; - color: #C3E6FF; + color: #c3e6ff; } .value { font-family: D-DIN; font-weight: DIN; font-size: 16px; - color: #FFFFFF; + color: #ffffff; } } @@ -54,21 +55,27 @@ } .pump-models { + width: 100%; background-image: url(/assets/images/monitor/pump-models-bg.svg); background-size: cover; .pump-models-value { + width: calc(100% - 60px); font-family: YouSheBiaoTiHei; font-size: 20px; - color: #FFFFFF; + color: #ffffff; letter-spacing: 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } .pump-models-key { + width: 58px; font-family: SourceHanSansCN-Medium; font-weight: 500; font-size: 12px; - color: #C3E6FF; + color: #c3e6ff; letter-spacing: 0; display: flex; align-items: flex-end; @@ -104,13 +111,13 @@ font-family: SourceHanSansCN-Medium; font-weight: 500; font-size: 13px; - color: #63B0FF; + color: #63b0ff; } .value { font-family: YouSheBiaoTiHei; font-size: 16px; - color: #FFFFFF; + color: #ffffff; } } @@ -118,8 +125,8 @@ width: 2px; height: 19px; opacity: 0.45; - background-color: #5F82DC; + background-color: #5f82dc; } } } -} \ No newline at end of file +} diff --git a/web/client/src/sections/bigScreen/components/basis/right_2.js b/web/client/src/sections/bigScreen/components/basis/right_2.js index ec396e4..564258f 100644 --- a/web/client/src/sections/bigScreen/components/basis/right_2.js +++ b/web/client/src/sections/bigScreen/components/basis/right_2.js @@ -1,14 +1,92 @@ import React from 'react'; import CardTitle from '../public/cardTitle'; import '../basis.less'; +import ReactECharts from 'echarts-for-react'; +import moment from 'moment' -export default function Right_2(props) { - return ( -
- -
+export default function Right_2 ({ depthWater }) { + return ( +
+ +
+
+
+ v.time) + }, + { + type: 'inside', + }, + ], + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['集水池液位', '池前(上游)液位'], + right: '10%', + textStyle: { + color: '#FFF', + }, + }, + xAxis: { + type: 'category', + name: "时间", + boundaryGap: false, + data: depthWater?.map(v => moment(v.time).format('MM-DD HH:mm')) + }, + yAxis: { + type: 'value', + name: "单位:M", + areaStyle: { + color: '#FFF', + }, + }, + series: [ + { + type: 'line', + name: '集水池液位', + smooth: true, + areaStyle: { + color: '#0e9cff26', + }, + data: depthWater?.map(v => v.sLiquid_level) + }, + { + type: 'line', + name: '池前(上游)液位', + smooth: true, + areaStyle: { + color: '#0e9cff26', + }, + data: depthWater?.map(v => v.sGrille_level) + }, + + ] + }} + notMerge={true} + lazyUpdate={true} + theme={'ReactEChart'} + // onChartReady={this.onChartReadyCallback} + // onEvents={EventsDict} + // opts={} + /> + + +
-
- ) + ) } diff --git a/web/client/src/sections/bigScreen/components/capacity.js b/web/client/src/sections/bigScreen/components/capacity.js index 6c6655c..df39412 100644 --- a/web/client/src/sections/bigScreen/components/capacity.js +++ b/web/client/src/sections/bigScreen/components/capacity.js @@ -18,7 +18,6 @@ const Capacity = ({ actions, dispatch, user, }) => { useEffect(() => { dispatch(bigScreen.axyData({ type: 'get', url: `organizations/{orgId}/structures` })).then(res => { - // console.log(res); if (res.success) { setSiteList(res.payload.data?.map(v => ({ value: v.id, label: v.name })) || []) setStrucId(res.payload.data[0]?.id) @@ -123,7 +122,6 @@ const Capacity = ({ actions, dispatch, user, }) => { let find2 = month?.find(c => c.id == u.id) let find3 = year?.find(c => c.id == u.id) - // console.log(find1); pumpSun.push({ today: u?.data[0]?.eMotor_EQ && find1?.data[0]?.eMotor_EQ ? (u?.data[0]?.eMotor_EQ - find1?.data[0]?.eMotor_EQ) : '--', sameMonth: u?.data[0]?.eMotor_EQ && find2?.data[0]?.eMotor_EQ ? (u?.data[0]?.eMotor_EQ - find2?.data[0]?.eMotor_EQ) : '--', @@ -227,7 +225,7 @@ const Capacity = ({ actions, dispatch, user, }) => { let find2 = month?.find(c => c.id == u.id) let find3 = year?.find(c => c.id == u.id) - // console.log(find1); + cabinetSun.push({ today: u?.data[0]?.eQF_EQ && find1?.data[0]?.eQF_EQ ? (u?.data[0]?.eQF_EQ - find1?.data[0]?.eQF_EQ) : '--', sameMonth: u?.data[0]?.eQF_EQ && find2?.data[0]?.eQF_EQ ? (u?.data[0]?.eQF_EQ - find2?.data[0]?.eQF_EQ) : '--', @@ -284,21 +282,6 @@ const Capacity = ({ actions, dispatch, user, }) => { }) } - await dispatch(bigScreen.axyData({ - type: 'get', url: `stations/theme/data`, params: { - query: { - stations: 56643, - startTime: moment().startOf('day').format('YYYY-MM-DD HH:mm:ss'), - endTime: moment().endOf('day').format('YYYY-MM-DD HH:mm:ss'), - limit: 1 - } - } - })).then(d => { - if (d.success) { - - - } - }) setPumpData(pump) setCabinetData(cabinetSun) @@ -358,7 +341,7 @@ const Capacity = ({ actions, dispatch, user, }) => {
{[1, 3, 5].includes(v.data[0]?.sMotor_RunMode) ? '启动' : [2, 4, 7].includes(v.data[0]?.sMotor_RunMode) ? '停止' : v.data[0]?.sMotor_RunMode == 7 ? '故障' : '无状态'}
+ }}>{[1, 3, 5].includes(v.data[0]?.sMotor_RunMode) ? '停止' : [2, 4, 6].includes(v.data[0]?.sMotor_RunMode) ? '运行' : v.data[0]?.sMotor_RunMode == 7 ? '故障' : '无状态'}
diff --git a/web/client/src/sections/bigScreen/components/shuizhan_detail.js b/web/client/src/sections/bigScreen/components/shuizhan_detail.js new file mode 100644 index 0000000..828967b --- /dev/null +++ b/web/client/src/sections/bigScreen/components/shuizhan_detail.js @@ -0,0 +1,28 @@ +const POWER_STATIONS = { + '象湖站': { area: '象湖站', name: '象湖电排站', func: '排涝', power: 1050, num: 5, elc_type: 'JsL10—12(210KW)', water_type: '1200ZLB—160轴流泵', by_type: 's9—M500KVA、s9—M800KVA', year: ' 2008年, 空', rightTo: '县城管局', managerUnit: '南昌县象湖联圩管理站', managers: '胡铁根、陈江、陈亮', costFrom: '南昌县象湖联圩管理站', remark: '空' }, + '沥山站': { area: '象湖站', name: '沥山电排站', func: '排涝', power: 1680, num: 8, elc_type: 'JsL10—12(210KW)', water_type: '1200ZLB—160轴流泵', by_type: 's9—M1000KVA/2', year: ' 2004年, 空', rightTo: '县城管局', managerUnit: '南昌县象湖联圩管理站', managers: '宗磊、李文章、熊大方', costFrom: '南昌县象湖联圩管理站', remark: '空' }, + '雄溪站': { area: '象湖站', name: '雄溪电排站', func: '排涝', power: 630, num: 3, elc_type: 'JsL10—12(210KW)', water_type: '1200ZLB—160轴流泵', by_type: 's9—M315KVA、s9—M500KVA', year: ' 2004年, 空', rightTo: '县城管局', managerUnit: '南昌县象湖联圩管理站', managers: '涂三毛、刘文红彭伟红、童珊玲、李跃兰(县聘泵站值守人员)', costFrom: '南昌县象湖联圩管理站', remark: '空' }, + '张坊站': { area: '象湖站', name: '张坊电排站', func: '排涝', power: 2500, num: 5, elc_type: 'YL630-16/1430(500KW)', water_type: '1400ZLB-5立式半调节轴流泵', by_type: 'SCB11-160/10/0.4', year: ' 2020年, 空', rightTo: '县城管局', managerUnit: '还未明确管理单位,由水利局代管', managers: '康玉明、赵先福、殷长和、肖玉平', costFrom: '水利局垫付', remark: '工资发放至2021年12月止' }, + '万寿湖站': { area: '象湖站', name: '万寿湖电排站', func: '排涝', power: 660, num: 3, elc_type: 'JsL14—12(220KW)', water_type: '1000ZLB-5立式半调节轴流泵', by_type: 'SCB11-1000/10/0.4、SCB11-80/10/0.4', year: ' 2020年, 空', rightTo: '县城管局', managerUnit: '还未明确管理单位,由水利局代管', managers: '夏小生、王刚', costFrom: '水利局垫付', remark: '工资发放至2021年12月止' }, + '八月湖站': { area: '东新乡', name: '八月湖一站', func: '排灌结合', power: 840, num: 4, elc_type: 'JSL12—14', water_type: '1000ZLB—4轴流泵', by_type: 'S91000KVA', year: ' 1974年, 2009年', rightTo: '县城管局', managerUnit: '东新乡', managers: '邓重志、熊春华、邓仁凯、邓小玉、邓必华', costFrom: '由排灌站直接在乡财务办理缴费', remark: '空' }, + '新八月湖站': { area: '东新乡', name: '八月湖二站', func: '纯排', power: 1050, num: 5, elc_type: 'JSL12—14', water_type: '1000ZLB—4轴流泵', by_type: 'S9800KVA2', year: ' 1985.4年, 2009年', rightTo: '县城管局', managerUnit: '东新乡', managers: '邓重志、熊春华、邓仁凯、邓小玉、邓必华', costFrom: '由排灌站直接在乡财务办理缴费', remark: '空' }, + '河下站': { area: '东新乡', name: '河下电排站', func: '排灌结合', power: 320, num: 4, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: 'S9315KVA', year: ' 1972年, 1987年', rightTo: '县城管局', managerUnit: '河下村', managers: '万增福', costFrom: '由河下村排灌站直接缴费', remark: '空' }, + '石岐站': { area: '东新乡', name: '石岐电排站', func: '排灌结合', power: 340, num: 3, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: 'S9315KVA', year: ' 1974年, 1988年', rightTo: '县城管局', managerUnit: '石岐村', managers: '万象保', costFrom: '由石岐村排灌站直接缴费', remark: '空' }, + '东新乡': { area: '东新乡', name: '利用姚家塘电排站', func: '排灌结合', power: 240, num: 3, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: 'S9315KVA', year: ' 1974年, 1992年', rightTo: '县城管局', managerUnit: '利用村', managers: '蒋淑仁', costFrom: '由利用村排灌站直接缴费', remark: '空' }, + '东新乡': { area: '东新乡', name: '汇仁大道排水泵站', func: '纯排', power: 260, num: 2, elc_type: 'Y67—130kw', water_type: '20ZLB—70轴流泵', by_type: '315KVA箱式变压器', year: ' 2014年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '蒋国冬', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, + '东新乡': { area: '东新乡', name: '小洲杨家湾电排站', func: '纯排', power: 60, num: 2, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: '80KVA箱式变压器', year: ' 2013年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '胡又莲', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, + '东新乡': { area: '东新乡', name: '石岐补水站', func: '灌溉', power: 260, num: 2, elc_type: 'Y67—130kw', water_type: '20ZLB—70轴流泵', by_type: 'S9_315KVA变压器', year: ' 2014年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '万和全', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, + '象湖一号闸': { area: '东新乡', name: '象湖南电排站', func: '纯排', power: 60, num: 2, elc_type: 'Y—200T—4', water_type: 'ZLB28—70轴流泵', by_type: '80KVA箱式变压器', year: ' 2013年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '陶小弟', costFrom: '由乡水管站直接垂管缴费', remark: '空' }, + '东新乡': { area: '东新乡', name: '东莲路节制闸', func: '排涝', power: '空', num: '空', elc_type: '空', water_type: '空', by_type: '空', year: ' 2009年, 空', rightTo: '县城管局', managerUnit: '东新乡', managers: '蒋永新', costFrom: '由乡水管站直接垂管缴费', remark: '调节东莲路景观明渠水位' }, + '三山站': { area: '富山乡', name: '三山电排站', func: '排涝', power: 390, num: 3, elc_type: '空', water_type: '空', by_type: '空', year: ' 1973年, 2008年', rightTo: '县城管局', managerUnit: '三山村村委会', managers: '空', costFrom: '富山乡', remark: '空' }, + '河外泵站': { area: '富山乡', name: '河外电排站站', func: '排涝', power: 90, num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 1984年, 2021年', rightTo: '县城管局', managerUnit: '三山村村委会', managers: '空', costFrom: '富山乡', remark: '空' }, + '东山站': { area: '富山乡', name: '东山电排站', func: '排涝', power: 2010, num: 12, elc_type: '6台180、6台155', water_type: '空', by_type: '1250、1650', year: ' 1983年, 2008年', rightTo: '富山乡', managerUnit: '富山乡', managers: '空', costFrom: '富山乡', remark: '排涝能力偏小' }, + '河口电排站': { area: '县城投', name: '河口电排站', func: '排涝', power: 6250, num: 5, elc_type: 'TL1250-30/2600(12500KW)', water_type: '2050ZLQ轴流泵', by_type: 'SCB11-630/10/0.4(2台)', year: ' 2021年, 空', rightTo: '县城管局', managerUnit: '县城投公司', managers: '空', costFrom: '县城投公司', remark: '空' }, + '县城投': { area: '县城投', name: '芳湖路提升泵站', func: '排涝', power: 225, num: 3, elc_type: 'Y2-315M-8(75KW)', water_type: 'ZLDB-立式单基础轴流泵', by_type: 'ZGS13-200KVA、ZGS13-400KVA', year: ' 2019年, 空', rightTo: '县城管局', managerUnit: '还未明确管理单位,由工人代管', managers: '廖良斌', costFrom: '县城投公司', remark: '空' }, + '县城投': { area: '县城投', name: '三干渠富山大道闸', func: '控制闸', power: '空', num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 2018年, 空', rightTo: '县城管局', managerUnit: '县城投公司(水投公司)', managers: '葛江波', costFrom: '县城投公司(水投公司)', remark: '空' }, + '县城投': { area: '县城投', name: '三干渠银湖二路明渠闸', func: '控制闸', power: '空', num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 2018年, 空', rightTo: '县城管局', managerUnit: '县城投公司(水投公司)', managers: '葛江波', costFrom: '县城投公司(水投公司)', remark: '空' }, + '县城投': { area: '县城投', name: '三干渠汇仁大道明渠闸', func: '控制闸', power: '空', num: 2, elc_type: '空', water_type: '空', by_type: '空', year: ' 2018年, 空', rightTo: '县城管局', managerUnit: '县城投公司(水投公司)', managers: '葛江波', costFrom: '县城投公司(水投公司)', remark: '空' }, +} + + +export { POWER_STATIONS } \ No newline at end of file diff --git a/web/client/src/sections/bigScreen/containers/systemManagement.js b/web/client/src/sections/bigScreen/containers/systemManagement.js index 18dcd04..094838d 100644 --- a/web/client/src/sections/bigScreen/containers/systemManagement.js +++ b/web/client/src/sections/bigScreen/containers/systemManagement.js @@ -15,7 +15,8 @@ const TreeNode = Tree.TreeNode; const SystemManagement = ({ clientHeight, user, history }) => { - const [module, setModule] = useState('capacity') + const [module, setModule] = useState('basis') + const [showData, setshowData] = useState([]) useEffect(() => { }, []) @@ -33,8 +34,8 @@ const SystemManagement = ({ clientHeight, user, history }) => {
{module == 'basis' ? <> -
- +
+ : ""} {module == 'capacity' ? : ""} {module == 'electrical' ? : ""} @@ -43,7 +44,7 @@ const SystemManagement = ({ clientHeight, user, history }) => { ) } -function mapStateToProps(state) { +function mapStateToProps (state) { const { auth, global } = state; return { user: auth.user, diff --git a/web/package.json b/web/package.json index 6ea0a81..a1e17ed 100644 --- a/web/package.json +++ b/web/package.json @@ -100,6 +100,7 @@ "react-router-breadcrumbs-hoc": "^4.0.1", "react-sortable-hoc": "^2.0.0", "shortid": "^2.2.16", + "simplebar-react": "^3.2.4", "superagent": "^6.1.0", "uuid": "^8.3.1", "webpack-dev-server": "^3.11.2",