18 changed files with 671 additions and 102 deletions
-
11public/static/css/antd.dark.min.css
-
4src/components/layout/SideBar/index.jsx
-
1src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/index.scss
-
13src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx
-
9src/pages/OperationCenter/OperationSales/CouponMgm/WriteOffDetail/loadable.jsx
-
6src/pages/OperationCenter/OperationSales/CouponMgm/WriteOffStat/loadable.jsx
-
4src/pages/SystemMgm/BusinessConfig/HotCbdConf/index.scss
-
191src/pages/SystemMgm/BusinessConfig/HotCbdConf/loadable.jsx
-
14src/pages/SystemMgm/BusinessConfig/PageConf/index.scss
-
114src/pages/SystemMgm/BusinessConfig/PageConf/loadable.jsx
-
6src/pages/SystemMgm/BusinessConfig/PdaArrearConf/index.jsx
-
18src/pages/SystemMgm/BusinessConfig/PdaArrearConf/index.scss
-
56src/pages/SystemMgm/BusinessConfig/PdaArrearConf/loadable.jsx
-
67src/pages/SystemMgm/BusinessConfig/VacationConf/index.scss
-
124src/pages/SystemMgm/BusinessConfig/VacationConf/loadable.jsx
-
5src/pages/SystemMgm/BusinessConfig/index.jsx
-
18src/router/router.config.js
-
112src/services/SystemMgm/BusinessConf/index.js
@ -1,15 +1,115 @@ |
|||||
import React, { useState, useRef, useEffect } from "react"; |
import React, { useState, useRef, useEffect } from "react"; |
||||
// import { message, Pagination, Table, Space, Modal, } from "antd"; |
|
||||
// import { dictionary, utils } from "@/config/common"; |
|
||||
|
import { message, Pagination, Table, Modal,Button , Switch } from "antd"; |
||||
|
import { dictionary, utils } from "@/config/common"; |
||||
// import moment from 'moment' |
// import moment from 'moment' |
||||
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; |
|
||||
// import ajax from "@/services" |
|
||||
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components" |
|
||||
// import "./index.scss"; |
|
||||
|
import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; |
||||
|
import ajax from "@/services" |
||||
|
import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components" |
||||
|
import "./index.scss"; |
||||
// import errorImg from "@/assets/images/layout/error.png" |
// import errorImg from "@/assets/images/layout/error.png" |
||||
// import { useLocation } from "react-router-dom"; |
// import { useLocation } from "react-router-dom"; |
||||
function PageConf() { |
function PageConf() { |
||||
return <div>PageConf</div> |
|
||||
|
const [list , setList] = useState([]) |
||||
|
const [type, setType] = useState('-1') |
||||
|
const [scrollHeight, setScrollHeight] = useState(0) |
||||
|
const rightListRef = useRef(null) |
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: "序号", |
||||
|
dataIndex: "id", |
||||
|
key: "id", |
||||
|
align: "center", |
||||
|
}, |
||||
|
{ |
||||
|
title: "数据项名称", |
||||
|
dataIndex: "name", |
||||
|
key: "name", |
||||
|
align: "center", |
||||
|
}, |
||||
|
{ |
||||
|
title: "所属系统", |
||||
|
dataIndex: "system", |
||||
|
key: "system", |
||||
|
align: "center", |
||||
|
}, |
||||
|
{ |
||||
|
title: "展示状态", |
||||
|
dataIndex: "show_status", |
||||
|
key: "show_status", |
||||
|
align: "center", |
||||
|
}, |
||||
|
{ |
||||
|
title: "操作", |
||||
|
align: "center", |
||||
|
render: (_,record)=>{ |
||||
|
return <Switch checked={record.status == '1' ? true : false} onChange={(e)=>{onChange(e, record)}} /> |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
|
||||
|
const onChange = (checked, record)=>{ |
||||
|
// console.log(checked, record) |
||||
|
ajax.switchShowStatus({id: record.id, status: checked ? '1' : '0'}).then((res)=>{ |
||||
|
if(res.status == 20000){ |
||||
|
message.success('设置成功') |
||||
|
getOverviewConfigList() |
||||
|
} |
||||
|
}).catch(err=>{ |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
const getOverviewConfigList = (value)=>{ |
||||
|
ajax.getOverviewConfigList({type: value ? value: type}).then((res)=>{ |
||||
|
if(res.status == 20000){ |
||||
|
setList(res.data) |
||||
|
} |
||||
|
}).catch(err=>{ |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
const search = ()=>{ |
||||
|
getOverviewConfigList() |
||||
|
} |
||||
|
|
||||
|
const reset = ()=>{ |
||||
|
setType('-1') |
||||
|
getOverviewConfigList('-1') |
||||
|
} |
||||
|
|
||||
|
useEffect(()=>{ |
||||
|
getOverviewConfigList() |
||||
|
}, []) |
||||
|
return <div className="page-conf"> |
||||
|
<div className="left-search"> |
||||
|
<FormSelect |
||||
|
yisaLabel="所属系统" |
||||
|
yisaData={[{value: '-1', label: '全部'},{value: '1', label: '路内'},{value: '2', label: '路外'}]} |
||||
|
defaultValue={ type } |
||||
|
placeholder="" |
||||
|
hasUnlimited={ false } |
||||
|
showClose={true} |
||||
|
onChange={ e=>{setType(e)} } |
||||
|
/> |
||||
|
<div className="bottomBox"> |
||||
|
<Button type="primary" onClick={search}>查询</Button>  |
||||
|
<Button onClick={reset}>重置</Button> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
<div className="right-list" ref={(e)=>{rightListRef.current = e; if(e){setScrollHeight(e.offsetHeight - 100)}}}> |
||||
|
<Table |
||||
|
columns={columns} |
||||
|
dataSource={list} |
||||
|
pagination={false} |
||||
|
scroll={{y: scrollHeight}} |
||||
|
rowKey="id" |
||||
|
> |
||||
|
|
||||
|
</Table> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
} |
} |
||||
|
|
||||
export default PageConf; |
export default PageConf; |
@ -0,0 +1,6 @@ |
|||||
|
import React from "react" |
||||
|
import loadable from "@loadable/component" |
||||
|
import { LoadingImg } from "@/components" |
||||
|
|
||||
|
const PdaArrearConfLoadable = loadable(() => import("./loadable")) |
||||
|
export default (pros) => <PdaArrearConfLoadable {...pros} fallback={<LoadingImg />} /> |
@ -0,0 +1,18 @@ |
|||||
|
@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); |
||||
|
|
||||
|
.pda-arrear-conf{ |
||||
|
padding-left: 30px; |
||||
|
padding-top: 30px; |
||||
|
.title{ |
||||
|
height: 45px; |
||||
|
line-height: 45px; |
||||
|
} |
||||
|
.row{ |
||||
|
height: 50px; |
||||
|
line-height: 50px; |
||||
|
} |
||||
|
} |
@ -0,0 +1,56 @@ |
|||||
|
import React, { useState, useRef, useEffect } from "react"; |
||||
|
import { message, Pagination, Table, Space, Modal, Button, InputNumber |
||||
|
} from "antd"; |
||||
|
// import { dictionary, utils } from "@/config/common"; |
||||
|
// import moment from 'moment' |
||||
|
import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; |
||||
|
import ajax from "@/services" |
||||
|
import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components" |
||||
|
import "./index.scss"; |
||||
|
// import errorImg from "@/assets/images/layout/error.png" |
||||
|
// import { useLocation } from "react-router-dom"; |
||||
|
function PdaArrearConf() { |
||||
|
const [limit, setLimit] = useState(0) |
||||
|
const [edit, setEdit] = useState(false) |
||||
|
const getData = ()=>{ |
||||
|
ajax.getPdaArrearConfig().then((res)=>{ |
||||
|
if(res.status == 20000){ |
||||
|
setLimit(res.data) |
||||
|
} |
||||
|
}).catch(err=>{ |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
const save = ()=>{ |
||||
|
ajax.editPdaArrearConfig({data: limit}).then((res)=>{ |
||||
|
if(res.status == 20000){ |
||||
|
setLimit(res.data) |
||||
|
setEdit(false) |
||||
|
} |
||||
|
}).catch(err=>{ |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
useEffect(()=>{ |
||||
|
getData() |
||||
|
}, []) |
||||
|
|
||||
|
return <div className="pda-arrear-conf"> |
||||
|
<div className="title">大额欠费预警设置</div> |
||||
|
{ |
||||
|
!edit ? |
||||
|
<div className="row">大额欠费金额: {limit}元</div> |
||||
|
: |
||||
|
<div className="row">大额欠费金额: <InputNumber value={limit} onChange={(e)=>{setLimit(e)}} min={1} max={9999} controls={false}></InputNumber>元</div> |
||||
|
} |
||||
|
|
||||
|
{ |
||||
|
!edit ? <Button type="primary" onClick={()=>{setEdit(true)}}>修改</Button> : |
||||
|
<Button type="primary" onClick={save}>保存</Button> |
||||
|
} |
||||
|
</div> |
||||
|
} |
||||
|
|
||||
|
export default PdaArrearConf; |
@ -1,15 +1,123 @@ |
|||||
import React, { useState, useRef, useEffect } from "react"; |
import React, { useState, useRef, useEffect } from "react"; |
||||
// import { message, Pagination, Table, Space, Modal, } from "antd"; |
|
||||
// import { dictionary, utils } from "@/config/common"; |
|
||||
// import moment from 'moment' |
|
||||
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; |
|
||||
// import ajax from "@/services" |
|
||||
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components" |
|
||||
// import "./index.scss"; |
|
||||
|
import { message, Modal,Calendar, Button , Input ,DatePicker } from "antd"; |
||||
|
import { dictionary, utils } from "@/config/common"; |
||||
|
import moment from 'moment' |
||||
|
import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; |
||||
|
import ajax from "@/services" |
||||
|
import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components" |
||||
|
import "./index.scss"; |
||||
// import errorImg from "@/assets/images/layout/error.png" |
// import errorImg from "@/assets/images/layout/error.png" |
||||
// import { useLocation } from "react-router-dom"; |
// import { useLocation } from "react-router-dom"; |
||||
function VacationConf() { |
function VacationConf() { |
||||
return <div>VacationConf</div> |
|
||||
|
const [vacationData, setVacationData] = useState([]) |
||||
|
const [rightDetailData, setRightDetailData] = useState({}) |
||||
|
const [modalVisible, setModalVisible] = useState(false) |
||||
|
const [vacationName,setVacationName]= useState('') |
||||
|
const [startDate, setStartDate] = useState(moment(utils.createDateStr(), 'YYYY-MM-DD')) |
||||
|
const [endDate, setEndDate] = useState(moment(utils.createDateStr(), 'YYYY-MM-DD')) |
||||
|
const [mode, setMode] = useState('0') // 0 新增 1 编辑 |
||||
|
const getVacationData = ()=>{ |
||||
|
ajax.getVacationData().then((res)=>{ |
||||
|
if(res.status == 20000){ |
||||
|
setVacationData(res.data) |
||||
|
} |
||||
|
}).catch(err=>{ |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
const resetVacation = ()=>{ |
||||
|
setVacationName(rightDetailData.vacation_name) |
||||
|
setStartDate(moment(rightDetailData.vacation_start_date, 'YYYY-MM-DD')) |
||||
|
setEndDate(moment(rightDetailData.vacation_end_date, 'YYYY-MM-DD')) |
||||
|
setModalVisible(true) |
||||
|
setMode('1') |
||||
|
} |
||||
|
|
||||
|
const save = ()=>{ |
||||
|
if(mode == '0'){ |
||||
|
message.success('新增成功') |
||||
|
}else{ |
||||
|
message.success('修改成功') |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const addConfig = ()=>{ |
||||
|
setModalVisible(true); |
||||
|
setMode('0'); |
||||
|
setVacationName('') |
||||
|
setStartDate(moment(utils.createDateStr(), 'YYYY-MM-DD')) |
||||
|
setEndDate(moment(utils.createDateStr(), 'YYYY-MM-DD')) |
||||
|
} |
||||
|
|
||||
|
const onChange = (value, mode) => { |
||||
|
let temp = value.format('MM-DD') |
||||
|
if(vacationData.length){ |
||||
|
let one = vacationData.find(item=> item.day == temp) |
||||
|
if(one){ |
||||
|
setRightDetailData(one) |
||||
|
}else{ |
||||
|
setRightDetailData({}) |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
const dateFullCellRender = (date)=>{ |
||||
|
let temp = date.format('MM-DD'),highlight = false,temp_vc_name = ''; |
||||
|
if(vacationData.length){ |
||||
|
let one = vacationData.find(item=> item.day == temp) |
||||
|
if(one){ |
||||
|
highlight = true |
||||
|
temp_vc_name = one.vacation_name |
||||
|
} |
||||
|
} |
||||
|
return <div className="calendar-item" style={{backgroundColor: highlight ? '#3b93dd' : '#464d5f'}} > |
||||
|
|
||||
|
<div>{date.format('DD')}</div> |
||||
|
{ |
||||
|
temp_vc_name ? <div>{temp_vc_name}</div> : null |
||||
|
} |
||||
|
</div> |
||||
|
} |
||||
|
|
||||
|
useEffect(()=>{ |
||||
|
getVacationData() |
||||
|
}, []) |
||||
|
return <div className="vacation-conf"> |
||||
|
|
||||
|
<div className="left"> |
||||
|
<div className="title"><span className="title-name">节假日展示</span><Button type="primary" onClick={addConfig}>新增节假日配置</Button></div> |
||||
|
<Calendar onChange={onChange} dateFullCellRender={dateFullCellRender} /> |
||||
|
</div> |
||||
|
<div className="right"> |
||||
|
<div className="right-row title-name">节假日详情</div> |
||||
|
<div className="right-row">节假日名称: {rightDetailData.vacation_name || '--'}</div> |
||||
|
<div className="right-row">节假日区间: {rightDetailData.vacation_start_date}~{rightDetailData.vacation_end_date}</div> |
||||
|
{ |
||||
|
rightDetailData.vacation_name ? |
||||
|
<div> |
||||
|
<Button type="primary" onClick={resetVacation}>重新配置</Button>  |
||||
|
<Button >删除</Button> |
||||
|
</div> |
||||
|
: null |
||||
|
} |
||||
|
|
||||
|
</div> |
||||
|
<Modal open={modalVisible} closable={true} onOk={save} onCancel={()=>{setModalVisible(false)}}> |
||||
|
<div className="modal-row vacation"> |
||||
|
<span className="title"><span className="red-star">*</span>节假日名称 </span> |
||||
|
<Input value={vacationName} style={{width: '300px'}} showCount={true} maxLength={30} onChange={(e)=>{setVacationName(e.target.value)}}></Input> |
||||
|
</div> |
||||
|
<div className="modal-row vacation"> |
||||
|
<span className="title"><span className="red-star">*</span>节假日区间 </span> |
||||
|
<DatePicker value={startDate} onChange={e=>{setStartDate(e)}} format={'YYYY-MM-DD'} /> |
||||
|
</div> |
||||
|
<div className="modal-row vacation"> |
||||
|
<span className="title">至 </span> |
||||
|
<DatePicker value={endDate} onChange={e=>{setEndDate(e)}} format={'YYYY-MM-DD'} /> |
||||
|
</div> |
||||
|
</Modal> |
||||
|
</div> |
||||
} |
} |
||||
|
|
||||
export default VacationConf; |
export default VacationConf; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue