From 6c363abce1ab6d05b90e16100bb07c9c6639c77c Mon Sep 17 00:00:00 2001 From: zhugy <zhugy@yisa.com> Date: Mon, 15 Jan 2024 15:14:22 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E6=9F=A5=E8=AF=A2=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=96=B0=E5=A2=9E=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NewEnergy/RecordsInquiry/Appointment/index.jsx | 6 + .../RecordsInquiry/Appointment/index.scss | 238 +++++++++++++++++++++ .../RecordsInquiry/Appointment/loadable.jsx | 231 ++++++++++++++++++++ .../RecordsInquiry/AppointmentRecord/index.jsx | 6 - .../RecordsInquiry/AppointmentRecord/index.scss | 238 --------------------- .../RecordsInquiry/AppointmentRecord/loadable.jsx | 173 --------------- .../NewEnergy/RecordsInquiry/Charge/index.jsx | 6 + .../NewEnergy/RecordsInquiry/Charge/index.scss | 238 +++++++++++++++++++++ .../NewEnergy/RecordsInquiry/Charge/loadable.jsx | 231 ++++++++++++++++++++ .../NewEnergy/RecordsInquiry/Violation/index.jsx | 6 + .../NewEnergy/RecordsInquiry/Violation/index.scss | 238 +++++++++++++++++++++ .../RecordsInquiry/Violation/loadable.jsx | 231 ++++++++++++++++++++ src/pages/NewEnergy/RecordsInquiry/index.jsx | 8 +- src/router/router.config.js | 18 +- 14 files changed, 1446 insertions(+), 422 deletions(-) create mode 100644 src/pages/NewEnergy/RecordsInquiry/Appointment/index.jsx create mode 100644 src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss create mode 100644 src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx delete mode 100644 src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.jsx delete mode 100644 src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.scss delete mode 100644 src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/loadable.jsx create mode 100644 src/pages/NewEnergy/RecordsInquiry/Charge/index.jsx create mode 100644 src/pages/NewEnergy/RecordsInquiry/Charge/index.scss create mode 100644 src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx create mode 100644 src/pages/NewEnergy/RecordsInquiry/Violation/index.jsx create mode 100644 src/pages/NewEnergy/RecordsInquiry/Violation/index.scss create mode 100644 src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx diff --git a/src/pages/NewEnergy/RecordsInquiry/Appointment/index.jsx b/src/pages/NewEnergy/RecordsInquiry/Appointment/index.jsx new file mode 100644 index 0000000..d1dc1c2 --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Appointment/index.jsx @@ -0,0 +1,6 @@ +import React from "react" +import loadable from "@loadable/component" +import { LoadingImg } from "@/components" + +const Appointment = loadable(() => import("./loadable")) +export default (pros) => <Appointment {...pros} fallback={<LoadingImg />} /> \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss b/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss new file mode 100644 index 0000000..9a8202a --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss @@ -0,0 +1,238 @@ +@import "@/assets/css/mixin.scss"; +$color-container-bg: var(--color-container-bg); +$color-user-list-bg: var(--color-user-list-bg); +$color-text: var(--color-text); +$color-primary: var(--color-primary); + +.ant-tabs { + margin-bottom: 16px; + + .ant-tabs-nav { + margin-bottom: 0 !important; + + &::before { + border-bottom: 1px solid var(--color-card-line) !important; + } + } + + .ant-tabs-nav-wrap { + width: 100%; + box-sizing: content-box; + + .ant-tabs-nav-list { + width: 340px; + + .ant-tabs-ink-bar { + height: 3px; + background-color: #00ccff; + } + + .ant-tabs-tab { + flex: 1; + width: 100%; + display: flex; + justify-content: center; + padding-bottom: 10px; + text-align: center; + cursor: pointer; + font-size: 14px !important; + font-family: MicrosoftYaHei; + text-align: center; + letter-spacing: 0.7px; + } + + .ant-tabs-tab-active { + div { + color: #00ccff; + } + } + } + } +} + +.ant-input::-webkit-input-placeholder { + color: var(--color-placeholder); +} + +.ant-input::-moz-placeholder { + color: var(--color-placeholder); +} +.right-list .ant-btn-primary { + width: 68px; + height: 30px; + background: linear-gradient(180deg, #3aa9ff, #59b7ff); + border-radius: 4px; +} +.ant-input:-ms-input-placeholder { + color: var(--color-placeholder); +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-thead th { + background-color: #616b83 !important; +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody td { + background-color: #3e4557 !important; +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody tr:nth-child(even) td { + background-color: #3e4557 !important; +} +.ant-input::placeholder { + color: var(--color-placeholder); +} + +.ant-select-selection-placeholder { + color: var(--color-placeholder); +} + +.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector { + background: var(--color-input-disabled-bg); + color: var(--color-placeholder); +} + +.ant-select-disabled .ant-select-arrow { + color: var(--color-placeholder); +} + +.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector { + background-color: var(--color-input-disabled-bg); + color: var(--color-input-disabled-color); + cursor: not-allowed; +} + +.ant-select-multiple { + .ant-select-selector { + .ant-select-selection-item { + background-color: var(--color-bg-body); + border-color: var(--color-border); + + .ant-select-selection-item-remove { + color: var(--color-text); + } + } + } +} + +.ant-select-arrow { + color: var(--color-text); +} + +.ant-select-clear { + border-radius: 50%; +} + +.ant-select-dropdown-menu { + background-color: var(--color-input-bg); + + .ant-select-dropdown-menu-item { + color: var(--color-text); + + &.ant-select-dropdown-menu-item-active { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + + &.ant-select-dropdown-menu-item-selected { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + + &:hover { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + } +} + +.ant-select-selector { + background-color: var(--color-search-list-item-bg) !important; + box-shadow: none !important; + border-radius: 4px; + color: var(--color-search-list-item-value); + border-color: var(--color-search-list-item-bd) !important; +} + +.ant-select-selection { + background-color: var(--color-input-bg); + box-shadow: none; + color: var(--color-text); + // border-color:var(--checkable-tag-border); +} + +.ant-form-horizontal .ant-form-item-label { + label { + display: inline-block; + word-wrap: break-word; + white-space: normal; + } +} + +.ant-picker { + width: 100%; + background-color: var(--color-search-list-item-bg); + border-color: var(--color-border); +} + +// .yisa-table { +// width: 100%; + +// .ant-table-thead { +// th { +// background: var(--color-table-header-bg) !important; +// } +// } + +// .ant-table-tbody { +// td { +// background: var(--color-table-body-bg) !important; +// border-bottom-color: var(--color-table-border-bottom-color); +// } + +// tr:nth-child(even) { +// td { +// background: var(--color-table-body-bg-nth-child-even) !important; +// } +// } + +// tr:nth-child(odd) { +// td { +// background: var(--color-table-body-bg-nth-child-even) !important; +// } +// } +// } +// } +.totalModal{ + .ant-modal-footer{ + display: none; + } + position: absolute; + top: 40px; + right: 174px; +} +.ltc-item-img { + width: 390px; + height: 300px; + border: 1px solid; + background: #6565656b; + margin-right: 20px !important; + img { + height: 295px; + width: 387px; + // object-fit: contain; + } +} +.hanleHistoyModal{ + max-height: 700px; + overflow: auto; +} +.hanleHistoyModal::-webkit-scrollbar { + width: 5px; +} +.hanleHistoyModal::-webkit-scrollbar-thumb { + background-color: #9da2ab; + border-radius: 10px; +} +.modal-img{ + img{ + width: 200px; + height: 200px; + } +} \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx new file mode 100644 index 0000000..febe305 --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx @@ -0,0 +1,231 @@ +import React, { useState, useRef, useEffect } from "react"; +import { + message, + Pagination, + Table, + Space, + Modal, + Button, + Tabs, + Descriptions, + Input, + Steps, + Select, + Image, + Timeline, + Popover +} from "antd"; +import { dictionary } from "@/config/common"; +import ajax from "@/services"; +import { TableModule } from "@/components"; +import "./index.scss"; + +const { TextArea } = Input; + +function Appointment() { + // 详情弹窗 + const [detailVisible, setDetailVisible] = useState(false); + // 列表数据 + const [tableData, setTableData] = useState([]); + // 数据总数 + const [total, setTotal] = useState(0); + // 详情数据 + const [detailData, setDetailData] = useState({}); + // 初始搜索条件 + const initFormData = { + operator: "0", + rule_name: "", + }; + + const columns = [ + { + title: "用户手机号", + dataIndex: "operator", + key: "operator", + align: "center", + }, + { + title: "车牌号", + dataIndex: "plate", + key: "plate", + align: "center", + }, + { + title: "充电站", + dataIndex: "plate_color", + key: "plate_color", + align: "center", + }, + { + title: "商户名称", + dataIndex: "berth_id", + key: "berth_id", + align: "center", + }, + { + title: "降预约开始时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "预约截至时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "缴纳预约费用金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "缴费时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "订单状态", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "订单完结时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "预约费用退款金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "顶动感实收金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "操作", + dataIndex: "operation", + key: "operation", + align: "center", + fixed: "right", + width: 100, + render: (text, record, index) => { + return ( + <> + <Button type="primary" onClick={() => openModal(index, record)}> + 详情 + </Button> + </> + ) + + }, + }, + ]; + + const formSearch = [ + { + name: "phone", + type: "Input", + label: "用户手机号", + placeholder: "请输入用户手机号", + }, + { + name: "plate", + type: "Input", + label: "车牌号", + placeholder: "请输入车牌号", + }, + { + name: "charging", + type: "Input", + label: "充电站", + placeholder: "请输入充电站", + }, + { + name: "operator", + type: "Select", + label: "商户名称", + defaultValue: "0", + placeholder: "请选择商户名称", + }, + { + name: "timeStart", + type: "DateRangePicker", + label: "预约开始时间", + }, + { + name: "timeEnd", + type: "DateRangePicker", + label: "订单完结时间", + }, + ]; + + // 打开弹窗 + const openModal = (index, record) => { + setDetailData(record) + setDetailVisible(true); + } + + // 检索 + const search = (params) => { + ajax.getParkingList(params).then((res) => { + if (res.status === 20000) { + setTableData(res.data.list); + setTotal(res.data.total); + } else { + message.error(res.message) + } + }); + } + + const handelAdd = () => { + setDetailVisible(true) + } + + return ( + <> + <TableModule + showSerial={true} + isExport={false} + diyButton={ + <Button + type="primary" + onClick={handelAdd} + > + 新增 + </Button> + } + columns={columns} + tableData={tableData} + formSearch={formSearch} + pagename="预约订单" + pageName={'Appointment'} + initFormData={initFormData} + total={total} + search={search} + exportUrl="/api/bpm/record/get_record_export" + /> + <Modal + open={detailVisible} + width={800} + className="totalModal" + onCancel={() => { + setDetailVisible(false); + }} + destroyOnClose + > + + </Modal> + </> + ); +} + +export default Appointment; diff --git a/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.jsx b/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.jsx deleted file mode 100644 index d0d293b..0000000 --- a/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from "react" -import loadable from "@loadable/component" -import { LoadingImg } from "@/components" - -const AppointmentRecord = loadable(() => import("./loadable")) -export default (pros) => <AppointmentRecord {...pros} fallback={<LoadingImg />} /> \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.scss b/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.scss deleted file mode 100644 index 9a8202a..0000000 --- a/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/index.scss +++ /dev/null @@ -1,238 +0,0 @@ -@import "@/assets/css/mixin.scss"; -$color-container-bg: var(--color-container-bg); -$color-user-list-bg: var(--color-user-list-bg); -$color-text: var(--color-text); -$color-primary: var(--color-primary); - -.ant-tabs { - margin-bottom: 16px; - - .ant-tabs-nav { - margin-bottom: 0 !important; - - &::before { - border-bottom: 1px solid var(--color-card-line) !important; - } - } - - .ant-tabs-nav-wrap { - width: 100%; - box-sizing: content-box; - - .ant-tabs-nav-list { - width: 340px; - - .ant-tabs-ink-bar { - height: 3px; - background-color: #00ccff; - } - - .ant-tabs-tab { - flex: 1; - width: 100%; - display: flex; - justify-content: center; - padding-bottom: 10px; - text-align: center; - cursor: pointer; - font-size: 14px !important; - font-family: MicrosoftYaHei; - text-align: center; - letter-spacing: 0.7px; - } - - .ant-tabs-tab-active { - div { - color: #00ccff; - } - } - } - } -} - -.ant-input::-webkit-input-placeholder { - color: var(--color-placeholder); -} - -.ant-input::-moz-placeholder { - color: var(--color-placeholder); -} -.right-list .ant-btn-primary { - width: 68px; - height: 30px; - background: linear-gradient(180deg, #3aa9ff, #59b7ff); - border-radius: 4px; -} -.ant-input:-ms-input-placeholder { - color: var(--color-placeholder); -} -.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-thead th { - background-color: #616b83 !important; -} -.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody td { - background-color: #3e4557 !important; -} -.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody tr:nth-child(even) td { - background-color: #3e4557 !important; -} -.ant-input::placeholder { - color: var(--color-placeholder); -} - -.ant-select-selection-placeholder { - color: var(--color-placeholder); -} - -.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector { - background: var(--color-input-disabled-bg); - color: var(--color-placeholder); -} - -.ant-select-disabled .ant-select-arrow { - color: var(--color-placeholder); -} - -.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector { - background-color: var(--color-input-disabled-bg); - color: var(--color-input-disabled-color); - cursor: not-allowed; -} - -.ant-select-multiple { - .ant-select-selector { - .ant-select-selection-item { - background-color: var(--color-bg-body); - border-color: var(--color-border); - - .ant-select-selection-item-remove { - color: var(--color-text); - } - } - } -} - -.ant-select-arrow { - color: var(--color-text); -} - -.ant-select-clear { - border-radius: 50%; -} - -.ant-select-dropdown-menu { - background-color: var(--color-input-bg); - - .ant-select-dropdown-menu-item { - color: var(--color-text); - - &.ant-select-dropdown-menu-item-active { - color: #fff; - // background-color: var(--radio-button-bg-checked); - } - - &.ant-select-dropdown-menu-item-selected { - color: #fff; - // background-color: var(--radio-button-bg-checked); - } - - &:hover { - color: #fff; - // background-color: var(--radio-button-bg-checked); - } - } -} - -.ant-select-selector { - background-color: var(--color-search-list-item-bg) !important; - box-shadow: none !important; - border-radius: 4px; - color: var(--color-search-list-item-value); - border-color: var(--color-search-list-item-bd) !important; -} - -.ant-select-selection { - background-color: var(--color-input-bg); - box-shadow: none; - color: var(--color-text); - // border-color:var(--checkable-tag-border); -} - -.ant-form-horizontal .ant-form-item-label { - label { - display: inline-block; - word-wrap: break-word; - white-space: normal; - } -} - -.ant-picker { - width: 100%; - background-color: var(--color-search-list-item-bg); - border-color: var(--color-border); -} - -// .yisa-table { -// width: 100%; - -// .ant-table-thead { -// th { -// background: var(--color-table-header-bg) !important; -// } -// } - -// .ant-table-tbody { -// td { -// background: var(--color-table-body-bg) !important; -// border-bottom-color: var(--color-table-border-bottom-color); -// } - -// tr:nth-child(even) { -// td { -// background: var(--color-table-body-bg-nth-child-even) !important; -// } -// } - -// tr:nth-child(odd) { -// td { -// background: var(--color-table-body-bg-nth-child-even) !important; -// } -// } -// } -// } -.totalModal{ - .ant-modal-footer{ - display: none; - } - position: absolute; - top: 40px; - right: 174px; -} -.ltc-item-img { - width: 390px; - height: 300px; - border: 1px solid; - background: #6565656b; - margin-right: 20px !important; - img { - height: 295px; - width: 387px; - // object-fit: contain; - } -} -.hanleHistoyModal{ - max-height: 700px; - overflow: auto; -} -.hanleHistoyModal::-webkit-scrollbar { - width: 5px; -} -.hanleHistoyModal::-webkit-scrollbar-thumb { - background-color: #9da2ab; - border-radius: 10px; -} -.modal-img{ - img{ - width: 200px; - height: 200px; - } -} \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/loadable.jsx deleted file mode 100644 index f26357d..0000000 --- a/src/pages/NewEnergy/RecordsInquiry/AppointmentRecord/loadable.jsx +++ /dev/null @@ -1,173 +0,0 @@ -import React, { useState, useRef, useEffect } from "react"; -import { - message, - Pagination, - Table, - Space, - Modal, - Button, - Tabs, - Descriptions, - Input, - Steps, - Select, - Image, - Timeline, - Popover -} from "antd"; -import { dictionary } from "@/config/common"; -import ajax from "@/services"; -import { TableModule } from "@/components"; -import "./index.scss"; - -const { TextArea } = Input; - -function AppointmentRecord() { - // 详情弹窗 - const [detailVisible, setDetailVisible] = useState(false); - // 列表数据 - const [tableData, setTableData] = useState([]); - // 数据总数 - const [total, setTotal] = useState(0); - // 详情数据 - const [detailData, setDetailData] = useState({}); - // 初始搜索条件 - const initFormData = { - operator: "0", - rule_name: "", - }; - - const columns = [ - { - title: "运营商名称", - dataIndex: "operator", - key: "operator", - align: "center", - }, - { - title: "规则名称", - dataIndex: "plate", - key: "plate", - align: "center", - }, - { - title: "规则编码", - dataIndex: "plate_color", - key: "plate_color", - align: "center", - }, - { - title: "创建人", - dataIndex: "berth_id", - key: "berth_id", - width: 100, - align: "center", - }, - { - title: "创建时间", - dataIndex: "in_time", - key: "in_time", - align: "center", - }, - { - title: "操作", - dataIndex: "operation", - key: "operation", - align: "center", - fixed: "right", - width: 100, - render: (text, record, index) => { - return ( - <> - <Button type="primary" onClick={() => openModal(index, record)}> - 详情 - </Button> - </> - ) - - }, - }, - ]; - - const formSearch = [ - { - name: "operator", - type: "Select", - label: "商户名称", - defaultValue: "0", - placeholder: "请选择商户名称", - }, - { - name: "rule_name", - type: "Input", - label: "规则名称", - placeholder: "请输入出场收费员", - }, - { - name: "timePeriod", - type: "RangePicker", - label: "时间段", - }, - ]; - - // 打开弹窗 - const openModal = (index, record) => { - setDetailData(record) - setDetailVisible(true); - } - - // 检索 - const search = (params) => { - ajax.getParkingList(params).then((res) => { - if (res.status === 20000) { - setTableData(res.data.list); - setTotal(res.data.total); - } else { - message.error(res.message) - } - }); - } - - const handelAdd = () => { - setDetailVisible(true) - } - - return ( - <> - <TableModule - showSerial={true} - isExport={false} - diyButton={ - <Button - type="primary" - onClick={handelAdd} - > - 新增 - </Button> - } - columns={columns} - tableData={tableData} - formSearch={formSearch} - pagename="停车记录查询" - pageName={'AppointmentRecord'} - initFormData={initFormData} - total={total} - search={search} - exportUrl="/api/bpm/record/get_record_export" - /> - <Modal - open={detailVisible} - width={1500} - className="totalModal" - onCancel={() => { - setDetailVisible(false); - }} - destroyOnClose - > - - </Modal> - </> - ); -} - -export default AppointmentRecord; diff --git a/src/pages/NewEnergy/RecordsInquiry/Charge/index.jsx b/src/pages/NewEnergy/RecordsInquiry/Charge/index.jsx new file mode 100644 index 0000000..fe31772 --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Charge/index.jsx @@ -0,0 +1,6 @@ +import React from "react" +import loadable from "@loadable/component" +import { LoadingImg } from "@/components" + +const Charge = loadable(() => import("./loadable")) +export default (pros) => <Charge {...pros} fallback={<LoadingImg />} /> \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss b/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss new file mode 100644 index 0000000..9a8202a --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss @@ -0,0 +1,238 @@ +@import "@/assets/css/mixin.scss"; +$color-container-bg: var(--color-container-bg); +$color-user-list-bg: var(--color-user-list-bg); +$color-text: var(--color-text); +$color-primary: var(--color-primary); + +.ant-tabs { + margin-bottom: 16px; + + .ant-tabs-nav { + margin-bottom: 0 !important; + + &::before { + border-bottom: 1px solid var(--color-card-line) !important; + } + } + + .ant-tabs-nav-wrap { + width: 100%; + box-sizing: content-box; + + .ant-tabs-nav-list { + width: 340px; + + .ant-tabs-ink-bar { + height: 3px; + background-color: #00ccff; + } + + .ant-tabs-tab { + flex: 1; + width: 100%; + display: flex; + justify-content: center; + padding-bottom: 10px; + text-align: center; + cursor: pointer; + font-size: 14px !important; + font-family: MicrosoftYaHei; + text-align: center; + letter-spacing: 0.7px; + } + + .ant-tabs-tab-active { + div { + color: #00ccff; + } + } + } + } +} + +.ant-input::-webkit-input-placeholder { + color: var(--color-placeholder); +} + +.ant-input::-moz-placeholder { + color: var(--color-placeholder); +} +.right-list .ant-btn-primary { + width: 68px; + height: 30px; + background: linear-gradient(180deg, #3aa9ff, #59b7ff); + border-radius: 4px; +} +.ant-input:-ms-input-placeholder { + color: var(--color-placeholder); +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-thead th { + background-color: #616b83 !important; +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody td { + background-color: #3e4557 !important; +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody tr:nth-child(even) td { + background-color: #3e4557 !important; +} +.ant-input::placeholder { + color: var(--color-placeholder); +} + +.ant-select-selection-placeholder { + color: var(--color-placeholder); +} + +.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector { + background: var(--color-input-disabled-bg); + color: var(--color-placeholder); +} + +.ant-select-disabled .ant-select-arrow { + color: var(--color-placeholder); +} + +.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector { + background-color: var(--color-input-disabled-bg); + color: var(--color-input-disabled-color); + cursor: not-allowed; +} + +.ant-select-multiple { + .ant-select-selector { + .ant-select-selection-item { + background-color: var(--color-bg-body); + border-color: var(--color-border); + + .ant-select-selection-item-remove { + color: var(--color-text); + } + } + } +} + +.ant-select-arrow { + color: var(--color-text); +} + +.ant-select-clear { + border-radius: 50%; +} + +.ant-select-dropdown-menu { + background-color: var(--color-input-bg); + + .ant-select-dropdown-menu-item { + color: var(--color-text); + + &.ant-select-dropdown-menu-item-active { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + + &.ant-select-dropdown-menu-item-selected { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + + &:hover { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + } +} + +.ant-select-selector { + background-color: var(--color-search-list-item-bg) !important; + box-shadow: none !important; + border-radius: 4px; + color: var(--color-search-list-item-value); + border-color: var(--color-search-list-item-bd) !important; +} + +.ant-select-selection { + background-color: var(--color-input-bg); + box-shadow: none; + color: var(--color-text); + // border-color:var(--checkable-tag-border); +} + +.ant-form-horizontal .ant-form-item-label { + label { + display: inline-block; + word-wrap: break-word; + white-space: normal; + } +} + +.ant-picker { + width: 100%; + background-color: var(--color-search-list-item-bg); + border-color: var(--color-border); +} + +// .yisa-table { +// width: 100%; + +// .ant-table-thead { +// th { +// background: var(--color-table-header-bg) !important; +// } +// } + +// .ant-table-tbody { +// td { +// background: var(--color-table-body-bg) !important; +// border-bottom-color: var(--color-table-border-bottom-color); +// } + +// tr:nth-child(even) { +// td { +// background: var(--color-table-body-bg-nth-child-even) !important; +// } +// } + +// tr:nth-child(odd) { +// td { +// background: var(--color-table-body-bg-nth-child-even) !important; +// } +// } +// } +// } +.totalModal{ + .ant-modal-footer{ + display: none; + } + position: absolute; + top: 40px; + right: 174px; +} +.ltc-item-img { + width: 390px; + height: 300px; + border: 1px solid; + background: #6565656b; + margin-right: 20px !important; + img { + height: 295px; + width: 387px; + // object-fit: contain; + } +} +.hanleHistoyModal{ + max-height: 700px; + overflow: auto; +} +.hanleHistoyModal::-webkit-scrollbar { + width: 5px; +} +.hanleHistoyModal::-webkit-scrollbar-thumb { + background-color: #9da2ab; + border-radius: 10px; +} +.modal-img{ + img{ + width: 200px; + height: 200px; + } +} \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx new file mode 100644 index 0000000..50650f2 --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx @@ -0,0 +1,231 @@ +import React, { useState, useRef, useEffect } from "react"; +import { + message, + Pagination, + Table, + Space, + Modal, + Button, + Tabs, + Descriptions, + Input, + Steps, + Select, + Image, + Timeline, + Popover +} from "antd"; +import { dictionary } from "@/config/common"; +import ajax from "@/services"; +import { TableModule } from "@/components"; +import "./index.scss"; + +const { TextArea } = Input; + +function Charge() { + // 详情弹窗 + const [detailVisible, setDetailVisible] = useState(false); + // 列表数据 + const [tableData, setTableData] = useState([]); + // 数据总数 + const [total, setTotal] = useState(0); + // 详情数据 + const [detailData, setDetailData] = useState({}); + // 初始搜索条件 + const initFormData = { + operator: "0", + rule_name: "", + }; + + const columns = [ + { + title: "用户手机号", + dataIndex: "operator", + key: "operator", + align: "center", + }, + { + title: "车牌号", + dataIndex: "plate", + key: "plate", + align: "center", + }, + { + title: "充电站", + dataIndex: "plate_color", + key: "plate_color", + align: "center", + }, + { + title: "商户名称", + dataIndex: "berth_id", + key: "berth_id", + align: "center", + }, + { + title: "降预约开始时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "预约截至时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "缴纳预约费用金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "缴费时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "订单状态", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "订单完结时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "预约费用退款金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "顶动感实收金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "操作", + dataIndex: "operation", + key: "operation", + align: "center", + fixed: "right", + width: 100, + render: (text, record, index) => { + return ( + <> + <Button type="primary" onClick={() => openModal(index, record)}> + 详情 + </Button> + </> + ) + + }, + }, + ]; + + const formSearch = [ + { + name: "phone", + type: "Input", + label: "用户手机号", + placeholder: "请输入用户手机号", + }, + { + name: "plate", + type: "Input", + label: "车牌号", + placeholder: "请输入车牌号", + }, + { + name: "charging", + type: "Input", + label: "充电站", + placeholder: "请输入充电站", + }, + { + name: "operator", + type: "Select", + label: "商户名称", + defaultValue: "0", + placeholder: "请选择商户名称", + }, + { + name: "timeStart", + type: "DateRangePicker", + label: "预约开始时间", + }, + { + name: "timeEnd", + type: "DateRangePicker", + label: "订单完结时间", + }, + ]; + + // 打开弹窗 + const openModal = (index, record) => { + setDetailData(record) + setDetailVisible(true); + } + + // 检索 + const search = (params) => { + ajax.getParkingList(params).then((res) => { + if (res.status === 20000) { + setTableData(res.data.list); + setTotal(res.data.total); + } else { + message.error(res.message) + } + }); + } + + const handelAdd = () => { + setDetailVisible(true) + } + + return ( + <> + <TableModule + showSerial={true} + isExport={false} + diyButton={ + <Button + type="primary" + onClick={handelAdd} + > + 新增 + </Button> + } + columns={columns} + tableData={tableData} + formSearch={formSearch} + pagename="预约订单" + pageName={'Appointment'} + initFormData={initFormData} + total={total} + search={search} + exportUrl="/api/bpm/record/get_record_export" + /> + <Modal + open={detailVisible} + width={800} + className="totalModal" + onCancel={() => { + setDetailVisible(false); + }} + destroyOnClose + > + + </Modal> + </> + ); +} + +export default Charge; diff --git a/src/pages/NewEnergy/RecordsInquiry/Violation/index.jsx b/src/pages/NewEnergy/RecordsInquiry/Violation/index.jsx new file mode 100644 index 0000000..729bec2 --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Violation/index.jsx @@ -0,0 +1,6 @@ +import React from "react" +import loadable from "@loadable/component" +import { LoadingImg } from "@/components" + +const Violation = loadable(() => import("./loadable")) +export default (pros) => <Violation {...pros} fallback={<LoadingImg />} /> \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Violation/index.scss b/src/pages/NewEnergy/RecordsInquiry/Violation/index.scss new file mode 100644 index 0000000..9a8202a --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Violation/index.scss @@ -0,0 +1,238 @@ +@import "@/assets/css/mixin.scss"; +$color-container-bg: var(--color-container-bg); +$color-user-list-bg: var(--color-user-list-bg); +$color-text: var(--color-text); +$color-primary: var(--color-primary); + +.ant-tabs { + margin-bottom: 16px; + + .ant-tabs-nav { + margin-bottom: 0 !important; + + &::before { + border-bottom: 1px solid var(--color-card-line) !important; + } + } + + .ant-tabs-nav-wrap { + width: 100%; + box-sizing: content-box; + + .ant-tabs-nav-list { + width: 340px; + + .ant-tabs-ink-bar { + height: 3px; + background-color: #00ccff; + } + + .ant-tabs-tab { + flex: 1; + width: 100%; + display: flex; + justify-content: center; + padding-bottom: 10px; + text-align: center; + cursor: pointer; + font-size: 14px !important; + font-family: MicrosoftYaHei; + text-align: center; + letter-spacing: 0.7px; + } + + .ant-tabs-tab-active { + div { + color: #00ccff; + } + } + } + } +} + +.ant-input::-webkit-input-placeholder { + color: var(--color-placeholder); +} + +.ant-input::-moz-placeholder { + color: var(--color-placeholder); +} +.right-list .ant-btn-primary { + width: 68px; + height: 30px; + background: linear-gradient(180deg, #3aa9ff, #59b7ff); + border-radius: 4px; +} +.ant-input:-ms-input-placeholder { + color: var(--color-placeholder); +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-thead th { + background-color: #616b83 !important; +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody td { + background-color: #3e4557 !important; +} +.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody tr:nth-child(even) td { + background-color: #3e4557 !important; +} +.ant-input::placeholder { + color: var(--color-placeholder); +} + +.ant-select-selection-placeholder { + color: var(--color-placeholder); +} + +.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector { + background: var(--color-input-disabled-bg); + color: var(--color-placeholder); +} + +.ant-select-disabled .ant-select-arrow { + color: var(--color-placeholder); +} + +.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector { + background-color: var(--color-input-disabled-bg); + color: var(--color-input-disabled-color); + cursor: not-allowed; +} + +.ant-select-multiple { + .ant-select-selector { + .ant-select-selection-item { + background-color: var(--color-bg-body); + border-color: var(--color-border); + + .ant-select-selection-item-remove { + color: var(--color-text); + } + } + } +} + +.ant-select-arrow { + color: var(--color-text); +} + +.ant-select-clear { + border-radius: 50%; +} + +.ant-select-dropdown-menu { + background-color: var(--color-input-bg); + + .ant-select-dropdown-menu-item { + color: var(--color-text); + + &.ant-select-dropdown-menu-item-active { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + + &.ant-select-dropdown-menu-item-selected { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + + &:hover { + color: #fff; + // background-color: var(--radio-button-bg-checked); + } + } +} + +.ant-select-selector { + background-color: var(--color-search-list-item-bg) !important; + box-shadow: none !important; + border-radius: 4px; + color: var(--color-search-list-item-value); + border-color: var(--color-search-list-item-bd) !important; +} + +.ant-select-selection { + background-color: var(--color-input-bg); + box-shadow: none; + color: var(--color-text); + // border-color:var(--checkable-tag-border); +} + +.ant-form-horizontal .ant-form-item-label { + label { + display: inline-block; + word-wrap: break-word; + white-space: normal; + } +} + +.ant-picker { + width: 100%; + background-color: var(--color-search-list-item-bg); + border-color: var(--color-border); +} + +// .yisa-table { +// width: 100%; + +// .ant-table-thead { +// th { +// background: var(--color-table-header-bg) !important; +// } +// } + +// .ant-table-tbody { +// td { +// background: var(--color-table-body-bg) !important; +// border-bottom-color: var(--color-table-border-bottom-color); +// } + +// tr:nth-child(even) { +// td { +// background: var(--color-table-body-bg-nth-child-even) !important; +// } +// } + +// tr:nth-child(odd) { +// td { +// background: var(--color-table-body-bg-nth-child-even) !important; +// } +// } +// } +// } +.totalModal{ + .ant-modal-footer{ + display: none; + } + position: absolute; + top: 40px; + right: 174px; +} +.ltc-item-img { + width: 390px; + height: 300px; + border: 1px solid; + background: #6565656b; + margin-right: 20px !important; + img { + height: 295px; + width: 387px; + // object-fit: contain; + } +} +.hanleHistoyModal{ + max-height: 700px; + overflow: auto; +} +.hanleHistoyModal::-webkit-scrollbar { + width: 5px; +} +.hanleHistoyModal::-webkit-scrollbar-thumb { + background-color: #9da2ab; + border-radius: 10px; +} +.modal-img{ + img{ + width: 200px; + height: 200px; + } +} \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx new file mode 100644 index 0000000..1e7a33b --- /dev/null +++ b/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx @@ -0,0 +1,231 @@ +import React, { useState, useRef, useEffect } from "react"; +import { + message, + Pagination, + Table, + Space, + Modal, + Button, + Tabs, + Descriptions, + Input, + Steps, + Select, + Image, + Timeline, + Popover +} from "antd"; +import { dictionary } from "@/config/common"; +import ajax from "@/services"; +import { TableModule } from "@/components"; +import "./index.scss"; + +const { TextArea } = Input; + +function Violation() { + // 详情弹窗 + const [detailVisible, setDetailVisible] = useState(false); + // 列表数据 + const [tableData, setTableData] = useState([]); + // 数据总数 + const [total, setTotal] = useState(0); + // 详情数据 + const [detailData, setDetailData] = useState({}); + // 初始搜索条件 + const initFormData = { + operator: "0", + rule_name: "", + }; + + const columns = [ + { + title: "用户手机号", + dataIndex: "operator", + key: "operator", + align: "center", + }, + { + title: "车牌号", + dataIndex: "plate", + key: "plate", + align: "center", + }, + { + title: "充电站", + dataIndex: "plate_color", + key: "plate_color", + align: "center", + }, + { + title: "商户名称", + dataIndex: "berth_id", + key: "berth_id", + align: "center", + }, + { + title: "降预约开始时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "预约截至时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "缴纳预约费用金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "缴费时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "订单状态", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "订单完结时间", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "预约费用退款金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "顶动感实收金额", + dataIndex: "in_time", + key: "in_time", + align: "center", + }, + { + title: "操作", + dataIndex: "operation", + key: "operation", + align: "center", + fixed: "right", + width: 100, + render: (text, record, index) => { + return ( + <> + <Button type="primary" onClick={() => openModal(index, record)}> + 详情 + </Button> + </> + ) + + }, + }, + ]; + + const formSearch = [ + { + name: "phone", + type: "Input", + label: "用户手机号", + placeholder: "请输入用户手机号", + }, + { + name: "plate", + type: "Input", + label: "车牌号", + placeholder: "请输入车牌号", + }, + { + name: "charging", + type: "Input", + label: "充电站", + placeholder: "请输入充电站", + }, + { + name: "operator", + type: "Select", + label: "商户名称", + defaultValue: "0", + placeholder: "请选择商户名称", + }, + { + name: "timeStart", + type: "DateRangePicker", + label: "预约开始时间", + }, + { + name: "timeEnd", + type: "DateRangePicker", + label: "订单完结时间", + }, + ]; + + // 打开弹窗 + const openModal = (index, record) => { + setDetailData(record) + setDetailVisible(true); + } + + // 检索 + const search = (params) => { + ajax.getParkingList(params).then((res) => { + if (res.status === 20000) { + setTableData(res.data.list); + setTotal(res.data.total); + } else { + message.error(res.message) + } + }); + } + + const handelAdd = () => { + setDetailVisible(true) + } + + return ( + <> + <TableModule + showSerial={true} + isExport={false} + diyButton={ + <Button + type="primary" + onClick={handelAdd} + > + 新增 + </Button> + } + columns={columns} + tableData={tableData} + formSearch={formSearch} + pagename="预约订单" + pageName={'Appointment'} + initFormData={initFormData} + total={total} + search={search} + exportUrl="/api/bpm/record/get_record_export" + /> + <Modal + open={detailVisible} + width={800} + className="totalModal" + onCancel={() => { + setDetailVisible(false); + }} + destroyOnClose + > + + </Modal> + </> + ); +} + +export default Violation; diff --git a/src/pages/NewEnergy/RecordsInquiry/index.jsx b/src/pages/NewEnergy/RecordsInquiry/index.jsx index 0f30296..ddd88f3 100644 --- a/src/pages/NewEnergy/RecordsInquiry/index.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/index.jsx @@ -1,5 +1,9 @@ -import AppointmentRecord from './AppointmentRecord' +import Appointment from './Appointment' +import Charge from './Charge' +import Violation from './Violation' export default { - AppointmentRecord + Appointment, + Charge, + Violation } \ No newline at end of file diff --git a/src/router/router.config.js b/src/router/router.config.js index cccf040..a25520a 100644 --- a/src/router/router.config.js +++ b/src/router/router.config.js @@ -1337,10 +1337,22 @@ let routes = [ component: pages.OrderRuleMgm, }, { - path: "/newEnergy/appointmentRecord", + path: "/newEnergy/charge", + text: "充电订单", + name: "charge", + component: pages.Charge, + }, + { + path: "/newEnergy/appointment", text: "预约记录", - name: "appointmentRecord", - component: pages.AppointmentRecord, + name: "appointment", + component: pages.Appointment, + }, + { + path: "/newEnergy/violation", + text: "违规记录", + name: "violation", + component: pages.Violation, }, { path: "/newEnergy/chargerMonitor",