From 74960e7d4f3042fb9e0ec54af823a360d4aa2bbe Mon Sep 17 00:00:00 2001 From: liuwh <964324856@qq.com> Date: Tue, 17 Sep 2024 17:17:45 +0800 Subject: [PATCH] 提交 --- gz-customerSystem/src/assets/images/workDash_6.png | 0 gz-customerSystem/src/assets/images/disputeLedger_5.png | 0 gz-customerSystem/src/assets/images/workDash_1.png | 0 gz-customerSystem/src/assets/images/disputeLedger_4.png | 0 gz-customerSystem/src/assets/images/workDash_7.png | 0 gz-customerSystem/src/views/disputeLedger/index.jsx | 451 +++++++++++ gz-customerSystem/src/assets/images/workDash_5.png | 0 gz-customerSystem/src/assets/images/disputeLedger_6.png | 0 gz-customerSystem/src/assets/images/disputeLedger_3.png | 0 gz-customerSystem/src/assets/images/workDash_2.png | 0 gz-customerSystem/src/utils/utility.js | 6 gz-customerSystem/src/views/workDash/index.jsx | 806 +++++++++++++++++++++ gz-customerSystem/src/assets/images/disputeLedger_7.png | 0 gz-customerSystem/src/assets/images/workDash_4.png | 0 gz-customerSystem/src/components/NewTableSearch/index.jsx | 149 ++- gz-customerSystem/src/assets/images/index.js | 310 ++++--- gz-customerSystem/src/views/workDash/index.less | 313 ++++++++ gz-customerSystem/src/assets/images/disputeLedger_2.png | 0 gz-customerSystem/src/views/comprehensive/index.jsx | 100 +- gz-customerSystem/src/api/appUrl.js | 6 gz-customerSystem/src/views/comprehensive/index.less | 10 gz-customerSystem/src/assets/images/workDash_9.png | 0 gz-customerSystem/src/router/router.js | 5 gz-customerSystem/src/assets/images/disputeLedger_1.png | 0 gz-customerSystem/src/assets/images/workDash_3.png | 0 gz-customerSystem/src/assets/images/workDash_8.png | 0 gz-customerSystem/src/views/disputeLedger/index.less | 112 ++ gz-customerSystem/src/components/NewTableSearch/index.less | 5 28 files changed, 2,008 insertions(+), 265 deletions(-) diff --git a/gz-customerSystem/src/api/appUrl.js b/gz-customerSystem/src/api/appUrl.js index 20217be..9a37c3e 100644 --- a/gz-customerSystem/src/api/appUrl.js +++ b/gz-customerSystem/src/api/appUrl.js @@ -2,15 +2,15 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-02-16 11:25:57 - * @LastEditTime: 2024-09-14 15:43:38 + * @LastEditTime: 2024-09-15 10:34:45 * @LastEditors: lwh * @Version: 1.0.0 * @Description: api地址 */ export const debug = { // web服务 - // baseUrl: 'http://gz.hugeinfo.com.cn', - baseUrl: "http://4gg4nv.natappfree.cc", + baseUrl: 'http://gz.hugeinfo.com.cn', + // baseUrl: "http://4gg4nv.natappfree.cc", // baseUrl: 'http://mdqgnh.natappfree.cc', // 附件服务 diff --git a/gz-customerSystem/src/assets/images/disputeLedger_1.png b/gz-customerSystem/src/assets/images/disputeLedger_1.png new file mode 100644 index 0000000..86bd13a --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_1.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/disputeLedger_2.png b/gz-customerSystem/src/assets/images/disputeLedger_2.png new file mode 100644 index 0000000..cf3e3fb --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_2.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/disputeLedger_3.png b/gz-customerSystem/src/assets/images/disputeLedger_3.png new file mode 100644 index 0000000..6587d5d --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_3.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/disputeLedger_4.png b/gz-customerSystem/src/assets/images/disputeLedger_4.png new file mode 100644 index 0000000..5292a83 --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_4.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/disputeLedger_5.png b/gz-customerSystem/src/assets/images/disputeLedger_5.png new file mode 100644 index 0000000..48934ee --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_5.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/disputeLedger_6.png b/gz-customerSystem/src/assets/images/disputeLedger_6.png new file mode 100644 index 0000000..241fb44 --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_6.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/disputeLedger_7.png b/gz-customerSystem/src/assets/images/disputeLedger_7.png new file mode 100644 index 0000000..56850ef --- /dev/null +++ b/gz-customerSystem/src/assets/images/disputeLedger_7.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/index.js b/gz-customerSystem/src/assets/images/index.js index d5aff9f..fff1650 100644 --- a/gz-customerSystem/src/assets/images/index.js +++ b/gz-customerSystem/src/assets/images/index.js @@ -2,147 +2,179 @@ * @Company: hugeInfo * @Author: lwh * @Date: 2023-04-24 16:12:00 - * @LastEditTime: 2024-09-11 09:44:38 - * @LastEditors: dminyi 1301963064@qq.com + * @LastEditTime: 2024-09-17 12:30:42 + * @LastEditors: lwh * @Version: 1.0.0 * @Description: */ -import ledger_1 from "./ledger_1.png"; -import ledger_2 from "./ledger_2.png"; -import ledger_3 from "./ledger_3.png"; -import ledger_4 from "./ledger_4.png"; -import ledger_5 from "./ledger_5.png"; -import ledger_6 from "./ledger_6.png"; -import ledger_7 from "./ledger_7.png"; -import ledger_8 from "./ledger_8.png"; -import ledger_9 from "./ledger_9.svg"; -import ledger_10 from "./ledger_10.png"; -import ledger_11 from "./ledger_11.png"; -import ledger_12 from "./ledger_12.png"; -import ledger_13 from "./ledger_13.png"; -import mediateBigData_1 from "./mediateBigData_1.png"; -import mediateBigData_2 from "./mediateBigData_2.png"; -import mediateBigData_3 from "./mediateBigData_3.png"; -import mediateBigData_4 from "./mediateBigData_4.png"; -import mediateBigData_5 from "./mediateBigData_5.png"; -import mediateBigData_6 from "./mediateBigData_6.png"; -import mediateBigData_7 from "./mediateBigData_7.png"; -import mediateBigData_8 from "./mediateBigData_8.png"; -import caseDetail from "./caseDetail.png"; -import caseDetailResult from "./caseDetailResult.png"; -import process from "./process.png"; -import add from "./add.png"; -import del from "./del.png"; -import question from "./question.png"; -import question1 from "./question1.png"; -import person from "./person.png"; -import link from "./link.png"; -import check from "./check.png"; -import image from "./image.png"; -import applyMaterials from "./applyMaterials.png"; -import applyMaterials_active from "./applyMaterials_active.png"; -import evidenceMaterials from "./evidenceMaterials.png"; -import evidenceMaterials_active from "./evidenceMaterials_active.png"; -import closeIcon from "./closeIcon.png"; -import backgroundImage from "./backgroundImage.jpg"; -import logo1 from "./logo1.png"; -import register from "./register.png"; -import Matter from "./matter.png"; -import transfer from "./transfer.png"; -import empty from "./empty.png"; -import feedback from "./feedback.png"; -import fold from "./fold.png"; -import down from "./down.png"; -import tip from "./tip.png"; -import apply from "./apply.png"; -import examine from "./examine.png"; -import knock from "./knock.png"; -import edit from "./edit.png"; -import applyRecord from "./applyRecord.png"; -import downO from "./downO.png"; -import up from "./up.png"; -import Audit from "./Audit.png"; -import aiPerson from "./aiPerson.png"; -import caselogo from "./caselogo.png"; -import tab1 from "./tab1.png"; -import tab2 from "./tab2.png"; -import tab3 from "./tab3.png"; -import tab4 from "./tab4.png"; -import tab5 from "./tab5.png"; -import tab6 from "./tab6.png"; -import visitInto from "./visitInto.png"; -import checkInto from "./checkInto.png"; -import floating from "./floating.png"; -import Aimge from "./Aimge.png"; -import yewu from "./yewu.png"; +import ledger_1 from './ledger_1.png'; +import ledger_2 from './ledger_2.png'; +import ledger_3 from './ledger_3.png'; +import ledger_4 from './ledger_4.png'; +import ledger_5 from './ledger_5.png'; +import ledger_6 from './ledger_6.png'; +import ledger_7 from './ledger_7.png'; +import ledger_8 from './ledger_8.png'; +import ledger_9 from './ledger_9.svg'; +import ledger_10 from './ledger_10.png'; +import ledger_11 from './ledger_11.png'; +import ledger_12 from './ledger_12.png'; +import ledger_13 from './ledger_13.png'; +import mediateBigData_1 from './mediateBigData_1.png'; +import mediateBigData_2 from './mediateBigData_2.png'; +import mediateBigData_3 from './mediateBigData_3.png'; +import mediateBigData_4 from './mediateBigData_4.png'; +import mediateBigData_5 from './mediateBigData_5.png'; +import mediateBigData_6 from './mediateBigData_6.png'; +import mediateBigData_7 from './mediateBigData_7.png'; +import mediateBigData_8 from './mediateBigData_8.png'; +import caseDetail from './caseDetail.png'; +import caseDetailResult from './caseDetailResult.png'; +import process from './process.png'; +import add from './add.png'; +import del from './del.png'; +import question from './question.png'; +import question1 from './question1.png'; +import person from './person.png'; +import link from './link.png'; +import check from './check.png'; +import image from './image.png'; +import applyMaterials from './applyMaterials.png'; +import applyMaterials_active from './applyMaterials_active.png'; +import evidenceMaterials from './evidenceMaterials.png'; +import evidenceMaterials_active from './evidenceMaterials_active.png'; +import closeIcon from './closeIcon.png'; +import backgroundImage from './backgroundImage.jpg'; +import logo1 from './logo1.png'; +import register from './register.png'; +import Matter from './matter.png'; +import transfer from './transfer.png'; +import empty from './empty.png'; +import feedback from './feedback.png'; +import fold from './fold.png'; +import down from './down.png'; +import tip from './tip.png'; +import apply from './apply.png'; +import examine from './examine.png'; +import knock from './knock.png'; +import edit from './edit.png'; +import applyRecord from './applyRecord.png'; +import downO from './downO.png'; +import up from './up.png'; +import Audit from './Audit.png'; +import aiPerson from './aiPerson.png'; +import caselogo from './caselogo.png'; +import tab1 from './tab1.png'; +import tab2 from './tab2.png'; +import tab3 from './tab3.png'; +import tab4 from './tab4.png'; +import tab5 from './tab5.png'; +import tab6 from './tab6.png'; +import visitInto from './visitInto.png'; +import checkInto from './checkInto.png'; +import floating from './floating.png'; +import Aimge from './Aimge.png'; +import yewu from './yewu.png'; +import disputeLedger_1 from './disputeLedger_1.png'; +import disputeLedger_2 from './disputeLedger_2.png'; +import disputeLedger_3 from './disputeLedger_3.png'; +import disputeLedger_4 from './disputeLedger_4.png'; +import disputeLedger_5 from './disputeLedger_5.png'; +import disputeLedger_6 from './disputeLedger_6.png'; +import disputeLedger_7 from './disputeLedger_7.png'; +import workDash_1 from './workDash_1.png'; +import workDash_2 from './workDash_2.png'; +import workDash_3 from './workDash_3.png'; +import workDash_4 from './workDash_4.png'; +import workDash_5 from './workDash_5.png'; +import workDash_6 from './workDash_6.png'; +import workDash_7 from './workDash_7.png'; +import workDash_8 from './workDash_8.png'; +import workDash_9 from './workDash_9.png'; export { - ledger_1, - ledger_2, - ledger_3, - ledger_4, - ledger_5, - ledger_6, - ledger_7, - ledger_8, - ledger_9, - ledger_10, - ledger_11, - ledger_12, - ledger_13, - mediateBigData_1, - mediateBigData_2, - mediateBigData_3, - mediateBigData_4, - mediateBigData_5, - mediateBigData_6, - mediateBigData_7, - mediateBigData_8, - caseDetail, - caseDetailResult, - process, - add, - del, - question, - question1, - person, - link, - check, - image, - applyMaterials, - applyMaterials_active, - evidenceMaterials, - evidenceMaterials_active, - closeIcon, - backgroundImage, - logo1, - register, - Matter, - transfer, - empty, - feedback, - fold, - down, - tip, - apply, - examine, - knock, - edit, - applyRecord, - downO, - up, - Audit, - aiPerson, - caselogo, - tab1, - tab2, - tab3, - tab4, - tab5, - tab6, - visitInto, - checkInto, - floating, - Aimge, - yewu -}; \ No newline at end of file + ledger_1, + ledger_2, + ledger_3, + ledger_4, + ledger_5, + ledger_6, + ledger_7, + ledger_8, + ledger_9, + ledger_10, + ledger_11, + ledger_12, + ledger_13, + mediateBigData_1, + mediateBigData_2, + mediateBigData_3, + mediateBigData_4, + mediateBigData_5, + mediateBigData_6, + mediateBigData_7, + mediateBigData_8, + caseDetail, + caseDetailResult, + process, + add, + del, + question, + question1, + person, + link, + check, + image, + applyMaterials, + applyMaterials_active, + evidenceMaterials, + evidenceMaterials_active, + closeIcon, + backgroundImage, + logo1, + register, + Matter, + transfer, + empty, + feedback, + fold, + down, + tip, + apply, + examine, + knock, + edit, + applyRecord, + downO, + up, + Audit, + aiPerson, + caselogo, + tab1, + tab2, + tab3, + tab4, + tab5, + tab6, + visitInto, + checkInto, + floating, + Aimge, + yewu, + disputeLedger_1, + disputeLedger_2, + disputeLedger_3, + disputeLedger_4, + disputeLedger_5, + disputeLedger_6, + disputeLedger_7, + workDash_1, + workDash_2, + workDash_3, + workDash_4, + workDash_5, + workDash_6, + workDash_7, + workDash_8, + workDash_9, +}; diff --git a/gz-customerSystem/src/assets/images/workDash_1.png b/gz-customerSystem/src/assets/images/workDash_1.png new file mode 100644 index 0000000..ea64404 --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_1.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_2.png b/gz-customerSystem/src/assets/images/workDash_2.png new file mode 100644 index 0000000..1c183bf --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_2.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_3.png b/gz-customerSystem/src/assets/images/workDash_3.png new file mode 100644 index 0000000..5e150ee --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_3.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_4.png b/gz-customerSystem/src/assets/images/workDash_4.png new file mode 100644 index 0000000..6183590 --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_4.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_5.png b/gz-customerSystem/src/assets/images/workDash_5.png new file mode 100644 index 0000000..b66aa65 --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_5.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_6.png b/gz-customerSystem/src/assets/images/workDash_6.png new file mode 100644 index 0000000..ea48506 --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_6.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_7.png b/gz-customerSystem/src/assets/images/workDash_7.png new file mode 100644 index 0000000..35fd673 --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_7.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_8.png b/gz-customerSystem/src/assets/images/workDash_8.png new file mode 100644 index 0000000..0ca38ee --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_8.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/workDash_9.png b/gz-customerSystem/src/assets/images/workDash_9.png new file mode 100644 index 0000000..4d35e33 --- /dev/null +++ b/gz-customerSystem/src/assets/images/workDash_9.png Binary files differ diff --git a/gz-customerSystem/src/components/NewTableSearch/index.jsx b/gz-customerSystem/src/components/NewTableSearch/index.jsx index 5e8a818..e08aa71 100644 --- a/gz-customerSystem/src/components/NewTableSearch/index.jsx +++ b/gz-customerSystem/src/components/NewTableSearch/index.jsx @@ -18,7 +18,7 @@ * handleSearch, // 搜索 * exportButton //导出按钮 */ -const NewTableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch, exportButton }) => { +const NewTableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch, exportButtonShow = true, exportButton }) => { const [searchMore, setSearchMore] = useState(false); const span = 24 / rowNum; @@ -60,80 +60,91 @@ return ( <Form form={form} labelAlign="right" className="tableSearch"> - - {itemData.map((x, t) => { - let placeholder = x.placeholder || setPlaceholder(x.name, x.type); - let allowClear = x.allowClear || true; - let dom = null; - let rules = {}; - if (x.type === 'Input') { - dom = <Input placeholder={placeholder} allowClear {...x} />; - rules = { max: x.max || 32, message: '搜索内容过长' }; - } - if (x.type === 'Select') { - dom = ( - <Select allowClear placeholder={placeholder} {...x}> - {x.selectdata?.map((y) => ( - <Option key={y.value}>{y.label}</Option> - ))} - </Select> - ); - } - if (x.type === 'RangePicker') { - rules = { type: 'array' }; - dom = ( - <RangePicker - style={{ width: '100%' }} - ranges={{ - '今日': [$$.myMoment(), $$.myMoment()], - '本月': [$$.myMoment().startOf('month'), $$.myMoment().endOf('month')], - }} - allowClear - {...x} - /> - ); - } - if (x.type === 'TreeSelect') { - dom = ( - <TreeSelect - showSearch - placeholder={placeholder} - dropdownStyle={{ maxHeight: 500, overflow: 'auto' }} - treeData={x.treedata} - treeDefaultExpandAll - allowClear - filterTreeNode={(inputValue, treeNode) => (treeNode.label.indexOf(inputValue) !== -1 ? true : false)} - {...x} - /> - ); - } - return ( - <Row className='tableSearch-searchMore-row' gutter={[24, 16]} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }}> - <Col span={x.span || 8} key={t + 1}> - <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> - {dom} - </Form.Item> + <Row className='tableSearch-searchMore-row' gutter={[24, 16]} > + {itemData.map((x, t) => { + let placeholder = x.placeholder || setPlaceholder(x.name, x.type); + let allowClear = x.allowClear || true; + let dom = null; + let rules = {}; + if (x.type === 'Input') { + dom = <Input placeholder={placeholder} allowClear {...x} />; + rules = { max: x.max || 32, message: '搜索内容过长' }; + } + if (x.type === 'Select') { + dom = ( + <Select allowClear placeholder={placeholder} {...x}> + {x.selectdata?.map((y) => ( + <Option key={y.value}>{y.label}</Option> + ))} + </Select> + ); + } + if (x.type === 'RangePicker') { + rules = { type: 'array' }; + dom = ( + <RangePicker + style={{ width: '100%' }} + ranges={{ + '今日': [$$.myMoment(), $$.myMoment()], + '本月': [$$.myMoment().startOf('month'), $$.myMoment().endOf('month')], + }} + allowClear + {...x} + /> + ); + } + if (x.type === 'TreeSelect') { + dom = ( + <TreeSelect + showSearch + placeholder={placeholder} + dropdownStyle={{ maxHeight: 500, overflow: 'auto' }} + treeData={x.treedata} + treeDefaultExpandAll + allowClear + filterTreeNode={(inputValue, treeNode) => (treeNode.label.indexOf(inputValue) !== -1 ? true : false)} + {...x} + /> + ); + } + if (x.type === 'null') { + dom = ( + <Col span={x.span || 8}></Col> + ); + } + return ( + <Col span={x.span || 8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> + { + x.type === 'null' ? <>{ dom }</> : + <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> + {dom} + </Form.Item> + } </Col> - </Row> - // <div> - // <Col span={8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> - // <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> - // {dom} - // </Form.Item> - // </Col> - // <Col span={8}></Col> - // <Col span={8}></Col> - // </div> - ); - })} + // <div> + // <Col span={8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> + // <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> + // {dom} + // </Form.Item> + // </Col> + // <Col span={8}></Col> + // <Col span={8}></Col> + // </div> + ); + })} + </Row> + <div className='NewTableSearch-border'></div> <Row style={{ marginTop: '16px' }}> <Col span={24} style={{ textAlign: 'left' }}> <Button className="public-buttonMargin" type="primary" htmlType="submit" icon={<SearchOutlined />} onClick={handleSearch}> 查询 </Button> - <Button className="public-buttonMargin" type="primary" ghost htmlType="submit" onClick={exportButton}> - 导出查询结果 - </Button> + { + exportButtonShow && + <Button className="public-buttonMargin" type="primary" ghost htmlType="submit" onClick={exportButton}> + 导出查询结果 + </Button> + } <Button onClick={handleReset}> 重置条件 </Button> diff --git a/gz-customerSystem/src/components/NewTableSearch/index.less b/gz-customerSystem/src/components/NewTableSearch/index.less index 1cde11a..b6b389f 100644 --- a/gz-customerSystem/src/components/NewTableSearch/index.less +++ b/gz-customerSystem/src/components/NewTableSearch/index.less @@ -17,3 +17,8 @@ margin-bottom: 16px; } } + +.NewTableSearch-border { + margin: 12px 0; + border-bottom: 1px solid #E5E6EB; +} diff --git a/gz-customerSystem/src/router/router.js b/gz-customerSystem/src/router/router.js index fdd2660..a482be0 100644 --- a/gz-customerSystem/src/router/router.js +++ b/gz-customerSystem/src/router/router.js @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-03-28 11:22:41 - * @LastEditTime: 2024-09-14 16:09:40 + * @LastEditTime: 2024-09-17 10:42:26 * @LastEditors: lwh * @Version: 1.0.0 * @Description: 路由 @@ -130,6 +130,7 @@ import Comprehensive from '../views/comprehensive'; // 纠纷台账 import DisputeLedger from '../views/disputeLedger'; +import WorkDash from '../views/workDash'; // 数据分析 import DataSearch from '../views/statistic/dataSearch'; @@ -235,6 +236,8 @@ <Route path="comprehensive" element={<Comprehensive />} /> {/* 纠纷台账 */} <Route path="account" element={<DisputeLedger />} /> + {/* 解纷态势 */} + <Route path="workDash" element={<WorkDash />} /> {/* 数据分析 */} <Route path="dataSearch" element={<DataSearch />} /> {/* 调解视窗成功页 */} diff --git a/gz-customerSystem/src/utils/utility.js b/gz-customerSystem/src/utils/utility.js index bc2e5b1..69fb8b2 100644 --- a/gz-customerSystem/src/utils/utility.js +++ b/gz-customerSystem/src/utils/utility.js @@ -2,8 +2,8 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-02-16 11:57:54 - * @LastEditTime: 2024-09-12 10:55:38 - * @LastEditors: dminyi 1301963064@qq.com + * @LastEditTime: 2024-09-15 10:36:03 + * @LastEditors: lwh * @Version: 1.0.0 * @Description: 公共模块方法 */ @@ -15,7 +15,7 @@ import moment from 'moment'; import { pdf, jpg, file, word, excel } from '../assets/images/icon'; -export const isDebug = true; // 是否测试环境 +export const isDebug = false; // 是否测试环境 export const appUrl = isDebug ? debug : web; // api diff --git a/gz-customerSystem/src/views/comprehensive/index.jsx b/gz-customerSystem/src/views/comprehensive/index.jsx index f06c4a7..f1bd214 100644 --- a/gz-customerSystem/src/views/comprehensive/index.jsx +++ b/gz-customerSystem/src/views/comprehensive/index.jsx @@ -5,7 +5,7 @@ import { FolderFilled } from '@ant-design/icons'; import * as $$ from '../../utils/utility'; import { useLocation, useNavigate } from 'react-router-dom'; -import TableView from '../../components/TableView'; +import TableView from '../../components/TableViewCanSort'; import NewTableSearch from '../../components/NewTableSearch'; import MyTabs from '../../components/MyTabs'; import './index.less' @@ -42,9 +42,9 @@ // 表头 const columns = () => { const columnsData = [ - { title: '事项状态', width: 80, dataIndex: 'statusName' }, - { title: '事项来源', width: 80, dataIndex: 'canalName' }, - { title: '事项等级', width: 80, dataIndex: 'caseLevel' }, + { title: '事项状态', width: 100, dataIndex: 'statusName' }, + { title: '事项来源', width: 100, dataIndex: 'canalName' }, + { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, { title: '纠纷类型', width: 150, dataIndex: 'caseTypeName' }, { title: '承办部门', width: 150, dataIndex: 'mediateDeptName' }, { title: '配合部门', width: 150, dataIndex: 'assistUnitName' }, @@ -171,8 +171,8 @@ if (res.type) { setSearch(submitData); setData({ - total: res.data?.totalElements, - tableData: res.data?.content || [], + total: 0, + tableData: [], }); } } @@ -205,7 +205,11 @@ form={form} itemData={[ { type: 'RangePicker', name: 'acceptTime', label: '办结时间', span: 8 }, + { type: 'null'}, + { type: 'null'}, { type: 'RangePicker', name: 'acceptTime', label: '归档时间', span: 8 }, + { type: 'null'}, + { type: 'null'}, { type: 'Select', name: 'joinRole', @@ -216,46 +220,62 @@ { label: '我协助的', value: '2' }, ], }, - { - type: 'Select', - name: 'joinRole', - label: '承办部门', - selectdata: [ - { label: '我负责的', value: '1' }, - { label: '我协助的', value: '2' }, - ], - }, - { - type: 'Select', - name: 'joinRole', - label: '登记机构', - selectdata: [ - { label: '我负责的', value: '1' }, - { label: '我协助的', value: '2' }, - ], - }, - { type: 'Input', name: 'defendants', label: '被申请人' }, - { type: 'Input', name: 'caseNo', label: '调解案号' }, + // { + // type: 'Select', + // name: 'joinRole', + // label: '承办部门', + // selectdata: [ + // { label: '我负责的', value: '1' }, + // { label: '我协助的', value: '2' }, + // ], + // }, + // { + // type: 'Select', + // name: 'joinRole', + // label: '登记机构', + // selectdata: [ + // { label: '我负责的', value: '1' }, + // { label: '我协助的', value: '2' }, + // ], + // }, + // { type: 'Input', name: 'defendants', label: '被申请人' }, + // { type: 'Input', name: 'caseNo', label: '调解案号' }, ]} handleReset={() => handleSearch('reset')} handleSearch={() => handleSearch('search')} /> </div> - <div style={{ marginTop: '8px' }} className="pageTable"> - <TableView - showHeader - title="查询结果" - columns={columns()} - dataSource={data.tableData} - pagination={{ - current: search.page, - pageSize: search.size, - total: data.total, - onChange: (page, pageSize) => handleChangePage(page, pageSize), - }} - rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} - /> + <div style={{ marginTop: '8px' }} className="comprehensive-table"> + { + data.tableData?.length > 0 ? + <TableView + showHeader + title="查询结果" + columns={columns()} + dataSource={data.tableData} + pagination={{ + current: search.page, + pageSize: search.size, + total: data.total, + onChange: (page, pageSize) => handleChangePage(page, pageSize), + }} + rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} + /> : + <TableView + showHeader + title="查询结果" + columns={columns()} + dataSource={data.tableData} + pagination={{ + current: search.page, + pageSize: search.size, + total: data.total, + onChange: (page, pageSize) => handleChangePage(page, pageSize), + }} + rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} + /> + } </div> </div> </NewPage> diff --git a/gz-customerSystem/src/views/comprehensive/index.less b/gz-customerSystem/src/views/comprehensive/index.less index 165fe16..6376fdf 100644 --- a/gz-customerSystem/src/views/comprehensive/index.less +++ b/gz-customerSystem/src/views/comprehensive/index.less @@ -1,5 +1,7 @@ .comprehensive { - position: relative; + display: flex; + flex-direction: column; + height: calc(100% - 68px); margin: 0 16px; &-title { // margin: 0 16px; @@ -14,4 +16,10 @@ &-red { color: #f53f3f; } + &-table { + background-color: #ffffff; + padding: 16px; + flex: 1; + margin-bottom: 16px; + } } diff --git a/gz-customerSystem/src/views/disputeLedger/index.jsx b/gz-customerSystem/src/views/disputeLedger/index.jsx index 402ed27..bbb53eb 100644 --- a/gz-customerSystem/src/views/disputeLedger/index.jsx +++ b/gz-customerSystem/src/views/disputeLedger/index.jsx @@ -2,16 +2,20 @@ * @Company: hugeInfo * @Author: lwh * @Date: 2024-09-14 15:59:17 - * @LastEditTime: 2024-09-14 16:03:34 + * @LastEditTime: 2024-09-17 17:12:37 * @LastEditors: lwh * @Version: 1.0.0 * @Description: */ -import React, { useState, useEffect, useMemo } from 'react'; +import React, { useState, useEffect, useRef, useMemo } from 'react'; import * as $$ from '../../utils/utility'; -import { Form, Typography, Button, Space } from 'antd'; +import { Form, Typography, Row, Col, Space } from 'antd'; import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; +import { disputeLedger_1, disputeLedger_2, disputeLedger_3, disputeLedger_4, disputeLedger_5, disputeLedger_6, disputeLedger_7 } from '../../assets/images'; import NewPage from '../../components/NewPage/index'; +import * as echarts from 'echarts'; +import NewTableSearch from '../../components/NewTableSearch'; +import './index.less' const { Link } = Typography; @@ -26,14 +30,443 @@ } const DisputeLedger = () => { + const [form] = Form.useForm(); + // 数据汇总选择 + const [activeKey, setActiveKey] = useState(0) + const [tabsData, setTabsData] = useState([ + { icon: disputeLedger_1, title: '全部', value: '5032', active: true }, + { icon: disputeLedger_2, title: '综治中心', value: '1022', per: '20.3%' }, + { icon: disputeLedger_3, title: '12345', value: '1006', per: '19.8%' }, + { icon: disputeLedger_4, title: '人民调解', value: '2201', per: '40.3%' }, + { icon: disputeLedger_5, title: '信访', value: '221', per: '4.2%' }, + { icon: disputeLedger_6, title: '劳动仲裁', value: '98', per: '1.8%' }, + { icon: disputeLedger_7, title: '非警务纠纷', value: '432', per: '8.3%' }, + ]); + + // 搜索 or 重置 + function handleSearch(type, session) { + + } return ( - <NewPage - pageHead={ - { breadcrumbData: [{ title: '工作台' }, { title: '纠纷台账' }], title: '纠纷台账' } - } - ></NewPage> + <NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '纠纷台账' }], title: '纠纷台账' }}> + <div className='comprehensive'> + <div className="pageSearch"> + <div className='comprehensive-title'>查询条件</div> + <NewTableSearch + exportButtonShow={false} + labelLength={6} + rowNum={4.5} + form={form} + itemData={[ + { type: 'TreeSelect', name: 'mediateUnitId', label: '区域', placeholder: '请选择', treedata: [] }, + { type: 'RangePicker', name: 'createTime', label: '登记时间', span: 8 }, + { type: 'RangePicker', name: 'endTime', label: '办结时间', span: 8 }, + { + type: 'Select', + name: 'name1', + label: '纠纷类型', + span: 8, + selectdata: [ + { label: '全部', value: '1' }, + { label: '市场监管', value: '2' }, + { label: '劳动社保', value: '3' }, + { label: '城市管理', value: '4' }, + { label: '交通运输', value: '5' }, + { label: '教育医疗', value: '6' }, + { label: '公共服务', value: '7' }, + ], + }, + { + type: 'Select', + name: 'name2', + label: '化解状况', + span: 8, + selectdata: [ + { label: '全部', value: '1' }, + { label: '化解中', value: '2' }, + { label: '化解成功', value: '3' }, + { label: '化解不成功', value: '4' }, + ], + }, + { + type: 'Select', + name: 'name3', + label: '重大矛盾纠纷', + span: 8, + selectdata: [ + { label: '不限', value: '1' }, + ], + }, + { + type: 'Select', + name: 'name4', + label: '重点人员', + span: 8, + selectdata: [ + { label: '不限', value: '1' }, + ], + }, + ]} + handleReset={() => handleSearch('reset')} + handleSearch={() => handleSearch('search')} + /> + </div> + <div className='disputeLedger-row'> + <div className='comprehensive-title'>数据汇总</div> + <div className='disputeLedger-d'> + { + tabsData.map((item, index) => ( + <div onClick={() => setActiveKey(index)} className={`disputeLedger-card ${activeKey === index ? 'disputeLedger-card-active' : ''}`} span={3.4} key={index}> + <div > + <div className='disputeLedger-card-content'> + <div className={`disputeLedger-card-content-t ${activeKey === index ? 'disputeLedger-card-content-t-active' : ''}`}>{item.title}</div> + <div><span className='disputeLedger-card-title'>{item.value}</span> <span className='disputeLedger-unit'>件</span> {item.per && < span className='disputeLedger-unit'>| {item.per}</span>}</div> + </div> + {activeKey === index && <img src={item.icon} alt="" />} + </div> + </div> + )) + } + </div> + </div> + + {/* 图表 */} + <div className='disputeLedger-green'> + <div style={{ display: 'flex', flexDirection: 'column', gap: 12, marginBottom: '12px' }}> + <Space className='big-green-main-space' direction='vertical'> + <div style={{ margin: '0 12px' }}> + <div className='disputeLedger-green-title'>纠纷类型(全部)</div> + <div style={{ paddingBottom: '12px' }}> + <MyLTopChartPie data={ + [ + { value: 22, name: '市场监管' }, + { value: 28, name: '劳动社保' }, + { value: 15, name: '城市管理' }, + { value: 10, name: '交通运输' }, + { value: 5, name: '教育医疗' }, + { value: 20, name: '公共服务' }, + ] + } /> + </div> + </div> + </Space> + <Space style={{ position: 'relative' }} className='big-green-main-space' direction='vertical'> + <div style={{ margin: '0 12px' }}> + <div className='disputeLedger-green-title'>化解状况(全部)</div> + <div style={{ paddingBottom: '12px' }}> + <MyLTopChartPie1 data={ + [ + { value: 90, name: '小学' }, + { value: 200, name: '初中' }, + { value: 100, name: '高中' }, + { value: 300, name: '大学本科' }, + { value: 200, name: '硕士' }, + { value: 100, name: '其他' }, + ] + } /> + </div> + </div> + </Space> + </div> + <Space style={{ flex: '1', marginBottom: '12px' }} className='big-green-main-space' direction='vertical'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>数据统计(全部)</div> + </div> + <div style={{ width: '100%', height: '200px', marginTop: '12px' }}> + <MyChartBar data={[220, 5211, 2500, 3152, 8362, 26220, 8442, 2600, 1850, 1302, 850, 1048]} dataAxis={['本级', '越秀区', '海珠区', '荔湾区', '天河区', '白云区', '黄埔区', '花都区', '番禺区', '南沙区', '从化区', '增城区']} /> + + </div> + </Space> + </div> + </div > + </NewPage > ) } -export default DisputeLedger; \ No newline at end of file +export default DisputeLedger; + +// 柱状图 +const MyChartBar = ({ data, dataAxis }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartBar'), 'dark'); + // let data = [123, 98, 245, 234, 356, 148]; + // let dataAxis = ['低收入家庭', '单亲家庭', '流动家庭', '犯罪家庭', '无家庭', '其他'] + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 10, + y: 20, + x2: 20, + y2: 0, + containLabel: true, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'none' + }, + formatter: function (params) { + return params[0].name + ': ' + params[0].value + '人'; + } + }, + xAxis: [{ + type: 'category', + // boundaryGap: false, + data: dataAxis, + + axisLabel: { + interval: dataAxis?.length > 15 ? 1 : 0, + formatter: function (value) { + // 如果标签长度超过4,将剩余的文字替换为省略号 + if (value.length > 4) { + return value.slice(0, 4) + '...'; + } else { + return value; + } + } + }, + }], + yAxis: { + splitLine: { + lineStyle: { + type: 'dashed', + color: '#ccc' + } + }, + + }, + dataZoom: [ + { + type: 'inside' + } + ], + series: [ + { + type: 'bar', + name: 'bar1', + stack: 'one', + showBackground: false, + barWidth: 28, // 柱子宽度 + itemStyle: { + color: '#3788C5' + }, + label: { + show: true, + position: 'top', + valueAnimation: false + }, + emphasis: { + itemStyle: { + opacity: 0.7 + } + }, + data: data + }, + ] + }); + }, [data]); + + useEffect(() => { + // if (myChart && myChartRef.current.clientHeight !== 0) { + // myChart.forceFit(); + // } + }); + + return <div id="chartBar" ref={myChartRef} style={{ height: '494px', width: '100%' }} />; +}; + +const MyLTopChartPie = ({ data }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartLTopPie'), 'dark'); + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 5, + y: 12, + x2: 20, + y2: 0, + }, + legend: { + orient: 'vertical', // 垂直排列 + top: 'center', + right: 10, + data: [ + { + name: '市场监管', + icon: 'circle', // 图例标记的形状 + }, + { + name: '劳动社保', + icon: 'circle', + }, + { + name: '城市管理', + icon: 'circle', + }, + { + name: '交通运输', + icon: 'circle', + }, + { + name: '教育医疗', + icon: 'circle', + }, + { + name: '公共服务', + icon: 'circle', + } + // ... 其他数据 + ] + }, + series: [ + { + name: '纠纷类型', + type: 'pie', + radius: '90%', + center: ['30%', '50%'], + color: ['#FCE996', '#FFCF8B', '#86E8DD', '#FDCDC5', '#C396ED', '#9FD4FD'], + labelLine: { // 关闭引导线 + show: false + }, + label: { + show: true, + position: 'inside', // 设置文字在扇形区域内 + formatter: '{d}%', // 标签文本格式器 + rich: { + a: { + lineHeight: 25, + align: 'center' + }, + b: { + lineHeight: 25, + align: 'center' + }, + c: { + lineHeight: 25, + align: 'center' + }, + d: { + lineHeight: 25, + align: 'center' + }, + e: { + lineHeight: 25, + align: 'center' + }, + f: { + lineHeight: 25, + align: 'center' + } + }, + // normal: { + // show: false, + // }, + }, + data: data + }, + ] + }); + }, [data]); + + + return <div id="chartLTopPie" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; + +const MyLTopChartPie1 = ({ data }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartLTopPie1'), 'dark'); + // let data = [123, 98, 245, 234, 356, 148]; + // let dataAxis = ['低收入家庭', '单亲家庭', '流动家庭', '犯罪家庭', '无家庭', '其他'] + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 5, + y: 12, + x2: 20, + y2: 0, + containLabel: true, + }, + legend: { + orient: 'vertical', // 垂直排列 + top: 'center', + right: 10, + data: [ + { + name: '化解中', + icon: 'circle', // 图例标记的形状 + }, + { + name: '化解成功', + icon: 'circle', + }, + { + name: '化解不成功', + icon: 'circle', + }, + + ] + }, + series: [ + { + name: '化解状况', + type: 'pie', + radius: ['60%', '90%'], // 设置饼图的内半径和外半径,实现扇形区域 + center: ['30%', '50%'], + color: ['#B6DDF1', '#3A8AC6', '#094282'], + data: [ + { value: 24, name: '化解中' }, + { value: 30, name: '化解成功' }, + { value: 46, name: '化解不成功' }, + ], + label: { + show: true, + position: 'inside', // 设置文字在扇形区域内 + formatter: '{d}%', // 标签文本格式器 + rich: { + a: { + lineHeight: 25, + align: 'center' + }, + b: { + lineHeight: 25, + align: 'center' + }, + } + } + } + ] + }); + }, [data]); + + useEffect(() => { + // if (myChart && myChartRef.current.clientHeight !== 0) { + // myChart.forceFit(); + // } + }); + + return <div id="chartLTopPie1" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; diff --git a/gz-customerSystem/src/views/disputeLedger/index.less b/gz-customerSystem/src/views/disputeLedger/index.less index e69de29..df51d26 100644 --- a/gz-customerSystem/src/views/disputeLedger/index.less +++ b/gz-customerSystem/src/views/disputeLedger/index.less @@ -0,0 +1,112 @@ +.disputeLedger { + &-row { + margin-top: 12px; + background-color: #fff; + padding: 12px 16px 16px 16px; + } + &-d { + display: flex; + gap: 24px; + align-items: center; + justify-content: space-between; + } + &-card { + position: relative; + flex: 1; + // width: 167px; + height: 75px; + background: #f2f3f5; + border: 0.5px solid #e5e6eb; + border-radius: 4px; + & img { + width: 40px; + position: absolute; + right: 0; + top: 14px; + } + &-active { + background: #e8f8ff; + border: 1px solid #b6ddf1; + } + &-content { + padding: 12px 16px; + &-t { + margin-bottom: 4px; + &-active { + color: #1a6fb8; + } + } + } + &-title { + font-size: 18px; + line-height: 26px; + } + } + &-title { + font-size: 14px; + color: #1d2129; + } + &-unit { + color: #86909c; + font-size: 12px; + line-height: 20px; + } + &-green { + margin: 12px 0; + display: flex; + gap: 12px; + &-title { + font-size: 16px; + padding: 12px 16px; + color: rgba(0, 0, 0, 0.85); + } + } +} + +.big-green { + &-main { + &-space { + width: 389px; + background-color: #fff; + } + &-title { + background: #105489; + height: 36px; + padding: 0 12px 0 8px; + color: #fff; + display: flex; + align-items: center; + &-t { + line-height: 30px; + height: 24px; + margin-left: 8px; + } + &-display { + display: flex; + align-items: end; + } + &-bias { + transform: rotate(-45deg); + height: 1px; + width: 5px; + background-color: rgba(255, 255, 255, 0.4); + position: relative; + top: -2px; + left: -1px; + } + &-line { + flex: 1; + height: 1px; + // transform: skewX(-45deg); + background-color: rgba(255, 255, 255, 0.4); + } + + &-graph { + background: #ffc97a; + width: 20px; + height: 3px; + transform: skewX(-45deg); + } + } + } +} diff --git a/gz-customerSystem/src/views/workDash/index.jsx b/gz-customerSystem/src/views/workDash/index.jsx new file mode 100644 index 0000000..2eac1db --- /dev/null +++ b/gz-customerSystem/src/views/workDash/index.jsx @@ -0,0 +1,806 @@ +/* + * @Company: hugeInfo + * @Author: lwh + * @Date: 2024-09-14 15:59:17 + * @LastEditTime: 2024-09-17 17:12:08 + * @LastEditors: lwh + * @Version: 1.0.0 + * @Description: + */ +import React, { useState, useEffect, useRef, useMemo } from 'react'; +import * as $$ from '../../utils/utility'; +import { Form, Typography, Row, Col, Space, Divider, Badge } from 'antd'; +import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; +import { workDash_1, workDash_2, workDash_3, workDash_4, workDash_5, workDash_6, workDash_7, workDash_8, workDash_9, disputeLedger_1, disputeLedger_2, disputeLedger_3, disputeLedger_4, disputeLedger_5, disputeLedger_6, disputeLedger_7 } from '../../assets/images'; +import NewPage from '../../components/NewPage/index'; +import * as echarts from 'echarts'; +import TableView from '../../components/TableViewCanSort'; +import NewTableSearch from '../../components/NewTableSearch'; +import publicDataStatus from '../../status/publicData'; +import './index.less' + +const { Link } = Typography; + +// 调度中心列表 +function getMyMediationDataApi(submitData) { + return $$.ax.request({ url: 'caseDisp/pageQuery', type: 'get', data: submitData, service: 'disp' }); +} + +// 获取列表分类tab +function getTabsDataApi() { + return $$.ax.request({ url: 'caseDisp/getApplyCanal', type: 'get', service: 'disp' }); +} + +const WorkDash = () => { + const [form] = Form.useForm(); + + // 搜索 + const [search, setSearch] = useState({ page: 1, size: 10, }); + + // 数据 + const [data, setData] = useState({ + tableData: [ + { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, + { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, + { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, + { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, + { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, + ] + }); + + // 调解组织select框数据 + const [adjustOrgData, setAdjustOrgData] = useState([]); + + + + + // 搜索 or 重置 + function handleSearch(type, session) { + + } + + // 表头 + const columns = () => { + const columnsData = [ + { title: '登记时间', width: 150, dataIndex: 'createTime', render: (text) => <span>{$$.dateFormat(text)}</span> }, + { title: '事项状态', width: 100, dataIndex: 'statusName' }, + { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, + { title: '事项类型', width: 150, dataIndex: 'caseTypeName' }, + { title: '问题属地', width: 100, dataIndex: 'canalName' }, + { title: '登记机构', width: 150, dataIndex: 'inputUnitName' }, + { title: '承办部门', width: 100, dataIndex: 'assistUnitName' }, + { title: '办结时间', width: 100, dataIndex: 'closeTime', render: (text) => <span>{$$.dateFormat(text)}</span> }, + // 22_00025-1 成功 22_00025-2 化解不成功 + { title: '化解结果', width: 100, dataIndex: 'mediResult', render: (text) => <div className={text === '22_00025-1' ? 'comprehensive-green' : text === '22_00025-2' ? 'comprehensive-red' : '-'} >{text === '22_00025-1' ? '化解成功' : text === '22_00025-2' ? '化解不成功' : '-'}</div> }, + { title: '申请方', width: 100, dataIndex: 'action', render: (text, record) => <div>{record.plaintiffList?.length > 0 ? record.plaintiffList?.map(i => i.trueName)?.join(',') : '-'}</div> }, + { title: '被申请方', width: 100, dataIndex: 'action', render: (text, record) => <div>{record.defendantList?.length > 0 ? record.defendantList?.map(i => i.trueName)?.join(',') : '-'}</div> }, + { + title: '操作', + dataIndex: 'action', + width: 50, + render: (_, record) => { + return <Link onClick={() => handleJump(record)}>详情</Link>; + }, + }, + ]; + return columnsData; + }; + + // 跳转详情页 + function handleJump(type, info) { + + } + + // 初始化 + useEffect(() => { + // publicDataStatus.getUnitData((data) => setAdjustOrgData(data)); + + }, []); + + return ( + <NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '解纷态势' }], title: '解纷态势' }}> + <div className='comprehensive'> + <div className="pageSearch"> + <div className='comprehensive-title'>查询条件</div> + <NewTableSearch + exportButtonShow={false} + labelLength={6} + rowNum={4.5} + form={form} + itemData={[ + { type: 'TreeSelect', name: 'mediateUnitId', label: '区域', placeholder: '请选择', treedata: adjustOrgData }, + { type: 'RangePicker', name: 'createTime', label: '登记时间', span: 8 }, + { type: 'RangePicker', name: 'endTime', label: '办结时间', span: 8 }, + { + type: 'Select', + name: 'name1', + label: '纠纷类型', + span: 8, + selectdata: [ + { label: '全部', value: '1' }, + { label: '市场监管', value: '2' }, + { label: '劳动社保', value: '3' }, + { label: '城市管理', value: '4' }, + { label: '交通运输', value: '5' }, + { label: '教育医疗', value: '6' }, + { label: '公共服务', value: '7' }, + ], + }, + { + type: 'Select', + name: 'name2', + label: '事项状态', + span: 8, + selectdata: [ + { label: '全部', value: '1' }, + { label: '化解中', value: '2' }, + { label: '化解成功', value: '3' }, + { label: '化解不成功', value: '4' }, + ], + }, + ]} + handleReset={() => handleSearch('reset')} + handleSearch={() => handleSearch('search')} + /> + </div> + <div className='disputeLedger-row'> + <div className='comprehensive-title'>数据总览</div> + <div> + <Space className='workDash-d' align='center' split={<Divider type="vertical" style={{ height: '48px' }} />}> + <div className='workDash-item'> + <div className='workDash-item-img'> + <img src={workDash_1} alt="" srcset="" /> + </div> + <div className='workDash-item-div'> + <div className='workDash-item-title'>总登记</div> + <div className='workDash-item-value'>3301</div> + </div> + </div> + <div className='workDash-item'> + <div className='workDash-item-img'> + <img src={workDash_2} alt="" srcset="" /> + </div> + <div className='workDash-item-div'> + <div className='workDash-item-title'>办理中</div> + <div className='workDash-item-value'>103</div> + </div> + </div> + <div className='workDash-item1'> + <div className='workDash-item-img'> + <img src={workDash_3} alt="" srcset="" /> + </div> + <div className='workDash-item-div'> + <div className='workDash-item-title'><div style={{ width: '50px' }}>已结案</div><div style={{ width: '36px' }}></div> <Badge dot size='30' status="success" text={<Space split={<Divider type="vertical" />}><span style={{ color: '#4E5969', fontSize: '14px' }}>化解成功:3066件 | 成功率:<span style={{ color: '#00B42A' }}>90.3%</span></span></Space>} /></div> + <div className='workDash-item-value'><div style={{ width: '50px' }}>3166</div><div style={{ width: '36px' }}></div><Badge status="error" text={<Space split={<Divider type="vertical" />}><span style={{ color: '#4E5969', fontSize: '14px' }}>化解不成功:100件</span></Space>} /></div> + </div> + </div> + <div className='workDash-item'> + <div className='workDash-item-img'> + <img src={workDash_4} alt="" srcset="" /> + </div> + <div className='workDash-item-div'> + <div className='workDash-item-title'>不予受理</div> + <div className='workDash-item-value'>32</div> + </div> + </div> + </Space> + </div> + </div> + + {/* 图表 */} + <div className='disputeLedger-green'> + <Space style={{ flex: '1' }} className='big-green-main-space' direction='vertical'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>数据统计</div> + </div> + <div style={{ width: '100%', height: '300px', marginTop: '12px' }}> + <MyChartBar data={[220, 5211, 2500, 3152, 8362, 26220, 8442, 2600, 1850, 1302, 850, 1048]} dataAxis={['本级', '越秀区', '海珠区', '荔湾区', '天河区', '白云区', '黄埔区', '花都区', '番禺区', '南沙区', '从化区', '增城区']} /> + </div> + </Space> + </div> + <div style={{ marginBottom: '12px', width: '100%', display: 'flex', gap: '12px', justifyContent: 'space-between' }} > + <Row gutter={16}> + <Col span={16}> + <div className='workDash-main'> + <div style={{ width: '100%' }}> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>事项来源</div> + </div> + <div className='workDash-main-card-one'> + <div className='workDash-main-card'> + <div className='workDash-main-card-head'> + <div className='workDash-main-card-head-l'><div className='workDash-main-card-head-l-img'><img src={workDash_6} alt="" srcset="" /></div></div> + <div className='workDash-main-card-head-r'><div className='workDash-main-card-head-r-title'>大厅来访</div><div className='workDash-main-card-head-r-value'>2233<span className='workDash-main-card-head-r-subValue'> | 40%</span></div></div> + </div> + <div className='workDash-main-card-body'> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解中</div> + <div className='workDash-main-card-body-flex-value'>100</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功</div> + <div className='workDash-main-card-body-flex-value'>2132</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解不成功</div> + <div className='workDash-main-card-body-flex-value'>50</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功率</div> + <div className='workDash-main-card-body-flex-value'>84.3%</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>不予受理</div> + <div className='workDash-main-card-body-flex-value'>3</div> + </div> + </div> + </div> + + <div className='workDash-main-card'> + <div className='workDash-main-card-head'> + <div className='workDash-main-card-head-l workDash-bg_2'><div className='workDash-main-card-head-l-img workDash-bg_2_img'><img src={workDash_7} alt="" srcset="" /></div></div> + <div className='workDash-main-card-head-r workDash-bg_2_r'><div className='workDash-main-card-head-r-title'>线上来访</div><div className='workDash-main-card-head-r-value'>430<span className='workDash-main-card-head-r-subValue'> | 17%</span></div></div> + </div> + <div className='workDash-main-card-body'> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解中</div> + <div className='workDash-main-card-body-flex-value'>30</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功</div> + <div className='workDash-main-card-body-flex-value'>400</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解不成功</div> + <div className='workDash-main-card-body-flex-value'>7</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功率</div> + <div className='workDash-main-card-body-flex-value'>95.3%</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>不予受理</div> + <div className='workDash-main-card-body-flex-value'>3</div> + </div> + </div> + </div> + + <div className='workDash-main-card'> + <div className='workDash-main-card-head'> + <div className='workDash-main-card-head-l workDash-bg_3'><div className='workDash-main-card-head-l-img workDash-bg_3_img'><img src={workDash_8} alt="" srcset="" /></div></div> + <div className='workDash-main-card-head-r workDash-bg_3_r'><div className='workDash-main-card-head-r-title'>自行排查</div><div className='workDash-main-card-head-r-value'>672<span className='workDash-main-card-head-r-subValue'> | 20%</span></div></div> + </div> + <div className='workDash-main-card-body'> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解中</div> + <div className='workDash-main-card-body-flex-value'>80</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功</div> + <div className='workDash-main-card-body-flex-value'>520</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解不成功</div> + <div className='workDash-main-card-body-flex-value'>70</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功率</div> + <div className='workDash-main-card-body-flex-value'>92.3%</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>不予受理</div> + <div className='workDash-main-card-body-flex-value'>2</div> + </div> + </div> + </div> + + <div className='workDash-main-card'> + <div className='workDash-main-card-head'> + <div className='workDash-main-card-head-l workDash-bg_4'><div className='workDash-main-card-head-l-img workDash-bg_4_img'><img src={workDash_9} alt="" srcset="" /></div></div> + <div className='workDash-main-card-head-r workDash-bg_4_r'><div className='workDash-main-card-head-r-title'>协同推送</div><div className='workDash-main-card-head-r-value'>1094<span className='workDash-main-card-head-r-subValue'> | 33%</span></div></div> + </div> + <div className='workDash-main-card-body'> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解中</div> + <div className='workDash-main-card-body-flex-value'>165</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功</div> + <div className='workDash-main-card-body-flex-value'>776</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解不成功</div> + <div className='workDash-main-card-body-flex-value'>150</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>化解成功率</div> + <div className='workDash-main-card-body-flex-value'>94.3%</div> + </div> + <div className='workDash-main-card-body-flex'> + <div className='workDash-main-card-body-flex-title'>不予受理</div> + <div className='workDash-main-card-body-flex-value'>31</div> + </div> + </div> + </div> + + </div> + </div> + </div> + </Col> + <Col span={8}> + <div className='workDash-main1'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>工作效能</div> + </div> + <div className='workDash-main1-chart'> + <div className='workDash-main1-flex'> + <div className='workDash-main1-flex-l'> + <div className='workDash-main1-flex-l-title'>事项分派</div> + <div className='workDash-main1-flex-l-value'>320<span className='workDash-main1-flex-l-subValue'>件</span></div> + </div> + <div className='workDash-main1-flex-r workDash-main1-flex-r-green'>平均耗时<br />1.5小时</div> + </div> + + <div className='workDash-main1-flex'> + <div className='workDash-main1-flex-l'> + <div className='workDash-main1-flex-l-title'>事项办理</div> + <div className='workDash-main1-flex-l-value'>299<span className='workDash-main1-flex-l-subValue'>件</span></div> + </div> + <div className='workDash-main1-flex-r workDash-main1-flex-r-orange'>平均耗时<br />80.3小时</div> + </div> + + <div className='workDash-main1-flex'> + <div className='workDash-main1-flex-l'> + <div className='workDash-main1-flex-l-title'>事项签收</div> + <div className='workDash-main1-flex-l-value'>320<span className='workDash-main1-flex-l-subValue'>件</span></div> + </div> + <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />5.5小时</div> + </div> + <div className='workDash-main1-flex'> + <div className='workDash-main1-flex-l'> + <div className='workDash-main1-flex-l-title'>申请审批</div> + <div className='workDash-main1-flex-l-value'>108<span className='workDash-main1-flex-l-subValue'>件</span></div> + </div> + <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />4小时</div> + </div> + <div className='workDash-main1-flex'> + <div className='workDash-main1-flex-l'> + <div className='workDash-main1-flex-l-title'>事项受理</div> + <div className='workDash-main1-flex-l-value'>318<span className='workDash-main1-flex-l-subValue'>件</span></div> + </div> + <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />15.5小时</div> + </div> + <div className='workDash-main1-flex'> + <div className='workDash-main1-flex-l'> + <div className='workDash-main1-flex-l-title'>督办回复</div> + <div className='workDash-main1-flex-l-value'>52<span className='workDash-main1-flex-l-subValue'>件</span></div> + </div> + <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />12.3小时</div> + </div> + </div> + </div> + </Col> + + </Row> + </div> + + <div style={{ marginBottom: '12px', width: '100%' }} > + <Row gutter={16}> + <Col span={8}> + <div className='workDash-main-flex_1'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>纠纷类型</div> + </div> + <div style={{ width: '100%', height: '242px', marginTop: '12px' }}> + <MyLTopChartPie data={ + [ + { value: 22, name: '市场监管' }, + { value: 28, name: '劳动社保' }, + { value: 15, name: '城市管理' }, + { value: 10, name: '交通运输' }, + { value: 5, name: '教育医疗' }, + { value: 20, name: '公共服务' }, + ] + } /> + </div> + </div> + </Col> + <Col span={8}> + <div className='workDash-main-flex_1'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>化解状况</div> + </div> + <div style={{ width: '100%', height: '242px', marginTop: '12px' }}> + <MyLTopChartPie1 data={ + [ + { value: 90, name: '小学' }, + { value: 200, name: '初中' }, + { value: 100, name: '高中' }, + { value: 300, name: '大学本科' }, + { value: 200, name: '硕士' }, + { value: 100, name: '其他' }, + ] + } /> + </div> + </div> + </Col> + <Col span={8}> + <div className='workDash-main-flex_1'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>事项等级</div> + </div> + <div className='workDash-grade'> + <div className='workDash-grade-item workDash-grade-item-orange'> + <div className='workDash-grade-item-t'><div className='workDash-grade-item-t-orange'>3级事件</div><div className='workDash-grade-item-t-value'>3201<span className='workDash-grade-item-t-unit'>件</span></div></div> + <div className='workDash-grade-item-b'> + <div className='workDash-grade-item-b-bg'> + <div className='workDash-grade-item-b-bg-orange'></div> + </div> + </div> + </div> + <div className='workDash-grade-item workDash-grade-item-blue'> + <div className='workDash-grade-item-t'><div className='workDash-grade-item-t-blue'>2级事件</div><div className='workDash-grade-item-t-value'>104<span className='workDash-grade-item-t-unit'>件</span></div></div> + <div className='workDash-grade-item-b'> + <div className='workDash-grade-item-b-bg'> + <div className='workDash-grade-item-b-bg-blue'></div> + </div> + </div> + </div> + <div className='workDash-grade-item workDash-grade-item-red'> + <div className='workDash-grade-item-t'><div className='workDash-grade-item-t-red'>1级事件</div><div className='workDash-grade-item-t-value'>52<span className='workDash-grade-item-t-unit'>件</span></div></div> + <div className='workDash-grade-item-b'> + <div className='workDash-grade-item-b-bg'> + <div className='workDash-grade-item-b-bg-red'></div> + </div> + </div> + </div> + </div> + </div> + </Col> + </Row> + + + + </div> + <div style={{ width: '100%', display: 'flex', gap: '12px', justifyContent: 'space-between' }} > + <div className='workDash-main-flex_1' style={{ marginBottom: '12px', }}> + <div className='big-green-main-title-display-table'> + <div className='disputeLedger-green-title'>实时动态</div> + <div style={{ padding: '4px 16px 16px' }}> + <TableView + columns={columns()} + dataSource={data.tableData} + /> + </div> + </div> + </div> + </div> + </div> + </NewPage > + ) +} + +export default WorkDash; + +// 柱状图 +const MyChartBar = ({ data, dataAxis }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartBar'), 'dark'); + // let data = [123, 98, 245, 234, 356, 148]; + // let dataAxis = ['低收入家庭', '单亲家庭', '流动家庭', '犯罪家庭', '无家庭', '其他'] + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 10, + y: 20, + x2: 20, + y2: 0, + containLabel: true, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'none' + }, + formatter: function (params) { + return params[0].name + ': ' + params[0].value + '人'; + } + }, + xAxis: [{ + type: 'category', + // boundaryGap: false, + data: dataAxis, + + axisLabel: { + interval: dataAxis?.length > 15 ? 1 : 0, + formatter: function (value) { + // 如果标签长度超过4,将剩余的文字替换为省略号 + if (value.length > 4) { + return value.slice(0, 4) + '...'; + } else { + return value; + } + } + }, + }], + yAxis: { + splitLine: { + lineStyle: { + type: 'dashed', + color: '#ccc' + } + }, + + }, + dataZoom: [ + { + type: 'inside' + } + ], + series: [ + { + type: 'bar', + name: '化解中', + data: [1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320], + barWidth: 24, // 设置柱子宽度 + label: { + show: true, + position: 'top', + valueAnimation: false + }, + emphasis: { + itemStyle: { + opacity: 0.7 + } + }, + itemStyle: { + color: '#57a9fb', + borderWidth: 2 // 设置边框宽度 + } + }, + { + type: 'bar', + name: '化解成功', + data: [920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920], + barWidth: 24, // 设置柱子宽度 + label: { + show: true, + position: 'top', + valueAnimation: false + }, + emphasis: { + itemStyle: { + opacity: 0.7 + } + }, + itemStyle: { + color: '#23c343', + borderWidth: 2, // 设置边框宽度 + left: 0 // 设置左边距,以实现重叠效果 + } + }, + { + type: 'bar', + name: '化解不成功', + data: [400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400], + barWidth: 24, // 设置柱子宽度 + label: { + show: true, + position: 'top', + valueAnimation: false + }, + emphasis: { + itemStyle: { + opacity: 0.7 + } + }, + itemStyle: { + color: '#F76560', + borderWidth: 2, // 设置边框宽度 + left: 0 // 设置左边距,以实现重叠效果 + } + } + ] + }); + }, [data]); + + useEffect(() => { + // if (myChart && myChartRef.current.clientHeight !== 0) { + // myChart.forceFit(); + // } + }); + + return <div id="chartBar" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; + +const MyLTopChartPie = ({ data }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartLTopPie'), 'dark'); + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 5, + y: 12, + x2: 20, + y2: 0, + }, + legend: { + orient: 'vertical', // 垂直排列 + top: 'center', + right: 10, + data: [ + { + name: '市场监管', + icon: 'circle', // 图例标记的形状 + }, + { + name: '劳动社保', + icon: 'circle', + }, + { + name: '城市管理', + icon: 'circle', + }, + { + name: '交通运输', + icon: 'circle', + }, + { + name: '教育医疗', + icon: 'circle', + }, + { + name: '公共服务', + icon: 'circle', + } + // ... 其他数据 + ] + }, + series: [ + { + name: '纠纷类型', + type: 'pie', + radius: '90%', + center: ['30%', '50%'], + color: ['#FCE996', '#FFCF8B', '#86E8DD', '#FDCDC5', '#C396ED', '#9FD4FD'], + labelLine: { // 关闭引导线 + show: false + }, + label: { + show: true, + position: 'inside', // 设置文字在扇形区域内 + formatter: '{d}%', // 标签文本格式器 + rich: { + a: { + lineHeight: 25, + align: 'center' + }, + b: { + lineHeight: 25, + align: 'center' + }, + c: { + lineHeight: 25, + align: 'center' + }, + d: { + lineHeight: 25, + align: 'center' + }, + e: { + lineHeight: 25, + align: 'center' + }, + f: { + lineHeight: 25, + align: 'center' + } + }, + // normal: { + // show: false, + // }, + }, + data: data + }, + ] + }); + }, [data]); + + + return <div id="chartLTopPie" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; + +const MyLTopChartPie1 = ({ data }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartLTopPie1'), 'dark'); + // let data = [123, 98, 245, 234, 356, 148]; + // let dataAxis = ['低收入家庭', '单亲家庭', '流动家庭', '犯罪家庭', '无家庭', '其他'] + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 5, + y: 12, + x2: 20, + y2: 0, + containLabel: true, + }, + legend: { + orient: 'vertical', // 垂直排列 + top: 'center', + right: 10, + data: [ + { + name: '化解中', + icon: 'circle', // 图例标记的形状 + }, + { + name: '化解成功', + icon: 'circle', + }, + { + name: '化解不成功', + icon: 'circle', + }, + + ] + }, + series: [ + { + name: '化解状况', + type: 'pie', + radius: ['60%', '90%'], // 设置饼图的内半径和外半径,实现扇形区域 + center: ['30%', '50%'], + color: ['#B6DDF1', '#3A8AC6', '#094282'], + data: [ + { value: 24, name: '化解中' }, + { value: 30, name: '化解成功' }, + { value: 46, name: '化解不成功' }, + ], + label: { + show: true, + position: 'inside', // 设置文字在扇形区域内 + formatter: '{d}%', // 标签文本格式器 + rich: { + a: { + lineHeight: 25, + align: 'center' + }, + b: { + lineHeight: 25, + align: 'center' + }, + } + } + } + ] + }); + }, [data]); + + useEffect(() => { + }); + + return <div id="chartLTopPie1" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; diff --git a/gz-customerSystem/src/views/workDash/index.less b/gz-customerSystem/src/views/workDash/index.less new file mode 100644 index 0000000..0f74b79 --- /dev/null +++ b/gz-customerSystem/src/views/workDash/index.less @@ -0,0 +1,313 @@ +.workDash { + &-d { + display: flex; + width: 100%; + justify-content: space-around; + // & .ant-space-item { + // flex: 1; + // } + } + &-item { + flex: 1; + display: flex; + gap: 16px; + &-img { + width: 48px; + height: 48px; + background-color: rgba(242, 243, 245, 0.95); + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + & img { + width: 24px; + height: 24px; + } + } + &-div { + } + &-title { + font-size: 14px; + line-height: 22px; + color: #4e5969; + display: flex; + } + &-value { + color: #1d2129; + font-size: 18px; + line-height: 26px; + display: flex; + } + } + &-item1 { + flex: 2; + display: flex; + gap: 16px; + } + &-main { + display: flex; + flex: 2; + background-color: #fff; + &-flex_1 { + flex: 1; + background-color: #fff; + } + &-card { + // width: 197px; + &-one { + padding: 0 16px 16px; + display: flex; + gap: 24px; + justify-content: space-between; + } + &-head { + display: flex; + &-l { + width: 80px; + height: 80px; + background-color: #08979c; + display: flex; + justify-content: center; + align-items: center; + border-radius: 5px 0px 0px 5px; + &-img { + width: 48px; + height: 48px; + border-radius: 50%; + background-color: #96e0d7; + display: flex; + justify-content: center; + align-items: center; + & img { + width: 24px; + height: 24px; + } + } + } + &-r { + background: linear-gradient(271deg, #13c2c2 0%, rgba(5, 174, 174, 0.8) 14%); + color: #fff; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + border-radius: 0px 5px 5px 0px; + padding-left: 16px; + flex: 1; + &-title { + font-size: 14px; + } + &-value { + font-size: 20px; + line-height: 28px; + font-weight: 500; + display: flex; + align-items: center; + height: 28px; + } + &-subValue { + font-size: 12px; + line-height: 28px; + font-weight: 400; + position: relative; + top: 2px; + } + } + } + &-body { + display: flex; + flex-wrap: wrap; + padding: 10px; + gap: 16px; + margin-top: 12px; + &-flex { + display: flex; + flex-direction: column; + gap: 4px; + + &-title { + font-size: 12px; + line-height: 20px; + color: #4e5969; + } + &-value { + color: #1d2129; + font-size: 14px; + line-height: 22px; + } + } + } + } + } + &-main1 { + // display: flex; + flex: 1; + background-color: #fff; + &-chart { + display: flex; + flex-wrap: wrap; + padding: 0 16px 12px; + } + &-flex { + width: 50%; + display: flex; + gap: 16px; + justify-content: center; + padding: 11px 0; + &-l { + font-size: 14px; + line-height: 22px; + color: #4e5969; + display: flex; + flex-direction: column; + gap: 4px; + &-value { + color: #1d2129; + font-size: 18px; + line-height: 26px; + } + &-subValue { + font-size: 14px; + line-height: 22px; + color: #4e5969; + } + } + &-r { + width: 72px; + height: 48px; + padding: 4px 12px; + text-align: center; + font-size: 12px; + line-height: 20px; + &-green { + background: #e8ffea; + color: #00b42a; + } + &-orange { + background: #fff7e6; + color: #ef6c24; + } + &-blue { + background: #e6f7ff; + color: #1890ff; + } + } + } + } + &-grade { + padding: 16px; + display: flex; + flex-direction: column; + gap: 8px; + &-item { + padding: 12px 8px; + &-t { + display: flex; + justify-content: space-between; + &-orange { + padding: 2px 12px; + color: #ef6c24; + border-radius: 2px; + background: #fff7e6; + border: 1px solid #fa8c16; + } + &-blue { + padding: 2px 12px; + color: #3491fa; + border-radius: 2px; + background: #e8f7ff; + border: 1px solid #3491fa; + } + &-red { + padding: 2px 12px; + color: #f76560; + border-radius: 2px; + background: #ffece8; + border: 1px solid #f53f3f; + } + &-value { + font-size: 18px; + line-height: 28px; + margin-right: 4px; + } + &-unit { + font-size: 12px; + line-height: 20px; + color: #86909c; + } + } + &-b { + margin-top: 8px; + &-bg { + height: 3px; + width: 100%; + background: #e9eaeb; + position: relative; + &-orange { + width: 80%; + height: 3px; + position: absolute; + top: 0; + left: 0; + background: linear-gradient(270deg, #ffc069 0%, #fa8c16); + } + &-blue { + width: 20%; + height: 3px; + position: absolute; + top: 0; + left: 0; + background: linear-gradient(270deg,#57a9fb 0%, #3491fa); + } + &-red { + width: 10%; + height: 3px; + position: absolute; + top: 0; + left: 0; + background: linear-gradient(270deg,#f76560 0%, #f53f3f); + } + } + } + &-orange { + border: 1px solid #fa8c16; + } + &-blue { + border: 1px solid #3491fa; + } + &-red { + border: 1px solid #f76560; + } + } + } +} + +.workDash-bg_2 { + background: #1890ff; + &_img { + background-color: #91d5ff; + } + &_r { + background: linear-gradient(271deg, #1890ff 0%, rgba(24, 144, 255, 0.8) 14%); + } +} + +.workDash-bg_3 { + background: #ef6c24; + &_img { + background-color: #ffcba1; + } + &_r { + background: linear-gradient(271deg, #ef6c24 0%, rgba(239, 108, 36, 0.8) 14%); + } +} + +.workDash-bg_4 { + background: #d10269; + &_img { + background-color: #ffa6c6; + } + &_r { + background: linear-gradient(271deg, #d10269 0%, rgba(209, 2, 105, 0.8) 14%); + } +} -- Gitblit v1.8.0