attribute_group.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. import { connect } from 'dva/index';
  2. import React, { Component, Fragment } from 'react';
  3. import { Form, Spin, Switch } from 'antd';
  4. import {
  5. sldIconBtn,
  6. failTip,
  7. sucTip,
  8. sldPopConfirmDiy,
  9. list_com_page_size_10,
  10. dragSldTableColumn,
  11. sldHandlePaginationData,
  12. formItemLayoutModal,
  13. validatorNumbe,
  14. getTableNum,
  15. sldComLanguage,
  16. sldtbaleOpeBtnText,
  17. getSldCopyData,
  18. sldLlineRtextAddGoodsAddMargin,
  19. sldSearchValClear,
  20. } from '@/utils/utils';
  21. import global from '@/global.less';
  22. import StandardTable from '@/components/StandardTable';
  23. import SldModal from '@/components/SldModal/SldModal';
  24. import Link from 'umi/link';
  25. let pageSize = list_com_page_size_10;
  26. @connect(({ product }) => ({
  27. product,
  28. }))
  29. @Form.create()
  30. export default class AttributeGroup extends Component {
  31. constructor(props) {
  32. super(props);
  33. this.state = {
  34. search_con: '',//搜索框内容
  35. initLoading: false,
  36. submiting: false,
  37. data: {},//列表数据
  38. selectedRows: [],
  39. selectedRowKeys: [],//selectedRows的key
  40. title: '',
  41. type: 'add',//'add'新增 'edit'编辑
  42. params: { pageSize: pageSize },//搜索条件
  43. operateData: [],//操作数据
  44. addData: [{
  45. type: 'input',
  46. label: `${sldComLanguage('分组名称')}`,
  47. name: 'groupName',
  48. extra: `${sldComLanguage('最多输入60个字')}`,
  49. placeholder: `${sldComLanguage('请输入分组名称')}`,
  50. initialValue: '',
  51. maxLength:60,
  52. rules: [{
  53. required: true,
  54. whitespace: true,
  55. message: `${sldComLanguage('请输入分组名称')}`,
  56. }],
  57. }, {
  58. type: 'inputnum',
  59. label: `${sldComLanguage('排序')}`,
  60. name: 'sort',
  61. extra: `${sldComLanguage('请输入0~255的数字,数字越小顺序越靠前')}`,
  62. placeholder: `${sldComLanguage('请输入排序')}`,
  63. initialValue: '',
  64. rules: [{
  65. required: true,
  66. message: `${sldComLanguage('请输入排序')}`,
  67. }, { validator: (rule, value, callback) => validatorNumbe(rule, value, callback) }],
  68. }, {
  69. type: 'switch',
  70. label: `${sldComLanguage('启用')}`,
  71. name: 'isShow',
  72. placeholder: ``,
  73. initialValue: 1,
  74. },
  75. ],//modal框的数据
  76. formValues: {},//搜索条件
  77. columns: [
  78. {
  79. title: ' ',
  80. dataIndex: 'groupId',
  81. align: 'center',
  82. width: 30,
  83. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  84. },
  85. {
  86. title: `${sldComLanguage('分组名称')}`,
  87. dataIndex: 'groupName',
  88. align: 'center',
  89. width: 100,
  90. },
  91. {
  92. title: `${sldComLanguage('排序')}`,
  93. dataIndex: 'sort',
  94. align: 'center',
  95. width: 100,
  96. },
  97. {
  98. title: `${sldComLanguage('启用状态')}`,
  99. dataIndex: 'isShow',
  100. align: 'center',
  101. width: 80,
  102. render: (text, record) => (
  103. <Switch checkedChildren={`${sldComLanguage('启用')}`}
  104. onChange={(checked) => this.operateAttr({groupId:record.groupId,isShow:checked ? 1 : 0}, 'edit')}
  105. unCheckedChildren={`${sldComLanguage('停用')}`}
  106. checked={text == 1 ? true : false}
  107. valuepropname={'checked'}/>
  108. ),
  109. },
  110. {
  111. title: `${sldComLanguage('操作')}`,
  112. align: 'center',
  113. width: 100,
  114. render: (text, record) => (
  115. <Fragment>
  116. <Link to={{
  117. pathname: '/goods/attribute_group_to_detail',
  118. query: {
  119. id: record.groupId,
  120. },
  121. }}>
  122. {sldtbaleOpeBtnText(`${sldComLanguage('查看')}`, () => null)}
  123. </Link>
  124. <span className={global.splitLine}></span>
  125. {sldtbaleOpeBtnText(`${sldComLanguage('编辑')}`, () => this.editAttr(record))}
  126. <span className={global.splitLine}></span>
  127. {/*删除后不可恢复,是否确定删除?*/}
  128. {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateAttr(record.groupId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
  129. sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
  130. </Fragment>
  131. ),
  132. },
  133. ],
  134. };
  135. }
  136. cur_edit_id = '';//当前操作数据id
  137. componentDidMount() {
  138. this.get_list({ pageSize: pageSize });
  139. }
  140. //编辑属性
  141. editAttr = (val) => {
  142. let { addData, operateData } = this.state;
  143. operateData = getSldCopyData(addData);
  144. for (let i in operateData) {
  145. if(operateData[i].name == 'attributeValues'){
  146. operateData[i].initialValue = val[operateData[i].name].join(',');
  147. }else{
  148. operateData[i].initialValue = val[operateData[i].name];
  149. }
  150. }
  151. this.cur_edit_id = val.groupId;//当前操作数据id
  152. this.setState({
  153. type: 'edit',
  154. title: `${sldComLanguage('编辑属性')}`,
  155. operateData,
  156. modalVisible: true,
  157. });//编辑属性
  158. };
  159. //属性操作 del:删除 stop:停用 start:启用 edit:编辑
  160. operateAttr = (id, type) => {
  161. this.setState({ submiting: true });
  162. const { params } = this.state;
  163. const { dispatch } = this.props;
  164. let dis_type = '';
  165. let param_data = {};
  166. if (type == 'del') {
  167. dis_type = 'product/del_attribute_group';
  168. param_data.groupIds = id;
  169. } else if (type == 'edit') {
  170. dis_type = 'product/edit_attribute_group';
  171. param_data = id;
  172. }
  173. dispatch({
  174. type: dis_type,
  175. payload: param_data,
  176. callback: (res) => {
  177. if (res.state == 200) {
  178. sucTip(res.msg);
  179. this.get_list(params);
  180. this.setState({
  181. modalVisible: false,
  182. });
  183. } else {
  184. failTip(res.msg);
  185. }
  186. this.setState({ submiting: false });
  187. },
  188. });
  189. };
  190. //添加属性
  191. addAttr = () => {
  192. let { addData, operateData } = this.state;
  193. operateData = getSldCopyData(addData);
  194. this.setState({
  195. modalVisible: true,
  196. type: 'add',
  197. title: `${sldComLanguage('添加属性')}`,
  198. operateData,
  199. });//添加属性
  200. };
  201. //获取数据列表
  202. get_list = (params) => {
  203. this.setState({ initLoading: true });
  204. const { dispatch } = this.props;
  205. dispatch({
  206. type: 'product/get_attribute_group_lists',
  207. payload: params,
  208. callback: (res) => {
  209. this.setState({ initLoading: false });
  210. if (res.state == 200) {
  211. if (res.data.length == 0 && this.state.params.currentPage > 1) {
  212. params.currentPage = params.currentPage - 1;
  213. this.get_list(params);
  214. } else {
  215. this.setState({
  216. data: res.data,
  217. });
  218. }
  219. }
  220. },
  221. });
  222. };
  223. handleSelectRows = (rows, rowkeys) => {
  224. this.setState({
  225. selectedRows: rows,
  226. selectedRowKeys: rowkeys,
  227. });
  228. };
  229. handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
  230. const { formValues } = this.state;
  231. if (type == 'main') {
  232. const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
  233. pageSize = params.pageSize;
  234. this.setState({ params });
  235. this.get_list(params);
  236. }
  237. };
  238. //表格拖动
  239. resizeTable = (index, size, type, data) => {
  240. let datas = dragSldTableColumn(index, size, data);
  241. this.setState({ [type]: datas });
  242. };
  243. sldHandleCancle = () => {
  244. this.setState({ modalVisible: false });
  245. };
  246. sldHandleConfirm = (val) => {
  247. const { type } = this.state;
  248. const { dispatch } = this.props;
  249. let _this = this;
  250. val.isShow = val.isShow ? 1 : 0;
  251. this.setState({ submiting: true });
  252. if (type == 'edit') {
  253. val.groupId = this.cur_edit_id;
  254. this.operateAttr(val, 'edit');
  255. } else {
  256. dispatch({
  257. type: 'product/add_attribute_group',
  258. payload: val,
  259. callback: (res) => {
  260. if (res.state == 200) {
  261. sucTip(res.msg);
  262. _this.get_list({ pageSize: pageSize });
  263. this.setState({
  264. modalVisible: false,
  265. });
  266. } else {
  267. failTip(res.msg);
  268. }
  269. this.setState({ submiting: false });
  270. },
  271. });
  272. }
  273. };
  274. //搜索框内容的变化
  275. sldSearChange = (val) => {
  276. this.setState({
  277. search_con: val.target.value,
  278. });
  279. };
  280. //清空搜索内容
  281. sldSearClear = () => {
  282. this.setState({
  283. search_con: '',
  284. });
  285. this.sldSearch('');
  286. };
  287. //搜索
  288. sldSearch = (val) => {
  289. let { params, formValues } = this.state;
  290. params.groupName = val;
  291. formValues.groupName = val;
  292. this.setState({ pageSize: pageSize, ...formValues,params: { pageSize: pageSize } });
  293. this.get_list(params);
  294. };
  295. render() {
  296. const { selectedRows, columns, initLoading, data, submiting, operateData, modalVisible, title, search_con } = this.state;
  297. return (
  298. <div className={global.common_page} style={{ flex: 1 }}>
  299. {sldLlineRtextAddGoodsAddMargin('#69A2F2', `${sldComLanguage('自定义属性')}`, 0, 0, 5)}
  300. <div className={global.operate_bg}>
  301. {sldIconBtn(() => this.addAttr(), `${sldComLanguage('添加属性分组')}`, 7, 7)}
  302. {/*请输入属性名称 搜索*/}
  303. {sldSearchValClear(`${sldComLanguage('请输入属性名称')}`, 291, this.sldSearch, `${sldComLanguage('搜索')}`, search_con, this.sldSearChange, this.sldSearClear, 65)}
  304. </div>
  305. <Spin spinning={initLoading}>
  306. {/*标准表格-start*/}
  307. <StandardTable
  308. totalHeight={document.body.clientHeight - 150 - 15}
  309. selectedRows={selectedRows}
  310. data={data}
  311. rowKey={'groupId'}
  312. isCheck={false}
  313. columns={columns}
  314. onSelectRow={this.handleSelectRows}
  315. onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
  316. onSldHandleSeleRow={this.onSldHandleSeleRow}
  317. resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
  318. isColumnResize={true}
  319. />
  320. {/*标准表格-end*/}
  321. </Spin>
  322. {/*新增/编辑对话框-start*/}
  323. <SldModal
  324. title={title}
  325. submiting={submiting}
  326. width={500} Promotion_flash_sale
  327. modalVisible={modalVisible}
  328. sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
  329. sldHandleCancle={this.sldHandleCancle}
  330. formItemLayoutModal={formItemLayoutModal}
  331. content={operateData}
  332. />
  333. {/*新增/编辑对话框-end*/}
  334. </div>
  335. );
  336. }
  337. }