Browse Source

Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev

release_0.0.1
wanyiwei 3 years ago
parent
commit
d64cbccd15
  1. 1
      Highways4Good
  2. 155
      api/app/lib/controllers/data/bus.js
  3. 27
      api/app/lib/controllers/data/vehicle.js
  4. 16
      api/app/lib/controllers/organization/department.js
  5. 153
      api/app/lib/controllers/overview/building.js
  6. 2
      api/app/lib/controllers/overview/index.js
  7. 68
      api/app/lib/controllers/overview/management.js
  8. 49
      api/app/lib/controllers/overview/operation.js
  9. 493
      api/app/lib/models/bus_car.js
  10. 232
      api/app/lib/models/bus_line.js
  11. 245
      api/app/lib/models/road.js
  12. 17
      api/app/lib/models/statistic.js
  13. 55
      api/app/lib/routes/data/index.js
  14. 26
      api/app/lib/routes/overview/index.js
  15. 113
      api/log/development.log
  16. 0
      scripts/0.0.1/data/1_update_statistic_data.sql
  17. 4
      scripts/0.0.1/data/1_update_user_data.sql
  18. 8
      scripts/0.0.1/data/1_update_user_dep_data.sql
  19. BIN
      scripts/0.0.1/data/工具脚本(无需执行)/data/公交/车辆信息/四公司车辆信息(1).xls
  20. BIN
      scripts/0.0.1/data/工具脚本(无需执行)/data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx
  21. BIN
      scripts/0.0.1/data/工具脚本(无需执行)/data/治超/非现场处罚总台账更新至2022.7.5(最新).xlsx
  22. 58
      scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js
  23. 14
      scripts/0.0.1/data/工具脚本(无需执行)/index.js
  24. 25
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_字段对应.json
  25. 25
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据字段对应.json
  26. 25
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据库表对应.json
  27. 29
      scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据脚本对应.sql
  28. 54
      scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_字段对应.json
  29. 54
      scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据字段对应.json
  30. 54
      scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据库表对应.json
  31. 58
      scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据脚本对应.sql
  32. 29
      scripts/0.0.1/data/工具脚本(无需执行)/道路_字段对应.json
  33. 29
      scripts/0.0.1/data/工具脚本(无需执行)/道路_数据字段对应.json
  34. 29
      scripts/0.0.1/data/工具脚本(无需执行)/道路_数据库表对应.json
  35. 40
      scripts/0.0.1/data/工具脚本(无需执行)/道路_数据脚本对应.sql
  36. 5
      weapp/package-lock.json
  37. 1
      weapp/package.json
  38. 1
      weapp/src/app.config.js
  39. 3
      weapp/src/packages/patrol/index.config.js
  40. 243
      weapp/src/packages/patrol/index.jsx
  41. 116
      weapp/src/packages/patrol/index.scss
  42. 0
      weapp/src/packages/patrolView/index.config.js
  43. 125
      weapp/src/packages/patrolView/index.jsx
  44. 135
      weapp/src/packages/patrolView/index.scss
  45. 2
      weapp/src/pages/auth/login/login.scss
  46. 8
      weapp/src/pages/home/index.jsx
  47. 48
      weapp/src/pages/home/index.scss
  48. 40
      weapp/src/pages/user/index.jsx
  49. 111
      weapp/src/pages/user/index.scss
  50. 0
      weapp/src/static/img/home/fill-bg.svg
  51. 23
      weapp/src/static/img/my/card-bg.svg
  52. BIN
      weapp/src/static/img/my/head.png
  53. 13
      weapp/src/static/img/my/more.svg
  54. 18
      weapp/src/static/img/my/pswd.svg
  55. 14
      weapp/src/static/img/my/report.svg
  56. 15
      weapp/src/static/img/patrol/arrow-down.svg
  57. BIN
      weapp/src/static/img/patrolView/card-img.png
  58. BIN
      weapp/src/static/img/patrolView/chevron-down.png
  59. 30
      weapp/src/static/img/patrolView/conserve-active.svg
  60. 32
      weapp/src/static/img/patrolView/conserve.svg
  61. 29
      weapp/src/static/img/patrolView/patrol-active.svg
  62. 27
      weapp/src/static/img/patrolView/patrol.svg
  63. BIN
      weapp/src/static/img/patrolView/search.png
  64. 118
      web/client/assets/color.less
  65. BIN
      web/client/assets/images/leadership/di.png
  66. BIN
      web/client/assets/images/leadership/jiejue.png
  67. BIN
      web/client/assets/images/leadership/mingri.png
  68. BIN
      web/client/assets/images/leadership/pingshi.png
  69. BIN
      web/client/assets/images/leadership/road.png
  70. BIN
      web/client/assets/images/leadership/shiyantu.png
  71. BIN
      web/client/assets/images/leadership/zibiaoti.png
  72. BIN
      web/client/assets/images/quanju/circle2.png
  73. BIN
      web/client/assets/images/quanju/kelvhua_bdbg.png
  74. 77
      web/client/src/sections/fillion/actions/infor.js
  75. 1824
      web/client/src/sections/fillion/components/bridgeTable.js
  76. 118
      web/client/src/sections/fillion/components/compileDrawer.js
  77. 124
      web/client/src/sections/fillion/components/configModal.js
  78. 56
      web/client/src/sections/fillion/components/enforceTable.js
  79. 59
      web/client/src/sections/fillion/components/highwaysTable.js
  80. 130
      web/client/src/sections/fillion/components/infor/details.js
  81. 118
      web/client/src/sections/fillion/components/inforTable.js
  82. 1629
      web/client/src/sections/fillion/components/operationalTable.js
  83. 5
      web/client/src/sections/fillion/components/promotionalTable.js
  84. 71
      web/client/src/sections/fillion/components/publicTable.js
  85. 1741
      web/client/src/sections/fillion/components/transportationTable.js
  86. 6
      web/client/src/sections/fillion/containers/bridge.js
  87. 2
      web/client/src/sections/fillion/containers/enforce.js
  88. 2
      web/client/src/sections/fillion/containers/highways.js
  89. 2
      web/client/src/sections/fillion/containers/infor.js
  90. 124
      web/client/src/sections/fillion/containers/infor/details.js
  91. 2
      web/client/src/sections/fillion/containers/maintenance.js
  92. 2
      web/client/src/sections/fillion/containers/operational.js
  93. 2
      web/client/src/sections/fillion/containers/patrol.js
  94. 2
      web/client/src/sections/fillion/containers/promotional.js
  95. 2
      web/client/src/sections/fillion/containers/public.js
  96. 2
      web/client/src/sections/fillion/containers/transportation.js
  97. 2
      web/client/src/sections/fillion/containers/videois.js
  98. 4
      web/client/src/sections/organization/containers/user.js
  99. 49
      web/client/src/sections/quanju/containers/footer/build/Leftbottom.js
  100. 52
      web/client/src/sections/quanju/containers/footer/build/Rightbottom.js

1
Highways4Good

@ -1 +0,0 @@
Subproject commit cbdfefa311b3a886f44cbc68f55bb6741655312b

155
api/app/lib/controllers/data/bus.js

@ -0,0 +1,155 @@
'use strict';
async function lineGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { fleet } = ctx.query;
const findOption = {
order: [['id', 'DESC']],
where: {
},
}
if (fleet) {
findOption.where.fleet = { $like: `%${fleet}%` }
}
const roadRes = await models.BusLine.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function lineEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.lineId) {
await models.BusLine.create(data)
} else {
await models.BusLine.update(
data, {
where: {
id: data.lineId
}
})
}
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 lineDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { lineId } = ctx.params;
await models.BusLine.destroy({
where: {
id: lineId
}
})
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 carGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { fleet } = ctx.query;
const findOption = {
order: [['id', 'DESC']],
where: {
},
}
if (fleet) {
findOption.where.fleet = { $like: `%${fleet}%` }
}
const roadRes = await models.BusCar.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function carEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.carId) {
await models.BusCar.create(data)
} else {
await models.BusCar.update(
data, {
where: {
id: data.carId
}
})
}
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 carDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { carId } = ctx.params;
await models.BusCar.destroy({
where: {
id: carId
}
})
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 = {
lineGet, lineEdit, lineDel,
carGet, carEdit, carDel,
};

27
api/app/lib/controllers/data/vehicle.js

@ -3,8 +3,13 @@
async function get (ctx) {
try {
const models = ctx.fs.dc.models;
const { type } = ctx.request.body;
const vehicleRes = await models.Vehicle.findAll()
const vehicleRes = await models.Statistic.findAll({
where: {
type
}
})
ctx.status = 200;
ctx.body = vehicleRes
@ -20,18 +25,18 @@ async function get (ctx) {
async function edit (ctx) {
try {
const models = ctx.fs.dc.models;
const { vehicleId, name, count } = ctx.request.body;
const { id, name, count, type } = ctx.request.body;
if (!vehicleId) {
const vehicleRes = await models.Vehicle.create({
name, count
if (!id) {
await models.Statistic.create({
name, count, type: type
})
} else {
const vehicleRes = await models.Vehicle.update({
name, count
await models.Statistic.update({
name, count, type: type
}, {
where: {
id: vehicleId
id: id
}
})
}
@ -49,11 +54,11 @@ async function edit (ctx) {
async function del (ctx) {
try {
const models = ctx.fs.dc.models;
const { vehicleId } = ctx.params;
const { id } = ctx.params;
const vehicleRes = await models.Vehicle.destroy({
await models.Statistic.destroy({
where: {
id: vehicleId
id: id
}
})

16
api/app/lib/controllers/organization/department.js

@ -121,6 +121,18 @@ async function delDep (ctx) {
getDep(d.dataValues)
}
const undeleteUserCount = await models.User.count({
where: {
departmentId: {
$in: depIds
},
delete: false
}
})
if (undeleteUserCount) {
throw '该部门下有用户,不能删除'
}
await models.Department.update({
delete: true,
}, {
@ -144,7 +156,9 @@ async function delDep (ctx) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {}
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}

153
api/app/lib/controllers/overview/building.js

@ -0,0 +1,153 @@
'use strict';
const areaCode = {
"360121100000": "莲塘镇",
"360121101000": "向塘镇",
"360121102000": "三江镇",
"360121103000": "塘南镇",
"360121104000": "幽兰镇",
"360121105000": "蒋巷镇",
"360121106000": "武阳镇",
"360121107000": "冈上镇",
"360121108000": "广福镇",
"360121191000": "昌东镇",
"360121192000": "麻丘镇",
"360121200000": "泾口乡",
"360121201000": "南新乡",
"360121202000": "塔城乡",
"360121203000": "黄马乡",
"360121204000": "富山乡",
"360121205000": "东新乡",
"360121206000": "八一乡",
"360121403000": "小蓝经济开发区",
"360121471000": "银三角管理委员会",
"360121501000": "五星垦殖场",
"360121572000": "良种繁殖场",
}
async function roadState (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const roadRes = await models.Road.findAll({})
const projectRoadRes = await models.Project.findAll({
type: 'road',
})
const roadState = {
// 在建数量
buildingRoad: 0,
// 已建数量
buildedRoad: 0,
// 乡镇统计
townRoad: {
},
// 类型统计
roadType: {
'县': 0,
'乡': 0,
'村': 0,
},
// 在建项目统计
townProject: {
},
// 等级统计
roadLevel: {
},
// 养护周期
curingPeriod: {
frequent: 0,
season: 0,
},
// 绿化里程
greenMileage: {
'县': {
canBeGreen: 0,
isGreen: 0,
},
'乡': {
canBeGreen: 0,
isGreen: 0,
},
'村': {
canBeGreen: 0,
isGreen: 0,
},
}
}
let roadCode = new Set()
for (let r of roadRes) {
roadCode.add(r.routeCode)
let townName = areaCode[r.townshipCode] || '其他'
if (roadState.townRoad[townName]) {
roadState.townRoad[townName].roadCode.add(r.routeCode)
roadState.townRoad[townName].mileage += Number(r.chainageMileage) || 0
} else {
roadState.townRoad[townName] = {
roadCode: new Set([r.routeCode]),
mileage: Number(r.chainageMileage) || 0,
}
}
roadState.roadType[r.level] = (roadState.roadType[r.level] || 0) + (Number(r.chainageMileage) || 0)
if (roadState.roadLevel[r.technicalLevel]) {
roadState.roadLevel[r.technicalLevel] += 1
} else {
roadState.roadLevel[r.technicalLevel] = 1
}
if (r.curingTime) {
if (r.curingTime.indexOf('经常') > -1) {
roadState.curingPeriod.frequent += 1
} else if (r.curingTime.indexOf('季节') > -1) {
roadState.curingPeriod.season += 1
}
}
roadState.greenMileage[r.level].canBeGreen += (Number(r.greeningMileage) || 0)
roadState.greenMileage[r.level].isGreen += (Number(r.greeningMileaged) || 0)
}
for (let p of projectRoadRes) {
if (p.type == 'road') {
if (p.done) {
roadState.buildedRoad += 1
} else {
roadState.buildingRoad += 1
}
}
let townName = p.buildUnit.replace('人民政府', '').replace('南昌县', '').replace('管委会', '')
if (roadState.townProject[townName]) {
roadState.townProject[townName] += 1
} else {
roadState.townProject[townName] = 1
}
}
roadState.buildedRoad += roadCode.size
for (let t of Object.keys(roadState.townRoad)) {
roadState.townRoad[t].roadCount = roadState.townRoad[t].roadCode.size
delete roadState.townRoad[t].roadCode
}
ctx.status = 200
ctx.body = roadState
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
roadState,
};

2
api/app/lib/controllers/overview/index.js

@ -0,0 +1,2 @@
'use strict';

68
api/app/lib/controllers/overview/management.js

@ -0,0 +1,68 @@
'use strict';
async function overSpeedList (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const overSpeedRes = await models.Overspeed.findAll({
attributes: ['id', 'licensePlate', 'overrunRate', 'deductPoints', 'fine', 'processingTime'],
order: [['testTime', 'DESC']],
})
ctx.status = 200
ctx.body = {
processed: overSpeedRes.filter(s => s.processingTime).length,
overSpeedList: overSpeedRes,
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function overSpeedProcessed (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const overSpeedCountRes = await models.Overspeed.count({
attributes: ['nameOfInspectionPoint'],
group: ['nameOfInspectionPoint'],
})
const overSpeedCountProcessedRes = await models.Overspeed.count({
attributes: ['nameOfInspectionPoint'],
where: { processingTime: { $ne: null } },
group: ['nameOfInspectionPoint'],
})
let data = []
for (let c of overSpeedCountRes) {
const corProcessed = overSpeedCountProcessedRes.find(d => d.nameOfInspectionPoint == c.nameOfInspectionPoint)
if (corProcessed) {
data.push({
name: c.nameOfInspectionPoint,
processed: corProcessed.count,
total: c.count,
})
}
}
ctx.status = 200
ctx.body = data
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
overSpeedList,
overSpeedProcessed
};

49
api/app/lib/controllers/overview/operation.js

@ -0,0 +1,49 @@
'use strict';
async function busCarLevelList (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
let data = []
const busCarRes = await models.BusCar.findAll({
attributes: ['id', 'company', 'fleet', 'vehicleLicensePlateNumber'],
})
for (let c of busCarRes) {
const { company, fleet } = c
const corCompany = data.find(d => d.name === company)
if (!corCompany) {
data.push({
name: company,
child: [{
name: fleet,
child: [{ ...c.dataValues }]
}]
})
} else {
const corFleet = corCompany.child.find(d => d.name === fleet)
if (!corFleet) {
corCompany.child.push({
name: fleet,
child: [{ ...c.dataValues }]
})
} else {
corFleet.child.push({ ...c.dataValues })
}
}
}
ctx.status = 200
ctx.body = data
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
busCarLevelList
};

493
api/app/lib/models/bus_car.js

@ -0,0 +1,493 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const BusCar = sequelize.define("busCar", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "bus_car_id_uindex"
},
company: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属公司",
primaryKey: false,
field: "company",
autoIncrement: false
},
fleet: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属车队",
primaryKey: false,
field: "fleet",
autoIncrement: false
},
line: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属线路",
primaryKey: false,
field: "line",
autoIncrement: false
},
vehicleNumber: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆编号",
primaryKey: false,
field: "vehicle_number",
autoIncrement: false
},
vehicleLicensePlateNumber: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆牌照号",
primaryKey: false,
field: "vehicle_license_plate_number",
autoIncrement: false
},
operationCategory: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "运营类别",
primaryKey: false,
field: "operation_category",
autoIncrement: false
},
serviceLife: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "已使用年限",
primaryKey: false,
field: "service_life",
autoIncrement: false
},
engineModel: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发动机型号",
primaryKey: false,
field: "engine_model",
autoIncrement: false
},
vehicleModel: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆型号",
primaryKey: false,
field: "vehicle_model",
autoIncrement: false
},
vehicleCategory: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆类别",
primaryKey: false,
field: "vehicle_category",
autoIncrement: false
},
vehicleStatus: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆状态",
primaryKey: false,
field: "vehicle_status",
autoIncrement: false
},
dateOfEntry: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "入户日期",
primaryKey: false,
field: "date_of_entry",
autoIncrement: false
},
purchaseDate: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "购进日期",
primaryKey: false,
field: "purchase_date",
autoIncrement: false
},
energyConsumptionType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "能耗类型",
primaryKey: false,
field: "energy_consumption_type",
autoIncrement: false
},
numberOfStandardUnits: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "标台数",
primaryKey: false,
field: "number_of_standard_units",
autoIncrement: false
},
maintenanceUnit: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "维保单位",
primaryKey: false,
field: "maintenance_unit",
autoIncrement: false
},
vehicleType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆类型",
primaryKey: false,
field: "vehicle_type",
autoIncrement: false
},
brandAndModel: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "厂牌型号",
primaryKey: false,
field: "brand_and_model",
autoIncrement: false
},
manufacturer: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "生产厂家",
primaryKey: false,
field: "manufacturer",
autoIncrement: false
},
drivingLicenseNo: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "行驶证编号",
primaryKey: false,
field: "driving_license_no",
autoIncrement: false
},
engineNumber: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发动机编号",
primaryKey: false,
field: "engine_number",
autoIncrement: false
},
mainEnergyConsumption: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "主能耗",
primaryKey: false,
field: "main_energy_consumption",
autoIncrement: false
},
secondaryEnergyConsumption: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "副能耗",
primaryKey: false,
field: "secondary_energy_consumption",
autoIncrement: false
},
emissionStandard: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "排放标准",
primaryKey: false,
field: "emission_standard",
autoIncrement: false
},
startDate: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "启用日期",
primaryKey: false,
field: "start_date",
autoIncrement: false
},
lastTransferDate: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "最近一次调动日期",
primaryKey: false,
field: "last_transfer_date",
autoIncrement: false
},
conductor: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车长",
primaryKey: false,
field: "conductor",
autoIncrement: false
},
vehicleWidth: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车宽",
primaryKey: false,
field: "vehicle_width",
autoIncrement: false
},
carHeight: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车高",
primaryKey: false,
field: "car_height",
autoIncrement: false
},
approvedPassengerCapacity: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "核定载客数",
primaryKey: false,
field: "approved_passenger_capacity",
autoIncrement: false
},
vehicleIdentificationNumber: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆识别号",
primaryKey: false,
field: "vehicle_identification_number",
autoIncrement: false
},
gearboxBrand: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变速箱品牌",
primaryKey: false,
field: "gearbox_brand",
autoIncrement: false
},
manualCarWashingFee: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "人工洗车费",
primaryKey: false,
field: "manual_car_washing_fee",
autoIncrement: false
},
laborCost: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "劳务费",
primaryKey: false,
field: "labor_cost",
autoIncrement: false
},
curbWeight: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "整备质量",
primaryKey: false,
field: "curb_weight",
autoIncrement: false
},
totalMass: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "总质量",
primaryKey: false,
field: "total_mass",
autoIncrement: false
},
airConditioningTemperature: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "空调温度",
primaryKey: false,
field: "air_conditioning_temperature",
autoIncrement: false
},
airConditionedCarOrNot: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否空调车",
primaryKey: false,
field: "air_conditioned_car_or_not",
autoIncrement: false
},
turnOnTheAirConditioningTemperature: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开空调温度",
primaryKey: false,
field: "turn_on_the_air_conditioning_temperature",
autoIncrement: false
},
power: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "功率",
primaryKey: false,
field: "power",
autoIncrement: false
},
transmission: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变速器",
primaryKey: false,
field: "transmission",
autoIncrement: false
},
seatingCapacity: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "座位数",
primaryKey: false,
field: "seating_capacity",
autoIncrement: false
},
airConditioningBrand: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "空调品牌",
primaryKey: false,
field: "air_conditioning_brand",
autoIncrement: false
},
seatType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "座椅类型",
primaryKey: false,
field: "seat_type",
autoIncrement: false
},
tireSpecifications: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "轮胎规格",
primaryKey: false,
field: "tire_specifications",
autoIncrement: false
},
roadTransportCertificateNo: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "道路运输证号",
primaryKey: false,
field: "road_transport_certificate_no",
autoIncrement: false
},
parkingPoint: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "停放点",
primaryKey: false,
field: "parking_point",
autoIncrement: false
},
carWashingType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "洗车类型",
primaryKey: false,
field: "car_washing_type",
autoIncrement: false
},
maintenanceFreeWheelEnd: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "免维护轮端",
primaryKey: false,
field: "maintenance_free_wheel_end",
autoIncrement: false
},
firstGuaranteeDate: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "首保日期",
primaryKey: false,
field: "first_guarantee_date",
autoIncrement: false
},
dateOfRenovation: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "整修日期",
primaryKey: false,
field: "date_of_renovation",
autoIncrement: false
},
motorVehicleOwner: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "机动车所有人",
primaryKey: false,
field: "motor_vehicle_owner",
autoIncrement: false
}
}, {
tableName: "bus_car",
comment: "",
indexes: []
});
dc.models.BusCar = BusCar;
return BusCar;
};

232
api/app/lib/models/bus_line.js

@ -0,0 +1,232 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const BusLine = sequelize.define("busLine", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "bus_line_id_uindex"
},
company: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "公司",
primaryKey: false,
field: "company",
autoIncrement: false
},
fleet: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车队",
primaryKey: false,
field: "fleet",
autoIncrement: false
},
carCaptain: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车队长",
primaryKey: false,
field: "car_captain",
autoIncrement: false
},
assistantCarCaptain: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "副车队长",
primaryKey: false,
field: "assistant_car_captain",
autoIncrement: false
},
officeLocation: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "办公地点",
primaryKey: false,
field: "office_location",
autoIncrement: false
},
lineName: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "线路名称",
primaryKey: false,
field: "line_name",
autoIncrement: false
},
lineType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "线路类型",
primaryKey: false,
field: "line_type",
autoIncrement: false
},
lineDivision: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "线路划分",
primaryKey: false,
field: "line_division",
autoIncrement: false
},
gpsNumber: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "GPS编号",
primaryKey: false,
field: "gps_number",
autoIncrement: false
},
startingPointEndPoint: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "起点终点",
primaryKey: false,
field: "starting_point_end_point",
autoIncrement: false
},
numberOfVehicles: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆数",
primaryKey: false,
field: "number_of_vehicles",
autoIncrement: false
},
totalKilometers: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "全程公里数",
primaryKey: false,
field: "total_kilometers",
autoIncrement: false
},
ticketPrice: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "票价",
primaryKey: false,
field: "ticket_price",
autoIncrement: false
},
openingTime: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开通时间",
primaryKey: false,
field: "opening_time",
autoIncrement: false
},
runningTime: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "运行时间",
primaryKey: false,
field: "running_time",
autoIncrement: false
},
openingTimeSummer: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开班时间夏令",
primaryKey: false,
field: "opening_time_summer",
autoIncrement: false
},
shiftClosingTimeSummer: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "收班时间夏令",
primaryKey: false,
field: "shift_closing_time_summer",
autoIncrement: false
},
openingTimeWinter: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开班时间冬令",
primaryKey: false,
field: "opening_time_winter",
autoIncrement: false
},
shiftClosingTimeWinter: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "收班时间冬令",
primaryKey: false,
field: "shift_closing_time_winter",
autoIncrement: false
},
uplinkOfStationsAlongTheWay: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "沿途站点上行",
primaryKey: false,
field: "uplink_of_stations_along_the_way",
autoIncrement: false
},
downlinkOfStationsAlongTheWay: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "沿途站点下行",
primaryKey: false,
field: "downlink_of_stations_along_the_way",
autoIncrement: false
},
area: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属区域",
primaryKey: false,
field: "area",
autoIncrement: false
},
remarks: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "备注",
primaryKey: false,
field: "remarks",
autoIncrement: false
}
}, {
tableName: "bus_line",
comment: "",
indexes: []
});
dc.models.BusLine = BusLine;
return BusLine;
};

