edit.jsx 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. import React, { useState, useEffect } from 'react';
  2. import { Input, DatePicker, Pagination, Search, Modal, Menu, Dropdown, Button, Icon, message, Table, Divider, Tag, Select, Form, Alert } from 'antd';
  3. import { FormattedMessage } from 'umi-plugin-react/locale';
  4. import XForm, { FieldTypes, createForm } from '../../../components/XForm';
  5. // import XForm, { FieldTypes } from '../../../components/XForm';
  6. import styles from './style.less';
  7. import router from 'umi/router';
  8. import apis from '../../../services/apis';
  9. import request from '../../../utils/request';
  10. import moment from 'moment';
  11. const header = props => {
  12. const noticeId = props.location.query.id
  13. const [data, setData] = useState({})
  14. const [sample, setsample] = useState({})
  15. const [visible, setVisible] = useState()
  16. const [formsdate, setFormsDate] = useState({})
  17. // const [page, changePage] = useState({})
  18. useEffect(() => {
  19. setVisible(false)
  20. setsample({
  21. sampleNme: ''
  22. })
  23. if (noticeId) {
  24. console.log(noticeId, 'noticeId')
  25. getNewsData(noticeId)
  26. }
  27. }, [])
  28. const getNewsData = (noticeId) => {
  29. request({
  30. ...apis.openScreen.get,
  31. urlData: { id: noticeId }
  32. }).then((data) => {
  33. console.log(data, 'data')
  34. setData(data)
  35. setsample({
  36. sampleId: data.targetId,
  37. sampleName: data.targetName
  38. })
  39. }).catch((err) => {
  40. message.error(err.msg || err.message)
  41. })
  42. }
  43. const ModalData = props => {
  44. // console.log('data', data.targetId)
  45. // const targetId = data.targetType
  46. const [h5data, setH5data] = useState({})
  47. const [name, setName] = useState()
  48. useEffect(() => {
  49. // console.log(targetType, 'targetType')
  50. getH5data({ pageNum: 1, pageSize: 10 })
  51. }, [])
  52. // const getList = params => {
  53. // request({ ...apis.openScreen.list, params: { ...params } }).then(data => {
  54. // setData(data)
  55. // })
  56. // }
  57. const getH5data = params => {
  58. request({
  59. ...apis.openScreen.getSample, params: { ...params }
  60. }).then((data) => {
  61. setH5data(data)
  62. }).catch((err) => {
  63. message.error(err.msg || err.message)
  64. })
  65. }
  66. const toChoice = (value) => {
  67. Modal.confirm({
  68. title: '是否关联此业务',
  69. okText: '确定',
  70. cancelText: '取消',
  71. onOk() {
  72. setsample({
  73. sampleId: value.sampleId,
  74. sampleName: value.sampleName
  75. })
  76. message.info("操作成功")
  77. setVisible(false)
  78. },
  79. });
  80. console.log(value, 'value')
  81. }
  82. const changePageNum = pageNumber => {
  83. getH5data({ pageNum: pageNumber, pageSize: 10, })
  84. }
  85. const columns = [
  86. {
  87. title: '样例名',
  88. dataIndex: 'sampleName',
  89. key: 'sampleName',
  90. align: 'center',
  91. },
  92. {
  93. title: '权重',
  94. dataIndex: 'orderNo',
  95. key: 'orderNo',
  96. align: 'center',
  97. },
  98. {
  99. title: '新增人',
  100. dataIndex: 'addUserName',
  101. key: 'addUserName',
  102. align: 'center',
  103. },
  104. {
  105. title: '新增时间',
  106. dataIndex: 'createDate',
  107. key: 'createDate',
  108. align: 'center',
  109. render: (x, row) => <><span>{row.createDate ? `${moment(row.createDate).format('YYYY-MM-DD H:mm:ss')}` : ''}</span></>,
  110. },
  111. // {
  112. // title: '修改人',
  113. // dataIndex: 'updateUserName',
  114. // key: 'updateUserName',
  115. // align: 'center',
  116. // // render: (status) => <><span>{status == 1 ? '是' : '否'}</span></>
  117. // },
  118. // {
  119. // title: '修改时间',
  120. // dataIndex: 'updateDate',
  121. // key: 'updateDate',
  122. // align: 'center',
  123. // render: (x, row) => <><span>{row.updateDate ? `${moment(row.updateDate).format('YYYY-MM-DD H:mm:ss')}` : ''}</span></>,
  124. // },
  125. {
  126. title: '操作',
  127. dataIndex: 'handle',
  128. key: 'handle',
  129. align: 'center',
  130. render: (x, row) => (
  131. <>
  132. <span style={{ color: '#FF925C', cursor: 'pointer' }} onClick={e => toChoice(row)}>
  133. 选择<Icon type="form" />
  134. </span>
  135. {/* className={styles.edit} */}
  136. </>
  137. ),
  138. },
  139. ];
  140. const getname = value => {
  141. console.log(value.value, '44')
  142. setName(value)
  143. // setH5data({ pageNum: 1, pageSize: 10,sampleName:value })
  144. }
  145. const handleSubmitName = (e, props) => {
  146. e.preventDefault();
  147. getH5data({ pageNum: 1, pageSize: 10, ...props.form.getFieldsValue() });
  148. }
  149. function handleReset() {
  150. props.form.resetFields();
  151. getH5data({ pageNum: 1, pageSize: 10 });
  152. }
  153. const { getFieldDecorator } = props.form
  154. return (
  155. <>
  156. <div>
  157. <Form layout="inline" onSubmit={e => handleSubmitName(e, props)}>
  158. <Form.Item>
  159. {getFieldDecorator('sampleName')(
  160. <Input
  161. prefix={<Icon type="text" style={{ color: 'rgba(0,0,0,.25)' }} />}
  162. placeholder="样例名"
  163. />,
  164. )}
  165. </Form.Item>
  166. <Form.Item>
  167. <Button type="primary" htmlType="submit" className={styles.searchBtn}>
  168. 搜索
  169. </Button>
  170. {/* */}
  171. <Button style={{ marginLeft: 8 }} onClick={handleReset}>
  172. 重置
  173. </Button>
  174. </Form.Item>
  175. </Form>
  176. <Table rowKey="H5List" dataSource={h5data.records || []} columns={columns} pagination={false} />
  177. <div style={{ display: 'flex', justifyContent: 'flex-end', marginTop: '30px' }}>
  178. <Pagination showQuickJumper defaultCurrent={1} total={h5data.total} onChange={e => changePageNum(e)} current={h5data.current} />
  179. </div>
  180. </div>
  181. </>
  182. )
  183. }
  184. const ModalDatas = Form.create({ name: 'ModalData' })(ModalData);
  185. const onSelectBusiness = (e) => {
  186. console.log('11111')
  187. }
  188. // function onChange(value, dateString) {
  189. // console.log('Selected Time: ', value);
  190. // console.log('Formatted Selected Time: ', dateString);
  191. // }
  192. // function onOk(value) {
  193. // console.log('onOk: ', value);
  194. // }
  195. const handleChange = (value) => { }
  196. function range(start, end) {
  197. const result = [];
  198. for (let i = start; i < end; i++) {
  199. result.push(i);
  200. }
  201. return result;
  202. }
  203. function disabledDate(current) {
  204. return current && current < moment().startOf('day');
  205. }
  206. // function disabledDateTime() {
  207. // return {
  208. // disabledHours: () => range(0, moment().hour()),
  209. // disabledMinutes: () => range(0, moment().minute() + 1),
  210. // disabledSeconds: () => [],
  211. // };
  212. // }
  213. // range(moment().second(), moment().second())
  214. const fields = [
  215. {
  216. label: '通知标题',
  217. name: 'title',
  218. type: FieldTypes.Text,
  219. value: data.title,
  220. rules: [
  221. { required: true, message: '请输入通知标题' },
  222. { max: 20, message: '通知标题名称不超过20个字符' }
  223. ]
  224. },
  225. {
  226. label: '通知图',
  227. name: 'noticeImg',
  228. type: FieldTypes.ImageUploader,
  229. value: data.noticeImg,
  230. rules: [
  231. { required: true, message: '请选择通知图' },
  232. ],
  233. help: '建议尺寸:835*556 px,比例:3:2,格式:jpg,大小:不超过300KB,用于开屏通知主图',
  234. },
  235. {
  236. label: '关联业务类型',
  237. name: 'targetType',
  238. type: FieldTypes.Select,
  239. dict: [{
  240. name: "H5样例",
  241. value: "H5"
  242. },
  243. ],
  244. value: data.targetType,
  245. },
  246. {
  247. label: '关联业务',
  248. name: 'sampleName',
  249. // value: data.targetId,
  250. // type: FieldTypes.Text,
  251. render: <div style={{ color: 'blue' }} onClick={e => handleShowModel(data.targetId)}>{sample.sampleName || '选择关联业务'}{console.log(sample, '13')}</div>,
  252. },
  253. {
  254. label: '发布状态',
  255. type: FieldTypes.Select,
  256. name: 'status',
  257. dict: [
  258. // {
  259. // name: "删除",
  260. // value: "-1"
  261. // },
  262. {
  263. name: "是",
  264. value: "1"
  265. },
  266. {
  267. name: "否",
  268. value: "0"
  269. },],
  270. value: data.status === undefined || data.status === null? null : data.status + "",
  271. rules: [
  272. { required: true, message: '请选择有效发布状态' },
  273. ],
  274. },
  275. {
  276. label: '自动下架时间',
  277. name: 'invalidTime',
  278. render: (text, record) =>
  279. // <div>
  280. /* <DatePicker showTime onChange={onChange} onOk={onOk} />
  281. <br /><DatePicker disabledDate={disabledDate}></DatePicker>,
  282. <RangePicker
  283. showTime={{ format: 'HH:mm' }}
  284. format="YYYY-MM-DD HH:mm"
  285. onChange={onChange}
  286. onOk={onOk}
  287. />
  288. </div>, */
  289. // <div>
  290. // <DatePicker showTime = {data.invalidTime} disabledDate={disabledDate} onChange={onChange} onOk={onOk} />
  291. // </div>,
  292. // <DatePicker disabledDate={disabledDate} onChange={ontime}></DatePicker>,showTime={{ format: 'HH:mm' }}
  293. <DatePicker
  294. showToday = {false}
  295. disabledDate={disabledDate}
  296. // disabledTime={disabledDateTime}
  297. showTime={{ format: 'YYYY-MM-DD HH:mm:ss' }}
  298. />,
  299. // < DatePicker
  300. // format = "YYYY-MM-DD HH:mm:ss"
  301. // disabledDate = { disabledDate }
  302. // disabledTime = { disabledDateTime }
  303. // showTime
  304. // // onChange={onChange}
  305. // ></DatePicker >,
  306. // type: FieldTypes.DatePicker,
  307. value: data.invalidTime != null ? moment(data.invalidTime, 'YYYY-MM-DD HH:mm:ss') : null,
  308. help: '下架时间仅支持未来时间,到达未来时间后系统自动将开屏通知发布状态修改为否'
  309. },
  310. {
  311. label: '权重',
  312. name: 'orderNo',
  313. type: FieldTypes.Number,
  314. value: data.orderNo,
  315. help: '用于列表排序,越大越靠前'
  316. },
  317. ]
  318. const handleSubmit = (values) => {
  319. values.targetId = sample.sampleId
  320. values.targetName = sample.sampleName
  321. if (noticeId) {
  322. values.noticeId = noticeId
  323. values.invalidTime === 'Invalid date'? null : moment(values.invalidTime).format('YYYY-MM-DD HH:mm:ss');
  324. console.log('3333333', values)
  325. request({ ...apis.openScreen.put, urlData: { id: noticeId }, data: { ...values } }).then((data) => {
  326. message.info('提交成功!')
  327. cancelPage();
  328. }).catch((err) => {
  329. message.error(err.msg || err.message)
  330. })
  331. } else {
  332. values.invalidTime === 'Invalid date'? null : moment(values.invalidTime).format('YYYY-MM-DD HH:mm:ss');
  333. request({ ...apis.openScreen.post, data: { ...values } }).then((data) => {
  334. console.log('提交成功!')
  335. cancelPage();
  336. }).catch((err) => {
  337. message.error(err.msg || err.message)
  338. })
  339. }
  340. }
  341. //model
  342. const handleShowModel = val => {
  343. setVisible(true);
  344. }
  345. const handleCancel = val => {
  346. setVisible(false);
  347. }
  348. const cancelPage = () => {
  349. router.push({
  350. pathname: '/resource/openScreen',
  351. });
  352. }
  353. return (
  354. <>
  355. <div>
  356. <XForm onSubmit={handleSubmit} onCancel={cancelPage} fields={fields}></XForm>
  357. <Modal
  358. title="选择关联业务"
  359. visible={visible}
  360. // onOk={handleOk}
  361. onCancel={handleCancel}
  362. footer={null}
  363. >
  364. <ModalDatas></ModalDatas>
  365. </Modal>
  366. </div>
  367. </>
  368. )
  369. }
  370. const WrappedNormalLoginForm = Form.create({ name: 'header' })(header);
  371. export default WrappedNormalLoginForm