index.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  1. import React, { useState, useEffect, useRef } from 'react';
  2. import { useSelector, useDispatch } from 'react-redux';
  3. import { Form, Input, Button, Table, Row, Col, Select, Modal, Spin, Space, message } from 'antd';
  4. import { PlusOutlined } from '@ant-design/icons';
  5. import '@common/common.less';
  6. import apiObj from '@api/index';
  7. import AddRules from './addRules';
  8. import FiledContext from './filed-context';
  9. import { getValueFromEvent } from '@utils/index'
  10. const { post, api, xPost } = apiObj;
  11. const { Option } = Select;
  12. function FieldRules() {
  13. const [addVisible, setAddVisible] = useState(false); //新增页面显示
  14. const [logList, setLogList] = useState([]);
  15. const [total, setTotal] = useState(0);
  16. const [type, setType] = useState(0);//1新增 2修改
  17. const [visible, setVisible] = useState(false);
  18. const [size, setSize] = useState(15);
  19. const [current, setCurrent] = useState(1);
  20. const [loading, setLoading] = useState(false);
  21. const [regularList, setRegularList] = useState([]);//正则式数据
  22. const [selectedRowKeys, setSelectedRowKeys] = useState([]);
  23. const [tableList, setTableList] = useState([]);//表名称
  24. const [colList, setColList] = useState([]);//字段名称
  25. const [tableCname, setTableCname] = useState(null);//字段名称
  26. const [tableEname, setTableEname] = useState(null);//字段名称
  27. const [disable, setDisable] = useState(true);//字段名称
  28. const [filedDetail, setFiledDetail] = useState(null);//详情数据
  29. const [params, setParams] = useState({
  30. pages: 1,
  31. current: 1,
  32. size: 15,
  33. desc: ['gmt_create']
  34. });
  35. const [form] = Form.useForm();
  36. let data = {
  37. pages: 1,
  38. current: 1,
  39. size: 15,
  40. desc: ['gmt_create']
  41. }
  42. const { rulerNum } = useSelector((state) => {
  43. return state.userInfo;
  44. });
  45. useEffect(() => {
  46. setCurrent(1)
  47. setSize(15)
  48. setParams(data)
  49. form.resetFields();
  50. getRegular()
  51. getTableName()
  52. getColumnName('', '', '', '')
  53. getColumnVerifyPage(data);
  54. setSelectedRowKeys([])
  55. setDisable(true)
  56. }, [rulerNum]);
  57. //表格数据
  58. function getColumnVerifyPage(param) {
  59. const hide = message.loading('加载中...', 0);
  60. post(api.getColumnVerifyPage, param || params).then((res) => {
  61. hide()
  62. if (res.data.code === 200) {
  63. const data = res.data.data;
  64. setLogList(data.records);
  65. setTotal(data.total)
  66. }
  67. }).catch((err) => {
  68. hide()
  69. })
  70. }
  71. //获取正则式名称
  72. function getRegular(name) {
  73. const param = {
  74. name: name || ''
  75. }
  76. post(api.getRegular, param).then((res) => {
  77. if (res.data.code === 200) {
  78. const data = res.data.data;
  79. setRegularList(data);
  80. }
  81. })
  82. }
  83. //获取字段名
  84. function getColumnName(columnCname, columnEname, tableCname, tableEname) {
  85. const param = {
  86. columnCname: columnCname,
  87. columnEname: columnEname,
  88. tableCname: tableCname,
  89. tableEname: tableEname
  90. }
  91. post(api.getColumnName, param).then((res) => {
  92. if (res.data.code === 200) {
  93. const data = res.data.data;
  94. setColList([...data]);
  95. }
  96. })
  97. }
  98. //获取表名称
  99. function getTableName(tableCname, tableEname) {
  100. const param = {
  101. tableCname: tableCname,
  102. tableEname: tableEname
  103. }
  104. post(api.getTableName, param).then((res) => {
  105. if (res.data.code === 200) {
  106. const data = res.data.data;
  107. setTableList([...data]);
  108. }
  109. })
  110. }
  111. //表名称搜索(中文)
  112. function cnameSearch(val) {
  113. getTableName(val, '')
  114. }
  115. //表名称搜索(英文)
  116. function enameSearch(val) {
  117. getTableName('', val)
  118. }
  119. //字段名称搜索(中文)
  120. function colmeSearch(val) {
  121. const formData = form.getFieldsValue();
  122. getColumnName(val, '', formData.tableCname, '')
  123. }
  124. //字段名称搜索(英文)
  125. function coleneSearch(val) {
  126. const formData = form.getFieldsValue();
  127. getColumnName('', val, '', formData.tableEname)
  128. }
  129. //正则式名称搜索
  130. function onSearch(val) {
  131. getRegular(val)
  132. }
  133. //删除记录
  134. function delColumnVerify() {
  135. post(api.delColumnVerify, { ids: selectedRowKeys }).then((res) => {
  136. if (res.data.code === 200) {
  137. //刷新列表
  138. const totalPage = Math.ceil((total - selectedRowKeys.length) / 15);
  139. //将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
  140. const pagenum =
  141. params.current > totalPage ? totalPage : params.current;
  142. //避免pagenum变为0
  143. params.current = pagenum < 1 ? 1 : pagenum;
  144. setParams(params)
  145. getColumnVerifyPage()
  146. message.success(res.data.message);
  147. } else {
  148. message.warning(res.data.message || '操作失败,请重试~');
  149. }
  150. });
  151. showDelModal(false);
  152. setSelectedRowKeys([])
  153. }
  154. //删除弹窗确认
  155. function showDelModal(flag) {
  156. if (flag && !selectedRowKeys.length) {
  157. message.warning("请先选择要删除的记录~", 1);
  158. return;
  159. }
  160. setVisible(flag)
  161. }
  162. //新增修改跳转
  163. function showModal(type, id) {
  164. setAddVisible(true)
  165. setType(type)
  166. if (type == 1) {
  167. setFiledDetail({
  168. columnList: [{
  169. columnCname: undefined,
  170. columnEname: undefined,
  171. ableCname: undefined,
  172. tableEname: undefined,
  173. id: undefined
  174. }],
  175. standardValueList: [{
  176. tit: null
  177. }]
  178. })
  179. } else {
  180. getByIdColumnVerify(id)
  181. }
  182. }
  183. //详情
  184. function getByIdColumnVerify(id) {
  185. const param = {
  186. columnId: id,
  187. }
  188. post(api.getByIdColumnVerify, param).then((res) => {
  189. if (res.data.code === 200) {
  190. const data = res.data.data;
  191. let obj = []
  192. if (data.standardValueList) {
  193. data.standardValueList.forEach(it => {
  194. obj.push({
  195. tit: it
  196. })
  197. });
  198. console.log(obj);
  199. } else {
  200. obj = [{ tit: null }]
  201. }
  202. delete data.standardValueList
  203. const arr = {
  204. columnList: [{
  205. columnCname: data.columnCname,
  206. columnEname: data.columnEname,
  207. tableCname: data.tableCname,
  208. tableEname: data.tableEname,
  209. disable: true,
  210. id: data.columnId
  211. }],
  212. standardValueList: obj,
  213. regularName: data.regular,
  214. ...data
  215. }
  216. setFiledDetail(arr)
  217. }
  218. })
  219. }
  220. function onSizeChange(current, pageSize) {
  221. params.current = current
  222. params.size = pageSize
  223. setSize(pageSize)
  224. setCurrent(current)
  225. setParams(params)
  226. }
  227. function changePage(page, pageSize) {
  228. params.current = page
  229. params.size = pageSize
  230. setParams(params)
  231. setCurrent(page)
  232. getColumnVerifyPage()
  233. setSelectedRowKeys([])
  234. }
  235. function onSelectChange(selectedRowKeys) {
  236. setSelectedRowKeys(selectedRowKeys);
  237. };
  238. function tableCnameChange(value, option) {
  239. setTableCname(value)
  240. getColumnName('', '', value, '')
  241. if (value) {
  242. form.setFieldsValue({
  243. tableEname: option.val,
  244. columnCname: undefined,
  245. columnEname: undefined,
  246. });
  247. setDisable(false)
  248. } else {
  249. form.setFieldsValue({
  250. tableEname: undefined,
  251. columnCname: undefined,
  252. columnEname: undefined,
  253. })
  254. setDisable(true)
  255. getTableName()
  256. }
  257. }
  258. function tableEnameChange(value, option) {
  259. setTableEname(value)
  260. getColumnName('', '', '', value)
  261. if (value) {
  262. form.setFieldsValue({
  263. tableCname: option.val,
  264. columnCname: undefined,
  265. columnEname: undefined,
  266. });
  267. setDisable(false)
  268. } else {
  269. form.setFieldsValue({
  270. tableCname: undefined,
  271. columnCname: undefined,
  272. columnEname: undefined,
  273. })
  274. setDisable(true)
  275. getTableName()
  276. }
  277. }
  278. function colchange(value, option, ins) {
  279. if (ins == 1) {
  280. if (value) {
  281. form.setFieldsValue({
  282. columnEname: option.val
  283. });
  284. } else {
  285. form.setFieldsValue({
  286. columnEname: undefined
  287. })
  288. getColumnName('', '', '', '')
  289. }
  290. } else {
  291. if (value) {
  292. form.setFieldsValue({
  293. columnCname: option.val
  294. });
  295. } else {
  296. form.setFieldsValue({
  297. columnCname: undefined
  298. })
  299. getColumnName('', '', '', '')
  300. }
  301. }
  302. }
  303. //返回
  304. function goBack() {
  305. setAddVisible(false);
  306. setFiledDetail(null)
  307. }
  308. function userChange() {
  309. setVisible(false)
  310. setFiledDetail(null)
  311. getColumnVerifyPage();
  312. setSelectedRowKeys([])
  313. }
  314. const onFinish = (value) => {
  315. const param = {
  316. ...data,
  317. ...value,
  318. }
  319. setCurrent(1)
  320. setParams(param)
  321. getColumnVerifyPage(param);
  322. setSelectedRowKeys([])
  323. };
  324. const onReset = () => {
  325. setCurrent(1)
  326. setSize(15)
  327. setParams(data)
  328. form.resetFields();
  329. getRegular()
  330. getTableName()
  331. getColumnName('', '', '', '')
  332. getColumnVerifyPage(data);
  333. setSelectedRowKeys([])
  334. setDisable(true)
  335. };
  336. const columns = [
  337. { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1, width: 60 },
  338. { title: '表名称(中文)', dataIndex: 'tableCname', key: 'tableCname', width: 130, },
  339. { title: '表名称(英文)', dataIndex: 'tableEname', key: 'tableEname', width: 130, },
  340. { title: '字段名称(中文)', dataIndex: 'columnCname', key: 'columnCname', width: 145, },
  341. { title: '字段名称(英文)', dataIndex: 'columnEname', key: 'columnEname', width: 145, },
  342. {
  343. title: '是否必填', dataIndex: 'isRequired', key: 'isRequired', render: (text, record) => {
  344. return record.isRequired == 1 ? "是" : record.isRequired == 0 ? "否" : '';
  345. }
  346. },
  347. {
  348. title: '标准值维护', dataIndex: 'standardvalue', key: 'standardvalue', width: 110, render: (text, record) => {
  349. return record.standardvalue ? record.standardvalue.length > 10 ? <span title={record.standardvalue}>{record.standardvalue.substring(0, 10) + '...'}</span> : record.standardvalue : '-';
  350. }
  351. },
  352. {
  353. title: '正则式名称', dataIndex: 'regular', key: 'regular', width: 110, render: (text, record) => {
  354. return record.regular || '-';
  355. }
  356. },
  357. {
  358. title: '说明', dataIndex: 'description', key: 'description', render: (text, record) => {
  359. return record.description ? record.description.length > 20 ? <span title={record.description}>{record.description.substring(0, 20) + '...'}</span> : record.description : '-';
  360. }
  361. },
  362. {
  363. title: '操作', dataIndex: 'key', render: (text, record) => (
  364. <Space size="middle">
  365. <a onClick={() => showModal(2, record.columnId)}>修改</a>
  366. </Space>
  367. )
  368. }
  369. ];
  370. const rowSelection = {
  371. selectedRowKeys,
  372. onChange: onSelectChange,
  373. };
  374. if (addVisible && filedDetail) {
  375. return (
  376. <FiledContext.Provider value={{ type, detail: filedDetail }}>
  377. <AddRules userChange={userChange} back={goBack} className="aa" />
  378. </FiledContext.Provider>
  379. )
  380. }
  381. return (
  382. <div className="wrapper">
  383. <div className="filter-box">
  384. <Form
  385. form={form}
  386. name="normal_login"
  387. onFinish={onFinish}
  388. initialValues={{ lossType: '', lossWay: '', isRequired: '' }}
  389. >
  390. <Row gutter={24}>
  391. <Space size="middle">
  392. <Form.Item label="表名称(中文)" name="tableCname">
  393. <Select showSearch allowClear onChange={(value, option) => tableCnameChange(value, option)} onSearch={cnameSearch} style={{ width: '159px' }} placeholder="请选择">
  394. {tableList.map((item) => {
  395. return (
  396. <Option value={item.tableCname} val={item.tableEname} key={item.tableCname}>{item.tableCname}</Option>
  397. )
  398. })}
  399. </Select>
  400. </Form.Item>
  401. <Form.Item label="表名称(英文)" name="tableEname">
  402. <Select showSearch allowClear onChange={(value, option) => tableEnameChange(value, option)} onSearch={enameSearch} style={{ width: '159px' }} placeholder="请选择">
  403. {tableList.map((item) => {
  404. return (
  405. <Option value={item.tableEname} val={item.tableCname} key={item.tableEname}>{item.tableEname}</Option>
  406. )
  407. })}
  408. </Select>
  409. </Form.Item>
  410. <Form.Item label="字段名称(中文)" name="columnCname">
  411. <Select showSearch allowClear onChange={(value, option) => colchange(value, option, 1)} onSearch={colmeSearch} style={{ width: '159px' }} placeholder="请选择" disabled={disable}>
  412. {colList.map((item, i) => {
  413. return (
  414. <Option value={item.columnCname} val={item.columnEname} key={item.columnCname}>{item.columnCname}</Option>
  415. )
  416. })}
  417. </Select>
  418. </Form.Item>
  419. <Form.Item label="字段名称(英文)" name="columnEname">
  420. <Select showSearch allowClear onChange={(value, option) => colchange(value, option, 2)} onSearch={coleneSearch} placeholder="请选择" style={{ width: '159px' }} disabled={disable}>
  421. {colList.map((item, i) => {
  422. return (
  423. <Option value={item.columnEname} val={item.columnCname} key={item.columnEname}>{item.columnEname}</Option>
  424. )
  425. })}
  426. </Select>
  427. </Form.Item>
  428. </Space>
  429. <Col span={5} key={4}>
  430. <Form.Item label="是否必填" name="isRequired">
  431. <Select
  432. placeholder="请选择"
  433. allowClear
  434. >
  435. <Option value="" key={2}>全部</Option>
  436. <Option value="1" key={1}>是</Option>
  437. <Option value="0" key={0}>否</Option>
  438. </Select>
  439. </Form.Item>
  440. </Col>
  441. <Col span={5} key={5}>
  442. <Form.Item label="标准值" name="standardValue" getValueFromEvent={getValueFromEvent}>
  443. <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
  444. </Form.Item>
  445. </Col>
  446. <Form.Item label="正则名称" name="regularName">
  447. <Select showSearch allowClear onSearch={onSearch} placeholder="请选择" style={{ width: '159px' }}>
  448. {regularList.map((item) => {
  449. return (
  450. <Option value={item.name} key={item.id}>{item.name}</Option>
  451. )
  452. })}
  453. </Select>
  454. </Form.Item>
  455. <Col span={6} key={7}>
  456. <Form.Item>
  457. <Button type="primary" htmlType="submit">
  458. 查询
  459. </Button>
  460. <Button onClick={onReset}>
  461. 重置
  462. </Button>
  463. </Form.Item>
  464. </Col>
  465. </Row>
  466. </Form>
  467. </div>
  468. <div className="table">
  469. <div className="table-header">
  470. <h2 className="table-title">字段校验规则维护</h2>
  471. <Space size="middle">
  472. <Button type="primary" icon={<PlusOutlined />} onClick={() => showModal(1)}>新增</Button>
  473. <Button type="primary" onClick={() => showDelModal(true)} danger>删除</Button>
  474. </Space>
  475. </div>
  476. <Table
  477. columns={columns}
  478. rowSelection={rowSelection}
  479. scroll={{ y: 'calc(100vh - 430px)' }}
  480. dataSource={logList}
  481. rowKey={record => record.columnId}
  482. pagination={{
  483. pageSize: size,
  484. size: 'small',
  485. current: current,
  486. showSizeChanger: true,
  487. pageSizeOptions: ['15', '30', '60', '120'],
  488. showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
  489. onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize), // 改变每页数量时更新显示
  490. onChange: (page, pageSize) => changePage(page, pageSize),//点击页码事件
  491. total: total
  492. }} />
  493. </div>
  494. <Modal
  495. title="删除字段校验规则"
  496. okText='确定'
  497. cancelText='关闭'
  498. width={400}
  499. visible={visible}
  500. onOk={delColumnVerify}
  501. /*confirmLoading={confirmLoading}*/
  502. onCancel={() => showDelModal(false)}
  503. maskClosable={false}
  504. >
  505. <p>字段校验规则删除后将无法恢复,确认删除这{selectedRowKeys.length}条数据?</p>
  506. </Modal>
  507. </div >
  508. )
  509. }
  510. export default FieldRules;