From 55c778674bf7389d9124e5a910216f0e19bdc754 Mon Sep 17 00:00:00 2001 From: wenlele Date: Fri, 4 Aug 2023 19:25:34 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=81=93=E8=B7=AF=E9=9A=90=E6=82=A3?= =?UTF-8?q?=E6=8E=92=E6=9F=A5=E6=B2=BB=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/.vscode/launch.json | 3 +- .../quanju/containers/footer/guanli/index.js | 102 ++++++++++++------ 2 files changed, 72 insertions(+), 33 deletions(-) diff --git a/api/.vscode/launch.json b/api/.vscode/launch.json index 45edb9a6..118cef79 100644 --- a/api/.vscode/launch.json +++ b/api/.vscode/launch.json @@ -15,7 +15,8 @@ "args": [ "-p 13400", "-f http://localhost:13400", - "-g postgres://FashionAdmin:123456@10.8.16.184:5432/sihaogonglu", + // "-g postgres://FashionAdmin:123456@10.8.16.184:5432/sihaogonglu", + "-g postgres://postgres:123@10.8.30.32:5432/highways4good", // "-g postgres://FashionAdmin:123456@10.8.30.156:5432/highway4goodn0728", "--qnak XuDgkao6cL0HidoMAPnA5OB10Mc_Ew08mpIfRJK5", "--qnsk yewcieZLzKZuDfig0wLZ9if9jKp2P_1jd3CMJPSa", 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 35507d0c..3e42faf5 100644 --- a/web/client/src/sections/quanju/containers/footer/guanli/index.js +++ b/web/client/src/sections/quanju/containers/footer/guanli/index.js @@ -1,18 +1,20 @@ import React, { useEffect, useState } from 'react'; import { connect } from 'react-redux'; -import { Carousel, Tooltip } from 'antd' +import { Carousel, Tooltip, Image } from 'antd' import AutoRollComponent from '../build/AutoRollComponent' import VideoMonitor from '../build/videoMonitor' import Module from '../../public/module' +import moment from 'moment' import LeftItem from './LeftItem' import { getjiandmanage, getjiandetail } from '../../../actions/example' +import { getRoadadministration } from '../../../../fillion/actions/luzheng' import './style.less' import NoData from '../../public/noData'; const Guanli = (props) => { const { dispatch } = props const [leftDatas, setleftDatas] = useState([]) const [rightDatas, setrightDatas] = useState([]) - const [rightitemlist, setrightitemlist] = useState() + const [rightitemlist, setrightitemlist] = useState([]) const requestleftDatas = async () => { const res = await dispatch(getjiandmanage()) res.payload.data?.sort((a, b) => { @@ -50,48 +52,80 @@ const Guanli = (props) => { // console.log(d2,'完美') // console.log(res.payload.data,'嘿嘿嘿') } + + const roadManagement = async () => { + await dispatch(getRoadadministration({})).then(res => { + if (res.success) { + setrightitemlist(res.payload.data?.rows || []) + } + }) + + + + } + + + useEffect(() => { requestleftDatas(); - requestRightDatas() + // requestRightDatas() + roadManagement() }, []) - // let datalist = newArry(30) - // datalist.fill({licensePlate:"赣A44454",overrunRate:"30%",fine:"200元",processingTime:"2020年4月1日"}) - // const content = ( - // ); const renderContent = () => { - // console.log(rightitemlist); + return
- {rightitemlist && rightitemlist.length !== 0 ? rightitemlist?.map(({ id, licensePlate, overrunRate, fine, processingTime, deductPoints, nameOfInspectionPoint }, index) => { + {rightitemlist && rightitemlist.length !== 0 ? rightitemlist?.map(({ enforcementdate, enforcementreslt, roadname, picfile }, index) => { if (index < 120) { return
-
+
- {/* */} -
- -

{overrunRate ? overrunRate.toFixed(2) : 0}%{/* {item.overrunRate ? item.overrunRate + "%" : "--"} */}

-

超限

-
-
-

车牌号{licensePlate}{/* {item.licensePlate} */}

-

检测点{nameOfInspectionPoint}

-

处罚{deductPoints ? `-${deductPoints}分` : ""}和-{fine}{fine ? "元" : ""}{/* {item.deductPoints ? "-" + item.deductPoints + "分" : ""}{item.deductPoints && item.fine ? "和" : ""}{item.fine ? "-" + item.fine + "元" : ""}{item.deductPoints || item.fine ? "" : "--"} */}

-

日期{processingTime}{/* {item.processingTime ? item.processingTime : "--"} */}

+ {picfile?.length > 0 ? + {picfile?.map(v => )} + + : + } + + +
+

+ 执法日期: + {enforcementdate && moment(enforcementdate).format("YYYY-MM-DD") || "--"} +

+

+ 执法道路: + {roadname} +

+

+ 执法成果: + {enforcementreslt}

+
} placement="leftTop" - overlayStyle={{ minWidth: 400, minHeight: 212, padding: 0, margin: 0, backgroundImage: `url(../../../../../assets/images/leadership/beijinglan.png)` }} + overlayStyle={{ minWidth: 500, minHeight: 200, paddingTop: 10, margin: 0, backgroundImage: `url(../../../../../assets/images/leadership/beijinglan.png)` }} overlayClassName='popover' > -
- {licensePlate} - {overrunRate}% - {deductPoints ? `-${deductPoints}分` : ""}和-{fine}{fine ? "元" : ""} - {processingTime} +
+
{enforcementdate && moment(enforcementdate).format("YYYY-MM-DD") || "--"}
+
{enforcementreslt}
@@ -121,22 +155,26 @@ const Guanli = (props) => {
- -
+ + {/*
已处理 {rightDatas?.processed || 0} -
-
+
*/} + {/*
车牌号 超限 处罚 处理日期 +
*/} + o
+
执法日期
+
执法成果
{rightitemlist && rightitemlist.length !== 0 ? : } + divHeight={"100%"} divId={"chart-overview-deviceList"} /> : }
From 3a21f200178ad3763658d2a6bf9b168c48965c76 Mon Sep 17 00:00:00 2001 From: liujiangyong Date: Fri, 4 Aug 2023 19:25:37 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F-=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E4=BA=8B=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/lib/controllers/report/index.js | 21 +-- api/app/lib/models/report.js | 12 +- scripts/1.3.1/schema/4.update_report.sql | 6 + weapp/src/packages/patrol/index.jsx | 217 ++++++++++++++++++----- weapp/src/packages/patrol/index.scss | 18 ++ weapp/src/packages/patrolView/index.jsx | 9 +- weapp/src/services/api.js | 10 ++ 7 files changed, 231 insertions(+), 62 deletions(-) create mode 100644 scripts/1.3.1/schema/4.update_report.sql diff --git a/api/app/lib/controllers/report/index.js b/api/app/lib/controllers/report/index.js index c79b692d..1c2f4732 100644 --- a/api/app/lib/controllers/report/index.js +++ b/api/app/lib/controllers/report/index.js @@ -2,7 +2,7 @@ const { QueryTypes } = require('sequelize'); const moment = require('moment'); -async function reportList (ctx) { +async function reportList(ctx) { try { const models = ctx.fs.dc.models; const { limit, page, startTime, endTime, keyword, userId, reportType, isTop, asc, projectType, handleState = '', performerId = '', codeRoad } = ctx.query @@ -95,7 +95,8 @@ async function reportList (ctx) { findOption.where.performerId = { $in: performerIds } } if (handleState) { - findOption.where.handleState = handleState + let handleStates = handleState.split(',') + findOption.where.handleState = { $in: handleStates } } if (codeRoad) { findOption.where.codeRoad = codeRoad @@ -146,7 +147,7 @@ async function reportList (ctx) { } } -async function reportPosition (ctx) { +async function reportPosition(ctx) { try { const models = ctx.fs.dc.models; const { startTime, endTime, userId, reportType } = ctx.query @@ -196,7 +197,7 @@ async function reportPosition (ctx) { } } -async function reportDetail (ctx) { +async function reportDetail(ctx) { try { const models = ctx.fs.dc.models; const { reportId } = ctx.params @@ -218,7 +219,7 @@ async function reportDetail (ctx) { } } -async function reportHandle (ctx) { +async function reportHandle(ctx) { try { const { models } = ctx.fs.dc; @@ -248,7 +249,7 @@ async function reportHandle (ctx) { } } -async function createReport (ctx) { +async function createReport(ctx) { try { const { userId } = ctx.fs.api const models = ctx.fs.dc.models; @@ -270,7 +271,7 @@ async function createReport (ctx) { } } -async function deleteReport (ctx) { +async function deleteReport(ctx) { try { const models = ctx.fs.dc.models; const { reportId } = ctx.params; @@ -293,7 +294,7 @@ async function deleteReport (ctx) { // TODO 小程序填写道路名称的时候的道路筛选 是一起都返回 还是不断传关键字搜索返回 -async function spotPrepare (ctx) { +async function spotPrepare(ctx) { try { const { models } = ctx.fs.dc; const sequelize = ctx.fs.dc.orm; @@ -365,7 +366,7 @@ async function spotPrepare (ctx) { } } -async function spotCheck (ctx) { +async function spotCheck(ctx) { const transaction = await ctx.fs.dc.orm.transaction(); try { const { models } = ctx.fs.dc; @@ -447,7 +448,7 @@ async function spotCheck (ctx) { } } } -async function spotCheckDetail (ctx) { +async function spotCheckDetail(ctx) { const { models } = ctx.fs.dc console.log('txc1', ctx.query) const { startTime, endTime } = ctx.query diff --git a/api/app/lib/models/report.js b/api/app/lib/models/report.js index 0e6b827d..adb7d806 100644 --- a/api/app/lib/models/report.js +++ b/api/app/lib/models/report.js @@ -447,7 +447,17 @@ module.exports = dc => { primaryKey: false, field: "handle_opinions", autoIncrement: false - } + }, + handleAdvice: { + index: 6, + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: '管理员处理意见', + primaryKey: false, + field: "handle_advice", + autoIncrement: false + }, }, { tableName: "report", comment: "", diff --git a/scripts/1.3.1/schema/4.update_report.sql b/scripts/1.3.1/schema/4.update_report.sql new file mode 100644 index 00000000..eefe3537 --- /dev/null +++ b/scripts/1.3.1/schema/4.update_report.sql @@ -0,0 +1,6 @@ +ALTER TABLE "public"."report" + ADD COLUMN "handle_advice" varchar(1024); + +COMMENT ON COLUMN "public"."report"."handle_state" IS '待处理 / 已指派 / 已处理 / 不处理'; + +COMMENT ON COLUMN "public"."report"."handle_advice" IS '管理员处理意见'; \ No newline at end of file diff --git a/weapp/src/packages/patrol/index.jsx b/weapp/src/packages/patrol/index.jsx index 44276273..1cfbe228 100644 --- a/weapp/src/packages/patrol/index.jsx +++ b/weapp/src/packages/patrol/index.jsx @@ -8,7 +8,7 @@ import VideoUpload from '../../components/uploads' import request from '@/services/request'; import environment from '../../config'; import { getState } from '../../store/globalState'; -import { postReport, getReportList, getReportDetail, delReport, getRoadSection, postImage, getProject, postHandle } from '@/services/api'; +import { postReport, getReportList, getReportDetail, delReport, getRoadSection, postImage, getProject, postHandle, getAllDepUsers, getUsers } from '@/services/api'; import './index.scss'; import arrowIcon from '../../static/img/patrol/arrow-down.svg'; import dayjs from 'dayjs'; @@ -25,6 +25,7 @@ const Index = () => { const isPatrol = kind === 'patrol' || kind == 'conserve' ? true : false const isRoad = kind === 'road' ? true : false const isAnomaly = kind === 'anomaly' ? true : false + const noDel = wait === 'wait' || handle === 'handle' const [reportType, setReportType] = useState(kind || 'patrol') // 上报类型 const [projectType, setProjectType] = useState('') // 工程类型 @@ -60,7 +61,7 @@ const Index = () => { const [handleId, setHandleId] = useState([]) const [video, setVideo] = useState('') const [videoqn, setVideoqn] = useState([]) - const [handleType, setHandleType] = useState('') + const [handleState, setHandleState] = useState('') const [roadCodeHead, setRoadCodeHead] = useState('X') const [roadCodeEnd, setRoadCodeEnd] = useState('') @@ -201,6 +202,12 @@ const Index = () => { const [otherDescription, setOtherDescription] = useState('') // 其他养护内容 const [isBeforeReport, setIsBeforeReport] = useState(false) // V1.1.0上报内容修改,查看时根据时间判断展示逻辑) + const [isAppoint, setIsAppoint] = useState(true) // 指派 / 不处理 + const [allDepUsers, setAllDepUsers] = useState([]) // 所有部门用户列表 + const [userList, setUserList] = useState([]) // 所有用户列表 + const [appointUser, setAppointUser] = useState(null) // 责任人在userList的index + const [handleAdvice, setHandleAdvice] = useState('') // 处理意见 + const prjType = isAnomaly ? [ @@ -282,7 +289,7 @@ const Index = () => { setRoadSectionEnd(data.roadSectionEnd) setAddress(data.address) setContent(data.content) - setHandleType(data.handleState) + setHandleState(data.handleState) setScenePic(data.scenePic ? data.scenePic.map(item => ({ url: imgUrl + item })) : []) setHandlePic(data.handlePic ? data.handlePic.map(item => ({ url: imgUrl + item })) : []) setConserveBeforePic(data.conserveBeforePic ? data.conserveBeforePic.map(item => ({ url: imgUrl + item })) : []) @@ -314,6 +321,9 @@ const Index = () => { }) setConserveContent(nextContent) setOtherDescription(data.otherDescription) + } else if (data.reportType === 'anomaly') { + setAppointUser(data.performerId) + setHandleAdvice(data.handleAdvice) } if (data.handleContent) { setHandleCenter(data.handleContent) @@ -401,6 +411,19 @@ const Index = () => { } }) } + if (isSuperAdmin && kind === 'anomaly') { + request.get(getAllDepUsers()).then(res => { + if (res.statusCode === 200) { + setAllDepUsers(res.data) + } + }) + request.get(getUsers()).then(res => { + if (res.statusCode === 200) { + const users = res.data.filter(u => u.phone !== 'SuperAdmin' && u.isAdmin) + setUserList(users) + } + }) + } }, []) useEffect(() => { @@ -829,19 +852,36 @@ const Index = () => { function handleOk() { if (!canReport) { return } let str = handleCenter.trim() - if (!str) { - Taro.showToast({ title: '请完善处理内容', icon: 'none' }) - return - } - if (str.length > 50) { - Taro.showToast({ title: '内容字数不能超过50', icon: 'none' }) - return + if (!isSuperAdmin) { + if (!str) { + Taro.showToast({ title: '请完善处理内容', icon: 'none' }) + return + } + if (str.length > 50) { + Taro.showToast({ title: '内容字数不能超过50', icon: 'none' }) + return + } + } else { + if (isAppoint && appointUser === null) { + Taro.showToast({ title: '请选择责任人', icon: 'none' }) + return + } } - let data = { - handleContent: str, - handlePic: handlePicPn, - handleState: '已处理' + let data = {} + if (isSuperAdmin) { + data = { + handleState: isAppoint ? '已指派' : '不处理', + performerId: userList[appointUser].id, + handleAdvice, + } + } else { + data = { + handleContent: str, + handlePic: handlePicPn, + handleState: '已处理' + } } + Taro.showModal({ title: '提示', content: '您要进行处理提交吗?', @@ -1399,43 +1439,122 @@ const Index = () => { } { - isView ? - isSuperAdmin && - 删除 - : - 上报 + !isPatrol && (handleState == '已处理' || wait == 'wait' || handle == 'handle') ? <> + { + isSuperAdmin && (wait === 'wait' || kind === 'handle') && + { + handleState === '待处理' ? // 管理员指派 + <> + { + setIsAppoint(e.detail.value === '指派' ? true : false) + }}> + 指派 + 不处理 + + { + isAppoint && <> + + 责任人:{appointUser !== null ? userList[appointUser]?.name : ''} + setAppointUser(Number(e.detail.value))} + > + + + +