15 files added
12 files modified
| | |
| | | "react-scripts": "5.0.0", |
| | | "react-virtual": "^2.10.4", |
| | | "web-vitals": "^2.1.4" |
| | | }, |
| | | "devDependencies": { |
| | | "@arco-plugins/vite-react": "^1.3.3" |
| | | } |
| | | }, |
| | | "node_modules/@adobe/css-tools": { |
| | |
| | | "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz", |
| | | "integrity": "sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A==" |
| | | }, |
| | | "node_modules/@arco-plugins/vite-react": { |
| | | "version": "1.3.3", |
| | | "resolved": "https://registry.npmmirror.com/@arco-plugins/vite-react/-/vite-react-1.3.3.tgz", |
| | | "integrity": "sha512-fcGh/69xKGqIjMdIw6NCqst4uWME/WTYjiC6AxHbKBmeYSONazBYd+KtEDx9Be2N0pF4+sk+MGUDy3mrF13EdA==", |
| | | "dev": true, |
| | | "dependencies": { |
| | | "@babel/generator": "^7.12.11", |
| | | "@babel/helper-module-imports": "^7.12.5", |
| | | "@babel/parser": "^7.12.11", |
| | | "@babel/traverse": "^7.12.12", |
| | | "@babel/types": "^7.12.12", |
| | | "@types/node": "^16.11.10" |
| | | } |
| | | }, |
| | | "node_modules/@arco-plugins/vite-react/node_modules/@types/node": { |
| | | "version": "16.18.105", |
| | | "resolved": "https://registry.npmmirror.com/@types/node/-/node-16.18.105.tgz", |
| | | "integrity": "sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/@babel/code-frame": { |
| | | "version": "7.24.7", |
| | | "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz", |
| | |
| | | "last 1 firefox version", |
| | | "last 1 safari version" |
| | | ] |
| | | }, |
| | | "devDependencies": { |
| | | "@arco-plugins/vite-react": "^1.3.3" |
| | | } |
| | | } |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-16 11:25:57 |
| | | * @LastEditTime: 2024-08-09 14:57:35 |
| | | * @LastEditTime: 2024-08-12 09:26:56 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: api地址 |
| | | */ |
| | | export const debug = { |
| | | // web服务 |
| | | // baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | baseUrl: 'http://192.168.3.108:9002', |
| | | baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | // baseUrl: 'http://192.168.3.108:9002', |
| | | // baseUrl: 'http://mdqgnh.natappfree.cc', |
| | | |
| | | // 附件服务 |
| | | fileUrl: 'http://192.168.3.108:9002', |
| | | // fileUrl: 'http://192.168.3.108:9002', |
| | | fileUrl: 'http://gz.hugeinfo.com.cn', |
| | | |
| | | |
| | | // 文件查看url 后面接附件编号 |
| | | fileShowUrl: '/dyh-sys/api/v1/fileInfo/show/', |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: lwh |
| | | * @Date: 2023-04-24 16:12:00 |
| | | * @LastEditTime: 2023-12-12 11:49:04 |
| | | * @LastEditTime: 2024-08-12 19:40:06 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | |
| | | 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'; |
| | | |
| | | export { |
| | | ledger_1, |
| | |
| | | mediateBigData_7, |
| | | mediateBigData_8, |
| | | caseDetail, |
| | | caseDetailResult |
| | | caseDetailResult, |
| | | process, |
| | | add, |
| | | del, |
| | | question, |
| | | question1 |
| | | }; |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-07-08 18:27:18 |
| | | * @LastEditTime: 2022-07-21 14:21:33 |
| | | * @LastEditors: ldh |
| | | * @LastEditTime: 2024-08-10 10:12:34 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | | */ |
New file |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-16 15:23:40 |
| | | * @LastEditTime: 2024-08-10 09:53:57 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 面包屑 |
| | | */ |
| | | import React from 'react'; |
| | | import PropTypes from 'prop-types'; |
| | | import { useNavigate } from 'react-router-dom'; |
| | | import { Breadcrumb, Button, Tooltip, Space } from 'antd'; |
| | | import { BulbOutlined, LeftCircleOutlined } from '@ant-design/icons'; |
| | | import sopStatus from '../../status/sopStatus'; |
| | | |
| | | /* |
| | | * fromType, // 来源页面str |
| | | * breadcrumbData, // 面包屑数据[{url:'返回链接',click:'返回的操作',title:''}] |
| | | * title, // 页面标题 |
| | | * subtitle, // 页面说明 |
| | | * titleButton, // 页面标题右侧功能按钮集 |
| | | * handleReturn, // 退回操作,是否有退回 |
| | | * sopVisible, // 是否展示sop |
| | | */ |
| | | const PageHead = ({ fromType, breadcrumbData = [], title, subtitle, titleButton = [], handleReturn, sopVisible, background }) => { |
| | | const navigate = useNavigate(); |
| | | |
| | | return ( |
| | | <div className="pagNewHead" style={{ backgroundColor: background === 'none' && 'transparent' }}> |
| | | <div style={{ paddingTop: '8px' }}> |
| | | {breadcrumbData.length !== 0 && ( |
| | | <Breadcrumb className="pagNewHead-breadcrumb"> |
| | | {breadcrumbData.map((x, t) => { |
| | | return x.url ? ( |
| | | <Breadcrumb.Item key={x.title}> |
| | | <span onClick={() => navigate(`${x.url}?isBack=true`, { replace: true })} className="pagNewHead-breadcrumb-item"> |
| | | {x.title} |
| | | </span> |
| | | </Breadcrumb.Item> |
| | | ) : x.click ? ( |
| | | <Breadcrumb.Item className="pagNewHead-breadcrumb-item" onClick={x.click} key={x.title}> |
| | | {x.title} |
| | | </Breadcrumb.Item> |
| | | ) : ( |
| | | <Breadcrumb.Item key={x.title}>{x.title}</Breadcrumb.Item> |
| | | ); |
| | | })} |
| | | </Breadcrumb> |
| | | )} |
| | | <div className="pagNewHead-title"> |
| | | {handleReturn && ( |
| | | <Tooltip title="返回"> |
| | | <LeftCircleOutlined style={{ marginRight: '8px', fontSize: '18px' }} className="public-color" onClick={handleReturn} /> |
| | | </Tooltip> |
| | | )} |
| | | <span className={fromType === 'caseDetail' ? 'pagNewHead-title-detailH' : 'pagNewHead-title-h'}>{title}</span> |
| | | </div> |
| | | {!!subtitle && <div className="pagNewHead-subtitle">{subtitle}</div>} |
| | | </div> |
| | | <Space size="middle"> |
| | | {titleButton.map((x, t) => ( |
| | | <div key={t}>{x}</div> |
| | | ))} |
| | | {/* {sopVisible && ( |
| | | <Button onClick={sopStatus.handleVisible} icon={<BulbOutlined />}> |
| | | IDR助手 |
| | | </Button> |
| | | )} */} |
| | | </Space> |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | PageHead.propTypes = { |
| | | fromType: PropTypes.string, |
| | | breadcrumbData: PropTypes.array, |
| | | title: PropTypes.string, |
| | | subtitle: PropTypes.any, |
| | | titleButton: PropTypes.any, |
| | | handleReturn: PropTypes.func, |
| | | sopVisible: PropTypes.bool, |
| | | }; |
| | | |
| | | export default PageHead; |
New file |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-03-04 14:29:11 |
| | | * @LastEditTime: 2022-08-05 09:45:54 |
| | | * @LastEditors: ldh |
| | | * @Version: 1.0.0 |
| | | * @Description: 页面框架 |
| | | */ |
| | | import React from 'react'; |
| | | import PropTypes from 'prop-types'; |
| | | import PageHead from './PageHead'; |
| | | import './index.less'; |
| | | import * as $$ from '../../utils/utility'; |
| | | import RegisterChooseModal from '../RegisterChooseModal'; |
| | | |
| | | const NewPage = ({ children, pageHead, registerChooseModalVisible }) => { |
| | | if (!$$.getSessionStorage('customerSystemToken')) { |
| | | $$.catchApiError({ content: '抱歉!登录状态已失效请重新登录', loginStatus: 'lose' }); |
| | | return null; |
| | | } |
| | | |
| | | return ( |
| | | <> |
| | | {!!pageHead && <PageHead {...pageHead} />} |
| | | {children} |
| | | {/* 纠纷登录入口modal */} |
| | | {!!registerChooseModalVisible && <RegisterChooseModal visible={registerChooseModalVisible} />} |
| | | </> |
| | | ); |
| | | }; |
| | | |
| | | NewPage.propTypes = { |
| | | pageHead: PropTypes.any, |
| | | registerChooseModalVisible: PropTypes.any, |
| | | }; |
| | | |
| | | export default NewPage; |
New file |
| | |
| | | @import '../../styles/theme.less'; |
| | | |
| | | .pagNewHead { |
| | | width: 100%; |
| | | padding: 0 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | .pagNewHead-breadcrumb { |
| | | margin-bottom: 8px; |
| | | |
| | | &-item { |
| | | cursor: pointer; |
| | | |
| | | &:hover { |
| | | color: @main-color; |
| | | } |
| | | } |
| | | } |
| | | |
| | | &-title { |
| | | margin-bottom: 12px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | &-detailH { |
| | | font-weight: 600; |
| | | } |
| | | |
| | | &-h { |
| | | font-weight: 600; |
| | | font-size: 20px; |
| | | line-height: 28px; |
| | | } |
| | | } |
| | | |
| | | &-subtitle { |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .ant-tabs-ink-bar { |
| | | width: 28px !important; |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-03-16 11:58:56 |
| | | * @LastEditTime: 2024-08-10 16:13:06 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 公有页面的搜索 |
| | | */ |
| | | import React, { useState } from 'react'; |
| | | import PropTypes from 'prop-types'; |
| | | import { Form, Button, TreeSelect, } from 'antd'; |
| | | import { Grid, Input, Select, DatePicker } from '@arco-design/web-react'; |
| | | import "@arco-design/web-react/dist/css/arco.css"; |
| | | import { DownOutlined } from '@ant-design/icons'; |
| | | import * as $$ from '../../utils/utility'; |
| | | import './index.less'; |
| | | |
| | | const { RangePicker } = DatePicker; |
| | | |
| | | // const { Option } = Select; |
| | | const Row = Grid.Row; |
| | | const Col = Grid.Col; |
| | | const Option = Select.Option; |
| | | |
| | | /** |
| | | * form, // form组件 |
| | | * itemData, // 搜索的数据数组 |
| | | * labelLength, // form的label标签字符串的长度 |
| | | * rowNum, // 一行放多少个搜索item |
| | | * handleRest, // 重置 |
| | | * handleSearch, // 搜索 |
| | | */ |
| | | const TableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch }) => { |
| | | const [searchMore, setSearchMore] = useState(false); |
| | | |
| | | const span = 24 / rowNum; |
| | | |
| | | let display = false; |
| | | |
| | | // 是否需要展开 or 收起 |
| | | const lineNum = rowNum * 2; |
| | | if (itemData.length > lineNum) display = true; |
| | | |
| | | // 系统字体大小 |
| | | const fontSize = parseInt(getComputedStyle(window.document.getElementsByTagName('HTML')[0]).fontSize); |
| | | |
| | | // 输出placeholder |
| | | function setPlaceholder(key, type) { |
| | | let str = ''; |
| | | switch (key) { |
| | | case 'caseNo': |
| | | str = '输入查询案号'; |
| | | break; |
| | | case 'judicNo': |
| | | str = '输入查询司法确认案号'; |
| | | break; |
| | | case 'plaintiffs': |
| | | str = '申请方当事人/代理人姓名'; |
| | | break; |
| | | case 'defendants': |
| | | str = '被申请方当事人/代理人姓名'; |
| | | break; |
| | | case 'addr': |
| | | str = '输入纠纷发生详细地址的关键词'; |
| | | break; |
| | | default: |
| | | str = type === 'Select' ? '全部' : '请输入'; |
| | | break; |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | return ( |
| | | <Form form={form} labelAlign="right" className="tableSearch"> |
| | | <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 = ( |
| | | <DatePicker.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 ( |
| | | <Col span={span} 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> |
| | | ); |
| | | })} |
| | | </Row> |
| | | <Row style={{ marginTop: '16px' }}> |
| | | <Col span={24} style={{ textAlign: 'right' }}> |
| | | <Button className="public-buttonMargin" onClick={handleReset}> |
| | | 重置 |
| | | </Button> |
| | | <Button type="primary" htmlType="submit" onClick={handleSearch}> |
| | | 查询 |
| | | </Button> |
| | | {display && ( |
| | | <span className="tableSearch-searchMore" onClick={() => setSearchMore(!searchMore)}> |
| | | {!searchMore ? '展开' : '折叠'} |
| | | <DownOutlined className={`tableSearch-searchMore-icon ${searchMore && 'tableSearch-searchMore-iconRotate'}`} /> |
| | | </span> |
| | | )} |
| | | </Col> |
| | | </Row> |
| | | </Form> |
| | | ); |
| | | }; |
| | | |
| | | TableSearch.propTypes = { |
| | | itemData: PropTypes.array, |
| | | labelLength: PropTypes.number, |
| | | rowNum: PropTypes.number, |
| | | handleReset: PropTypes.func, |
| | | handleSearch: PropTypes.func, |
| | | }; |
| | | |
| | | export default TableSearch; |
New file |
| | |
| | | @import '../../styles/theme.less'; |
| | | |
| | | // 查看更多 |
| | | .tableSearch-searchMore { |
| | | color: @main-color; |
| | | margin-left: 16px; |
| | | cursor: pointer; |
| | | |
| | | &-icon { |
| | | transition: transform 0.3s; |
| | | } |
| | | |
| | | &-iconRotate { |
| | | transform: rotate(180deg); |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: dminyi 1301963064@qq.com |
| | | * @Date: 2024-08-10 15:03:57 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @LastEditTime: 2024-08-12 14:45:28 |
| | | * @FilePath: \gzDyh\gz-customerSystem\src\components\personCard\index.jsx |
| | | * @Description: 来访登记当事人卡片 |
| | | */ |
| | | import React from 'react'; |
| | | import PropTypes from 'prop-types'; |
| | | import { Typography, Row, Col, Space } from 'antd'; |
| | | import { del } from '../../assets/images'; |
| | | |
| | | const { Link, Text } = Typography; |
| | | /** |
| | | * isCheck, // 是否无操作 |
| | | * partyType, // applicant:申请人, respondent:被申请人 |
| | | * data, // 当事人数据 |
| | | * handleCheckParty, // 点击查看详情 |
| | | * handleDeleteParty, // 删除当事人 |
| | | */ |
| | | const PersonCard = ({ isCheck, partyType, data, handleCheckParty, handleDeleteParty }) => { |
| | | const remark = [{ label: '精神障碍', color: '#C64FBE' }, { label: '吸毒', color: '#D8A247' }, { label: '社区矫正', color: '#B82F6E' }, { label: '刑满释放', color: '#199C8F' }, { label: '流浪', color: '#3ECB7A' }, { label: '重点青少年', color: '#117AC1' }, { label: '涉稳涉访', color: '#6865D7' }, { label: '潜在风险', color: '#2661CE' }] |
| | | |
| | | return ( |
| | | <Row gutter={[24, 16]}> |
| | | {data.map((x, t) => ( |
| | | <Col span={8} key={t}> |
| | | <div className="public-personCard" style={{ cursor: 'pointer' }}> |
| | | <div |
| | | className={`public-personCard-card public-personCard-card-${partyType === 'applicant' ? 'blue' : 'orange'}`} |
| | | onClick={() => handleCheckParty({ type: partyType, editType: 'check', values: x })} |
| | | > |
| | | {x.trueName.substr(0, 1)} |
| | | <div className="public-personCard-card-check">查看</div> |
| | | <img src={del} alt='' style={{ width: '16px', height: '16px', position: 'absolute', top: '-8px', left: '56px' }} /> |
| | | </div> |
| | | <div className="public-personCard-content"> |
| | | <div className="public-personCard-title"> |
| | | <Text style={{ maxWidth: '80%', paddingRight: '8px' }} ellipsis={{ tooltip: x.trueName }}> |
| | | {x.trueName} |
| | | </Text> |
| | | <div className={`public-personCard-tag public-personCard-tag-${partyType === 'applicant' ? 'blue' : 'orange'}`}> |
| | | {x.perClassName} |
| | | </div> |
| | | </div> |
| | | { |
| | | x.person && |
| | | <> |
| | | <div>证件号码:{x.mobile}</div> |
| | | <div>联系方式:{x.agentStatus === '2' ? '有' : '无'}</div> |
| | | </> |
| | | } |
| | | {x.company && |
| | | <> |
| | | <div>统一社会信用代码:{x.mobile}</div> |
| | | <div>法定代表人:{x.agentStatus === '2' ? '有' : '无'}</div> |
| | | </> |
| | | } |
| | | {x.Respondent && |
| | | <Space style={{ display: 'flex', flexWrap: 'wrap' }}> |
| | | {remark.map((item, index) => ( |
| | | <div key={index} style={{ lineHeight: '22px', padding: '0px 8px', backgroundColor: `${item.color}`, width: 'fit-content', borderRadius: '4px', marginTop: '4px' }}>{item.label}</div> |
| | | ))} |
| | | </Space> |
| | | } |
| | | |
| | | |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | ))} |
| | | </Row> |
| | | ); |
| | | }; |
| | | |
| | | PersonCard.propTypes = { |
| | | isCheck: PropTypes.bool, |
| | | partyType: PropTypes.string, |
| | | data: PropTypes.array, |
| | | handleCheckParty: PropTypes.func, |
| | | handleDeleteParty: PropTypes.func, |
| | | }; |
| | | |
| | | export default PersonCard; |
New file |
| | |
| | | /* |
| | | * @Author: dminyi 1301963064@qq.com |
| | | * @Date: 2024-08-10 10:08:15 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @LastEditTime: 2024-08-10 12:01:33 |
| | | * @FilePath: \gzDyh\gz-customerSystem\src\components\registerTab\index.jsx |
| | | * @Description: 来访登记tab |
| | | */ |
| | | import React from 'react'; |
| | | import PropTypes from 'prop-types'; |
| | | import { Space } from 'antd'; |
| | | import { process } from '../../assets/images'; |
| | | import './index.less'; |
| | | |
| | | const RegisterTab = ({ tabs, activeKey, style, onChange, keyStr = ['key', 'label'], border = false, img1 }) => { |
| | | return ( |
| | | <div className={`registerTab ${border ? 'registerTab-border' : ''}`} style={style}> |
| | | <div style={{ width: '100%', display: 'flex' }} > |
| | | {tabs.map((x, t) => { |
| | | return ( |
| | | <div |
| | | onClick={() => onChange(x[keyStr[0]])} |
| | | key={x[keyStr[0]]} |
| | | className={`registerTab-tab ${activeKey === x[keyStr[0]] ? 'registerTab-active' : ''}`} |
| | | > |
| | | <div style={{ display: 'flex' }}> |
| | | <div className='registerTab-tab-number' style={{ backgroundColor: activeKey === x[keyStr[0]] ? '#1A6FB8' : '#F2F3F5' }}><div className='registerTab-tab-number-inner' style={{ color: activeKey === x[keyStr[0]] ? '#ffff' : '' }}>{x[keyStr[0]]}</div></div> |
| | | <div style={{color:'#1D2129',fontSize:'16px'}}>{x[keyStr[1]]}</div> |
| | | {!x.img1 && <img src={process} alt='' className='img' />} |
| | | </div> |
| | | </div> |
| | | ); |
| | | })} |
| | | </div> |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | RegisterTab.propTypes = { |
| | | tabs: PropTypes.array, |
| | | activeKey: PropTypes.any, |
| | | style: PropTypes.object, |
| | | onChange: PropTypes.func, |
| | | keyStr: PropTypes.array, |
| | | }; |
| | | |
| | | export default RegisterTab; |
New file |
| | |
| | | @import '../../styles/theme.less'; |
| | | |
| | | .registerTab { |
| | | padding: 16px 0px 18px 0px; |
| | | color: @text-color-secondary; |
| | | margin: 0px 16px; |
| | | |
| | | &-border { |
| | | position: relative; |
| | | |
| | | &::after { |
| | | content: ''; |
| | | position: absolute; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 10px; |
| | | height: 1px; |
| | | background-color: @divider-color; |
| | | } |
| | | } |
| | | |
| | | &-tab { |
| | | cursor: pointer; |
| | | display: flex; |
| | | align-items: center; |
| | | flex: 1 1 0%; |
| | | display: flex; |
| | | justify-content: center; |
| | | position: relative; |
| | | |
| | | &:hover { |
| | | color: @main-color; |
| | | } |
| | | |
| | | &-number { |
| | | border-radius: 32px; |
| | | margin-right: 8px; |
| | | &-inner{ |
| | | margin: 0px 9px; |
| | | font-size: 16px; |
| | | line-height: 24px; |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | &-active { |
| | | position: relative; |
| | | color: @main-color; |
| | | flex: 1 1 0%; |
| | | display: flex; |
| | | justify-content: center; |
| | | |
| | | &::after { |
| | | content: ''; |
| | | height: 2px; |
| | | width: 116px; |
| | | background-color: @main-color; |
| | | position: absolute; |
| | | left: 36%; |
| | | margin-left: -11px; |
| | | bottom: -18px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .img{ |
| | | width: 20px; |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 3px; |
| | | } |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-03-28 11:22:41 |
| | | * @LastEditTime: 2023-12-25 16:24:22 |
| | | * @LastEditTime: 2024-08-09 15:56:47 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 路由 |
| | |
| | | // 数据分析 |
| | | import DataSearch from "../views/statistic/dataSearch"; |
| | | |
| | | //来访登记 |
| | | import Visit from "../views/register/visit" |
| | | |
| | | import Test from "../views/test"; |
| | | |
| | | const Routers = () => { |
| | |
| | | <Route path="judicialDivision/judicialDivisionDetail" element={<JudicialDivisionDetail />} /> |
| | | <Route path="myConfirmation" element={<MyConfirmation />} /> |
| | | <Route path="judicialOverview" element={<JudicialOverview />} /> |
| | | {/* 来访登记*/} |
| | | <Route path="visit" element={<Visit />} /> |
| | | {/* 工作流模块 */} |
| | | <Route path="workflowTemplate" element={<WorkflowTemplate />} /> |
| | | <Route path="workflowTemplate/workflowTemplateEdit" element={<WorkflowTemplateEdit />} /> |
| | |
| | | <Route path="myAdjust/mediationWindowSuccess" element={<MediationWindowSuccess />} /> |
| | | </Route> |
| | | |
| | | |
| | | <Route path="/operation" element={<Navigate to="/operation/personnel" />} /> |
| | | {/* 基础信息管理 */} |
| | | <Route path="/operation" element={<Layout headerUserChange={headerUserChange} />}> |
| | |
| | | } |
| | | } |
| | | |
| | | //来访登记当事人 |
| | | .public-personCard { |
| | | display: flex; |
| | | padding: 8px; |
| | | |
| | | &-card { |
| | | position: relative; |
| | | width: 66px; |
| | | height: 66px; |
| | | border-radius: 10px; |
| | | font-size: 30px; |
| | | line-height: 66px; |
| | | text-align: center; |
| | | color: #ffffff; |
| | | margin-right: 16px; |
| | | |
| | | &-blue { |
| | | background: @main-color; |
| | | |
| | | .public-personCard-card-check, |
| | | .public-personCard-card-bottomRight { |
| | | color: #1890ff; |
| | | } |
| | | } |
| | | |
| | | &-orange { |
| | | background: linear-gradient(135deg, #ff5500, rgba(255, 85, 0, 0.65) 100%); |
| | | |
| | | .public-personCard-card-check, |
| | | .public-personCard-card-bottomRight { |
| | | color: #ff5500; |
| | | } |
| | | } |
| | | |
| | | &:hover { |
| | | .public-personCard-card-check { |
| | | height: 32px; |
| | | } |
| | | } |
| | | |
| | | &-check { |
| | | position: absolute; |
| | | bottom: 0; |
| | | width: 100%; |
| | | font-size: 12px; |
| | | height: 0; |
| | | transition: height 0.5s; |
| | | line-height: 32px; |
| | | text-align: center; |
| | | background-color: rgba(255, 255, 255, 0.9); |
| | | overflow: hidden; |
| | | } |
| | | |
| | | &-bottomRight { |
| | | position: absolute; |
| | | bottom: 0; |
| | | right: 0; |
| | | background-color: rgba(255, 255, 255, 0.9); |
| | | overflow: hidden; |
| | | height: 18px; |
| | | font-size: 12px; |
| | | line-height: 14px; |
| | | border-top-left-radius: 10px; |
| | | padding: 2px 4px; |
| | | } |
| | | } |
| | | |
| | | &-card-mini { |
| | | position: relative; |
| | | width: 24px; |
| | | height: 24px; |
| | | border-radius: 5px; |
| | | font-size: 12px; |
| | | line-height: 24px; |
| | | text-align: center; |
| | | color: #ffffff; |
| | | |
| | | &-blue { |
| | | background: linear-gradient(138deg, #1890ff 0%, rgba(24, 144, 255, 0.75) 100%); |
| | | |
| | | .public-personCard-card-check, |
| | | .public-personCard-card-bottomRight { |
| | | color: #1890ff; |
| | | } |
| | | } |
| | | |
| | | &-orange { |
| | | background: linear-gradient(135deg, #ff5500, rgba(255, 85, 0, 0.65) 100%); |
| | | |
| | | .public-personCard-card-check, |
| | | .public-personCard-card-bottomRight { |
| | | color: #ff5500; |
| | | } |
| | | } |
| | | |
| | | &:hover { |
| | | .public-personCard-card-check { |
| | | height: 32px; |
| | | } |
| | | } |
| | | |
| | | &-check { |
| | | position: absolute; |
| | | bottom: 0; |
| | | width: 100%; |
| | | font-size: 12px; |
| | | height: 0; |
| | | transition: height 0.5s; |
| | | line-height: 32px; |
| | | text-align: center; |
| | | background-color: rgba(255, 255, 255, 0.9); |
| | | overflow: hidden; |
| | | } |
| | | |
| | | &-bottomRight { |
| | | position: absolute; |
| | | bottom: 0; |
| | | right: 0; |
| | | background-color: rgba(255, 255, 255, 0.9); |
| | | overflow: hidden; |
| | | height: 18px; |
| | | font-size: 12px; |
| | | line-height: 14px; |
| | | border-top-left-radius: 10px; |
| | | padding: 2px 4px; |
| | | } |
| | | } |
| | | |
| | | &-content { |
| | | flex: 1; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | &-title { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | &-tag { |
| | | font-size: 12px; |
| | | line-height: 20px; |
| | | border-radius: 2px; |
| | | padding: 0 4px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | &-blue { |
| | | background: #e6f7ff; |
| | | color: #1890ff; |
| | | border: 1px solid #91d5ff; |
| | | } |
| | | |
| | | &-grey { |
| | | background: #fafafa; |
| | | color: rgba(0, 0, 0, 0.85); |
| | | border: 1px solid #d9d9d9; |
| | | } |
| | | |
| | | &-orange { |
| | | background: #fff2e8; |
| | | color: #fa541c; |
| | | border: 1px solid #ffbb96; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 警告颜色 |
| | | .public-danger { |
| | | color: @error-color; |
New file |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-18 15:04:13 |
| | | * @LastEditTime: 2024-08-06 15:57:16 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 组织架构 |
| | | */ |
| | | import React, { useState, useEffect } from 'react'; |
| | | import { Input, Menu, Tooltip, Space } from 'antd'; |
| | | import { ReloadOutlined } from '@ant-design/icons'; |
| | | import Page from '../../../components/Page'; |
| | | import { AddOrEditOrganization, DepartmentTable, PersonnelModal, AddOrEditDept } from '../../../components/basicInformation/organization'; |
| | | import MyTree from '../../../components/MyTree'; |
| | | import * as $$ from '../../../utils/utility'; |
| | | |
| | | const { Search } = Input; |
| | | |
| | | // 查询人员信息 |
| | | function getPersonsApi(data) { |
| | | return $$.ax.request({ url: 'ctUser/pageQuery', type: 'get', data, service: 'cust' }); |
| | | } |
| | | |
| | | // 获取组织结构 |
| | | function getOrganizationApi() { |
| | | return $$.ax.request({ url: 'ctUnit/listUnitTree', type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | // 新增 or 修改组织 |
| | | function setOrganizationApi(data) { |
| | | return $$.ax.request({ url: 'ctUnit/saveCtUnit', type: 'post', data, service: 'cust' }); |
| | | } |
| | | |
| | | // 删除组织 |
| | | function delOrganizationApi(id) { |
| | | return $$.ax.request({ url: `ctUnit/removeByIds?ids=${id}`, type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | // 获取部门详情 |
| | | function getDepartmentDataApi(organizationId) { |
| | | return $$.ax.request({ url: `ctUnit/getUnitAndDept?id=${organizationId}`, type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | // 新增 or 修改部门 |
| | | function setDeptApi(data) { |
| | | return $$.ax.request({ url: 'ctDept/saveCtDept', type: 'post', data, service: 'cust' }); |
| | | } |
| | | |
| | | // 删除部门 |
| | | function delDeptApi(deptId) { |
| | | return $$.ax.request({ url: `ctDept/removeByIds?ids=${deptId}`, type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | const Organization = () => { |
| | | // 是否是新增 or 修改组织 |
| | | const [isAddOrEdit, setIsAddOrEdit] = useState(false); |
| | | |
| | | // 是否新增 or 修改部门 |
| | | const [isAddOrEditDept, setIsAddOrEditDept] = useState(false); |
| | | |
| | | // 查看人员modal |
| | | const [modalData, setModalData] = useState({ visible: false, title: '', data: [], total: 0 }); |
| | | |
| | | // 组织数据 |
| | | const [organizationData, setOrganizationData] = useState([]); |
| | | |
| | | // 当前选择组织 |
| | | const [organizationActive, setOrganizationActive] = useState({}); |
| | | |
| | | // 新增 or 修改组织数据 |
| | | const [organizationEditData, setOrganizationEditData] = useState({ active: {} }); |
| | | |
| | | // 新增 or 修改部门数据 |
| | | const [deptEditData, setDeptEditData] = useState({}); |
| | | |
| | | // 组织查询 |
| | | const [organizationSearch, setOrganizationSearch] = useState({ value: '', searchValue: '' }); |
| | | |
| | | // 当前选择组织下的部门数据 |
| | | const [departmentData, setDepartmentData] = useState([]); |
| | | |
| | | // 选择组织 |
| | | function handleOrganization(value) { |
| | | getDepartmentData({ organizationId: value.id }); |
| | | } |
| | | |
| | | // 组织查询 |
| | | function handleSearchOrganization(value) { |
| | | setOrganizationSearch({ ...organizationSearch, searchValue: value }); |
| | | } |
| | | |
| | | // 点击删除组织 |
| | | async function handleDelOrganization(value) { |
| | | if (value.children && value.children.length > 0) { |
| | | $$.info({ type: 'warning', content: '该组织下存在下级组织, 不支持删除! 请先清空下级组织' }); |
| | | return false; |
| | | } |
| | | let visible = false; |
| | | const res = await getDepartmentDataApi(value.id); |
| | | if (res.type) { |
| | | if (res.data.countCtDept) { |
| | | $$.info({ type: 'warning', content: '该组织下存在部门, 不支持删除! 请先清空部门' }); |
| | | visible = true; |
| | | } |
| | | } |
| | | if (!visible) { |
| | | $$.modalInfo({ |
| | | content: `确认删除${value.name}吗?`, |
| | | onOk: () => delOrganization({ organizationId: value.id }), |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 查看部门人员 or 关闭modal |
| | | function handlePersonnelModal(record, visible) { |
| | | if (visible) { |
| | | getPersons({ unitId: record.unitId, deptId: record.id, page: 1, size: 10 }, record.name); |
| | | } else { |
| | | setModalData({ visible }); |
| | | } |
| | | } |
| | | |
| | | // 获取人员信息 |
| | | async function getPersons(submitData, title) { |
| | | global.setSpinning(true); |
| | | const res = await getPersonsApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let resData = res.data || {}; |
| | | setModalData({ |
| | | visible: true, |
| | | title: title || modalData.title, |
| | | data: resData.ctUserPage?.content, |
| | | total: resData.ctUserPage?.totalElements, |
| | | search: { page: submitData.page, size: submitData.size, unitId: submitData.unitId, deptId: submitData.deptId }, |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 获取组织数据 |
| | | async function getOrganization(firstLoading, reset) { |
| | | global.setSpinning(true); |
| | | const res = await getOrganizationApi(); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let data = res.data || [], |
| | | active = {}; |
| | | console.log(data, 'data'); |
| | | if (data.length > 0 && (firstLoading || reset)) { |
| | | active = data[0]; |
| | | } |
| | | setOrganizationData(data); |
| | | if (data.length > 0) { |
| | | if (firstLoading || reset) { |
| | | setOrganizationSearch({ value: '', searchValue: '' }); |
| | | } |
| | | getDepartmentData({ organizationId: active.id ? active.id : organizationActive.id }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 新增 or 修改组织 |
| | | async function setOrganization(submitType, values, form) { |
| | | global.setSpinning(true); |
| | | let data = { |
| | | ...organizationEditData.active, |
| | | ...values, |
| | | id: organizationEditData.type === 'change' ? organizationEditData.active.id : '', |
| | | parentId: |
| | | organizationEditData.type === 'change' |
| | | ? organizationEditData.active.parentId |
| | | : organizationEditData.type === 'upAdd' |
| | | ? '' |
| | | : organizationEditData.active.id, |
| | | childId: organizationEditData.type === 'upAdd' ? organizationEditData.active.id : '', |
| | | }; |
| | | let submitData = data.id ? { ...organizationActive.active, ...data } : data; |
| | | const res = await setOrganizationApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '操作成功' }); |
| | | if (submitType === '1') { |
| | | setIsAddOrEdit(false); |
| | | } else { |
| | | form.resetFields(); |
| | | } |
| | | getOrganization(); |
| | | } |
| | | } |
| | | |
| | | // 删除组织 |
| | | async function delOrganization({ organizationId }) { |
| | | global.setSpinning(true); |
| | | const res = await delOrganizationApi(organizationId); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '删除成功!' }); |
| | | if (organizationId === organizationActive.id) { |
| | | getOrganization('', 'reset'); |
| | | } else { |
| | | getOrganization(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 获取部门详情 |
| | | async function getDepartmentData({ organizationId }) { |
| | | global.setSpinning(true); |
| | | const res = await getDepartmentDataApi(organizationId); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setOrganizationActive(res.data); |
| | | setDepartmentData(res.data.ctDepts || []); |
| | | } |
| | | } |
| | | |
| | | // 新增 or 修改部门 |
| | | async function setDept(submitType, values, form) { |
| | | let submitData = { |
| | | ...deptEditData, |
| | | ...values, |
| | | unitId: organizationActive.id, |
| | | id: deptEditData.id === 'addOneDept' || deptEditData.id === 'addSubordinateDept' ? '' : deptEditData.id, |
| | | parentId: deptEditData.id === 'addOneDept' ? '' : deptEditData.parentId, |
| | | }; |
| | | global.setSpinning(true); |
| | | const res = await setDeptApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '操作成功' }); |
| | | if (submitType === '1') { |
| | | setIsAddOrEditDept(false); |
| | | } else { |
| | | form.resetFields(); |
| | | } |
| | | getDepartmentData({ organizationId: organizationActive.id }); |
| | | } |
| | | } |
| | | |
| | | // 删除部门 |
| | | async function delDept({ deptId }) { |
| | | global.setSpinning(true); |
| | | const res = await delDeptApi(deptId); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '删除成功' }); |
| | | getDepartmentData({ organizationId: organizationActive.id }); |
| | | } |
| | | } |
| | | |
| | | useEffect(() => { |
| | | getOrganization('firstLoading'); |
| | | }, []); |
| | | |
| | | // 组织操作 |
| | | const dropdownOptions = ({ num, value }) => ( |
| | | <Menu |
| | | onClick={({ key }) => { |
| | | console.log(key, value,'key','value') |
| | | if (key === 'delete') { |
| | | handleDelOrganization(value); |
| | | } else { |
| | | setOrganizationEditData({ type: key, active: value }); |
| | | setIsAddOrEdit(true); |
| | | } |
| | | }} |
| | | > |
| | | {num === 1 && <Menu.Item key="upAdd">新增上级组织</Menu.Item>} |
| | | <Menu.Item key="downAdd">新增下级组织</Menu.Item> |
| | | <Menu.Item key="change">修改</Menu.Item> |
| | | {num !== 1 && <Menu.Item key="delete">删除</Menu.Item>} |
| | | </Menu> |
| | | ); |
| | | |
| | | function addOrEditBreadcrumb() { |
| | | console.log('111111') |
| | | let obj = isAddOrEdit |
| | | ? { |
| | | title: organizationEditData.type === 'change' ? '修改组织' : organizationEditData.type === 'upAdd' ? '新增上级组织' : '新增下级组织', |
| | | } |
| | | : { |
| | | title: isAddOrEditDept === 'changeDept' ? '修改部门' : isAddOrEditDept === 'addOneDept' ? '新增部门' : '新增下级部门', |
| | | }; |
| | | return { |
| | | breadcrumbData: [ |
| | | { title: '基础信息管理' }, |
| | | { |
| | | title: '组织架构', |
| | | click: () => { |
| | | setIsAddOrEdit(false); |
| | | setIsAddOrEditDept(false); |
| | | }, |
| | | }, |
| | | obj, |
| | | ], |
| | | title: |
| | | isAddOrEditDept === 'addSubordinateDept' || isAddOrEditDept === 'changeDept' |
| | | ? deptEditData.name |
| | | : isAddOrEditDept |
| | | ? organizationActive.name |
| | | : organizationEditData.active.name, |
| | | handleReturn: () => { |
| | | setIsAddOrEdit(false); |
| | | setIsAddOrEditDept(false); |
| | | }, |
| | | }; |
| | | } |
| | | |
| | | return ( |
| | | <Page |
| | | pageHead={ |
| | | isAddOrEdit || isAddOrEditDept |
| | | ? addOrEditBreadcrumb() |
| | | : { breadcrumbData: [{ title: '基础信息管理' }, { title: '组织架构' }], title: '组织架构' } |
| | | } |
| | | > |
| | | <div style={{ display: isAddOrEdit || isAddOrEditDept ? 'none' : '' }} className="organization"> |
| | | <div className="organization-bg"> |
| | | <div className="organization-side"> |
| | | <Space size="middle" className="organization-side-search"> |
| | | <Search |
| | | placeholder="请搜索组织" |
| | | value={organizationSearch.value} |
| | | onChange={(e) => setOrganizationSearch({ ...organizationSearch, value: e.target.value })} |
| | | onSearch={handleSearchOrganization} |
| | | /> |
| | | <Tooltip title="刷新"> |
| | | <ReloadOutlined style={{ fontSize: 16 }} className="public-a" onClick={() => getOrganization('', 'reset')} /> |
| | | </Tooltip> |
| | | </Space> |
| | | <div className="organization-side-tree"> |
| | | {organizationData.length > 0 ? ( |
| | | <MyTree |
| | | active={organizationActive.id} |
| | | keyStr="id" |
| | | nameStr="name" |
| | | data={organizationData} |
| | | searchValue={organizationSearch.searchValue} |
| | | dropdownOption={dropdownOptions} |
| | | isChildren={true} |
| | | handleClickTreeNode={handleOrganization} |
| | | /> |
| | | ) : ( |
| | | $$.MyEmpty({ description: '抱歉!暂无组织数据,请先添加组织', style: { margin: '50px auto' } }) |
| | | )} |
| | | </div> |
| | | </div> |
| | | <div className="organization-divider"></div> |
| | | {organizationData.length > 0 ? ( |
| | | <DepartmentTable |
| | | organizationActive={organizationActive} |
| | | departmentData={departmentData} |
| | | handlePersonnelModal={handlePersonnelModal} |
| | | handleChangeIsAddOrEdit={(type, record) => { |
| | | setIsAddOrEditDept(type); |
| | | setDeptEditData(record || {}); |
| | | }} |
| | | handleDelDept={delDept} |
| | | /> |
| | | ) : ( |
| | | $$.MyEmpty({ description: '抱歉!暂无组织数据,请先添加组织', style: { margin: '100px auto' } }) |
| | | )} |
| | | </div> |
| | | </div> |
| | | {/* 新增 or 修改组织page */} |
| | | <AddOrEditOrganization |
| | | isAddOrEdit={isAddOrEdit} |
| | | type={organizationEditData.type} |
| | | organizationActive={organizationEditData.active} |
| | | handleFinishForm={setOrganization} |
| | | /> |
| | | {/* 新增 or 修改部门page */} |
| | | <AddOrEditDept |
| | | isAddOrEditDept={isAddOrEditDept} |
| | | deptActive={deptEditData} |
| | | unMatchUsers={organizationActive.unMatchUsers || []} |
| | | handleFinishForm={setDept} |
| | | /> |
| | | {/* 查看人员Modal */} |
| | | {modalData.visible && <PersonnelModal modalData={modalData} handlePersonnelModal={handlePersonnelModal} handleSearch={getPersons} />} |
| | | </Page> |
| | | ); |
| | | }; |
| | | |
| | | export default Organization; |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-18 15:04:13 |
| | | * @LastEditTime: 2024-08-06 15:57:16 |
| | | * @Author: dminyi 1301963064@qq.com |
| | | * @Date: 2024-08-09 09:59:43 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 组织架构 |
| | | * @LastEditTime: 2024-08-12 20:30:15 |
| | | * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx |
| | | * @Description: 来访登记 |
| | | */ |
| | | import React, { useState, useEffect } from 'react'; |
| | | import { Input, Menu, Tooltip, Space } from 'antd'; |
| | | import { ReloadOutlined } from '@ant-design/icons'; |
| | | import Page from '../../../components/Page'; |
| | | import { AddOrEditOrganization, DepartmentTable, PersonnelModal, AddOrEditDept } from '../../../components/basicInformation/organization'; |
| | | import MyTree from '../../../components/MyTree'; |
| | | |
| | | import React, { useState, useEffect } from "react"; |
| | | import NewPage from '../../../components/NewPage'; |
| | | import RegisterTab from '../../../components/registerTab'; |
| | | import PersonCard from '../../../components/personCard'; |
| | | import * as $$ from '../../../utils/utility'; |
| | | import { add, question1 } from '../../../assets/images'; |
| | | import { Row, Col, Space, Tooltip } from 'antd'; |
| | | import { Form, Input, Button, Radio, Select, DatePicker, Cascader } from '@arco-design/web-react'; |
| | | import "@arco-design/web-react/dist/css/arco.css"; |
| | | import TableView from '../../../components/TableView'; |
| | | |
| | | const { Search } = Input; |
| | | const RadioGroup = Radio.Group;// 根据调解案号获取纠纷登记信息 |
| | | const FormItem = Form.Item; |
| | | const Option = Select.Option; |
| | | const InputSearch = Input.Search; |
| | | |
| | | // 查询人员信息 |
| | | function getPersonsApi(data) { |
| | | return $$.ax.request({ url: 'ctUser/pageQuery', type: 'get', data, service: 'cust' }); |
| | | |
| | | |
| | | function getCaseDataApi(submitData) { |
| | | return $$.ax.request({ url: `caseInfo/getCaseInfo?id=${submitData}`, type: 'get', service: 'mediate' }); |
| | | } |
| | | |
| | | // 获取组织结构 |
| | | function getOrganizationApi() { |
| | | return $$.ax.request({ url: 'ctUnit/listUnitTree', type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | // 新增 or 修改组织 |
| | | function setOrganizationApi(data) { |
| | | return $$.ax.request({ url: 'ctUnit/saveCtUnit', type: 'post', data, service: 'cust' }); |
| | | } |
| | | |
| | | // 删除组织 |
| | | function delOrganizationApi(id) { |
| | | return $$.ax.request({ url: `ctUnit/removeByIds?ids=${id}`, type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | // 获取部门详情 |
| | | function getDepartmentDataApi(organizationId) { |
| | | return $$.ax.request({ url: `ctUnit/getUnitAndDept?id=${organizationId}`, type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | // 新增 or 修改部门 |
| | | function setDeptApi(data) { |
| | | return $$.ax.request({ url: 'ctDept/saveCtDept', type: 'post', data, service: 'cust' }); |
| | | } |
| | | |
| | | // 删除部门 |
| | | function delDeptApi(deptId) { |
| | | return $$.ax.request({ url: `ctDept/removeByIds?ids=${deptId}`, type: 'get', service: 'cust' }); |
| | | } |
| | | |
| | | const Organization = () => { |
| | | // 是否是新增 or 修改组织 |
| | | const [isAddOrEdit, setIsAddOrEdit] = useState(false); |
| | | |
| | | // 是否新增 or 修改部门 |
| | | const [isAddOrEditDept, setIsAddOrEditDept] = useState(false); |
| | | |
| | | // 查看人员modal |
| | | const [modalData, setModalData] = useState({ visible: false, title: '', data: [], total: 0 }); |
| | | // tabs当前选择的标签信息 |
| | | const [tabsActive, setTabsActive] = useState('1'); |
| | | const [visible, setVisible] = useState(false); |
| | | const [selectedCity, setSelectedCity] = useState('Beijing'); |
| | | |
| | | // 组织数据 |
| | | const [organizationData, setOrganizationData] = useState([]); |
| | | const tabs = [ |
| | | { label: '事件登记', key: '1' }, |
| | | { label: '事件流转', key: '2' }, |
| | | { label: '办理反馈', key: '3' }, |
| | | { label: '申请结案', key: '4' }, |
| | | { label: '当事人评价', key: '5' }, |
| | | { label: '结案归档', key: '6', img1: true }, |
| | | |
| | | // 当前选择组织 |
| | | const [organizationActive, setOrganizationActive] = useState({}); |
| | | ]; |
| | | |
| | | // 新增 or 修改组织数据 |
| | | const [organizationEditData, setOrganizationEditData] = useState({ active: {} }); |
| | | |
| | | // 新增 or 修改部门数据 |
| | | const [deptEditData, setDeptEditData] = useState({}); |
| | | |
| | | // 组织查询 |
| | | const [organizationSearch, setOrganizationSearch] = useState({ value: '', searchValue: '' }); |
| | | |
| | | // 当前选择组织下的部门数据 |
| | | const [departmentData, setDepartmentData] = useState([]); |
| | | |
| | | // 选择组织 |
| | | function handleOrganization(value) { |
| | | getDepartmentData({ organizationId: value.id }); |
| | | } |
| | | |
| | | // 组织查询 |
| | | function handleSearchOrganization(value) { |
| | | setOrganizationSearch({ ...organizationSearch, searchValue: value }); |
| | | } |
| | | |
| | | // 点击删除组织 |
| | | async function handleDelOrganization(value) { |
| | | if (value.children && value.children.length > 0) { |
| | | $$.info({ type: 'warning', content: '该组织下存在下级组织, 不支持删除! 请先清空下级组织' }); |
| | | return false; |
| | | } |
| | | let visible = false; |
| | | const res = await getDepartmentDataApi(value.id); |
| | | if (res.type) { |
| | | if (res.data.countCtDept) { |
| | | $$.info({ type: 'warning', content: '该组织下存在部门, 不支持删除! 请先清空部门' }); |
| | | visible = true; |
| | | } |
| | | } |
| | | if (!visible) { |
| | | $$.modalInfo({ |
| | | content: `确认删除${value.name}吗?`, |
| | | onOk: () => delOrganization({ organizationId: value.id }), |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 查看部门人员 or 关闭modal |
| | | function handlePersonnelModal(record, visible) { |
| | | if (visible) { |
| | | getPersons({ unitId: record.unitId, deptId: record.id, page: 1, size: 10 }, record.name); |
| | | } else { |
| | | setModalData({ visible }); |
| | | } |
| | | } |
| | | |
| | | // 获取人员信息 |
| | | async function getPersons(submitData, title) { |
| | | global.setSpinning(true); |
| | | const res = await getPersonsApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let resData = res.data || {}; |
| | | setModalData({ |
| | | visible: true, |
| | | title: title || modalData.title, |
| | | data: resData.ctUserPage?.content, |
| | | total: resData.ctUserPage?.totalElements, |
| | | search: { page: submitData.page, size: submitData.size, unitId: submitData.unitId, deptId: submitData.deptId }, |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 获取组织数据 |
| | | async function getOrganization(firstLoading, reset) { |
| | | global.setSpinning(true); |
| | | const res = await getOrganizationApi(); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let data = res.data || [], |
| | | active = {}; |
| | | console.log(data, 'data'); |
| | | if (data.length > 0 && (firstLoading || reset)) { |
| | | active = data[0]; |
| | | } |
| | | setOrganizationData(data); |
| | | if (data.length > 0) { |
| | | if (firstLoading || reset) { |
| | | setOrganizationSearch({ value: '', searchValue: '' }); |
| | | } |
| | | getDepartmentData({ organizationId: active.id ? active.id : organizationActive.id }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 新增 or 修改组织 |
| | | async function setOrganization(submitType, values, form) { |
| | | global.setSpinning(true); |
| | | let data = { |
| | | ...organizationEditData.active, |
| | | ...values, |
| | | id: organizationEditData.type === 'change' ? organizationEditData.active.id : '', |
| | | parentId: |
| | | organizationEditData.type === 'change' |
| | | ? organizationEditData.active.parentId |
| | | : organizationEditData.type === 'upAdd' |
| | | ? '' |
| | | : organizationEditData.active.id, |
| | | childId: organizationEditData.type === 'upAdd' ? organizationEditData.active.id : '', |
| | | }; |
| | | let submitData = data.id ? { ...organizationActive.active, ...data } : data; |
| | | const res = await setOrganizationApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '操作成功' }); |
| | | if (submitType === '1') { |
| | | setIsAddOrEdit(false); |
| | | } else { |
| | | form.resetFields(); |
| | | } |
| | | getOrganization(); |
| | | } |
| | | } |
| | | |
| | | // 删除组织 |
| | | async function delOrganization({ organizationId }) { |
| | | global.setSpinning(true); |
| | | const res = await delOrganizationApi(organizationId); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '删除成功!' }); |
| | | if (organizationId === organizationActive.id) { |
| | | getOrganization('', 'reset'); |
| | | } else { |
| | | getOrganization(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 获取部门详情 |
| | | async function getDepartmentData({ organizationId }) { |
| | | global.setSpinning(true); |
| | | const res = await getDepartmentDataApi(organizationId); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setOrganizationActive(res.data); |
| | | setDepartmentData(res.data.ctDepts || []); |
| | | } |
| | | } |
| | | |
| | | // 新增 or 修改部门 |
| | | async function setDept(submitType, values, form) { |
| | | let submitData = { |
| | | ...deptEditData, |
| | | ...values, |
| | | unitId: organizationActive.id, |
| | | id: deptEditData.id === 'addOneDept' || deptEditData.id === 'addSubordinateDept' ? '' : deptEditData.id, |
| | | parentId: deptEditData.id === 'addOneDept' ? '' : deptEditData.parentId, |
| | | }; |
| | | global.setSpinning(true); |
| | | const res = await setDeptApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '操作成功' }); |
| | | if (submitType === '1') { |
| | | setIsAddOrEditDept(false); |
| | | } else { |
| | | form.resetFields(); |
| | | } |
| | | getDepartmentData({ organizationId: organizationActive.id }); |
| | | } |
| | | } |
| | | |
| | | // 删除部门 |
| | | async function delDept({ deptId }) { |
| | | global.setSpinning(true); |
| | | const res = await delDeptApi(deptId); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '删除成功' }); |
| | | getDepartmentData({ organizationId: organizationActive.id }); |
| | | } |
| | | } |
| | | |
| | | useEffect(() => { |
| | | getOrganization('firstLoading'); |
| | | }, []); |
| | | |
| | | // 组织操作 |
| | | const dropdownOptions = ({ num, value }) => ( |
| | | <Menu |
| | | onClick={({ key }) => { |
| | | console.log(key, value,'key','value') |
| | | if (key === 'delete') { |
| | | handleDelOrganization(value); |
| | | } else { |
| | | setOrganizationEditData({ type: key, active: value }); |
| | | setIsAddOrEdit(true); |
| | | } |
| | | }} |
| | | > |
| | | {num === 1 && <Menu.Item key="upAdd">新增上级组织</Menu.Item>} |
| | | <Menu.Item key="downAdd">新增下级组织</Menu.Item> |
| | | <Menu.Item key="change">修改</Menu.Item> |
| | | {num !== 1 && <Menu.Item key="delete">删除</Menu.Item>} |
| | | </Menu> |
| | | ); |
| | | |
| | | function addOrEditBreadcrumb() { |
| | | console.log('111111') |
| | | let obj = isAddOrEdit |
| | | ? { |
| | | title: organizationEditData.type === 'change' ? '修改组织' : organizationEditData.type === 'upAdd' ? '新增上级组织' : '新增下级组织', |
| | | } |
| | | : { |
| | | title: isAddOrEditDept === 'changeDept' ? '修改部门' : isAddOrEditDept === 'addOneDept' ? '新增部门' : '新增下级部门', |
| | | }; |
| | | return { |
| | | breadcrumbData: [ |
| | | { title: '基础信息管理' }, |
| | | const fakeData = [ |
| | | { |
| | | title: '组织架构', |
| | | click: () => { |
| | | setIsAddOrEdit(false); |
| | | setIsAddOrEditDept(false); |
| | | id: 3, |
| | | perClassName: '申请方当事人', |
| | | trueName: '蓝海科技有限公司', |
| | | mobile: '13800000002', |
| | | agentStatus: '1', // 无代理人 |
| | | company: true |
| | | }, |
| | | { |
| | | id: 1, |
| | | perClassName: '申请方代理人', |
| | | trueName: '王小明', |
| | | mobile: '13800000001', |
| | | agentStatus: '2', // 有代理人 |
| | | person: true |
| | | }, |
| | | obj, |
| | | { |
| | | id: 2, |
| | | perClassName: '被申请方当事人', |
| | | trueName: '蓝海科技有限公司', |
| | | mobile: '13800000002', |
| | | agentStatus: '1', // 无代理人 |
| | | person: true, |
| | | Respondent: true |
| | | }, |
| | | |
| | | ]; |
| | | |
| | | const fakeData1 = [ |
| | | { |
| | | id: 1, |
| | | caseNo: 'A20230101', |
| | | judicNo: 'J20230101', |
| | | perClassName: '自然人', |
| | | inputUserName: '张三', |
| | | mediateUserName: '李四', |
| | | judgeName: '王五', |
| | | mediator: '赵六', |
| | | handlerUserName: '钱七', |
| | | returnUserName: '孙八', |
| | | expireTime: '2023-08-10T08:00:00.000Z', |
| | | processName: '进行中', |
| | | otherMediator: '周九', |
| | | canalName: '网络', |
| | | judicResult: '通过', |
| | | assistName: '吴十', |
| | | mediTypeName: '民事调解', |
| | | serieStatus: '1', // 1 表示非系列案,2 表示系列案 |
| | | // 更多字段... |
| | | }, |
| | | // 更多数据... |
| | | ]; |
| | | |
| | | // 列配置 |
| | | const fakeColumns = [ |
| | | { |
| | | title: '序号', |
| | | dataIndex: 'caseNo', |
| | | key: 'caseNo', |
| | | }, |
| | | { |
| | | title: '材料类型', |
| | | dataIndex: 'judicNo', |
| | | key: 'judicNo', |
| | | }, |
| | | { |
| | | title: '材料数量', |
| | | dataIndex: 'perClassName', |
| | | key: 'perClassName', |
| | | }, |
| | | { |
| | | title: '材料名称', |
| | | dataIndex: 'perClassName', |
| | | key: 'perClassName', |
| | | }, |
| | | { |
| | | title: '上传时间', |
| | | dataIndex: 'perClassName', |
| | | key: 'perClassName', |
| | | }, |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'perClassName', |
| | | key: 'perClassName', |
| | | render: (text) => ( |
| | | <div style={{ display: 'flex', color: '#1A6FB8', gap: '16px' }}> |
| | | <div>查看</div> |
| | | <div>删除</div> |
| | | <div>下载</div> |
| | | <div>上传</div> |
| | | </div> |
| | | ) |
| | | }, |
| | | // 更多列配置... |
| | | ]; |
| | | |
| | | const options = [ |
| | | { |
| | | value: 'beijing', |
| | | label: 'Beijing', |
| | | children: [ |
| | | { |
| | | value: 'Beijing', |
| | | label: 'Beijing', |
| | | children: [ |
| | | { |
| | | value: 'chaoyang', |
| | | label: 'Chaoyang', |
| | | }, |
| | | ], |
| | | title: |
| | | isAddOrEditDept === 'addSubordinateDept' || isAddOrEditDept === 'changeDept' |
| | | ? deptEditData.name |
| | | : isAddOrEditDept |
| | | ? organizationActive.name |
| | | : organizationEditData.active.name, |
| | | handleReturn: () => { |
| | | setIsAddOrEdit(false); |
| | | setIsAddOrEditDept(false); |
| | | }, |
| | | }; |
| | | ], |
| | | }, |
| | | { |
| | | value: 'shanghai', |
| | | label: 'Shanghai', |
| | | children: [ |
| | | { |
| | | value: 'shanghaishi', |
| | | label: 'Shanghai', |
| | | children: [ |
| | | { |
| | | value: 'huangpu', |
| | | label: 'Huangpu', |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | }, |
| | | ]; |
| | | |
| | | function onSelect(dateString, date) { |
| | | console.log('onSelect', dateString, date); |
| | | } |
| | | |
| | | function onChange(dateString, date) { |
| | | console.log('onChange: ', dateString, date); |
| | | } |
| | | |
| | | function onOk(dateString, date) { |
| | | console.log('onOk: ', dateString, date); |
| | | } |
| | | |
| | | |
| | | function handleCheckParty() { |
| | | console.log('check party'); |
| | | } |
| | | |
| | | |
| | | const onReload = () => { |
| | | console.log('表格数据刷新'); |
| | | }; |
| | | |
| | | |
| | | return ( |
| | | <Page |
| | | <div style={{ position: 'relative' }}> |
| | | <NewPage |
| | | pageHead={ |
| | | isAddOrEdit || isAddOrEditDept |
| | | ? addOrEditBreadcrumb() |
| | | : { breadcrumbData: [{ title: '基础信息管理' }, { title: '组织架构' }], title: '组织架构' } |
| | | { breadcrumbData: [{ title: '工作台' }, { title: '来访登记' }], title: '来访登记' } |
| | | } |
| | | > |
| | | <div style={{ display: isAddOrEdit || isAddOrEditDept ? 'none' : '' }} className="organization"> |
| | | <div className="organization-bg"> |
| | | <div className="organization-side"> |
| | | <Space size="middle" className="organization-side-search"> |
| | | <Search |
| | | placeholder="请搜索组织" |
| | | value={organizationSearch.value} |
| | | onChange={(e) => setOrganizationSearch({ ...organizationSearch, value: e.target.value })} |
| | | onSearch={handleSearchOrganization} |
| | | /> |
| | | <Tooltip title="刷新"> |
| | | <ReloadOutlined style={{ fontSize: 16 }} className="public-a" onClick={() => getOrganization('', 'reset')} /> |
| | | </Tooltip> |
| | | <RegisterTab tabs={tabs} activeKey={tabsActive} onChange={(activeKey) => setTabsActive(activeKey)} style={{ background: '#fff' }} /> |
| | | {tabsActive === '1' && |
| | | <div style={{ backgroundColor: '#fff', margin: '8px 16px 0px 16px', padding: '12px 16px 16px 16px' }}> |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-6px' }}></div><h5>当事人信息</h5> |
| | | </Space> |
| | | <div className="organization-side-tree"> |
| | | {organizationData.length > 0 ? ( |
| | | <MyTree |
| | | active={organizationActive.id} |
| | | keyStr="id" |
| | | nameStr="name" |
| | | data={organizationData} |
| | | searchValue={organizationSearch.searchValue} |
| | | dropdownOption={dropdownOptions} |
| | | isChildren={true} |
| | | handleClickTreeNode={handleOrganization} |
| | | </Col> |
| | | <div style={{ display: 'flex' }}> |
| | | <div style={{ flex: 3 }}> |
| | | <PersonCard |
| | | isCheck={true} |
| | | partyType={'applicant'} // 这里设定为申请人 |
| | | data={fakeData} |
| | | handleCheckParty={handleCheckParty} |
| | | /> |
| | | ) : ( |
| | | $$.MyEmpty({ description: '抱歉!暂无组织数据,请先添加组织', style: { margin: '50px auto' } }) |
| | | )} |
| | | </div> |
| | | <div style={{ flex: 1, }}> |
| | | <Tooltip |
| | | title={(<Space direction='vertical '><div style={{ backgroundColor: '#1A6FB8', padding: '5px 12px', display: 'flex', justifyContent: 'center' }}>申请方</div><div style={{ backgroundColor: '#FA8C16', padding: '5px 12px', display: 'flex', justifyContent: 'center' }}>被申请方</div><div style={{ backgroundColor: '#3491FA', padding: '5px 12px', display: 'flex', justifyContent: 'center' }}>代理人</div></Space>)} |
| | | placement="right" color='#ffff' overlayStyle={{}}> |
| | | <div onClick={() => setVisible(true)} style={{ backgroundColor: '#E5E6EB', borderRadius: '50%', width: '64px', height: '64px' }}> |
| | | <img src={add} alt="添加" style={{ width: '32px', margin: '16px' }} /> |
| | | </div> |
| | | </Tooltip> |
| | | </div> |
| | | </div> |
| | | <div className="organization-divider"></div> |
| | | {organizationData.length > 0 ? ( |
| | | <DepartmentTable |
| | | organizationActive={organizationActive} |
| | | departmentData={departmentData} |
| | | handlePersonnelModal={handlePersonnelModal} |
| | | handleChangeIsAddOrEdit={(type, record) => { |
| | | setIsAddOrEditDept(type); |
| | | setDeptEditData(record || {}); |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-6px' }}></div><h5>纠纷基本情况</h5> |
| | | </Space> |
| | | </Col> |
| | | <Form |
| | | layout='vertical' |
| | | > |
| | | <Row gutter={[32, 0]}> |
| | | <Col span={8}> |
| | | <FormItem label='事项等级' field='username' tooltip={<div className='question'>Username is required </div>} > |
| | | <Select defaultValue='三级' placeholder='Select city' allowClear> |
| | | {['一级', '二级', '三级', '四级'].map((option, index) => ( |
| | | <Option key={option} value={option}> |
| | | {option} |
| | | </Option> |
| | | ))} |
| | | </Select> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label='来访时间' > |
| | | <DatePicker |
| | | style={{ width: '100%' }} |
| | | format='YYYY-MM-DD HH:mm' |
| | | onChange={onChange} |
| | | onSelect={onSelect} |
| | | onOk={onOk} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label='来访人数(人)'> |
| | | <Input placeholder='请填写' /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>纠纷类型<div className="must">必填</div></div>)}> |
| | | <Select initialValue='Beijing' placeholder='请选择' allowClear> |
| | | {['邻里纠纷', '劳动争议纠纷', '劳动纠纷', '经济纠纷'].map((option, index) => ( |
| | | <Option key={option} value={option}> |
| | | {option} |
| | | </Option> |
| | | ))} |
| | | </Select> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label={(<div style={{ display: 'flex' }}>纠纷发生时间<div className="must">必填</div></div>)}> |
| | | <DatePicker |
| | | style={{ width: '100%' }} |
| | | placeholder='请选择' |
| | | format='YYYY-MM-DD HH:mm' |
| | | onChange={onChange} |
| | | onSelect={onSelect} |
| | | onOk={onOk} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label={(<div style={{ display: 'flex' }}>纠纷发生地点<div className="must">必填</div></div>)}> |
| | | <InputSearch |
| | | searchButton='选择' |
| | | defaultValue='Search content' |
| | | placeholder='选择纠纷发生地的详细地址' |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label='问题属地'> |
| | | <Cascader |
| | | placeholder='Please select ...' |
| | | options={options} |
| | | onChange={(value, option) => { |
| | | console.log(value, option); |
| | | }} |
| | | handleDelDept={delDept} |
| | | defaultValue={['shanghai', 'shanghaishi', 'huangpu']} |
| | | allowClear |
| | | /> |
| | | ) : ( |
| | | $$.MyEmpty({ description: '抱歉!暂无组织数据,请先添加组织', style: { margin: '100px auto' } }) |
| | | )} |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label='涉及人数(人)'> |
| | | <Input placeholder='请填写' /> |
| | | </FormItem> |
| | | </Col> |
| | | |
| | | <Col span={8}> |
| | | <FormItem label='涉及金额(元)'> |
| | | <Input placeholder='请填写' /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={24}> |
| | | <FormItem |
| | | label={<div style={{ display: 'flex' }}>事项概况<Tooltip title='1111'><img src={question1} alt="" style={{ width: '13px', height: '13px', marginTop: '4px', marginLeft: '4px' }} /></Tooltip><div className="must">必填</div><div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px' }}>识别上传材料</div></div>} |
| | | > |
| | | <Input.TextArea |
| | | maxLength={2000} |
| | | showWordLimit |
| | | rows={5} |
| | | placeholder='请填写问题发生的起因、过程和结果' |
| | | wrapperStyle={{ width: '100%' }} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={24}> |
| | | <FormItem |
| | | label={<div style={{ display: 'flex' }}>申请请求<Tooltip title='1111'><img src={question1} alt="" style={{ width: '13px', height: '13px', marginTop: '4px', marginLeft: '4px' }} /></Tooltip><div className="must">必填</div><div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px' }}>识别上传材料</div></div>} |
| | | > |
| | | <Input.TextArea |
| | | maxLength={2000} |
| | | showWordLimit |
| | | rows={5} |
| | | placeholder='希望相关部门如何处理,建议分条描述,如请求1,请求2...' |
| | | wrapperStyle={{ width: '100%' }} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <div style={{ marginLeft: '16px', padding: '12px 16px', backgroundColor: '#EFF8FF', borderRadius: '2px' }}> |
| | | <FormItem label='是否重大矛盾纠纷' style={{ marginBottom: '-20px' }}> |
| | | <RadioGroup options={['A', 'B']} style={{ marginBottom: 20 }} /> |
| | | </FormItem> |
| | | </div> |
| | | </Row> |
| | | |
| | | </Form> |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px', marginTop: '20px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-6px' }}></div><h5>事件材料</h5> |
| | | </Space> |
| | | </Col> |
| | | <TableView |
| | | columns={fakeColumns} |
| | | dataSource={fakeData1} |
| | | size="small" |
| | | rowKey="id" |
| | | bordered={true} |
| | | style={{ marginBottom: '60px' }} |
| | | /> |
| | | <div className="dataSync-excel"> |
| | | <Space size="large" style={{ margin: '4px 14px' }}> |
| | | <Button type="primary" style={{ backgroundColor: '#1A6FB8' }}>保存信息</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>预览信息</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>提交信息</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>自行受理</Button> |
| | | <Button type='secondary'>返回上级页面</Button> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | {/* 新增 or 修改组织page */} |
| | | <AddOrEditOrganization |
| | | isAddOrEdit={isAddOrEdit} |
| | | type={organizationEditData.type} |
| | | organizationActive={organizationEditData.active} |
| | | handleFinishForm={setOrganization} |
| | | /> |
| | | {/* 新增 or 修改部门page */} |
| | | <AddOrEditDept |
| | | isAddOrEditDept={isAddOrEditDept} |
| | | deptActive={deptEditData} |
| | | unMatchUsers={organizationActive.unMatchUsers || []} |
| | | handleFinishForm={setDept} |
| | | /> |
| | | {/* 查看人员Modal */} |
| | | {modalData.visible && <PersonnelModal modalData={modalData} handlePersonnelModal={handlePersonnelModal} handleSearch={getPersons} />} |
| | | </Page> |
| | | ); |
| | | }; |
| | | |
| | | } |
| | | </NewPage> |
| | | |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | export default Organization; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .dataSync { |
| | | &-excel { |
| | | background-color: #fff; |
| | | position: absolute; |
| | | left: 16px; |
| | | right: 16px; |
| | | bottom: 0; |
| | | padding: 12px 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | box-shadow: 4px 0px 5px 0px rgba(0, 0, 0, 0.25); |
| | | } |
| | | } |
| | | |
| | | .arco-form-label-item .arco-form-item-tooltip{ |
| | | color: #1A6FB8; |
| | | } |
| | | |
| | | |
| | | //大厅来访 |
| | | .must{ |
| | | font-size: 12px; |
| | | color: rgb(245, 63, 63); |
| | | background-color: rgb(255, 236, 232); |
| | | line-height: 20px; |
| | | padding: 0px 4px; |
| | | border-radius: 2px; |
| | | margin-left: 8px; |
| | | } |
| | | |
| | | .arco-btn-primary:not(.arco-btn-disabled){ |
| | | background-color: @main-color; |
| | | } |
| | | |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-03-18 10:21:49 |
| | | * @LastEditTime: 2022-11-28 09:47:16 |
| | | * @LastEditors: ldh |
| | | * @LastEditTime: 2024-08-09 16:57:06 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 调度中心 |
| | | */ |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2023-02-08 14:24:37 |
| | | * @LastEditTime: 2023-02-09 17:59:07 |
| | | * @LastEditors: ldh |
| | | * @LastEditTime: 2024-08-09 16:29:11 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @Version: 1.0.0 |
| | | * @Description: 司法局审核 |
| | | */ |
New file |
| | |
| | | /* |
| | | * @Author: dminyi 1301963064@qq.com |
| | | * @Date: 2024-08-09 15:47:38 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @LastEditTime: 2024-08-09 15:48:16 |
| | | * @FilePath: \gzDyh\gz-customerSystem\src\views\register\visit\index.jsx |
| | | * @Description: 大厅来访 |
| | | */ |
| | | import React from 'react'; |
| | | |
| | | const Visit=()=>{ |
| | | |
| | | return( |
| | | <></> |
| | | ) |
| | | } |
| | | |
| | | export default Visit; |
| | |
| | | scroll-into-view-if-needed "2.2.20" |
| | | shallowequal "^1.1.0" |
| | | |
| | | "@arco-plugins/vite-react@^1.3.3": |
| | | version "1.3.3" |
| | | resolved "https://registry.npmmirror.com/@arco-plugins/vite-react/-/vite-react-1.3.3.tgz" |
| | | integrity sha512-fcGh/69xKGqIjMdIw6NCqst4uWME/WTYjiC6AxHbKBmeYSONazBYd+KtEDx9Be2N0pF4+sk+MGUDy3mrF13EdA== |
| | | dependencies: |
| | | "@babel/generator" "^7.12.11" |
| | | "@babel/helper-module-imports" "^7.12.5" |
| | | "@babel/parser" "^7.12.11" |
| | | "@babel/traverse" "^7.12.12" |
| | | "@babel/types" "^7.12.12" |
| | | "@types/node" "^16.11.10" |
| | | |
| | | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.8.3": |
| | | version "7.24.7" |
| | | resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz" |
| | |
| | | eslint-visitor-keys "^2.1.0" |
| | | semver "^6.3.0" |
| | | |
| | | "@babel/generator@^7.25.0", "@babel/generator@^7.7.2": |
| | | "@babel/generator@^7.12.11", "@babel/generator@^7.25.0", "@babel/generator@^7.7.2": |
| | | version "7.25.0" |
| | | resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.25.0.tgz" |
| | | integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== |
| | |
| | | "@babel/traverse" "^7.24.8" |
| | | "@babel/types" "^7.24.8" |
| | | |
| | | "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": |
| | | "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": |
| | | version "7.24.7" |
| | | resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz" |
| | | integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== |
| | |
| | | js-tokens "^4.0.0" |
| | | picocolors "^1.0.0" |
| | | |
| | | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": |
| | | "@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": |
| | | version "7.25.3" |
| | | resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.3.tgz" |
| | | integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== |
| | |
| | | "@babel/parser" "^7.25.0" |
| | | "@babel/types" "^7.25.0" |
| | | |
| | | "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.2", "@babel/traverse@^7.7.2": |
| | | "@babel/traverse@^7.12.12", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.2", "@babel/traverse@^7.7.2": |
| | | version "7.25.3" |
| | | resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.25.3.tgz" |
| | | integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== |
| | |
| | | debug "^4.3.1" |
| | | globals "^11.1.0" |
| | | |
| | | "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": |
| | | "@babel/types@^7.0.0", "@babel/types@^7.12.12", "@babel/types@^7.12.6", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": |
| | | version "7.25.2" |
| | | resolved "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz" |
| | | integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== |
| | |
| | | dependencies: |
| | | undici-types "~6.13.0" |
| | | |
| | | "@types/node@^16.11.10": |
| | | version "16.18.105" |
| | | resolved "https://registry.npmmirror.com/@types/node/-/node-16.18.105.tgz" |
| | | integrity sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA== |
| | | |
| | | "@types/parse-json@^4.0.0": |
| | | version "4.0.0" |
| | | resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz" |