index.js 17 KB

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