editCarousel.jsx 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. import React, { useState, useEffect } from 'react';
  2. import { Card, DatePicker, message } from 'antd';
  3. import router from 'umi/router';
  4. import BuildSelect from '../../components/SelectButton/BuildSelect2';
  5. import CitySelect from '../../components/SelectButton/CitySelect2';
  6. import { createForm, FieldTypes } from '../../components/XForm';
  7. import Wangedit from '../../components/Wangedit/Wangedit';
  8. import apis from '../../services/apis';
  9. import request from '../../utils/request';
  10. import SelectHelp from './SelectHelp';
  11. import SelectGroup from './SelectGroup';
  12. import SalesBatchGroup from './SalesBatchGroup';
  13. import LiveGroup from './LiveGroup';
  14. import SelectNews from './SelectNews';
  15. import SelectActivity from './SelectActivity';
  16. import SelectH5 from './SelectH5';
  17. import InstitutionSelect from '@/components/SelectButton/InstitutionSelect';
  18. /**
  19. *
  20. *
  21. * @param {*} props
  22. * @returns
  23. */
  24. const Edit = props => {
  25. let contentVisible = false;
  26. let activityVisible = false;
  27. let newsVisible = false;
  28. let helpVisible = false;
  29. let groupVisible = false;
  30. let salesBatchVisible = false;
  31. let liveVisible = false;
  32. let h5Visible = false;
  33. let buildingId = '';
  34. let cityId = '';
  35. let locationType = false;
  36. let isHaveActive = false;
  37. let isCanChoose = true;
  38. const setExtraData = data => {
  39. console.log(data, 'data');
  40. if (data.isHaveActive != undefined) {
  41. isHaveActive = data.isHaveActive;
  42. if (!isHaveActive) {
  43. // data.contentType=null
  44. data.buildingId = null;
  45. }
  46. }
  47. contentVisible = data.contentType === 'other';
  48. activityVisible = data.contentType === 'activity';
  49. newsVisible = data.contentType === 'news';
  50. helpVisible = data.contentType === 'help';
  51. groupVisible = data.contentType === 'group';
  52. salesBatchVisible = data.contentType === 'salesBatch';
  53. liveVisible = data.contentType === 'live';
  54. h5Visible = data.contentType === 'h5';
  55. cityId = data.cityId;
  56. buildingId = data.buildingId;
  57. locationType = data.showPosition === 'mall';
  58. console.log(locationType, 'locationType');
  59. };
  60. const setExtraData1 = data => {
  61. if (
  62. (data.contentType == 'h5' && data.buildingId == null) ||
  63. data.contentType == '' ||
  64. data.contentType == 'nothing' ||
  65. (data.contentType == 'live' && data.buildingId == null)
  66. ) {
  67. isHaveActive = false;
  68. } else {
  69. isHaveActive = true;
  70. }
  71. contentVisible = data.contentType === 'other';
  72. activityVisible = data.contentType === 'activity';
  73. newsVisible = data.contentType === 'news';
  74. helpVisible = data.contentType === 'help';
  75. groupVisible = data.contentType === 'group';
  76. salesBatchVisible = data.contentType === 'salesBatch';
  77. liveVisible = data.contentType === 'live';
  78. buildingId = data.buildingId;
  79. locationType = data.showPosition === 'mall';
  80. h5Visible = data.contentType === 'h5';
  81. console.log(locationType, 'locationType');
  82. };
  83. const handleFormValueChange = (props, changedValues, allValues) => {
  84. setExtraData(allValues);
  85. };
  86. const XForm = createForm({ onValuesChange: handleFormValueChange });
  87. return props => {
  88. const { contentId } = props.location.query;
  89. const [data, setData] = useState({});
  90. useEffect(() => {
  91. if (contentId) {
  92. isCanChoose = false;
  93. // eslint-disable-next-line react-hooks/rules-of-hooks
  94. getDetail(contentId);
  95. } else {
  96. isCanChoose = true;
  97. }
  98. }, []);
  99. // 查询列表
  100. const getDetail = contentId => {
  101. request({ ...apis.carsuseFigure.getExtendContent, urlData: { id: contentId } }).then(data => {
  102. console.log(data);
  103. setExtraData1(data);
  104. setData(data);
  105. });
  106. };
  107. const cancelPage = () => {
  108. router.push({
  109. pathname: '/carouselFigure/carouselFigureList',
  110. });
  111. };
  112. const fields = [
  113. {
  114. label: '是否关联项目',
  115. name: 'isHaveActive',
  116. type: FieldTypes.Switch,
  117. value: isHaveActive,
  118. hidden: () => !isCanChoose,
  119. rules: [{ required: true, message: '是否城市活动' }],
  120. },
  121. {
  122. label: '所属项目',
  123. name: 'buildingId',
  124. render: <BuildSelect />,
  125. hidden: () => !isHaveActive,
  126. value: data.buildingId,
  127. rules: [{ required: true, message: '请选择所属项目' }],
  128. },
  129. {
  130. label: '展示城市',
  131. name: 'cityId',
  132. render: <CitySelect />,
  133. hidden: () => isHaveActive,
  134. value: data.cityId,
  135. rules: [{ required: true, message: '请选择展示城市' }],
  136. },
  137. {
  138. label: '城市公司',
  139. name: 'institutionId',
  140. render: <InstitutionSelect />,
  141. // hidden: () => isHaveActive,
  142. value: data.institutionId,
  143. rules: [{ required: true, message: '请选择城市公司' }],
  144. },
  145. // <Form.Item label="城市公司">
  146. // {getFieldDecorator('institutionId',{
  147. // rules: [{ required: true, message: '请选择城市公司' }],
  148. // })(
  149. // <InstitutionSelect />
  150. // )}
  151. // </Form.Item>
  152. // {
  153. // label: '发布位置',
  154. // name: 'showPosition',
  155. // type: FieldTypes.Select,
  156. // dict: [
  157. // {
  158. // label: '首页',
  159. // value: 'index',
  160. // },
  161. // {
  162. // label: '积分商城',
  163. // value: 'mall',
  164. // },
  165. // ],
  166. // value: data.showPosition,
  167. // rules: [{ required: true, message: '请选择发布位置' }],
  168. // },
  169. {
  170. label: () => (locationType ? '积分商城轮播图' : '首页轮播图'),
  171. name: 'image',
  172. type: FieldTypes.ImageUploader,
  173. value: data.image,
  174. help: () =>
  175. locationType
  176. ? '建议图片尺寸:750*250px,比例3:1,格式:jpg,用于积分商城banner轮播'
  177. : '建议图片尺寸:690*345px,比例1.:0.5,格式:jpg,用于:首页顶部banner轮播',
  178. rules: [{ required: true, message: '请上传轮播图' }],
  179. },
  180. {
  181. label: '类型',
  182. name: 'contentType',
  183. type: FieldTypes.Select,
  184. hidden: () => isHaveActive,
  185. dict: [
  186. // {
  187. // label: 'h5',
  188. // value: 'h5',
  189. // },
  190. {
  191. label: '直播活动',
  192. value: 'live',
  193. },
  194. {
  195. label: '无',
  196. value: 'nothing',
  197. },
  198. ],
  199. value: data.contentType,
  200. rules: [{ required: true, message: '请选择类型' }],
  201. },
  202. {
  203. label: '标题',
  204. name: 'title',
  205. type: FieldTypes.Text,
  206. value: data.title,
  207. hidden: true,
  208. rules: [{ required: true, message: '请输入标题' }],
  209. },
  210. {
  211. label: '类型',
  212. name: 'contentType',
  213. type: FieldTypes.Select,
  214. hidden: () => !isHaveActive,
  215. dict: [
  216. {
  217. label: '活动',
  218. value: 'activity',
  219. },
  220. {
  221. label: '项目',
  222. value: 'project',
  223. },
  224. {
  225. label: '资讯',
  226. value: 'news',
  227. },
  228. // {
  229. // label: '其他',
  230. // value: 'other',
  231. // },
  232. // {
  233. // label: '拼团',
  234. // value: 'group',
  235. // },
  236. // {
  237. // label: '助力',
  238. // value: 'help',
  239. // },
  240. // {
  241. // label: 'h5',
  242. // value: 'h5',
  243. // },
  244. // {
  245. // label: '销售批次详情',
  246. // value: 'salesBatch',
  247. // },
  248. {
  249. label: '直播活动',
  250. value: 'live',
  251. },
  252. ],
  253. value: data.contentType,
  254. rules: [{ required: true, message: '请选择类型' }],
  255. },
  256. {
  257. label: '发布活动',
  258. name: 'targetId',
  259. render: <SelectActivity buildingId={() => buildingId} />,
  260. hidden: () => !activityVisible,
  261. value: data.targetId,
  262. rules: [{ required: true, message: '请选择发布活动' }],
  263. },
  264. {
  265. label: '是否发布H5',
  266. name: 'targetId',
  267. render: <SelectH5 buildingId={() => buildingId} />,
  268. hidden: () => !h5Visible,
  269. value: data.targetId,
  270. rules: [{ required: false, message: '请选择发布H5' }],
  271. },
  272. {
  273. label: '发布资讯',
  274. name: 'targetId',
  275. render: <SelectNews buildingId={() => buildingId} />,
  276. hidden: () => !newsVisible,
  277. value: data.targetId,
  278. rules: [{ required: true, message: '请选择发布资讯' }],
  279. },
  280. {
  281. label: '发布内容',
  282. name: 'content',
  283. render: <Wangedit />,
  284. value: data.content,
  285. hidden: () => !contentVisible,
  286. rules: [{ required: true, message: '请输入发布内容' }],
  287. },
  288. {
  289. label: '发布助力',
  290. name: 'targetId',
  291. render: <SelectHelp buildingId={() => buildingId} />,
  292. hidden: () => !helpVisible,
  293. value: data.targetId,
  294. rules: [{ required: true, message: '请选择发布助力' }],
  295. },
  296. {
  297. label: '发布拼团',
  298. name: 'targetId',
  299. render: <SelectGroup buildingId={() => buildingId} />,
  300. hidden: () => !groupVisible,
  301. value: data.targetId,
  302. rules: [{ required: true, message: '请选择发布拼团' }],
  303. },
  304. {
  305. label: '发布销售批次',
  306. name: 'targetId',
  307. render: <SalesBatchGroup buildingId={() => buildingId} />,
  308. hidden: () => !salesBatchVisible,
  309. value: data.targetId,
  310. rules: [{ required: true, message: '请选择发布销售批次' }],
  311. },
  312. {
  313. label: '发布直播活动',
  314. name: 'targetId',
  315. render: <LiveGroup buildingId={() => buildingId} />,
  316. hidden: () => !liveVisible,
  317. value: data.targetId,
  318. rules: [{ required: true, message: '请选择发布直播活动' }],
  319. },
  320. {
  321. label: '状态',
  322. name: 'status',
  323. type: FieldTypes.Select,
  324. dict: [
  325. {
  326. label: '上架',
  327. value: 1,
  328. },
  329. {
  330. label: '下架',
  331. value: 0,
  332. },
  333. ],
  334. value: data.status != null ? data.status : 1,
  335. },
  336. {
  337. label: '权重',
  338. name: 'orderNo',
  339. type: FieldTypes.Number,
  340. value: data.orderNo,
  341. help: '数值越大越靠前',
  342. },
  343. ];
  344. const handleSubmit = val => {
  345. console.log(val, '232323');
  346. val.showType = 'banner';
  347. if (!isHaveActive && val.targetId) {
  348. if (!val.contentType) {
  349. val.contentType = 'h5';
  350. }
  351. }
  352. if (!isHaveActive && !val.targetId) {
  353. val.contentType = '';
  354. }
  355. // 发布在首页
  356. val.showPosition ='index'
  357. if (contentId) {
  358. request({
  359. ...apis.carsuseFigure.updataExtendContent,
  360. urlData: { id: contentId },
  361. data: val,
  362. })
  363. .then(data => {
  364. message.info('操作成功');
  365. cancelPage();
  366. })
  367. .catch(err => {
  368. message.info(err.msg || err.message);
  369. });
  370. } else {
  371. request({ ...apis.carsuseFigure.addExtendContent, data: val })
  372. .then(data => {
  373. message.info('操作成功');
  374. cancelPage();
  375. })
  376. .catch(err => {
  377. message.info(err.msg || err.message);
  378. });
  379. }
  380. };
  381. return (
  382. <Card>
  383. <XForm onSubmit={handleSubmit} onCancel={cancelPage} fields={fields}></XForm>
  384. </Card>
  385. );
  386. };
  387. };
  388. export default Edit();