index.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. import { connect } from 'dva/index';
  2. import React, { Component } from 'react';
  3. import { Scrollbars } from 'react-custom-scrollbars';
  4. import {
  5. Form, Spin, Modal,
  6. } from 'antd';
  7. import {
  8. failTip,
  9. list_com_page_size_7,
  10. isEmptyObject,
  11. getTableNum,
  12. sldComLanguage,
  13. sldHandlePaginationData,
  14. dragSldTableColumn,
  15. getSldListGoodsImg80,
  16. } from '@/utils/utils';
  17. import global from '@/global.less';
  18. import StandardTable from '@/components/StandardTable';
  19. import Search from '@/components/Search/Search';
  20. let pageSize = list_com_page_size_7;
  21. let sthis = '';
  22. @connect(({ pc_home, project }) => ({
  23. pc_home,
  24. project,
  25. }))
  26. @Form.create()
  27. export default class SldSelGoodsSingleDiy extends Component {
  28. constructor(props) {
  29. super(props);
  30. sthis = this;
  31. this.state = {
  32. expandedRowKeys: [],
  33. link_type: props.link_type,//链接类型,goods
  34. modalVisible: false,//是否展示modal框
  35. width: 900,//modal框宽带
  36. modaltitle: `${sldComLanguage('选择器')}`,//选择器
  37. params: { pageSize: pageSize },//搜索条件
  38. search_data: [{
  39. type: 'input',
  40. label: `${sldComLanguage('商品名称')}`,//商品名称
  41. name: 'goodsName',
  42. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('商品名称')}`,//请输入商品名称
  43. }],//筛选器
  44. loading: false,
  45. data: {},//表格的数据
  46. selectedRows: [],
  47. selectedRowKeys: [],
  48. columns: [],
  49. sldpagination: true,//是否展示分页
  50. };
  51. }
  52. init_flag = true;
  53. goods_columns = [
  54. {
  55. title: ' ',
  56. dataIndex: 'goodsId',
  57. align: 'center',
  58. width: 55,
  59. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  60. },
  61. {
  62. title: `商品图片`,//商品图片
  63. dataIndex: 'mainImage',
  64. align: 'center',
  65. width: 100,
  66. render: (text, record) => {
  67. return getSldListGoodsImg80(text);
  68. },
  69. },
  70. {
  71. title: `${sldComLanguage('商品名称')}`,//商品名称
  72. dataIndex: 'goodsName',
  73. align: 'center',
  74. width: 200,
  75. },
  76. {
  77. title: `${sldComLanguage('商品价格(元)')}`,//商品价格(元)
  78. dataIndex: 'goodsPrice',
  79. align: 'center',
  80. width: 100,
  81. },
  82. {
  83. title: `销量`,//销量
  84. dataIndex: 'actualSales',
  85. align: 'center',
  86. width: 100,
  87. },
  88. {
  89. title: `店铺名称`,//店铺名称
  90. dataIndex: 'storeName',
  91. align: 'center',
  92. width: 200,
  93. },
  94. ];
  95. voucher_columns = [
  96. {
  97. title: ' ',
  98. dataIndex: 'couponId',
  99. align: 'center',
  100. width: 55,
  101. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  102. },
  103. {
  104. title: `${sldComLanguage('优惠券名称')}`,//优惠券名称
  105. dataIndex: 'couponName',
  106. align: 'center',
  107. width: 100,
  108. },
  109. {
  110. title: `${sldComLanguage('优惠券类型')}`,//优惠券类型
  111. dataIndex: 'couponTypeValue',
  112. align: 'center',
  113. width: 100,
  114. },
  115. {
  116. title: `${sldComLanguage('优惠券状态')}`,//优惠券状态
  117. dataIndex: 'stateValue',
  118. align: 'center',
  119. width: 100,
  120. },
  121. {
  122. title: `${sldComLanguage('优惠券内容')}`,//优惠券内容
  123. dataIndex: 'couponContent',
  124. align: 'center',
  125. width: 150,
  126. },
  127. {
  128. title: `${sldComLanguage('未领取数量')}`,//未领取数量
  129. dataIndex: 'remainNum',
  130. align: 'center',
  131. width: 100,
  132. },
  133. ];
  134. live_columns = [
  135. {
  136. title: ' ',
  137. dataIndex: 'roomId',
  138. align: 'center',
  139. width: 30,
  140. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  141. }, {
  142. title: `直播名称`,//直播名称
  143. align: 'center',
  144. dataIndex: 'name',
  145. width: 200,
  146. }, {
  147. title: `主播名称`,//主播名称
  148. align: 'center',
  149. dataIndex: 'anchorName',
  150. width: 200,
  151. },
  152. ];
  153. cat_columns = [
  154. {
  155. title: `${sldComLanguage('分类名称')}`,//分类名称
  156. align: 'left',
  157. dataIndex: 'categoryName',
  158. width: 250,
  159. },
  160. ];
  161. topic_columns_mobile = [
  162. {
  163. title: ' ',
  164. dataIndex: 'decoId',
  165. align: 'center',
  166. width: 30,
  167. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  168. }, {
  169. title: `专题名称`,//专题名称
  170. align: 'center',
  171. dataIndex: 'name',
  172. width: 200,
  173. }, {
  174. title: `${sldComLanguage('创建时间')}`,//创建时间
  175. align: 'center',
  176. dataIndex: 'createTime',
  177. width: 150,
  178. },
  179. {
  180. title: `${sldComLanguage('修改时间')}`,//修改时间
  181. dataIndex: 'updateTime',
  182. align: 'center',
  183. width: 150,
  184. },
  185. ];
  186. topic_columns_pc = [
  187. {
  188. title: ' ',
  189. dataIndex: 'decoId',
  190. align: 'center',
  191. width: 30,
  192. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  193. }, {
  194. title: `专题名称`,//专题名称
  195. align: 'center',
  196. dataIndex: 'decoName',
  197. width: 200,
  198. }, {
  199. title: `${sldComLanguage('创建时间')}`,//创建时间
  200. align: 'center',
  201. dataIndex: 'createTime',
  202. width: 150,
  203. },
  204. {
  205. title: `${sldComLanguage('修改时间')}`,//修改时间
  206. dataIndex: 'updateTime',
  207. align: 'center',
  208. width: 150,
  209. },
  210. ];
  211. //秒杀数据列
  212. seckill_columns = [
  213. {
  214. title: ' ',
  215. dataIndex: 'id',
  216. align: 'center',
  217. width: 55,
  218. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  219. }, {
  220. title: `${sldComLanguage('活动名称')}`,//活动名称
  221. dataIndex: 'seckillName',
  222. align: 'center',
  223. width: 100,
  224. }, {
  225. title: `${sldComLanguage('活动时间')}`,//活动时间
  226. dataIndex: 'startTime',
  227. align: 'center',
  228. width: 200,
  229. render: (text, record, index) => {
  230. return text + '~' + record.endTime;
  231. },
  232. }, {
  233. title: `${sldComLanguage('活动状态')}`,//活动状态
  234. dataIndex: 'stateValue',
  235. align: 'center',
  236. width: 100,
  237. },
  238. ];
  239. rowKey = '';//table 行唯一标识
  240. componentDidMount() {
  241. if (this.props.link_type != '') {
  242. this.get_list({ pageSize: pageSize });
  243. }
  244. }
  245. componentWillReceiveProps(nextProps, nextContext) {
  246. let { columns, modaltitle, search_data, sldpagination } = this.state;
  247. if (nextProps.link_type == 'goods' || nextProps.link_type == 'live' || nextProps.link_type == 'category' || nextProps.link_type == 'topic' || nextProps.link_type == 'seckill' || nextProps.link_type == 'voucher') {
  248. if (nextProps.link_type == 'goods') {
  249. columns = this.goods_columns;
  250. modaltitle = `${sldComLanguage('选择商品')}`;//选择商品
  251. search_data = [{
  252. type: 'input',
  253. label: `${sldComLanguage('商品名称')}`,//商品名称
  254. name: 'goodsName',
  255. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('商品名称')}`,//请输入商品名称
  256. }];//筛选器
  257. sldpagination = true;
  258. this.rowKey = 'goodsId';
  259. } else if (nextProps.link_type == 'live') {
  260. columns = this.live_columns;
  261. modaltitle = `选择直播`;//选择直播
  262. search_data = [{
  263. type: 'input',
  264. label: `直播名称`,//直播名称
  265. name: 'name',
  266. placeholder: `请输入直播名称`,//请输入直播名称
  267. }];//筛选器
  268. sldpagination = true;
  269. this.rowKey = 'roomId';
  270. } else if (nextProps.link_type == 'category') {
  271. columns = this.cat_columns;
  272. modaltitle = `${sldComLanguage('选择分类')}`;//选择分类
  273. search_data = [];
  274. sldpagination = false;
  275. this.rowKey = 'categoryId';
  276. } else if (nextProps.link_type == 'topic') {
  277. if (nextProps.client == 'mobile') {
  278. //移动端装修
  279. columns = this.topic_columns_mobile;
  280. search_data = [{
  281. type: 'input',
  282. label: `${sldComLanguage('专题名称')}`,//专题名称
  283. name: 'name',
  284. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('专题名称')}`,//请输入专题名称
  285. }];//筛选器
  286. } else {
  287. //PC装修
  288. columns = this.topic_columns_pc;
  289. search_data = [{
  290. type: 'input',
  291. label: `${sldComLanguage('专题名称')}`,//专题名称
  292. name: 'decoName',
  293. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('专题名称')}`,//请输入专题名称
  294. }];//筛选器
  295. }
  296. modaltitle = `${sldComLanguage('请选择专题')}`;//选择专题
  297. sldpagination = true;
  298. this.rowKey = 'decoId';
  299. } else if (nextProps.link_type == 'seckill') {
  300. columns = this.seckill_columns;
  301. modaltitle = `${sldComLanguage('选择秒杀活动')}`;//选择秒杀活动
  302. search_data = [{
  303. type: 'input',
  304. label: `活动名称`,//活动名称
  305. name: 'seckillName',
  306. placeholder: `${sldComLanguage('请输入活动名称')}`,//请输入活动名称
  307. }, {
  308. type: 'select',
  309. label: `活动状态`,
  310. name: 'state',
  311. placeholder: `${sldComLanguage('请选择活动状态')}`,
  312. sel_data: [
  313. { key: '', name: `${sldComLanguage('全部')}` },
  314. { key: '1', name: `${sldComLanguage('未开始')}` },
  315. { key: '2', name: `${sldComLanguage('进行中')}` },
  316. ],
  317. }];//筛选器
  318. modaltitle = `${sldComLanguage('选择秒杀活动')}`;
  319. sldpagination = true;
  320. this.rowKey = 'seckillId';
  321. } else if (nextProps.link_type == 'voucher') {
  322. columns = this.voucher_columns;
  323. modaltitle = `${sldComLanguage('选择优惠券')}`;//选择优惠券
  324. search_data = [{
  325. type: 'input',
  326. label: `${sldComLanguage('优惠券名称')}`,//优惠券名称
  327. name: 'couponName',
  328. placeholder: `${sldComLanguage('请输入优惠券名称')}`,//请输入优惠券名称
  329. }, {
  330. type: 'select',
  331. label: `${sldComLanguage('优惠券状态')}`,
  332. name: 'state',
  333. placeholder: `${sldComLanguage('请选择优惠券状态')}`,
  334. sel_data: [
  335. { key: '', name: `${sldComLanguage('全部')}` },
  336. { key: '1', name: `${sldComLanguage('未开始')}` },
  337. { key: '2', name: `${sldComLanguage('进行中')}` },
  338. ],
  339. }];//筛选器
  340. sldpagination = true;
  341. this.rowKey = 'couponId';
  342. }
  343. this.setState({
  344. search_data,
  345. link_type: nextProps.link_type,
  346. modalVisible: true,
  347. columns,
  348. modaltitle,
  349. sldpagination,
  350. }, () => {
  351. let param = { pageSize: pageSize };
  352. if (nextProps.link_type == 'category') {
  353. param.categoryId = 0;
  354. }
  355. sthis.get_list(param);
  356. });
  357. }
  358. }
  359. componentWillUnmount() {
  360. }
  361. //获取数据列表
  362. get_list = (params, grade = '') => {
  363. this.setState({ loading: true });
  364. const { dispatch } = this.props;
  365. let { link_type, data, expandedRowKeys } = this.state;
  366. let dis_type = '';
  367. let new_params = { ...params };
  368. if (link_type == 'goods') {
  369. //获取商品数据
  370. dis_type = 'project/get_goods_lists';
  371. new_params.state = 3;//在售状态
  372. } else if (link_type == 'live') {
  373. //获取直播数据
  374. dis_type = 'project/get_live_lists';
  375. } else if (link_type == 'category') {
  376. //获取分类数据
  377. dis_type = 'project/get_cate_list_by_id';
  378. new_params = params;
  379. } else if (link_type == 'voucher') {
  380. //获取优惠券数据
  381. dis_type = 'project/get_voucher_list';
  382. new_params = params;
  383. } else if (link_type == 'topic') {
  384. if (this.props.client != undefined && this.props.client == 'mobile') {
  385. //移动端专题
  386. dis_type = 'project/get_diy_page_lists';
  387. new_params.type = 'topic';
  388. } else {
  389. //获取PC专题列表,启用状态
  390. dis_type = 'project/get_pc_diy_page_list';
  391. new_params.decoType = 'topic';
  392. new_params.isEnable = 1;//只获取启用状态
  393. }
  394. } else if (link_type == 'seckill') {
  395. //获取秒杀活动
  396. dis_type = 'project/get_seckill_list';
  397. new_params = params;
  398. }
  399. dispatch({
  400. type: dis_type,
  401. payload: new_params,
  402. callback: (res) => {
  403. this.setState({ loading: false });
  404. if (res.state == 200) {
  405. if (link_type == 'goods' || link_type == 'live' || link_type == 'topic' || link_type == 'seckill' || link_type == 'voucher') {
  406. data = res.data;
  407. } else if (link_type == 'category') {
  408. //id为0直接赋值
  409. if (grade != '') {
  410. for (let i in data.list) {
  411. if (grade == 1) {
  412. if (data.list[i].categoryId == params.categoryId) {
  413. data.list[i].children = res.data.list;
  414. break;
  415. }
  416. } else {
  417. if (data.list[i].children != undefined) {
  418. for (let j in data.list[i].children) {
  419. if (data.list[i].children[j].categoryId == params.categoryId) {
  420. data.list[i].children[j].children = res.data.list;
  421. break;
  422. }
  423. }
  424. }
  425. }
  426. }
  427. } else {
  428. data.list = res.data.list;
  429. }
  430. }
  431. this.setState({
  432. data,
  433. expandedRowKeys: grade == '' ? [] : expandedRowKeys,
  434. });
  435. }
  436. },
  437. });
  438. };
  439. handleSelectRows = (rows, rowkeys) => {
  440. //针对翻页无法保存选择的行数据处理
  441. let { selectedRows, selectedRowKeys } = this.state;
  442. let pre_sele_rows_keyarray = [];
  443. for (let i in selectedRows) {
  444. pre_sele_rows_keyarray.push(selectedRows[i][this.rowKey]);
  445. }
  446. //去掉的话要删掉行数据
  447. for (let i in selectedRowKeys) {
  448. if (rowkeys.indexOf(selectedRowKeys[i]) == -1) {
  449. selectedRows = selectedRows.filter(item => item[this.rowKey] != selectedRowKeys[i]);
  450. }
  451. }
  452. //没有的话追加行数据
  453. for (let i in rowkeys) {
  454. if (pre_sele_rows_keyarray.indexOf(rowkeys[i]) == -1) {
  455. let cur_row = rows.filter(item => item[this.rowKey] == rowkeys[i])[0];
  456. selectedRows.push(cur_row);
  457. }
  458. }
  459. this.setState({
  460. selectedRows: selectedRows,
  461. selectedRowKeys: rowkeys,
  462. });
  463. };
  464. //搜索事件
  465. search = (data) => {
  466. for (let i in data) {
  467. if (data[i] == '') {
  468. delete data[i];
  469. }
  470. }
  471. this.setState({
  472. formValues: data,
  473. params: { pageSize: pageSize },
  474. });
  475. this.get_list({ pageSize: pageSize, ...data });
  476. };
  477. //搜索重置事件
  478. seaReset = () => {
  479. //搜索条件置为空
  480. this.setState({
  481. formValues: {},
  482. selectedKeys: [' '],
  483. params: { pageSize: pageSize },
  484. });
  485. this.get_list({ pageSize: pageSize });
  486. };
  487. sldConfirm = () => {
  488. let { modalTableSeleData } = this.state;
  489. if (modalTableSeleData != undefined && !isEmptyObject(modalTableSeleData)) {
  490. this.setState({
  491. modalVisible: false,
  492. link_type: '',
  493. params: { pageSize: pageSize },
  494. });
  495. this.props.seleSku(modalTableSeleData);
  496. } else {
  497. failTip(`${sldComLanguage('请选择数据')}`);//请选择数据
  498. }
  499. };
  500. //关闭modal之后重置数据
  501. closeReset = () => {
  502. this.init_flag = true;
  503. };
  504. //取消事件
  505. sldCancle = () => {
  506. this.props.sldHandleCancle();
  507. this.setState({
  508. modalVisible: false,
  509. link_type: '',
  510. params: { pageSize: pageSize },
  511. });
  512. };
  513. //选中单行的操作
  514. onSldHandleSeleRow = (record) => {
  515. let { modalTableSeleData, link_type } = this.state;
  516. modalTableSeleData = {};
  517. //剔除无用数据
  518. if (link_type == 'goods') {
  519. modalTableSeleData.goodsId = record.goodsId;
  520. modalTableSeleData.goodsName = record.goodsName;
  521. modalTableSeleData.goodsPrice = record.goodsPrice;
  522. modalTableSeleData.actualSales = record.actualSales;
  523. modalTableSeleData.mainImgUrl = record.mainImage;
  524. modalTableSeleData.defaultProductId = record.productId;
  525. } else if (link_type == 'live') {
  526. modalTableSeleData.roomId = record.roomId;
  527. modalTableSeleData.name = record.name;
  528. modalTableSeleData.anchorName = record.anchorName;
  529. } else if (link_type == 'topic') {
  530. if (this.props.client == 'mobile') {
  531. modalTableSeleData.decoId = record.decoId;
  532. modalTableSeleData.name = record.name;
  533. } else {
  534. modalTableSeleData.decoId = record.decoId;
  535. modalTableSeleData.decoName = record.decoName;
  536. }
  537. } else if (link_type == 'category') {
  538. modalTableSeleData.categoryId = record.categoryId;
  539. modalTableSeleData.categoryName = record.categoryName;
  540. modalTableSeleData.grade = record.grade;
  541. modalTableSeleData.pid = record.pid;
  542. } else if (link_type == 'seckill') {
  543. modalTableSeleData.seckillId = record.seckillId;
  544. modalTableSeleData.seckillName = record.seckillName;
  545. } else if (link_type == 'voucher') {
  546. modalTableSeleData.couponId = record.couponId;
  547. modalTableSeleData.couponName = record.couponName;
  548. }
  549. this.setState({
  550. modalTableSeleData,
  551. });
  552. };
  553. onExpand = (expanded, record) => {
  554. let { expandedRowKeys } = this.state;
  555. if (expanded) {
  556. expandedRowKeys.push(record.categoryId);
  557. this.get_list({ categoryId: record.categoryId }, record.grade);
  558. } else {
  559. expandedRowKeys = expandedRowKeys.filter(item => item != record.categoryId);
  560. }
  561. this.setState({ expandedRowKeys });
  562. };
  563. //表格列拖动
  564. resizeTable = (index, size, type, data) => {
  565. let datas = dragSldTableColumn(index, size, data);
  566. this.setState({ [type]: datas });
  567. };
  568. handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
  569. if (type == 'main') {
  570. const { formValues } = this.state;
  571. const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
  572. pageSize = params.pageSize;
  573. this.setState({
  574. params: params,
  575. });
  576. this.get_list(params);
  577. }
  578. };
  579. render() {
  580. const { link_type } = this.props;
  581. const { modalVisible, modaltitle, width, data, columns, search_data, loading, sldpagination, expandedRowKeys } = this.state;
  582. return (
  583. <Modal destroyOnClose={true}
  584. onOk={this.sldConfirm}
  585. afterClose={this.closeReset}
  586. onCancel={this.sldCancle} visible={modalVisible} width={width} title={modaltitle}>
  587. <div style={{ display: 'flex', flexDirection: 'row' }}>
  588. <div className={global.common_page} style={{ flex: 1 }}>
  589. {link_type != 'category' &&
  590. <div className={global.tableListForm}>
  591. <div style={{ position: 'relative' }}>
  592. <Search search_data={search_data} top={0} seaSubmit={(data) => this.search(data)}
  593. seaReset={() => this.seaReset()}/>
  594. </div>
  595. </div>
  596. }
  597. <Scrollbars autoHeight
  598. autoHeightMin={300}
  599. autoHeightMax={document.body.clientHeight - 300}>
  600. <Spin spinning={loading}>
  601. {/*标准表格-start*/}
  602. <StandardTable
  603. showScrollbar={false}
  604. expandedRowKeys={expandedRowKeys}
  605. selectedRows={[]}
  606. selectedRowKeys={[]}
  607. data={data}
  608. rowKey={this.rowKey}
  609. isCheck={false}
  610. columns={columns}
  611. onSldHandleSeleRow={this.onSldHandleSeleRow}
  612. onSelectRow={this.handleSelectRows}
  613. flag_show_sele_data={true}
  614. sldpagination={sldpagination}
  615. onExpand={this.onExpand}
  616. onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
  617. resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
  618. isColumnResize={true}
  619. />
  620. {/*标准表格-end*/}
  621. </Spin>
  622. </Scrollbars>
  623. </div>
  624. </div>
  625. </Modal>
  626. );
  627. }
  628. }