245
api/app/lib/models/road.js

@ -114,6 +114,51 @@ module.exports = dc => {
field: "section_type",
autoIncrement: false
},
routeCodeBeforeRoadNetworkAdjustment: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路网调整前路线编码",
primaryKey: false,
field: "route_code_before_road_network_adjustment",
autoIncrement: false
},
serialNumberOfOriginalSection: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原路段序号",
primaryKey: false,
field: "serial_number_of_original_section",
autoIncrement: false
},
startingStakeNumberOfTheOriginalRoadSection: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原路段起点桩号",
primaryKey: false,
field: "starting_stake_number_of_the_original_road_section",
autoIncrement: false
},
endingPointStakeNoOfTheOriginalRoadSection: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原路段止点桩号",
primaryKey: false,
field: "ending_point_stake_no_of_the_original_road_section",
autoIncrement: false
},
routeLevel: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路线等级",
primaryKey: false,
field: "route_level",
autoIncrement: false
},
natureOfRoadSection: {
type: DataTypes.STRING,
allowNull: true,
@ -132,6 +177,24 @@ module.exports = dc => {
field: "completion_time",
autoIncrement: false
},
reconstructionTime: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "改建时间",
primaryKey: false,
field: "reconstruction_time",
autoIncrement: false
},
natureOfConstruction: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建设性质",
primaryKey: false,
field: "nature_of_construction",
autoIncrement: false
},
gbmAndCivilizedModelRoad: {
type: DataTypes.STRING,
allowNull: true,
@ -159,6 +222,15 @@ module.exports = dc => {
field: "nature_of_charges",
autoIncrement: false
},
tollStation: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属收费站",
primaryKey: false,
field: "toll_station",
autoIncrement: false
},
numberOfCulverts: {
type: DataTypes.STRING,
allowNull: true,
@ -330,6 +402,159 @@ module.exports = dc => {
field: "repeated_section_route_code",
autoIncrement: false
},
plannedFundCategory: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划资金类别",
primaryKey: false,
field: "planned_fund_category",
autoIncrement: false
},
plannedYear: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划年度",
primaryKey: false,
field: "planned_year",
autoIncrement: false
},
planDocumentNo: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划文号",
primaryKey: false,
field: "plan_document_no",
autoIncrement: false
},
planItemUniqueCode: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目唯一编码",
primaryKey: false,
field: "plan_item_unique_code",
autoIncrement: false
},
plannedProjectRouteCode: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目路线编码",
primaryKey: false,
field: "planned_project_route_code",
autoIncrement: false
},
planProjectName: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目名称",
primaryKey: false,
field: "plan_project_name",
autoIncrement: false
},
plannedProjectType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目类型",
primaryKey: false,
field: "planned_project_type",
autoIncrement: false
},
completionStatus: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工情况",
primaryKey: false,
field: "completion_status",
autoIncrement: false
},
yearOfCompletion: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工年度",
primaryKey: false,
field: "year_of_completion",
autoIncrement: false
},
plannedFundCategoryOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划资金类别_1",
primaryKey: false,
field: "planned_fund_category__one",
autoIncrement: false
},
plannedYearOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划年度_1",
primaryKey: false,
field: "planned_year__one",
autoIncrement: false
},
planDocumentNoOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划文号_1",
primaryKey: false,
field: "plan_document_no__one",
autoIncrement: false
},
planItemUniqueCodeOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目唯一编码_1",
primaryKey: false,
field: "plan_item_unique_code__one",
autoIncrement: false
},
planProjectNameOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目名称_1",
primaryKey: false,
field: "plan_project_name__one",
autoIncrement: false
},
completionStatusOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工情况_1",
primaryKey: false,
field: "completion_status__one",
autoIncrement: false
},
yearOfCompletionOne: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工年度_1",
primaryKey: false,
field: "year_of_completion__one",
autoIncrement: false
},
stationRange: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桩号范围",
primaryKey: false,
field: "station_range",
autoIncrement: false
},
reportingUnit: {
type: DataTypes.STRING,
allowNull: true,
@ -357,6 +582,15 @@ module.exports = dc => {
field: "change_time",
autoIncrement: false
},
lastRepairAndMaintenanceYear: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "最近一次修复养护年度",
primaryKey: false,
field: "last_repair_and_maintenance_year",
autoIncrement: false
},
whetherMaintenanceManagedHighway: {
type: DataTypes.STRING,
allowNull: true,
@ -451,10 +685,19 @@ module.exports = dc => {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "县 / 乡 / 村",
comment: null,
primaryKey: false,
field: "level",
autoIncrement: false
},
surfaceThickness: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "面层厚度",
primaryKey: false,
field: "surface_thickness",
autoIncrement: false
}
}, {
tableName: "road",

17
api/app/lib/models/vehicle.js → api/app/lib/models/statistic.js

@ -4,7 +4,7 @@
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Vehicle = sequelize.define("vehicle", {
const Statistic = sequelize.define("statistic", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
@ -32,12 +32,21 @@ module.exports = dc => {
primaryKey: false,
field: "count",
autoIncrement: false
},
type: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "type",
autoIncrement: false
}
}, {
tableName: "vehicle",
tableName: "statistic",
comment: "",
indexes: []
});
dc.models.Vehicle = Vehicle;
return Vehicle;
dc.models.Statistic = Statistic;
return Statistic;
};

55
api/app/lib/routes/data/index.js

