From 2a3c10b297180f7b2aff5ccee262a35fdcea234d Mon Sep 17 00:00:00 2001 From: zhugy <zhugy@yisa.com> Date: Tue, 16 Jan 2024 16:18:46 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat():=E6=96=B0=E5=A2=9E=E5=85=85=E7=94=B5?= =?UTF-8?q?=E7=AB=99=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/form/FormTreeSelectNew/index.jsx | 6 + src/pages/NewEnergy/ChargeStationMgm/index.jsx | 6 + src/pages/NewEnergy/ChargeStationMgm/index.scss | 21 ++ src/pages/NewEnergy/ChargeStationMgm/loadable.jsx | 355 +++++++++++++++++++++ .../RecordsInquiry/Appointment/index.scss | 238 -------------- .../RecordsInquiry/Appointment/loadable.jsx | 13 - .../NewEnergy/RecordsInquiry/Charge/index.scss | 238 -------------- .../NewEnergy/RecordsInquiry/Charge/loadable.jsx | 90 +----- .../NewEnergy/RecordsInquiry/Unlocking/index.scss | 238 -------------- .../NewEnergy/RecordsInquiry/Violation/index.scss | 238 -------------- .../RecordsInquiry/Violation/loadable.jsx | 76 +---- src/pages/NewEnergy/index.jsx | 2 + src/router/router.config.js | 6 + src/services/NewEnergy/ChargeStationMgm.js | 32 ++ src/services/NewEnergy/index.js | 4 +- src/services/index.js | 4 +- 16 files changed, 459 insertions(+), 1108 deletions(-) create mode 100644 src/pages/NewEnergy/ChargeStationMgm/index.scss create mode 100644 src/pages/NewEnergy/ChargeStationMgm/loadable.jsx create mode 100644 src/services/NewEnergy/ChargeStationMgm.js diff --git a/src/components/form/FormTreeSelectNew/index.jsx b/src/components/form/FormTreeSelectNew/index.jsx index 6a2510f..462d469 100644 --- a/src/components/form/FormTreeSelectNew/index.jsx +++ b/src/components/form/FormTreeSelectNew/index.jsx @@ -13,6 +13,11 @@ export default function FormTreeSelectNew(props) { placeholder = "请选择", value = [], treeData = [], + fieldNames={ + label: "name", + value: "id", + children: "children", + }, disabled = false, className = "", maxHeight = 400, @@ -174,6 +179,7 @@ export default function FormTreeSelectNew(props) { allowClear={allowClear} value={value} disabled={disabled} + fieldNames={fieldNames} dropdownStyle={{ maxHeight: maxHeight, overflow: "auto" }} treeData={data} placeholder={placeholder} diff --git a/src/pages/NewEnergy/ChargeStationMgm/index.jsx b/src/pages/NewEnergy/ChargeStationMgm/index.jsx index e69de29..d1dc1c2 100644 --- a/src/pages/NewEnergy/ChargeStationMgm/index.jsx +++ b/src/pages/NewEnergy/ChargeStationMgm/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/ChargeStationMgm/index.scss b/src/pages/NewEnergy/ChargeStationMgm/index.scss new file mode 100644 index 0000000..3ac3e8d --- /dev/null +++ b/src/pages/NewEnergy/ChargeStationMgm/index.scss @@ -0,0 +1,21 @@ +.add-station-modal { + .add-station-body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + .row { + width: 100%; + margin: 10px 0; + } + .cc-form-tree { + margin-bottom: 0; + } + .cc-form-content,.form-select-single-content { + flex: auto; + } + .cc-form-name,.form-select-single-name { + width: 100px; + } + } +} \ No newline at end of file diff --git a/src/pages/NewEnergy/ChargeStationMgm/loadable.jsx b/src/pages/NewEnergy/ChargeStationMgm/loadable.jsx new file mode 100644 index 0000000..63062b4 --- /dev/null +++ b/src/pages/NewEnergy/ChargeStationMgm/loadable.jsx @@ -0,0 +1,355 @@ +import React, { useState, useRef, useEffect } from "react"; +import { + message, + Modal, + Button, + Cascader +} from "antd"; +import ajax from "@/services"; +import { useSessionStorageState, useSetState } from "ahooks" +import { TableModule, FormInput, FormSelect, FormTreeSelectNew } from "@/components"; +import "./index.scss"; + + +function Appointment() { + // 详情弹窗 + const [detailVisible, setDetailVisible] = useState(false); + // 列表数据 + const [tableData, setTableData] = useState([]); + // 数据总数 + const [total, setTotal] = useState(0); + // 详情数据 + const [detailData, setDetailData] = useState({}); + // 站点状态下拉 + const [siteList, setSiteList] = useState([]); + // 区域下拉 + const [areaList, setAreaList] = useState([]); + //商户名称下拉 + const [operatorList, setOperatorList] = useState([]); + // 添加站点 + const initAdd = { + name: "", + code: "", + address: "", + site_type: "", + area: "", + operator: "" + } + const [addFormData, setAddFormData] = useSetState(initAdd); + const [formData, setFormData] = useSetState({}); + // 初始搜索条件 + const initFormData = { + operator: "0", + rule_name: "", + }; + + const columns = [ + { + title: "充电站名称", + dataIndex: "name", + key: "name", + align: "center", + }, + { + title: "充电站编码", + dataIndex: "code", + key: "code", + align: "center", + }, + { + title: "站点类型", + dataIndex: "site_type", + key: "site_type", + align: "center", + }, + { + title: "所属区域", + dataIndex: "area", + key: "area", + align: "center", + }, + { + title: "详细地址", + dataIndex: "address", + key: "address", + align: "center", + }, + { + title: "车位总数", + dataIndex: "count", + key: "count", + align: "center", + }, + { + title: "商户名称", + dataIndex: "operator", + key: "operator", + align: "center", + }, + { + title: "站点状态", + dataIndex: "site_status", + key: "site_status", + 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: "name", + type: "Input", + label: "充电站名称", + placeholder: "请输入充电站名称", + }, + { + name: "area", + type: "TreeSelect", + defaultValue: "0", + label: "所属区域", + placeholder: "请选择所属区域", + }, + { + name: "site_status", + type: "Select", + label: "站点状态", + options: [ + { value: "0", label: "全部" }, + ...siteList + ], + defaultValue: "0", + placeholder: "请选择站点状态", + }, + { + name: "operator", + type: "Select", + label: "商户名称", + defaultValue: "0", + placeholder: "请选择商户名称", + }, + ]; + + const init = () => { + getSiteStatus() + getAreaList() + getAllOperator() + } + // 获取站点状态下拉 + const getSiteStatus = () => { + ajax.getSiteStatus().then((res) => { + const { status, data } = res + if (status === 20000) { + if (data && data.length) { + data.shift() + setSiteList(data); + } + } else { + message.error(res.message) + } + }); + } + // 获取区域下拉 + const getAreaList = () => { + ajax.getAreaTree().then((res) => { + const { status, data } = res + if (status === 20000) { + if (data && data.length) { + data.shift() + setAreaList(data); + } + } + }).catch((err) => { + console.error(err); + }); + } + // 获取商户下拉 + const getAllOperator = () => { + ajax.getAllOperator().then((res) => { + const { status, data } = res + if (status === 20000) { + if (data && data.length) { + data.shift() + setOperatorList(data); + } + } + }).catch((err) => { + console.error(err); + });; + } + + // 打开弹窗 + const openModal = (index, record) => { + setDetailData(record) + setDetailVisible(true); + } + + // 检索 + const search = (params) => { + ajax.getStationList(params).then((res) => { + if (res.status === 20000) { + setFormData(params) + setTableData(res.data); + setTotal(res.total); + } else { + message.error(res.message) + } + }); + } + // 新增 + const handelAdd = () => { + setAddFormData(initAdd) + setDetailVisible(true) + } + + const handelOk = () => { + ajax.addStation(addFormData).then((res) => { + if (res.status === 20000) { + message.success("新增成功") + setDetailVisible(false); + setAddFormData(initAdd) + search(formData) + } else { + message.error(res.message) + } + }); + } + + useEffect(() => { + init() + }, []) + + + return ( + <> + <TableModule + showSerial={true} + isExport={false} + diyButton={ + <Button + type="primary" + onClick={handelAdd} + > + 新增 + </Button> + } + columns={columns} + tableData={tableData} + formSearch={formSearch} + pagename="充电站管理" + pageName={'chargeStationMgm'} + initFormData={initFormData} + total={total} + search={search} + exportUrl="/api/bpm/record/get_record_export" + /> + <Modal + title="添加充电站" + open={detailVisible} + width={500} + className="add-station-modal" + onCancel={() => { + setDetailVisible(false); + }} + onOk={handelOk} + destroyOnClose + > + <div className="add-station-body"> + <div className="row"> + <FormInput + yisaLabel="充电站名称" + placeholder="请输入充电站名称" + isShowAfterIcon={false} + value={addFormData.name} + onChange={e => { setAddFormData({ name: e.target.value }) }} + /> + </div> + <div className="row"> + <FormInput + yisaLabel="充电站编码" + placeholder="请输入充电站编码" + isShowAfterIcon={false} + value={addFormData.code} + onChange={e => { setAddFormData({ code: e.target.value }) }} + /> + </div> + <div className="row"> + <FormInput + yisaLabel="详细地址" + placeholder="请输入详细地址" + isShowAfterIcon={false} + value={addFormData.address} + onChange={e => { setAddFormData({ address: e.target.value }) }} + /> + </div> + <div className="row"> + <FormSelect + yisaLabel="站点类型" + placeholder="请选择站点类型" + yisaData={siteList} + value={addFormData.site_type} + onChange={e => { setAddFormData({ site_type: e }) }} + /> + </div> + <div className="row"> + <FormTreeSelectNew + yisaLabel="所属区域" + labelPosition="left" + placeholder="请选择所属区域" + value={addFormData.area || null} + fieldNames={{ + label: "name", + value: "id", + children: "children", + }} + treeData={areaList} + multiple={false} + isBayonet={true} + onChange={(e) => { setAddFormData({ area: e }) }} + /> + {/* <Cascader + options={areaList} + defaultValue={addFormData.area} + placeholder="请选择区域" + expandTrigger="hover" + changeOnSelect + fieldNames={{ + label: "name", + value: "id", + children: "children", + }} + onChange={cascaderChange} + /> */} + </div> + <div className="row"> + <FormSelect + yisaLabel="商户名称" + placeholder="请选择商户名称" + yisaData={operatorList} + value={addFormData.operator} + onChange={e => { setAddFormData({ operator: e }) }} + /> + </div> + </div> + </Modal> + </> + ); +} + +export default Appointment; diff --git a/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss b/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss index 9a8202a..e69de29 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss +++ b/src/pages/NewEnergy/RecordsInquiry/Appointment/index.scss @@ -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/Appointment/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx index febe305..8bccff3 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx @@ -1,26 +1,13 @@ 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() { // 详情弹窗 diff --git a/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss b/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss index 9a8202a..e69de29 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss +++ b/src/pages/NewEnergy/RecordsInquiry/Charge/index.scss @@ -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/Charge/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx index 50650f2..0530080 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx @@ -1,26 +1,13 @@ 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() { // 详情弹窗 @@ -39,73 +26,55 @@ function Charge() { const columns = [ { - title: "用户手机号", + title: "充电订单号", dataIndex: "operator", key: "operator", align: "center", }, { - title: "车牌号", + title: "充电站", dataIndex: "plate", key: "plate", align: "center", }, { - title: "充电站", + title: "充电电量", dataIndex: "plate_color", key: "plate_color", align: "center", }, { - title: "商户名称", + title: "电费", dataIndex: "berth_id", key: "berth_id", align: "center", }, { - title: "降预约开始时间", - dataIndex: "in_time", - key: "in_time", - align: "center", - }, - { - title: "预约截至时间", + title: "充电服务费", dataIndex: "in_time", key: "in_time", align: "center", }, { - title: "缴纳预约费用金额", + title: "充电收入", dataIndex: "in_time", key: "in_time", align: "center", }, { - title: "缴费时间", + title: "充电开始时间", dataIndex: "in_time", key: "in_time", align: "center", }, { - title: "订单状态", + 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: "顶动感实收金额", + title: "充电时长", dataIndex: "in_time", key: "in_time", align: "center", @@ -134,37 +103,19 @@ function Charge() { { name: "phone", type: "Input", - label: "用户手机号", - placeholder: "请输入用户手机号", + label: "充电站名称", + placeholder: "请输入充电站名称", }, { name: "plate", type: "Input", - label: "车牌号", - placeholder: "请输入车牌号", - }, - { - name: "charging", - type: "Input", - label: "充电站", - placeholder: "请输入充电站", - }, - { - name: "operator", - type: "Select", - label: "商户名称", - defaultValue: "0", - placeholder: "请选择商户名称", + label: "订单编号", + placeholder: "请输入订单编号", }, { name: "timeStart", type: "DateRangePicker", - label: "预约开始时间", - }, - { - name: "timeEnd", - type: "DateRangePicker", - label: "订单完结时间", + label: "充电开始时间", }, ]; @@ -194,20 +145,11 @@ function Charge() { <> <TableModule showSerial={true} - isExport={false} - diyButton={ - <Button - type="primary" - onClick={handelAdd} - > - 新增 - </Button> - } columns={columns} tableData={tableData} formSearch={formSearch} - pagename="预约订单" - pageName={'Appointment'} + pagename="充电订单" + pageName={'charge'} initFormData={initFormData} total={total} search={search} diff --git a/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.scss b/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.scss index 9a8202a..e69de29 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.scss +++ b/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.scss @@ -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/Violation/index.scss b/src/pages/NewEnergy/RecordsInquiry/Violation/index.scss index 9a8202a..e69de29 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Violation/index.scss +++ b/src/pages/NewEnergy/RecordsInquiry/Violation/index.scss @@ -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/Violation/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx index 1e7a33b..d1fa6ae 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx @@ -1,26 +1,13 @@ 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() { // 详情弹窗 @@ -57,55 +44,13 @@ function Violation() { align: "center", }, { - title: "商户名称", + 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: "顶动感实收金额", + title: "记录创建时间", dataIndex: "in_time", key: "in_time", align: "center", @@ -152,19 +97,14 @@ function Violation() { { name: "operator", type: "Select", - label: "商户名称", + label: "违规类型", defaultValue: "0", - placeholder: "请选择商户名称", + placeholder: "请选择违规类型", }, { name: "timeStart", type: "DateRangePicker", - label: "预约开始时间", - }, - { - name: "timeEnd", - type: "DateRangePicker", - label: "订单完结时间", + label: "记录创建时间", }, ]; @@ -190,6 +130,8 @@ function Violation() { setDetailVisible(true) } + + return ( <> <TableModule @@ -206,8 +148,8 @@ function Violation() { columns={columns} tableData={tableData} formSearch={formSearch} - pagename="预约订单" - pageName={'Appointment'} + pagename="违规订单" + pageName={'violation'} initFormData={initFormData} total={total} search={search} diff --git a/src/pages/NewEnergy/index.jsx b/src/pages/NewEnergy/index.jsx index 7d43cfc..65094c1 100644 --- a/src/pages/NewEnergy/index.jsx +++ b/src/pages/NewEnergy/index.jsx @@ -1,10 +1,12 @@ import ChargingMgm from './ChargingMgm' import NewEnergyOverview from './NewEnergyOverview' +import ChargeStationMgm from './ChargeStationMgm' import RecordsInquiry from './RecordsInquiry' import RealtimeMonitor from './RealtimeMonitor' export default { NewEnergyOverview, + ChargeStationMgm, ...RealtimeMonitor, ...ChargingMgm, ...RecordsInquiry, diff --git a/src/router/router.config.js b/src/router/router.config.js index 1c5c6fe..58c238d 100644 --- a/src/router/router.config.js +++ b/src/router/router.config.js @@ -1337,6 +1337,12 @@ let routes = [ component: pages.OrderRuleMgm, }, { + path: "/newEnergy/chargeStationMgm", + text: "充电站管理", + name: "chargeStationMgm", + component: pages.ChargeStationMgm, + }, + { path: "/newEnergy/charge", text: "充电订单", name: "charge", diff --git a/src/services/NewEnergy/ChargeStationMgm.js b/src/services/NewEnergy/ChargeStationMgm.js new file mode 100644 index 0000000..5b7dc12 --- /dev/null +++ b/src/services/NewEnergy/ChargeStationMgm.js @@ -0,0 +1,32 @@ +import ajax from "@/config/ajax" +// 充电站管理 +// 获取列表数据 +const getStationList = (params) => { + return ajax({ + url: "/api/fin/charge_station/get_list", + type: "post", + data: params, + }); +}; +// 获取站点状态 +const getSiteStatus = (params) => { + return ajax({ + url: "/api/fin/charge_station/site_status", + type: "get", + data: params, + }); +}; +// 新增充电站 +const addStation = (params) => { + return ajax({ + url: "/api/fin/charge_station/add_station", + type: "post", + data: params, + }); +}; + +export default{ + getSiteStatus, + getStationList, + addStation +} diff --git a/src/services/NewEnergy/index.js b/src/services/NewEnergy/index.js index d1a45b4..18993a1 100644 --- a/src/services/NewEnergy/index.js +++ b/src/services/NewEnergy/index.js @@ -1,5 +1,7 @@ import chargingMgm from './chargingMgm' +import chargeStationMgm from './ChargeStationMgm' export default { - ...chargingMgm + ...chargingMgm, + ...chargeStationMgm } \ No newline at end of file diff --git a/src/services/index.js b/src/services/index.js index 76c1d02..abcce60 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -23,6 +23,7 @@ import FinancialMgm from "./FinancialMgm"; import DataAnalysisPrediction from "./DataAnalysisPrediction"; import ParkingOverview from "./ParkingOverview"; import OffPeak from "./OffPeak"; +import NewEnergy from "./NewEnergy"; const api = {}; export default { ...api, @@ -50,5 +51,6 @@ export default { ...FinancialMgm, ...DataAnalysisPrediction, ParkingOverview, - ...OffPeak + ...OffPeak, + ...NewEnergy }; From caacd0da4aa5a2940af7b5cd486eb37aa41178d4 Mon Sep 17 00:00:00 2001 From: He Huan <hehuan@yisa.com> Date: Tue, 16 Jan 2024 16:39:04 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix():=20=E4=BF=AE=E5=A4=8D=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=A7=84=E5=88=99=E9=A1=B5=E9=9D=A2=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/OffPeak/OffPeakTimeMgm/ManagementTime/loadable.jsx | 8 +++++--- src/pages/OffPeak/OffPeakTimeMgm/RuleDetail/loadable.jsx | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/pages/OffPeak/OffPeakTimeMgm/ManagementTime/loadable.jsx b/src/pages/OffPeak/OffPeakTimeMgm/ManagementTime/loadable.jsx index c0510ea..1e664b9 100644 --- a/src/pages/OffPeak/OffPeakTimeMgm/ManagementTime/loadable.jsx +++ b/src/pages/OffPeak/OffPeakTimeMgm/ManagementTime/loadable.jsx @@ -70,7 +70,7 @@ function ManagementTime(props) { title: `提示`, content: `是否确认删除选中的数据项?`, onOk: () => { - ajax.getDelRuleLink({ids:[record.id]}).then((res) => { + ajax.getDelRuleLink({ids:[record.id],rule_id:id}).then((res) => { if (res.status === 20000) { message.success('删除成功') tableRef.current.fetch(1,{}) @@ -167,7 +167,7 @@ function ManagementTime(props) { title: `提示`, content: `是否确认删除选中的数据项?`, onOk: () => { - ajax.getDelRuleLink({ids:tableSelectCheck}).then((res) => { + ajax.getDelRuleLink({ids:tableSelectCheck,rule_id:id}).then((res) => { if (res.status === 20000) { message.success('删除成功') tableRef.current.fetch(1,{}) @@ -191,7 +191,9 @@ function ManagementTime(props) { message.warning(`时间规则不可为空`); return } - ajax.getRuleLinkAdd(rowData).then((res) => { + let data = rowData + data.rule_id=id + ajax.getRuleLinkAdd(data).then((res) => { if (res.status === 20000) { setVisible(false); message.success("新增成功") diff --git a/src/pages/OffPeak/OffPeakTimeMgm/RuleDetail/loadable.jsx b/src/pages/OffPeak/OffPeakTimeMgm/RuleDetail/loadable.jsx index 860785b..6eea5e8 100644 --- a/src/pages/OffPeak/OffPeakTimeMgm/RuleDetail/loadable.jsx +++ b/src/pages/OffPeak/OffPeakTimeMgm/RuleDetail/loadable.jsx @@ -118,10 +118,11 @@ function RuleDetail() { setActionState("edit"); setVisible(true); setEditId(record.id) + let dataType=selectData.filter(item => { return item.label==record.date_type}) setRowData({ ...rowData, name: record.name, - date_type:record.date_type, + date_type:dataType[0].value||"", start_time: record.start_time, end_time: record.end_time, is_in: record.is_in, @@ -365,7 +366,8 @@ function RuleDetail() { <FormSelect yisaLabel="是否可以进入" yisaData={modalSelectData} - defaultValue={rowData.is_in || null} + defaultValue={rowData.is_in===""?null:rowData.is_in} + // defaultValue={rowData.is_in} placeholder="请选择是否可以进入" hasUnlimited={false} required={true} @@ -375,7 +377,7 @@ function RuleDetail() { <FormSelect yisaLabel="是否可以出场" yisaData={modalSelectData} - defaultValue={rowData.is_out || null} + defaultValue={rowData.is_out===""? null:rowData.is_out} placeholder="请选择是否可以出场" hasUnlimited={false} required={true} From 5542732ad1cee4c75b5f6072bb7a70cd874d2088 Mon Sep 17 00:00:00 2001 From: chenli <chenli@yisa.com> Date: Tue, 16 Jan 2024 16:42:25 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat():=20=E6=96=B0=E5=A2=9E=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=AE=B0=E5=BD=95=E8=AF=B7=E6=B1=82=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RealtimeMonitor/ChargerMonitor/loadable.jsx | 1097 ++------------------ .../NewEnergy/RecordsInquiry/Unlocking/index.jsx | 4 +- .../RecordsInquiry/Unlocking/loadable.jsx | 97 +- src/services/NewEnergy/index.js | 4 +- src/services/NewEnergy/recordsInquiry.js | 16 + 5 files changed, 144 insertions(+), 1074 deletions(-) create mode 100644 src/services/NewEnergy/recordsInquiry.js diff --git a/src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx b/src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx index f960e2f..7d1888e 100644 --- a/src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx +++ b/src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx @@ -13,14 +13,14 @@ import { Select, Image, Timeline, - Popover + Popover, } from "antd"; import { dictionary, utils } from "@/config/common"; // import moment from 'moment' // import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; import ajax from "@/services"; -import errorImg from '@/assets/images/error-img-new.png' -import { QuestionCircleOutlined } from '@ant-design/icons'; +import errorImg from "@/assets/images/error-img-new.png"; +import { QuestionCircleOutlined } from "@ant-design/icons"; import { TableModule } from "@/components"; import "./index.scss"; import { @@ -29,451 +29,112 @@ import { operatorRecordColumns, } from "./dataSource"; // import errorImg from "@/assets/images/layout/error.png" -// import { useLocation } from "react-router-dom"; -const { TextArea } = Input; -let array = []; +const { TextArea } = Input; function ChargerMonitor() { - const roadContent = ( - <div> - <p>出场时间-入场时间的计算金额</p> - </div> - ) - const receivableContent = ( - <div> - <p>订单金额-折扣金额</p> - </div> - ) - const discountContent = ( - <div> - <p>折扣金额=停车卡抵扣+路段折扣</p> - </div> - ) - const preferentialContent = ( - <div> - <p>优惠券支付金额</p> - </div> - ) - const refundContent = ( - <div> - <p>退款总计=退实付+退优惠</p> - </div> - ) - const columns = [ - { - title: "序号", - dataIndex: "index", - key: "index", - align: "center", - fixed: "left", - render: (text, record, index) => index + 1, - width: 100, - }, - - { - title: "路段名称", - dataIndex: "road", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "100px", wordBreak: "break-all" }}>{record.road}</div> - ) - }, - { - title: "车牌号", - dataIndex: "plate", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "100px", wordBreak: "break-all" }}>{record.plate}</div> - ) - }, - { - title: "车牌颜色", - dataIndex: "plate_color", - key: "plate_color", - width: 100, - align: "center", - }, - { - title: "泊位号", - dataIndex: "berth_id", - key: "berth_id", - width: 100, - align: "center", - }, - { - title: "入场时间", - dataIndex: "in_time", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "130px", wordBreak: "break-all" }}>{record.in_time}</div> - ) - }, - { - title: "离场时间", - dataIndex: "out_time", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "130px", wordBreak: "break-all" }}>{record.out_time}</div> - ) - }, - { - title: "停车时长", - dataIndex: "admission_time", - key: "admission_time", - width: 100, - align: "center", - }, - { - title: "入场收费员", - dataIndex: "in_person", - key: "in_person", - width: 100, - align: "center", + const [tableData, setTableData] = useState([]); + const [total, setTotal] = useState(0); - }, - { - title: "出场收费员", - dataIndex: "out_person", - key: "out_person", - width: 100, - align: "center", - }, - { - title: <Popover content={roadContent} > - 订单金额 - <QuestionCircleOutlined /> - </Popover>, - dataIndex: "order_amount", - key: "order_amount", - width: 100, - align: "center", - // filterDropdown: true, - // filterIcon: - // <Popover content={roadContent} > - // <QuestionCircleOutlined /> - // </Popover> - }, - { - title: <Popover content={receivableContent} > - 应收金额 - <QuestionCircleOutlined /> - </Popover>, - dataIndex: "receivable_amount", - key: "receivable_amount", - width: 100, - align: "center", - // filterDropdown: true, - // filterIcon: - // <Popover content={receivableContent} > - // <QuestionCircleOutlined /> - // </Popover> - }, - { - title: <Popover content={discountContent} > - 折扣金额 - <QuestionCircleOutlined /> - </Popover>, - dataIndex: "discount_amount", - key: "discount_amount", - width: 100, - align: "center", - // filterDropdown: true, - // filterIcon: - // <Popover content={discountContent} > - // <QuestionCircleOutlined /> - // </Popover> - }, - { - title: <Popover content={preferentialContent} > - 优惠金额 - <QuestionCircleOutlined /> - </Popover>, - dataIndex: "preferential_amount", - key: "preferential_amount", - width: 100, - align: "center", - // filterDropdown: true, - // filterIcon: - // <Popover content={preferentialContent} > - // <QuestionCircleOutlined /> - // </Popover> - }, - { - title: "实付金额", - dataIndex: "actual_amount", - key: "actual_amount", - width: 100, - align: "center", - }, - { - title: <Popover content={refundContent} > - 退款总计 - <QuestionCircleOutlined /> - </Popover>, - dataIndex: "refund_total", - key: "refund_total", - width: 100, - align: "center", - // filterDropdown: true, - // filterIcon: - // <Popover content={refundContent} > - // <QuestionCircleOutlined /> - // </Popover> - }, - { - title: "停车记录ID", - dataIndex: "park_id", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "130px", wordBreak: "break-all" }}> - <a onClick={() => { - navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") }); - }}>{record.park_id}</a> - </div> - ), - }, - { - title: "区域", - dataIndex: "region", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "120px", wordBreak: "break-all" }}>{record.region}</div> - ) - }, - { - title: "商户名称", - dataIndex: "operator", - align: "center", - render: (text, record, index) => ( - <div style={{ width: "150px", wordBreak: "break-all" }}>{record.operator}</div> - ) - }, - { - title: "路段类型", - dataIndex: "road_type", - key: "road_type", - width: 100, - align: "center", - }, - { - title: "操作", - dataIndex: "operation", - key: "operation", - align: "center", - fixed: "right", - width: 100, - render: (text, record, index) => { - setDataDetail(record) - return ( - <> - <Button type="primary" onClick={() => openModal(index, record)}> - 详情 - </Button> - </> - ) + const initFormData = { + charge_station: "", // 充电站 + tel: "", // 手机号 + plate: "", // 车牌号 + charge_status: "", // 充电状态 + time:{ - }, - }, - ]; + } + }; // 初始数据 const formSearch = [ { - name: "region", - type: "TreeSelect", - label: "区域", - }, - { - name: "operator", - type: "Select", - label: "商户名称", - defaultValue: "0", - placeholder: "请选择商户名称", - }, - { - name: "road", - type: "SearchSelect", - label: "路段名称", - placeholder: "请输入路段名称", - }, - { - name: "road_type", - type: "Select", - label: "路段类型", - defaultValue: 0, - options: sysConfig.roadType, - }, - { - name: "phone", + label: "充电桩", + name: "charge_station", type: "Input", - label: "手机号", - placeholder: "请输入手机号", + placeholder: "请输入", }, { - name: "plate", + label: "会员手机", + name: "tel", type: "Input", - label: "车牌号", - placeholder: "请输入车牌号", - }, - { - name: "berth_id", - type: "Input", - label: "泊位号", - placeholder: "请输入泊位号", - }, - { - name: "type", - type: "Select", - label: "出入场类型", - defaultValue: 1, - options: [ - { - label: "入场", - value: 1, - }, - { - label: "出场", - value: 2, - }, - ], + placeholder: "请输入会员手机", }, { - name: "park_id", + label: "车牌号", + name: "plate_num", type: "Input", - label: "停车记录ID", - placeholder: "请输入停车记录ID", - }, - { - name: "plate_color", - type: "Select", - label: "车牌颜色", - placeholder: "请输入车牌颜色", - options: sysConfig.plateColor, + placeholder: "请输入车牌号", }, { - name: "order_type", + label: "充电状态", + name: "charge_status", type: "Select", - label: "订单类型", - defaultValue: 0, - options: [ - { - label: "全部", - value: 0, - }, - { - label: "进行中", - value: 1, - }, - { - label: "待支付", - value: 2, - }, - { - label: "已支付", - value: 3, - } - ], + placeholder: "请输入", + options:[] }, { - name: "in_person", - type: "Input", - label: "入场收费员", - placeholder: "请输入入场收费员", - }, - { - name: "out_person", - type: "Input", - label: "出场收费员", - placeholder: "请输入出场收费员", - }, - { - name: "timePeriod", + name: "time", type: "RangePicker", - label: "时间段", + label: "充电开始时间", }, - ]; - const initFormData = { - region: ["0"], - operator: "0", - road: "0", - road_type: 0, - phone: "", - plate: "", - berth_id: "", - type: 1, - park_id: "", - order_type: 0, - plate_color: -1, - in_person: "", - out_person: "", - }; - //历史处理的表头 - const historyProgressColumns = [ + ]; // 检索栏 + + const columns = [ { title: "序号", - dataIndex: "id", - key: "id", + dataIndex: "index", + key: "index", align: "center", + fixed: "left", render: (text, record, index) => index + 1, + width: 100, }, { - title: "状态", - dataIndex: "status", - key: "status", - align: "center", - }, - { - title: "处理记录ID", - dataIndex: "deal_record_id", - key: "deal_record_id", + title: "用户手机号", + dataIndex: "user_tel", + key: "user_tel", align: "center", }, { - title: "处理时间", - dataIndex: "deal_time", - key: "deal_time", + title: "车牌号", + dataIndex: "plate", + key: "plate", align: "center", }, { - title: "处理人", - dataIndex: "dealer", - key: "dealer", + title: "枪名称", + dataIndex: "plate_color", + key: "plate_color", align: "center", }, { - title: "业务订单类型", - dataIndex: "business_type", - key: "business_type", + title: "充电站", + dataIndex: "berth_id", + key: "berth_id", + width: 100, align: "center", }, { - title: "更改项", - dataIndex: "change_content", - key: "change_content", + title: "充电开始时间", + dataIndex: "in_time", + key: "in_time", align: "center", - render: (text) => { - return text == 1 - ? "调整出场时间" - : text == 2 - ? "变更车牌号" - : text == 3 - ? "更改订单金额" - : text == 4 - ? "免费该订单" - : "作废该订单" - } }, { - title: "更改初始值", - dataIndex: "initial_value", - key: "initial_value", + title: "充电状态", + dataIndex: "operation", + key: "operation", align: "center", + fixed: "right", + width: 100, }, { - title: "更改更新值", - dataIndex: "update_value", - key: "update_value", + title: "图像记录", + dataIndex: "operation", + key: "operation", align: "center", + fixed: "right", + width: 100, }, { title: "操作", @@ -481,644 +142,40 @@ function ChargerMonitor() { key: "operation", align: "center", fixed: "right", - render: (_, record) => { - return ( - <Button - type="primary" - onClick={() => { - checkHistoryDetail(record); - }} - > - 操作 - </Button> - ); - }, - }, - ]; - - - const h_columns = [ - { - title: "停车订单ID", - dataIndex: "park_id", - key: "park_id", - width: 200, - align: "center", - render: (text) => ( - <> - <a - onClick={() => { - navigator.clipboard.writeText(`${text}`).then(() => { - message.success("已复制到剪切板"); - }); - }} - > - {text} - </a> - </> - ), - }, - { - title: "车牌号", - dataIndex: "plate", - key: "plate", - align: "center", - }, - { - title: "停车场名称", - dataIndex: "park_name", - key: "park_name", - align: "center", - width: 200, - }, - { - title: "入场时间", - dataIndex: "in_time", - key: "in_time", - align: "center", - }, - { - title: "计费时间", - dataIndex: "admission_time", - key: "admission_time", - align: "center", + width: 100, }, - ]; - - - const [detailVisible, setDetailVisible] = useState(false); - const [tableData, setTableData] = useState([]); - const [total, setTotal] = useState(0); - const [tabKey, setTabKey] = useState("1"); - // 车场id - const [parkId, setParkId] = useState(""); - //支付记录数据 - const [payRecord, setPayRecord] = useState([]); - //退款订单数据 - const [refundRecord, setRefundRecord] = useState([]); - //操作记录数据 - const [operationRecord, setOperatorRecord] = useState([]); - //历史处理数据 - const [historyProgressRecord, setHistoryProgressRecord] = useState([]); - //停车记录信息数据 - const [parkingRecordDetail, setParkingRecordDetail] = useState({}); - //当前的所选择的停车信息索引 - const [recordIndex, setRecordIndex] = useState(-1); - //当前所选择的订单ID - const [currentRecordID, setCurrentRecordID] = useState(""); - //历史记录详情Modal - const [historyVisible, setHistoryVisible] = useState(false); - //历史记录详情的弹窗查看全部 - const [isShowAll, setIsShowAll] = useState(false); - //历史记录车辆图片弹窗 - const [platePhototModal, setPlatePhotoModal] = useState(false); - //历史记录详情数据 - const [historyDataDetail, setHistoryDataDetail] = useState({}); - const [DataDetail, setDataDetail] = useState({}); - function openModal(index, record) { - setDetailVisible(true); - setParkingRecordDetail(record); - setHistoryDataDetail(record) - setRecordIndex(index); - } - - const handleImgError = (e) => { - let evn = e || event - let img = evn.srcElement ? evn.srcElement : evn.target - img.src = errorImg - } - - function changeKey(key) { - setTabKey(key); - switch (key) { - case "2": - getPaymentRecord(currentRecordID); - break; - case "3": - getRefundRecord(currentRecordID); - break; - case "4": - getOperateRecord(currentRecordID); - break; - case "5": - getHistoryRecord(currentRecordID); - break; - default: - break; - } - } - function renderParkRecord(item) { - return ( - item && ( - <div> - <Descriptions title="停车场名称"> - <Descriptions.Item label="停车场名称">{item.road}</Descriptions.Item> - <Descriptions.Item label="泊位号">{item.berth_id}</Descriptions.Item> - <Descriptions.Item label="区域">{item.region}</Descriptions.Item> - <Descriptions.Item label="商户">{item.operator}</Descriptions.Item> - <Descriptions.Item label="车场类型">{item.road_type}</Descriptions.Item> - </Descriptions> - <Descriptions title="停车信息"> - <Descriptions.Item label="车牌号">{item.plate}</Descriptions.Item> - <Descriptions.Item label="会员手机号">{item.phone}</Descriptions.Item> - <Descriptions.Item label="入场时间"> {item.in_time} </Descriptions.Item> - <Descriptions.Item label="出场时间">{item.out_time}</Descriptions.Item> - <Descriptions.Item label="停车时长">{item.admission_time}</Descriptions.Item> - <Descriptions.Item label="订单金额"> {item.order_amount}</Descriptions.Item> - <Descriptions.Item label="停车卡折扣">{item.parking_card_discount} </Descriptions.Item> - <Descriptions.Item label="车场折扣"> - {item.road_discount} - </Descriptions.Item> - <Descriptions.Item label="应收金额"> - {item.receivable_amount} - </Descriptions.Item> - <Descriptions.Item label="优惠券">{item.coupon }</Descriptions.Item> - <Descriptions.Item label="优惠总额"> - {item.preferential_amount} - </Descriptions.Item> - <Descriptions.Item label="实付金额"> - {item.actual_amount} - </Descriptions.Item> - <Descriptions.Item label="优惠退款"> - {item.refund_discount} - </Descriptions.Item> - <Descriptions.Item label="实付退款"> - {item.actual_refund} - </Descriptions.Item> - <Descriptions.Item label="退款总计"> - {item.refund_total} - </Descriptions.Item> - <Descriptions.Item label="入场收费员"> - {item.in_person} - </Descriptions.Item> - <Descriptions.Item label="出场收费员"> - {item.out_person} - </Descriptions.Item> - </Descriptions> - <Descriptions title="入场照片"> - <Descriptions.Item label="车辆照片"> - <div className="ltc-item ltc-item-img "> - <Image src={item.in_veh_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError}/> - </div> - </Descriptions.Item> - <Descriptions.Item label="车牌照片"> - <div className="ltc-item ltc-item-img "> - <Image src={item.in_plate_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError}/> - </div> - </Descriptions.Item> - <Descriptions.Item label=" 残疾人证件"> - <div className="ltc-item ltc-item-img "> - <Image src={item.cj_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError}/> - </div> - </Descriptions.Item> - </Descriptions> - </div> - ) - ); - } - //查看历史详情 - const [getHistoryData,setGetHistoryData]=useState({}) - function checkHistoryDetail(record) { - setGetHistoryData(record); - setHistoryVisible(true); - } - function renderModalTable(columns, dataSource) { - return ( - <Table - columns={columns} - dataSource={dataSource} - scroll={{ x: 1000 }} - // className="yisa-table" - /> - ); - } - //获取订单的支付记录 - function getPaymentRecord(park_id) { - ajax.getPaymentRecord({ park_record_id: park_id }).then((res) => { - if (res.status === 20000) { - setPayRecord(res.data.list); - } - }); - } - //获取退款订单的接口 - function getRefundRecord(park_id) { - ajax.getRefundRecord({ park_id }).then((res) => { - if (res.status === 20000) { - setRefundRecord(res.data.list); - } - }); - } - //获取操作处理的接口 - function getOperateRecord(park_id) { - ajax.getOperateRecord({ park_record_id: park_id }).then((res) => { - if (res.status === 20000) { - setOperatorRecord(res.data.list); - } - }); - } - //获取历史处理记录的接口 - function getHistoryRecord(park_id) { - ajax.getHistoryRecord({ park_record_id: park_id }).then((res) => { - if (res.status === 20000) { - // res.data.list.map(res=>{ - setHistoryProgressRecord(res.data.list); - // }) - } - }); - } + ]; // 表头 - //获取函数 + // 获取函数 function search(params) { - utils.tableScrollTop("parent-table-scroll") + // utils.tableScrollTop("parent-table-scroll") ajax.getParkingList(params).then((res) => { if (res.status === 20000) { setTableData(res.data.list); setTotal(res.data.total); - }else{ - message.error(res.message) + } else { + message.error(res.message); } }); } - useEffect(() => { - // setParkingRecordDetail(tableData[recordIndex]); - setCurrentRecordID(tableData[recordIndex]?.park_id || ""); - }, [recordIndex]); + + useEffect(() => {}, []); return ( <> <TableModule + pagename="充电监控" + pageName={"chargerMonitor"} + mandatory={["plate", "berth_id"]} + mandatory_name={["车牌号或泊位号"]} + total={total} + search={search} columns={columns} tableData={tableData} formSearch={formSearch} - pagename="停车记录查询" - mandatory={['plate','berth_id']} - mandatory_name={['车牌号或泊位号']} - pageName={'parkRecordTotal'} initFormData={initFormData} - total={total} - search={search} - exportUrl="/api/bpm/record/get_record_export" + exportUrl="/api/new_power/records/unlocking" /> - <Modal - open={detailVisible} - width={1500} - className="totalModal" - onCancel={() => { - setDetailVisible(false); - setTabKey("1"); - }} - destroyOnClose - > - <Tabs activeKey={tabKey} onChange={changeKey}> - <Tabs.TabPane tab="停车记录信息" key="1"> - {renderParkRecord(parkingRecordDetail)} - </Tabs.TabPane> - <Tabs.TabPane tab="支付记录" key="2"> - {renderModalTable(payRecordColumns, payRecord)} - </Tabs.TabPane> - <Tabs.TabPane tab="退款订单" key="3"> - {renderModalTable(refundRecordColumns, refundRecord)} - </Tabs.TabPane> - <Tabs.TabPane tab="操作记录" key="4"> - {renderModalTable(operatorRecordColumns, operationRecord)} - </Tabs.TabPane> - <Tabs.TabPane tab="历史处理" key="5"> - {renderModalTable(historyProgressColumns, historyProgressRecord)} - </Tabs.TabPane> - </Tabs> - <Modal - title="异常订单处理记录审核" - visible={historyVisible} - onCancel={() => { - setHistoryVisible(false); - }} - className="hanleHistoyModal" - footer={null} - width={1000} - > - <Table - columns={h_columns} - dataSource={[ - { - park_id: historyDataDetail.park_id, - plate: historyDataDetail.plate, - park_name: historyDataDetail?.road, - in_time: historyDataDetail.in_time, - admission_time: historyDataDetail?.out_time, - }, - ]} - pagination={false} - // className="yisa-table" - /> - <Descriptions title="车场详情"> - <Descriptions.Item label="停车场名称"> - {historyDataDetail?.road} - </Descriptions.Item> - <Descriptions.Item label="区域"> - {historyDataDetail.region} - </Descriptions.Item> - <Descriptions.Item label="商户名称"> - {historyDataDetail.operator} - </Descriptions.Item> - <Descriptions.Item label="泊位号"> - {historyDataDetail.berth_id} - </Descriptions.Item> - <Descriptions.Item label="车场类型"> - {historyDataDetail.road_type} - </Descriptions.Item> - </Descriptions> - <Descriptions title="车辆详情"> - <Descriptions.Item label="车牌号"> - {historyDataDetail.plate} - </Descriptions.Item> - <Descriptions.Item label="停车时长"> - {historyDataDetail.admission_time} - </Descriptions.Item> - <Descriptions.Item label="入场时间"> - {historyDataDetail.in_time} - </Descriptions.Item> - <Descriptions.Item label="出场时间"> - {historyDataDetail.out_time} - </Descriptions.Item> - <Descriptions.Item label="入场记录来源"> - {historyDataDetail.in_source} - </Descriptions.Item> - <Descriptions.Item label="出场记录来源"> - {historyDataDetail.out_source} - </Descriptions.Item> - <Descriptions.Item label="出入场图像"> - <a - onClick={() => { - setPlatePhotoModal(true); - }} - > - 查看 - </a> - </Descriptions.Item> - </Descriptions> - <Descriptions title="订单详情"> - <Descriptions.Item label="订单金额"> - {historyDataDetail.order_amount} - </Descriptions.Item> - <Descriptions.Item label="优惠总计"> - {historyDataDetail.preferential_total} - </Descriptions.Item> - <Descriptions.Item label="实付总计"> - {historyDataDetail.actual_amount} - </Descriptions.Item> - <Descriptions.Item label="欠费总计"> - {historyDataDetail.arrears_mount} - </Descriptions.Item> - </Descriptions> - <Descriptions - title="流程查看" - extra={ - isShowAll ? ( - <a - onClick={() => { - setIsShowAll(false); - }} - > - 返回 - </a> - ) : ( - <a - onClick={() => { - setIsShowAll(true); - }} - > - 查看全部 - </a> - ) - } - > - <Descriptions.Item> - <Steps - size="small" - current={2} - items={[ - { - title: "发起处理", - }, - { - title: "申诉审核", - }, - ]} - /> - </Descriptions.Item> - </Descriptions> - {isShowAll ? ( - <Descriptions title="流程记录"> - <Descriptions.Item> - <div className="ltc-box-title"> - <div className="ltc-icon"></div>流程记录 - </div> - <div style={{ width: "450px" }}> - <Timeline mode={"left"}> - <Timeline.Item - label={getHistoryData.examine_time?.split(" ")[0]} - > - <div> - <div>申诉处理审核: 已完成</div> - <div - style={{ - display: "flex", - width: "450px", - justifyContent: "space-between", - }} - > - <div>{getHistoryData.examine_time}</div> - <div>来源:平台</div> - <div>操作人:{getHistoryData.dealer}</div> - </div> - </div> - </Timeline.Item> - <Timeline.Item - label={getHistoryData.deal_time?.split(" ")[0]} - > - <div> - <div>申诉处理提审</div> - <div - style={{ - display: "flex", - width: "450px", - justifyContent: "space-between", - }} - > - <div> - <div>操作项</div> - <div> - {getHistoryData?.change_content == 1 - ? "调整出场时间" - : getHistoryData?.change_content == 2 - ? "变更车牌号" - : getHistoryData?.change_content == 3 - ? "更改订单金额" - : getHistoryData?.change_content == 4 - ? "免费该订单" - : "作废该订单"} - </div> - <div>{getHistoryData.deal_time}</div> - </div> - <div> - <div>初始值</div> - <div>{getHistoryData.initial_value || "--"}</div> - <div>来源:平台</div> - </div> - <div> - <div>变更值</div> - <div>{getHistoryData.update_value || "--"}</div> - <div>{getHistoryData.dealer}</div> - </div> - </div> - </div> - </Timeline.Item> - </Timeline> - </div> - </Descriptions.Item> - </Descriptions> - ) : ( - <Descriptions title="异常订单处理"> - <Descriptions.Item span={3}> - <Descriptions title="处理理由"> - <Descriptions.Item> - <TextArea disabled value={getHistoryData?.deal_reason} /> - </Descriptions.Item> - </Descriptions> - </Descriptions.Item> - <Descriptions.Item> - <Descriptions title="处理方式"> - <Descriptions.Item label="更改项"> - <div style={{ width: "200px" }}> - <Input - disabled - value={ - getHistoryData?.change_content == 1 - ? "调整出场时间" - : getHistoryData?.change_content == 2 - ? "变更车牌号" - : getHistoryData?.change_content == 3 - ? "更改订单金额" - : getHistoryData?.change_content == 4 - ? "免费该订单" - : "作废该订单" - } - ></Input> - </div> - </Descriptions.Item> - {getHistoryData.change_content == 1 ? ( - <> - <Descriptions.Item label="调整基于"> - <div style={{ width: "240px" }}> - <Select - disabled - style={{ - width: 140, - }} - defaultValue={ - getHistoryData?.update_value.indexOf(" ") > -1 - ? "1" - : "2" - } - options={[ - { - value: "1", - label: "具体时间日期", - }, - { - value: "2", - label: "记录入场时间", - }, - ]} - /> - </div> - </Descriptions.Item> - <Descriptions.Item label="时间"> - <div style={{ width: "240px" }}> - <Input - disabled - placeholder={getHistoryData.update_value} - ></Input> - </div> - </Descriptions.Item> - </> - ) : getHistoryData.change_content == 2 ? ( - <Descriptions.Item label="车牌号"> - <div style={{ width: "40px", display: "inline-block" }}> - <Input - disabled - placeholder={getHistoryData.plate_type} - ></Input> - </div> - <div style={{ width: "150px", display: "inline-block" }}> - <Input - disabled - placeholder={getHistoryData.update_value} - ></Input> - </div> - </Descriptions.Item> - ) : getHistoryData.change_content == 3 ? ( - <> - <Descriptions.Item label="增/减"> - <div style={{ width: "200px" }}> - <Select - disabled - defaultValue={ - getHistoryData.update_value > 0 ? "1" : "2" - } - options={[ - { - value: "1", - label: "增", - }, - { - value: "2", - label: "减", - }, - ]} - /> - </div> - </Descriptions.Item> - <Descriptions.Item label="金额"> - <div style={{ width: "200px" }}> - <Input - disabled - placeholder={Math.abs( - getHistoryData.update_value - )} - ></Input> - </div> - </Descriptions.Item> - </> - ) : null} - </Descriptions> - </Descriptions.Item> - </Descriptions> - )} - <Modal - visible={platePhototModal} - onCancel={() => { - setPlatePhotoModal(false); - }} - footer={false} - className="modal-img" - > - <div> - <div className="eae-modal-title"> - <div className="ltc-icon"></div>入场图片 - </div> - <div className="eae-modal-item"> - <div>车辆照片</div> - <Image src={historyDataDetail.in_veh_pic} onError={handleImgError}/> - </div> - <div className="eae-modal-item"> - <div>车牌照片</div> - <Image src={historyDataDetail.in_plate_pic} onError={handleImgError}/> - </div> - </div> - </Modal> - </Modal> - </Modal> </> ); } diff --git a/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.jsx b/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.jsx index 72ebfc5..53ba0dd 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Unlocking/index.jsx @@ -2,5 +2,5 @@ import React from "react" import loadable from "@loadable/component" import { LoadingImg } from "@/components" -const UnlockingRecord = loadable(() => import("./loadable")) -export default (pros) => <UnlockingRecord {...pros} fallback={<LoadingImg />} /> \ No newline at end of file +const Unlocking = loadable(() => import("./loadable")) +export default (pros) => <Unlocking {...pros} fallback={<LoadingImg />} /> \ No newline at end of file diff --git a/src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx index 55710d7..b1907fd 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx @@ -21,10 +21,10 @@ import { TableModule } from "@/components"; import "./index.scss"; const { TextArea } = Input; - -function UnlockingRecord() { +// 开锁记录 +function Unlocking() { // 详情弹窗 - const [detailVisible, setDetailVisible] = useState(false); + // const [detailVisible, setDetailVisible] = useState(false); // 列表数据 const [tableData, setTableData] = useState([]); // 数据总数 @@ -33,91 +33,86 @@ function UnlockingRecord() { const [detailData, setDetailData] = useState({}); // 初始搜索条件 const initFormData = { - operator: "0", + tel_number: "", rule_name: "", }; const formSearch = [ { - name: "tel_number", + name: "tel", type: "Input", - label: "手机号", - placeholder: "请输入手机号", + label: "用户手机号", + placeholder: "请输入", }, { - name: "tel_number", + name: "charging_station", type: "Input", label: "充电站", - placeholder: "请输入充电站", + placeholder: "请输入", }, { - name: "tel_number", + name: "ground_lock_name", type: "Input", label: "地锁名称", - placeholder: "请输入地锁名称", + placeholder: "请输入", }, - { name: "timePeriod", type: "RangePicker", - label: "开锁时间范围", + label: "降锁时间范围", }, - ]; // 搜搜栏 + ]; // 搜索栏 const columns = [ { - title: "运营商名称", - dataIndex: "operator", - key: "operator", + title: "用户手机号", + dataIndex: "tel", + key: "tel", align: "center", }, { - title: "规则名称", + title: "车牌号", dataIndex: "plate", key: "plate", align: "center", }, { - title: "规则编码", - dataIndex: "plate_color", - key: "plate_color", + title: "地锁名称", + dataIndex: "ground_lock_name", + key: "ground_lock_name", align: "center", }, { - title: "创建人", - dataIndex: "berth_id", - key: "berth_id", - width: 100, + title: "所在充电站", + dataIndex: "local_charging_station", + key: "local_charging_station", + // width: 100, align: "center", }, { - title: "创建时间", - dataIndex: "in_time", - key: "in_time", + title: "降锁时间", + dataIndex: "lockdown_time", + key: "lockdown_time", align: "center", }, { - title: "操作", - dataIndex: "operation", - key: "operation", + title: "升锁时间", + dataIndex: "unlocking_time", + key: "unlocking_time", align: "center", - fixed: "right", - width: 100, - render: (text, record, index) => { - return ( - <> - <Button type="primary" onClick={() => openModal(index, record)}> - 详情 - </Button> - </> - ) - - }, + // fixed: "right", + // width: 100, + }, + { + title: "开锁方式", + dataIndex: "unlocking_method", + key: "unlocking_method", + align: "center", + // fixed: "right", + // width: 100, }, ]; // 表头 - - // 打开弹窗 const openModal = (index, record) => { setDetailData(record) @@ -126,7 +121,7 @@ function UnlockingRecord() { // 检索 const search = (params) => { - ajax.getParkingList(params).then((res) => { + ajax.recordsInquiry.getUnlockingList(params).then((res) => { if (res.status === 20000) { setTableData(res.data.list); setTotal(res.data.total); @@ -156,14 +151,14 @@ function UnlockingRecord() { columns={columns} tableData={tableData} formSearch={formSearch} - pagename="停车记录查询" - pageName={'AppointmentRecord'} + pagename="开锁记录" + pageName={'unlockingRecord'} initFormData={initFormData} total={total} search={search} exportUrl="/api/bpm/record/get_record_export" /> - <Modal + {/* <Modal open={detailVisible} width={1500} className="totalModal" @@ -173,9 +168,9 @@ function UnlockingRecord() { destroyOnClose > - </Modal> + </Modal> */} </> ); } -export default UnlockingRecord; +export default Unlocking; diff --git a/src/services/NewEnergy/index.js b/src/services/NewEnergy/index.js index 16e16cb..8614653 100644 --- a/src/services/NewEnergy/index.js +++ b/src/services/NewEnergy/index.js @@ -1,7 +1,9 @@ import chargingMgm from './chargingMgm' import realtimeMonitor from './realtimeMonitor' +import recordsInquiry from './recordsInquiry' export default { ...chargingMgm, - ...realtimeMonitor + ...realtimeMonitor, + recordsInquiry, } \ No newline at end of file diff --git a/src/services/NewEnergy/recordsInquiry.js b/src/services/NewEnergy/recordsInquiry.js new file mode 100644 index 0000000..0a9e6a3 --- /dev/null +++ b/src/services/NewEnergy/recordsInquiry.js @@ -0,0 +1,16 @@ +import ajax from "@/config/ajax" + +// 开锁记录查询 +const getUnlockingList = (params) => { + return ajax({ + url: "/api/new_power/records/unlocking", + type: "post", + data: params, + }); +}; + + + +export default { + getUnlockingList, +} \ No newline at end of file From e93900e7f97c2945d24e0394ab32c810be0982c8 Mon Sep 17 00:00:00 2001 From: xingjx <xingjx@yisa.com> Date: Tue, 16 Jan 2024 17:17:14 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix():=E8=B7=AF=E5=A4=96=E6=A6=82=E8=A7=88?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/VideoPlay/index.scss | 7 ++ .../ParkingFalseAlarms/index.scss | 2 +- .../ParkingFalseAlarms/loadable.jsx | 3 +- src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx | 82 +++++++++++++++++++--- src/services/OutRoadMgm/OutRoadOverview.js | 27 +++++++ 5 files changed, 109 insertions(+), 12 deletions(-) diff --git a/src/components/VideoPlay/index.scss b/src/components/VideoPlay/index.scss index bd8fe32..f091abf 100644 --- a/src/components/VideoPlay/index.scss +++ b/src/components/VideoPlay/index.scss @@ -184,3 +184,10 @@ min-height: 400px; } } +.video-play-wrap { + .rm-video { + width: 100%; + height: 100%; + min-height: 400px; + } +} \ No newline at end of file diff --git a/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/index.scss b/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/index.scss index c59bd61..e389afc 100644 --- a/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/index.scss +++ b/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/index.scss @@ -5,7 +5,7 @@ $color-user-list-bg : var(--color-user-list-bg); $color-text : var(--color-text); $color-primary : var(--color-primary); -.parkaly-box { +.parkfalse-box { display: flex; padding-top: 10px; width: 100%; diff --git a/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/loadable.jsx b/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/loadable.jsx index 965fd9c..0ffe3d3 100644 --- a/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/loadable.jsx +++ b/src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/loadable.jsx @@ -379,7 +379,8 @@ function ParkingFalseAlarms() { placeholder="请选择" options={[ { value: "0", label: "全部" }, - { value: "1", label: "地磁设备" } + { value: "1", label: "地磁设备" }, + { value: "2", label: "高位视频" }, ]} value={formData.device_type} onChange={(v) => diff --git a/src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx b/src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx index 5bb374b..f5d535b 100644 --- a/src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx +++ b/src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx @@ -4,13 +4,19 @@ import shouruzonge from "@/assets/images/shouruzonge.png"; import ReactEcharts from "echarts-for-react"; import { useSelector } from "react-redux"; import "./index.scss"; +import { VideoPlay } from "@/components"; import { Select, Tooltip } from "antd"; const OutRoadOverview = () => { const skin = useSelector((state) => { return state.common.skin; }); const textColor = skin == "dark" ? "#fff" : "#000"; - + const [refData, setRefData] = useState("https://sample-videos.com/video123/flv/720/big_buck_bunny_720p_1mb.flv") + const [videoType, setVideoType] = useState('flv') + const [videoRoad, setVideoRoad] = useState([]) + const [roadId, setRoadId] = useState() + const [videoDevice, setVideoDevice] = useState([]) + const [videoPlay, setVideoPlay] = useState('') const [headerNums, setHeaderNums] = useState({ park_num: 0, bowei_num: 0, @@ -270,7 +276,46 @@ const OutRoadOverview = () => { console.error(err); }); } - + //概览-存在监控设备的停车场下拉框 + function getOutRoadVideoRoad() { + ajax + .getOutRoadVideoRoad() + .then((res) => { + if (res.status === 20000) { + setVideoRoad(res.data); + } + }) + .catch((err) => { + console.error(err); + }); + } + //概览-监控设备 + function getOutRoadVideoDevice() { + ajax + .getOutRoadVideoDevice() + .then((res) => { + if (res.status === 20000) { + setVideoDevice(res.data); + } + }) + .catch((err) => { + console.error(err); + }); + } + //查看监控视频 + function getOutRoadVideoPlay() { + ajax + .getOutRoadVideoPlay() + .then((res) => { + if (res.status === 20000) { + setVideoPlay(res.data.url); + handleFlvPlay(res.data.url) + } + }) + .catch((err) => { + console.error(err); + }); + } // 概览-停车收入top5 function getIncomeTop5() { ajax @@ -339,7 +384,14 @@ const OutRoadOverview = () => { }) } - + const videoRef = useRef() + const handleFlvPlay = (e) => { + videoRef.current.closeVideo() + setVideoType("mp4") + //if(videoPlay){ + videoRef.current.changeUrl(e) + //} + } useEffect(() => { getBaseNumber(); getIncomeTop5(); @@ -347,8 +399,13 @@ const OutRoadOverview = () => { getParkingIncome(); getParkingRecord(); getPageConfig(); + getOutRoadVideoRoad(); }, []); - + useEffect(() => { + if(roadId){ + getOutRoadVideoDevice(roadId) + } + }, [roadId]); return ( <div className="OutRoadOverview"> <div id="header"> @@ -473,13 +530,18 @@ const OutRoadOverview = () => { <div> <Select placeholder="请选择停车场" - options={[ - { - label: "青岛停车场", - value: 0, - }, - ]} + value={roadId} + options={videoRoad} + onChange={(e)=>setRoadId(e)} + /> + <Select + placeholder="请选择监控设备" + options={videoDevice} + onChange={(e) => { getOutRoadVideoPlay({ id: e, type: 1 }) }} /> + <div> + <VideoPlay ref={videoRef} videoType={videoType} /> + </div> </div> </div> <div className="right"> diff --git a/src/services/OutRoadMgm/OutRoadOverview.js b/src/services/OutRoadMgm/OutRoadOverview.js index 3c74387..f1e68c0 100644 --- a/src/services/OutRoadMgm/OutRoadOverview.js +++ b/src/services/OutRoadMgm/OutRoadOverview.js @@ -41,10 +41,37 @@ const getOutRoadParkingRecordsInfo = (params) => { data: params, }); }; +///概览-存在监控设备的停车场下拉框 +const getOutRoadVideoRoad = (params) => { + return ajax({ + url: "/api/orp/nvr/video_road", + type: "get", + data: params, + }); +}; +///概览-查指定车场存在的监控设备 +const getOutRoadVideoDevice = (params) => { + return ajax({ + url: "/api/orp/nvr/road_device", + type: "get", + data: params, + }); +}; +///查看监控视频 +const getOutRoadVideoPlay = (params) => { + return ajax({ + url: "/api/orp/nvr/get_video_play", + type: "post", + data: params, + }); +}; export default { getOutRoadBaseInfo, getOutRoadParkingTopInfo, getOutRoadPaymentTopInfo, getOutRoadParkingIncomeInfo, getOutRoadParkingRecordsInfo, + getOutRoadVideoRoad, + getOutRoadVideoDevice, + getOutRoadVideoPlay, }; From cf436d3e3558b26802cf2145e69a74eec1f92a6e Mon Sep 17 00:00:00 2001 From: lisf <lisf@yisa.com> Date: Tue, 16 Jan 2024 17:52:37 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat():=20=E5=85=85=E7=94=B5=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NewEnergy/ChargingMgm/BillingRule/index.scss | 165 ++++--- .../NewEnergy/ChargingMgm/BillingRule/loadable.jsx | 255 ++++++++-- .../NewEnergy/ChargingMgm/OrderRuleMgm/index.scss | 162 ++++--- .../ChargingMgm/OrderRuleMgm/loadable.jsx | 531 ++++++++++++++++----- src/services/NewEnergy/chargingMgm.js | 41 +- src/services/index.js | 4 + 6 files changed, 875 insertions(+), 283 deletions(-) diff --git a/src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss b/src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss index 9a8202a..23f35ce 100644 --- a/src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss +++ b/src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss @@ -171,68 +171,113 @@ $color-primary: var(--color-primary); 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; +.totalModal { + .ruleTitle { + font-size: 16px; + font-weight: 700; + color: #ffffff; } - 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; + .ant-modal-content{ + width: 796px; + } + .modal-form{ + margin: 20px 0 0 0; + .yisa-search{ + margin-bottom: 20px; + label{ + color: #eeeff1; + } + .ant-input-textarea-show-count:after{ + position: absolute; + bottom: 19%; + right: 7%; + } + textarea{ + position: relative; + } + } + } + + + .ant-modal-footer{ + display: flex; + justify-content: center; + .ant-btn{ + width: 88px; + height: 35px; + color: #fff; + border: none; + border-radius: 4px; + } + .ant-btn:last-child{ + background: #409eff; + } } } -.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; +.detail-Modal{ + .ruleTitle { + font-size: 16px; + font-weight: 700; + color: #ffffff; + } + .ltc-content { + display: flex; + flex-wrap: wrap; + margin: auto; + padding: 20px; + color: #ffffff; + .ltc-item { + font-size: 14px; + margin: 6px 12px 6px 0; + display: inline-flex; + flex: 1; + //width: 470px; + .new-item { + display: inline-block; + width: 120px; + height: 32px; + line-height: 32px; + background: rgba(150, 161, 192, 0.24); + text-align: center; + } + + .new-value { + display: inline-block; + width: 320px; + height: 32px; + line-height: 32px; + text-align: center; + background: #3E4557; + box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12); + } + + .ltc-item-input { + display: inline-block; + width: 200px; + } + + div { + width: 150px; + } + } + .last-row{ + width: 100%; + display: flex; + flex-direction: column; + .rule-description{ + .new-item{ + line-height: 96px; + height: 96px; + } + .new-value{ + width: 780px; + line-height: 96px; + height: 96px; + word-wrap:break-word + } + } + } + } + } \ No newline at end of file diff --git a/src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx b/src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx index 4ef6d7b..a9f38d7 100644 --- a/src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx +++ b/src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx @@ -18,55 +18,67 @@ import { import { dictionary } from "@/config/common"; import ajax from "@/services"; import { TableModule } from "@/components"; +import moment from 'moment' import "./index.scss"; const { TextArea } = Input; function BillingRule() { + // 初始搜索条件 + const initFormData = { + operator_id: "0", + rule_name: "", + }; + const params ={ + operator_id:'', + rule_name:'', + rule_code:'', + rule_description:'', + time:moment().format("YYYY-MM-DD HH:mm:ss"), + username:'' + } + // 新增or详细弹框 + const [modalData, setModalData] = useState(params) // 详情弹窗 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 [operatorOption, setOperatorOption] = useState([]) + const [ruleDetailVisible, setRuleDetailVisible] = useState(false) + const [detailsData, setDetailsData] = useState({}) + const tableRef = useRef(null) const columns = [ { title: "运营商名称", - dataIndex: "operator", - key: "operator", + dataIndex: "operator_name", + key: "operator_name", align: "center", }, { title: "规则名称", - dataIndex: "plate", - key: "plate", + dataIndex: "rule_name", + key: "rule_name", align: "center", }, { title: "规则编码", - dataIndex: "plate_color", - key: "plate_color", + dataIndex: "rule_code", + key: "rule_code", align: "center", }, { title: "创建人", - dataIndex: "berth_id", - key: "berth_id", + dataIndex: "creator", + key: "creator", width: 100, align: "center", }, { title: "创建时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "create_time", + key: "create_time", align: "center", }, { @@ -79,9 +91,9 @@ function BillingRule() { render: (text, record, index) => { return ( <> - <Button type="primary" onClick={() => openModal(index, record)}> + <a type="primary" onClick={() => openModal(index, record)}> 详情 - </Button> + </a> </> ) @@ -91,11 +103,12 @@ function BillingRule() { const formSearch = [ { - name: "operator", + name: "operator_id", type: "Select", - label: "商户名称", + label: "运营商名称", defaultValue: "0", - placeholder: "请选择商户名称", + placeholder: "请选择运营商名称", + options:operatorOption.length ? operatorOption : [{value:"0",label:'全部'}] }, { name: "rule_name", @@ -107,21 +120,38 @@ function BillingRule() { name: "timePeriod", type: "RangePicker", label: "时间段", + defaultValue: [moment().subtract(1,"months"), moment()] }, ]; - + // 获取运营商名字 + const getAllOperator =() => { + ajax.getOperatorList().then((res) => { + if (res.status === 20000) { + setOperatorOption(res.data); + } + }); + } // 打开弹窗 const openModal = (index, record) => { - setDetailData(record) - setDetailVisible(true); + setDetailsData(record) + setRuleDetailVisible(true); } // 检索 const search = (params) => { - ajax.getParkingList(params).then((res) => { + console.log("params",params); + let data = { + ...params, + type:1 + } + ajax.getRegularList(data).then((res) => { if (res.status === 20000) { setTableData(res.data.list); setTotal(res.data.total); + setModalData({ + ...modalData, + username:res.data.username, + }) } else { message.error(res.message) } @@ -129,9 +159,43 @@ function BillingRule() { } const handelAdd = () => { + setModalData({ + ...params, + username:modalData?.username + }) setDetailVisible(true) } +// 处理弹框ok按钮 + const handleConfirm = () => { + if(!modalData?.operator_id){ + message.warning("运营商名称不能为空") + return + }else if(!modalData?.rule_name){ + message.warning("规则名称不能为空") + return + }else if(!modalData?.rule_code){ + message.warning("规则编码不能为空") + return + } + // 发保存请求 + ajax.addRule({...modalData,type:1}).then(res => { + if (res.status === 20000) { + message.success(res.message) + tableRef.current.fetch() + setModalData({ + ...params, + username:modalData?.username + }) + setDetailVisible(false) + } + }).catch(err => { + console.log(err); + }) + } + useEffect(() => { + getAllOperator() + },[]) return ( <> <TableModule @@ -146,10 +210,10 @@ function BillingRule() { </Button> } columns={columns} + ref={tableRef} tableData={tableData} formSearch={formSearch} pagename="停车记录查询" - pageName={'billingRule'} initFormData={initFormData} total={total} search={search} @@ -157,14 +221,145 @@ function BillingRule() { /> <Modal open={detailVisible} - width={1500} + width={650} className="totalModal" onCancel={() => { + setModalData({...params,username:modalData?.username}) + setDetailVisible(false); + }} + onOk={() => { + handleConfirm() setDetailVisible(false); }} + okText="保存" destroyOnClose > - + <div className="ruleTitle"> + <span className="font">新增规则</span> + </div> + <div className="modal-form"> + <div className="yisa-search"> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>运营商名称</label> + <Select + value={modalData.operator_id} + style={{ width: 660, marginLeft: 10 }} + options={operatorOption} + onChange={(v) => {setModalData({...modalData,operator_id:v})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:13}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>规则名称</label> + <Input + placeholder="请输入名称" + value={modalData.rule_name} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + onChange={(v) => {setModalData({...modalData,rule_name:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:13}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>规则编码</label> + <Input + placeholder="请输入编码" + value={modalData.rule_code} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + onChange={(v) => {setModalData({...modalData,rule_code:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:26}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>创建人</label> + <Input + placeholder="请输入创建人" + value={modalData.username} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + disabled + // onChange={(v) => {setModalData({...modalData,creator:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:12}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>创建时间</label> + <Input + placeholder="请输入创建时间" + value={modalData.time} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + disabled + // onChange={(v) => {setModalData({...modalData,creat_time:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{display:"flex",marginLeft:13}}> + <label>规则描述</label> + <TextArea + showCount + placeholder="请输入规则描述" + value={modalData.rule_description} + style={{ width: 660,height:80, marginLeft: 7 }} + onChange={(v)=> setModalData({...modalData,rule_description:v.target.value})} + maxLength={200} + /> + </div> + </div> + </Modal> + <Modal + open={ruleDetailVisible} + width={1000} + className="detail-Modal" + footer={null} + destroyOnClose + onCancel={() => { + setRuleDetailVisible(false); + }} + > + <div className="ruleTitle"> + <span className="font">新增规则</span> + </div> + <div className="ltc-content"> + <div className="ltc-item"> + <div className="new-item">运营商名称</div> + <div className="new-value"> + {detailsData?.operator_name || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">规则名称</div> + <div className="new-value"> + {detailsData?.rule_name || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">规则编码</div> + <div className="new-value"> + {detailsData?.rule_code || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">创建人</div> + <div className="new-value"> + {detailsData?.creator || "--"} + </div> + </div> + <div className="last-row"> + <div className="ltc-item"> + <div className="new-item">创建时间</div> + <div className="new-value"> + {detailsData?.create_time || "--"} + </div> + </div> + <div className="ltc-item rule-description" > + <div className="new-item">规则描述</div> + <div className="new-value"> + {detailsData?.rule_description || "--"} + </div> + </div> + </div> + </div> </Modal> </> ); diff --git a/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss b/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss index 9a8202a..9a67b18 100644 --- a/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss +++ b/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss @@ -171,68 +171,110 @@ $color-primary: var(--color-primary); 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; + +.totalModal { + .ruleTitle { + font-size: 16px; + font-weight: 700; + color: #ffffff; } - 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; + .ant-modal-content{ + width: 796px; + } + .modal-form{ + margin: 20px 0 0 0; + .yisa-search{ + margin-bottom: 20px; + label{ + color: #eeeff1; + } + .ant-input-textarea-show-count:after{ + position: absolute; + bottom: 19%; + right: 7%; + } + textarea{ + position: relative; + } + } + } + + + .ant-modal-footer{ + display: flex; + justify-content: center; + .ant-btn{ + width: 88px; + height: 35px; + color: #fff; + border: none; + border-radius: 4px; + } + .ant-btn:last-child{ + background: #409eff; + } } } -.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; +.detail-Modal{ + .ruleTitle { + font-size: 16px; + font-weight: 700; + color: #ffffff; + } + .ltc-content { + display: flex; + flex-wrap: wrap; + margin: auto; + padding: 20px; + color: #ffffff; + .ltc-item { + font-size: 14px; + margin: 6px 12px 6px 0; + display: inline-flex; + flex: 1; + //width: 470px; + .new-item { + display: inline-block; + width: 120px; + height: 32px; + line-height: 32px; + background: rgba(150, 161, 192, 0.24); + text-align: center; + } + + .new-value { + display: inline-block; + width: 320px; + height: 32px; + line-height: 32px; + text-align: center; + background: #3E4557; + box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12); + } + + .ltc-item-input { + display: inline-block; + width: 200px; + } + + div { + width: 150px; + } + } + .rule-description{ + .new-item{ + line-height: 96px; + height: 96px; + } + .new-value{ + width: 780px; + line-height: 96px; + height: 96px; + word-wrap:break-word + } + } + + } + } \ No newline at end of file diff --git a/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx b/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx index cf801d2..bb53a4a 100644 --- a/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx +++ b/src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx @@ -13,161 +13,428 @@ import { Select, Image, Timeline, - Popover + Popover, + Popconfirm } from "antd"; import { dictionary } from "@/config/common"; import ajax from "@/services"; import { TableModule } from "@/components"; +import moment from 'moment' import "./index.scss"; const { TextArea } = Input; - function OrderRuleMgm() { - // 详情弹窗 - const [detailVisible, setDetailVisible] = useState(false); - // 列表数据 - const [tableData, setTableData] = useState([]); - // 数据总数 - const [total, setTotal] = useState(0); - // 详情数据 - const [detailData, setDetailData] = useState({}); // 初始搜索条件 - const initFormData = { - operator: "0", +const initFormData = { + operator_id: "0", rule_name: "", }; +const params ={ + operator_id:'', + rule_name:'', + rule_code:'', + rule_description:'', + time:moment().format("YYYY-MM-DD HH:mm:ss"), + username:'', + status:1, +} +// 新增or详细弹框 +const [modalData, setModalData] = useState(params) +// 详情弹窗 +const [detailVisible, setDetailVisible] = useState(false); +// 列表数据 +const [tableData, setTableData] = useState([]); +// 数据总数 +const [total, setTotal] = useState(0); +const [operatorOption, setOperatorOption] = useState([]) +const [ruleDetailVisible, setRuleDetailVisible] = useState(false) +const [detailsData, setDetailsData] = useState({}) +const tableRef = useRef(null) +const columns = [ + { + title: "运营商名称", + dataIndex: "operator_name", + key: "operator_name", + align: "center", + }, + { + title: "规则名称", + dataIndex: "rule_name", + key: "rule_name", + align: "center", + }, + { + title: "规则编码", + dataIndex: "rule_code", + key: "rule_code", + align: "center", + }, + { + title: "创建人", + dataIndex: "creator", + key: "creator", + width: 100, + align: "center", + }, + { + title: "规则状态", + dataIndex: "status", + key: "status", + width: 100, + align: "center", + render:(_,record) => { + return( + <span style={ + { + color:record ?.status ? "#2ADC41" : "#EC5761"} + } + > + {record?.status ? "正常" : "停用"}</span> + ) + } + }, + { + title: "创建时间", + dataIndex: "create_time", + key: "create_time", + align: "center", + }, + { + title: "操作", + dataIndex: "operation", + key: "operation", + align: "center", + fixed: "right", + width: 100, + render: (text, record, index) => { + return ( + <div style={{display:"flex",cursor:"pointer"}}> + <div style={{color:"#3AA9FF"}} onClick={() => openModal(index, record)}> + 详情 + </div> + <div + style={{marginLeft:10,color:record ?.status ? "#EC5761" : "#2ADC41"}} + > + <Popconfirm + placement="left" + title={record?.status ? "是否停用该规则" : "是否启动该规则"} + onConfirm={() => { handleRuleStatus(record?.id,record?.status ? 0 : 1) }} + okText="是" + cancelText="否"> + {record?.status ? "停用" : "启动"} + </Popconfirm> + + </div> + </div> + ) - 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 formSearch = [ + { + name: "operator_id", + type: "Select", + label: "运营商名称", + defaultValue: "0", + placeholder: "请选择运营商名称", + options:operatorOption.length ? operatorOption : [{value:"0",label:'全部'}] + }, + { + name: "rule_name", + type: "Input", + label: "规则名称", + placeholder: "请输入出场收费员", + }, + { + name: "timePeriod", + type: "RangePicker", + label: "时间段", + defaultValue: [moment().subtract(1,"months"), moment()] + }, +]; + // 更新规则状态 + const handleRuleStatus = (id,status) => { + ajax.updataRule({id,status}).then((res) => { + if (res.status == 20000) { + message.success(res.message) + tableRef.current.fetch() + }else{ + message.success(res.message) + } + }).catch(e => { + console.log(e); + }); + } - // 检索 - const search = (params) => { - ajax.getParkingList(params).then((res) => { + // 获取运营商名字 + const getAllOperator =() => { + ajax.getOperatorList().then((res) => { if (res.status === 20000) { - setTableData(res.data.list); - setTotal(res.data.total); - } else { - message.error(res.message) + setOperatorOption(res.data); + }else{ + setOperatorOption([]) } + }).catch(e => { + console.log(e); }); } +// 打开弹窗 +const openModal = (index, record) => { + setDetailsData(record) + setRuleDetailVisible(true); +} - const handelAdd = () => { - setDetailVisible(true) +// 检索 +const search = (params) => { + let data = { + ...params, + type:2 } + ajax.getRegularList(data).then((res) => { + if (res.status === 20000) { + setTableData(res.data.list); + setTotal(res.data.total); + setModalData({ + ...modalData, + username:res.data.username, + }) + } else { + message.error(res.message) + } + }); +} - return ( - <> - <TableModule - showSerial={true} - isExport={false} - diyButton={ - <Button - type="primary" - onClick={handelAdd} - > - 新增 - </Button> - } - columns={columns} - tableData={tableData} - formSearch={formSearch} - pagename="停车记录查询" - pageName={'orderRuleMgm'} - initFormData={initFormData} - total={total} - search={search} - exportUrl="/api/bpm/record/get_record_export" - /> - <Modal - open={detailVisible} - width={1500} - className="totalModal" - onCancel={() => { - setDetailVisible(false); - }} - destroyOnClose - > +const handelAdd = () => { + setModalData({ + ...params, + username:modalData?.username + }) + setDetailVisible(true) +} - </Modal> - </> - ); +// 处理弹框ok按钮 +const handleConfirm = () => { + if(!modalData?.operator_id){ + message.warning("运营商名称不能为空") + return + }else if(!modalData?.rule_name){ + message.warning("规则名称不能为空") + return + }else if(!modalData?.rule_code){ + message.warning("规则编码不能为空") + return + } + // 发保存请求 + ajax.addRule({...modalData,type:2}).then(res => { + if (res.status === 20000) { + message.success(res.message) + tableRef.current.fetch() + setModalData({ + ...params, + username:modalData?.username + }) + setDetailVisible(false) + } + }).catch(err => { + console.log(err); + }) +} +useEffect(() => { + getAllOperator() +},[]) +return ( + <> + <TableModule + showSerial={true} + isExport={false} + diyButton={ + <Button + type="primary" + onClick={handelAdd} + > + 新增 + </Button> + } + columns={columns} + ref={tableRef} + tableData={tableData} + formSearch={formSearch} + pagename="停车记录查询" + initFormData={initFormData} + total={total} + search={search} + exportUrl="/api/bpm/record/get_record_export" + /> + <Modal + open={detailVisible} + width={650} + className="totalModal" + onCancel={() => { + setModalData({...params,username:modalData?.username}) + setDetailVisible(false); + }} + onOk={() => { + handleConfirm() + setDetailVisible(false); + }} + okText="保存" + destroyOnClose + > + <div className="ruleTitle"> + <span className="font">新增规则</span> + </div> + <div className="modal-form"> + <div className="yisa-search"> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>运营商名称</label> + <Select + value={modalData.operator_id} + style={{ width: 660, marginLeft: 10 }} + options={operatorOption} + onChange={(v) => {setModalData({...modalData,operator_id:v})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:13}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>规则名称</label> + <Input + placeholder="请输入名称" + value={modalData.rule_name} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + onChange={(v) => {setModalData({...modalData,rule_name:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:13}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>规则编码</label> + <Input + placeholder="请输入编码" + value={modalData.rule_code} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + onChange={(v) => {setModalData({...modalData,rule_code:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:26}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>创建人</label> + <Input + placeholder="请输入创建人" + value={modalData.username} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + disabled + // onChange={(v) => {setModalData({...modalData,creator:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:12}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>创建时间</label> + <Input + placeholder="请输入创建时间" + value={modalData.time} + style={{ width: 660, marginLeft: 10 }} + maxLength={30} + disabled + // onChange={(v) => {setModalData({...modalData,creat_time:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{marginLeft:12}}> + <em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em> + <label>规则状态</label> + <Select + value={modalData.status} + style={{ width: 660, marginLeft: 10 }} + options={[ + { + value:1, + label:'正常' + }, + { + value:0, + label:'停用' + } + ]} + // onChange={(v) => {setModalData({...modalData,creat_time:v.target.value})}} + /> + </div> + <div className="yisa-search" style={{display:"flex",marginLeft:13}}> + <label>规则描述</label> + <TextArea + showCount + placeholder="请输入规则描述" + value={modalData.rule_description} + style={{ width: 660,height:80, marginLeft: 7 }} + onChange={(v)=> setModalData({...modalData,rule_description:v.target.value})} + maxLength={200} + /> + </div> + </div> + </Modal> + <Modal + open={ruleDetailVisible} + width={1000} + className="detail-Modal" + footer={null} + destroyOnClose + onCancel={() => { + setRuleDetailVisible(false); + }} + > + <div className="ruleTitle"> + <span className="font">新增规则</span> + </div> + <div className="ltc-content"> + <div className="ltc-item"> + <div className="new-item">运营商名称</div> + <div className="new-value"> + {detailsData?.operator_name || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">规则名称</div> + <div className="new-value"> + {detailsData?.rule_name || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">规则编码</div> + <div className="new-value"> + {detailsData?.rule_code || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">创建人</div> + <div className="new-value"> + {detailsData?.creator || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">创建时间</div> + <div className="new-value"> + {detailsData?.create_time || "--"} + </div> + </div> + <div className="ltc-item"> + <div className="new-item">规则状态</div> + <div className="new-value"> + {detailsData?.status || "--"} + </div> + </div> + <div className="ltc-item rule-description" > + <div className="new-item">规则描述</div> + <div className="new-value"> + {detailsData?.rule_description || "--"} + </div> + </div> + + </div> + </Modal> + </> +); } export default OrderRuleMgm; diff --git a/src/services/NewEnergy/chargingMgm.js b/src/services/NewEnergy/chargingMgm.js index 3f5f566..545330d 100644 --- a/src/services/NewEnergy/chargingMgm.js +++ b/src/services/NewEnergy/chargingMgm.js @@ -9,6 +9,45 @@ const getWechatMenuList = (params) => { }); }; +// 获取运营商下拉 +const getOperatorList = (params) => { + return ajax({ + url: "/api/nes/rule/operator", + type: "get", + data: params, + }); +}; + +// 获取规则列表 +const getRegularList = (params) => { + return ajax({ + url: "/api/nes/rule/list", + type: "post", + data: params, + }); +}; + +// 新增规则 +const addRule = (params) => { + return ajax({ + url: "/api/nes/rule/add", + type: "post", + data: params, + }); +}; + +// 更新规则状态 +const updataRule = (params) => { + return ajax({ + url: "/api/nes/rule/update", + type: "post", + data: params, + }); +}; export default{ - getWechatMenuList + getWechatMenuList, + getOperatorList, + getRegularList, + addRule, + updataRule } \ No newline at end of file diff --git a/src/services/index.js b/src/services/index.js index abcce60..aeceee3 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -23,7 +23,11 @@ import FinancialMgm from "./FinancialMgm"; import DataAnalysisPrediction from "./DataAnalysisPrediction"; import ParkingOverview from "./ParkingOverview"; import OffPeak from "./OffPeak"; +<<<<<<< Updated upstream import NewEnergy from "./NewEnergy"; +======= +import NewEnergy from "./NewEnergy" +>>>>>>> Stashed changes const api = {}; export default { ...api, From 70fa33d41f5447fe9f39c7581dae5971aea96929 Mon Sep 17 00:00:00 2001 From: lisf <lisf@yisa.com> Date: Tue, 16 Jan 2024 17:58:10 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix():=20=E8=A7=A3=E5=86=B3=E5=86=B2?= =?UTF-8?q?=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/index.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/services/index.js b/src/services/index.js index aeceee3..abcce60 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -23,11 +23,7 @@ import FinancialMgm from "./FinancialMgm"; import DataAnalysisPrediction from "./DataAnalysisPrediction"; import ParkingOverview from "./ParkingOverview"; import OffPeak from "./OffPeak"; -<<<<<<< Updated upstream import NewEnergy from "./NewEnergy"; -======= -import NewEnergy from "./NewEnergy" ->>>>>>> Stashed changes const api = {}; export default { ...api, From ba6ffa6b5b17d7192687e418ba842cd1c45976a9 Mon Sep 17 00:00:00 2001 From: zhugy <zhugy@yisa.com> Date: Tue, 16 Jan 2024 17:59:28 +0800 Subject: [PATCH 7/7] =?UTF-8?q?fix():=E4=BF=AE=E6=94=B9=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RecordsInquiry/Appointment/loadable.jsx | 76 ++++++++++---------- .../NewEnergy/RecordsInquiry/Charge/loadable.jsx | 66 ++++++++--------- .../RecordsInquiry/Violation/loadable.jsx | 83 ++++++++++++++-------- src/services/NewEnergy/recordsInquiry.js | 39 ++++++++++ src/services/index.js | 4 -- 5 files changed, 162 insertions(+), 106 deletions(-) diff --git a/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx index 8bccff3..e097605 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx @@ -27,8 +27,8 @@ function Appointment() { const columns = [ { title: "用户手机号", - dataIndex: "operator", - key: "operator", + dataIndex: "phone", + key: "phone", align: "center", }, { @@ -39,62 +39,62 @@ function Appointment() { }, { title: "充电站", - dataIndex: "plate_color", - key: "plate_color", + dataIndex: "station", + key: "station", align: "center", }, { title: "商户名称", - dataIndex: "berth_id", - key: "berth_id", + dataIndex: "operator", + key: "operator", align: "center", }, { - title: "降预约开始时间", - dataIndex: "in_time", - key: "in_time", + title: "预约开始时间", + dataIndex: "pre_start_time", + key: "start_time", align: "center", }, { title: "预约截至时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "pre_end_time", + key: "end_time", align: "center", }, { title: "缴纳预约费用金额", - dataIndex: "in_time", - key: "in_time", + dataIndex: "pre_money", + key: "pre_money", align: "center", }, { title: "缴费时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "pay_time", + key: "pay_time", align: "center", }, { title: "订单状态", - dataIndex: "in_time", - key: "in_time", + dataIndex: "order_status", + key: "order_status", align: "center", }, { title: "订单完结时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "finish_time", + key: "finish_time", align: "center", }, { title: "预约费用退款金额", - dataIndex: "in_time", - key: "in_time", + dataIndex: "refund_money", + key: "refund_money", align: "center", }, { title: "顶动感实收金额", - dataIndex: "in_time", - key: "in_time", + dataIndex: "pay_money", + key: "pay_money", align: "center", }, { @@ -131,7 +131,7 @@ function Appointment() { placeholder: "请输入车牌号", }, { - name: "charging", + name: "station", type: "Input", label: "充电站", placeholder: "请输入充电站", @@ -144,12 +144,12 @@ function Appointment() { placeholder: "请选择商户名称", }, { - name: "timeStart", + name: "pre_time", type: "DateRangePicker", label: "预约开始时间", }, { - name: "timeEnd", + name: "end_time", type: "DateRangePicker", label: "订单完结时间", }, @@ -163,10 +163,10 @@ function Appointment() { // 检索 const search = (params) => { - ajax.getParkingList(params).then((res) => { + ajax.recordsInquiry.getAppointmentList(params).then((res) => { if (res.status === 20000) { - setTableData(res.data.list); - setTotal(res.data.total); + setTableData(res.data); + setTotal(res.total); } else { message.error(res.message) } @@ -182,19 +182,19 @@ function Appointment() { <TableModule showSerial={true} isExport={false} - diyButton={ - <Button - type="primary" - onClick={handelAdd} - > - 新增 - </Button> - } + // diyButton={ + // <Button + // type="primary" + // onClick={handelAdd} + // > + // 新增 + // </Button> + // } columns={columns} tableData={tableData} formSearch={formSearch} pagename="预约订单" - pageName={'Appointment'} + pageName={'appointment'} initFormData={initFormData} total={total} search={search} diff --git a/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx index 0530080..299e0e4 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx @@ -27,56 +27,56 @@ function Charge() { const columns = [ { title: "充电订单号", - dataIndex: "operator", - key: "operator", + dataIndex: "order_id", + key: "order_id", align: "center", }, { title: "充电站", - dataIndex: "plate", - key: "plate", + dataIndex: "name", + key: "name", align: "center", }, { title: "充电电量", - dataIndex: "plate_color", - key: "plate_color", + dataIndex: "capacity", + key: "capacity", align: "center", }, { title: "电费", - dataIndex: "berth_id", - key: "berth_id", + dataIndex: "electric", + key: "electric", align: "center", }, { title: "充电服务费", - dataIndex: "in_time", - key: "in_time", + dataIndex: "service_fee", + key: "service_fee", align: "center", }, { title: "充电收入", - dataIndex: "in_time", - key: "in_time", + dataIndex: "income", + key: "income", align: "center", }, { title: "充电开始时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "start_time", + key: "start_time", align: "center", }, { title: "充电结束时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "end_time", + key: "end_time", align: "center", }, { title: "充电时长", - dataIndex: "in_time", - key: "in_time", + dataIndex: "duration", + key: "duration", align: "center", }, { @@ -86,34 +86,34 @@ function Charge() { align: "center", fixed: "right", width: 100, - render: (text, record, index) => { - return ( - <> - <Button type="primary" onClick={() => openModal(index, record)}> - 详情 - </Button> - </> - ) + // render: (text, record, index) => { + // return ( + // <> + // <Button type="primary" onClick={() => openModal(index, record)}> + // 详情 + // </Button> + // </> + // ) - }, + // }, }, ]; const formSearch = [ { - name: "phone", + name: "name", type: "Input", label: "充电站名称", placeholder: "请输入充电站名称", }, { - name: "plate", + name: "order_id", type: "Input", label: "订单编号", placeholder: "请输入订单编号", }, { - name: "timeStart", + name: "start_time", type: "DateRangePicker", label: "充电开始时间", }, @@ -127,10 +127,10 @@ function Charge() { // 检索 const search = (params) => { - ajax.getParkingList(params).then((res) => { + ajax.recordsInquiry.getChargeList(params).then((res) => { if (res.status === 20000) { - setTableData(res.data.list); - setTotal(res.data.total); + setTableData(res.data); + setTotal(res.total); } else { message.error(res.message) } diff --git a/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx b/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx index d1fa6ae..206eb04 100644 --- a/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx +++ b/src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx @@ -14,6 +14,8 @@ function Violation() { const [detailVisible, setDetailVisible] = useState(false); // 列表数据 const [tableData, setTableData] = useState([]); + // 违规类型下拉 + const [typeList, setTypeList] = useState([]); // 数据总数 const [total, setTotal] = useState(0); // 详情数据 @@ -27,8 +29,8 @@ function Violation() { const columns = [ { title: "用户手机号", - dataIndex: "operator", - key: "operator", + dataIndex: "phone", + key: "phone", align: "center", }, { @@ -39,20 +41,20 @@ function Violation() { }, { title: "充电站", - dataIndex: "plate_color", - key: "plate_color", + dataIndex: "name", + key: "name", align: "center", }, { title: "违规类型", - dataIndex: "berth_id", - key: "berth_id", + dataIndex: "type", + key: "type", align: "center", }, { title: "记录创建时间", - dataIndex: "in_time", - key: "in_time", + dataIndex: "create_time", + key: "create_time", align: "center", }, { @@ -62,16 +64,16 @@ function Violation() { align: "center", fixed: "right", width: 100, - render: (text, record, index) => { - return ( - <> - <Button type="primary" onClick={() => openModal(index, record)}> - 详情 - </Button> - </> - ) + // render: (text, record, index) => { + // return ( + // <> + // <Button type="primary" onClick={() => openModal(index, record)}> + // 详情 + // </Button> + // </> + // ) - }, + // }, }, ]; @@ -89,25 +91,40 @@ function Violation() { placeholder: "请输入车牌号", }, { - name: "charging", + name: "name", type: "Input", label: "充电站", placeholder: "请输入充电站", }, { - name: "operator", + name: "type", type: "Select", label: "违规类型", + options: typeList, defaultValue: "0", placeholder: "请选择违规类型", }, { - name: "timeStart", + name: "create_time", type: "DateRangePicker", label: "记录创建时间", }, ]; + // 获取站点状态下拉 + const getSelect = () => { + ajax.recordsInquiry.getViolationSelect().then((res) => { + const { status, data } = res + if (status === 20000) { + if (data && data.length) { + setTypeList(data); + } + } else { + message.error(res.message) + } + }); + } + // 打开弹窗 const openModal = (index, record) => { setDetailData(record) @@ -116,10 +133,10 @@ function Violation() { // 检索 const search = (params) => { - ajax.getParkingList(params).then((res) => { + ajax.recordsInquiry.getViolationList(params).then((res) => { if (res.status === 20000) { - setTableData(res.data.list); - setTotal(res.data.total); + setTableData(res.data); + setTotal(res.total); } else { message.error(res.message) } @@ -130,6 +147,10 @@ function Violation() { setDetailVisible(true) } + useEffect(() => { + getSelect() + }, []) + return ( @@ -137,14 +158,14 @@ function Violation() { <TableModule showSerial={true} isExport={false} - diyButton={ - <Button - type="primary" - onClick={handelAdd} - > - 新增 - </Button> - } + // diyButton={ + // <Button + // type="primary" + // onClick={handelAdd} + // > + // 新增 + // </Button> + // } columns={columns} tableData={tableData} formSearch={formSearch} diff --git a/src/services/NewEnergy/recordsInquiry.js b/src/services/NewEnergy/recordsInquiry.js index 0a9e6a3..ad7d276 100644 --- a/src/services/NewEnergy/recordsInquiry.js +++ b/src/services/NewEnergy/recordsInquiry.js @@ -9,8 +9,47 @@ const getUnlockingList = (params) => { }); }; +// 预约记录查询 +const getAppointmentList = (params) => { + return ajax({ + url: "/api/new_power/records/appointment_list", + type: "post", + data: params, + }); +}; + +// 充电记录查询 +const getChargeList = (params) => { + return ajax({ + url: "/api/new_power/records/charge_list", + type: "post", + data: params, + }); +}; + +// 违规记录查询 +const getViolationList = (params) => { + return ajax({ + url: "/api/new_power/records/violation_list", + type: "post", + data: params, + }); +}; + +// 违规类型下拉 +const getViolationSelect = (params) => { + return ajax({ + url: "/api/new_power/records/violation_select", + type: "get", + data: params, + }); +}; export default { getUnlockingList, + getAppointmentList, + getChargeList, + getViolationList, + getViolationSelect } \ No newline at end of file diff --git a/src/services/index.js b/src/services/index.js index aeceee3..abcce60 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -23,11 +23,7 @@ import FinancialMgm from "./FinancialMgm"; import DataAnalysisPrediction from "./DataAnalysisPrediction"; import ParkingOverview from "./ParkingOverview"; import OffPeak from "./OffPeak"; -<<<<<<< Updated upstream import NewEnergy from "./NewEnergy"; -======= -import NewEnergy from "./NewEnergy" ->>>>>>> Stashed changes const api = {}; export default { ...api,