SldExpressCom.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. import React, { Component, Fragment } from 'react';
  2. import { connect } from 'dva';
  3. import {
  4. Form,
  5. InputNumber,
  6. Table, Button, Popconfirm,
  7. } from 'antd';
  8. import global from '@/global.less';
  9. import { sldTsvg, getSldEmptyH, formItemLayoutModal,sldComLanguage } from '@/utils/utils';
  10. import SldEditFormCom from '../SldEditFormCom/SldEditFormCom';
  11. import SldModal from '../SldModal/SldModal';
  12. import areaData from '../../assets/area.json'
  13. import defaultSettings from '@/defaultSettings';
  14. const FormItem = Form.Item;
  15. let sthis = '';
  16. @connect(({ business }) => ({
  17. business,
  18. }))
  19. export default class SldExpressCom extends Component {
  20. constructor(props) {
  21. super(props);
  22. sthis = this;
  23. const {
  24. form: { getFieldDecorator },
  25. type,
  26. } = props;
  27. this.state = {
  28. flag: true,
  29. edit_flag: props.edit_flag,
  30. addData: [{
  31. type: 'city_area_deliver',
  32. name: 'deliver_area',
  33. label: `${sldComLanguage('选择地区')}`,
  34. placeholder: `${sldComLanguage('请选择modalVisible')}`,
  35. content: '',
  36. data: [],
  37. }],
  38. modalVisible: false,//是否展示对话框
  39. area_data: areaData,//地区数据
  40. permissionList: [],//地区数据
  41. data_table: [],//表格数据
  42. base_info: [{
  43. type: 'inputnum',
  44. label: `${sldComLanguage('首重/件')}`,
  45. name: 'trans_com_weight' + type,
  46. placeholder: `${sldComLanguage('首重/件(kg/件)')}`,
  47. initialValue: '',
  48. precision: 1,
  49. step:1,
  50. min:0,
  51. max:9999,
  52. rules: [{
  53. required: true,
  54. message: `${sldComLanguage('该项必填')}`,
  55. }],
  56. }, {
  57. type: 'inputnum',
  58. label: `${sldComLanguage('首费(元)')}`,
  59. name: 'trans_com_fee' + type,
  60. placeholder: `${sldComLanguage('首费(元)')}`,
  61. initialValue: '',
  62. precision: 2,
  63. step:2,
  64. min:0,
  65. max:9999,
  66. rules: [{
  67. required: true,
  68. message: `${sldComLanguage('该项必填')}`,
  69. }],
  70. }, {
  71. type: 'inputnum',
  72. label: `${sldComLanguage('续重/件')}`,
  73. name: 'trans_com_add_weight' + type,
  74. placeholder: `${sldComLanguage('续重/件(kg/件)')}`,
  75. initialValue: '',
  76. precision: 1,
  77. step:1,
  78. min:0,
  79. max:9999,
  80. rules: [{
  81. required: true,
  82. message: `${sldComLanguage('该项必填')}`,
  83. }],
  84. }, {
  85. type: 'inputnum',
  86. label: `${sldComLanguage('续费(元)')}`,
  87. name: 'trans_com_add_fee' + type,
  88. placeholder: `${sldComLanguage('续费(元)')}`,
  89. precision: 2,
  90. step:1,
  91. min:0,
  92. max:9999,
  93. initialValue: '',
  94. rules: [{
  95. required: true,
  96. message: `${sldComLanguage('该项必填')}`,
  97. }],
  98. }],
  99. column: [
  100. {
  101. title: ' ',
  102. dataIndex: 'key',
  103. align: 'center',
  104. width: 30,
  105. render: (text, record, index) => {
  106. return index + 1;
  107. },
  108. },
  109. {
  110. title: `${sldComLanguage('操作')}`,
  111. align: 'center',
  112. width: 70,
  113. render: (text, record) => {
  114. return (
  115. <Popconfirm placement={'rightBottom'} title={`${sldComLanguage('确定删除该行吗?')}`}
  116. onConfirm={() => this.remove(record.key)} okText={`${sldComLanguage('确定')}`} cancelText={`${sldComLanguage('取消')}`}>
  117. <a style={{
  118. marginTop: 5,
  119. display: 'inline-block',
  120. }}>{sldTsvg('shanchu', defaultSettings.primaryColor, 20, 20)}</a>
  121. </Popconfirm>
  122. );
  123. },
  124. },
  125. {
  126. title: `${sldComLanguage('配送地区')}`,
  127. align: 'center',
  128. width: 300,
  129. dataIndex: 'deliver_areas',
  130. render: (text, record) => {
  131. return (
  132. <a style={{color:defaultSettings.primaryColor}} onClick={() => {
  133. this.combine_area_info(record.key, record.sele_area_id_array);
  134. }}>{text == '' ? `${sldComLanguage('点击选择配送地区')}` : text}</a>
  135. );
  136. },
  137. },
  138. {
  139. title: `${sldComLanguage('首重/件(kg/元)')}`,
  140. align: 'center',
  141. width: 150,
  142. dataIndex: 'trans_weight',
  143. render: (text, record) => {
  144. return (
  145. <FormItem
  146. style={{ width: 135 }}
  147. >
  148. {getFieldDecorator(`trans_weight${record.key}${type}`, {
  149. initialValue: text, rules: [{
  150. required: true,
  151. message: `${sldComLanguage('该项必填')}`,
  152. }],
  153. })(
  154. <InputNumber
  155. min={0}
  156. max={999999999}
  157. precision={2}
  158. style={{ width: 135 }}
  159. onChange={e => this.handleFieldChange(e, 'trans_weight', record.key)}
  160. placeholder={sldComLanguage('该项必填')}
  161. />,
  162. )}
  163. </FormItem>
  164. );
  165. },
  166. }, {
  167. title: `${sldComLanguage('首费(元)')}`,
  168. align: 'center',
  169. width: 150,
  170. dataIndex: 'trans_fee',
  171. render: (text, record) => {
  172. return (
  173. <FormItem
  174. style={{ width: 135 }}
  175. >
  176. {getFieldDecorator(`trans_fee${record.key}${type}`, {
  177. initialValue: text, rules: [{
  178. required: true,
  179. message: `${sldComLanguage('该项必填')}`,
  180. }],
  181. })(
  182. <InputNumber
  183. min={0}
  184. max={999999999}
  185. precision={2}
  186. style={{ width: 135 }}
  187. onChange={e => this.handleFieldChange(e, 'trans_fee', record.key)}
  188. placeholder={sldComLanguage('该项必填')}
  189. />,
  190. )}
  191. </FormItem>
  192. );
  193. },
  194. }, {
  195. title: `${sldComLanguage('续重/件(kg/元)')}`,
  196. align: 'center',
  197. width: 150,
  198. dataIndex: 'trans_add_weight',
  199. render: (text, record) => {
  200. return (
  201. <FormItem
  202. style={{ width: 135 }}
  203. >
  204. {getFieldDecorator(`trans_add_weight${record.key}${type}`, {
  205. initialValue: text, rules: [{
  206. required: true,
  207. message: `${sldComLanguage('该项必填')}`,
  208. }],
  209. })(
  210. <InputNumber
  211. min={0}
  212. max={999999999}
  213. precision={2}
  214. style={{ width: 135 }}
  215. onChange={e => this.handleFieldChange(e, 'trans_add_weight', record.key)}
  216. placeholder={sldComLanguage('该项必填')}
  217. />,
  218. )}
  219. </FormItem>
  220. );
  221. },
  222. }, {
  223. title: `${sldComLanguage('续费(元)')}`,
  224. dataIndex: 'trans_add_fee',
  225. render: (text, record) => {
  226. return (
  227. <FormItem
  228. style={{ width: 135 }}
  229. >
  230. {getFieldDecorator(`trans_add_fee${record.key}${type}`, {
  231. initialValue: text, rules: [{
  232. required: true,
  233. message: `${sldComLanguage('该项必填')}`,
  234. }],
  235. })(
  236. <InputNumber
  237. min={0}
  238. max={999999999}
  239. precision={2}
  240. style={{ width: 135 }}
  241. onChange={e => this.handleFieldChange(e, 'trans_add_fee', record.key)}
  242. placeholder={sldComLanguage('该项必填')}
  243. />,
  244. )}
  245. </FormItem>
  246. );
  247. },
  248. },
  249. ],//表格
  250. };
  251. }
  252. com_area_data = areaData;//通用的地址信息
  253. componentDidMount() {
  254. let { edit_flag, base_info, flag } = this.state;
  255. if (edit_flag == 1 && flag) {
  256. for (let i in base_info) {
  257. base_info[i].initialValue = this.props.base_info[base_info[i].name];
  258. this.setState({
  259. base_info,
  260. flag: false,
  261. });
  262. }
  263. this.setState({ base_info, data_table: this.props.data_table });
  264. }
  265. }
  266. componentWillReceiveProps(nextProps, nextContext) {
  267. this.setState({
  268. data_table: nextProps.data_table,
  269. });
  270. }
  271. //地区数据组装,已经选择的地区id数据跟通用地区组装
  272. combine_area_info = (key, sele_id_array) => {
  273. let tmp_data = this.com_area_data;
  274. let init_com_data = [];
  275. for (let i in tmp_data) {
  276. let tmp_info = {};
  277. tmp_info.key = i;
  278. tmp_info.id = i;
  279. tmp_info.indeterminate = true;//有选中的为true
  280. tmp_info.checkList = [];
  281. tmp_info.sldchild = [];//下级数据
  282. tmp_info.name = tmp_data[i].regionName;
  283. //查看子元素是否有选中的
  284. tmp_info.checkAll = true;//是否全部选中
  285. for (let j in tmp_data[i].children) {
  286. let cur_data = tmp_data[i].children[j];
  287. if (sele_id_array.length == 0) {
  288. tmp_info.checkAll = false;//是否全部选中
  289. } else {
  290. if (sele_id_array.indexOf(cur_data.regionCode) == -1) {
  291. tmp_info.checkAll = false;
  292. } else {
  293. tmp_info.checkList.push(cur_data.regionCode);
  294. }
  295. }
  296. tmp_info.sldchild.push({ id: j, key: j, label: cur_data.regionName, value: cur_data.regionCode });
  297. }
  298. if (tmp_info.checkList.length == 0) {
  299. tmp_info.indeterminate = false;
  300. }
  301. init_com_data.push(tmp_info);
  302. }
  303. this.setState({
  304. cur_key: key,
  305. permissionList: init_com_data,
  306. modalVisible: true,
  307. });
  308. };
  309. getRowByKey(key, newData) {
  310. return (newData).filter(item => item.key === key)[0];
  311. }
  312. //添加一条数据
  313. add_spec_table_item = () => {
  314. const { data_table } = this.state;
  315. let key = data_table.length + 1;
  316. const newData = data_table.map(item => ({ ...item }));
  317. newData.push({
  318. key: key,
  319. deliver_areas: '',
  320. trans_weight: 1,
  321. trans_fee: 1,
  322. trans_add_weight: 1,
  323. trans_add_fee: 1,
  324. sele_area_id_array: [],
  325. });
  326. this.props.save_sele_area(newData);
  327. this.setState({ data_table: newData });
  328. };
  329. remove(key) {
  330. let { data_table } = this.state;
  331. data_table = data_table.filter(item => item.key != key);
  332. this.props.save_sele_area(data_table);
  333. this.setState({ data_table });
  334. }
  335. handleFieldChange(e, fieldName, key) {
  336. const { data_table } = this.state;
  337. const newData = data_table.map(item => ({ ...item }));
  338. const target = this.getRowByKey(key, newData);
  339. if (target) {
  340. target[fieldName] = e;
  341. this.props.save_sele_area(newData);
  342. this.setState({ data_table: newData });
  343. }
  344. }
  345. sldHandleConfirm = (val) => {
  346. this.setSubmiting(true);
  347. const { curData } = this.state;
  348. val.id = curData.id;//待定,id
  349. this.operateGoods(val, 'set');
  350. };
  351. sldHandleCancle = () => {
  352. this.setState({ modalVisible: false });
  353. };
  354. //全选操作
  355. sldHandleCheckAll = (e, index) => {
  356. let { permissionList } = this.state;
  357. permissionList[index]['checkAll'] = e.target.checked;
  358. if (e.target.checked) {
  359. let sldchild = permissionList[index]['sldchild'];
  360. if (sldchild.length > 0) {
  361. for (let i = 0; i < sldchild.length; i++) {
  362. permissionList[index]['checkList'].push(sldchild[i]['value']);
  363. }
  364. }
  365. } else {
  366. permissionList[index]['checkList'] = [];
  367. }
  368. permissionList[index]['indeterminate'] = false;
  369. this.setState({
  370. permissionList: permissionList,
  371. });
  372. };
  373. //单选操作
  374. sldHandleCheckSingle = (checkList, index) => {
  375. let { permissionList } = this.state;
  376. let sldchild = permissionList[index]['sldchild'];
  377. permissionList[index]['checkList'] = checkList;
  378. if (sldchild.length == checkList.length) {
  379. permissionList[index]['indeterminate'] = false;
  380. permissionList[index]['checkAll'] = true;
  381. } else {
  382. permissionList[index]['indeterminate'] = false;
  383. permissionList[index]['checkAll'] = false;
  384. }
  385. this.setState({
  386. permissionList: permissionList,
  387. });
  388. };
  389. //权限保存操作
  390. sldHandleConfirmPer = () => {
  391. let { permissionList, cur_key, data_table } = this.state;
  392. let seleSldPermiss = [];//选中的地区id结合
  393. for (let i = 0; i < permissionList.length; i++) {
  394. seleSldPermiss = seleSldPermiss.concat(permissionList[i]['checkList']);
  395. }
  396. //获取选中的城市名称
  397. let sele_area_name_array = [];
  398. for (let i in permissionList) {
  399. if (permissionList[i].checkList.length > 0) {
  400. for (let j in permissionList[i].sldchild) {
  401. let tmp = permissionList[i].sldchild[j];
  402. if (seleSldPermiss.indexOf(tmp.value) != -1) {
  403. sele_area_name_array.push(tmp.label);
  404. }
  405. }
  406. }
  407. }
  408. for (let i in data_table) {
  409. if (data_table[i].key == cur_key) {
  410. data_table[i].sele_area_id_array = seleSldPermiss;
  411. data_table[i].deliver_areas = sele_area_name_array.join(',');
  412. }
  413. }
  414. this.setState({
  415. data_table,
  416. });
  417. this.props.save_sele_area(data_table);
  418. this.setState({
  419. modalVisible: false,
  420. });
  421. };
  422. render() {
  423. const { column, data_table, base_info, modalVisible, permissionList } = this.state;
  424. const { title } = this.props;
  425. return <Fragment>
  426. <SldEditFormCom form={this.props.form} search_data={base_info}/>
  427. {getSldEmptyH(10)}
  428. <div className={global.goods_sku_tab} style={{ width: '100%' }}>
  429. {/*可编辑表格-start*/}
  430. <Table
  431. columns={column}
  432. size={'small'}
  433. bordered={true}
  434. rowKey={'key'}
  435. dataSource={data_table}
  436. pagination={false}
  437. />
  438. {/* 可编辑表格-end*/}
  439. </div>
  440. <Button
  441. style={{ width: '100%', marginTop: 16, marginBottom: 8 }}
  442. type="dashed"
  443. onClick={this.add_spec_table_item}
  444. icon="plus"
  445. >
  446. 添加数据
  447. </Button>
  448. {/*地址选择对话框-start*/}
  449. <SldModal
  450. title={`${sldComLanguage('选择地址')}`}
  451. width={900}
  452. modalVisible={modalVisible}
  453. sldHandleConfirm={this.sldHandleConfirmPer}
  454. sldHandleCancle={this.sldHandleCancle}
  455. formItemLayoutModal={formItemLayoutModal}
  456. content={permissionList}
  457. conType={'moreCheck'}
  458. permissionSingle={this.sldHandleCheckSingle}
  459. permissionAll={this.sldHandleCheckAll}
  460. />
  461. {/*地址选择对话框-end*/}
  462. </Fragment>;
  463. }
  464. }