@ -5,19 +5,44 @@ const road = require('../../controllers/data/road');
const bridge = require('../../controllers/data/bridge');
const project = require('../../controllers/data/project');
const overspeed = require('../../controllers/data/overspeed');
const bus = require('../../controllers/data/bus');
module.exports = function (app, router, opts) {
// 运政
//客运车
async function setVehicleType (ctx, next) {
ctx.request.body = {
...(ctx.request.body || {}),
type: 'vehicle'
}
await next()
}
app.fs.api.logAttr['GET/vehicle'] = { content: '获取运政列表', visible: true };
router.get('/vehicle', vehicle.get);
router.get('/vehicle', setVehicleType, vehicle.get);
app.fs.api.logAttr['PUT/vehicle'] = { content: '编辑运政数据', visible: true };
router.put('/vehicle', vehicle.edit);
router.put('/vehicle', setVehicleType, vehicle.edit);
app.fs.api.logAttr['DEL/vehicle/:vehicleId'] = { content: '删除运政数据', visible: false };
router.del('/vehicle/:vehicleId', vehicle.del);
app.fs.api.logAttr['DEL/vehicle/:id'] = { content: '删除运政数据', visible: false };
router.del('/vehicle/:id', setVehicleType, vehicle.del);
// 路政
async function setRoadManageType (ctx, next) {
ctx.request.body = {
...(ctx.request.body || {}),
type: 'road_manage'
}
await next()
}
app.fs.api.logAttr['GET/road_manage'] = { content: '获取路政列表', visible: true };
router.get('/road_manage', setRoadManageType, vehicle.get);
app.fs.api.logAttr['PUT/road_manage'] = { content: '编辑路政数据', visible: true };
router.put('/road_manage', setRoadManageType, vehicle.edit);
app.fs.api.logAttr['DEL/road_manage/:id'] = { content: '删除路政数据', visible: false };
router.del('/road_manage/:id', setRoadManageType, vehicle.del);
// 出租/危货
app.fs.api.logAttr['GET/vehicle/specific'] = { content: '获取具体车辆列表', visible: true };
@ -45,7 +70,7 @@ module.exports = function (app, router, opts) {
router.post('/road/import', road.importIn);
app.fs.api.logAttr['GET/road'] = { content: '获取道路数据', visible: true };
router.post('/road', road.get);
router.get('/road', road.get);
app.fs.api.logAttr['put/road'] = { content: '编辑道路数据', visible: true };
router.put('/road', road.edit);
@ -86,4 +111,24 @@ module.exports = function (app, router, opts) {
app.fs.api.logAttr['DEL/overspeed/:overspeedId'] = { content: '删除治超数据', visible: false };
router.del('/overspeed/:overspeedId', overspeed.overspeedDel);
//overspeed END
//bus
app.fs.api.logAttr['GET/bus/line'] = { content: '获取公交路线数据', visible: true };
router.get('/bus/line', bus.lineGet);
app.fs.api.logAttr['PUT/bus/line'] = { content: '编辑公交路线数据', visible: true };
router.put('/bus/line', bus.lineEdit);
app.fs.api.logAttr['DEL/bus/line/:lineId'] = { content: '删除公交路线数据', visible: false };
router.del('/bus/line/:lineId', bus.lineDel);
app.fs.api.logAttr['GET/bus/car'] = { content: '获取公交车辆数据', visible: true };
router.get('/bus/car', bus.carGet);
app.fs.api.logAttr['PUT/bus/car'] = { content: '编辑公交车辆数据', visible: true };
router.put('/bus/car', bus.carEdit);
app.fs.api.logAttr['DEL/bus/car/:carId'] = { content: '删除公交车辆数据', visible: false };
router.del('/bus/car/:carId', bus.carDel);
//bus END
};

26
api/app/lib/routes/overview/index.js

@ -0,0 +1,26 @@
'use strict';
const operation = require('../../controllers/overview/operation');
const management = require('../../controllers/overview/management');
const build = require('../../controllers/overview/building');
module.exports = function (app, router, opts) {
// 运营
app.fs.api.logAttr['GET/operation/car_level'] = { content: '获取公交车辆层级信息', visible: false };
router.get('/operation/car_level', operation.busCarLevelList);
// 管理
app.fs.api.logAttr['GET/manage/overspeed'] = { content: '获取治超详情列', visible: false };
router.get('/manage/overspeed', management.overSpeedList);
app.fs.api.logAttr['GET/manage/overspeed/processed'] = { content: '获取治超监测点处理数据', visible: false };
router.get('/manage/overspeed/processed', management.overSpeedProcessed);
// 建设
app.fs.api.logAttr['GET/build/road_state'] = { content: '获取道路统计', visible: false };
router.get('/build/road_state', build.roadState);
// 领导驾驶
// 养护
}

113
api/log/development.log

@ -7155,3 +7155,116 @@
2022-07-22 15:22:09.565 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-22 15:22:12.241 - error: path: /overspeed, error: ReferenceError: startTime is not defined
2022-07-22 15:22:51.819 - error: path: /overspeed, error: ReferenceError: startTime is not defined
2022-07-22 15:58:39.491 - debug: [FS-LOGGER] Init.
2022-07-22 15:58:39.611 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-22 15:58:39.611 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 11:26:40.514 - debug: [FS-LOGGER] Init.
2022-07-23 11:26:40.651 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 11:26:40.651 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:20:35.342 - debug: [FS-LOGGER] Init.
2022-07-23 14:20:35.455 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:20:35.455 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:20:42.513 - error: path: /bus/car/level, error: SequelizeDatabaseError: 字段 "name" 不存在
2022-07-23 14:20:49.231 - error: path: /bus/car/level, error: SequelizeDatabaseError: 字段 "name" 不存在
2022-07-23 14:21:03.178 - debug: [FS-LOGGER] Init.
2022-07-23 14:21:03.288 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:21:03.289 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:21:37.334 - debug: [FS-LOGGER] Init.
2022-07-23 14:21:37.446 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:21:37.447 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:36:46.046 - debug: [FS-LOGGER] Init.
2022-07-23 14:36:46.169 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:36:46.170 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:37:08.363 - error: path: /manage/overSpeed, error: TypeError: Cannot read property 'findAll' of undefined
2022-07-23 14:37:14.419 - error: path: /manage/overSpeed, error: TypeError: Cannot read property 'findAll' of undefined
2022-07-23 14:37:33.317 - debug: [FS-LOGGER] Init.
2022-07-23 14:37:33.436 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:37:33.436 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:38:22.690 - debug: [FS-LOGGER] Init.
2022-07-23 14:38:22.809 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:38:22.809 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:55:36.552 - debug: [FS-LOGGER] Init.
2022-07-23 14:55:36.694 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:55:36.694 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:56:29.460 - debug: [FS-LOGGER] Init.
2022-07-23 14:56:29.596 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:56:29.596 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:57:27.313 - debug: [FS-LOGGER] Init.
2022-07-23 14:57:27.441 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:57:27.442 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:58:18.331 - debug: [FS-LOGGER] Init.
2022-07-23 14:58:18.458 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:58:18.458 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 14:59:38.735 - debug: [FS-LOGGER] Init.
2022-07-23 14:59:38.861 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 14:59:38.862 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:00:10.681 - debug: [FS-LOGGER] Init.
2022-07-23 15:00:10.804 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:00:10.804 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:01:53.734 - debug: [FS-LOGGER] Init.
2022-07-23 15:01:53.857 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:01:53.857 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:01:58.068 - error: path: /manage/overspeed/processed, error: ReferenceError: Op is not defined
2022-07-23 15:02:02.859 - error: path: /manage/overspeed/processed, error: ReferenceError: Op is not defined
2022-07-23 15:02:16.875 - debug: [FS-LOGGER] Init.
2022-07-23 15:02:17.003 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:02:17.003 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:05:17.496 - debug: [FS-LOGGER] Init.
2022-07-23 15:05:17.633 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:05:17.634 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:06:45.506 - error: path: /manage/overspeed/processed, error: TypeError: Cannot read property 'count' of undefined
2022-07-23 15:07:07.567 - debug: [FS-LOGGER] Init.
2022-07-23 15:07:07.696 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:07:07.696 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:07:29.327 - debug: [FS-LOGGER] Init.
2022-07-23 15:07:29.460 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:07:29.460 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 15:33:08.052 - debug: [FS-LOGGER] Init.
2022-07-23 15:33:08.179 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 15:33:08.179 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:09:22.681 - debug: [FS-LOGGER] Init.
2022-07-23 16:09:22.808 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:09:22.808 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:10:03.079 - debug: [FS-LOGGER] Init.
2022-07-23 16:10:03.208 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:10:03.208 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:11:16.662 - debug: [FS-LOGGER] Init.
2022-07-23 16:11:16.790 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:11:16.790 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:13:52.199 - debug: [FS-LOGGER] Init.
2022-07-23 16:13:52.328 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:13:52.329 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:13:54.882 - error: path: /build/road_state, error: TypeError: Cannot read property 'size' of undefined
2022-07-23 16:13:57.027 - error: path: /build/road_state, error: TypeError: Cannot read property 'size' of undefined
2022-07-23 16:14:01.518 - error: path: /build/road_state, error: TypeError: Cannot read property 'size' of undefined
2022-07-23 16:14:48.055 - debug: [FS-LOGGER] Init.
2022-07-23 16:14:48.194 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:14:48.194 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:29:40.725 - debug: [FS-LOGGER] Init.
2022-07-23 16:29:40.862 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:29:40.863 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:39:51.192 - debug: [FS-LOGGER] Init.
2022-07-23 16:39:51.331 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:39:51.331 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 16:41:55.842 - debug: [FS-LOGGER] Init.
2022-07-23 16:41:55.980 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 16:41:55.980 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 17:14:55.573 - debug: [FS-LOGGER] Init.
2022-07-23 17:14:55.765 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 17:14:55.765 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 17:15:03.041 - error: path: /build/road_state, error: TypeError: Cannot read property 'indexOf' of null
2022-07-23 17:15:41.896 - debug: [FS-LOGGER] Init.
2022-07-23 17:15:42.032 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 17:15:42.032 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 17:28:33.162 - debug: [FS-LOGGER] Init.
2022-07-23 17:28:33.297 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 17:28:33.297 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 17:28:47.388 - debug: [FS-LOGGER] Init.
2022-07-23 17:28:47.535 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 17:28:47.536 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 17:43:26.624 - debug: [FS-LOGGER] Init.
2022-07-23 17:43:26.764 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 17:43:26.765 - info: [FS-AUTH] Inject auth and api mv into router.
2022-07-23 17:44:52.238 - debug: [FS-LOGGER] Init.
2022-07-23 17:44:52.386 - info: [FS-ATTACHMENT] Inject attachment mw into router.
2022-07-23 17:44:52.387 - info: [FS-AUTH] Inject auth and api mv into router.

0
scripts/0.0.1/data/1_update_statistic_data.sql

4
scripts/0.0.1/data/1_update_user_data.sql

@ -1,4 +0,0 @@
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO "public"."user" VALUES (1, '管理员', 'SuperAdmin', 'e10adc3949ba59abbe56e057f20f883e', 1, 'f', NULL, NULL, NULL, TRUE);

8
scripts/0.0.1/data/1_update_user_dep_data.sql

@ -0,0 +1,8 @@
-- ----------------------------
-- Records of DEP
-- ----------------------------
INSERT INTO "department" VALUES (1, '默认部门', NULL, false);
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO "user" VALUES (1, '管理员', 'SuperAdmin', 'e10adc3949ba59abbe56e057f20f883e', 1, 'f', NULL, NULL, NULL, TRUE);

BIN
scripts/0.0.1/data/工具脚本(无需执行)/data/公交/车辆信息/四公司车辆信息(1).xls

Binary file not shown.

BIN
scripts/0.0.1/data/工具脚本(无需执行)/data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx

Binary file not shown.

BIN
scripts/0.0.1/data/工具脚本(无需执行)/data/治超/非现场处罚总台账更新至2022.7.5(最新).xlsx

Binary file not shown.

58
scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js

@ -16,38 +16,6 @@ try {
port: 5432,
})
let appid = '20200917000567738';
let key = 'xXm4jsuuD38JIkkhEcK6';
const getAnswer = async (query) => {
let start = (new Date()).getTime();
let salt = start;
let str1 = appid + query + salt + key;
let sign = Hex.stringify(MD5(str1));
console.log(`翻译:${query}`);
let answer = await request.get('http://api.fanyi.baidu.com/api/trans/vip/translate').timeout(1000 * 30).query({
q: query,
appid: appid,
salt: salt,
from: 'zh',
to: 'en',
sign: sign
});
if (answer.body.error_code) {
console.warn(answer.body);
throw '百度不给力,快快debug'
}
let rslt = answer.body.trans_result;
// let upperCaseRslt = rslt[0].dst.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()).replace(/ /g, '');
// let upperCaseRslt = rslt[0].dst.toUpperCase().replace(/ /g, '_');
// let upperCaseRslt = rslt[0].dst.toLowerCase().replace(/ /g, '_');
let upperCaseRslt = rslt[0].dst.replace(/\//g, ' ').replace(/'/g, '').replace(/\s{2,}/g, '');
console.log(`翻译结果:${upperCaseRslt}`);
while (((new Date()).getTime() - start) < (1000 / 8)) {//每s只能调用10次
continue;
}
return upperCaseRslt
}
const fun = async () => {
// note: we don't try/catch this because if connecting throws an exception
// we don't need to dispose of the client (it will be undefined)
@ -71,7 +39,7 @@ try {
// defaultValue: ['县'],
// },
// {
// path:[ './data/道路/乡道第三方.xls'],
// path: ['./data/道路/乡道第三方.xls'],
// n: '道路',
// tableName: 'road',
// defaultKey: ['level'],
@ -122,6 +90,16 @@ try {
// n: '治超',
// tableName: 'overspeed',
// },
// {
// path: ['./data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx'],
// n: '公交线路',
// tableName: 'bus_line',
// },
// {
// path: ['./data/公交/车辆信息/四公司车辆信息(1).xls'],
// n: '公交车辆',
// tableName: 'bus_car',
// },
]
for (let f of fileList) {
@ -144,13 +122,25 @@ try {
let v = d[k];
if (v) {
insertKeys.push(keyMap[k]);
insertValues.push(v);
if (f.n == '工程一览') {
if (k == '项目进展情况' && v == '已完工') {
insertValues[0] = true
}
}
if (f.n == '公交车辆') {
if (k == '所属公司') {
insertValues.push(v.split(':')[1]);
continue
}
if (k == '所属车队') {
insertValues.push(v.split(':')[1].replace(/.公司/, ''));
continue
}
}
insertValues.push(v);
}
}
insertStr += insertKeys.join(',') + ') VALUES (';

14
scripts/0.0.1/data/工具脚本(无需执行)/index.js

@ -43,6 +43,7 @@ try {
let upperCaseRslt = rslt[0].dst
.replace(/\//g, ' ')
.replace(/'/g, '')
.replace(/:/g, '')
.trim()
.replace(/\s{2,}/g, '')
.replace(/-/g, ' ');
@ -60,9 +61,10 @@ try {
try {
await client.query('BEGIN')
// 有手动更改 不要轻易再次执行脚本
const fileList = [
// {
// path: './data/道路/道第三方.xls',
// path: './data/道路/道第三方.xls',
// n: '道路',
// tableName: 'road'
// },
@ -91,6 +93,16 @@ try {
// n: '治超',
// tableName: 'overspeed'
// },
// {
// path: './data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx',
// n: '公交线路',
// tableName: 'bus_line'
// },
// {
// path: './data/公交/车辆信息/四公司车辆信息(1).xls',
// n: '公交车辆',
// tableName: 'bus_car'
// },
]
for (let f of fileList) {

25
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_字段对应.json

@ -0,0 +1,25 @@
{
"公司": "company",
"车队": "fleet",
"车队长": "carCaptain",
"副车队长": "assistantCarCaptain",
"办公地点": "officeLocation",
"线路名称": "lineName",
"线路类型": "lineType",
"线路划分": "lineDivision",
"GPS编号": "gPSNumber",
"起点终点": "startingPointEndPoint",
"车辆数": "numberOfVehicles",
"全程公里数": "totalKilometers",
"票价": "ticketPrice",
"开通时间": "openingTime",
"运行时间": "runningTime",
"开班时间夏令": "openingTimeSummer",
"收班时间夏令": "shiftClosingTimeSummer",
"开班时间冬令": "openingTimeWinter",
"收班时间冬令": "shiftClosingTimeWinter",
"沿途站点上行": "uplinkOfStationsAlongTheWay",
"沿途站点下行": "downlinkOfStationsAlongTheWay",
"所属区域": "area",
"备注": "remarks"
}

25
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据字段对应.json

@ -0,0 +1,25 @@
{
"company": "公司",
"fleet": "车队",
"carCaptain": "车队长",
"assistantCarCaptain": "副车队长",
"officeLocation": "办公地点",
"lineName": "线路名称",
"lineType": "线路类型",
"lineDivision": "线路划分",
"gPSNumber": "GPS编号",
"startingPointEndPoint": "起点终点",
"numberOfVehicles": "车辆数",
"totalKilometers": "全程公里数",
"ticketPrice": "票价",
"openingTime": "开通时间",
"runningTime": "运行时间",
"openingTimeSummer": "开班时间夏令",
"shiftClosingTimeSummer": "收班时间夏令",
"openingTimeWinter": "开班时间冬令",
"shiftClosingTimeWinter": "收班时间冬令",
"uplinkOfStationsAlongTheWay": "沿途站点上行",
"downlinkOfStationsAlongTheWay": "沿途站点下行",
"area": "所属区域",
"remarks": "备注"
}

25
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据库表对应.json

@ -0,0 +1,25 @@
{
"公司": "company",
"车队": "fleet",
"车队长": "car_Captain",
"副车队长": "assistant_car_Captain",
"办公地点": "office_location",
"线路名称": "line_name",
"线路类型": "line_type",
"线路划分": "line_division",
"GPS编号": "gPS_number",
"起点终点": "starting_point_end_point",
"车辆数": "number_of_vehicles",
"全程公里数": "total_kilometers",
"票价": "ticket_Price",
"开通时间": "opening_time",
"运行时间": "running_time",
"开班时间夏令": "opening_time_summer",
"收班时间夏令": "shift_closing_time_summer",
"开班时间冬令": "opening_time_Winter",
"收班时间冬令": "shift_closing_time_winter",
"沿途站点上行": "uplink_of_stations_along_the_way",
"沿途站点下行": "downlink_of_stations_along_the_way",
"所属区域": "area",
"备注": "remarks"
}

29
scripts/0.0.1/data/工具脚本(无需执行)/公交线路_数据脚本对应.sql

@ -0,0 +1,29 @@
-- 公交线路
CREATE TABLE if not exists "bus_line" ( id serial not null );
CREATE unique index if not exists bus_line_id_uindex
ON bus_line (id); alter TABLE bus_line add constraint bus_line_pk primary key (id); alter TABLE bus_line add Company varchar(1024); comment
ON column bus_line.Company is '公司'; alter TABLE bus_line add Fleet varchar(1024); comment
ON column bus_line.Fleet is '车队'; alter TABLE bus_line add Car_Captain varchar(1024); comment
ON column bus_line.Car_Captain is '车队长'; alter TABLE bus_line add Assistant_Car_Captain varchar(1024); comment
ON column bus_line.Assistant_Car_Captain is '副车队长'; alter TABLE bus_line add Office_Location varchar(1024); comment
ON column bus_line.Office_Location is '办公地点'; alter TABLE bus_line add Line_Name varchar(1024); comment
ON column bus_line.Line_Name is '线路名称'; alter TABLE bus_line add Line_Type varchar(1024); comment
ON column bus_line.Line_Type is '线路类型'; alter TABLE bus_line add Line_Division varchar(1024); comment
ON column bus_line.Line_Division is '线路划分'; alter TABLE bus_line add GPS_Number varchar(1024); comment
ON column bus_line.GPS_Number is 'GPS编号'; alter TABLE bus_line add Starting_Point_End_Point varchar(1024); comment
ON column bus_line.Starting_Point_End_Point is '起点终点'; alter TABLE bus_line add Number_Of_Vehicles varchar(1024); comment
ON column bus_line.Number_Of_Vehicles is '车辆数'; alter TABLE bus_line add Total_Kilometers varchar(1024); comment
ON column bus_line.Total_Kilometers is '全程公里数'; alter TABLE bus_line add Ticket_Price varchar(1024); comment
ON column bus_line.Ticket_Price is '票价'; alter TABLE bus_line add Opening_Time varchar(1024); comment
ON column bus_line.Opening_Time is '开通时间'; alter TABLE bus_line add Running_Time varchar(1024); comment
ON column bus_line.Running_Time is '运行时间'; alter TABLE bus_line add Opening_Time_Summer varchar(1024); comment
ON column bus_line.Opening_Time_Summer is '开班时间夏令'; alter TABLE bus_line add Shift_Closing_Time_Summer varchar(1024); comment
ON column bus_line.Shift_Closing_Time_Summer is '收班时间夏令'; alter TABLE bus_line add Opening_Time_Winter varchar(1024); comment
ON column bus_line.Opening_Time_Winter is '开班时间冬令'; alter TABLE bus_line add Shift_Closing_Time_Winter varchar(1024); comment
ON column bus_line.Shift_Closing_Time_Winter is '收班时间冬令'; alter TABLE bus_line add Uplink_Of_Stations_Along_The_Way varchar(1024); comment
ON column bus_line.Uplink_Of_Stations_Along_The_Way is '沿途站点上行'; alter TABLE bus_line add Downlink_Of_Stations_Along_The_Way varchar(1024); comment
ON column bus_line.Downlink_Of_Stations_Along_The_Way is '沿途站点下行'; alter TABLE bus_line add Area varchar(1024); comment
ON column bus_line.Area is '所属区域'; alter TABLE bus_line add Remarks varchar(1024); comment
ON column bus_line.Remarks is '备注';

54
scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_字段对应.json

@ -0,0 +1,54 @@
{
"所属公司": "company",
"所属车队": "fleet",
"所属线路": "line",
"车辆编号": "vehicleNumber",
"车辆牌照号": "vehicleLicensePlateNumber",
"运营类别": "operationCategory",
"已使用年限": "serviceLife",
"发动机型号": "engineModel",
"车辆型号": "vehicleModel",
"车辆类别": "vehicleCategory",
"车辆状态": "vehicleStatus",
"入户日期": "dateOfEntry",
"购进日期": "purchaseDate",
"能耗类型": "energyConsumptionType",
"标台数": "numberOfStandardUnits",
"维保单位": "maintenanceUnit",
"车辆类型": "vehicleType",
"厂牌型号": "brandAndModel",
"生产厂家": "manufacturer",
"行驶证编号": "drivingLicenseNo",
"发动机编号": "engineNumber",
"主能耗": "mainEnergyConsumption",
"副能耗": "secondaryEnergyConsumption",
"排放标准": "emissionStandard",
"启用日期": "startDate",
"最近一次调动日期": "lastTransferDate",
"车长": "conductor",
"车宽": "vehicleWidth",
"车高": "carHeight",
"核定载客数": "approvedPassengerCapacity",
"车辆识别号": "vehicleIdentificationNumber",
"变速箱品牌": "gearboxBrand",
"人工洗车费": "manualCarWashingFee",
"劳务费": "laborCost",
"整备质量": "curbWeight",
"总质量": "totalMass",
"空调温度": "airConditioningTemperature",
"是否空调车": "airConditionedCarOrNot",
"开空调温度": "turnOnTheAirConditioningTemperature",
"功率": "power",
"变速器": "transmission",
"座位数": "seatingCapacity",
"空调品牌": "airConditioningBrand",
"座椅类型": "seatType",
"轮胎规格": "tireSpecifications",
"道路运输证号": "roadTransportCertificateNo",
"停放点": "parkingPoint",
"洗车类型": "carWashingType",
"免维护轮端": "maintenanceFreeWheelEnd",
"首保日期": "firstGuaranteeDate",
"整修日期": "dateOfRenovation",
"机动车所有人": "motorVehicleOwner"
}

54
scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据字段对应.json

@ -0,0 +1,54 @@
{
"company": "所属公司",
"fleet": "所属车队",
"line": "所属线路",
"vehicleNumber": "车辆编号",
"vehicleLicensePlateNumber": "车辆牌照号",
"operationCategory": "运营类别",
"serviceLife": "已使用年限",
"engineModel": "发动机型号",
"vehicleModel": "车辆型号",
"vehicleCategory": "车辆类别",
"vehicleStatus": "车辆状态",
"dateOfEntry": "入户日期",
"purchaseDate": "购进日期",
"energyConsumptionType": "能耗类型",
"numberOfStandardUnits": "标台数",
"maintenanceUnit": "维保单位",
"vehicleType": "车辆类型",
"brandAndModel": "厂牌型号",
"manufacturer": "生产厂家",
"drivingLicenseNo": "行驶证编号",
"engineNumber": "发动机编号",
"mainEnergyConsumption": "主能耗",
"secondaryEnergyConsumption": "副能耗",
"emissionStandard": "排放标准",
"startDate": "启用日期",
"lastTransferDate": "最近一次调动日期",
"conductor": "车长",
"vehicleWidth": "车宽",
"carHeight": "车高",
"approvedPassengerCapacity": "核定载客数",
"vehicleIdentificationNumber": "车辆识别号",
"gearboxBrand": "变速箱品牌",
"manualCarWashingFee": "人工洗车费",
"laborCost": "劳务费",
"curbWeight": "整备质量",
"totalMass": "总质量",
"airConditioningTemperature": "空调温度",
"airConditionedCarOrNot": "是否空调车",
"turnOnTheAirConditioningTemperature": "开空调温度",
"power": "功率",
"transmission": "变速器",
"seatingCapacity": "座位数",
"airConditioningBrand": "空调品牌",
"seatType": "座椅类型",
"tireSpecifications": "轮胎规格",
"roadTransportCertificateNo": "道路运输证号",
"parkingPoint": "停放点",
"carWashingType": "洗车类型",
"maintenanceFreeWheelEnd": "免维护轮端",
"firstGuaranteeDate": "首保日期",
"dateOfRenovation": "整修日期",
"motorVehicleOwner": "机动车所有人"
}

54
scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据库表对应.json

@ -0,0 +1,54 @@
{
"所属公司": "company",
"所属车队": "fleet",
"所属线路": "line",
"车辆编号": "vehicle_number",
"车辆牌照号": "vehicle_license_plate_number",
"运营类别": "operation_category",
"已使用年限": "service_life",
"发动机型号": "engine_model",
"车辆型号": "vehicle_model",
"车辆类别": "vehicle_category",
"车辆状态": "vehicle_status",
"入户日期": "date_of_entry",
"购进日期": "purchase_date",
"能耗类型": "energy_consumption_type",
"标台数": "number_of_standard_units",
"维保单位": "maintenance_unit",
"车辆类型": "vehicle_type",
"厂牌型号": "brand_and_model",
"生产厂家": "manufacturer",
"行驶证编号": "driving_license_No",
"发动机编号": "engine_number",
"主能耗": "main_energy_consumption",
"副能耗": "secondary_energy_consumption",
"排放标准": "emission_standard",
"启用日期": "start_date",
"最近一次调动日期": "last_transfer_date",
"车长": "conductor",
"车宽": "vehicle_width",
"车高": "car_height",
"核定载客数": "approved_passenger_capacity",
"车辆识别号": "vehicle_identification_number",
"变速箱品牌": "gearbox_brand",
"人工洗车费": "manual_car_washing_fee",
"劳务费": "labor_cost",
"整备质量": "curb_weight",
"总质量": "total_mass",
"空调温度": "air_conditioning_temperature",
"是否空调车": "air_conditioned_car_or_not",
"开空调温度": "turn_on_the_air_conditioning_temperature",
"功率": "power",
"变速器": "transmission",
"座位数": "seating_capacity",
"空调品牌": "air_conditioning_brand",
"座椅类型": "seat_type",
"轮胎规格": "tire_specifications",
"道路运输证号": "road_Transport_Certificate_No",
"停放点": "parking_point",
"洗车类型": "car_washing_type",
"免维护轮端": "maintenance_free_wheel_end",
"首保日期": "first_guarantee_date",
"整修日期": "date_of_renovation",
"机动车所有人": "motor_vehicle_owner"
}

58
scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据脚本对应.sql

@ -0,0 +1,58 @@
-- 公交车辆
CREATE TABLE if not exists "bus_car" ( id serial not null );
CREATE unique index if not exists bus_car_id_uindex
ON bus_car (id); alter TABLE bus_car add constraint bus_car_pk primary key (id); alter TABLE bus_car add Company varchar(1024); comment
ON column bus_car.Company is '所属公司'; alter TABLE bus_car add Fleet varchar(1024); comment
ON column bus_car.Fleet is '所属车队'; alter TABLE bus_car add Line varchar(1024); comment
ON column bus_car.Line is '所属线路'; alter TABLE bus_car add Vehicle_Number varchar(1024); comment
ON column bus_car.Vehicle_Number is '车辆编号'; alter TABLE bus_car add Vehicle_License_Plate_Number varchar(1024); comment
ON column bus_car.Vehicle_License_Plate_Number is '车辆牌照号'; alter TABLE bus_car add Operation_Category varchar(1024); comment
ON column bus_car.Operation_Category is '运营类别'; alter TABLE bus_car add Service_Life varchar(1024); comment
ON column bus_car.Service_Life is '已使用年限'; alter TABLE bus_car add Engine_Model varchar(1024); comment
ON column bus_car.Engine_Model is '发动机型号'; alter TABLE bus_car add Vehicle_Model varchar(1024); comment
ON column bus_car.Vehicle_Model is '车辆型号'; alter TABLE bus_car add Vehicle_Category varchar(1024); comment
ON column bus_car.Vehicle_Category is '车辆类别'; alter TABLE bus_car add Vehicle_Status varchar(1024); comment
ON column bus_car.Vehicle_Status is '车辆状态'; alter TABLE bus_car add Date_Of_Entry varchar(1024); comment
ON column bus_car.Date_Of_Entry is '入户日期'; alter TABLE bus_car add Purchase_Date varchar(1024); comment
ON column bus_car.Purchase_Date is '购进日期'; alter TABLE bus_car add Energy_Consumption_Type varchar(1024); comment
ON column bus_car.Energy_Consumption_Type is '能耗类型'; alter TABLE bus_car add Number_Of_Standard_Units varchar(1024); comment
ON column bus_car.Number_Of_Standard_Units is '标台数'; alter TABLE bus_car add Maintenance_Unit varchar(1024); comment
ON column bus_car.Maintenance_Unit is '维保单位'; alter TABLE bus_car add Vehicle_Type varchar(1024); comment
ON column bus_car.Vehicle_Type is '车辆类型'; alter TABLE bus_car add Brand_And_Model varchar(1024); comment
ON column bus_car.Brand_And_Model is '厂牌型号'; alter TABLE bus_car add Manufacturer varchar(1024); comment
ON column bus_car.Manufacturer is '生产厂家'; alter TABLE bus_car add Driving_License_No varchar(1024); comment
ON column bus_car.Driving_License_No is '行驶证编号'; alter TABLE bus_car add Engine_Number varchar(1024); comment
ON column bus_car.Engine_Number is '发动机编号'; alter TABLE bus_car add Main_Energy_Consumption varchar(1024); comment
ON column bus_car.Main_Energy_Consumption is '主能耗'; alter TABLE bus_car add Secondary_Energy_Consumption varchar(1024); comment
ON column bus_car.Secondary_Energy_Consumption is '副能耗'; alter TABLE bus_car add Emission_Standard varchar(1024); comment
ON column bus_car.Emission_Standard is '排放标准'; alter TABLE bus_car add Start_Date varchar(1024); comment
ON column bus_car.Start_Date is '启用日期'; alter TABLE bus_car add Last_Transfer_Date varchar(1024); comment
ON column bus_car.Last_Transfer_Date is '最近一次调动日期'; alter TABLE bus_car add Conductor varchar(1024); comment
ON column bus_car.Conductor is '车长'; alter TABLE bus_car add Vehicle_Width varchar(1024); comment
ON column bus_car.Vehicle_Width is '车宽'; alter TABLE bus_car add Car_Height varchar(1024); comment
ON column bus_car.Car_Height is '车高'; alter TABLE bus_car add Approved_Passenger_Capacity varchar(1024); comment
ON column bus_car.Approved_Passenger_Capacity is '核定载客数'; alter TABLE bus_car add Vehicle_Identification_Number varchar(1024); comment
ON column bus_car.Vehicle_Identification_Number is '车辆识别号'; alter TABLE bus_car add Gearbox_Brand varchar(1024); comment
ON column bus_car.Gearbox_Brand is '变速箱品牌'; alter TABLE bus_car add Manual_Car_Washing_Fee varchar(1024); comment
ON column bus_car.Manual_Car_Washing_Fee is '人工洗车费'; alter TABLE bus_car add Labor_Cost varchar(1024); comment
ON column bus_car.Labor_Cost is '劳务费'; alter TABLE bus_car add Curb_Weight varchar(1024); comment
ON column bus_car.Curb_Weight is '整备质量'; alter TABLE bus_car add Total_Mass varchar(1024); comment
ON column bus_car.Total_Mass is '总质量'; alter TABLE bus_car add Air_Conditioning_Temperature varchar(1024); comment
ON column bus_car.Air_Conditioning_Temperature is '空调温度'; alter TABLE bus_car add Air_Conditioned_Car_Or_Not varchar(1024); comment
ON column bus_car.Air_Conditioned_Car_Or_Not is '是否空调车'; alter TABLE bus_car add Turn_On_The_Air_Conditioning_Temperature varchar(1024); comment
ON column bus_car.Turn_On_The_Air_Conditioning_Temperature is '开空调温度'; alter TABLE bus_car add Power varchar(1024); comment
ON column bus_car.Power is '功率'; alter TABLE bus_car add Transmission varchar(1024); comment
ON column bus_car.Transmission is '变速器'; alter TABLE bus_car add Seating_Capacity varchar(1024); comment
ON column bus_car.Seating_Capacity is '座位数'; alter TABLE bus_car add Air_Conditioning_Brand varchar(1024); comment
ON column bus_car.Air_Conditioning_Brand is '空调品牌'; alter TABLE bus_car add Seat_Type varchar(1024); comment
ON column bus_car.Seat_Type is '座椅类型'; alter TABLE bus_car add Tire_Specifications varchar(1024); comment
ON column bus_car.Tire_Specifications is '轮胎规格'; alter TABLE bus_car add Road_Transport_Certificate_No varchar(1024); comment
ON column bus_car.Road_Transport_Certificate_No is '道路运输证号'; alter TABLE bus_car add Parking_Point varchar(1024); comment
ON column bus_car.Parking_Point is '停放点'; alter TABLE bus_car add Car_Washing_Type varchar(1024); comment
ON column bus_car.Car_Washing_Type is '洗车类型'; alter TABLE bus_car add Maintenance_Free_Wheel_End varchar(1024); comment
ON column bus_car.Maintenance_Free_Wheel_End is '免维护轮端'; alter TABLE bus_car add First_Guarantee_Date varchar(1024); comment
ON column bus_car.First_Guarantee_Date is '首保日期'; alter TABLE bus_car add Date_Of_Renovation varchar(1024); comment
ON column bus_car.Date_Of_Renovation is '整修日期'; alter TABLE bus_car add Motor_Vehicle_Owner varchar(1024); comment
ON column bus_car.Motor_Vehicle_Owner is '机动车所有人';

29
scripts/0.0.1/data/工具脚本(无需执行)/道路_字段对应.json

@ -10,11 +10,19 @@
"止点分界点类别": "categoryOfDeadCenterAndDividingPoint",
"止点桩号": "stopStation",
"路段类型": "sectionType",
"路网调整前路线编码": "routeCodeBeforeRoadNetworkAdjustment",
"原路段序号": "serialNumberOfOriginalSection",
"原路段起点桩号": "startingStakeNumberOfTheOriginalRoadSection",
"原路段止点桩号": "endingPointStakeNoOfTheOriginalRoadSection",
"路线等级": "routeLevel",
"路段性质": "natureOfRoadSection",
"建成时间": "completionTime",
"改建时间": "reconstructionTime",
"建设性质": "natureOfConstruction",
"GBM及文明样板路": "gBMAndCivilizedModelRoad",
"地貌": "landforms",
"收费性质": "natureOfCharges",
"所属收费站": "tollStation",
"涵洞数量": "numberOfCulverts",
"技术等级": "technicalLevel",
"路面类型": "pavementType",
@ -34,9 +42,27 @@
"重复道路路段类型": "typeOfRepeatedRoadSection",
"重复路段序号": "serialNumberOfRepeatedSection",
"重复路段路线编码": "repeatedSectionRouteCode",
"计划资金类别": "plannedFundCategory",
"计划年度": "plannedYear",
"计划文号": "planDocumentNo",
"计划项目唯一编码": "planItemUniqueCode",
"计划项目路线编码": "plannedProjectRouteCode",
"计划项目名称": "planProjectName",
"计划项目类型": "plannedProjectType",
"完工情况": "completionStatus",
"完工年度": "yearOfCompletion",
"计划资金类别_1": "plannedFundCategoryOne",
"计划年度_1": "plannedYearOne",
"计划文号_1": "planDocumentNoOne",
"计划项目唯一编码_1": "planItemUniqueCodeOne",
"计划项目名称_1": "planProjectNameOne",
"完工情况_1": "completionStatusOne",
"完工年度_1": "yearOfCompletionOne",
"桩号范围": "stationRange",
"填报单位": "reportingUnit",
"变更原因": "reasonForChange",
"变更时间": "changeTime",
"最近一次修复养护年度": "lastRepairAndMaintenanceYear",
"是否按干线公路管理接养": "whetherMaintenanceManagedHighway",
"备注": "remarks",
"上年路线编码": "routeCodeOfLastYear",
@ -46,5 +72,6 @@
"图形里程": "graphicMileage",
"桩号里程": "chainageMileage",
"所在区县": "districtcounty",
"所在地市": "locationCity"
"所在地市": "locationCity",
"面层厚度":"surfaceThickness"
}

29
scripts/0.0.1/data/工具脚本(无需执行)/道路_数据字段对应.json

@ -10,11 +10,19 @@
"categoryOfDeadCenterAndDividingPoint": "止点分界点类别",
"stopStation": "止点桩号",
"sectionType": "路段类型",
"routeCodeBeforeRoadNetworkAdjustment": "路网调整前路线编码",
"serialNumberOfOriginalSection": "原路段序号",
"startingStakeNumberOfTheOriginalRoadSection": "原路段起点桩号",
"endingPointStakeNoOfTheOriginalRoadSection": "原路段止点桩号",
"routeLevel": "路线等级",
"natureOfRoadSection": "路段性质",
"completionTime": "建成时间",
"reconstructionTime": "改建时间",
"natureOfConstruction": "建设性质",
"gBMAndCivilizedModelRoad": "GBM及文明样板路",
"landforms": "地貌",
"natureOfCharges": "收费性质",
"tollStation": "所属收费站",
"numberOfCulverts": "涵洞数量",
"technicalLevel": "技术等级",
"pavementType": "路面类型",
@ -34,9 +42,27 @@
"typeOfRepeatedRoadSection": "重复道路路段类型",
"serialNumberOfRepeatedSection": "重复路段序号",
"repeatedSectionRouteCode": "重复路段路线编码",
"plannedFundCategory": "计划资金类别",
"plannedYear": "计划年度",
"planDocumentNo": "计划文号",
"planItemUniqueCode": "计划项目唯一编码",
"plannedProjectRouteCode": "计划项目路线编码",
"planProjectName": "计划项目名称",
"plannedProjectType": "计划项目类型",
"completionStatus": "完工情况",
"yearOfCompletion": "完工年度",
"plannedFundCategoryOne": "计划资金类别_1",
"plannedYearOne": "计划年度_1",
"planDocumentNoOne": "计划文号_1",
"planItemUniqueCodeOne": "计划项目唯一编码_1",
"planProjectNameOne": "计划项目名称_1",
"completionStatusOne": "完工情况_1",
"yearOfCompletionOne": "完工年度_1",
"stationRange": "桩号范围",
"reportingUnit": "填报单位",
"reasonForChange": "变更原因",
"changeTime": "变更时间",
"lastRepairAndMaintenanceYear": "最近一次修复养护年度",
"whetherMaintenanceManagedHighway": "是否按干线公路管理接养",
"remarks": "备注",
"routeCodeOfLastYear": "上年路线编码",
@ -46,5 +72,6 @@
"graphicMileage": "图形里程",
"chainageMileage": "桩号里程",
"districtcounty": "所在区县",
"locationCity": "所在地市"
"locationCity": "所在地市",
"surfaceThickness":"面层厚度"
}

29
scripts/0.0.1/data/工具脚本(无需执行)/道路_数据库表对应.json

@ -10,11 +10,19 @@
"止点分界点类别": "category_of_dead_center_and_dividing_point",
"止点桩号": "stop_station",
"路段类型": "section_type",
"路网调整前路线编码": "route_code_before_road_network_adjustment",
"原路段序号": "serial_number_of_original_section",
"原路段起点桩号": "starting_stake_number_of_the_original_road_section",
"原路段止点桩号": "ending_point_stake_no_of_the_original_road_section",
"路线等级": "route_level",
"路段性质": "nature_of_road_section",
"建成时间": "completion_time",
"改建时间": "reconstruction_time",
"建设性质": "nature_of_construction",
"GBM及文明样板路": "gBM_and_civilized_model_road",
"地貌": "landforms",
"收费性质": "nature_of_charges",
"所属收费站": "toll_station",
"涵洞数量": "number_of_culverts",
"技术等级": "technical_level",
"路面类型": "pavement_type",
@ -34,9 +42,27 @@
"重复道路路段类型": "type_of_repeated_road_section",
"重复路段序号": "serial_number_of_repeated_section",
"重复路段路线编码": "repeated_section_route_code",
"计划资金类别": "planned_fund_category",
"计划年度": "planned_year",
"计划文号": "plan_document_No",
"计划项目唯一编码": "plan_item_unique_code",
"计划项目路线编码": "planned_project_route_code",
"计划项目名称": "plan_project_name",
"计划项目类型": "planned_project_type",
"完工情况": "completion_status",
"完工年度": "year_of_completion",
"计划资金类别_1": "planned_fund_category__one",
"计划年度_1": "planned_year__one",
"计划文号_1": "plan_document_No__one",
"计划项目唯一编码_1": "plan_item_unique_code__one",
"计划项目名称_1": "plan_project_name__one",
"完工情况_1": "completion_status__one",
"完工年度_1": "year_of_completion__one",
"桩号范围": "station_range",
"填报单位": "reporting_unit",
"变更原因": "reason_for_change",
"变更时间": "change_time",
"最近一次修复养护年度": "last_repair_and_maintenance_year",
"是否按干线公路管理接养": "whether_maintenance_managed_highway",
"备注": "remarks",
"上年路线编码": "route_code_of_last_year",
@ -46,5 +72,6 @@
"图形里程": "graphic_mileage",
"桩号里程": "chainage_mileage",
"所在区县": "districtcounty",
"所在地市": "location_city"
"所在地市": "location_city",
"面层厚度": "surface_thickness"
}

40
scripts/0.0.1/data/工具脚本(无需执行)/道路_数据脚本对应.sql

@ -14,12 +14,20 @@ ON column road.Category_Of_Starting_Point_And_Dividing_Point is '起点分界点
ON column road.Stop_Place_Name is '止点地名'; alter TABLE road add Category_Of_Dead_Center_And_Dividing_Point varchar(1024); comment
ON column road.Category_Of_Dead_Center_And_Dividing_Point is '止点分界点类别'; alter TABLE road add Stop_Station varchar(1024); comment
ON column road.Stop_Station is '止点桩号'; alter TABLE road add Section_Type varchar(1024); comment
ON column road.Section_Type is '路段类型'; alter TABLE road add Nature_Of_Road_Section varchar(1024); comment
ON column road.Section_Type is '路段类型'; alter TABLE road add Route_Code_Before_Road_Network_Adjustment varchar(1024); comment
ON column road.Route_Code_Before_Road_Network_Adjustment is '路网调整前路线编码'; alter TABLE road add Serial_Number_Of_Original_Section varchar(1024); comment
ON column road.Serial_Number_Of_Original_Section is '原路段序号'; alter TABLE road add Starting_Stake_Number_Of_The_Original_Road_Section varchar(1024); comment
ON column road.Starting_Stake_Number_Of_The_Original_Road_Section is '原路段起点桩号'; alter TABLE road add Ending_Point_Stake_No_Of_The_Original_Road_Section varchar(1024); comment
ON column road.Ending_Point_Stake_No_Of_The_Original_Road_Section is '原路段止点桩号'; alter TABLE road add Route_Level varchar(1024); comment
ON column road.Route_Level is '路线等级'; alter TABLE road add Nature_Of_Road_Section varchar(1024); comment
ON column road.Nature_Of_Road_Section is '路段性质'; alter TABLE road add Completion_Time varchar(1024); comment
ON column road.Completion_Time is '建成时间'; alter TABLE road add GBM_And_Civilized_Model_Road varchar(1024); comment
ON column road.Completion_Time is '建成时间'; alter TABLE road add Reconstruction_Time varchar(1024); comment
ON column road.Reconstruction_Time is '改建时间'; alter TABLE road add Nature_Of_Construction varchar(1024); comment
ON column road.Nature_Of_Construction is '建设性质'; alter TABLE road add GBM_And_Civilized_Model_Road varchar(1024); comment
ON column road.GBM_And_Civilized_Model_Road is 'GBM及文明样板路'; alter TABLE road add Landforms varchar(1024); comment
ON column road.Landforms is '地貌'; alter TABLE road add Nature_Of_Charges varchar(1024); comment
ON column road.Nature_Of_Charges is '收费性质'; alter TABLE road add Number_Of_Culverts varchar(1024); comment
ON column road.Nature_Of_Charges is '收费性质'; alter TABLE road add Toll_Station varchar(1024); comment
ON column road.Toll_Station is '所属收费站'; alter TABLE road add Number_Of_Culverts varchar(1024); comment
ON column road.Number_Of_Culverts is '涵洞数量'; alter TABLE road add Technical_Level varchar(1024); comment
ON column road.Technical_Level is '技术等级'; alter TABLE road add Pavement_Type varchar(1024); comment
ON column road.Pavement_Type is '路面类型'; alter TABLE road add Pavement_Width varchar(1024); comment
@ -38,10 +46,28 @@ ON column road.Greening_Mileage is '可绿化里程'; alter TABLE road add Green
ON column road.Greening_Mileaged is '已绿化里程'; alter TABLE road add Type_Of_Repeated_Road_Section varchar(1024); comment
ON column road.Type_Of_Repeated_Road_Section is '重复道路路段类型'; alter TABLE road add Serial_Number_Of_Repeated_Section varchar(1024); comment
ON column road.Serial_Number_Of_Repeated_Section is '重复路段序号'; alter TABLE road add Repeated_Section_Route_Code varchar(1024); comment
ON column road.Repeated_Section_Route_Code is '重复路段路线编码'; alter TABLE road add Reporting_Unit varchar(1024); comment
ON column road.Repeated_Section_Route_Code is '重复路段路线编码'; alter TABLE road add Planned_Fund_Category varchar(1024); comment
ON column road.Planned_Fund_Category is '计划资金类别'; alter TABLE road add Planned_Year varchar(1024); comment
ON column road.Planned_Year is '计划年度'; alter TABLE road add Plan_Document_No varchar(1024); comment
ON column road.Plan_Document_No is '计划文号'; alter TABLE road add Plan_Item_Unique_Code varchar(1024); comment
ON column road.Plan_Item_Unique_Code is '计划项目唯一编码'; alter TABLE road add Planned_Project_Route_Code varchar(1024); comment
ON column road.Planned_Project_Route_Code is '计划项目路线编码'; alter TABLE road add Plan_Project_Name varchar(1024); comment
ON column road.Plan_Project_Name is '计划项目名称'; alter TABLE road add Planned_Project_Type varchar(1024); comment
ON column road.Planned_Project_Type is '计划项目类型'; alter TABLE road add Completion_Status varchar(1024); comment
ON column road.Completion_Status is '完工情况'; alter TABLE road add Year_Of_Completion varchar(1024); comment
ON column road.Year_Of_Completion is '完工年度'; alter TABLE road add Planned_Fund_Category__One varchar(1024); comment
ON column road.Planned_Fund_Category__One is '计划资金类别_1'; alter TABLE road add Planned_Year__One varchar(1024); comment
ON column road.Planned_Year__One is '计划年度_1'; alter TABLE road add Plan_Document_No__One varchar(1024); comment
ON column road.Plan_Document_No__One is '计划文号_1'; alter TABLE road add Plan_Item_Unique_Code__One varchar(1024); comment
ON column road.Plan_Item_Unique_Code__One is '计划项目唯一编码_1'; alter TABLE road add Plan_Project_Name__One varchar(1024); comment
ON column road.Plan_Project_Name__One is '计划项目名称_1'; alter TABLE road add Completion_Status__One varchar(1024); comment
ON column road.Completion_Status__One is '完工情况_1'; alter TABLE road add Year_Of_Completion__One varchar(1024); comment
ON column road.Year_Of_Completion__One is '完工年度_1'; alter TABLE road add Station_Range varchar(1024); comment
ON column road.Station_Range is '桩号范围'; alter TABLE road add Reporting_Unit varchar(1024); comment
ON column road.Reporting_Unit is '填报单位'; alter TABLE road add Reason_For_Change varchar(1024); comment
ON column road.Reason_For_Change is '变更原因'; alter TABLE road add Change_Time varchar(1024); comment
ON column road.Change_Time is '变更时间'; alter TABLE road add Whether_Maintenance_Managed_Highway varchar(1024); comment
ON column road.Change_Time is '变更时间'; alter TABLE road add Last_Repair_And_Maintenance_Year varchar(1024); comment
ON column road.Last_Repair_And_Maintenance_Year is '最近一次修复养护年度'; alter TABLE road add Whether_Maintenance_Managed_Highway varchar(1024); comment
ON column road.Whether_Maintenance_Managed_Highway is '是否按干线公路管理接养'; alter TABLE road add Remarks varchar(1024); comment
ON column road.Remarks is '备注'; alter TABLE road add Route_Code_Of_Last_Year varchar(1024); comment
ON column road.Route_Code_Of_Last_Year is '上年路线编码'; alter TABLE road add Route_Name_Of_Last_Year varchar(1024); comment
@ -51,4 +77,6 @@ ON column road.Last_Years_Ending_Point_Stake_Number is '上年止点桩号'; alt
ON column road.Graphic_Mileage is '图形里程'; alter TABLE road add Chainage_Mileage varchar(1024); comment
ON column road.Chainage_Mileage is '桩号里程'; alter TABLE road add Districtcounty varchar(1024); comment
ON column road.Districtcounty is '所在区县'; alter TABLE road add Location_City varchar(1024); comment
ON column road.Location_City is '所在地市';
ON column road.Location_City is '所在地市';
alter TABLE road add Surface_Thickness varchar(1024); comment
ON column road.Surface_Thickness is '面层厚度';

5
weapp/package-lock.json

@ -9532,6 +9532,11 @@
"resolved": "http://10.8.30.22:7000/mobile-detect/-/mobile-detect-1.4.5.tgz",
"integrity": "sha1-2jk8PEE8oam83ZztZTw4KBwPtq0="
},
"moment": {
"version": "2.29.1",
"resolved": "http://npm.anxinyun.cn/moment/-/moment-2.29.1.tgz",
"integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "http://10.8.30.22:7000/move-concurrently/-/move-concurrently-1.0.1.tgz",

1
weapp/package.json

@ -46,6 +46,7 @@
"@tarojs/taro": "3.1.4",
"dayjs": "^1.9.8",
"deepmerge": "^4.0.0",
"moment": "^2.29.1",
"react": "^16.10.0",
"react-dom": "^16.10.0",
"swr": "^0.5.4",

1
weapp/src/app.config.js

@ -8,6 +8,7 @@ export default {
'root': 'packages/',
'pages': [
'patrol/index',
'patrolView/index'
]
}],
permission: {

3
weapp/src/packages/patrol/index.config.js

@ -0,0 +1,3 @@
export default {
navigationBarTitleText: '巡查养护'
}

243
weapp/src/packages/patrol/index.jsx

@ -1,9 +1,246 @@
import React from 'react'
import { View } from '@tarojs/components';
import React, { useState, useEffect } from 'react';
import Taro from '@tarojs/taro';
import {
View,
RadioGroup,
Radio,
Button,
Image,
Input,
Textarea,
Picker
} from '@tarojs/components';
import { AtForm, AtInput, AtButton, AtTextarea, AtImagePicker, AtTimeline } from 'taro-ui';
// import InputPicker from '../components/inputPicker';
import './index.scss';
import arrowIcon from '../../static/img/patrol/arrow-down.svg';
const Index = () => {
const [isPatrol, setIsPatrol] = useState(true) // or
const [prjTypeSelector, setPrjTypeSelector] = useState([])
const [roadSelector, setRoadSelector] = useState([])
const [projectType, setProjectType] = useState('')
const [road, setRoad] = useState('')
const [images, setimages] = useState([])
const reportType = [
{
value: '巡查',
text: '巡查',
checked: true
},
{
value: '养护',
text: '养护',
checked: false
}
]
useEffect(() => {
const prjTypeSelector = ['道路', '桥梁', '涵洞', '其他']
const roadSelector = ['富山一路', '金沙大道', '玉湖路']
setPrjTypeSelector(prjTypeSelector)
setRoadSelector(roadSelector)
}, [])
useEffect(() => {
if (projectType) {
setPrjTypeSelector(prjTypeSelector.filter(s => s.includes(projectType)))
}
}, [projectType])
// useEffect(() => {
// if (projectType) {
// setPrjTypeSelector(prjTypeSelector.filter(s => s.includes(projectType)))
// }
// }, [projectType])
function onTypeChange(e) {
if (e.detail.value === '巡查') {
setIsPatrol(true)
} else {
setIsPatrol(false)
}
}
function onPrjTypeChange(e) {
setProjectType(selector[e.detail.value])
}
function onImgPickerChange(files) {
setimages(files)
}
function onImageClick(index, file) {
Taro.previewImage({
urls: [file.url] // http
})
}
useEffect(() => {
console.log(images);
}, [images])
return (
<View>巡查养护</View>
<View className='patrol'>
<View className='report-type'>
<View className='text'>上报类型</View>
<RadioGroup onChange={onTypeChange}>
{
reportType.map((item, i) => {
return (
<Radio
key={i}
value={item.value}
checked={item.checked}
className='radio'
color='#346FC2'
>
{item.text}
</Radio>
)
})
}
</RadioGroup>
</View>
<View className='input-picker'>
<AtInput
className='input'
title='工程类型:'
type='text'
placeholder='请选择工程类型'
border={false}
value={projectType}
onChange={value => setProjectType(value)}
/>
<Picker mode='selector' range={prjTypeSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-r' />
</Picker>
</View>
<View className='input-picker'>
<AtInput
className='input'
title='所在道路:'
type='text'
placeholder='请选择您所在的道路'
border={false}
value={road}
onChange={value => setRoad(value)}
/>
<Picker mode='selector' range={roadSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-r' />
</Picker>
</View>
{/* <InputPicker
className='input-picker'
title='工程类型:'
placeholder='请选择工程类型'
value={projectType}
onChange={setProjectType}
selector={prjTypeSelector}
/>
<InputPicker
className='input-picker'
title='所在道路:'
placeholder='请选择您所在的道路'
value={road}
onChange={setRoad}
selector={roadSelector}
/> */}
<View className='input-picker'>
<AtInput
className='input'
title='所属路段:'
type='text'
placeholder='路段名称'
border={false}
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<Picker mode='selector' range={roadSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-l' />
</Picker>
<AtInput
className='input'
type='text'
placeholder='路段名称'
border={false}
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<Picker mode='selector' range={roadSelector} onChange={onPrjTypeChange}>
<Image src={arrowIcon} className='img-r' />
</Picker>
</View>
<AtTextarea
count={false}
title='具体位置:'
placeholder='具体位置:根据定位自动获取,可手动修改'
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
<AtTextarea
count={false}
title='巡查内容:'
placeholder='请输入巡查内容'
// value={this.state.value}
// onChange={this.handleChange.bind(this, 'value')}
/>
{
isPatrol ?
<View className='patrol-picker'>
现场图片
<AtImagePicker
className='img-picker'
count={3 - images.length}
showAddBtn={images.length >= 3 ? false : true}
files={images}
onChange={onImgPickerChange}
onImageClick={onImageClick}
/>
</View> :
<View className='conserve-picker'>
养护图片:
<View className='horizontal-line hl-one'>
<View className='circle c-one'></View>
<View className='text t-one'>养护前</View>
</View>
<AtImagePicker
className='img-picker'
count={3}
files={images}
onChange={onImgPickerChange}
/>
<View className='horizontal-line hl-two'>
<View className='circle c-two'></View>
<View className='text t-two'>养护中</View>
</View>
<AtImagePicker
className='img-picker'
count={3}
files={images}
onChange={onImgPickerChange}
/>
<View className='horizontal-line hl-three'>
<View className='circle c-three'></View>
<View className='text t-three'>养护后</View>
</View>
<AtImagePicker
className='img-picker'
count={3}
files={images}
onChange={onImgPickerChange}
/>
</View>
}
<AtButton formType='submit' type='primary' className='sub-btn'>上报</AtButton>
</View>
)
}

116
weapp/src/packages/patrol/index.scss

@ -0,0 +1,116 @@
.patrol {
height: 100vh;
width: 100vw;
background-color: #f6f6f6;
padding-top: 20px;
.report-type {
height: 96px;
background-color: #fff;
margin-bottom: 20px;
display: flex;
justify-content: space-between;
align-items: center;
.text {
margin-left: 30px;
}
.radio {
margin-right: 30px;
}
}
.input-picker {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #fff;
margin-bottom: 5px;
.img-r {
width: 24px;
height: 14px;
margin-right: 30px;
// margin-left: 10px;
}
.img-l {
width: 24px;
height: 14px;
}
}
.patrol-picker {
background-color: #fff;
padding: 20px;
}
.conserve-picker {
background-color: #fff;
padding: 20px;
.horizontal-line {
height: 30px;
width: 100%;
display: flex;
justify-content: left;
align-items: center;
.circle {
margin-left: 4px;
width: 22px;
height: 22px;
background-color: #fff;
border-radius: 50%;
}
.text {
margin-left: 46px;
font-size: 24px;
}
}
.hl-one {
background-color: #DFDFDF;
.c-one {
border: solid 4px #999999;
}
.t-one {
color: #999999;
}
}
.hl-two {
background-color: #f7d3a5;
.c-two {
border: solid 4px #FE9B1C;
}
.t-two {
color: #FE9B1C;
}
}
.hl-three {
background-color: #a0f3a4;
.c-three {
border: solid 4px #08D514;
}
.t-three {
color: #08D514;
}
}
.img-picker {
margin: 20px;
}
}
.sub-btn {
width: 70%;
margin-top: 100px;
}
}

0
weapp/src/packages/patrolView/index.config.js

125
weapp/src/packages/patrolView/index.jsx

@ -0,0 +1,125 @@
import React, { useState } from 'react'
import Taro, { useDidShow } from '@tarojs/taro'
import { View, Picker, Input, Image } from '@tarojs/components'
import moment from 'moment'
import './index.scss'
import NoData from '@/components/no-data/noData'
import chevronDown from '../../static/img/patrolView/chevron-down.png'
import searchIcon from '../../static/img/patrolView/search.png'
import cardImg from '../../static/img/patrolView/card-img.png'
import patrolIcon from '../../static/img/patrolView/patrol.svg'
import patrolActiveIcon from '../../static/img/patrolView/patrol-active.svg'
import conserveIcon from '../../static/img/patrolView/conserve.svg'
import conserveActiveIcon from '../../static/img/patrolView/conserve-active.svg'
function Index() {
const [datePicker, setDatePicker] = useState(moment().format('YYYY-MM-DD'))
const [listData, setListData] = useState([])
const [inputSite, setInputSite] = useState('')
const [page, setPage] = useState(0)
const [total, setTotal] = useState(0)
const [num, setNum] = useState(Math.random())
const [systemInfo, setSystemInfo] = useState('')
const data = [
{
place: {
name: '飞尚'
},
user: {
name: '用户1'
},
time: '2022-7-1'
}
]
useDidShow(() => {
let refresh = Taro.getStorageSync('refresh'); //
if (refresh) {
setPage(0)
setNum(Math.random())
Taro.removeStorageSync('refresh'); //
}
Taro.getSystemInfo({
success: (res) => {
// windows | macpc
// android | ios
setSystemInfo(res.platform);
}
});
})
const onDateChange = e => {
setDatePicker(e.detail.value);
}
const handleConfirm = () => {
setPage(0)
setListData([]);
setTotal(0);
setNum(Math.random())
}
const handleInput = e => {
setInputSite(e.detail.value);
if (!e.detail.value) {
setPage(0)
setListData([]);
setTotal(0);
setNum(Math.random())
}
}
return (
<View>
<View className='type-box'>
<View className='item left'>
<Image className='type-img' src={patrolIcon} />
<View>巡查</View>
</View>
<View className='line'></View>
<View className='item'>
<Image className='type-img' src={conserveIcon} />
<View>养护</View>
</View>
</View>
<View className='filter-box'>
<View className='filter-item'>
<View style={{ float: 'left', marginLeft: '20rpx', color: '#333' }}>日期</View>
<Picker className='picker' style={{ overflow: 'hidden', float: 'left' }} mode='date' end={(systemInfo == 'windows' || systemInfo == 'mac') ? moment().add(1, 'd').format('YYYY-MM-DD') : moment().format('YYYY-MM-DD')} onChange={onDateChange}>
<View className='filter-name'>{datePicker || '请选择'}</View>
<Image className='filter-img' src={chevronDown} />
</Picker>
</View>
<View class='head-search'>
<Image className='search-img' src={searchIcon} />
<Input class='heard-search-input' value={inputSite} placeholder='请输入场所名称' onConfirm={handleConfirm} onInput={handleInput} />
</View>
</View>
<View style={{ marginTop: '70px' }}>
{
data && data.length > 0 ? data && data.map((e, index) => {
return (
<View className='cardBox' key={index} onClick={() => handleDetail(index)}>
<View className='card-item' >
<Image className='card-bg' src={cardImg} />
<View className='card-position'>
<View className='card-title'>{e.place.name}</View>
<View style={{ float: 'left', width: '100%', fontSize: '28rpx', marginTop: '16rpx' }}>
<View style={{ float: 'left' }}>填报人</View>
<View style={{ float: 'left' }}>{e.user.name}</View>
</View>
<View className='card-date'>{moment(e.time).format('YYYY-MM-DD HH:mm:ss')}</View>
</View>
</View>
</View>
)
}) : <NoData top='400rpx'></NoData>
}
</View>
</View>
)
}
export default Index

135
weapp/src/packages/patrolView/index.scss

@ -0,0 +1,135 @@
page {
background-color: #f6f6f6;
.type-box {
background-color: #fff;
height: 80px;
display: flex;
justify-content: space-around;
align-items: center;
.item {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
.type-img {
width: 40px;
height: 40px;
margin: 0 10px;
}
}
.line {
width: 1px;
height: 30px;
background-color: #f6f6f6;
}
}
.filter-box {
position: fixed;
top: 80px;
display: flex;
width: 100%;
z-index: 100;
background: #fff;
color: #999999;
font-size: 28rpx;
border-top: 2rpx solid #f6f6f6;
.filter-item {
overflow: hidden;
height: 98rpx;
line-height: 98rpx;
flex: 1;
.filter-name {
float: left;
// margin-left: 20rpx;
}
.filter-img {
width: 14px;
height: 8px;
float: left;
margin: 46rpx 20rpx 18rpx 10rpx;
}
}
.head-search {
width: 400rpx;
display: flex;
background: #fff;
padding: 10rpx 26rpx 15rpx;
box-sizing: border-box;
border-radius: 50rpx;
box-shadow: 0 8rpx 10rpx 0rpx #00000008;
border: 2rpx solid #00000011;
height: 68rpx;
line-height: 68rpx;
margin: 14rpx 30rpx 14rpx 0;
.search-img {
width: 36rpx;
height: 36rpx;
margin-top: 5rpx;
}
.heard-search-input {
margin-left: 26rpx;
font-size: 28rpx;
width: 100%;
color: #333;
}
}
}
.cardBox {
width: 690rpx;
margin: 50rpx auto;
.card-item {
position: relative;
margin-bottom: 10rpx;
.card-bg {
width: 100%;
height: 260rpx;
display: block;
}
.card-position {
position: absolute;
top: 0;
left: 0;
width: 88%;
padding: 16rpx 0 16rpx 36rpx;
overflow: hidden;
text-align: justify;
.card-title {
font-size: 28rpx;
color: #333333;
float: left;
margin-bottom: 30rpx;
width: 470rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
margin-top: 8rpx;
}
.card-date {
float: left;
font-size: 28rpx;
color: #999999;
margin-top: 30rpx;
width: 100%;
}
}
}
}
}

2
weapp/src/pages/auth/login/login.scss

@ -1,5 +1,3 @@
@import "~taro-ui/dist/style/components/divider.scss";
.page {
height: 100vh;
background: #fff;

8
weapp/src/pages/home/index.jsx

@ -12,12 +12,18 @@ const Index = () => {
url: '/packages/patrol/index'
})
}
function toPatrolView() {
Taro.navigateTo({
url: '/packages/patrolView/index'
})
}
return (
<View className='page'>
<View className='fill'>
<View className='title'> </View>
<View className='btn' onClick={toPatrol}>填报</View>
{/* <View className='btn' onClick={toPatrol}>填报</View> */}
<View className='btn' onClick={toPatrolView}>查看</View>
</View>
</View>
);

48
weapp/src/pages/home/index.scss

@ -1,29 +1,29 @@
.page {
display: flex;
flex-direction: column;
align-items: center;
display: flex;
flex-direction: column;
align-items: center;
.fill {
margin-top: 30px;
padding: 10px;
width: 94%;
height: 360px;
background: url('../../static/img/patrol//fill-bg.svg') no-repeat;
background-size:100% 100%;
}
.fill {
margin-top: 30px;
padding: 10px;
width: 94%;
height: 360px;
background: url('../../static/img/home/fill-bg.svg') no-repeat;
background-size: 100% 100%;
}
.title {
margin: 50px 0 0 48px;
color: #fff;
font-size: 48px;
}
.title {
margin: 50px 0 0 48px;
color: #fff;
font-size: 48px;
}
.btn {
margin: 20px 0 0 50px;
color: #fff;
text-align: center;
width: 200px;
border: solid 1px #fff;
border-radius: 10px;
}
.btn {
margin: 30px 0 0 50px;
color: #fff;
text-align: center;
width: 200px;
border: solid 1px #fff;
border-radius: 10px;
}
}

40
weapp/src/pages/user/index.jsx

@ -5,16 +5,22 @@ import { logout } from '@/actions/auth';
import { getLogoutUrl } from '@/services/api';
import cfg from '../../config';
import './index.scss';
import headImg from '../../static/img/my/head.png';
import moreImg from '../../static/img/my/more.svg';
import pswdImg from '../../static/img/my/pswd.svg';
import reportImg from '../../static/img/my/report.svg';
import Common from '../../components/echartForWx/common';
import Common from '../../components/echartForWx/common'; //
const { webUrl } = cfg;
const Index = ({ ...props }) => {
const userInfo = Taro.getStorageSync('userInfo') || {};
const goRedirect = () => {
}
const onLogout = () => {
logout(getLogoutUrl()).then(() => {
Taro.reLaunch({
@ -23,19 +29,33 @@ const Index = ({ ...props }) => {
});
}
return (
<View className='page'>
<View className='personal'>
<View className='info'>
<Image className='icon' src={webUrl + `/assets/avatar/${userInfo.avator}`} />
<View className='name'>{userInfo.displayName || '----'}</View>
<View className='myBox'>
<View className='my-top'>
<Image className='my-portrait' src={headImg} />
<View className='my-item'>
<View className='my-username'>{userInfo.displayName}</View>
<View className='my-phone'>{userInfo.phone}</View>
</View>
</View>
</View>
<View className='logout'>
<Button className='btn' onClick={onLogout}>退出登录</Button>
<View className='box' onClick={() => goRedirect(1)}>
<Image className='box-img' src={reportImg} />
<View className='box-txt'>我的填报</View>
<Image className='img' src={moreImg} />
</View>
<View className='box' onClick={() => goRedirect(2)} style={{ marginTop: '2rpx' }}>
<Image className='box-img' src={pswdImg} />
<View className='box-txt'>修改密码</View>
<Image className='img' src={moreImg} />
</View>
<View className='logout' onClick={onLogout}>退出登录</View>
</View>
);
}

111
weapp/src/pages/user/index.scss

@ -1,45 +1,92 @@
.page {
height: 100vh;
background: #F0F2F5;
box-sizing: border-box;
.personal {
padding: 20px;
.info {
border-radius: 10px;
background: #fff;
height: 30vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.icon {
width: 150px;
height: 150px;
border-radius: 50%;
background: #f6f6f6;
display: flex;
flex-direction: column;
.myBox {
width: 90%;
height: 300rpx;
margin: 30rpx auto;
background: url('../../static/img/my/card-bg.svg') no-repeat;
background-size: 100%;
border-radius: 8rpx;
.my-top {
overflow: hidden;
padding: 70rpx 0 28rpx 30rpx;
.my-portrait {
width: 120rpx;
height: 120rpx;
display: block;
float: left;
}
.name {
font-size: 30px;
margin-top: 30px;
.my-item {
float: left;
margin-left: 32rpx;
width: 70%;
.my-username {
font-size: 32rpx;
color: #FFFFFF;
margin-bottom: 24rpx;
margin-top: 6rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.my-phone {
font-size: 28rpx;
font-weight: bold;
color: #FFFFFF;
}
}
}
}
.box {
overflow: hidden;
background-color: #fff;
width: 100%;
height: 92rpx;
line-height: 92rpx;
.box-img {
width: 52rpx;
height: 52rpx;
display: block;
float: left;
padding: 20rpx 20rpx 20rpx 30rpx;
}
.box-txt {
float: left;
font-size: 28rpx;
color: #333333;
}
.img {
width: 52rpx;
height: 52rpx;
display: block;
float: right;
padding: 20rpx 30rpx 20rpx 0;
}
}
.logout {
box-sizing: border-box;
width: 100vw;
margin-top: 50px;
padding: 0 20px;
.btn {
background: #fff;
font-size: 28px;
padding: 8px 0;
}
width: 550rpx;
height: 80rpx;
line-height: 80rpx;
background: #346FC2;
border-radius: 8rpx;
font-size: 28rpx;
color: #FFFFFF;
margin: 98rpx auto 0;
text-align: center;
}
}

0
weapp/src/static/img/patrol/fill-bg.svg → weapp/src/static/img/home/fill-bg.svg

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

23
weapp/src/static/img/my/card-bg.svg

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="345px" height="139px" viewBox="0 0 345 139" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>形状结合</title>
<defs>
<linearGradient x1="117.957428%" y1="37.3935291%" x2="29.6625906%" y2="56.1347143%" id="linearGradient-1">
<stop stop-color="#346FC2" offset="0%"></stop>
<stop stop-color="#50A9F3" offset="100%"></stop>
<stop stop-color="#50A9F3" offset="100%"></stop>
</linearGradient>
<rect id="path-2" x="0" y="0" width="345" height="139" rx="4"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_我的(第三方)" transform="translate(-14.000000, -80.000000)">
<g id="形状结合" transform="translate(14.000000, 80.000000)">
<mask id="mask-3" fill="white">
<use xlink:href="#path-2"></use>
</mask>
<use id="蒙版" fill="url(#linearGradient-1)" xlink:href="#path-2"></use>
<path d="M371,-8 L370.999465,139.158776 C298.893654,132.178406 243,82.6104154 243,22.5 C243,11.9503745 244.721619,1.72547358 247.950347,-8.00147208 L371,-8 Z" fill="#FFFFFF" opacity="0.0897274926" mask="url(#mask-3)"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
weapp/src/static/img/my/head.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

13
weapp/src/static/img/my/more.svg

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
<g id="首页_我的(第三方)" transform="translate(-334.000000, -245.000000)" stroke="#CDCDCD" stroke-width="1.65">
<g id="Input-/-Normal-/-文字输入框" transform="translate(0.000000, 235.000000)">
<g id="more" transform="translate(334.000000, 10.000000)">
<polyline id="路径" transform="translate(13.000000, 13.000000) rotate(-135.000000) translate(-13.000000, -13.000000) " points="17 17 9 17 9 9"></polyline>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 889 B

18
weapp/src/static/img/my/pswd.svg

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_我的(第三方)" transform="translate(-15.000000, -291.000000)" fill="#346FC2" fill-rule="nonzero">
<g id="Input-/-Normal-/-文字输入框" transform="translate(0.000000, 282.000000)">
<g id="icon_pl" transform="translate(15.000000, 9.000000)">
<g id="密码" transform="translate(4.000000, 3.000000)">
<path d="M15.4545454,9.09090908 L15.4545454,18.1818182 L1.81818182,18.1818182 L1.81818182,9.09090908 L15.4545454,9.09090908 M15.4545454,7.27272727 L1.81818182,7.27272727 C0.818181816,7.27272727 0,8.09090908 0,9.09090908 L0,18.1818182 C0,19.1818182 0.818181816,20 1.81818182,20 L15.4545454,20 C16.4545454,20 17.2727273,19.1818182 17.2727273,18.1818182 L17.2727273,9.09090908 C17.2727273,8.09090908 16.4545454,7.27272727 15.4545454,7.27272727 Z" id="形状"></path>
<path d="M8.4090909,1.81818182 C10.4090909,1.81818182 12.0454546,3.45454545 12.0454546,5.45454545 L12.0454546,7.27272727 L4.77272727,7.27272727 L4.77272727,5.45454545 C4.77272727,3.45454545 6.4090909,1.81818182 8.4090909,1.81818182 M8.4090909,0 C5.4090909,0 2.95454545,2.45454545 2.95454545,5.45454545 L2.95454545,9.09090908 L13.8636364,9.09090908 L13.8636364,5.45454545 C13.8636364,2.45454545 11.4090909,0 8.4090909,0 Z" id="形状"></path>
<path d="M6.81818182,12.2727273 C6.81818182,13.2768814 7.63220954,14.0909091 8.63636363,14.0909091 C9.64051772,14.0909091 10.4545454,13.2768814 10.4545454,12.2727273 C10.4545454,11.2685732 9.64051772,10.4545454 8.63636363,10.4545454 C7.63220954,10.4545454 6.81818182,11.2685732 6.81818182,12.2727273 Z" id="路径"></path>
<path d="M8.63636363,16.8181818 C8.13636363,16.8181818 7.72727271,16.4090909 7.72727271,15.9090909 L7.72727271,12.7272727 C7.72727271,12.2272727 8.13636363,11.8181818 8.63636363,11.8181818 C9.13636363,11.8181818 9.54545455,12.2272727 9.54545455,12.7272727 L9.54545455,15.9090909 C9.54545455,16.4090909 9.13636363,16.8181818 8.63636363,16.8181818 L8.63636363,16.8181818 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

14
weapp/src/static/img/my/report.svg

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_我的(第三方)" transform="translate(-15.000000, -245.000000)">
<g id="Input-/-Normal-/-文字输入框" transform="translate(0.000000, 235.000000)">
<g id="icon_pl" transform="translate(15.000000, 10.000000)">
<path d="M23.1,8.8 C23.7075132,8.8 24.2,9.29248678 24.2,9.9 L24.2,13.2 C24.2,13.8075132 23.7075132,14.3 23.1,14.3 L21.1669048,14.3 L21.1669048,8.8 L23.1,8.8 Z M20.0669048,14.3 L9.71859043,14.3 C9.41986798,14.3 9.13399178,14.1785088 8.92666511,13.9634489 L6.6,11.55 L8.92666511,9.13655106 C9.13399178,8.92149118 9.41986798,8.8 9.71859043,8.8 L20.0669048,8.8 L20.0669048,14.3 Z" id="形状结合" fill="#346FC2" transform="translate(15.400000, 11.550000) rotate(-45.000000) translate(-15.400000, -11.550000) "></path>
<path d="M20.7625,13.5179688 L20.7625,20.075 C20.7625,21.1381481 19.9006481,22 18.8375,22 L6.325,22 C5.26185186,22 4.4,21.1381481 4.4,20.075 L4.4,8.525 C4.4,7.46185186 5.26185186,6.6 6.325,6.6 L13.784375,6.6" id="路径" stroke="#346FC2" stroke-width="1.65" stroke-linecap="round"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

15
weapp/src/static/img/patrol/arrow-down.svg

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="7px" viewBox="0 0 12 7" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>chevron-down</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.65">
<g id="首页_巡查养护-填写(第三方)" transform="translate(-349.000000, -164.000000)" fill="#000000" fill-rule="nonzero">
<g id="编组-5" transform="translate(0.000000, 80.000000)">
<g id="卡片-/-通栏" transform="translate(0.000000, 63.000000)">
<g id="chevron-down" transform="translate(349.000000, 21.000000)">
<path d="M1.46323438,0.256281566 C1.12849928,-0.0854271888 0.585786438,-0.0854271888 0.25105133,0.256281566 C-0.0836837768,0.597990322 -0.0836837768,1.15200968 0.25105133,1.49371843 L5.39390847,6.74371843 C5.72864358,7.08542719 6.27135642,7.08542719 6.60609153,6.74371843 L11.7489487,1.49371843 C12.0836838,1.15200968 12.0836838,0.597990322 11.7489487,0.256281566 C11.4142136,-0.0854271888 10.8715007,-0.0854271888 10.5367656,0.256281566 L6,4.88756313 L1.46323438,0.256281566 Z" id="Shape"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
weapp/src/static/img/patrolView/card-img.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
weapp/src/static/img/patrolView/chevron-down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

30
weapp/src/static/img/patrolView/conserve-active.svg

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M15.0846429,-3.19744231e-14 C16.379408,-3.19744231e-14 17.4311429,1.05173482 17.4311429,2.3465 L17.4311429,2.3465 L17.431,7.199 L16.09,7.199 L16.0902857,2.3465 C16.0902857,1.83095839 15.7018925,1.40574078 15.2018846,1.34762572 L15.0846429,1.34085714 L2.3465,1.34085714 C1.79130134,1.34085714 1.34085714,1.79130134 1.34085714,2.3465 L1.34085714,2.3465 L1.34085714,16.4255 C1.34085714,16.9806987 1.79130134,17.4311429 2.3465,17.4311429 L2.3465,17.4311429 L10.399,17.431 L10.399,18.771 L2.3465,18.772 C1.10568337,18.772 0.0880664962,17.8060838 0.00541928549,16.5860214 L-1.52766688e-13,16.4255 L-1.52766688e-13,2.3465 C-1.52766688e-13,1.05173482 1.05173482,-3.19744231e-14 2.3465,-3.19744231e-14 L2.3465,-3.19744231e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_养护-查看(管理员)备份" transform="translate(-236.000000, -80.000000)">
<g id="编组-11" transform="translate(188.000000, 64.000000)">
<g id="编组-9" transform="translate(47.997085, 16.000000)">
<g id="编组" transform="translate(0.000000, 1.000000)">
<g id="baobiaoxinxi">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#346FC2" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.7268571,3.44171429 L3.35214286,3.44171429 C2.98131205,3.44171429 2.68171429,3.74131205 2.68171429,4.11214286 C2.68171429,4.48297366 2.98131205,4.78257143 3.35214286,4.78257143 L10.7268571,4.78257143 C11.0976879,4.78257143 11.3972857,4.48297366 11.3972857,4.11214286 C11.3972857,3.74131205 11.0976879,3.44171429 10.7268571,3.44171429 Z M8.71557143,6.79385714 L3.35214286,6.79385714 C2.98131205,6.79385714 2.68171429,7.09345491 2.68171429,7.46428571 C2.68171429,7.83511652 2.98131205,8.13471429 3.35214286,8.13471429 L8.71557143,8.13471429 C9.08640223,8.13471429 9.386,7.83511652 9.386,7.46428571 C9.386,7.09345491 9.08640223,6.79385714 8.71557143,6.79385714 Z M8.04514286,10.146 L3.35214286,10.146 C2.98131205,10.146 2.68171429,10.4455978 2.68171429,10.8164286 C2.68171429,11.1872594 2.98131205,11.4868571 3.35214286,11.4868571 L8.04514286,11.4868571 C8.41597366,11.4868571 8.71557143,11.1872594 8.71557143,10.8164286 C8.71557143,10.4455978 8.41597366,10.146 8.04514286,10.146 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#346FC2" fill-rule="nonzero"></path>
</g>
<g id="安全" transform="translate(10.400000, 8.000000)" fill-rule="nonzero">
<path d="M4.78695925,0 C4.93907576,0.00640053734 5.08980912,0.0297722448 5.23590669,0.0696107894 L6.04411885,0.208832358 L8.36786225,0.609156306 L9.05623052,0.727568957 L9.34049272,0.779838978 C9.4208346,0.810990397 9.48880882,0.864472181 9.53507221,0.932933165 C9.63249541,1.08156829 9.59139082,1.55819161 9.59139082,1.80319184 L9.59139082,5.50346339 C9.61652657,5.96040515 9.57368429,6.41838192 9.46407338,6.86446572 C8.99137069,8.33273307 7.79319884,9.18292601 6.4332778,9.82676385 C6.08530742,9.98485807 5.72897142,10.1265716 5.36562634,10.2513649 C5.20282115,10.3160622 5.03359547,10.3658437 4.86036029,10.4 C4.64335359,10.3870561 4.43113161,10.3350591 4.23551727,10.2469058 C3.73232522,10.0790571 3.24437148,9.87419842 2.77630464,9.63428136 C1.51220531,8.94337573 0.478718689,8.15338002 0.0786163109,6.65464247 C0.0100051608,6.28669909 -0.0138107298,5.91276209 0.00761749245,5.53987899 L0.00761749245,1.29857558 C-0.00280932948,1.19346977 0.00621802142,1.08748301 0.0343087764,0.985203186 C0.0694100914,0.910412579 0.128138143,0.847268253 0.202730795,0.804116045 C0.311478278,0.763156781 0.426158841,0.737361587 0.543044695,0.727568957 L1.25410057,0.605688156 L4.78695925,0 Z" id="形状" fill="#346FC2"></path>
<path d="M6.97244179,3.62966986 C7.12551092,3.62261751 7.2698436,3.69606432 7.34574703,3.81963432 C7.42165046,3.94320431 7.41622191,4.09589198 7.33170651,4.21454909 C7.23412465,4.32746529 7.12228858,4.42909934 6.99859925,4.51726931 L6.51602079,4.94905436 L5.161438,6.16018294 L4.74612158,6.53177075 C4.65113084,6.64886544 4.49426844,6.70774773 4.33827872,6.68486494 C4.12314695,6.64374256 3.91709022,6.38759468 3.77776171,6.25679577 L2.59533772,5.16036396 C2.41468782,5.0309278 2.37230178,4.79402906 2.49818143,4.61735029 C2.6328091,4.45991435 2.87451189,4.4236182 3.05576241,4.53361917 L4.41381506,5.79379734 L4.47387046,5.73805917 L5.0536052,5.21957029 L6.22108207,4.18209709 L6.60650425,3.83751131 C6.66867923,3.7766839 6.73626966,3.72083045 6.80855729,3.67054451 C6.86219988,3.65426237 6.91683481,3.64094445 6.97217488,3.63066076 L6.97244179,3.62966986 Z" id="路径" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

32
weapp/src/static/img/patrolView/conserve.svg

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M15.0846429,-3.19744231e-14 C16.379408,-3.19744231e-14 17.4311429,1.05173482 17.4311429,2.3465 L17.4311429,2.3465 L17.431,7.199 L16.09,7.199 L16.0902857,2.3465 C16.0902857,1.83095839 15.7018925,1.40574078 15.2018846,1.34762572 L15.0846429,1.34085714 L2.3465,1.34085714 C1.79130134,1.34085714 1.34085714,1.79130134 1.34085714,2.3465 L1.34085714,2.3465 L1.34085714,16.4255 C1.34085714,16.9806987 1.79130134,17.4311429 2.3465,17.4311429 L2.3465,17.4311429 L10.399,17.431 L10.399,18.771 L2.3465,18.772 C1.10568337,18.772 0.0880664962,17.8060838 0.00541928549,16.5860214 L-1.52766688e-13,16.4255 L-1.52766688e-13,2.3465 C-1.52766688e-13,1.05173482 1.05173482,-3.19744231e-14 2.3465,-3.19744231e-14 L2.3465,-3.19744231e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_巡查-查看(管理员)" transform="translate(-236.000000, -80.000000)">
<g id="编组-7" transform="translate(0.000000, 64.000000)">
<g id="编组-11" transform="translate(188.000000, 0.000000)">
<g id="编组-9" transform="translate(47.997085, 16.000000)">
<g id="编组" transform="translate(0.000000, 1.000000)">
<g id="baobiaoxinxi">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#999999" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.7268571,3.44171429 L3.35214286,3.44171429 C2.98131205,3.44171429 2.68171429,3.74131205 2.68171429,4.11214286 C2.68171429,4.48297366 2.98131205,4.78257143 3.35214286,4.78257143 L10.7268571,4.78257143 C11.0976879,4.78257143 11.3972857,4.48297366 11.3972857,4.11214286 C11.3972857,3.74131205 11.0976879,3.44171429 10.7268571,3.44171429 Z M8.71557143,6.79385714 L3.35214286,6.79385714 C2.98131205,6.79385714 2.68171429,7.09345491 2.68171429,7.46428571 C2.68171429,7.83511652 2.98131205,8.13471429 3.35214286,8.13471429 L8.71557143,8.13471429 C9.08640223,8.13471429 9.386,7.83511652 9.386,7.46428571 C9.386,7.09345491 9.08640223,6.79385714 8.71557143,6.79385714 Z M8.04514286,10.146 L3.35214286,10.146 C2.98131205,10.146 2.68171429,10.4455978 2.68171429,10.8164286 C2.68171429,11.1872594 2.98131205,11.4868571 3.35214286,11.4868571 L8.04514286,11.4868571 C8.41597366,11.4868571 8.71557143,11.1872594 8.71557143,10.8164286 C8.71557143,10.4455978 8.41597366,10.146 8.04514286,10.146 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#999999" fill-rule="nonzero"></path>
</g>
<g id="安全" transform="translate(10.400000, 8.000000)" fill-rule="nonzero">
<path d="M4.78695925,0 C4.93907576,0.00640053734 5.08980912,0.0297722448 5.23590669,0.0696107894 L6.04411885,0.208832358 L8.36786225,0.609156306 L9.05623052,0.727568957 L9.34049272,0.779838978 C9.4208346,0.810990397 9.48880882,0.864472181 9.53507221,0.932933165 C9.63249541,1.08156829 9.59139082,1.55819161 9.59139082,1.80319184 L9.59139082,5.50346339 C9.61652657,5.96040515 9.57368429,6.41838192 9.46407338,6.86446572 C8.99137069,8.33273307 7.79319884,9.18292601 6.4332778,9.82676385 C6.08530742,9.98485807 5.72897142,10.1265716 5.36562634,10.2513649 C5.20282115,10.3160622 5.03359547,10.3658437 4.86036029,10.4 C4.64335359,10.3870561 4.43113161,10.3350591 4.23551727,10.2469058 C3.73232522,10.0790571 3.24437148,9.87419842 2.77630464,9.63428136 C1.51220531,8.94337573 0.478718689,8.15338002 0.0786163109,6.65464247 C0.0100051608,6.28669909 -0.0138107298,5.91276209 0.00761749245,5.53987899 L0.00761749245,1.29857558 C-0.00280932948,1.19346977 0.00621802142,1.08748301 0.0343087764,0.985203186 C0.0694100914,0.910412579 0.128138143,0.847268253 0.202730795,0.804116045 C0.311478278,0.763156781 0.426158841,0.737361587 0.543044695,0.727568957 L1.25410057,0.605688156 L4.78695925,0 Z" id="形状" fill="#999999"></path>
<path d="M6.97244179,3.62966986 C7.12551092,3.62261751 7.2698436,3.69606432 7.34574703,3.81963432 C7.42165046,3.94320431 7.41622191,4.09589198 7.33170651,4.21454909 C7.23412465,4.32746529 7.12228858,4.42909934 6.99859925,4.51726931 L6.51602079,4.94905436 L5.161438,6.16018294 L4.74612158,6.53177075 C4.65113084,6.64886544 4.49426844,6.70774773 4.33827872,6.68486494 C4.12314695,6.64374256 3.91709022,6.38759468 3.77776171,6.25679577 L2.59533772,5.16036396 C2.41468782,5.0309278 2.37230178,4.79402906 2.49818143,4.61735029 C2.6328091,4.45991435 2.87451189,4.4236182 3.05576241,4.53361917 L4.41381506,5.79379734 L4.47387046,5.73805917 L5.0536052,5.21957029 L6.22108207,4.18209709 L6.60650425,3.83751131 C6.66867923,3.7766839 6.73626966,3.72083045 6.80855729,3.67054451 C6.86219988,3.65426237 6.91683481,3.64094445 6.97217488,3.63066076 L6.97244179,3.62966986 Z" id="路径" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

29
weapp/src/static/img/patrolView/patrol-active.svg

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M14.5044643,-6.34022749e-14 C15.7494308,-6.34022749e-14 16.7607143,1.01128348 16.7607143,2.25625 L16.7607143,2.25625 L16.76,6.923 L15.471,6.923 L15.4714286,2.25625 C15.4714286,1.76053691 15.0979736,1.35167382 14.6171968,1.29579396 L14.5044643,1.28928571 L2.25625,1.28928571 C1.72240513,1.28928571 1.28928571,1.72240513 1.28928571,2.25625 L1.28928571,2.25625 L1.28928571,15.79375 C1.28928571,16.3275949 1.72240513,16.7607143 2.25625,16.7607143 L2.25625,16.7607143 L10,16.76 L10,18.049 L2.25625,18.05 C1.06315709,18.05 0.0846793232,17.1212344 0.00521085144,15.9480975 L-2.95011878e-13,15.79375 L-2.95011878e-13,2.25625 C-2.95011878e-13,1.01128348 1.01128348,-6.34022749e-14 2.25625,-6.34022749e-14 L2.25625,-6.34022749e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_巡查-查看(管理员)" transform="translate(-59.000000, -81.000000)">
<g id="编组-7" transform="translate(0.000000, 64.000000)">
<g id="编组-10" transform="translate(15.000000, 0.000000)">
<g id="编组-8" transform="translate(44.000000, 17.000000)">
<g id="baobiaoxinxi" transform="translate(0.000000, 1.000000)">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#346FC2" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.3142857,3.30934066 L3.22321429,3.30934066 C2.86664621,3.30934066 2.57857143,3.59741544 2.57857143,3.95398352 C2.57857143,4.3105516 2.86664621,4.59862637 3.22321429,4.59862637 L10.3142857,4.59862637 C10.6708538,4.59862637 10.9589286,4.3105516 10.9589286,3.95398352 C10.9589286,3.59741544 10.6708538,3.30934066 10.3142857,3.30934066 Z M8.38035714,6.53255495 L3.22321429,6.53255495 C2.86664621,6.53255495 2.57857143,6.82062972 2.57857143,7.1771978 C2.57857143,7.53376588 2.86664621,7.82184066 3.22321429,7.82184066 L8.38035714,7.82184066 C8.73692522,7.82184066 9.025,7.53376588 9.025,7.1771978 C9.025,6.82062972 8.73692522,6.53255495 8.38035714,6.53255495 Z M7.73571429,9.75576923 L3.22321429,9.75576923 C2.86664621,9.75576923 2.57857143,10.043844 2.57857143,10.4004121 C2.57857143,10.7569802 2.86664621,11.0450549 3.22321429,11.0450549 L7.73571429,11.0450549 C8.09228237,11.0450549 8.38035714,10.7569802 8.38035714,10.4004121 C8.38035714,10.043844 8.09228237,9.75576923 7.73571429,9.75576923 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#346FC2" fill-rule="nonzero"></path>
<g id="定位" transform="translate(10.769231, 7.692308)" fill="#346FC2" fill-rule="nonzero">
<path d="M7.89474159,1.33198768 L7.86437425,1.30364483 C7.01416767,0.481775841 5.89068885,0 4.61538462,0 C3.34008038,0 2.21660156,0.481775841 1.36639498,1.27530198 L1.33602764,1.33198768 C0.516199669,2.12550331 0,3.23076923 0,4.44938552 C0,5.6680018 0.516188401,6.77328876 1.33602764,7.56680439 L1.36639498,7.59513672 L4.61538462,10.7692308 L7.86437425,7.62347957 L7.89474159,7.59513672 C8.71456956,6.80162109 9.23076923,5.69635517 9.23076923,4.44939603 C9.23076923,3.23076923 8.71458083,2.12550331 7.89474159,1.33198768 Z M4.61538462,5.72469802 C3.73482197,5.72469802 3.00607347,5.0161899 3.00607347,4.1659991 C3.00607347,3.79757362 3.12753155,3.48583383 3.34008038,3.23076923 C3.64371995,2.86234375 4.09918495,2.60728966 4.61538462,2.60728966 C5.49594727,2.60728966 6.22469576,3.31578726 6.22469576,4.16598858 C6.22469576,5.0161899 5.49594727,5.72469802 4.61538462,5.72469802 L4.61538462,5.72469802 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

27
weapp/src/static/img/patrolView/patrol.svg

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<defs>
<path d="M14.5044643,-3.19744231e-14 C15.7494308,-3.19744231e-14 16.7607143,1.01128348 16.7607143,2.25625 L16.7607143,2.25625 L16.76,6.923 L15.471,6.923 L15.4714286,2.25625 C15.4714286,1.76053691 15.0979736,1.35167382 14.6171968,1.29579396 L14.5044643,1.28928571 L2.25625,1.28928571 C1.72240513,1.28928571 1.28928571,1.72240513 1.28928571,2.25625 L1.28928571,2.25625 L1.28928571,15.79375 C1.28928571,16.3275949 1.72240513,16.7607143 2.25625,16.7607143 L2.25625,16.7607143 L9.999,16.76 L9.999,18.049 L2.25625,18.05 C1.06315709,18.05 0.0846793232,17.1212344 0.00521085144,15.9480975 L-1.47437618e-13,15.79375 L-1.47437618e-13,2.25625 C-1.47437618e-13,1.01128348 1.01128348,-3.19744231e-14 2.25625,-3.19744231e-14 L2.25625,-3.19744231e-14 Z" id="path-1"></path>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="首页_养护-查看(管理员)备份" transform="translate(-59.000000, -81.000000)">
<g id="编组-10" transform="translate(15.000000, 64.000000)">
<g id="编组-8" transform="translate(44.000000, 17.000000)">
<g id="baobiaoxinxi" transform="translate(0.000000, 1.000000)">
<g id="矩形">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#999999" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
<path d="M10.3142857,3.30934066 L3.22321429,3.30934066 C2.86664621,3.30934066 2.57857143,3.59741544 2.57857143,3.95398352 C2.57857143,4.3105516 2.86664621,4.59862637 3.22321429,4.59862637 L10.3142857,4.59862637 C10.6708538,4.59862637 10.9589286,4.3105516 10.9589286,3.95398352 C10.9589286,3.59741544 10.6708538,3.30934066 10.3142857,3.30934066 Z M8.38035714,6.53255495 L3.22321429,6.53255495 C2.86664621,6.53255495 2.57857143,6.82062972 2.57857143,7.1771978 C2.57857143,7.53376588 2.86664621,7.82184066 3.22321429,7.82184066 L8.38035714,7.82184066 C8.73692522,7.82184066 9.025,7.53376588 9.025,7.1771978 C9.025,6.82062972 8.73692522,6.53255495 8.38035714,6.53255495 Z M7.73571429,9.75576923 L3.22321429,9.75576923 C2.86664621,9.75576923 2.57857143,10.043844 2.57857143,10.4004121 C2.57857143,10.7569802 2.86664621,11.0450549 3.22321429,11.0450549 L7.73571429,11.0450549 C8.09228237,11.0450549 8.38035714,10.7569802 8.38035714,10.4004121 C8.38035714,10.043844 8.09228237,9.75576923 7.73571429,9.75576923 Z" id="形状" stroke="#346FC2" stroke-width="0.1" fill="#999999" fill-rule="nonzero"></path>
<g id="定位" transform="translate(10.769231, 7.692308)" fill="#999999" fill-rule="nonzero">
<path d="M7.89474159,1.33198768 L7.86437425,1.30364483 C7.01416767,0.481775841 5.89068885,0 4.61538462,0 C3.34008038,0 2.21660156,0.481775841 1.36639498,1.27530198 L1.33602764,1.33198768 C0.516199669,2.12550331 0,3.23076923 0,4.44938552 C0,5.6680018 0.516188401,6.77328876 1.33602764,7.56680439 L1.36639498,7.59513672 L4.61538462,10.7692308 L7.86437425,7.62347957 L7.89474159,7.59513672 C8.71456956,6.80162109 9.23076923,5.69635517 9.23076923,4.44939603 C9.23076923,3.23076923 8.71458083,2.12550331 7.89474159,1.33198768 Z M4.61538462,5.72469802 C3.73482197,5.72469802 3.00607347,5.0161899 3.00607347,4.1659991 C3.00607347,3.79757362 3.12753155,3.48583383 3.34008038,3.23076923 C3.64371995,2.86234375 4.09918495,2.60728966 4.61538462,2.60728966 C5.49594727,2.60728966 6.22469576,3.31578726 6.22469576,4.16598858 C6.22469576,5.0161899 5.49594727,5.72469802 4.61538462,5.72469802 L4.61538462,5.72469802 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
weapp/src/static/img/patrolView/search.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

118
web/client/assets/color.less

@ -174,7 +174,7 @@ button::-moz-focus-inner,
[type='submit']::-moz-focus-inner {border-style: none;}
fieldset {border: 0;}
legend {color: inherit;}
mark {background-color: color(~`colorPalette("@{table-fixed-header-sort-active-bg}", 1)`);}
mark {background-color: #feffe6;}
::selection {color: #fff;background: @primary-color;}
.anticon {color: inherit;}
.ant-fade-enter, .ant-fade-appear {animation-fill-mode: both;}
@ -555,18 +555,6 @@ html {--antd-wave-shadow-color: @primary-color;}
.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled], .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active {color: @disabled-color;border-color: @border-color-base;background: @disabled-bg;box-shadow: none;}
.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {color: currentcolor;}
.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after, .ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {background: transparent;}
a.ant-btn-disabled,
a.ant-btn-disabled:hover,
a.ant-btn-disabled:focus,
a.ant-btn-disabled:active {color: @disabled-color;border-color: transparent;background: transparent;box-shadow: none;}
a.ant-btn-disabled > a:only-child,
a.ant-btn-disabled:hover > a:only-child,
a.ant-btn-disabled:focus > a:only-child,
a.ant-btn-disabled:active > a:only-child {color: currentcolor;}
a.ant-btn-disabled > a:only-child::after,
a.ant-btn-disabled:hover > a:only-child::after,
a.ant-btn-disabled:focus > a:only-child::after,
a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child), .ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary {border-right-color: color(~`colorPalette("@{primary-color}", 5)`);border-left-color: @border-color-base;}
.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled], .ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {border-right-color: @border-color-base;border-left-color: color(~`colorPalette("@{primary-color}", 5)`);}
.ant-picker-calendar {color: @text-color;background: @calendar-full-bg;}
@ -601,6 +589,7 @@ a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-card-type-inner .ant-card-head {background: @background-color-light;}
.ant-card-meta-title {color: @heading-color;}
.ant-card-meta-description {color: @text-color-secondary;}
.ant-card-loading-block {background: linear-gradient(90deg, fade(@card-skeleton-bg, 20%), fade(@card-skeleton-bg, 40%), fade(@card-skeleton-bg, 20%));background-size: 600% 600%;border-radius: 2px;}
.ant-carousel {color: @text-color;}
.ant-carousel .slick-slider {-webkit-tap-highlight-color: transparent;}
.ant-carousel .slick-prev, .ant-carousel .slick-next {color: transparent;background: transparent;border: 0;}
@ -674,10 +663,8 @@ a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-comment-actions > li > span:hover {color: @comment-action-hover-color;}
.ant-picker-status-error.ant-picker, .ant-picker-status-error.ant-picker:not([disabled]):hover {background-color: @input-bg;border-color: #ff4d4f;}
.ant-picker-status-error.ant-picker-focused, .ant-picker-status-error.ant-picker:focus {border-color: #ff7875;box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);border-right-width: 1px;}
.ant-picker-status-error.ant-picker .ant-picker-active-bar {background: #ff7875;}
.ant-picker-status-warning.ant-picker, .ant-picker-status-warning.ant-picker:not([disabled]):hover {background-color: @input-bg;border-color: #faad14;}
.ant-picker-status-warning.ant-picker-focused, .ant-picker-status-warning.ant-picker:focus {border-color: #ffc53d;box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);border-right-width: 1px;}
.ant-picker-status-warning.ant-picker .ant-picker-active-bar {background: #ffc53d;}
.ant-picker {color: @text-color;background: @picker-bg;border: 1px solid @border-color-base;border-radius: 2px;}
.ant-picker:hover, .ant-picker-focused {border-color: color(~`colorPalette("@{primary-color}", 5)`);border-right-width: 1px;}
.ant-input-rtl .ant-picker:hover, .ant-input-rtl .ant-picker-focused {border-right-width: 0;border-left-width: 1px !important;}
@ -708,7 +695,7 @@ a.ant-btn-disabled:active > a:only-child::after {background: transparent;}
.ant-picker-range .ant-picker-active-bar {background: @primary-color;}
.ant-picker-dropdown {color: @text-color;}
.ant-picker-ranges .ant-picker-preset > .ant-tag-blue {color: @primary-color;background: color(~`colorPalette("@{primary-color}", 1)`);border-color: color(~`colorPalette("@{primary-color}", 3)`);}
.ant-picker-range-arrow {box-shadow: 2px 2px 6px -2px rgba(0, 0, 0, 0.1);border-radius: 0 0 2px;}
.ant-picker-range-arrow {background: linear-gradient(135deg, transparent 40%, @calendar-bg 40%);box-shadow: 2px 2px 6px -2px rgba(0, 0, 0, 0.1);border-radius: 0 0 2px;}
.ant-picker-range-arrow::before {background: @calendar-bg;background-repeat: no-repeat;background-position: -10px -10px;}
.ant-picker-panel-container {background: @calendar-bg;border-radius: 2px;box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);}
.ant-picker-panel-container .ant-picker-panel {background: transparent;border-width: 0 0 1px 0;border-radius: 0;}
@ -814,7 +801,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-dropdown-menu-item.ant-dropdown-menu-item-danger {color: #ff4d4f;}
.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover {color: #fff;background-color: #ff4d4f;}
.ant-dropdown {color: @text-color;}
.ant-dropdown-arrow {border-radius: 0 0 2px;}
.ant-dropdown-arrow {background: linear-gradient(135deg, transparent 40%, @popover-bg 40%);border-radius: 0 0 2px;}
.ant-dropdown-arrow::before {background: @popover-bg;background-repeat: no-repeat;background-position: -10px -10px;}
.ant-dropdown-placement-top > .ant-dropdown-arrow, .ant-dropdown-placement-topLeft > .ant-dropdown-arrow, .ant-dropdown-placement-topRight > .ant-dropdown-arrow {box-shadow: 3px 3px 7px -3px rgba(0, 0, 0, 0.1);}
.ant-dropdown-placement-bottom > .ant-dropdown-arrow, .ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow, .ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {box-shadow: 2px 2px 5px -2px rgba(0, 0, 0, 0.1);}
@ -949,7 +936,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 2px 0 0 2px;}
.ant-input-group > .ant-input-rtl:first-child, .ant-input-group-rtl .ant-input-group-addon:first-child {border-radius: 0 2px 2px 0;}
.ant-input-group-rtl .ant-input-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;}
.ant-input-group-rtl .ant-input-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-group-rtl .ant-input-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;}
.ant-input-group-rtl.ant-input-group > .ant-input:last-child, .ant-input-group-rtl.ant-input-group-addon:last-child {border-radius: 2px 0 0 2px;}
.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child) {border-radius: 2px 0 0 2px;}
.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child) {border-radius: 0 2px 2px 0;}
@ -957,10 +944,6 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:first-child, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:last-child, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input, .ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {border-left-width: 1px;border-radius: 2px 0 0 2px;}
.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-group > .ant-input-rtl:first-child {border-radius: 0 2px 2px 0;}
.ant-input-group > .ant-input-rtl:last-child {border-radius: 2px 0 0 2px;}
.ant-input-group-rtl .ant-input-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;border-radius: 0 2px 2px 0;}
.ant-input-group-rtl .ant-input-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-password-icon.anticon {color: @text-color-secondary;}
.ant-input-password-icon.anticon:hover {color: @input-icon-hover-color;}
.ant-input-textarea-show-count::after {color: @text-color-secondary;}
@ -1046,7 +1029,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 2px 0 0 2px;}
.ant-input-number-group > .ant-input-number-rtl:first-child, .ant-input-number-group-rtl .ant-input-number-group-addon:first-child {border-radius: 0 2px 2px 0;}
.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;}
.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;}
.ant-input-number-group-rtl.ant-input-number-group > .ant-input-number:last-child, .ant-input-number-group-rtl.ant-input-number-group-addon:last-child {border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child) {border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {border-radius: 0 2px 2px 0;}
@ -1054,10 +1037,6 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:first-child, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:first-child > .ant-select-selector, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:first-child .ant-input, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:first-child .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:last-child, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:last-child > .ant-select-selector, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:last-child .ant-input, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:last-child .ant-input, .ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker-focused:last-child .ant-input {border-left-width: 1px;border-radius: 2px 0 0 2px;}
.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {border-radius: 0 2px 2px 0;}
.ant-input-number-group > .ant-input-number-rtl:first-child {border-radius: 0 2px 2px 0;}
.ant-input-number-group > .ant-input-number-rtl:last-child {border-radius: 2px 0 0 2px;}
.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {border-right: 1px solid @border-color-base;border-left: 0;border-radius: 0 2px 2px 0;}
.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {border-right: 0;border-left: 1px solid @border-color-base;border-radius: 2px 0 0 2px;}
.ant-input-number-handler {color: @text-color-secondary;border-left: 1px solid @border-color-base;}
.ant-input-number-handler:active {background: @input-number-handler-active-bg;}
.ant-input-number-handler:hover .ant-input-number-handler-up-inner, .ant-input-number-handler:hover .ant-input-number-handler-down-inner {color: color(~`colorPalette("@{primary-color}", 5)`);}
@ -1149,10 +1128,10 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-mentions-dropdown-menu-item-active {background-color: @item-hover-bg;}
.ant-menu-item-danger.ant-menu-item {color: #ff4d4f;}
.ant-menu-item-danger.ant-menu-item:hover, .ant-menu-item-danger.ant-menu-item-active {color: #ff4d4f;}
.ant-menu-item-danger.ant-menu-item:active {background: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);}
.ant-menu-item-danger.ant-menu-item:active {background: color(~`colorPalette("@{menu-popup-bg}", 2)`);}
.ant-menu-item-danger.ant-menu-item-selected {color: #ff4d4f;}
.ant-menu-item-danger.ant-menu-item-selected > a, .ant-menu-item-danger.ant-menu-item-selected > a:hover {color: #ff4d4f;}
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {background-color: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);}
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {background-color: color(~`colorPalette("@{menu-popup-bg}", 2)`);}
.ant-menu-inline .ant-menu-item-danger.ant-menu-item::after {border-right-color: #ff4d4f;}
.ant-menu-dark .ant-menu-item-danger.ant-menu-item, .ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover, .ant-menu-dark .ant-menu-item-danger.ant-menu-item > a {color: #ff4d4f;}
.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {color: #fff;background-color: #ff4d4f;}
@ -1313,8 +1292,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-pagination-simple .ant-pagination-simple-pager input:hover {border-color: @primary-color;}
.ant-pagination-simple .ant-pagination-simple-pager input:focus {border-color: color(~`colorPalette("@{primary-color}", 5)`);box-shadow: 0 0 0 2px fade(@primary-color, 20%);}
.ant-pagination-simple .ant-pagination-simple-pager input[disabled] {color: @disabled-color;background: @disabled-bg;border-color: @border-color-base;}
.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active) {background: transparent;border-color: transparent;}
.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link, .ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link {background: transparent;border-color: transparent;}
.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active) {background: transparent;border-color: transparent;}
.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link, .ant-pagination.mini .ant-pagination-next .ant-pagination-item-link {background: transparent;border-color: transparent;}
.ant-pagination.ant-pagination-disabled .ant-pagination-item {background: @disabled-bg;border-color: @border-color-base;}
.ant-pagination.ant-pagination-disabled .ant-pagination-item a {color: @disabled-color;background: transparent;border: none;}
.ant-pagination.ant-pagination-disabled .ant-pagination-item-active {background: @pagination-item-disabled-bg-active;}
@ -1330,8 +1309,8 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-popover-message {color: @text-color;}
.ant-popover-message > .anticon {color: #faad14;}
.ant-popover-arrow {background: transparent;}
.ant-popover-arrow-content {--antd-arrow-background-color: @popover-bg;border-radius: 0 0 2px;}
.ant-popover-arrow-content::before {background: var(--antd-arrow-background-color);background-repeat: no-repeat;background-position: -10px -10px;}
.ant-popover-arrow-content {background-color: @popover-bg;border-radius: 0 0 2px;}
.ant-popover-arrow-content::before {background: @popover-bg;background-repeat: no-repeat;background-position: -10px -10px;}
.ant-popover-placement-top .ant-popover-arrow-content, .ant-popover-placement-topLeft .ant-popover-arrow-content, .ant-popover-placement-topRight .ant-popover-arrow-content {box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);}
.ant-popover-placement-right .ant-popover-arrow-content, .ant-popover-placement-rightTop .ant-popover-arrow-content, .ant-popover-placement-rightBottom .ant-popover-arrow-content {box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);}
.ant-popover-placement-bottom .ant-popover-arrow-content, .ant-popover-placement-bottomLeft .ant-popover-arrow-content, .ant-popover-placement-bottomRight .ant-popover-arrow-content {box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.06);}
@ -1387,13 +1366,12 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-radio-wrapper {color: @text-color;}
.ant-radio {color: @text-color;}
.ant-radio-wrapper:hover .ant-radio, .ant-radio:hover .ant-radio-inner, .ant-radio-input:focus + .ant-radio-inner {border-color: @primary-color;}
.ant-radio-input:focus + .ant-radio-inner {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-input:focus + .ant-radio-inner {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-checked::after {border: 1px solid @primary-color;border-radius: 50%;animation-fill-mode: both;}
.ant-radio-inner {background-color: @btn-default-bg;border-color: @border-color-base;border-style: solid;border-width: 1px;border-radius: 50%;}
.ant-radio-inner::after {background-color: @primary-color;border-top: 0;border-left: 0;border-radius: 16px;}
.ant-radio.ant-radio-disabled .ant-radio-inner {border-color: @border-color-base;}
.ant-radio-checked .ant-radio-inner {border-color: @primary-color;}
.ant-radio-disabled .ant-radio-inner {background-color: @disabled-bg;}
.ant-radio-disabled .ant-radio-inner {background-color: @disabled-bg;border-color: @border-color-base !important;}
.ant-radio-disabled .ant-radio-inner::after {background-color: @radio-dot-disabled-color;}
.ant-radio-disabled + span {color: @disabled-color;}
.ant-radio-button-wrapper {color: @text-color;background: @btn-default-bg;border: 1px solid @border-color-base;border-top-width: 1.02px;border-left-width: 0;}
@ -1403,7 +1381,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-radio-button-wrapper:last-child {border-radius: 0 2px 2px 0;}
.ant-radio-button-wrapper:first-child:last-child {border-radius: 2px;}
.ant-radio-button-wrapper:hover {color: @primary-color;}
.ant-radio-button-wrapper:focus-within {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-button-wrapper:focus-within {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {color: @primary-color;background: @btn-default-bg;border-color: @primary-color;}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {background-color: @primary-color;}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child {border-color: @primary-color;}
@ -1411,11 +1389,11 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before {background-color: color(~`colorPalette("@{primary-color}", 5)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {color: color(~`colorPalette("@{primary-color}", 7)`);border-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before {background-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {color: @radio-solid-checked-color;background: @primary-color;border-color: @primary-color;}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {color: @radio-solid-checked-color;background: color(~`colorPalette("@{primary-color}", 5)`);border-color: color(~`colorPalette("@{primary-color}", 5)`);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {color: @radio-solid-checked-color;background: color(~`colorPalette("@{primary-color}", 7)`);border-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px fade(@primary-color, 12%);}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {box-shadow: 0 0 0 3px color(~`colorPalette("@{primary-color}", 1)`);}
.ant-radio-button-wrapper-disabled {color: @disabled-color;background-color: @disabled-bg;border-color: @border-color-base;}
.ant-radio-button-wrapper-disabled:first-child, .ant-radio-button-wrapper-disabled:hover {color: @disabled-color;background-color: @disabled-bg;border-color: @border-color-base;}
.ant-radio-button-wrapper-disabled:first-child {border-left-color: @border-color-base;}
@ -1482,11 +1460,14 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle {border-radius: 50%;}
.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {border-radius: 50%;}
.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {border-radius: 50%;}
.ant-skeleton-content .ant-skeleton-title {background: @skeleton-color;border-radius: 2px;}
.ant-skeleton-content .ant-skeleton-paragraph > li {background: @skeleton-color;border-radius: 2px;}
.ant-skeleton-content .ant-skeleton-title {background: @skeleton-color;border-radius: 4px;}
.ant-skeleton-content .ant-skeleton-paragraph > li {background: @skeleton-color;border-radius: 4px;}
.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title, .ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph > li {border-radius: 100px;}
.ant-skeleton-active .ant-skeleton-title, .ant-skeleton-active .ant-skeleton-paragraph > li, .ant-skeleton-active .ant-skeleton-avatar, .ant-skeleton-active .ant-skeleton-button, .ant-skeleton-active .ant-skeleton-input, .ant-skeleton-active .ant-skeleton-image {background: transparent;}
.ant-skeleton-active .ant-skeleton-title::after, .ant-skeleton-active .ant-skeleton-paragraph > li::after, .ant-skeleton-active .ant-skeleton-avatar::after, .ant-skeleton-active .ant-skeleton-button::after, .ant-skeleton-active .ant-skeleton-input::after, .ant-skeleton-active .ant-skeleton-image::after {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);}
.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title, .ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-button {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-input {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton.ant-skeleton-active .ant-skeleton-image {background: linear-gradient(90deg, @skeleton-color 25%, @skeleton-to-color 37%, @skeleton-color 63%);background-size: 400% 100%;}
.ant-skeleton-element .ant-skeleton-button {background: @skeleton-color;border-radius: 2px;}
.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle {border-radius: 50%;}
.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round {border-radius: 32px;}
@ -1603,7 +1584,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-expanded-row > td, .ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-placeholder > td {border-right: 0;}
.ant-table.ant-table-bordered > .ant-table-footer {border: 1px solid @border-color-split;border-top: 0;}
.ant-table-cell .ant-table-container:first-child {border-top: 0;}
.ant-table-cell-scrollbar:not([rowspan]) {box-shadow: 0 1px 0 1px @table-header-bg;}
.ant-table-cell-scrollbar {box-shadow: 0 1px 0 1px @table-header-bg;}
.ant-table {color: @text-color;background: @component-background;border-radius: 2px;}
.ant-table table {border-radius: 2px 2px 0 0;border-collapse: separate;border-spacing: 0;}
.ant-table-footer {color: @heading-color;background: @background-color-light;}
@ -1654,10 +1635,10 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-table-empty .ant-table-tbody > tr.ant-table-placeholder {color: @disabled-color;}
.ant-table-tbody > tr.ant-table-placeholder:hover > td {background: @component-background;}
.ant-table-cell-fix-left, .ant-table-cell-fix-right {background: @component-background;}
.ant-table-ping-left:not(.ant-table-has-fix-left) > .ant-table-container::before {box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container::before {box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-left .ant-table-cell-fix-left-first::after, .ant-table-ping-left .ant-table-cell-fix-left-last::after {box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-left .ant-table-cell-fix-left-last::before {background-color: transparent !important;}
.ant-table-ping-right:not(.ant-table-has-fix-right) > .ant-table-container::after {box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container::after {box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-ping-right .ant-table-cell-fix-right-first::after, .ant-table-ping-right .ant-table-cell-fix-right-last::after {box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);}
.ant-table-sticky-holder {background: @component-background;}
.ant-table-sticky-scroll {background: lighten(@table-border-color, 80%);border-top: 1px solid @border-color-split;}
@ -1666,7 +1647,6 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-table-sticky-scroll-bar-active {background-color: fade(@table-sticky-scroll-bar-bg, 80%);}
.ant-table-title {border-radius: 2px 2px 0 0;}
.ant-table-title + .ant-table-container {border-top-left-radius: 0;border-top-right-radius: 0;}
.ant-table-title + .ant-table-container table {border-radius: 0;}
.ant-table-title + .ant-table-container table > thead > tr:first-child th:first-child {border-radius: 0;}
.ant-table-title + .ant-table-container table > thead > tr:first-child th:last-child {border-radius: 0;}
.ant-table-container {border-top-left-radius: 2px;border-top-right-radius: 2px;}
@ -1722,31 +1702,43 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-tag-checkable:active, .ant-tag-checkable-checked {color: #fff;}
.ant-tag-checkable-checked {background-color: @primary-color;}
.ant-tag-checkable:active {background-color: color(~`colorPalette("@{primary-color}", 7)`);}
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{alert-info-bg-color}", 1)`);border-color: #ffadd2;}
<<<<<<< HEAD
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{modal-footer-border-color-split}", 1)`);border-color: #ffadd2;}
.ant-tag-pink-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{alert-info-bg-color}", 1)`);border-color: #ffadd2;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{modal-footer-border-color-split}", 1)`);border-color: #ffadd2;}
=======
.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{timeline-color}", 4)`);border-color: #ffadd2;}
.ant-tag-pink-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-magenta {color: #c41d7f;background: color(~`colorPalette("@{timeline-color}", 4)`);border-color: #ffadd2;}
>>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85
.ant-tag-magenta-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;}
.ant-tag-red {color: #cf1322;background: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);border-color: #ffa39e;}
.ant-tag-red {color: #cf1322;background: color(~`colorPalette("@{menu-popup-bg}", 2)`);border-color: #ffa39e;}
.ant-tag-red-inverse {color: #fff;background: #f5222d;border-color: #f5222d;}
.ant-tag-volcano {color: #d4380d;background: #fff2e8;border-color: #ffbb96;}
.ant-tag-volcano-inverse {color: #fff;background: #fa541c;border-color: #fa541c;}
.ant-tag-orange {color: #d46b08;background: #fff7e6;border-color: #ffd591;}
.ant-tag-orange-inverse {color: #fff;background: #fa8c16;border-color: #fa8c16;}
.ant-tag-yellow {color: #d4b106;background: color(~`colorPalette("@{table-fixed-header-sort-active-bg}", 1)`);border-color: #fffb8f;}
.ant-tag-yellow {color: #d4b106;background: #feffe6;border-color: #fffb8f;}
.ant-tag-yellow-inverse {color: #fff;background: #fadb14;border-color: #fadb14;}
.ant-tag-gold {color: #d48806;background: #fffbe6;border-color: #ffe58f;}
.ant-tag-gold {color: #d48806;background: color(~`colorPalette("@{skeleton-color}", 1)`);border-color: #ffe58f;}
.ant-tag-gold-inverse {color: #fff;background: #faad14;border-color: #faad14;}
.ant-tag-cyan {color: #08979c;background: color(~`colorPalette("@{avatar-bg}", 1)`);border-color: #87e8de;}
.ant-tag-cyan {color: #08979c;background: #e6fffb;border-color: #87e8de;}
.ant-tag-cyan-inverse {color: #fff;background: #13c2c2;border-color: #13c2c2;}
.ant-tag-lime {color: #7cb305;background: #fcffe6;border-color: #eaff8f;}
.ant-tag-lime-inverse {color: #fff;background: #a0d911;border-color: #a0d911;}
.ant-tag-green {color: #389e0d;background: #f6ffed;border-color: #b7eb8f;}
.ant-tag-green-inverse {color: #fff;background: #52c41a;border-color: #52c41a;}
.ant-tag-blue {color: #096dd9;background: color(~`colorPalette("@{radio-dot-disabled-color}", 1)`);border-color: #91d5ff;}
.ant-tag-blue {color: #096dd9;background: color(~`colorPalette("@{progress-steps-item-bg}", 1)`);border-color: #91d5ff;}
.ant-tag-blue-inverse {color: #fff;background: #1890ff;border-color: #1890ff;}
.ant-tag-geekblue {color: #1d39c4;background: color(~`colorPalette("@{descriptions-bg}", 2)`);border-color: #adc6ff;}
<<<<<<< HEAD
.ant-tag-geekblue {color: #1d39c4;background: color(~`colorPalette("@{success-color-deprecated-border}", 1)`);border-color: #adc6ff;}
.ant-tag-geekblue-inverse {color: #fff;background: #2f54eb;border-color: #2f54eb;}
.ant-tag-purple {color: #531dab;background: color(~`colorPalette("@{progress-steps-item-bg}", 3)`);border-color: #d3adf7;}
=======
.ant-tag-geekblue {color: #1d39c4;background: color(~`colorPalette("@{popover-background}", 3)`);border-color: #adc6ff;}
.ant-tag-geekblue-inverse {color: #fff;background: #2f54eb;border-color: #2f54eb;}
.ant-tag-purple {color: #531dab;background: color(~`colorPalette("@{calendar-bg}", 1)`);border-color: #d3adf7;}
.ant-tag-purple {color: #531dab;background: #f9f0ff;border-color: #d3adf7;}
>>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85
.ant-tag-purple-inverse {color: #fff;background: #722ed1;border-color: #722ed1;}
.ant-tag-success {color: #52c41a;background: @success-color-deprecated-bg;border-color: @success-color-deprecated-border;}
.ant-tag-processing {color: @primary-color;background: @info-color-deprecated-bg;border-color: @info-color-deprecated-border;}
@ -1769,7 +1761,7 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;}
.ant-tooltip {color: @text-color;}
.ant-tooltip-inner {color: #fff;background-color: @tooltip-bg;border-radius: 2px;box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);}
.ant-tooltip-arrow {background: transparent;}
.ant-tooltip-arrow-content {--antd-arrow-background-color: linear-gradient(to right bottom, fadeout(@tooltip-bg, 10%), @tooltip-bg);border-radius: 0 0 2px;}
.ant-tooltip-arrow-content {--antd-arrow-background-color: linear-gradient(to right bottom, fadeout(@tooltip-bg, 10%), @tooltip-bg);background-color: transparent;border-radius: 0 0 2px;}
.ant-tooltip-arrow-content::before {background: var(--antd-arrow-background-color);background-repeat: no-repeat;background-position: -10px -10px;}
.ant-tooltip-placement-top .ant-tooltip-arrow-content, .ant-tooltip-placement-topLeft .ant-tooltip-arrow-content, .ant-tooltip-placement-topRight .ant-tooltip-arrow-content {box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);}
.ant-tooltip-placement-right .ant-tooltip-arrow-content, .ant-tooltip-placement-rightTop .ant-tooltip-arrow-content, .ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content {box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07);}
@ -1959,7 +1951,6 @@ a.ant-typography.ant-typography-disabled:hover, .ant-typography a.ant-typography
.ant-typography pre code {background: transparent;border: 0;}
.ant-typography blockquote {border-left: 4px solid rgba(100, 100, 100, 0.2);}
.ant-upload {color: @text-color;}
.ant-upload.ant-upload-disabled {color: @disabled-color;}
.ant-upload.ant-upload-select-picture-card {background-color: @background-color-light;border: 1px dashed @border-color-base;border-radius: 2px;}
.ant-upload.ant-upload-select-picture-card:hover {border-color: @primary-color;}
.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover {border-color: @border-color-base;}
@ -1984,12 +1975,13 @@ a.ant-typography.ant-typography-disabled:hover, .ant-typography a.ant-typography
.ant-upload-list-picture .ant-upload-list-item-error, .ant-upload-list-picture-card .ant-upload-list-item-error {border-color: #ff4d4f;}
.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info, .ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info {background: transparent;}
.ant-upload-list-picture .ant-upload-list-item-uploading, .ant-upload-list-picture-card .ant-upload-list-item-uploading {border-style: dashed;}
.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{radio-dot-disabled-color}", 1)`)'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{radio-dot-disabled-color}", 1)`)'] {fill: @error-color-deprecated-bg;}
.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{progress-steps-item-bg}", 1)`)'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{progress-steps-item-bg}", 1)`)'] {fill: @error-color-deprecated-bg;}
.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'] {fill: #ff4d4f;}
.ant-upload-list-picture-card .ant-upload-list-item-info::before {background-color: rgba(0, 0, 0, 0.5);}
.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete {color: rgba(255, 255, 255, 0.85);}
.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover, .ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover {color: #fff;}
.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item {background-color: @background-color-light;}
.ant-upload-list .ant-upload-animate-inline-appear, .ant-upload-list .ant-upload-animate-inline-enter, .ant-upload-list .ant-upload-animate-inline-leave {animation-fill-mode: cubic-bezier(0.78, 0.14, 0.15, 0.86);}
.ant-pro-table-search {background-color: @component-background !important;}
.bezierEasingMixin() {
@functions: ~`(function() {var NEWTON_ITERATIONS = 4;var NEWTON_MIN_SLOPE = 0.001;var SUBDIVISION_PRECISION = 0.0000001;var SUBDIVISION_MAX_ITERATIONS = 10;var kSplineTableSize = 11;var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);var float32ArraySupported = typeof Float32Array === 'function';function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }
@ -2439,8 +2431,7 @@ this.tinycolor = tinycolor;})()`;}
.colorPaletteMixin() {
@functions: ~`(function() {var hueStep = 2;var saturationStep = 0.16;var saturationStep2 = 0.05;var brightnessStep1 = 0.05;var brightnessStep2 = 0.15;var lightColorCount = 5;var darkColorCount = 4;var getHue = function(hsv, i, isLight) {var hue;if (hsv.h >= 60 && hsv.h <= 240) {hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i;} else {hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i;}
if (hue < 0) {hue += 360;} else if (hue >= 360) {hue -= 360;}
return Math.round(hue);};var getSaturation = function(hsv, i, isLight) {if (hsv.h === 0 && hsv.s === 0) {return hsv.s;}
var saturation;if (isLight) {saturation = hsv.s - saturationStep * i;} else if (i === darkColorCount) {saturation = hsv.s + saturationStep;} else {saturation = hsv.s + saturationStep2 * i;}
return Math.round(hue);};var getSaturation = function(hsv, i, isLight) {var saturation;if (isLight) {saturation = hsv.s - saturationStep * i;} else if (i === darkColorCount) {saturation = hsv.s + saturationStep;} else {saturation = hsv.s + saturationStep2 * i;}
if (saturation > 1) {saturation = 1;}
if (isLight && i === lightColorCount && saturation > 0.1) {saturation = 0.1;}
if (saturation < 0.06) {saturation = 0.06;}
@ -2897,7 +2888,7 @@ this.tinycolor = tinycolor;})()`;}
@cascader-dropdown-line-height: @dropdown-line-height;
@anchor-bg: transparent;
@anchor-border-color: @border-color-split;
@anchor-link-top: 4px;
@anchor-link-top: 7px;
@anchor-link-left: 16px;
@anchor-link-padding: @anchor-link-top 0 @anchor-link-top @anchor-link-left;
@tooltip-max-width: 250px;
@ -2922,7 +2913,7 @@ this.tinycolor = tinycolor;})()`;}
@modal-header-border-style: @border-style-base;
@modal-header-title-line-height: 22px;
@modal-header-title-font-size: @font-size-lg;
@modal-header-close-size: @modal-header-title-line-height + 2 * @modal-header-padding-vertical;
@modal-header-close-size: 56px;
@modal-heading-color: @heading-color;
@modal-close-color: @text-color-secondary;
@modal-footer-bg: transparent;
@ -2933,7 +2924,6 @@ this.tinycolor = tinycolor;})()`;}
@modal-mask-bg: fade(@black, 45%);
@modal-confirm-body-padding: 32px 32px 24px;
@modal-confirm-title-font-size: @font-size-lg;
@modal-border-radius: @border-radius-base;
@progress-default-color: @processing-color;
@progress-remaining-color: @background-color-base;
@progress-info-text-color: @progress-text-color;

BIN
web/client/assets/images/leadership/di.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
web/client/assets/images/leadership/jiejue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
web/client/assets/images/leadership/mingri.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
web/client/assets/images/leadership/pingshi.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
web/client/assets/images/leadership/road.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
web/client/assets/images/leadership/shiyantu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
web/client/assets/images/leadership/zibiaoti.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
web/client/assets/images/quanju/circle2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

BIN
web/client/assets/images/quanju/kelvhua_bdbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

77
web/client/src/sections/fillion/actions/infor.js

@ -11,14 +11,81 @@ export function getDepMessage() {
reducer: { name: 'depMessage' }
});
}
export function getReportStatistic(query) {
// export function getReportStatistic(query) {
// return dispatch => basicAction({
// type: 'get',
// dispatch: dispatch,
// query: query,
// actionType: 'GET_DEPARTMENT_STATIS',
// url: ApiTable.getReportStatistic,
// msg: { error: '获取填报信息失败' },
// reducer: { name: 'reportstatistic' }
// });
// }
export function getOperaTional(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_DEPARTMENT_STATIS',
url: ApiTable.getReportStatistic,
msg: { error: '获取填报信息失败' },
reducer: { name: 'reportstatistic' }
actionType: 'GET_OPERA_TIONAL',
url: ApiTable.getOperaTional,
msg: { error: '获取客运信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getSpecificVehicle(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_SPECIFIC_VEHICLE',
url: ApiTable.getSpecificVehicle,
msg: { error: '获取车辆信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getHouseholds(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_HOUSEHOLDS',
url: ApiTable.getHouseholds,
msg: { error: '获取业户信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getRoadway(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_ROADWAY',
url: ApiTable.getRoadway,
msg: { error: '获取道路信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getBridge(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_BRIDGE',
url: ApiTable.getBridge,
msg: { error: '获取桥梁信息失败' },
// reducer: { name: 'reportstatistic' }
});
}
export function getProject(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query,
actionType: 'GET_PROJECT',
url: ApiTable.getProject,
msg: { error: '获取工程信息失败' },
// reducer: { name: 'reportstatistic' }
});
}

1824
web/client/src/sections/fillion/components/bridgeTable.js

File diff suppressed because it is too large

118
web/client/src/sections/fillion/components/compileDrawer.js

@ -1,118 +0,0 @@
// import React, { useEffect, useState } from 'react';
// import { connect } from 'react-redux';
// import { Spin, Drawer, Button } from 'antd';
// import '../style.less';
// import { EditableProTable } from '@ant-design/pro-table';
// const CompileDrawer = (props) => {
// const { dispatch, actions, user, loading, visible, checkRow, close, reportRectifyDetail, checkAction } = props
// const [requesting, setRequesting] = useState(false)
// const [dataSource, setDataSource] = useState([])
// const { report } = actions
// const isCheck = checkAction == 'check'
// useEffect(() => {
// if (checkRow.day) {
// dispatch(report.reportRectifyDetail(checkRow.day, checkRow.depId))
// }
// }, [checkRow])
// useEffect(() => {
// let data = reportRectifyDetail
// let i = 1
// for (let d of data) {
// d.index_ = i++
// }
// setDataSource(data)
// }, [reportRectifyDetail])
// return (
// <Drawer
// title={"合用场所安全隐患排查整治汇总表"}
// placement="right"
// onClose={() => {
// close()
// }}
// visible={visible}
// width={'82%'}
// >
// <Spin spinning={loading || requesting}>
// <EditableProTable
// columns={[
// {
// title: '序号',
// dataIndex: 'index_',
// readonly: true,
// },
// {
// title: '名称',
// dataIndex: 'name',
// readonly: true,
// }, {
// title: '地址',
// dataIndex: 'address',
// readonly: true,
// }, {
// title: '排查发现隐患',
// dataIndex: 'hiddenDanger',
// readonly: true,
// }, {
// title: '采取整改措施',
// dataIndex: 'correctiveAction',
// }, {
// title: '实施处罚、强制措施情况',
// dataIndex: 'punishment',
// },
// ]}
// controlled={true}
// value={dataSource}
// onChange={setDataSource}
// rowKey="id"
// headerTitle={`填报单位:${checkRow.region};时间:${checkRow.day}`}
// maxLength={5}
// recordCreatorProps={false}
// editable={{
// type: 'multiple',
// editableKeys: isCheck ? [] : dataSource.map(r => r.id)
// }}
// toolBarRender={() => [
// isCheck ? '' :
// <Button
// type="primary"
// key="save"
// onClick={() => {
// // dataSource 就是当前数据,可以调用 api 将其保存
// setRequesting(true)
// const data = dataSource
// for (let d of data) {
// d.userId = user.id
// delete d.index_
// }
// dispatch(report.compileReportRectifyDetail(dataSource)).then(res => {
// setRequesting(false)
// })
// }}
// >
// 保存数据
// </Button>
// ]}
// >
// </EditableProTable>
// </Spin>
// </Drawer >
// )
// }
// function mapStateToProps (state) {
// const { auth, global, members, reportRectifyDetail } = state;
// return {
// loading: reportRectifyDetail.isRequesting,
// user: auth.user,
// actions: global.actions,
// members: members.data,
// reportRectifyDetail: reportRectifyDetail.data || []
// };
// }
// export default connect(mapStateToProps)(CompileDrawer);

124
web/client/src/sections/fillion/components/configModal.js

@ -1,124 +0,0 @@
// import React, { useEffect, useRef } from 'react';
// import { connect } from 'react-redux';
// import { Spin, Button, Modal, Form, Switch } from 'antd';
// import ProForm, { ProFormText, ProFormSelect } from '@ant-design/pro-form';
// import { useState } from 'react';
// const ConfigModal = (props) => {
// const { dispatch, actions, user, loading, visible, close, editData, allAreas, reportType } = props
// const [excuteTimeOptions, setExcuteTimeOptions] = useState([])
// const formRef = useRef()
// const { report } = actions
// useEffect(() => {
// let excuteTimeOptions = []
// for (let i = 0; i < 24; i++) {
// let curT = i
// if (curT < 10) {
// curT = '0' + curT
// }
// excuteTimeOptions.push({
// value: curT + ':00',
// label: curT + ':00',
// })
// excuteTimeOptions.push({
// value: curT + ':30',
// label: curT + ':30',
// })
// }
// setExcuteTimeOptions(excuteTimeOptions);
// }, [])
// return (
// <Modal
// title={`${editData ? '编辑' : '新增'}报表配置`}
// visible={visible}
// onOk={() => {
// formRef.current.validateFields().then(v => {
// v.excuteTime = String(v.excuteTime)
// console.log(v);
// dispatch(editData ? report.editReportConfig(v, editData.id) : report.addReportConfig(v)).then(res => {
// if (res.success) {
// dispatch(report.getReportConfig())
// close()
// }
// })
// })
// }}
// onCancel={() => {
// close()
// }}
// >
// <ProForm
// formRef={formRef}
// autoFocusFirstInput
// layout={'horizontal'}
// labelCol={{ span: 4 }}
// wrapperCol={{ span: 18 }}
// initialValues={
// editData ?
// editData :
// {
// excuteTime: '00:00',
// isEnable: true
// }
// }
// submitter={false}
// formKey='config-form'
// >
// <ProFormText
// name={'reportName'}
// label="报表名称"
// placeholder="请输入名称"
// required
// rules={[{ required: true, message: '请输入名称' }]}
// />
// <ProFormSelect
// options={reportType}
// cacheForSwr
// name="reportTypeId"
// label="报表类型"
// required
// rules={[{ required: true, message: '请选择报表类型' }]}
// />
// <ProFormSelect
// options={
// allAreas.map(a => {
// return {
// value: a.id,
// label: a.name,
// }
// })}
// cacheForSwr
// name="regionId"
// label="区域"
// required
// rules={[{ required: true, message: '请选择区域' }]}
// />
// <Form.Item name="isEnable" label="状态" valuePropName="checked">
// <Switch checkedChildren="启用" unCheckedChildren="禁用" />
// </Form.Item>
// <ProFormSelect
// options={excuteTimeOptions}
// addonBefore={'每天'}
// addonAfter={'时'}
// cacheForSwr
// name="excuteTime"
// label="生成时间"
// />
// </ProForm>
// </Modal>
// )
// }
// function mapStateToProps (state) {
// const { auth, global, allAreas } = state;
// console.log(allAreas);
// return {
// user: auth.user,
// actions: global.actions,
// allAreas: allAreas.data || []
// };
// }
// export default connect(mapStateToProps)(ConfigModal);

56
web/client/src/sections/fillion/components/enforceTable.js

@ -5,6 +5,8 @@ import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const enforceTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
@ -13,10 +15,36 @@ const enforceTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -1477,7 +1505,13 @@ const enforceTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -1486,13 +1520,14 @@ const enforceTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form,record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -1572,7 +1607,12 @@ const enforceTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

59
web/client/src/sections/fillion/components/highwaysTable.js

@ -5,6 +5,8 @@ import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const HigwaysTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
@ -13,10 +15,36 @@ const HigwaysTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -1477,7 +1505,12 @@ const HigwaysTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -1486,13 +1519,14 @@ const HigwaysTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -1500,9 +1534,7 @@ const HigwaysTable = (props) => {
<Button
type="primary"
style={{ width: "100px", marginLeft: 20 }}
onClick={() => {
// dispatch(push(`article/update/post`));
}}
>
导入
</Button>
@ -1572,7 +1604,12 @@ const HigwaysTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

130
web/client/src/sections/fillion/components/infor/details.js

@ -1,114 +1,44 @@
import React from 'react';
import { connect } from 'react-redux';
import { Spin, Table } from 'antd';
import { ModalForm } from '@ant-design/pro-form';
import { DrawerForm, ProForm, ProFormText } from '@ant-design/pro-form';
import moment from 'moment';
const UserModal = (props) => {
const { visible, onVisibleChange } = props
const datas = props.modalRecord || {}
const scopeOfExamination = { ...datas }.hiddenDangerItem12
const arr = [
' 1、合用场所的所有权人、使用人是否遵守消防法律、法规、规章;',
' 2、住宿场所是否违规搭建;',
' 3、合用场所是否配置灭火器、消防应急照明等消防器材和设施;',
' 4、合用场所的电器产品的安装、使用及其线路和管路的设计、敷设、维护保养、检测,是否符合消防技术标准和管理规定;',
' 5、合用场所住宿是否超过2人;(judge_0) 若超过,人员住宿是否设置在首层,并直通室外安全出口。(judge_1)',
' 6、电动自行车是否违规室内充电、停放;',
' 7、合用场所是否违规生产、储存、经营易燃易爆危险品;',
' 8、合用场所除厨房外是否违规使用或者放置瓶装液化石油气、可燃液体;',
' 9、放置瓶装液化石油气的厨房是否采取防火分隔措施,并设置自然排风窗;',
' 10、合用场所疏散通道、安全出口是否保持畅通;',
' 11、合用场所的外窗或阳台是否设置金属栅栏;(judge_0) 若设置,是否能从内部易于开启。(judge_1)',
' 12、存在其他安全隐患;',
]
const columns = [
{
title: '场所名称',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return <div>{datas.placeName}</div>
}
}, {
title: '场所基本情况',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return <div>
<li>使用性质{datas.placeType}</li>
<li>地址{datas.address}</li>
<li>负责人{datas.placeOwner}</li>
<li>电话{datas.phone}</li>
<li>面积{datas.dimension}</li>
<li>层数{datas.floors}</li>
<li>常驻人口:{datas.numberOfPeople}</li>
</div>
}
}, {
title: '检查内容',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return datas.hiddenDangerItem12 ?
scopeOfExamination.map((item, index) => {
let message = arr[index]
if (arr[index].indexOf('judge_') > -1) {
if (item.value == true && index === 4) {
message = message.replace(`judge_1`, item.child.value ? "是" : "否")
} else {
message = message.replace(`若超过,人员住宿是否设置在首层,并直通室外安全出口。(judge_1)`, '')
}
if (item.value == true && index === 10) {
message = message.replace(`judge_1`, item.child.value ? "是" : "否")
} else {
message = message.replace(`若设置,是否能从内部易于开启。(judge_1)`, '')
}
if (arr[index].indexOf('judge_0') > -1) {
return <li key={index}>{message.replace(`judge_0`, item.value ? "是" : "否")}</li>
}
}
return <li key={index}>{message}({item.value ? "是" : "否"})</li>
})
: '---'
}
}, {
title: '存在具体问题',
dataIndex: 'reportName',
hideInSearch: true,
render: () => {
return <div>{datas.description ? datas.description : '---'}</div>
}
},
]
const data = [
{
key: '1',
address: 'New York No. 1 Lake Park',
tags: ['nice', 'developer'],
},
];
const { visible, onVisibleChange,typecard } = props
console.log(typecard)
return (
<Spin spinning={false}>
<ModalForm
<DrawerForm
width={'90rem'}
visible={visible}
onVisibleChange={onVisibleChange}
submitter={false}
// submitter={false}
>
<div style={{ width: '71vw' }}><span style={{ fontSize: '16px' }}>排查单位{(datas || {}).checkAreaName || ''}</span>
<span style={{ fontSize: '16px', float: 'right', marginBottom: '10px' }}>填报日期{moment((datas || {}).time).format('YYYY-MM-DD') || ''}</span><span style={{ clear: 'both' }}></span></div>
<Table columns={columns} dataSource={data} width={'50rem'} pagination={false}
/>
<div style={{ width: '71vw', marginTop: '10px' }}>
<span style={{ fontSize: '16px' }}>排查人{(datas || {}).checkUserName || ''}</span>
<span style={{ fontSize: '16px', float: 'right' }}>手机号{(datas || {}).checkUserPhone || ''}</span></div>
</ModalForm>
{typecard==111?<ProForm.Group>
<ProFormText
name="name"
width="md"
label="签约客户名称"
tooltip="最长为 24 位"
placeholder="请输入名称"
value="wowowo"
rules={[{ required: true, message: "必填" }]}
/>
<ProFormText width="md" name="company" label="我方公司名称" placeholder="请输入名称" />
</ProForm.Group>
:<ProForm.Group>
<ProFormText
name="name"
width="md"
label="签约客户名称"
tooltip="最长为 24 位"
placeholder="请输入名称"
rules={[{ required: true, message: "必填" }]}
/>
<ProFormText width="md" name="company" label="我方公司名称" placeholder="请输入名称" />
</ProForm.Group>}
</DrawerForm>
</Spin>
)
}

118
web/client/src/sections/fillion/components/inforTable.js

@ -1,22 +1,47 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { Spin, Button, Popconfirm, Badge } from 'antd';
import { Spin, Button, Popconfirm, Col, Input,Row } from 'antd';
import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const InForTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
const [regionId, setRegionId] = useState()//区域id
const [placeType, setPlaceType] = useState()//场所
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns =
[
{
@ -67,22 +92,34 @@ const InForTable = (props) => {
// search: false,
dataIndex: 'containers3',
// valueType: 'dateRange',
// initialValue: day,
//
width: 120,
render: (dom, record) => {
return record.address
},
fieldProps: {
placeholder: '请输入超限率进行搜索',
getPopupContainer: (triggerNode) => triggerNode.parentNode,
// fieldProps: {
// placeholder: '请输入超限率进行搜索',
// getPopupContainer: (triggerNode) => triggerNode.parentNode,
// },
renderFormItem: (item, { type, defaultRender, formItemProps, fieldProps, ...rest }, form) => {
return <Input.Group >
<Row gutter={8}>
<Col span={8}>
<Input placeholder='输入超限率'/>
</Col>
<Col span={8}>
<Input placeholder='输入超限率'/>
</Col>
</Row>
</Input.Group>
}
}, {
title: '超限重量(kg)',
search: false,
dataIndex: 'containers4',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -96,7 +133,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers5',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -110,7 +147,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers6',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -137,7 +174,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers8',
valueType: 'dateRange',
initialValue: day,
width: 120,
render: (dom, record) => {
@ -151,7 +188,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers9',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -166,7 +203,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers10',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -181,7 +218,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers11',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -196,7 +233,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers12',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -211,7 +248,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'time9',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -226,7 +263,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers13',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -241,7 +278,7 @@ const InForTable = (props) => {
search: false,
dataIndex: 'containers14',
valueType: 'dateRange',
initialValue: day,
width: 140,
@ -260,7 +297,13 @@ const InForTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -269,13 +312,14 @@ const InForTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -283,9 +327,7 @@ const InForTable = (props) => {
<Button
type="primary"
style={{ width: "100px", marginLeft: 20 }}
onClick={() => {
// dispatch(push(`article/update/post`));
}}
>
导入
</Button>
@ -305,14 +347,7 @@ const InForTable = (props) => {
ref={c => { finishedProductTable = c; }}
style={{ width: "100% ", overflow: "auto", height: '760px' }}
rowKey='id'
onReset={(v) => {
const { id } = depMessage[0]
console.log(id)
setRegionId(id)
setPlaceType(-1)
setDay([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])
setSitename('')
}}
rowSelection={{
selectedRowKeys: rowSelected,
onChange: (selectedRowKeys) => {
@ -355,7 +390,12 @@ const InForTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

1629
web/client/src/sections/fillion/components/operationalTable.js

File diff suppressed because it is too large

5
web/client/src/sections/fillion/components/promotionalTable.js

@ -13,9 +13,7 @@ const promotionalTable = (props) => {
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const columns =
[{
@ -141,6 +139,7 @@ const promotionalTable = (props) => {
// </Popconfirm>
// ],
// }}
>
</ProTable></div>

71
web/client/src/sections/fillion/components/publicTable.js

@ -5,6 +5,8 @@ import ProTable from '@ant-design/pro-table';
import './protable.less'
import moment from 'moment';
import { getReportStatistic } from "../actions/infor"
import UserModal from './infor/details';
const PublicTable = (props) => {
const { dispatch, user, depData, depMessage, depLoading } = props
const [rowSelected, setRowSelected] = useState([])
@ -12,11 +14,39 @@ const PublicTable = (props) => {
const [placeType, setPlaceType] = useState()//场所
const [day, setDay] = useState([moment('2022-03-01').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])//日期
const [sitename, setSitename] = useState()//场所名称
const [counts, setCounts] = useState()//shuju
useEffect(() => {
setRegionId(user.departmentId)
}, [user])
const [counts, setCounts] = useState()//shuju
const [activeKey, setActiveKey] = useState('tab1');
const [modalVisible, setModalVisible] = useState(false);
const [modalRecord, setModalRecord] = useState();
const [typecard, setTypecard] = useState();
//打开弹窗
const openModal = (type, record) => {
setModalVisible(true);
// setModalType(type);
if (type == 'edit') {
setModalRecord(record);
} else {
setModalRecord(null);
}
}
//批量导出
const exports = (ids, counts) => {
// console.log(user);
let reportIds = [];
if (ids.length)
reportIds = ids
else
reportIds = (counts || {}).ids || [];
superagent.post('/_report/http')
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => {
const resTextIs = res.text.split('/').pop()
window.open(
'/_api/' +
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`)
})
}
const columns = {
tab1: [
{
@ -128,7 +158,12 @@ const PublicTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -137,13 +172,14 @@ const PublicTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -276,7 +312,12 @@ const PublicTable = (props) => {
width: 120,
fixed: 'right',
render: (dom, record) => {
return <div><Button type="link">编辑</Button><Button type="link"></Button></div>
return <div><Button type="link"
onClick={() => {
openModal('edit', record)
setTypecard('111')
}}
>编辑</Button><Button type="link"></Button></div>
}
},
@ -285,13 +326,14 @@ const PublicTable = (props) => {
hideInTable: true,
dataIndex: "direction",
order: 6,
renderFormItem: (item, { type, defaultRender, ...rest }, form) => {
renderFormItem: (item, { type, defaultRender, ...rest }, form, record) => {
return (
<div> <Button
type="primary"
style={{ width: "100px" }}
onClick={() => {
dispatch(push(`article/update/post`));
openModal('edit', record)
setTypecard('')
}}
>
新增
@ -340,7 +382,7 @@ const PublicTable = (props) => {
options={false}
ref={c => { finishedProductTable = c; }}
style={{ width: "100% ", overflow: "auto", height: '760px' }}
rowKey={activeKey}
rowKey='id'
onReset={(v) => {
const { id } = depMessage[0]
console.log(id)
@ -391,7 +433,12 @@ const PublicTable = (props) => {
>
</ProTable></div>
<UserModal
visible={modalVisible}
onVisibleChange={setModalVisible}
modalRecord={modalRecord}
typecard={typecard}
/>
</Spin >
)
}

1741
web/client/src/sections/fillion/components/transportationTable.js

File diff suppressed because it is too large

6
web/client/src/sections/fillion/containers/bridge.js

@ -4,12 +4,12 @@ import '../style.less';
import { getDepMessage, getReportStatistic } from "../actions/infor"
import BridgeTable from '../components/bridgeTable';
const superagent = require('superagent');
const infor = (props) => {
const bridge = (props) => {
const { dispatch, user } = props
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出
@ -39,4 +39,4 @@ function mapStateToProps(state) {
user: auth.user,
}
}
export default connect(mapStateToProps)(infor);
export default connect(mapStateToProps)(bridge);

2
web/client/src/sections/fillion/containers/enforce.js

@ -9,7 +9,7 @@ const enforce = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/highways.js

@ -9,7 +9,7 @@ const highways = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/infor.js

@ -11,7 +11,7 @@ const infor = (props) => {
const [modalRecord, setModalRecord] = useState();
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
// //打开弹窗

124
web/client/src/sections/fillion/containers/infor/details.js

@ -1,124 +0,0 @@
// import React from 'react';
// import { connect } from 'react-redux';
// import { Spin, Table } from 'antd';
// import { ModalForm } from '@ant-design/pro-form';
// import moment from 'moment';
// const UserModal = (props) => {
// const { visible, onVisibleChange } = props
// const datas = props.modalRecord || {}
// const scopeOfExamination = { ...datas }.hiddenDangerItem12
// const arr = [
// ' 1、合用场所的所有权人、使用人是否遵守消防法律、法规、规章;',
// ' 2、住宿场所是否违规搭建;',
// ' 3、合用场所是否配置灭火器、消防应急照明等消防器材和设施;',
// ' 4、合用场所的电器产品的安装、使用及其线路和管路的设计、敷设、维护保养、检测,是否符合消防技术标准和管理规定;',
// ' 5、合用场所住宿是否超过2人;(judge_0) 若超过,人员住宿是否设置在首层,并直通室外安全出口;(judge_1)',
// ' 6、电动自行车是否违规室内充电、停放;',
// ' 7、合用场所是否违规生产、储存、经营易燃易爆危险品;',
// ' 8、合用场所除厨房外是否违规使用或者放置瓶装液化石油气、可燃液体;',
// ' 9、放置瓶装液化石油气的厨房是否采取防火分隔措施,并设置自然排风窗;',
// ' 10、合用场所疏散通道、安全出口是否保持畅通;',
// ' 11、合用场所的外窗或阳台是否设置金属栅栏;(judge_0) 若设置,是否能从内部易于开启。(judge_1)',
// ' 12、存在其他安全隐患;',
// ]
// const columns = [
// {
// title: '场所名称',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return <div>{datas.placeName}</div>
// }
// }, {
// title: '场所基本情况',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return <div>
// <li>使用性质:{datas.placeType}</li>
// <li>地址:{datas.address}</li>
// <li>负责人:{datas.placeOwner}</li>
// <li>电话:{datas.phone}</li>
// <li>面积:{datas.dimension}</li>
// <li>层数:{datas.floors}</li>
// <li>常驻人口:{datas.numberOfPeople}</li>
// </div>
// }
// }, {
// title: '检查内容',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return datas.hiddenDangerItem12 ?
// scopeOfExamination.map((item, index) => {
// let message = arr[index]
// if (arr[index].indexOf('judge_') > -1) {
// if (item.child && item.child.itemIndex) {
// message = message.replace(`judge_${item.child.itemIndex}`, item.child.value ? "是" : "否")
// } else {
// message = message.replace(`judge_1`, '---')
// }
// if (arr[index].indexOf('judge_0') > -1) {
// return <li key={index}>{message.replace(`judge_0`, item.value ? "是" : "否")}</li>
// }
// }
// return <li key={index}>{message}({item.value ? "是" : "否"})</li>
// })
// : '---'
// }
// }, {
// title: '存在具体问题',
// dataIndex: 'reportName',
// hideInSearch: true,
// render: () => {
// return <div>{datas.description ? datas.description : '---'}</div>
// }
// },
// ]
// const data = [
// {
// key: '1',
// address: 'New York No. 1 Lake Park',
// tags: ['nice', 'developer'],
// },
// ];
// return (
// <Spin spinning={false}>
// <ModalForm
// width={'90rem'}
// visible={visible}
// onVisibleChange={onVisibleChange}
// submitter={false}
// >
// <div style={{ width:'71vw'}}><span style={{ fontSize: '16px' }}>排查单位:{(datas || {}).checkAreaName || ''}</span>
// <span style={{ fontSize: '16px', float:'right',marginBottom:'10px'}}>填报日期:{moment((datas || {}).time).format('YYYY-MM-DD') || ''}</span><span style={{clear:'both'}}></span></div>
// <Table columns={columns} dataSource={data} width={'50rem'} pagination={false}
// />
// <div style={{ width:'71vw',marginTop:'10px'}}>
// <span style={{ fontSize: '16px' }}>排查人:{(datas || {}).checkUserName || ''}</span>
// <span style={{ fontSize: '16px',float:'right' }}>手机号:{(datas || {}).checkUserPhone || ''}</span></div>
// </ModalForm>
// </Spin>
// )
// }
// function mapStateToProps (state) {
// const { depMessage } = state;
// const pakData = (dep) => {
// return dep.map((d) => {
// return {
// title: d.name,
// value: d.id,
// children: pakData(d.subordinate)
// }
// })
// }
// let depData = pakData(depMessage.data || [])
// return {
// loading: depMessage.isRequesting,
// depData,
// };
// }
// export default connect(mapStateToProps)(UserModal);

2
web/client/src/sections/fillion/containers/maintenance.js

@ -9,7 +9,7 @@ const Maintenance = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/operational.js

@ -9,7 +9,7 @@ const operational = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/patrol.js

@ -9,7 +9,7 @@ const patrol = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/promotional.js

@ -10,7 +10,7 @@ const promotional = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
// //批量导出

2
web/client/src/sections/fillion/containers/public.js

@ -9,7 +9,7 @@ const Public = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/transportation.js

@ -9,7 +9,7 @@ const transportation = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

2
web/client/src/sections/fillion/containers/videois.js

@ -9,7 +9,7 @@ const Videois = (props) => {
const [data, setData] = useState()
useEffect(() => {
// dispatch(getDepMessage())
dispatch(getReportStatistic())
setData(props)
}, []);
//批量导出

4
web/client/src/sections/organization/containers/user.js

@ -181,7 +181,9 @@ const UserManage = (props) => {
// 删除部门
const delDepartment = (id) => {
dispatch(delDep(id)).then(res => {
dispatch(getDepMessage())
if(res.success){
dispatch(getDepMessage())
}
});
}
const renderTree = (item, id) => {

49
web/client/src/sections/quanju/containers/footer/build/Leftbottom.js

@ -1,6 +1,5 @@
import './style.less'
import { Col, Progress, Row } from 'antd';
import React, { useEffect, useRef } from 'react';
// import ReactEcharts from 'echarts-for-react';
import * as echarts from 'echarts';
@ -34,24 +33,26 @@ function Leftbottom() {
},
formatter: (values) => `${values.seriesName}<br /> ${values.marker} ${values.name} <b>${values.value}</b>个(${values.percent}%)`,
},
title: {
text:titleNum,//主标题文本
left:'center',
top:'35%',
subtext:chartTitle,//副标题文本
textStyle:{
fontFamily : "YouSheBiaoTiHei",
fontSize: 20,
color:'#FFFFFF',
// align:'center'
},
subtextStyle:{
fontFamily : "PingFangSC-Medium PingFang SC",
fontSize: 12,
fontWeight:500,
color:'#E9F7FF',
}
},
// title: {
// text:titleNum,//主标题文本
// left:'10%',
// top:'35%',
// subtext:chartTitle,//副标题文本
// textStyle:{
// fontFamily : "YouSheBiaoTiHei",
// fontSize: 20,
// color:'#FFFFFF',
// marginLeft:'20%',
// align:'center'
// },
// subtextStyle:{
// fontFamily : "PingFangSC-Medium PingFang SC",
// fontSize: 12,
// fontWeight:500,
// color:'#E9F7FF',
// }
// },
legend: [
{
@ -80,7 +81,8 @@ function Leftbottom() {
{
name: '道路统计',
type: 'pie',
radius: ['50%', '65%'],
radius: ['50%', '63%'],
center: ["30%", "50%"],
// emphasis: { // 设置高亮时显示标签
// label: {
// show: true
@ -157,7 +159,12 @@ function Leftbottom() {
return (
<div className='build-left-bottom'>
<div ref={chartRef} style={{ width: width || 400, height: height || 200 }} id="ech"></div>
<div className='build-left-bottom-title'>
<h2>3234.23</h2>
<span>道路总公里</span>
</div>
<img src='/assets/images/quanju/chart-circle.png'></img>
<div ref={chartRef} style={{ width: width || "70%", height: height || "90%" }} id="ech"></div>
</div>
);
}

52
web/client/src/sections/quanju/containers/footer/build/Rightbottom.js

@ -4,7 +4,7 @@ import { Col, Progress, Row } from 'antd';
import React, { useEffect, useRef } from 'react';
// import ReactEcharts from 'echarts-for-react';
import * as echarts from 'echarts';
function Leftbottom() {
function Rightbottom() {
// const {
// safetyData, chartTitle, title, number, leftLegend, rightLegend, legendColor, width, height,
// } = props;
@ -37,24 +37,24 @@ function Leftbottom() {
},
formatter: (values) => `${values.seriesName}<br /> ${values.marker} ${values.name} <b>${values.value}</b>个(${values.percent}%)`,
},
title: {
text:titleNum,//主标题文本
left:'center',
top:'35%',
subtext:chartTitle,//副标题文本
textStyle:{
fontFamily : "YouSheBiaoTiHei",
fontSize: 20,
color:'#FFFFFF',
// align:'center'
},
subtextStyle:{
fontFamily : "PingFangSC-Medium PingFang SC",
fontSize: 12,
fontWeight:500,
color:'#E9F7FF',
}
},
// title: {
// text:titleNum,//主标题文本
// left:'center',
// top:'35%',
// subtext:chartTitle,//副标题文本
// textStyle:{
// fontFamily : "YouSheBiaoTiHei",
// fontSize: 20,
// color:'#FFFFFF',
// // align:'center'
// },
// subtextStyle:{
// fontFamily : "PingFangSC-Medium PingFang SC",
// fontSize: 12,
// fontWeight:500,
// color:'#E9F7FF',
// }
// },
// graphic: {
// elements: [
// {
@ -119,9 +119,10 @@ function Leftbottom() {
],
series: [
{
name: '道路统计',
name: '公路等级统计',
type: 'pie',
radius: ['50%', '65%'],
radius: ['50%', '63%'],
center:['30%','50%'],
// emphasis: { // 设置高亮时显示标签
// label: {
// show: true
@ -198,8 +199,13 @@ function Leftbottom() {
return (
<div className='build-right-bottom'>
<div ref={chartRef} style={{ width: width || 400, height: height || 200 }} id="ech"></div>
<div className='build-right-bottom-title'>
<h2>3234.23</h2>
<span>道路总公里</span>
</div>
<img src='/assets/images/quanju/chart-circle.png'></img>
<div ref={chartRef} style={{ width: width || "70%", height: height || "90%" }} id="ech"></div>
</div>
);
}
export default Leftbottom
export default Rightbottom

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save