diff --git a/Highways4Good b/Highways4Good deleted file mode 160000 index cbdfefa3..00000000 --- a/Highways4Good +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cbdfefa311b3a886f44cbc68f55bb6741655312b diff --git a/api/app/lib/controllers/data/bus.js b/api/app/lib/controllers/data/bus.js new file mode 100644 index 00000000..fac8b0e1 --- /dev/null +++ b/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, +}; \ No newline at end of file diff --git a/api/app/lib/controllers/data/vehicle.js b/api/app/lib/controllers/data/vehicle.js index 1c8453cf..c8d76eca 100644 --- a/api/app/lib/controllers/data/vehicle.js +++ b/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 } }) diff --git a/api/app/lib/controllers/overview/building.js b/api/app/lib/controllers/overview/building.js new file mode 100644 index 00000000..4b362c8b --- /dev/null +++ b/api/app/lib/controllers/overview/building.js @@ -0,0 +1,198 @@ +'use strict'; + +const moment = require("moment"); + +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 bridgeCount = await models.Bridge.count({}) + + let constructionYear = [] + for (let i = 0; constructionYear.length < 4; i++) { + constructionYear.push(moment().subtract(i, 'year').format('YYYY')) + } + constructionYear.reverse() + + const roadState = { + // 在建数量 + buildingRoad: 0, + // 已建数量 + buildedRoad: 0, + // 桥梁数量 + bridgeCount: bridgeCount, + // 涵洞数量 + culvertCount: 0, + // 施工统计 + construction: constructionYear.map(year => { + return { + year, + count: 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) + + roadState.culvertCount += Number(r.numberOfCulverts) || 0; + + // 建成年份 + let buildYear = r.completionTime ? moment(r.completionTime).format('YYYY') : null + // 改建年份 + let rebuildYear = r.reconstructionTime ? moment(r.reconstructionTime).format('YYYY') : null + let corBuildConstruction = roadState.construction.find(item => item.year === buildYear) + if (corBuildConstruction) { + corBuildConstruction.count += Number(r.chainageMileage) || 0 + } + let corReBuildConstruction = roadState.construction.find(item => item.year === rebuildYear) + if (corReBuildConstruction) { + corReBuildConstruction.count += Number(r.chainageMileage) || 0 + } + + 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) + } + + let corBuildConstruction2022 = roadState.construction.find(item => item.year == 2022) + + for (let p of projectRoadRes) { + if (p.type == 'road') { + + if (corBuildConstruction2022) { + corBuildConstruction2022.count += Number(p.projectMileage) || 0 + } + + 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, +}; \ No newline at end of file diff --git a/api/app/lib/controllers/overview/conserve.js b/api/app/lib/controllers/overview/conserve.js new file mode 100644 index 00000000..687b4bfb --- /dev/null +++ b/api/app/lib/controllers/overview/conserve.js @@ -0,0 +1,42 @@ +'use strict'; + +async function statistic (ctx) { + try { + const models = ctx.fs.dc.models; + const { userId } = ctx.fs.api; + const { projectType } = ctx.query; + + let findOption = { + where: { + reportType: 'conserve', + }, + attributes: ['id', 'road', 'time', 'projectType', 'projectType'], + include: [{ + model: models.User, + attributes: ['name'] + }], + } + + if (projectType) { + findOption.where.projectType = projectType; + } + + const reportRes = await await models.Report.findAll(findOption) + + ctx.status = 200 + ctx.body = { + processed: reportRes.length, + reportList: reportRes, + } + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + message: typeof error == 'string' ? error : undefined + } + } +} + +module.exports = { + statistic, +}; \ No newline at end of file diff --git a/api/app/lib/controllers/overview/index.js b/api/app/lib/controllers/overview/index.js new file mode 100644 index 00000000..eb109abb --- /dev/null +++ b/api/app/lib/controllers/overview/index.js @@ -0,0 +1,2 @@ +'use strict'; + diff --git a/api/app/lib/controllers/overview/management.js b/api/app/lib/controllers/overview/management.js new file mode 100644 index 00000000..b3f9819d --- /dev/null +++ b/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 +}; \ No newline at end of file diff --git a/api/app/lib/controllers/overview/operation.js b/api/app/lib/controllers/overview/operation.js new file mode 100644 index 00000000..4d6e84b8 --- /dev/null +++ b/api/app/lib/controllers/overview/operation.js @@ -0,0 +1,102 @@ +'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 + } + } +} + +async function vehicleStatistic (ctx) { + try { + const models = ctx.fs.dc.models; + const { userId } = ctx.fs.api; + + const taxiBusiness = await models.MunicipalBusiness.findAll({ + where: { + type: '出租车' + }, + attributes: ['id', 'nameOfBusinessOwner'] + }) + const hazardousGoodsBusiness = await models.MunicipalBusiness.findAll({ + where: { + type: '危货' + }, + attributes: ['id', 'nameOfBusinessOwner'] + }) + const passengerTransport = await models.Statistic.findOne({ + where: { + type: 'vehicle' + } + }) + + const vehicleState = { + passengerTransport: passengerTransport ? passengerTransport.count : 0, + taxi: await models.MunicipalVehicle.count({ + where: { + type: '出租车' + }, + }), + hazardousGoods: await models.MunicipalVehicle.count({ + where: { + type: '危货' + } + }), + bus: await models.BusCar.count(), + taxiBusiness: taxiBusiness, + hazardousGoodsBusiness: hazardousGoodsBusiness, + } + + ctx.status = 200 + ctx.body = vehicleState + } 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, + vehicleStatistic, +}; \ No newline at end of file diff --git a/api/app/lib/models/bus_car.js b/api/app/lib/models/bus_car.js new file mode 100644 index 00000000..b338764c --- /dev/null +++ b/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; +}; \ No newline at end of file diff --git a/api/app/lib/models/bus_line.js b/api/app/lib/models/bus_line.js new file mode 100644 index 00000000..32aa8c9d --- /dev/null +++ b/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; +}; \ No newline at end of file diff --git a/api/app/lib/models/road.js b/api/app/lib/models/road.js index e97addfb..d4dad07e 100644 --- a/api/app/lib/models/road.js +++ b/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", diff --git a/api/app/lib/models/vehicle.js b/api/app/lib/models/statistic.js similarity index 70% rename from api/app/lib/models/vehicle.js rename to api/app/lib/models/statistic.js index 7777ba5a..b7e0b248 100644 --- a/api/app/lib/models/vehicle.js +++ b/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; }; \ No newline at end of file diff --git a/api/app/lib/routes/data/index.js b/api/app/lib/routes/data/index.js index a711792d..e801466d 100644 --- a/api/app/lib/routes/data/index.js +++ b/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 }; @@ -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 }; diff --git a/api/app/lib/routes/overview/index.js b/api/app/lib/routes/overview/index.js new file mode 100644 index 00000000..1d37acaf --- /dev/null +++ b/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'); +const conserve = require('../../controllers/overview/conserve'); + +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); + + app.fs.api.logAttr['GET/conserve/statistic'] = { content: '获取道路养护统计及列表', visible: false }; + router.get('/conserve/statistic', conserve.statistic); + + app.fs.api.logAttr['GET/transportation/statistic'] = { content: '获取运政统计', visible: false }; + router.get('/transportation/statistic', operation.vehicleStatistic); +} \ No newline at end of file diff --git a/api/log/development.log b/api/log/development.log index c37ac24e..58fe7dc7 100644 --- a/api/log/development.log +++ b/api/log/development.log @@ -7158,3 +7158,147 @@ 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. +2022-07-25 10:08:50.950 - debug: [FS-LOGGER] Init. +2022-07-25 10:08:51.117 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 10:08:51.117 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 10:47:17.059 - debug: [FS-LOGGER] Init. +2022-07-25 10:47:17.224 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 10:47:17.224 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 10:56:44.872 - debug: [FS-LOGGER] Init. +2022-07-25 10:56:45.027 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 10:56:45.027 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:06:22.520 - debug: [FS-LOGGER] Init. +2022-07-25 11:06:22.625 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:06:22.625 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:18:32.406 - debug: [FS-LOGGER] Init. +2022-07-25 11:18:32.483 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:18:32.483 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:22:30.726 - debug: [FS-LOGGER] Init. +2022-07-25 11:22:30.802 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:22:30.802 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:23:03.672 - debug: [FS-LOGGER] Init. +2022-07-25 11:23:03.765 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:23:03.765 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:23:07.584 - error: path: /build/road_state, error: ReferenceError: r is not defined +2022-07-25 11:23:14.647 - error: path: /build/road_state, error: ReferenceError: r is not defined +2022-07-25 11:23:34.344 - debug: [FS-LOGGER] Init. +2022-07-25 11:23:34.430 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:23:34.430 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:51:12.541 - debug: [FS-LOGGER] Init. +2022-07-25 11:51:12.639 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:51:12.639 - info: [FS-AUTH] Inject auth and api mv into router. +2022-07-25 11:51:21.718 - error: path: /transportation/statistic, error: SequelizeDatabaseError: 字段 "name" 不存在 +2022-07-25 11:51:27.861 - error: path: /transportation/statistic, error: SequelizeDatabaseError: 字段 "name" 不存在 +2022-07-25 11:52:00.697 - debug: [FS-LOGGER] Init. +2022-07-25 11:52:00.795 - info: [FS-ATTACHMENT] Inject attachment mw into router. +2022-07-25 11:52:00.796 - info: [FS-AUTH] Inject auth and api mv into router. diff --git a/scripts/0.0.1/data/1_update_statistic_data.sql b/scripts/0.0.1/data/1_update_statistic_data.sql new file mode 100644 index 00000000..3e4840af --- /dev/null +++ b/scripts/0.0.1/data/1_update_statistic_data.sql @@ -0,0 +1,9 @@ +INSERT INTO statistic (name, count, type) values ('客运车', 0, 'vehicle'); +INSERT INTO statistic (name, count, type) values ('标线', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('人行道', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('标志牌', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('防护栏', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('检查井', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('雨水口', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('路排名', 0, 'road_manage'); +INSERT INTO statistic (name, count, type) values ('养护责任牌', 0, 'road_manage'); \ No newline at end of file diff --git a/scripts/0.0.1/data/1_update_user_data.sql b/scripts/0.0.1/data/1_update_user_data.sql deleted file mode 100644 index 13b0af55..00000000 --- a/scripts/0.0.1/data/1_update_user_data.sql +++ /dev/null @@ -1,4 +0,0 @@ --- ---------------------------- --- Records of user --- ---------------------------- -INSERT INTO "public"."user" VALUES (1, '管理员', 'SuperAdmin', 'e10adc3949ba59abbe56e057f20f883e', 1, 'f', NULL, NULL, NULL, TRUE); \ No newline at end of file diff --git a/scripts/0.0.1/data/1_update_user_dep_data.sql b/scripts/0.0.1/data/1_update_user_dep_data.sql new file mode 100644 index 00000000..c7f99bc1 --- /dev/null +++ b/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); \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/公交/车辆信息/四公司车辆信息(1).xls b/scripts/0.0.1/data/工具脚本(无需执行)/data/公交/车辆信息/四公司车辆信息(1).xls new file mode 100644 index 00000000..f297808d Binary files /dev/null and b/scripts/0.0.1/data/工具脚本(无需执行)/data/公交/车辆信息/四公司车辆信息(1).xls differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/治超/非现场处罚总台账更新至2022.7.5(最新).xlsx b/scripts/0.0.1/data/工具脚本(无需执行)/data/治超/非现场处罚总台账更新至2022.7.5(最新).xlsx index 49d9ad16..c2cc10cf 100644 Binary files a/scripts/0.0.1/data/工具脚本(无需执行)/data/治超/非现场处罚总台账更新至2022.7.5(最新).xlsx and b/scripts/0.0.1/data/工具脚本(无需执行)/data/治超/非现场处罚总台账更新至2022.7.5(最新).xlsx differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/运政/业户/出租车/事业发展中心巡游出租业户信息表.xlsx b/scripts/0.0.1/data/工具脚本(无需执行)/data/运政/业户/出租车/事业发展中心巡游出租业户信息表.xlsx new file mode 100644 index 00000000..58c13780 Binary files /dev/null and b/scripts/0.0.1/data/工具脚本(无需执行)/data/运政/业户/出租车/事业发展中心巡游出租业户信息表.xlsx differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/运政/业户/出租车/运输事业发展中心巡游出租车辆信息表.xlsx b/scripts/0.0.1/data/工具脚本(无需执行)/data/运政/业户/出租车/运输事业发展中心巡游出租车辆信息表.xlsx deleted file mode 100644 index e080922d..00000000 Binary files a/scripts/0.0.1/data/工具脚本(无需执行)/data/运政/业户/出租车/运输事业发展中心巡游出租车辆信息表.xlsx and /dev/null differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/乡道第三方.xls b/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/乡道第三方.xls index 577906e9..cf53b8d6 100644 Binary files a/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/乡道第三方.xls and b/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/乡道第三方.xls differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/县道第三方.xls b/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/县道第三方.xls index 0e3a1aa7..4d61104b 100644 Binary files a/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/县道第三方.xls and b/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/县道第三方.xls differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/村道第三方.xls b/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/村道第三方.xls index 9a7dc066..d23427d4 100644 Binary files a/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/村道第三方.xls and b/scripts/0.0.1/data/工具脚本(无需执行)/data/道路/村道第三方.xls differ diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js b/scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js index 8e017ba2..2ffc5e75 100644 --- a/scripts/0.0.1/data/工具脚本(无需执行)/dataIn.js +++ b/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'], @@ -103,6 +71,26 @@ try { // defaultKey: ['type'], // defaultValue: ['危货'], // }, + { + path: ['./data/运政/业户/出租车/事业发展中心巡游出租业户信息表.xlsx'], + n: '运政业户', + tableName: 'municipal_business', + defaultKey: ['type'], + defaultValue: ['出租车'], + }, + { + path: (() => { + let p = []; + fs.readdirSync(path.join(__dirname, '/data/运政/业户/危货')).forEach((filename) => { + p.push(`./data/运政/业户/危货/${filename}`) + }); + return p; + })(), + n: '运政业户', + tableName: 'municipal_business', + defaultKey: ['type'], + defaultValue: ['危货'], + }, // { // path: ['./data/工程一览/道路.xls'], // n: '工程一览', @@ -122,11 +110,16 @@ try { // n: '治超', // tableName: 'overspeed', // }, - { - path: ['./data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx'], - n: '公交线路', - tableName: 'bus_line', - }, + // { + // path: ['./data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx'], + // n: '公交线路', + // tableName: 'bus_line', + // }, + // { + // path: ['./data/公交/车辆信息/四公司车辆信息(1).xls'], + // n: '公交车辆', + // tableName: 'bus_car', + // }, ] for (let f of fileList) { @@ -149,13 +142,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 ('; diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/index.js b/scripts/0.0.1/data/工具脚本(无需执行)/index.js index 7964db7b..f4cf143f 100644 --- a/scripts/0.0.1/data/工具脚本(无需执行)/index.js +++ b/scripts/0.0.1/data/工具脚本(无需执行)/index.js @@ -43,7 +43,7 @@ try { let upperCaseRslt = rslt[0].dst .replace(/\//g, ' ') .replace(/'/g, '') - .replace(/:/g,'') + .replace(/:/g, '') .trim() .replace(/\s{2,}/g, '') .replace(/-/g, ' '); @@ -61,9 +61,10 @@ try { try { await client.query('BEGIN') + // 有手动更改 不要轻易再次执行脚本 const fileList = [ // { - // path: './data/道路/乡道第三方.xls', + // path: './data/道路/县道第三方.xls', // n: '道路', // tableName: 'road' // }, @@ -92,11 +93,16 @@ try { // n: '治超', // tableName: 'overspeed' // }, - { - path: './data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx', - n: '公交线路', - tableName: 'bus_line' - }, + // { + // path: './data/公交/运营线路/(四公司)南昌公交运营线路基础信息表2022年6月(总表).xlsx', + // n: '公交线路', + // tableName: 'bus_line' + // }, + // { + // path: './data/公交/车辆信息/四公司车辆信息(1).xls', + // n: '公交车辆', + // tableName: 'bus_car' + // }, ] for (let f of fileList) { diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_字段对应.json b/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_字段对应.json new file mode 100644 index 00000000..3af61ff6 --- /dev/null +++ b/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" +} \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据字段对应.json b/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据字段对应.json new file mode 100644 index 00000000..29f2e1ad --- /dev/null +++ b/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": "机动车所有人" +} \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据库表对应.json b/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据库表对应.json new file mode 100644 index 00000000..f78c88e1 --- /dev/null +++ b/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" +} \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据脚本对应.sql b/scripts/0.0.1/data/工具脚本(无需执行)/公交车辆_数据脚本对应.sql new file mode 100644 index 00000000..95c0bab0 --- /dev/null +++ b/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 '机动车所有人'; \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/道路_字段对应.json b/scripts/0.0.1/data/工具脚本(无需执行)/道路_字段对应.json index 0fb97a7f..0037c10a 100644 --- a/scripts/0.0.1/data/工具脚本(无需执行)/道路_字段对应.json +++ b/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" } \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据字段对应.json b/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据字段对应.json index 3ba86fec..db48e92f 100644 --- a/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据字段对应.json +++ b/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":"面层厚度" } \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据库表对应.json b/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据库表对应.json index 8ee22df0..f3474ba1 100644 --- a/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据库表对应.json +++ b/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" } \ No newline at end of file diff --git a/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据脚本对应.sql b/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据脚本对应.sql index c903d9f1..e386ba6f 100644 --- a/scripts/0.0.1/data/工具脚本(无需执行)/道路_数据脚本对应.sql +++ b/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 '所在地市'; \ No newline at end of file +ON column road.Location_City is '所在地市'; +alter TABLE road add Surface_Thickness varchar(1024); comment +ON column road.Surface_Thickness is '面层厚度'; \ No newline at end of file diff --git a/weapp/package-lock.json b/weapp/package-lock.json index 0d599ce4..8899ef8d 100644 --- a/weapp/package-lock.json +++ b/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", diff --git a/weapp/package.json b/weapp/package.json index 6306c08b..d63a9260 100644 --- a/weapp/package.json +++ b/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", diff --git a/weapp/src/actions/auth.js b/weapp/src/actions/auth.js index 5b33a8f2..30fdf382 100644 --- a/weapp/src/actions/auth.js +++ b/weapp/src/actions/auth.js @@ -37,7 +37,7 @@ export const login = (url, data) => { export const logout = (url, data) => { - return request.post(url, data).then(res => { + return request.put(url, data).then(res => { if (res.statusCode == 200 || res.statusCode == 204) { Taro.clearStorage(); return res.data; diff --git a/weapp/src/app.config.js b/weapp/src/app.config.js index 18a9b86e..34a44b5a 100644 --- a/weapp/src/app.config.js +++ b/weapp/src/app.config.js @@ -8,6 +8,7 @@ export default { 'root': 'packages/', 'pages': [ 'patrol/index', + 'patrolView/index' ] }], permission: { diff --git a/weapp/src/config.js b/weapp/src/config.js index a50b38d3..71b3443d 100644 --- a/weapp/src/config.js +++ b/weapp/src/config.js @@ -8,7 +8,7 @@ const baseConfig = { }; const development = { - baseUrl: 'https://smartwater.anxinyun.cn/api', + baseUrl: 'https://3024-117-90-36-177.jp.ngrok.io', webUrl: 'https://smartwater.anxinyun.cn', pcode: 'fce4afe2-5b6a-408a-ab18-a2afa7fa027c', imgUrl: 'http://test.resources.anxinyun.cn/', diff --git a/weapp/src/packages/patrol/index.jsx b/weapp/src/packages/patrol/index.jsx index d8e594da..36390b54 100644 --- a/weapp/src/packages/patrol/index.jsx +++ b/weapp/src/packages/patrol/index.jsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from 'react'; +import Taro from '@tarojs/taro'; import { View, RadioGroup, @@ -37,7 +38,7 @@ const Index = () => { ] useEffect(() => { - const prjTypeSelector = ['道路', '桥梁', '涵洞'] + const prjTypeSelector = ['道路', '桥梁', '涵洞', '其他'] const roadSelector = ['富山一路', '金沙大道', '玉湖路'] setPrjTypeSelector(prjTypeSelector) setRoadSelector(roadSelector) @@ -66,12 +67,21 @@ const Index = () => { setProjectType(selector[e.detail.value]) } - function onImgPickerChange() { - + function onImgPickerChange(files) { + setimages(files) + } + function onImageClick(index, file) { + Taro.previewImage({ + urls: [file.url] // 需要预览的图片http链接列表 + }) } + useEffect(() => { + console.log(images); + }, [images]) + return ( - + 上报类型 @@ -142,14 +152,16 @@ const Index = () => { - + + + { // value={this.state.value} // onChange={this.handleChange.bind(this, 'value')} /> - + + + - - - + + { isPatrol ? - + 现场图片: = 3 ? false : true} files={images} onChange={onImgPickerChange} + onImageClick={onImageClick} /> : - + 养护图片: - - + + + 养护前 + + + + + 养护中 + + + + + 养护后 + + } diff --git a/weapp/src/packages/patrol/index.scss b/weapp/src/packages/patrol/index.scss index 44aa32e2..83057e4b 100644 --- a/weapp/src/packages/patrol/index.scss +++ b/weapp/src/packages/patrol/index.scss @@ -1,13 +1,12 @@ -.patrol { - height: 100vh; +page { + height: 100%; width: 100vw; background-color: #f6f6f6; - padding-top: 20px; .report-type { height: 96px; background-color: #fff; - margin-bottom: 20px; + margin: 20px auto; display: flex; justify-content: space-between; align-items: center; @@ -40,12 +39,78 @@ } } - .img-picker { + .patrol-picker { background-color: #fff; + padding: 20px; } + .conserve-picker { + background-color: #fff; + padding: 20px; + + .horizontal-line { + height: 30px; + width: 100%; + border-radius: 5px; + 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: 80px auto; } } \ No newline at end of file diff --git a/weapp/src/packages/patrolView/index.config.js b/weapp/src/packages/patrolView/index.config.js new file mode 100644 index 00000000..e69de29b diff --git a/weapp/src/packages/patrolView/index.jsx b/weapp/src/packages/patrolView/index.jsx new file mode 100644 index 00000000..04792eea --- /dev/null +++ b/weapp/src/packages/patrolView/index.jsx @@ -0,0 +1,144 @@ +import React, { useState, useEffect } 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 request from '@/services/request' +import { getReportList } from '@/services/api'; +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 [isPatrol, setIsPatrol] = useState(true) + 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 userInfo = Taro.getStorageSync('userInfo') || {}; + + function dealError(error) { + Taro.showToast({ + title: error, + icon: 'none', + duration: 1500 + }); + throw new Error(error); + } + useEffect(() => { + request.get(getReportList(),{}, { hideErrorToast: true, hideLoading: true }).then(res => { + if (res.statusCode == 200) { + console.log(res); + setListData(res.data) + return res.data; + } else { + dealError(res.data.message || '请求出错'); + } + }, err => { + dealError(err.message || '请求出错'); + }); + }, []) + + useDidShow(() => { + let refresh = Taro.getStorageSync('refresh'); // 返回列表需要刷新 + if (refresh) { + setPage(0) + setNum(Math.random()) + Taro.removeStorageSync('refresh'); // 返回列表需要刷新 + } + Taro.getSystemInfo({ + success: (res) => { + // windows | mac为pc端 + // android | ios为手机端 + setSystemInfo(res.platform); + } + }); + }) + + const onTypeChange = bool => { + setIsPatrol(bool) + } + + 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 ( + + + onTypeChange(true)}> + + 巡查 + + + onTypeChange(false)}> + + 养护 + + + + + 日期: + + {datePicker || '请选择'} + + + + + + + + + + + { + listData && listData.length > 0 ? listData && listData.map((e, index) => { + return ( + handleDetail(index)}> + + + + {e.road} + + 填报人: + {e.user.name} + + {moment(e.time).format('YYYY-MM-DD HH:mm:ss')} + + + + ) + }) : + } + + + ) +} + +export default Index diff --git a/weapp/src/packages/patrolView/index.scss b/weapp/src/packages/patrolView/index.scss new file mode 100644 index 00000000..7de6c587 --- /dev/null +++ b/weapp/src/packages/patrolView/index.scss @@ -0,0 +1,139 @@ +page { + background-color: #f6f6f6; + + .type-box { + position: fixed; + top: 0px; + width: 100%; + z-index: 100; + 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: 40rpx 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%; + } + } + } + } +} \ No newline at end of file diff --git a/weapp/src/pages/auth/login/login.jsx b/weapp/src/pages/auth/login/login.jsx index 70779dc8..5f45438f 100644 --- a/weapp/src/pages/auth/login/login.jsx +++ b/weapp/src/pages/auth/login/login.jsx @@ -18,7 +18,7 @@ const LoginPage = (props) => { const [password, setPassword] = useState(''); const doLogin = () => { - login(getLoginUrl(), { username, password, pcode }).then(res => { + login(getLoginUrl(), { phone: username, password }).then(res => { Taro.reLaunch({ url: '/pages/home/index' }); @@ -50,7 +50,7 @@ const LoginPage = (props) => { 登录 - + diff --git a/weapp/src/pages/home/index.jsx b/weapp/src/pages/home/index.jsx index 2ff925f4..ca1d68ca 100644 --- a/weapp/src/pages/home/index.jsx +++ b/weapp/src/pages/home/index.jsx @@ -4,20 +4,28 @@ import { View } from '@tarojs/components'; import { useIndustry } from '@/actions/business'; import './index.scss'; - const Index = () => { + const userInfo = Taro.getStorageSync('userInfo') || {}; + const isSuperAdmin = userInfo && userInfo.username === 'SuperAdmin' ? true : false function toPatrol() { Taro.navigateTo({ url: '/packages/patrol/index' }) } + function toPatrolView() { + Taro.navigateTo({ + url: '/packages/patrolView/index' + }) + } return ( 巡 查 养 护 - 填报 + + {isSuperAdmin ? '查看' : '填报'} + ); diff --git a/weapp/src/pages/user/index.jsx b/weapp/src/pages/user/index.jsx index 6c34502f..b1a7009d 100644 --- a/weapp/src/pages/user/index.jsx +++ b/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 ( - - - - {userInfo.displayName || '----'} + + + + + {userInfo.name} + {userInfo.phone} + - - + goRedirect(1)}> + + 我的填报 + + + + goRedirect(2)} style={{ marginTop: '2rpx' }}> + + 修改密码 + + + 退出登录 + ); } diff --git a/weapp/src/pages/user/index.scss b/weapp/src/pages/user/index.scss index 5414ce90..8273e5a1 100644 --- a/weapp/src/pages/user/index.scss +++ b/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; } } \ No newline at end of file diff --git a/weapp/src/services/api.js b/weapp/src/services/api.js index 08fe03f8..bc0f6aeb 100644 --- a/weapp/src/services/api.js +++ b/weapp/src/services/api.js @@ -1,13 +1,16 @@ export const getLoginUrl = () => { - return `/login`; + return `/wxLogin`; }; - export const getLogoutUrl = () => { return `/logout`; }; +export const getReportList = () => { + return `/report/list`; +}; + //行业查询 export const getIndustryUrl = () => { return `/elec/business/industry` diff --git a/weapp/src/static/img/my/card-bg.svg b/weapp/src/static/img/my/card-bg.svg new file mode 100644 index 00000000..914f3279 --- /dev/null +++ b/weapp/src/static/img/my/card-bg.svg @@ -0,0 +1,23 @@ + + + 形状结合 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/my/head.png b/weapp/src/static/img/my/head.png new file mode 100644 index 00000000..a354ae1a Binary files /dev/null and b/weapp/src/static/img/my/head.png differ diff --git a/weapp/src/static/img/my/more.svg b/weapp/src/static/img/my/more.svg new file mode 100644 index 00000000..fda19b75 --- /dev/null +++ b/weapp/src/static/img/my/more.svg @@ -0,0 +1,13 @@ + + + 切片 + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/my/pswd.svg b/weapp/src/static/img/my/pswd.svg new file mode 100644 index 00000000..31bbe81b --- /dev/null +++ b/weapp/src/static/img/my/pswd.svg @@ -0,0 +1,18 @@ + + + 切片 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/my/report.svg b/weapp/src/static/img/my/report.svg new file mode 100644 index 00000000..c4cdfc7c --- /dev/null +++ b/weapp/src/static/img/my/report.svg @@ -0,0 +1,14 @@ + + + 切片 + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/patrolView/card-img.png b/weapp/src/static/img/patrolView/card-img.png new file mode 100644 index 00000000..9027dfbb Binary files /dev/null and b/weapp/src/static/img/patrolView/card-img.png differ diff --git a/weapp/src/static/img/patrolView/chevron-down.png b/weapp/src/static/img/patrolView/chevron-down.png new file mode 100644 index 00000000..abbb78ae Binary files /dev/null and b/weapp/src/static/img/patrolView/chevron-down.png differ diff --git a/weapp/src/static/img/patrolView/conserve-active.svg b/weapp/src/static/img/patrolView/conserve-active.svg new file mode 100644 index 00000000..9af62b14 --- /dev/null +++ b/weapp/src/static/img/patrolView/conserve-active.svg @@ -0,0 +1,30 @@ + + + 切片 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/patrolView/conserve.svg b/weapp/src/static/img/patrolView/conserve.svg new file mode 100644 index 00000000..4025c704 --- /dev/null +++ b/weapp/src/static/img/patrolView/conserve.svg @@ -0,0 +1,32 @@ + + + 切片 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/patrolView/patrol-active.svg b/weapp/src/static/img/patrolView/patrol-active.svg new file mode 100644 index 00000000..5d9003d9 --- /dev/null +++ b/weapp/src/static/img/patrolView/patrol-active.svg @@ -0,0 +1,29 @@ + + + 切片 + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/patrolView/patrol.svg b/weapp/src/static/img/patrolView/patrol.svg new file mode 100644 index 00000000..b77af261 --- /dev/null +++ b/weapp/src/static/img/patrolView/patrol.svg @@ -0,0 +1,27 @@ + + + 切片 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weapp/src/static/img/patrolView/search.png b/weapp/src/static/img/patrolView/search.png new file mode 100644 index 00000000..15db47f2 Binary files /dev/null and b/weapp/src/static/img/patrolView/search.png differ diff --git a/web/client/assets/color.less b/web/client/assets/color.less index 83d90140..3b9b4ccd 100644 --- a/web/client/assets/color.less +++ b/web/client/assets/color.less @@ -1128,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("@{menu-popup-bg}", 2)`);} +.ant-menu-item-danger.ant-menu-item:active {background: #fff1f0;} .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("@{menu-popup-bg}", 2)`);} +.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {background-color: #fff1f0;} .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;} @@ -1702,17 +1702,11 @@ 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)`);} -<<<<<<< HEAD -.ant-tag-pink {color: #c41d7f;background: color(~`colorPalette("@{modal-footer-border-color-split}", 1)`);border-color: #ffadd2;} +.ant-tag-pink {color: #c41d7f;background: #fff0f6;border-color: #ffadd2;} .ant-tag-pink-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;} -.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 {color: #c41d7f;background: #fff0f6;border-color: #ffadd2;} .ant-tag-magenta-inverse {color: #fff;background: #eb2f96;border-color: #eb2f96;} -.ant-tag-red {color: #cf1322;background: color(~`colorPalette("@{menu-popup-bg}", 2)`);border-color: #ffa39e;} +.ant-tag-red {color: #cf1322;background: #fff1f0;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;} @@ -1720,7 +1714,7 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;} .ant-tag-orange-inverse {color: #fff;background: #fa8c16;border-color: #fa8c16;} .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: color(~`colorPalette("@{skeleton-color}", 1)`);border-color: #ffe58f;} +.ant-tag-gold {color: #d48806;background: #fffbe6;border-color: #ffe58f;} .ant-tag-gold-inverse {color: #fff;background: #faad14;border-color: #faad14;} .ant-tag-cyan {color: #08979c;background: #e6fffb;border-color: #87e8de;} .ant-tag-cyan-inverse {color: #fff;background: #13c2c2;border-color: #13c2c2;} @@ -1728,17 +1722,11 @@ tr.ant-table-expanded-row:hover > td {background: @table-expanded-row-bg;} .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("@{progress-steps-item-bg}", 1)`);border-color: #91d5ff;} +.ant-tag-blue {color: #096dd9;background: color(~`colorPalette("@{pagination-item-input-bg}", 1)`);border-color: #91d5ff;} .ant-tag-blue-inverse {color: #fff;background: #1890ff;border-color: #1890ff;} -<<<<<<< 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 {color: #1d39c4;background: color(~`colorPalette("@{avatar-bg}", 4)`);border-color: #adc6ff;} .ant-tag-geekblue-inverse {color: #fff;background: #2f54eb;border-color: #2f54eb;} -.ant-tag-purple {color: #531dab;background: #f9f0ff;border-color: #d3adf7;} ->>>>>>> 65cf2722eec21e1d07ce958f4298eec7ae620c85 +.ant-tag-purple {color: #531dab;background: color(~`colorPalette("@{calendar-bg}", 1)`);border-color: #d3adf7;} .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;} @@ -1975,7 +1963,7 @@ 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("@{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='color(~`colorPalette("@{pagination-item-input-bg}", 1)`)'], .ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='color(~`colorPalette("@{pagination-item-input-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);} diff --git a/web/client/assets/images/quanju/circle2.png b/web/client/assets/images/quanju/circle2.png new file mode 100644 index 00000000..ee584235 Binary files /dev/null and b/web/client/assets/images/quanju/circle2.png differ diff --git a/web/client/assets/images/quanju/kelvhua_bdbg.png b/web/client/assets/images/quanju/kelvhua_bdbg.png new file mode 100644 index 00000000..6cb1b42c Binary files /dev/null and b/web/client/assets/images/quanju/kelvhua_bdbg.png differ diff --git a/web/client/assets/images/quanju/search.png b/web/client/assets/images/quanju/search.png new file mode 100644 index 00000000..b2e932c3 Binary files /dev/null and b/web/client/assets/images/quanju/search.png differ diff --git a/web/client/src/sections/organization/components/depModal.js b/web/client/src/sections/organization/components/depModal.js index 56f341b4..bd624b48 100644 --- a/web/client/src/sections/organization/components/depModal.js +++ b/web/client/src/sections/organization/components/depModal.js @@ -68,7 +68,7 @@ const DepModal = (props) => { function mapStateToProps(state) { const { depMessage } = state; - console.log('depMessage:',depMessage); + const pakData = (dep) => { return dep.map((d) => { return { @@ -80,7 +80,6 @@ function mapStateToProps(state) { }) } let depData = pakData(depMessage.data || []) - console.log('depData:',depData); return { loading: depMessage.isRequesting, depData, diff --git a/web/client/src/sections/organization/containers/user.js b/web/client/src/sections/organization/containers/user.js index 79945530..f5ac9ac9 100644 --- a/web/client/src/sections/organization/containers/user.js +++ b/web/client/src/sections/organization/containers/user.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { connect } from 'react-redux'; import { DeleteOutlined, EllipsisOutlined, FormOutlined } from '@ant-design/icons'; -import { Spin, Space, Button, Popconfirm, Row, Col, Tree, Table, Card, Switch, Tooltip } from 'antd'; +import { Spin, Space, Button, Popconfirm, Row, Col, Tree, Table, Card, Switch, Tooltip, Breadcrumb } from 'antd'; import ProTable from '@ant-design/pro-table'; import { getDepMessage, getDepUser, createUser, updateUser, delUser, resetPwd, createDep, delDep, updateDep } from '../actions/user'; import UserModal from '../components/userModal'; @@ -22,6 +22,7 @@ const UserManage = (props) => { const [depModalType, setDepModalType] = useState(); const [depModalRecord, setDepModalRecord] = useState(); const [selectedTree, setSelectedTree] = useState(); + const [depCrumbs, setDepCrumbs] = useState([]); useEffect(() => { @@ -34,6 +35,12 @@ const UserManage = (props) => { dispatch(getDepUser(depMessage[0].id)) } }, [depMessage]) + + useEffect(() => { + const list = handleCrumbs(depSelectedKeys) + setDepCrumbs(list) + + }, [depSelectedKeys]) const columns = [ { @@ -181,7 +188,9 @@ const UserManage = (props) => { // 删除部门 const delDepartment = (id) => { dispatch(delDep(id)).then(res => { - dispatch(getDepMessage()) + if (res.success) { + dispatch(getDepMessage()) + } }); } const renderTree = (item, id) => { @@ -206,6 +215,32 @@ const UserManage = (props) => { } + + const handleCrumbs = (id) => { + let crumbsList = [] + + depMessage?.forEach(d => { + if (id == d.id) { + crumbsList.push(d.name) + } + d.subordinate?.forEach(s => { + if (id == s.id) { + crumbsList.push(d.name) + crumbsList.push(s.name) + } + s.subordinate?.forEach(a => { + if (id == a.id) { + crumbsList.push(d.name) + crumbsList.push(s.name) + crumbsList.push(a.name) + } + }) + }) + }) + return crumbsList + } + + return (
@@ -218,6 +253,7 @@ const UserManage = (props) => { style={{ marginLeft: 10 }} onClick={() => openDepModal('create')} >新建部门 + { depMessage.length ? { defaultExpandedKeys={[depMessage[0].id]} selectedKeys={depSelectedKeys} onSelect={(selectedKeys, e) => { + // console.log('selectedKeys:',selectedKeys); + if (e.selected) { + handleCrumbs(selectedKeys) setSelectedTree(selectedKeys) setDepSelectedKeys(selectedKeys) dispatch(getDepUser(selectedKeys[0])) @@ -258,7 +297,11 @@ const UserManage = (props) => { - + + { + depCrumbs?.map((c, index) => { return ({c}) }) + } + { function mapStateToProps(state) { const { depMessage, depUser, global } = state; + console.log('depMessage:', depMessage); // console.log(state); return { clientHeight: global.clientHeight, diff --git a/web/client/src/sections/quanju/actions/example.js b/web/client/src/sections/quanju/actions/example.js index b9b2ffbd..5818df8d 100644 --- a/web/client/src/sections/quanju/actions/example.js +++ b/web/client/src/sections/quanju/actions/example.js @@ -13,3 +13,41 @@ export function getMembers(orgId) { reducer: { name: 'members' } }); } + + +//获取大屏道路统计信息 +export function getdaolutongji() { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_DAOLUTONGJI', + url: ApiTable.getBgroadstatistics, + msg: { error: '获取道路统计信息失败' }, + // reducer: { name: 'members' } + }); +} + +//获取治超监测点处理数据信息 +export function getjiandmanage() { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_JIANDMANAGE', + url: ApiTable.getzhichaomanager, + msg: { error: '获取治超监测点处理数据信息' }, + // reducer: { name: 'members' } + }); +} + + +//获取治超详情列 +export function getjiandetail() { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_JIANDETAIL', + url: ApiTable.getzhichaodetail, + msg: { error: '获取治超监测点处理数据信息' }, + // reducer: { name: 'members' } + }); +} \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/build/Leftbottom.js b/web/client/src/sections/quanju/containers/footer/build/Leftbottom.js index 6dc759b2..55fd8020 100644 --- a/web/client/src/sections/quanju/containers/footer/build/Leftbottom.js +++ b/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}
${values.marker} ${values.name} ${values.value}个(${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 (
-
+
+

3234.23

+ 道路总公里 +
+ +
); } diff --git a/web/client/src/sections/quanju/containers/footer/build/Rightbottom.js b/web/client/src/sections/quanju/containers/footer/build/Rightbottom.js index 2f111224..63b5b344 100644 --- a/web/client/src/sections/quanju/containers/footer/build/Rightbottom.js +++ b/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}
${values.marker} ${values.name} ${values.value}个(${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 (
-
+
+

3234.23

+ 道路总公里 +
+ +
); } -export default Leftbottom \ No newline at end of file +export default Rightbottom \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/build/index.js b/web/client/src/sections/quanju/containers/footer/build/index.js index 85e8c26c..86884a9b 100644 --- a/web/client/src/sections/quanju/containers/footer/build/index.js +++ b/web/client/src/sections/quanju/containers/footer/build/index.js @@ -1,4 +1,5 @@ -import React from 'react' +import React, { useEffect, useState } from 'react' +import { connect } from 'react-redux'; // import LeftTop from './Lefttop' // import LeftCenter from './Leftcenter' import LeftBottom from './Leftbottom' @@ -8,14 +9,42 @@ import Rightcenter from './Rightcenter' import { Carousel } from 'antd' import Module from '../../public/module' import RightBottom from './Rightbottom' +import AutoRollComponent from './AutoRollComponent' import './style.less' -const Build = () => { +import {getdaolutongji} from '../../../actions/example' +const Build = (props) => { + const { dispatch } = props + const [buildingnumber,setbuildingnumber] = useState(0) + const requestbuildingnumber = async ()=>{ + const res = await dispatch(getdaolutongji()); + setbuildingnumber(res.payload.data) + // console.log(res.payload.data,'哈哈哈') + + } + useEffect(()=>{ + requestbuildingnumber() + },[]) + const datas = new Array(15) + datas.fill({ + name:"东乡镇", + number:"11111", + gongli:'9999' + },0,15) + const rendercontent = ()=>{ + return (
+ {datas.map(({name,number,gongli},index)=>
+ {name} + {number} + {gongli} +
)} +
) + } return (
+ }} customize = {true}>
@@ -23,7 +52,7 @@ const Build = () => { 在建公路数量
-
6200
+
{buildingnumber.buildingRoad || 0}
@@ -32,13 +61,13 @@ const Build = () => { 已建公路数量
-
6200
+
{buildingnumber.buildedRoad || 0}
+ }} customize = {true}>
@@ -61,45 +90,13 @@ const Build = () => { 公路数量/条 公里
-
- -
- 乡镇名称 - 公路数量/条 - 公里 -
-
- 乡镇名称 - 公路数量/条 - 公里 -
-
- 乡镇名称 - 公路数量/条 - 公里 -
-
- 乡镇名称 - 公路数量/条 - 公里 -
-
- 乡镇名称 - 公路数量/条 - 公里 -
-
- 乡镇名称 - 公路数量/条 - 公里 -
-
-
+
+ }} customize = {true}> @@ -115,16 +112,36 @@ const Build = () => { + }} customize = {true}> + }} customize = {true}>
) } -export default Build +function mapStateToProps(state) { + const { auth, depMessage } = state; + const pakData = (dep) => { + return dep.map((d) => { + return { + title: d.name, + value: d.id, + // children: d.type >= 2 ? [] : pakData(d.subordinate) + children: pakData(d.subordinate) + } + }) + } + let depData = pakData(depMessage.data || []) + return { + user: auth.user, + depMessage: depMessage.data || [], + depLoading: depMessage.isRequesting, + depData, + }; +} +export default connect(mapStateToProps)(Build); diff --git a/web/client/src/sections/quanju/containers/footer/build/style.less b/web/client/src/sections/quanju/containers/footer/build/style.less index 4db9bf41..727ada13 100644 --- a/web/client/src/sections/quanju/containers/footer/build/style.less +++ b/web/client/src/sections/quanju/containers/footer/build/style.less @@ -1,3 +1,8 @@ +@media screen and (max-width:1281px){ + html{ + font-size: 10px; + } +} .bgbuild{ // box-sizing: border-box; padding: 0 15px 0 15px; @@ -15,8 +20,8 @@ justify-content: center; align-items: center; .build-left-top-center{ - width: 174px; - height: 146px; + width: 35%; + height: 50%; margin: 0 10px; } .build-left-top-item{ @@ -45,11 +50,11 @@ transform: rotate(134deg); } &:nth-child(2){ - font-size: 16px; + font-size: 1rem; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #E9F7FF; - line-height: 22px; + // line-height: 22px; } } @@ -58,7 +63,7 @@ // width: 80%; // height: 100%; // margin: 1% auto 0; - font-size: 38px; + font-size: 2.375rem; font-family: YouSheBiaoTiHei; color: #FFFFFF; text-align: center; @@ -85,8 +90,8 @@ justify-content: center; align-items: center; img{ - height: 50px; - width: 78px; + // height: 15%; + width: 25%; } div{ @@ -97,14 +102,14 @@ margin-left: 10px; span{ &:nth-child(1){ - font-size: 12px; + font-size: 0.75rem; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #C2EEFF; letter-spacing: 1px; } &:nth-child(2){ - font-size: 28px; + font-size: 1.75rem; font-family: YouSheBiaoTiHei; color: #FFFFFF; line-height: 36px; @@ -130,12 +135,12 @@ } } .build-left-center-content{ - width: 100%; - height: 100px!important; + // width: 100%; + // height:40%; .build-left-center-item{ - display: flex !important; - width: 100%!important; - height: 28px!important; + display: flex ; + width: 100%; + height: 28px; span{ flex:1; text-align: center; @@ -146,9 +151,9 @@ line-height: 16px; } } - .slick-list{ - height: 128px !important; - } + // .slick-list{ + // height: 128px !important; + // } } @@ -159,6 +164,35 @@ display: flex; justify-content: center; align-items: center; + position: relative; + .build-left-bottom-title{ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: absolute; + left: 27%; + top:38%; + h2{ + font-size: 1.25rem; + font-family: YouSheBiaoTiHei; + color: #FFFFFF; + line-height: 1.625rem; + text-shadow: 0px 0px 0.25rem #1C60FE; + } + span{ + font-size: 0.75rem; + font-family: PingFangSC-Medium, PingFang SC; + font-weight: 500; + color: #E9F7FF; + } + } + img{ + width: 19%; + position: absolute; + left: 26.5%; + top:29% + } } } @@ -179,7 +213,7 @@ height: 30%; width: 100%; padding-left: 15px; - font-size: 24px; + font-size: 1.5rem; font-family: YouSheBiaoTiHei; color: #FFFFFF; display: flex; @@ -200,23 +234,24 @@ justify-content: space-around; align-items: center; img{ - width:12% ; - height: 80%; + width:14% ; + // height: 80%; } div{ - font-size: 16px; + font-size: 1rem; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #C2EEFF; - line-height: 22px; - letter-spacing: 1px + transform: translateX(-1.5rem); + // line-height: 22px; + letter-spacing: 0.0625rem; } h2{ - font-size: 28px; + font-size: 1.75rem; font-family: YouSheBiaoTiHei; color: #FFFFFF; margin-bottom : 0!important; - text-shadow: 0px 0px 4px #07B9FE; + text-shadow: 0px 0px 0.25rem #07B9FE; } } } @@ -226,6 +261,35 @@ display: flex; justify-content: center; align-items: center; + position: relative; + .build-right-bottom-title{ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: absolute; + left: 27%; + top:38%; + h2{ + font-size: 1.25rem; + font-family: YouSheBiaoTiHei; + color: #FFFFFF; + line-height: 1.625rem; + text-shadow: 0px 0px 0.25rem #1C60FE; + } + span{ + font-size: 0.75rem; + font-family: PingFangSC-Medium, PingFang SC; + font-weight: 500; + color: #E9F7FF; + } + } + img{ + width: 19%; + position: absolute; + left: 26.5%; + top:29% + } } } } diff --git a/web/client/src/sections/quanju/containers/footer/conserve/chart/pie-chart.js b/web/client/src/sections/quanju/containers/footer/conserve/chart/pie-chart.js new file mode 100644 index 00000000..f3f26f3e --- /dev/null +++ b/web/client/src/sections/quanju/containers/footer/conserve/chart/pie-chart.js @@ -0,0 +1,110 @@ +import React from 'react' +import { useEffect, useRef } from 'react'; +import * as echarts from 'echarts'; + +const PieChart = (props) => { + + const { width, height, data, colorList, underColorList, total, text } = props + + const chartRef = useRef(null); + let name = [], emptyName = [] + // const name = data?.map(d) + data?.forEach(d => { + name.push(d.name) + emptyName.push({ + name: '', + value: d.value + }) + }) + useEffect(() => { + let chartInstance = echarts.init(chartRef.current); + const option = { + tooltip: { + trigger: "item", + }, + legend: { + orient: "vertical", + itemWidth: 10, + itemHeight: 10, + right: '30%', + top: 'center', + align: 'left', + data: name, + textStyle: { + color: "#fff", + }, + }, + grid: { + left: '10%' + }, + // title: [ + // { + // text: text, + // top: "58%", + // left: '16%', + // textStyle: { + // color: "#E9F7FF", + // fontSize: 14, + // }, + // }, + // { + // text: total, + // top: "40%", + // left: '10%', + // textStyle: { + // fontSize: "30", + // color: "#FFFFFF", + // fontFamily: "YouSheBiaoTiHei", + // }, + // }, + // ], + series: [ + { + name: "底层背景", + type: "pie", + hoverAnimation: false, + legendHoverLink: false, + radius: ["60%", "72%"], + center: ['25%', '50%'], + color: underColorList, + label: { + show: false + }, + labelLine: { + show: false + }, + tooltip: { + show: false, + }, + + data: emptyName, + }, + { + name: "已绿化里程统计", + type: "pie", + radius: ["67%", "80%"], + center: ['25%', '50%'], + color: colorList, + label: { + show: false + }, + data: data, + }, + ], + }; + + chartInstance.setOption(option); + window.addEventListener('resize', () => { + if (chartInstance) { + chartInstance.resize() + } + }) + }, []) + return ( +
+
+
+ + ) +} +export default PieChart \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/conserve/index.js b/web/client/src/sections/quanju/containers/footer/conserve/index.js index cfb98746..5e83a6d5 100644 --- a/web/client/src/sections/quanju/containers/footer/conserve/index.js +++ b/web/client/src/sections/quanju/containers/footer/conserve/index.js @@ -3,10 +3,11 @@ import Left from './left' import Right from './right' const Conserve = () => { + return ( -
+
- +
) } diff --git a/web/client/src/sections/quanju/containers/footer/conserve/left/left-bottom.js b/web/client/src/sections/quanju/containers/footer/conserve/left/left-bottom.js index 51ea4ef7..82097322 100644 --- a/web/client/src/sections/quanju/containers/footer/conserve/left/left-bottom.js +++ b/web/client/src/sections/quanju/containers/footer/conserve/left/left-bottom.js @@ -1,14 +1,39 @@ import React from 'react' import Module from '../../../public/module' +import PieChart from '../chart/pie-chart'; +let data = [ + { value: 435, name: "县道" }, + { value: 679, name: "乡道" }, + { value: 848, name: "村道" }, +] +let colorList = [ + "rgba(7,185,254,1)", + "rgba(28,96,254,1)", + "rgba(4,251,240,1)", +] +let underColorList = [ + "rgba(7,185,254,0.5)", + "rgba(28,96,254,0.5)", + "rgba(4,251,240,0.5)", +] const LeftBottom = () => { const style = { height: "31%", marginTop: "3%" } return ( - <> - - - - + <> + + {/*
*/} + +
+ ) } export default LeftBottom \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/conserve/left/left-center.js b/web/client/src/sections/quanju/containers/footer/conserve/left/left-center.js index 42c7cd48..d2cd5330 100644 --- a/web/client/src/sections/quanju/containers/footer/conserve/left/left-center.js +++ b/web/client/src/sections/quanju/containers/footer/conserve/left/left-center.js @@ -1,30 +1,228 @@ import { Col, Row } from 'antd' import React from 'react' -import { useEffect } from 'react' +import { useEffect, useRef } from 'react' import Module from '../../../public/module' +import * as echarts from 'echarts'; const LeftCenter = () => { - const style = { height: "31%", marginTop: "3%" } + const style = { height: "31%", marginTop: "3%" } + const chartRef = useRef(null); + useEffect(() => { + let chartInstance = echarts.init(chartRef.current); + let colorArray = [ + { + top: "#07B9FE", + bottom: "#10274B", + }, + { + top: "#1978E5", + bottom: " #10274B", + }, + { + top: "#1978E5", + bottom: "#10274B", + }, + ]; + const option = { + tooltip: { + show: true, + trigger: "axis", + axisPointer: { + type: "none", + }, + }, + grid: { + left: "5%", + top: "12%", + right: "5%", + bottom: "8%", + width:'92%', + containLabel: true, + }, - useEffect(() => { + xAxis: { + type: "value", + show: true, + position: "bottom", + axisTick: { + show: true, + lineStyle: { + color: "rgba(176,215,255,0.25)", + // type: "dashed", + }, + }, + axisLine: { + show: false, + lineStyle: { + color: "rgba(216,240,255,0.8000)", + }, + }, + splitLine: { + show: true, + lineStyle: { + color: "rgba(176,215,255,0.25)", + type: "dashed", + }, + }, + }, + yAxis: [ + { + type: "category", + axisTick: { + show: false, + alignWithLabel: false, + length: 5, + }, + splitLine: { + //网格线 + show: false, + }, + inverse: true, //排序 + axisLine: { + show: false, + lineStyle: { + color: "rgba(176,215,255,0.8)", + }, + }, + zlevel: 100, + data: ["县级可绿化里程", "乡级可绿化里程", "村级可绿化里程"], + }, + { + type: "category", + axisTick: { + show: false, + alignWithLabel: false, + length: 5, + }, + splitLine: { + //网格线 + show: false, + }, + axisLabel: { + show: true, + backgroundColor: { + image: 'assets/images/quanju/kelvhua_bdbg.png', + }, + width: 70, + height: 22, + color: '#D8F0FF', + margin:50, + verticalAlign: 'middle', + align: 'center', + textShadowColor:'#1AD0FF', + textShadowBlur:6, + fontSize:14 + // formatter:(f) =>{console.log('f:',f);} + }, + inverse: true, //排序 + axisLine: { + show: false, + lineStyle: { + color: "rgba(176,215,255,0.8)", + }, - }, []) + }, + data: [60, 132, 89], + }, + ], + series: [ + { + name: '背景', + type: "bar", + barWidth: 3, + barGap: "100%", + barCategoryGap: "50%", + color: "#15356E", + data: [150, 150, 150, 150], + tooltip: { + show: false, + }, + }, + { + name: "", + type: "bar", + zlevel: 1, + barWidth: 3, + barGap: "-100%", + barCategoryGap: "50%", + data: [60, 132, 89], + label: { + show: true, + position: 'right', // 位置 + fontSize: 12, + lineHeight: 13, + distance: -2, + verticalAlign: "middle", + formatter: [ + '{a| }', + ].join(''), // 这里是数据展示的时候显示的数据 + rich: { + a: { + backgroundColor: { + image: 'assets/images/quanju/circle2.png' + }, + width: 15, + height: 15, + align: 'left', + verticalAlign: "center", + } + } + }, + itemStyle: { + normal: { + show: true, + color: function (params) { + return { + type: "linear", + colorStops: [ + { + offset: 0, + color: colorArray[params.dataIndex].bottom, + }, + { + offset: 1, + color: colorArray[params.dataIndex].top, + }, - return ( - <> - - - - icon - 可绿化里程总数 - - 1234.123 - -
图表
+ ], + // globalCoord: false, + }; + }, + barBorderRadius: 70, + borderWidth: 0, + borderColor: "#333", + }, + }, + emphasis: { + disabled: true //禁止移入柱子改变颜色 + } + }, + ], + }; + chartInstance.setOption(option); + window.addEventListener('resize',() =>{ + if(chartInstance) { + chartInstance.resize() + } + }) + }, []); -
- - ) + return ( + <> + + + + + icon + 可绿化里程总数 + + 1234 + +
+ +
+ + ) } export default LeftCenter \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js b/web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js index 89333c1e..eaadc4f8 100644 --- a/web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js +++ b/web/client/src/sections/quanju/containers/footer/conserve/left/left-top.js @@ -12,6 +12,9 @@ const LeftTop = () => { useEffect(() => { let chartInstance = echarts.init(seasonChartRef.current); const seasonOption = { + tooltip:{ + show:true + }, title: [ { text: "季节性", @@ -37,6 +40,13 @@ const LeftTop = () => { radius: ["60%", "68%"], center: ["50%", "50%"], }, + grid: { + left: "5%", + top: "12%", + right: "1%", + bottom: "8%", + containLabel: true, + }, angleAxis: { max: 100, show: false, @@ -61,7 +71,7 @@ const LeftTop = () => { roundCap: true, barWidth: 30, showBackground: true, - data: [40], + data: [{value:40,name:'季节性'}], coordinateSystem: "polar", itemStyle: { normal: { @@ -81,11 +91,21 @@ const LeftTop = () => { ], }; chartInstance.setOption(seasonOption); + window.addEventListener('resize',() =>{ + if(chartInstance) { + chartInstance.resize() + } + }) }, []) useEffect(() => { let chartInstance = echarts.init(frequentlyChartRef.current); + const frequentlyOption = { + tooltip:{ + show:true, + trigger: "item", + }, title: [ { text: "经常性", @@ -111,6 +131,14 @@ const LeftTop = () => { radius: ["60%", "68%"], center: ["50%", "50%"], }, + grid: { + left: "10%", + top: "12%", + right: "1%", + bottom: "8%", + width: '70%', + containLabel: true, + }, angleAxis: { max: 100, show: false, @@ -135,7 +163,7 @@ const LeftTop = () => { roundCap: true, barWidth: 30, showBackground: true, - data: [40], + data:[{value:40,name:'经常性'}], coordinateSystem: "polar", itemStyle: { normal: { @@ -157,30 +185,34 @@ const LeftTop = () => { ], }; chartInstance.setOption(frequentlyOption); - + window.addEventListener('resize', () => { + if (chartInstance) { + chartInstance.resize() + } + }) }, []) const style = { height: "31%", marginTop: "3%" } return ( <> - -
-
-
+ +
+
+
-
+
diff --git a/web/client/src/sections/quanju/containers/footer/conserve/right/right-bottom.js b/web/client/src/sections/quanju/containers/footer/conserve/right/right-bottom.js index 9665fb01..744165df 100644 --- a/web/client/src/sections/quanju/containers/footer/conserve/right/right-bottom.js +++ b/web/client/src/sections/quanju/containers/footer/conserve/right/right-bottom.js @@ -1,14 +1,42 @@ import React from 'react' import Module from '../../../public/module' +import PieChart from '../chart/pie-chart'; +let data = [ + { value: 435, name: "道路" }, + { value: 679, name: "桥梁" }, + { value: 848, name: "涵洞" }, + { value: 666, name: "其他" }, +] +let colorList = [ + "rgba(7,185,254,1)", + "rgba(28,96,254,1)", + "rgba(4,251,240,1)", + "rgba(255,194,20,1)" +] +let underColorList = [ + "rgba(7,185,254,0.5)", + "rgba(28,96,254,0.5)", + "rgba(4,251,240,0.5)", + "rgba(255,194,20,0.5)" +] const RightBottom = () => { const style = { height: "31%", marginTop: "3%" } return ( - <> - - - - + <> + + {/*
*/} + +
+ ) } export default RightBottom \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/conserve/right/right-top.js b/web/client/src/sections/quanju/containers/footer/conserve/right/right-top.js index 18b24f6b..6e1cd0c6 100644 --- a/web/client/src/sections/quanju/containers/footer/conserve/right/right-top.js +++ b/web/client/src/sections/quanju/containers/footer/conserve/right/right-top.js @@ -5,12 +5,12 @@ import Module from '../../../public/module' const RightTop = () => { const style = { height: "31%", marginTop: "3%" } const textStyle = { fontSize: 14, color: '#E9F7FF' } - const numStyle = { color: '#fff', fontSize: 24, fontFamily: 'YouSheBiaoTiHei', textShadow: '0px 0px 8px #1C60FE', marginTop: 8 } + const numStyle = { color: '#fff', fontSize: 20, fontFamily: 'YouSheBiaoTiHei', textShadow: '0px 0px 8px #1C60FE', marginTop: 8 } return ( <>
- + icon
@@ -26,7 +26,7 @@ const RightTop = () => { - + icon diff --git a/web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js b/web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js index c50f7e59..2eebc655 100644 --- a/web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js +++ b/web/client/src/sections/quanju/containers/footer/guanli/LeftItem.js @@ -1,88 +1,17 @@ import React, { useEffect, useRef } from 'react'; import './style.less' import * as echarts from 'echarts'; -export default function LeftItem() { +export default function LeftItem({datas}) { const seasonChartRef = useRef(null); + // console.log(props.datas,'hhh') useEffect(() => { let chartInstance = echarts.init(seasonChartRef.current); - // const seasonOption = { - // title: [ - // { - // text: "已处理", - // x: "center", - // top: "55%", - // textStyle: { - // color: "#E9F7FF", - // fontSize: 14, - // }, - // }, - // { - // text: "2333", - // x: "center", - // y: "35%", - // textStyle: { - // fontSize: "30", - // color: "#FFFFFF", - // fontFamily: "YouSheBiaoTiHei", - // }, - // }, - // ], - // polar: { - // radius: ["78%", "86%"], - // center: ["50%", "50%"], - // }, - // angleAxis: { - // max: 100, - // clockWise:false, //逆时针加载 - // show: false, - // }, - // radiusAxis: { - // type: "category", - // show: true, - // axisLabel: { - // show: false, - // }, - // axisLine: { - // show: false, - // }, - // axisTick: { - // show: false, - // }, - // }, - // series: [ - // { - // name: "", - // type: "bar", - // roundCap: true, - // clockWise:false, //逆时针加载 - // barWidth: 30, - // showBackground: true, - // data: [40], - // coordinateSystem: "polar", - // itemStyle: { - // normal: { - // color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ - // { - // offset: 0, - // color: "#AAC8FF", - // }, - // { - // offset: 1, - // color: "#0041BB", - // }, - // ]), - // }, - // }, - // }, - // ], - // }; const option = { title: { - text: '75%', + text: `${(datas.processed*100/datas.total).toFixed(2)}%`, top:'35%', - textStyle: { - fontSize: 22, + fontSize: "1.375rem", fontFamily: 'PingFangSC-Medium, PingFang SC', fontWeight: 500, // marginTop:-60, @@ -90,7 +19,7 @@ export default function LeftItem() { }, subtext: '已处理', subtextStyle: { - fontSize: 16, + fontSize: "1rem", fontFamily: "PingFangSC-Regular, PingFang SC", fontWeight: 400, color: 'rgba(216,240,255,0.8000)' @@ -140,17 +69,17 @@ export default function LeftItem() { series: [{ type: 'bar', data: [{ - name: '作文得分', - value: 75, + name: '已处理', + value: (datas.processed/datas.total).toFixed(2)*100, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ { offset: 0, - color: "#AAC8FF", + color: "#00D5FF", }, { offset: 1, - color: "#0041BB", + color: "#1978E5", }]) } }, @@ -165,7 +94,7 @@ export default function LeftItem() { data: [{ value: 100, itemStyle: { - color: '#e2e2e2', + color: '#092B7B ', shadowColor: 'rgba(0, 0, 0, 0.2)', shadowBlur: 5, shadowOffsetY: 2 @@ -178,17 +107,22 @@ export default function LeftItem() { z: 1 }] } + + + chartInstance.setOption(option); }, []) return (
- 莲塘镇 -
244
+ {datas.name} +
{datas.total}
-
+ +
+
) diff --git a/web/client/src/sections/quanju/containers/footer/guanli/index.js b/web/client/src/sections/quanju/containers/footer/guanli/index.js index 88552520..4557fdaf 100644 --- a/web/client/src/sections/quanju/containers/footer/guanli/index.js +++ b/web/client/src/sections/quanju/containers/footer/guanli/index.js @@ -1,47 +1,65 @@ -import React from 'react' +import React, { useEffect, useState } from 'react'; +import { connect } from 'react-redux'; import { Carousel } from 'antd' import AutoRollComponent from '../build/AutoRollComponent' import Module from '../../public/module' import LeftItem from './LeftItem' +import {getjiandmanage,getjiandetail} from '../../../actions/example' import './style.less' -const Guanli = () => { - const datas = new Array(35) - const itemlist = [1,2,3] +const Guanli = (props) => { + const {dispatch} = props + const [leftDatas,setleftDatas] = useState([]) + const [rightDatas,setrightDatas] = useState([]) + const requestleftDatas = async()=>{ + const res = await dispatch(getjiandmanage()) + setleftDatas(res.payload.data) + // console.log(res,'哈哈哈') + } + const requestRightDatas = async()=>{ + const res = await dispatch(getjiandetail()) + setrightDatas(res.payload.data) + console.log(res,'嘿嘿嘿') + } + useEffect(()=>{ + requestleftDatas(); + requestRightDatas() + },[]) + const renderContent = () => { - datas.fill({ - chepaihao:'苏LD1112121', - caoxian:'30%', - chufa:'200元', - riqi:'2022年5月4日' - },1,35) - console.log(datas,'数组') return
- {datas?.map(({ chepaihao, caoxian, chufa,riqi }, index) => { + {rightDatas && rightDatas.length!==0?rightDatas.overSpeedList.map(({ id, licensePlate, overrunRate,fine,processingTime }, index) => { return
- {chepaihao} - {caoxian} - {chufa} - {riqi} + {licensePlate} + {overrunRate}% + {fine} + {processingTime}
- })} + }):""}
} - renderContent() + const renderLeftContent = ()=>{ + + return leftDatas && leftDatas.length!==0?leftDatas.map((item,index)=> + + ):"" + + } + // renderContent() return (
- - {itemlist.map((item,index)=> - - )} + +
- +
已处理 - 187 + {rightDatas.processed||0}
@@ -58,4 +76,24 @@ const Guanli = () => {
) } -export default Guanli \ No newline at end of file +function mapStateToProps(state) { + const { auth, depMessage } = state; + const pakData = (dep) => { + return dep.map((d) => { + return { + title: d.name, + value: d.id, + // children: d.type >= 2 ? [] : pakData(d.subordinate) + children: pakData(d.subordinate) + } + }) + } + let depData = pakData(depMessage.data || []) + return { + user: auth.user, + depMessage: depMessage.data || [], + depLoading: depMessage.isRequesting, + depData, + }; +} +export default connect(mapStateToProps)(Guanli); \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/guanli/style.less b/web/client/src/sections/quanju/containers/footer/guanli/style.less index c225f744..ac6fba18 100644 --- a/web/client/src/sections/quanju/containers/footer/guanli/style.less +++ b/web/client/src/sections/quanju/containers/footer/guanli/style.less @@ -1,3 +1,8 @@ +@media screen and (max-width:1281px){ + html{ + font-size: 10px; + } +} .guanli{ // box-sizing: border-box; padding: 0 15px 0 15px; @@ -19,13 +24,13 @@ justify-content: space-between; border: 2px solid rgba(28,96,254,0.5000); .guanli-left-item-left{ - width: 30%; - height: 70%; + width: 45%; + height: 60%; display: flex; flex-direction: column; align-items: center; span{ - font-size: 20px; + font-size: 1.25rem; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: rgba(216,240,255,0.8000); @@ -34,16 +39,16 @@ display: flex; justify-content: center; // align-items: ; - font-size: 34px; + font-size: 2.125rem; font-family: YouSheBiaoTiHei; color: #FFFFFF; - height: 60%; + height: 70%; width: 100%; background: url('/assets/images/quanju/guanlijiance_1.png') no-repeat; background-size: 100% 80%; background-position: center bottom; span{ - font-size: 16px; + font-size: 1rem; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; padding-top: 10%; @@ -56,7 +61,20 @@ } .guanli-left-item-right{ width: 40%; - height: 60%; + height: 50%; + position: relative; + span{ + position: absolute; + width: 8px; + height: 8px; + background-color: #fff; + top: 1.5%; + left: 50%; + z-index: 10; + border-radius: 4px; + display: block; + } + // background-color: pink; } // background-color: pink; @@ -130,12 +148,12 @@ justify-content: space-around; // background: rgba(21,77,160,0.2000); span{ - font-size: 14px; + font-size: 0.875rem; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: rgba(216,240,255,0.8000); line-height: 20px; - flex:1; + // flex:1; text-align: center; // &:nth-child(1){ diff --git a/web/client/src/sections/quanju/containers/footer/operation/index.js b/web/client/src/sections/quanju/containers/footer/operation/index.js index c8b81208..4ebd1ab2 100644 --- a/web/client/src/sections/quanju/containers/footer/operation/index.js +++ b/web/client/src/sections/quanju/containers/footer/operation/index.js @@ -1,8 +1,13 @@ import React from 'react' +import Left from './left' +import Right from './right' const Operation = () => { return ( - <>运营 +
+ + +
) } export default Operation \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/operation/left.js b/web/client/src/sections/quanju/containers/footer/operation/left.js new file mode 100644 index 00000000..eb5681e7 --- /dev/null +++ b/web/client/src/sections/quanju/containers/footer/operation/left.js @@ -0,0 +1,180 @@ +import React, { useMemo, useState, useEffect } from 'react'; +import { SearchOutlined } from '@ant-design/icons'; +import { Col, Row, Input, Tree } from 'antd' +import Module from '../../public/module' + +const { Search } = Input; +const x = 3; +const y = 2; +const z = 1; +const defaultData = []; + +const generateData = (_level, _preKey, _tns) => { + const preKey = _preKey || '0'; + const tns = _tns || defaultData; + const children = []; + + for (let i = 0; i < x; i++) { + const key = `${preKey}-${i}`; + tns.push({ + title: key, + key, + }); + + if (i < y) { + children.push(key); + } + } + + if (_level < 0) { + return tns; + } + + const level = _level - 1; + children.forEach((key, index) => { + tns[index].children = []; + return generateData(level, key, tns[index].children); + }); +}; + +generateData(z); +const dataList = []; + +const generateList = (data) => { + for (let i = 0; i < data.length; i++) { + const node = data[i]; + const { key } = node; + dataList.push({ + key, + title: key, + }); + + if (node.children) { + generateList(node.children); + } + } +}; + +generateList(defaultData); + +const getParentKey = (key, tree) => { + let parentKey; + + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + + if (node.children) { + if (node.children.some((item) => item.key === key)) { + parentKey = node.key; + } else if (getParentKey(key, node.children)) { + parentKey = getParentKey(key, node.children); + } + } + } + + return parentKey; +}; + +const Left = () => { + + useEffect(() => { + + }, []) + + const style = { height: "97%", marginTop: "3%" } + const [expandedKeys, setExpandedKeys] = useState([]); + const [searchValue, setSearchValue] = useState(''); + const [autoExpandParent, setAutoExpandParent] = useState(true); + + const onExpand = (newExpandedKeys) => { + setExpandedKeys(newExpandedKeys); + setAutoExpandParent(false); + }; + + const onChange = (e) => { + const { value } = e.target; + const newExpandedKeys = dataList + .map((item) => { + if (item.title.indexOf(value) > -1) { + return getParentKey(item.key, defaultData); + } + + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + setExpandedKeys(newExpandedKeys); + setSearchValue(value); + setAutoExpandParent(true); + }; + + const treeData = useMemo(() => { + const loop = (data) => + data.map((item) => { + const strTitle = item.title; + const index = strTitle.indexOf(searchValue); + const beforeStr = strTitle.substring(0, index); + const afterStr = strTitle.slice(index + searchValue.length); + const title = + index > -1 ? ( + + {beforeStr} + {searchValue} + {afterStr} + + ) : ( + {strTitle} + ); + + if (item.children) { + return { + title, + key: item.key, + children: loop(item.children), + }; + } + + return { + title, + key: item.key, + }; + }); + + return loop(defaultData); + }, [searchValue]); + return ( +
+ +
+
+ + +
+ +
+
+
+ ); +}; + +export default Left; \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/footer/operation/right.js b/web/client/src/sections/quanju/containers/footer/operation/right.js new file mode 100644 index 00000000..fe140e63 --- /dev/null +++ b/web/client/src/sections/quanju/containers/footer/operation/right.js @@ -0,0 +1,9 @@ +import React from 'react' + +const Right = () => { + return ( +
555555555 +
+ ) +} +export default Right \ No newline at end of file diff --git a/web/client/src/sections/quanju/containers/public/module.js b/web/client/src/sections/quanju/containers/public/module.js index 8a3af285..e3aaa454 100644 --- a/web/client/src/sections/quanju/containers/public/module.js +++ b/web/client/src/sections/quanju/containers/public/module.js @@ -3,7 +3,7 @@ import "./font.css" import "./left.less" const Module = (props) => { - const { style, children, title, hualun } = props + const { style, children, title, hualun,customize } = props return ( <>
@@ -13,7 +13,7 @@ const Module = (props) => { {title || []}
-
+
{children}
diff --git a/web/client/src/sections/quanju/nav-item.js b/web/client/src/sections/quanju/nav-item.js index 74bdd2a2..63fc92d6 100644 --- a/web/client/src/sections/quanju/nav-item.js +++ b/web/client/src/sections/quanju/nav-item.js @@ -7,10 +7,11 @@ const SubMenu = Menu.SubMenu; export function getNavItem(user, dispatch) { return ( - } title={'举个栗子'}> - - 举个棒子2 - - + // } title={'举个栗子'}> + // + // 举个棒子2 + // + // + <> ); } \ No newline at end of file diff --git a/web/client/src/utils/webapi.js b/web/client/src/utils/webapi.js index 4cd08c87..8cbf04dc 100644 --- a/web/client/src/utils/webapi.js +++ b/web/client/src/utils/webapi.js @@ -42,15 +42,26 @@ export const ApiTable = { getOperaTional: 'vehicle', getSpecificVehicle: 'vehicle/specific', getHouseholds: 'vehicle/business', - //道路管理 getRoadway: 'road', //桥梁管理 getBridge: 'bridge', //工程数据 getProject: 'project', + //道路统计 + getBgroadstatistics: "build/road_state", + + //治超监测点处理数据 + getzhichaomanager: 'manage/overspeed/processed', + + //获取治超详情数据 + getzhichaodetail: '/manage/overspeed' }; + + + + export const RouteTable = { apiRoot: '/api/root', fileUpload: '/_upload/new', diff --git a/web/readme.md b/web/readme.md index 5b89376a..5b60bd50 100644 --- a/web/readme.md +++ b/web/readme.md @@ -251,4 +251,4 @@ 所以在 client/src/themes/xx.json 中的中可以配置想变换的主题变量,变量的获取可以通过查看 antd、antdPro 的源码,然后在 color 中处理; ## 一些考量 -1. 文件上传,如需保存在api所在服务器,可以在api使用 @fs/attachment 包配合 client/src/component/Upload 使用,Upload 组件已经完美兼容该包的使用; \ No newline at end of file +1. 文件上传,如需保存在api所在服务器,可以在api使用 @fs/attachment 包配合 client/src/component/Upload 使用,Upload 组件已经完美兼容该包的使用; \ No newline at end of file