Browse Source

pc代码添加

ytf 3 years ago
parent
commit
4caa84f853
50 changed files with 9670 additions and 5 deletions
  1. 88 2
      admin/config/router.config.js
  2. 158 0
      admin/src/pages/pcdecorate/home/add_template.js
  3. 121 0
      admin/src/pages/pcdecorate/home/adv_01.js
  4. BIN
      admin/src/pages/pcdecorate/home/adv_01.png
  5. 258 0
      admin/src/pages/pcdecorate/home/adv_02.js
  6. 212 0
      admin/src/pages/pcdecorate/home/adv_03.js
  7. 286 0
      admin/src/pages/pcdecorate/home/adv_04.js
  8. BIN
      admin/src/pages/pcdecorate/home/adv_04.png
  9. 521 0
      admin/src/pages/pcdecorate/home/adv_05.js
  10. BIN
      admin/src/pages/pcdecorate/home/adv_05.png
  11. 157 0
      admin/src/pages/pcdecorate/home/adv_06.js
  12. BIN
      admin/src/pages/pcdecorate/home/adv_06.png
  13. 147 0
      admin/src/pages/pcdecorate/home/adv_07.js
  14. BIN
      admin/src/pages/pcdecorate/home/adv_07.png
  15. 161 0
      admin/src/pages/pcdecorate/home/adv_08.js
  16. BIN
      admin/src/pages/pcdecorate/home/adv_08.png
  17. 434 0
      admin/src/pages/pcdecorate/home/adv_09.js
  18. BIN
      admin/src/pages/pcdecorate/home/adv_09.png
  19. 239 0
      admin/src/pages/pcdecorate/home/adv_10.js
  20. BIN
      admin/src/pages/pcdecorate/home/adv_10.png
  21. 240 0
      admin/src/pages/pcdecorate/home/adv_11.js
  22. BIN
      admin/src/pages/pcdecorate/home/adv_11.png
  23. 326 0
      admin/src/pages/pcdecorate/home/adv_12.js
  24. BIN
      admin/src/pages/pcdecorate/home/adv_12.png
  25. 365 0
      admin/src/pages/pcdecorate/home/adv_13.js
  26. BIN
      admin/src/pages/pcdecorate/home/adv_13.png
  27. 369 0
      admin/src/pages/pcdecorate/home/adv_14.js
  28. BIN
      admin/src/pages/pcdecorate/home/adv_14.png
  29. 235 0
      admin/src/pages/pcdecorate/home/adv_15.js
  30. BIN
      admin/src/pages/pcdecorate/home/adv_15.png
  31. BIN
      admin/src/pages/pcdecorate/home/adv_16.png
  32. BIN
      admin/src/pages/pcdecorate/home/adv_17.png
  33. BIN
      admin/src/pages/pcdecorate/home/adv_18.png
  34. 710 0
      admin/src/pages/pcdecorate/home/adv_19.js
  35. BIN
      admin/src/pages/pcdecorate/home/adv_19.png
  36. 408 0
      admin/src/pages/pcdecorate/home/diy_page_lists.js
  37. 412 0
      admin/src/pages/pcdecorate/home/edit_diy_page.js
  38. 192 0
      admin/src/pages/pcdecorate/home/edit_diy_page_head.js
  39. 582 0
      admin/src/pages/pcdecorate/home/edit_diy_page_head.less
  40. 343 0
      admin/src/pages/pcdecorate/home/footer.js
  41. 375 0
      admin/src/pages/pcdecorate/home/home_cat.js
  42. 161 0
      admin/src/pages/pcdecorate/home/home_setting.js
  43. 653 0
      admin/src/pages/pcdecorate/home/instance_template_lists.js
  44. 245 0
      admin/src/pages/pcdecorate/home/main_banner.js
  45. 576 0
      admin/src/pages/pcdecorate/home/nav.js
  46. 89 0
      admin/src/pages/pcdecorate/home/tpl_lists.js
  47. 160 0
      admin/src/pages/pcdecorate/models/pc_home.js
  48. 419 0
      admin/src/pages/pcdecorate/topic/topic_diy_page_lists.js
  49. 26 1
      admin/src/pages/sysset/base/payment.js
  50. 2 2
      admin/src/utils/sldconfig.js

+ 88 - 2
admin/config/router.config.js

@@ -8,7 +8,23 @@ export default [
8 8
       { path: '/user/login', component: './User/Login' },
9 9
     ],
10 10
   },
11
-  
11
+  {
12
+    path: '/pcdecorate_home/diy_page_lists_to_edit',
13
+    component: '../layouts/UserLayout',
14
+    Routes: ['src/pages/CheckLogin'],
15
+    routes: [
16
+      { path: '/pcdecorate_home/diy_page_lists_to_edit', component: './pcdecorate/home/edit_diy_page' },
17
+    ],
18
+  },
19
+  {
20
+    path: '/pcdecorate_topic/topic_diy_page_lists_to_edit',
21
+    component: '../layouts/UserLayout',
22
+    Routes: ['src/pages/CheckLogin'],
23
+    routes: [
24
+      { path: '/pcdecorate_topic/topic_diy_page_lists_to_edit', component: './pcdecorate/home/edit_diy_page' },
25
+    ],
26
+  },
27
+
12 28
   // app
13 29
   {
14 30
     path: '/',
@@ -250,7 +266,77 @@ export default [
250 266
           },
251 267
         ],
252 268
       },
253
-
269
+// PC装修
270
+      {
271
+        path: '/pcdecorate_home',
272
+        icon: 'cluster',
273
+        name: 'pc_home',
274
+        routes: [
275
+          // 模板列表
276
+          {
277
+            path: '/pcdecorate_home/tpl_lists',
278
+            name: 'tpl_lists',
279
+            component: './pcdecorate/home/tpl_lists',
280
+          },
281
+          // 实例化模版
282
+          {
283
+            path: '/pcdecorate_home/instance_template_lists',
284
+            name: 'instance_template_lists',
285
+            component: './pcdecorate/home/instance_template_lists',
286
+          },
287
+          // 新增/编辑模版
288
+          {
289
+            path: '/pcdecorate_home/instance_template_lists_to_add',
290
+            name: '',
291
+            component: './pcdecorate/home/add_template',
292
+          },
293
+          // // 测试模板
294
+          // {
295
+          //   path: '/pcdecorate_home/adv_222',
296
+          //   name: 'adv_222',
297
+          //   component: './pcdecorate/home/adv_222',
298
+          // },
299
+          // 首页装修
300
+          {
301
+            path: '/pcdecorate_home/diy_page_lists',
302
+            name: 'diy_page_lists',
303
+            component: './pcdecorate/home/diy_page_lists',
304
+          },
305
+          // 首页设置
306
+          {
307
+            path: '/pcdecorate_home/home_setting',
308
+            name: 'home_setting',
309
+            component: './pcdecorate/home/home_setting',
310
+          },
311
+          // 首页导航
312
+          {
313
+            path: '/pcdecorate_home/nav',
314
+            name: 'nav',
315
+            component: './pcdecorate/home/nav',
316
+          },
317
+          //页脚管理
318
+          {
319
+            path: '/pcdecorate_home/footer',
320
+            name: 'footer',
321
+            component: './pcdecorate/home/footer',
322
+          },
323
+        ],
324
+      },
325
+      // 专题装修
326
+      {
327
+        path: '/pcdecorate_topic',
328
+        icon: 'tool',
329
+        name: 'pc_decorate_topic',
330
+        routes: [
331
+          // 专题装修
332
+          {
333
+            path: '/pcdecorate_topic/topic_diy_page_lists',
334
+            name: 'topic_diy_page_lists',
335
+            component: './pcdecorate/topic/topic_diy_page_lists',
336
+          },
337
+        ],
338
+      },
339
+      
254 340
       // 首页装修
255 341
       {
256 342
         path: '/decorate_mhome',

+ 158 - 0
admin/src/pages/pcdecorate/home/add_template.js

@@ -0,0 +1,158 @@
1
+import { connect } from 'dva/index';
2
+import React, { Component, Fragment } from 'react';
3
+import { Form, } from 'antd';
4
+import {
5
+	sldIconBtn,
6
+	failTip,
7
+	sucTip,
8
+	sldLlineRtextAddGoodsAddMargin,
9
+	showMoreHelpTip,
10
+	getSldEmptyH,
11
+	sldEmptyHandle2,
12
+	sldComLanguage,
13
+} from '@/utils/utils';
14
+import { add_tpl_tip } from '@/utils/util_data';
15
+import global from '../../../global.less';
16
+import styles from '../pcdecorate.less';
17
+import Adv_01 from './adv_01';
18
+import Adv_02 from './adv_02';
19
+import Adv_04 from './adv_04';
20
+import Adv_05 from './adv_05';
21
+import Adv_06 from './adv_06';
22
+import Adv_07 from './adv_07';
23
+import Adv_08 from './adv_08';
24
+import Adv_09 from './adv_09';
25
+import Adv_10 from './adv_10';
26
+import Adv_11 from './adv_11';
27
+import Adv_12 from './adv_12';
28
+import Adv_13 from './adv_13';
29
+import Adv_19 from './adv_19';
30
+import MainBanner from './main_banner';
31
+import { Scrollbars } from 'react-custom-scrollbars';
32
+
33
+let sthis = '';
34
+let getFieldDecorator_new = '';
35
+@connect(({ product }) => ({
36
+	product,
37
+}))
38
+@Form.create()
39
+export default class Add_template extends Component {
40
+	constructor(props) {
41
+		super(props);
42
+		sthis = this;
43
+		const {
44
+			form: { getFieldDecorator },
45
+		} = props;
46
+		getFieldDecorator_new = getFieldDecorator;
47
+		this.state = {
48
+			data: sldEmptyHandle2(localStorage.getItem('pc_diy_tpl')) != '' ? JSON.parse(localStorage.getItem('pc_diy_tpl')) : '',
49
+		};
50
+	}
51
+
52
+
53
+	componentDidMount() {
54
+
55
+	}
56
+
57
+	componentWillUnmount() {
58
+
59
+	}
60
+
61
+	//保存装修数据
62
+	save_tpl_data = (val, html) => {
63
+		let { data } = this.state;
64
+		//将对象转为JSON对象
65
+		let val_to_json_object = JSON.parse(JSON.stringify(val));
66
+		let param = {};
67
+		param.dataId = data.dataId;
68
+		param.html = html;
69
+		param.json = JSON.stringify(val_to_json_object);
70
+		const { dispatch } = this.props;
71
+		dispatch({
72
+			type: 'pc_home/save_instance_tpl_data',
73
+			payload: param,
74
+			callback: (res) => {
75
+				if (res.state == 200) {
76
+					//替换缓存里的数据
77
+					data.json = param.json;
78
+					data.html = param.html;
79
+					this.setState({data})
80
+					localStorage.setItem('pc_diy_tpl',JSON.stringify(data))
81
+					sucTip(res.msg);
82
+				} else {
83
+					failTip(res.msg);
84
+				}
85
+			},
86
+		});
87
+	};
88
+
89
+	render() {
90
+		const { data } = this.state;
91
+		let data_json = JSON.parse(data.json);
92
+		return (
93
+
94
+			<div className={`${global.common_page} ${styles.allow_show_edit}`}>
95
+
96
+				{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('模板编辑')}`, 0, 0, 10)}
97
+				{showMoreHelpTip(`${sldComLanguage('操作提示')}`, add_tpl_tip())}{/*操作提示*/}
98
+				{getSldEmptyH(10)}
99
+				{/*公共功能条-start*/}
100
+				<div className={global.operate_bg}>
101
+					{sldIconBtn(() => this.props.history.goBack(), `${sldComLanguage('返回')}${sldComLanguage('模板列表')}`, 7, 7, 15, 15, 4, 'fanhui', '#FA6F1E')}
102
+				</div>
103
+				{/*公共功能条-end*/}
104
+				<div className={`${styles.diy_part_wrap} ${styles.allow_show_edit}`}>
105
+					<Scrollbars autoHeight
106
+								autoHeightMin={50}
107
+								autoHeightMax={document.body.clientHeight - 330}>
108
+						{data_json.type == 'adv_01' &&
109
+						<Adv_01 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
110
+						}
111
+						{data_json.type == 'adv_02' &&
112
+						<Adv_02 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
113
+						}
114
+						{data_json.type == 'adv_04' &&
115
+						<Adv_04 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
116
+						}
117
+						{data_json.type == 'adv_05' &&
118
+						<Adv_05 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
119
+						}
120
+						{data_json.type == 'adv_06' &&
121
+						<Adv_06 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
122
+						}
123
+						{data_json.type == 'adv_07' &&
124
+						<Adv_07 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
125
+						}
126
+						{data_json.type == 'adv_08' &&
127
+						<Adv_08 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
128
+						}
129
+						{data_json.type == 'adv_09' &&
130
+						<Adv_09 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
131
+						}
132
+						{data_json.type == 'adv_10' &&
133
+						<Adv_10 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
134
+						}
135
+						{data_json.type == 'adv_11' &&
136
+						<Adv_11 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
137
+						}
138
+						{data_json.type == 'adv_12' &&
139
+						<Adv_12 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
140
+						}
141
+						{data_json.type == 'adv_13' &&
142
+						<Adv_13 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
143
+						}
144
+						{data_json.type == 'adv_19' &&
145
+						<Adv_19 back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
146
+						}
147
+
148
+						{data_json.type == 'main_banner' &&
149
+						<MainBanner back_route={data.back_route} tpl_info={data_json} save_tpl_data={this.save_tpl_data}/>
150
+						}
151
+					</Scrollbars>
152
+				</div>
153
+
154
+
155
+			</div>
156
+		);
157
+	}
158
+}

+ 121 - 0
admin/src/pages/pcdecorate/home/adv_01.js

@@ -0,0 +1,121 @@
1
+/*
2
+* 单图广告
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	isEmptyObject,
9
+	sldTsvgBotText,
10
+	sldComLanguage,
11
+} from '@/utils/utils';
12
+import global from '../../../global.less';
13
+import styles from '../pcdecorate.less';
14
+import SldDiySingleImgModal from '@/components/SldDiySingleImgModal/SldDiySingleImgModal';
15
+
16
+
17
+let sthis = '';
18
+let getFieldDecorator_new = '';
19
+@connect(({ product }) => ({
20
+	product,
21
+}))
22
+@Form.create()
23
+export default class Adv_01 extends Component {
24
+	constructor(props) {
25
+		super(props);
26
+		sthis = this;
27
+		const {
28
+			form: { getFieldDecorator },
29
+		} = props;
30
+		getFieldDecorator_new = getFieldDecorator;
31
+		this.state = {
32
+			tpl_adv_01_modal_tip: [],//modal框提示
33
+			submiting: false,//按钮loading
34
+			modalVisible: false,//是否展示modal
35
+			tpl_info: props.tpl_info,
36
+			data: {
37
+				type: 'adv_01',
38
+				width: 1200,
39
+				height: 0,//高度为0的话表示不限制
40
+				data: {
41
+					imgUrl: '',
42
+					imgPath: '',
43
+					title: '',
44
+					link_url: '',
45
+					link_type: '',
46
+					link_value: '',
47
+				},
48
+			},//装修的数据
49
+
50
+		};
51
+	}
52
+
53
+	componentDidMount() {
54
+		let { tpl_info, data } = this.state;
55
+		this.setState({
56
+			data: tpl_info,
57
+		});
58
+	}
59
+
60
+	componentWillUnmount() {
61
+
62
+	}
63
+
64
+
65
+	editTpl = (tip) => {
66
+		this.setState({
67
+			modalVisible: true,
68
+			tpl_adv_01_modal_tip: tip,
69
+		});
70
+	};
71
+
72
+	sldHandleConfirm = (val) => {
73
+		let { data } = this.state;
74
+		data.data = val;
75
+		// data.height = ;
76
+		this.setState({
77
+			data,
78
+			modalVisible: false,
79
+		}, () => {
80
+			this.props.save_tpl_data(data, sthis.refs.wrap_html.innerHTML);
81
+		});
82
+	};
83
+
84
+	sldHandleCancle = () => {
85
+		this.setState({ modalVisible: false });
86
+	};
87
+
88
+	render() {
89
+		const { data, submiting, modalVisible, tpl_adv_01_modal_tip } = this.state;
90
+		return (
91
+			<Fragment>
92
+				<div ref={'wrap_html'} className={global.flex_row_common}>
93
+					<div className={styles.adv_01_wrap}>
94
+						{!isEmptyObject(data.data) && data.data.imgUrl
95
+							? <img className={styles.adv_01_img} src={data.data.imgUrl}/>
96
+							: sldTsvgBotText('kehubiaoqian', `${sldComLanguage('点击上传图片')}`, 10, '', '', '#999', 30, 30, '#999')
97
+						}
98
+						<div className={styles.sld_mask} onClick={() => this.editTpl([
99
+							`${sldComLanguage('请严格根据提示要求上传规定尺寸的广告图片')}`,
100
+							`${sldComLanguage('编辑项中的“操作”指点击该内容所产生的链接地址,可通过下拉选项选择不同的方式')}`,
101
+						])}>
102
+							<span>{sldComLanguage('编辑')}</span>
103
+						</div>
104
+					</div>
105
+				</div>
106
+				<SldDiySingleImgModal
107
+					width={1000}
108
+					title={sldComLanguage('广告图设置')}
109
+					sldSeleSingleRow={true}
110
+					submiting={submiting}
111
+					modalVisible={modalVisible}
112
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
113
+					sldHandleCancle={this.sldHandleCancle}
114
+					content={data}
115
+					modal_tip={tpl_adv_01_modal_tip}
116
+				/>
117
+
118
+			</Fragment>
119
+		);
120
+	}
121
+}

BIN
admin/src/pages/pcdecorate/home/adv_01.png


+ 258 - 0
admin/src/pages/pcdecorate/home/adv_02.js

@@ -0,0 +1,258 @@
1
+/*
2
+* 装修板块2,左侧一个图片,中间4个商品,右侧3个图片
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  sldComLanguage,
9
+} from '@/utils/utils';
10
+import { tpl_adv_01_modal_tip } from '@/utils/util_data';
11
+import global from '../../../global.less';
12
+import styles from '../pcdecorate.less';
13
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
14
+import SldDiySingleImgModal from '@/components/SldDiySingleImgModal/SldDiySingleImgModal';
15
+import SldSelMoreLeftRightGoods from '@/components/SldSelMoreLeftRightGoods';
16
+
17
+let sthis = '';
18
+let getFieldDecorator_new = '';
19
+@connect(({ product }) => ({
20
+  product,
21
+}))
22
+@Form.create()
23
+export default class Adv_02 extends Component {
24
+  constructor(props) {
25
+    super(props);
26
+    sthis = this;
27
+    const {
28
+      form: { getFieldDecorator },
29
+    } = props;
30
+    getFieldDecorator_new = getFieldDecorator;
31
+    this.state = {
32
+      modal_tip: [],//弹框的提示语
33
+      modalTitle: '',//弹框的标题
34
+      cur_sele_goods: [],//当前选择的商品数据
35
+      cur_sele_goods_ids: [],//当前选择商品id数组
36
+      cur_part: '',//当前操作的部分,比如left,center,right
37
+      cur_data: {},//当前操作数据
38
+      cur_data1: {},//当前操作数据
39
+      submiting: false,//按钮loading
40
+      modalVisible: false,//是否展示modal
41
+      modalSpuShow: false,//是否展示选择商品modal
42
+      modalSingleImgVisible: false,//单图选择器modal是否显示
43
+      tpl_info: props.tpl_info,
44
+      data: {
45
+        type: 'adv_02',
46
+        left: {
47
+          type: 'single_img',
48
+          width: 210,
49
+          height: 344,//高度为0的话表示不限制
50
+          data: {
51
+            imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
52
+            imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
53
+            title: '',
54
+            link_type: '',
55
+            link_value: '',
56
+
57
+          },
58
+        },//左侧图片信息
59
+        center: {
60
+          type: 'goods',
61
+          data: {
62
+            goods_ids: [],
63
+            goods_data: [],
64
+          },
65
+        },//中间商品信息
66
+        right: {
67
+          type: 'more_img',
68
+          width: 242,
69
+          height: 108,
70
+          data: [{
71
+            imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
72
+            imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
73
+            title: '',
74
+            link_type: '',
75
+            link_value: '',
76
+          },
77
+            {
78
+              imgUrl: 'http://img.slodon.cn/data/upload/mobile/special/s1549014137/s1549014137_06023581370067902.jpg',
79
+              imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
80
+              title: '',
81
+              link_type: '',
82
+              link_value: '',
83
+            }, {
84
+              imgUrl: 'http://img.slodon.cn/data/upload/mobile/special/s1549014141/s1549014141_06023581415508567.jpg',
85
+              imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
86
+              title: '',
87
+              link_type: '',
88
+              link_value: '',
89
+            }],
90
+        },//右侧图片信息
91
+      },//装修的数据
92
+
93
+    };
94
+  }
95
+
96
+  sele_goods_param = {
97
+    type: 'common',
98
+    total_num: 0,
99
+  };//商品选择器参数
100
+
101
+
102
+  componentDidMount() {
103
+    let { tpl_info } = this.state;
104
+    this.setState({
105
+      data: tpl_info,
106
+    });
107
+  }
108
+
109
+  componentWillUnmount() {
110
+
111
+  }
112
+
113
+  //编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
114
+  editTpl = (part, modalTitle = '', modalTip = []) => {
115
+    let { data, modalVisible, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, modalSingleImgVisible } = this.state;
116
+    if (data[part].type == 'goods') {
117
+      modalSpuShow = true;
118
+      cur_sele_goods = data[part].data.goods_data;
119
+      cur_sele_goods_ids = data[part].data.goods_ids;
120
+      this.sele_goods_param.total_num = 4;
121
+    } else if (data[part].type == 'single_img') {
122
+      modalSingleImgVisible = true;
123
+    } else {
124
+      modalVisible = true;
125
+    }
126
+    this.setState({
127
+      cur_part: part,
128
+      cur_data: data[part],
129
+      modalVisible,
130
+      modalSpuShow,
131
+      cur_sele_goods,
132
+      cur_sele_goods_ids,
133
+      modalSingleImgVisible,
134
+      modalTitle: modalTitle,
135
+      modal_tip: modalTip,
136
+    });
137
+  };
138
+
139
+  sldHandleConfirm = (val) => {
140
+    let { cur_part, data } = this.state;
141
+    data[cur_part].data = val;
142
+    this.setState({
143
+      data,
144
+      modalVisible: false,
145
+    }, () => {
146
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
147
+    });
148
+  };
149
+
150
+  sldHandleCancle = () => {
151
+    this.setState({ modalVisible: false, modalSingleImgVisible: false, modalSpuShow: false });
152
+  };
153
+
154
+  //选中spu事件
155
+  seleSpu = (selectedRows, selectedRowKeys) => {
156
+    let { data, cur_part } = this.state;
157
+    data[cur_part].data.goods_ids = selectedRowKeys;
158
+    data[cur_part].data.goods_data = selectedRows;
159
+    this.setState({ data }, () => {
160
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
161
+      this.sldHandleCancle();
162
+    });
163
+  };
164
+
165
+  render() {
166
+    const { data, submiting, modalVisible, cur_data, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, modalSingleImgVisible, modalTitle, modal_tip } = this.state;
167
+    return (
168
+      <Fragment>
169
+        <div ref={'wrap_html'} className={global.flex_com_row}>
170
+          <div className={styles.adv_02_part}>
171
+            <div className={styles.adv_02_left}>
172
+              {data.left.data.imgUrl != undefined && data.left.data.imgUrl &&
173
+              <img src={data.left.data.imgUrl}/>
174
+              }
175
+              <div className={styles.sld_mask}
176
+                   onClick={() => this.editTpl('left', `${sldComLanguage('左侧图片设置')}`, tpl_adv_01_modal_tip())}>
177
+                <span>{sldComLanguage('编辑')}</span>
178
+              </div>
179
+            </div>
180
+            <div className={styles.adv_02_center}>
181
+              <span className={styles.split_h}></span>
182
+              <span className={styles.split_v}></span>
183
+              {data.center.data.goods_ids.length > 0 &&
184
+              data.center.data.goods_data.map((item, index) => {
185
+                return <div key={index} className={`${styles.goods_item} ${styles.clearfix}`}>
186
+                  <div className={styles.left}>
187
+                    <img src={item.mainImage}/>
188
+                  </div>
189
+                  <div className={styles.right}>
190
+                    <p className={styles.goods_name}>{item.goodsName}</p>
191
+                    <p
192
+                      className={styles.buy_num}>{item.actualSales + item.virtualSales}{sldComLanguage('人已买')}</p>
193
+                    <div className={styles.price}>
194
+                      <span className={styles.unit}>{sldComLanguage('¥')}</span>
195
+                      <span className={styles.integer}>{item.goodsPrice}</span>
196
+                      {/*<span className={styles.decimal}>00</span>*/}
197
+                      {item.marketPrice * 1 > 0 &&
198
+                      <span className={`${styles.btn_common} ${styles.del}`}>{sldComLanguage('¥')}{item.marketPrice}</span>}
199
+                    </div>
200
+                    <a className={styles.buy}>{sldComLanguage('立即抢购')}</a>
201
+                  </div>
202
+                </div>;
203
+              })
204
+              }
205
+              <div className={styles.sld_mask}
206
+                   onClick={() => this.editTpl('center', `${sldComLanguage('商品选择(该模块需要4个商品)')}`)}>
207
+                <span>{sldComLanguage('编辑')}</span>
208
+              </div>
209
+            </div>
210
+            <div className={styles.adv_02_right}>
211
+              {data.right.data.map((item, index) => {
212
+                return <span key={index} className={styles.right_img_item}>
213
+                    <img src={item.imgUrl}/>
214
+                  </span>;
215
+              })}
216
+              <div className={styles.sld_mask}
217
+                   onClick={() => this.editTpl('right', `${sldComLanguage('右侧图片设置')}`, tpl_adv_01_modal_tip())}>
218
+                <span>{sldComLanguage('编辑')}</span>
219
+              </div>
220
+            </div>
221
+          </div>
222
+        </div>
223
+        <SldDiySingleImgModal
224
+          width={1000}
225
+          title={modalTitle}
226
+          sldSeleSingleRow={true}
227
+          submiting={submiting}
228
+          modalVisible={modalSingleImgVisible}
229
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
230
+          sldHandleCancle={this.sldHandleCancle}
231
+          content={cur_data}
232
+          modal_tip={modal_tip}
233
+        />
234
+        <SldDiyMoreImgModal
235
+          width={900}
236
+          title={modalTitle}
237
+          sldSeleSingleRow={true}
238
+          submiting={submiting}
239
+          modalVisible={modalVisible}
240
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
241
+          sldHandleCancle={this.sldHandleCancle}
242
+          content={cur_data}
243
+          modal_tip={modal_tip}
244
+          client={'pc'}
245
+        />
246
+
247
+        {/*商品多选的modal框-start*/}
248
+        <SldSelMoreLeftRightGoods selectedRows={cur_sele_goods}
249
+                                  selectedRowKeys={cur_sele_goods_ids}
250
+                                  modalVisible={modalSpuShow} width={1000}
251
+                                  height={document.body.clientHeight - 400}
252
+                                  sldHandleSeleMoreModalCancle={this.sldHandleCancle} seleSvideo={this.seleSpu}
253
+                                  title={modalTitle} extra={this.sele_goods_param}/>
254
+        {/*商品多选的modal框-end*/}
255
+      </Fragment>
256
+    );
257
+  }
258
+}

+ 212 - 0
admin/src/pages/pcdecorate/home/adv_03.js

@@ -0,0 +1,212 @@
1
+/*
2
+* 装修板块2,左侧一个图片,中间4个商品,右侧3个图片
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldIconBtn,
9
+	sldLlineRtextAddGoodsAddMargin,
10
+	showMoreHelpTip,
11
+	getSldEmptyH,
12
+	sldComLanguage,
13
+} from '@/utils/utils';
14
+import { add_tpl_tip } from '@/utils/util_data';
15
+import global from '../../../global.less';
16
+import styles from '../pcdecorate.less';
17
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
18
+import SldDiySingleImgModal from '@/components/SldDiySingleImgModal/SldDiySingleImgModal';
19
+import SldSelGoodsMore from '@/components/SldSelGoodsMore';
20
+import router from 'umi/router';
21
+
22
+let sthis = '';
23
+let getFieldDecorator_new = '';
24
+@connect(({ product }) => ({
25
+	product,
26
+}))
27
+@Form.create()
28
+export default class Adv_03 extends Component {
29
+	constructor(props) {
30
+		super(props);
31
+		sthis = this;
32
+		const {
33
+			form: { getFieldDecorator },
34
+		} = props;
35
+		getFieldDecorator_new = getFieldDecorator;
36
+		this.state = {
37
+			modal_tip: [],//弹框的提示语
38
+			modalTitle: '',//弹框的标题
39
+			cur_sele_goods: [],//当前选择的商品数据
40
+			cur_sele_goods_ids: [],//当前选择商品id数组
41
+			cur_part: '',//当前操作的部分,比如left,center,right
42
+			cur_data: {},//当前操作数据
43
+			cur_data1: {},//当前操作数据
44
+			submiting: false,//按钮loading
45
+			modalVisible: false,//是否展示modal
46
+			modalSpuShow: false,//是否展示选择商品modal
47
+			modalSingleImgVisible: false,//单图选择器modal是否显示
48
+			tpl_info: props.tpl_info,
49
+			data: {
50
+				type: 'adv_02',
51
+				left: {
52
+					type: 'single_img',
53
+					width: 210,
54
+					height: 344,//高度为0的话表示不限制
55
+					data: {
56
+						imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
57
+						imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
58
+						title: '',
59
+						link_type: '',
60
+						link_value: '',
61
+					},
62
+				},//左侧图片信息
63
+				center: {
64
+					type: 'goods',
65
+					data: {
66
+						goods_ids: [],
67
+						goods_data: [],
68
+					},
69
+				},//中间商品信息
70
+				right: {
71
+					type: 'more_img',
72
+					width: 242,
73
+					height: 108,
74
+					data: [{
75
+						imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
76
+						imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
77
+						title: '',
78
+						link_type: '',
79
+						link_value: '',
80
+					},
81
+						{
82
+							imgUrl: 'http://img.slodon.cn/data/upload/mobile/special/s1549014137/s1549014137_06023581370067902.jpg',
83
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
84
+							title: '',
85
+							link_type: '',
86
+							link_value: '',
87
+						}, {
88
+							imgUrl: 'http://img.slodon.cn/data/upload/mobile/special/s1549014141/s1549014141_06023581415508567.jpg',
89
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
90
+							title: '',
91
+							link_type: '',
92
+							link_value: '',
93
+						}],
94
+				},//右侧图片信息
95
+			},//装修的数据
96
+
97
+		};
98
+	}
99
+
100
+	sele_goods_param = {
101
+		type: 'common',
102
+		total_num: 0,
103
+	};//商品选择器参数
104
+
105
+
106
+	componentDidMount() {
107
+
108
+	}
109
+
110
+	componentWillUnmount() {
111
+
112
+	}
113
+
114
+	//编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
115
+	editTpl = (part, modalTitle = '', modalTip = []) => {
116
+		let { data, modalVisible, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, modalSingleImgVisible } = this.state;
117
+		if (data[part].type == 'goods') {
118
+			modalSpuShow = true;
119
+			cur_sele_goods = data[part].data.goods_data;
120
+			cur_sele_goods_ids = data[part].data.goods_ids;
121
+			this.sele_goods_param.total_num = 4;
122
+		} else if (data[part].type == 'single_img') {
123
+			modalSingleImgVisible = true;
124
+		} else {
125
+			modalVisible = true;
126
+		}
127
+		this.setState({
128
+			cur_part: part,
129
+			cur_data: data[part],
130
+			modalVisible,
131
+			modalSpuShow,
132
+			cur_sele_goods,
133
+			cur_sele_goods_ids,
134
+			modalSingleImgVisible,
135
+			modalTitle: modalTitle,
136
+			modal_tip: modalTip,
137
+		});
138
+	};
139
+
140
+	sldHandleConfirm = (val) => {
141
+		let { cur_part, data } = this.state;
142
+		data[cur_part].data = val;
143
+		this.setState({
144
+			data,
145
+			modalVisible: false,
146
+		}, () => {
147
+			this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
148
+		});
149
+	};
150
+
151
+	sldHandleCancle = () => {
152
+		this.setState({ modalVisible: false, modalSingleImgVisible: false, modalSpuShow: false });
153
+	};
154
+
155
+	//选中spu事件
156
+	seleSpu = (selectedRows, selectedRowKeys) => {
157
+		let { data, cur_part } = this.state;
158
+		data[cur_part].data.goods_ids = selectedRowKeys;
159
+		data[cur_part].data.goods_data = selectedRows;
160
+		this.setState({ data }, () => {
161
+			this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
162
+		});
163
+	};
164
+
165
+	render() {
166
+		const { data, submiting, modalVisible, cur_data, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, modalSingleImgVisible, modalTitle, modal_tip } = this.state;
167
+		return (
168
+			<Fragment>
169
+				{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('商品楼层(楼层类型)—楼层具体的名称')}`, 0, 0, 10)}
170
+				{showMoreHelpTip(`${sldComLanguage('操作提示')}`, add_tpl_tip())}
171
+				{getSldEmptyH(10)}
172
+				{/*公共功能条-start*/}
173
+				<div className={global.operate_bg}>
174
+					{sldIconBtn(() => router.replace(this.props.back_route), `${sldComLanguage('返回')}${sldComLanguage('模板列表')}`, 7, 7, 15, 15, 4, 'fanhui', '#FA6F1E')}
175
+				</div>
176
+				{/*公共功能条-end*/}
177
+				<div className={styles.diy_part_wrap}>
178
+
179
+				</div>
180
+				<SldDiySingleImgModal
181
+					width={1000}
182
+					title={modalTitle}
183
+					sldSeleSingleRow={true}
184
+					submiting={submiting}
185
+					modalVisible={modalSingleImgVisible}
186
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
187
+					sldHandleCancle={this.sldHandleCancle}
188
+					content={cur_data}
189
+					modal_tip={modal_tip}
190
+				/>
191
+				<SldDiyMoreImgModal
192
+					width={900}
193
+					title={modalTitle}
194
+					sldSeleSingleRow={true}
195
+					submiting={submiting}
196
+					modalVisible={modalVisible}
197
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
198
+					sldHandleCancle={this.sldHandleCancle}
199
+					content={cur_data}
200
+					modal_tip={modal_tip}
201
+				/>
202
+
203
+				{/*添加spu的modal框-start*/}
204
+				<SldSelGoodsMore selectedRows={cur_sele_goods} selectedRowKeys={cur_sele_goods_ids}
205
+								  modalAddSkuIsShow={modalSpuShow} width={1000}
206
+								  sldHandleAddSkuModalCancle={this.sldHandleCancle} seleSku={this.seleSpu}
207
+								  modaltitle={modalTitle} extra={this.sele_goods_param}/>
208
+				{/*添加spu的modal框-end*/}
209
+			</Fragment>
210
+		);
211
+	}
212
+}

+ 286 - 0
admin/src/pages/pcdecorate/home/adv_04.js

@@ -0,0 +1,286 @@
1
+/*
2
+* 猜你喜欢模块
3
+* 标题可以自定义
4
+* 商品一行5个,为了页面效果好看,建议选择的商品数量是5的倍数
5
+* */
6
+import { connect } from 'dva/index';
7
+import React, { Component, Fragment } from 'react';
8
+import { Form } from 'antd';
9
+import {
10
+  formItemLayoutModal,
11
+  sldComLanguage,
12
+} from '@/utils/utils';
13
+import styles from '../pcdecorate.less';
14
+import SldModal from '@/components/SldModal/SldModal';
15
+import SldSelMoreLeftRightGoods from '@/components/SldSelMoreLeftRightGoods';
16
+
17
+let sthis = '';
18
+let getFieldDecorator_new = '';
19
+const empty_data = [1, 2, 3, 4, 5];
20
+@connect(({ product }) => ({
21
+  product,
22
+}))
23
+@Form.create()
24
+export default class Adv_04 extends Component {
25
+  constructor(props) {
26
+    super(props);
27
+    sthis = this;
28
+    const {
29
+      form: { getFieldDecorator },
30
+    } = props;
31
+    getFieldDecorator_new = getFieldDecorator;
32
+    this.state = {
33
+      modal_tip: [],//弹框的提示语
34
+      modalTitle: '',//弹框的标题
35
+      cur_sele_goods: [],//当前选择的商品数据
36
+      cur_sele_goods_ids: [],//当前选择商品id数组
37
+      cur_part: '',//当前操作的部分,比如left,center,right
38
+      cur_data: {},//当前操作数据
39
+      cur_data1: {},//当前操作数据
40
+      submiting: false,//按钮loading
41
+      modalVisible: false,//是否展示modal
42
+      modalSpuShow: false,//是否展示选择商品modal
43
+      tpl_info: props.tpl_info,
44
+      addData: [{
45
+        type: 'input',
46
+        label: `${sldComLanguage('标题名称')}`,
47
+        name: 'title_name',
48
+        placeholder: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,
49
+        extra: `${sldComLanguage('标题名称不能为空,10个字符以内')}`,
50
+        initialValue: '',
51
+        maxLength:10,
52
+        rules: [{
53
+          required: true,
54
+          whitespace: true,
55
+          message: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,
56
+        },],
57
+      }, {
58
+        type: 'more_color_picker',
59
+        label: `${sldComLanguage('颜色')}`,
60
+        name: 'title_color',
61
+        placeholder: `${sldComLanguage('请点击选择颜色')}`,
62
+        initialValue: '',
63
+        is_show: false,
64
+        callbackShow: (color) => this.sldHandleColorPicker(color, 'title_color', 'is_show'),
65
+        callback: (color) => this.sldHandleColorPicker(color, 'title_color', 'color'),
66
+      }, {
67
+        type: 'empty',
68
+        name: 'empty',
69
+        height: 0,
70
+      }],//modal框的数据
71
+      data: {
72
+        type: 'adv_04',
73
+        title_info: {
74
+          title_name: '',//标题名称
75
+          title_color: '',//标题颜色
76
+        },
77
+        data: {
78
+          goods_ids: [],
79
+          goods_data: [],
80
+        },//商品信息
81
+      },//装修的数据
82
+    };
83
+  }
84
+
85
+  sele_goods_param = {
86
+    type: 'common',
87
+    total_num: 0,
88
+    min_num: 5,
89
+  };//商品选择器参数
90
+
91
+
92
+  componentDidMount() {
93
+    let { tpl_info } = this.state;
94
+    this.setState({
95
+      data: tpl_info,
96
+    });
97
+  }
98
+
99
+  componentWillUnmount() {
100
+
101
+  }
102
+
103
+  //设置颜色  color:选中的颜色值  name:addData里面的name  type:color 修改颜色, is_show 是否显示
104
+  sldHandleColorPicker = (color, name, type) => {
105
+    let { addData } = this.state;
106
+    for (let i in addData) {
107
+      if (addData[i].name == name) {
108
+        if (type == 'is_show') {
109
+          addData[i].is_show = color;
110
+        } else if (type == 'color') {
111
+          addData[i].initialValue = color;
112
+        }
113
+      } else {
114
+        if (addData[i].name == 'empty') {
115
+          if (type == 'is_show' && color) {
116
+            addData[i].height = 300;
117
+          } else if (type == 'is_show' && !color) {
118
+            addData[i].height = 0;
119
+          }
120
+        }
121
+
122
+        if (type == 'is_show') {
123
+          addData[i].is_show = false;
124
+        }
125
+      }
126
+
127
+    }
128
+    this.setState({ addData });
129
+  };
130
+
131
+  //编辑板块 type:类型  modalTitle:弹框的标题  modalTip:弹框的整体提示
132
+  editTpl = (type, modalTitle = '', modalTip = []) => {
133
+    let { data, modalVisible, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, cur_data, addData } = this.state;
134
+    if (type == 'goods') {
135
+      //商品选择
136
+      modalSpuShow = true;
137
+      cur_sele_goods = data.data.goods_data;
138
+      cur_sele_goods_ids = data.data.goods_ids;
139
+      cur_data = data.data;
140
+    } else {
141
+      modalVisible = true;
142
+      for (let i in addData) {
143
+        addData[i].initialValue = data.title_info[addData[i].name];
144
+      }
145
+      cur_data = data.title_info;
146
+    }
147
+    this.setState({
148
+      cur_part: type,
149
+      cur_data,
150
+      modalVisible,
151
+      modalSpuShow,
152
+      cur_sele_goods,
153
+      cur_sele_goods_ids,
154
+      modalTitle: modalTitle,
155
+      modal_tip: modalTip,
156
+      addData,
157
+    });
158
+  };
159
+
160
+  sldHandleConfirm = (val) => {
161
+    let { data, addData } = this.state;
162
+    //标题数据组装
163
+    data.title_info.title_name = val.title_name;
164
+    for (let i in addData) {
165
+      if (addData[i].name == 'title_color') {
166
+        data.title_info.title_color = addData[i].initialValue;
167
+        break;
168
+      }
169
+    }
170
+    this.setState({
171
+      data,
172
+      modalVisible: false,
173
+    }, () => {
174
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
175
+    });
176
+  };
177
+
178
+  sldHandleCancle = () => {
179
+    this.setState({ modalVisible: false, modalSpuShow: false });
180
+  };
181
+
182
+  //选中spu事件
183
+  seleSpu = (selectedRows, selectedRowKeys) => {
184
+    let { data } = this.state;
185
+    data.data.goods_ids = selectedRowKeys;
186
+    data.data.goods_data = selectedRows;
187
+    this.setState({ data }, () => {
188
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
189
+      this.sldHandleCancle();
190
+    });
191
+  };
192
+
193
+  render() {
194
+    const { data, submiting, modalVisible, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, modalTitle, addData } = this.state;
195
+    return (
196
+      <Fragment>
197
+        <div ref={'wrap_html'}>
198
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_04_wrap}`}>
199
+            <div className={styles.floor_title}>
200
+              <div className={styles.sld_mask}
201
+                   onClick={() => this.editTpl('title', `${sldComLanguage('顶部标题设置')}`)}>
202
+                <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
203
+              </div>
204
+              <h2>
205
+                <font
206
+                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
207
+                <span
208
+                  style={data.title_info.title_color != '' ? { color: data.title_info.title_color } : null}>{data.title_info.title_name != '' ? data.title_info.title_name : '请填写标题'}</span>
209
+                <font
210
+                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
211
+              </h2>
212
+            </div>
213
+            <div className={styles.floor_goods}>
214
+              <div className={styles.sld_mask}
215
+                //商品选择(至少选择5个商品,建议是5的倍数)     标题不能为空,最多输入10个字', '选择不同的颜色,标题颜色随之改变
216
+                   onClick={() => this.editTpl('goods', `${sldComLanguage('pc_home.adv.select_goods')}`, [`${sldComLanguage('pc_home.adv.title_limit')}`, `${sldComLanguage('pc_home.adv.color_change')}`])}>
217
+                <span>{sldComLanguage('编辑')}</span>{/**/}
218
+              </div>
219
+              {data.data.goods_data.length == 0 &&
220
+              empty_data.map((item) => {
221
+                return <div key={item} className={styles.item}>
222
+                  <div className={styles.wrap}>
223
+                    <a className={styles.example_text}>
224
+                      <span>{sldComLanguage('示例产品')}<br/>【172*170】</span>{/*示例产品*/}
225
+                    </a>
226
+                    <p className={styles.title}>
227
+                      <a href="javascript:;" title={sldComLanguage('商品名称')}>{/*商品名称*/}
228
+                        {sldComLanguage('商品名称')}</a>{/*商品名称*/}
229
+                    </p>
230
+                    <p className={styles.price}>
231
+                      <span className={styles.second_color}>{sldComLanguage('¥')}<span className={styles.money_number}>0.00</span>
232
+                      </span>
233
+                    </p>
234
+                  </div>
235
+                </div>;
236
+              })
237
+              }
238
+
239
+              {data.data.goods_data.length > 0 &&
240
+              data.data.goods_data.map((item) => {
241
+                return <div key={item.id} className={styles.item}>
242
+                  <div className={styles.wrap}>
243
+                    <a href="javascript:;" className={styles.example_text}>
244
+                      <img src={item.mainImage}/>
245
+                    </a>
246
+                    <p className={styles.title}>
247
+                      <a href="javascript:;" title={item.goodsName}>{item.goodsName}</a>
248
+                    </p>
249
+                    <p className={styles.price}>
250
+                      <span className={styles.second_color}>¥<span
251
+                        className={styles.money_number}>{item.goodsPrice}</span>
252
+                      </span>
253
+                    </p>
254
+                  </div>
255
+                </div>;
256
+              })
257
+              }
258
+            </div>
259
+
260
+
261
+          </div>
262
+        </div>
263
+        { /*标题对话框-start*/}
264
+        <SldModal
265
+          title={modalTitle}
266
+          submiting={submiting}
267
+          width={500}
268
+          modalVisible={modalVisible}
269
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
270
+          sldHandleCancle={this.sldHandleCancle}
271
+          formItemLayoutModal={formItemLayoutModal}
272
+          content={addData}
273
+        />
274
+        { /*标题对话框-end*/}
275
+        {/*商品多选的modal框-start*/}
276
+        <SldSelMoreLeftRightGoods selectedRows={cur_sele_goods}
277
+                                  selectedRowKeys={cur_sele_goods_ids}
278
+                                  modalVisible={modalSpuShow} width={1000}
279
+                                  height={document.body.clientHeight - 400}
280
+                                  sldHandleSeleMoreModalCancle={this.sldHandleCancle} seleSvideo={this.seleSpu}
281
+                                  title={modalTitle} extra={this.sele_goods_param}/>
282
+        {/*商品多选的modal框-end*/}
283
+      </Fragment>
284
+    );
285
+  }
286
+}

BIN
admin/src/pages/pcdecorate/home/adv_04.png


+ 521 - 0
admin/src/pages/pcdecorate/home/adv_05.js

@@ -0,0 +1,521 @@
1
+/*
2
+* 商品楼层
3
+* 标题可以自定义
4
+* 左侧图片+分类信息,中间和右侧是商品信息,属于标准的楼层模板
5
+* */
6
+import { connect } from 'dva/index';
7
+import React, { Component, Fragment } from 'react';
8
+import { Form } from 'antd';
9
+import {
10
+  formItemLayoutModal,
11
+  sldComLanguage,
12
+} from '@/utils/utils';
13
+import {
14
+  sld_com_empty_arrar_4,
15
+  sld_com_empty_arrar_5,
16
+  sld_com_empty_arrar_9,
17
+} from '@/utils/util_data';
18
+import styles from '../pcdecorate.less';
19
+import SldModal from '@/components/SldModal/SldModal';
20
+import SldDiySingleImgModal from '@/components/SldDiySingleImgModal/SldDiySingleImgModal';
21
+import SldDiyTitleLinkModal from '@/components/SldDiyTitleLinkModal/SldDiyTitleLinkModal';
22
+import SldSelCatMore from '@/components/SldSelCatMore';
23
+import SldSelMoreLeftRightGoods from '@/components/SldSelMoreLeftRightGoods';
24
+
25
+let sthis = '';
26
+let getFieldDecorator_new = '';
27
+@connect(({ product }) => ({
28
+  product,
29
+}))
30
+@Form.create()
31
+export default class Adv_05 extends Component {
32
+  constructor(props) {
33
+    super(props);
34
+    sthis = this;
35
+    const {
36
+      form: { getFieldDecorator },
37
+    } = props;
38
+    getFieldDecorator_new = getFieldDecorator;
39
+    this.state = {
40
+      modal_tip: [],//弹框的提示语
41
+      modalTitle: '',//弹框的标题
42
+      cur_sele_goods: [],//当前选择的商品数据
43
+      cur_sele_goods_ids: [],//当前选择商品id数组
44
+      cur_sele_cats: [],//当前选择的分类数据
45
+      cur_sele_cats_ids: [],//当前选择分类id数组
46
+      cur_part: '',//当前操作的部分,比如left,center,right
47
+      cur_data: {},//当前操作数据
48
+      cur_data1: {},//当前操作数据
49
+      submiting: false,//按钮loading
50
+      modalVisible: false,//是否展示modal
51
+      modalSpuShow: false,//是否展示选择商品modal
52
+      modalSingleImgVisible: false,//单图选择器modal是否显示
53
+      modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
54
+      modalComCatSelectorShow: false,//分类选择modal是否显示
55
+      tpl_info: props.tpl_info,
56
+      addData: [{
57
+        type: 'input',
58
+        label: `${sldComLanguage('标题名称')}`,
59
+        name: 'title_name',
60
+        placeholder: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,
61
+        extra: `${sldComLanguage('最多输入8个字')}`,
62
+        initialValue: '',
63
+        maxLength:8,
64
+        rules: [{
65
+          required: true,
66
+          whitespace: true,
67
+          message: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,
68
+        }],
69
+      }],//modal框的数据
70
+      data: {
71
+        type: 'adv_05',
72
+        title_info: {
73
+          title: {
74
+            label: `${sldComLanguage('标题')}`,
75
+            name: 'title',
76
+            initialValue: `${sldComLanguage('清仓打折')}`,
77
+            required: true,
78
+          },//标题名称
79
+          sub_title: {
80
+            label: `${sldComLanguage('子标题')}`,
81
+            name: 'sub_title',
82
+            initialValue: `${sldComLanguage('清仓打折')}`,
83
+            required: false,
84
+          },//子标题名称
85
+          link_type: '',
86
+          link_value: '',
87
+          info: {},
88
+        },
89
+        left: {
90
+          type: 'img_cat',
91
+          width: 298,
92
+          height: 482,
93
+          data: {
94
+            imgUrl: '',
95
+            imgPath: '',
96
+            title: '',
97
+            link_type: '',
98
+            link_value: '',
99
+            info: {},
100
+          },
101
+          cat_data: {
102
+            title_info: {
103
+              title_name: '',
104
+              title_color: '',//标题颜色
105
+            },
106
+            cat_ids: [],//分类id数组
107
+            cat_datas: [],//分类信息数组
108
+          },//分类信息
109
+        },//左侧板块信息
110
+        center: {
111
+          data: {
112
+            goods_ids: [],
113
+            goods_data: [],
114
+          },
115
+        },//中间板块信息
116
+        right: {
117
+          type: 'goods',
118
+          title_info: {
119
+            title_name: '',//标题名称
120
+            title_color: '',//标题颜色
121
+          },
122
+          data: {
123
+            goods_ids: [],
124
+            goods_data: [],
125
+          },
126
+        },//右侧板块信息
127
+      },
128
+    };
129
+  }
130
+
131
+  sele_goods_param = {
132
+    type: 'common',
133
+    total_num: 0,
134
+  };//商品选择器参数
135
+
136
+  sele_cats_param = {
137
+    type: 'common',
138
+    max_num: 0,
139
+  };//分类选择器参数
140
+
141
+  componentDidMount() {
142
+    let { tpl_info } = this.state;
143
+    this.setState({
144
+      data: tpl_info,
145
+    });
146
+  }
147
+
148
+  componentWillUnmount() {
149
+
150
+  }
151
+
152
+  //编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
153
+  editTpl = (part, modalTitle = '', modalTip = []) => {
154
+    let { data, modalVisible, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, cur_sele_cats, cur_sele_cats_ids, modalSingleImgVisible, cur_data, addData, modalSldDiyTitleLinkVisible, modalComCatSelectorShow } = this.state;
155
+    if (part == 'center') {
156
+      modalSpuShow = true;
157
+      cur_sele_goods = data[part].data.goods_data;
158
+      cur_sele_goods_ids = data[part].data.goods_ids;
159
+      cur_data = data[part];
160
+      this.sele_goods_param.total_num = 5;
161
+    } else if (part == 'right') {
162
+      modalSpuShow = true;
163
+      cur_sele_goods = data[part].data.goods_data;
164
+      cur_sele_goods_ids = data[part].data.goods_ids;
165
+      cur_data = data[part];
166
+      this.sele_goods_param.total_num = 4;
167
+    } else if (part == 'left_img') {
168
+      //左侧图片
169
+      cur_data = data.left;
170
+      modalSingleImgVisible = true;
171
+    } else if (part == 'left_cat_title') {
172
+      //左侧分类信息标题
173
+      cur_data = data.left.cat_data.title_info;
174
+      for (let i in addData) {
175
+        addData[i].initialValue = cur_data[addData[i].name];
176
+      }
177
+      modalVisible = true;
178
+    } else if (part == 'right_title') {
179
+      //右侧标题设置
180
+      cur_data = data.right.title_info;
181
+      for (let i in addData) {
182
+        addData[i].initialValue = cur_data[addData[i].name];
183
+      }
184
+      modalVisible = true;
185
+    } else if (part == 'top_title_link') {
186
+      //顶部标题设置
187
+      cur_data = data.title_info;
188
+      modalSldDiyTitleLinkVisible = true;
189
+    } else if (part == 'left_cat_data') {
190
+      //左侧分类标题设置
191
+      cur_sele_cats = data.left.cat_data.cat_datas;
192
+      cur_sele_cats_ids = data.left.cat_data.cat_ids;
193
+      cur_data = data.left.cat_data;
194
+      modalComCatSelectorShow = true;
195
+      this.sele_cats_param.max_num = 9;
196
+    }
197
+    this.setState({
198
+      cur_part: part,
199
+      cur_data,
200
+      modalVisible,
201
+      modalSpuShow,
202
+      cur_sele_goods,
203
+      cur_sele_goods_ids,
204
+      cur_sele_cats,
205
+      cur_sele_cats_ids,
206
+      modalSingleImgVisible,
207
+      modalTitle: modalTitle,
208
+      modal_tip: modalTip,
209
+      addData,
210
+      modalSldDiyTitleLinkVisible,
211
+      modalComCatSelectorShow,
212
+    });
213
+  };
214
+
215
+  sldHandleConfirm = (val) => {
216
+    let { cur_part, data } = this.state;
217
+    if (cur_part == 'left_img') {
218
+      data.left.data = val;
219
+    } else if (cur_part == 'left_cat_title') {
220
+      data.left.cat_data.title_info = val;
221
+    } else if (cur_part == 'right_title') {
222
+      data.right.title_info = val;
223
+    } else if (cur_part == 'top_title_link') {
224
+      //顶部标题数据
225
+      for (let i in val) {
226
+        if (i == 'title') {
227
+          data.title_info.title.initialValue = val.title;
228
+        } else if (i == 'sub_title') {
229
+          data.title_info.sub_title.initialValue = val.sub_title;
230
+        } else if (i == 'link_type') {
231
+          data.title_info.link_type = val.link_type;
232
+          data.title_info.link_value = val.link_value;
233
+          data.title_info.info = val.info != undefined ? val.info : {};
234
+        }
235
+      }
236
+    }
237
+    this.setState({
238
+      data,
239
+      modalVisible: false,
240
+      modalSldDiyTitleLinkVisible: false,
241
+    }, () => {
242
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
243
+    });
244
+  };
245
+
246
+  sldHandleCancle = () => {
247
+    this.setState({
248
+      modalVisible: false,
249
+      modalSingleImgVisible: false,
250
+      modalSpuShow: false,
251
+      modalSldDiyTitleLinkVisible: false,
252
+      modalComCatSelectorShow: false,
253
+    });
254
+  };
255
+
256
+  //选中spu事件
257
+  seleSpu = (selectedRows, selectedRowKeys) => {
258
+    let { data, cur_part } = this.state;
259
+    if (cur_part == 'left_cat_data') {
260
+      //左侧分类数据
261
+      data.left.cat_data.cat_ids = selectedRowKeys;
262
+      data.left.cat_data.cat_datas = selectedRows;
263
+    } else {
264
+      data[cur_part].data.goods_ids = selectedRowKeys;
265
+      data[cur_part].data.goods_data = selectedRows;
266
+    }
267
+    this.setState({ data }, () => {
268
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
269
+      this.sldHandleCancle();
270
+    });
271
+  };
272
+
273
+  //渲染页面右侧商品数据
274
+  render_right_goods = (item, index) => {
275
+    let is_empty = typeof (item) != 'object' ? true : false;
276
+    return <div key={index} className={styles.item}>
277
+      <div className={styles.wrap}>
278
+        <div className={styles.left_pic}>
279
+          <a href="javascript:;" className={`${styles.ad_img} ${styles.example_text}`}>
280
+            {is_empty
281
+              ? <span>【90*90</span>
282
+              : <img src={item.mainImage} alt={item.goodsName}/>
283
+            }
284
+
285
+          </a>
286
+        </div>
287
+        <div className={styles.right_info}>
288
+          <p className={styles.title}>
289
+            <a href="javascript:;"
290
+               title={is_empty ? `${sldComLanguage('商品名称')}` : item.goodsName}>{is_empty ? `${sldComLanguage('商品名称')}` : item.goodsName}</a>
291
+          </p>
292
+          <p className={styles.price}>
293
+            ¥<span className={styles.money_number}>{is_empty ? 0.00 : item.goodsPrice}</span>
294
+          </p>
295
+        </div>
296
+      </div>
297
+    </div>;
298
+  };
299
+
300
+  //渲染中间商品信息
301
+  render_center_goods = (item, index) => {
302
+    let is_empty = typeof (item) != 'object' ? true : false;
303
+    let content = '';
304
+    let goods_name = is_empty ? `${sldComLanguage('商品名称')}` : item.goodsName;
305
+    let img_part = is_empty ? <span>{sldComLanguage('示例产品')}<br/>【162*162】</span> :
306
+      <img src={item.mainImage} alt={item.goodsName}/>;
307
+    let goods_price = is_empty ? 0.00 : item.goodsPrice;
308
+    if (index == 0) {
309
+      content = <div key={index} className={`${styles.big_item} ${styles.item}`}>
310
+        <div className={styles.wrap}>
311
+          <div className={styles.left_pic}>
312
+            <a href="javascript:;" className={`${styles.ad_img} ${styles.example_text}`}>
313
+              {img_part}
314
+            </a>
315
+          </div>
316
+          <div className={styles.right_info}>
317
+            <p className={styles.title}>
318
+              <a href="javascript:;" title={goods_name}>{goods_name}</a>
319
+            </p>
320
+            <p className={styles.price}>
321
+              ¥<span className={styles.money_number}>{goods_price}</span>
322
+            </p>
323
+          </div>
324
+        </div>
325
+      </div>;
326
+    } else {
327
+      content = <div key={index} className={`${styles.item} ${index > 1 ? styles.bottom_item : null}`}>
328
+        <div className={styles.wrap}>
329
+          <a href="javascript:;" className={`${styles.ad_img} ${styles.example_text} ${styles.special}`}>
330
+            {img_part}
331
+          </a>
332
+          <p className={styles.title}>
333
+            <a href="javascript:;" title={goods_name}>{goods_name}</a>
334
+          </p>
335
+          <p className={styles.price}>¥<span className={styles.money_number}>{goods_price}</span>
336
+          </p>
337
+        </div>
338
+      </div>;
339
+    }
340
+    return content;
341
+  };
342
+
343
+  render() {
344
+    const { data, submiting, modalVisible, cur_data, modalSpuShow, cur_sele_goods, cur_sele_goods_ids, cur_sele_cats, cur_sele_cats_ids, modalSingleImgVisible, modalTitle, modal_tip, addData, modalSldDiyTitleLinkVisible, modalComCatSelectorShow } = this.state;
345
+    return (
346
+      <Fragment>
347
+        <div ref={'wrap_html'}>
348
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_05_wrap}`}>
349
+            <div className={styles.floor}>
350
+              <div className={styles.floor_layout}>
351
+                <div className={`${styles.floor_con} ${styles.floor_con3}`}>
352
+                  <div className={styles.floor_title}>
353
+                    <div className={styles.sld_mask}
354
+                         onClick={() => this.editTpl('top_title_link', `${sldComLanguage('标题设置')}`)}>{/*标题设置*/}
355
+                      <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
356
+                    </div>
357
+                    <h2>
358
+												<span
359
+                          className={styles.main_title}>{data.title_info.title.initialValue != '' ? data.title_info.title.initialValue : `${sldComLanguage('添加')}${sldComLanguage('标题')}`}</span>
360
+                      <span
361
+                        className={styles.sub_title}>{data.title_info.sub_title.initialValue != '' ? data.title_info.sub_title.initialValue : `${sldComLanguage('添加')}${sldComLanguage('子标题')}`}</span>
362
+                    </h2>
363
+                    <div className={styles.right_action}>
364
+                      <a
365
+                        href="javascript:void(0)">{sldComLanguage('查看更多')}<i>&gt;&gt;</i></a>
366
+                    </div>
367
+                  </div>
368
+                  <div className={styles.floor_content}>
369
+                    <div className={styles.floor_left}>
370
+                      <div className={styles.floor_bg_img}>
371
+                        <div className={styles.sld_mask}
372
+                             onClick={() => this.editTpl('left_img', `${sldComLanguage('左侧图片设置')}`)}>
373
+                          <span>{sldComLanguage('编辑')}</span>
374
+                        </div>
375
+                        <a className={`${styles.ad_img} ${styles.example_text}`}
376
+                           href="javascript:;">
377
+                          {data.left.data.imgUrl != '' ?
378
+                            <img src={data.left.data.imgUrl}/> :
379
+                            <span>{sldComLanguage('此处添加【298*482】图片')}</span>}
380
+                        </a>
381
+                      </div>
382
+                      <div className={styles.floor_words}>
383
+                        <div className={styles.floor_words_top_title}>
384
+                          <div className={styles.sld_mask}
385
+                               onClick={() => this.editTpl('left_cat_title', `${sldComLanguage('左侧分类信息标题')}`)}>
386
+                            <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
387
+                          </div>
388
+                          <font></font>
389
+                          <span>{data.left.cat_data.title_info.title_name != '' ? data.left.cat_data.title_info.title_name : `${sldComLanguage('添加')}${sldComLanguage('标题')}`}</span>
390
+                          <font></font>
391
+                        </div>
392
+                        <ul className={styles.cat_data_wrap}>
393
+                          <div className={styles.sld_mask}
394
+                               onClick={() => this.editTpl('left_cat_data', `${sldComLanguage('左侧分类选择9个')}`)}>
395
+                            <span>{sldComLanguage('编辑')}</span>
396
+                          </div>
397
+                          {data.left.cat_data.cat_datas.length == 0
398
+                            ? sld_com_empty_arrar_9.map((item, index) => {
399
+                              return <li key={index}>
400
+                                <a href="javascript:;"
401
+                                   title={sldComLanguage('分类名称')}>{sldComLanguage('分类名称')}</a>
402
+                              </li>;
403
+                            })
404
+                            : data.left.cat_data.cat_datas.map((item, index) => {
405
+                              return <li key={index}>
406
+                                <a href="javascript:;"
407
+                                   title={item.categoryName}>{item.categoryName}</a>
408
+                              </li>;
409
+                            })
410
+                          }
411
+                        </ul>
412
+                      </div>
413
+                    </div>
414
+                    <div
415
+                      style={{ borderColor: data.right.title_info.title_color ? data.right.title_info.title_color : '#fc5863' }}
416
+                      className={styles.floor_right}>
417
+                      <div className={styles.floor_right_main}>
418
+                        <div className={styles.sld_mask}
419
+                             onClick={() => this.editTpl('center', `${sldComLanguage('商品选择5个')}`)}>
420
+                          <span>{sldComLanguage('编辑')}</span>
421
+                        </div>
422
+                        <div className={styles.floor_content}>
423
+                          {data.center.data.goods_data.length == 0
424
+                            ? sld_com_empty_arrar_5.map((item, index) => {
425
+                              return this.render_center_goods(item, index);
426
+                            })
427
+                            : data.center.data.goods_data.map((item, index) => {
428
+                              return this.render_center_goods(item, index);
429
+                            })
430
+                          }
431
+                        </div>
432
+                      </div>
433
+
434
+                      <div className={styles.floor_right_new}>
435
+                        <div className={styles.floor_right_new_top_title}>
436
+                          <div className={styles.sld_mask}
437
+                               onClick={() => this.editTpl('right_title', `${sldComLanguage('右侧标题设置')}`)}>
438
+                            <span>{sldComLanguage('编辑')}</span>
439
+                          </div>
440
+                          <font
441
+                            style={{ background: data.right.title_info.title_color ? data.right.title_info.title_color : '#fc5863' }}></font>
442
+                          <span
443
+                            style={{ color: data.right.title_info.title_color ? data.right.title_info.title_color : '#fc5863' }}>{data.right.title_info.title_name != '' ? data.right.title_info.title_name : `${sldComLanguage('添加')}${sldComLanguage('标题')}`}</span>{/*添加标题*/}
444
+                          <font
445
+                            style={{ background: data.right.title_info.title_color ? data.right.title_info.title_color : '#fc5863' }}></font>
446
+                        </div>
447
+                        <div className={styles.floor_content}>
448
+                          <div className={styles.sld_mask}
449
+                               onClick={() => this.editTpl('right', `${sldComLanguage('商品选择4个')}`)}>
450
+                            <span>{sldComLanguage('编辑')}</span>
451
+                          </div>
452
+                          {data.right.data.goods_data.length == 0
453
+                            ? sld_com_empty_arrar_4.map((item, index) => {
454
+                              return this.render_right_goods(item, index);
455
+                            })
456
+                            : data.right.data.goods_data.map((item, index) => {
457
+                              return this.render_right_goods(item, index);
458
+                            })
459
+                          }
460
+                        </div>
461
+                      </div>
462
+
463
+                    </div>
464
+                  </div>
465
+                </div>
466
+              </div>
467
+            </div>
468
+          </div>
469
+        </div>
470
+        <SldDiySingleImgModal
471
+          width={1000}
472
+          title={modalTitle}
473
+          sldSeleSingleRow={true}
474
+          submiting={submiting}
475
+          modalVisible={modalSingleImgVisible}
476
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
477
+          sldHandleCancle={this.sldHandleCancle}
478
+          content={cur_data}
479
+          modal_tip={modal_tip}
480
+        />
481
+        <SldDiyTitleLinkModal
482
+          width={1000}
483
+          title={modalTitle}
484
+          sldSeleSingleRow={true}
485
+          submiting={submiting}
486
+          modalVisible={modalSldDiyTitleLinkVisible}
487
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
488
+          sldHandleCancle={this.sldHandleCancle}
489
+          content={cur_data}
490
+          modal_tip={modal_tip}
491
+        />
492
+        { /*标题对话框-start*/}
493
+        <SldModal
494
+          title={modalTitle}
495
+          submiting={submiting}
496
+          width={500}
497
+          modalVisible={modalVisible}
498
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
499
+          sldHandleCancle={this.sldHandleCancle}
500
+          formItemLayoutModal={formItemLayoutModal}
501
+          content={addData}
502
+        />
503
+        { /*标题对话框-end*/}
504
+        {/*添加spu的modal框-start*/}
505
+        {/*商品多选的modal框-start*/}
506
+        <SldSelMoreLeftRightGoods selectedRows={cur_sele_goods}
507
+                                  selectedRowKeys={cur_sele_goods_ids}
508
+                                  modalVisible={modalSpuShow} width={1000}
509
+                                  height={document.body.clientHeight - 400}
510
+                                  sldHandleSeleMoreModalCancle={this.sldHandleCancle} seleSvideo={this.seleSpu}
511
+                                  title={modalTitle} extra={this.sele_goods_param}/>
512
+        {/*商品多选的modal框-end*/}
513
+        <SldSelCatMore selectedRows={cur_sele_cats} selectedRowKeys={cur_sele_cats_ids}
514
+                       modalAddSkuIsShow={modalComCatSelectorShow} width={1000}
515
+                       sldHandleAddSkuModalCancle={this.sldHandleCancle} seleSku={this.seleSpu}
516
+                       modaltitle={modalTitle} extra={this.sele_cats_param}/>
517
+        {/*添加spu的modal框-end*/}
518
+      </Fragment>
519
+    );
520
+  }
521
+}

BIN
admin/src/pages/pcdecorate/home/adv_05.png


+ 157 - 0
admin/src/pages/pcdecorate/home/adv_06.js

@@ -0,0 +1,157 @@
1
+/*
2
+* 四栏广告:一行四图,图片之间没有间隔
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldComLanguage,
9
+} from '@/utils/utils';
10
+import {
11
+	tpl_adv_06_modal_tip,
12
+} from '@/utils/util_data';
13
+import styles from '../pcdecorate.less';
14
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
15
+
16
+let sthis = '';
17
+let getFieldDecorator_new = '';
18
+@connect(({ product }) => ({
19
+	product,
20
+}))
21
+@Form.create()
22
+export default class Adv_06 extends Component {
23
+	constructor(props) {
24
+		super(props);
25
+		sthis = this;
26
+		const {
27
+			form: { getFieldDecorator },
28
+		} = props;
29
+		getFieldDecorator_new = getFieldDecorator;
30
+		this.state = {
31
+			modalTitle: `${sldComLanguage('编辑四栏广告')}`,//弹框的标题
32
+			modal_tip: [],//弹框的提示语
33
+			submiting: false,//按钮loading
34
+			modalVisible: false,//是否展示modal
35
+			modalSpuShow: false,//是否展示选择商品modal
36
+			modalSingleImgVisible: false,//单图选择器modal是否显示
37
+			modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
38
+			modalComCatSelectorShow: false,//分类选择modal是否显示
39
+			tpl_info: props.tpl_info,
40
+			data: {
41
+				type: 'adv_06',
42
+				width: 302,
43
+				height: 0,//高度为0的话表示不限制
44
+				data:[{
45
+					imgUrl: '',
46
+					imgPath: '',
47
+					title: '',
48
+					link_type: '',
49
+					link_value: '',
50
+					info:{},
51
+				},{
52
+					imgUrl: '',
53
+					imgPath: '',
54
+					title: '',
55
+					link_type: '',
56
+					link_value: '',
57
+					info:{},
58
+				},{
59
+					imgUrl: '',
60
+					imgPath: '',
61
+					title: '',
62
+					link_type: '',
63
+					link_value: '',
64
+					info:{},
65
+				},{
66
+					imgUrl: '',
67
+					imgPath: '',
68
+					title: '',
69
+					link_type: '',
70
+					link_value: '',
71
+					info:{},
72
+				},],
73
+			},
74
+		};
75
+	}
76
+
77
+
78
+
79
+
80
+	componentDidMount() {
81
+		let { tpl_info } = this.state;
82
+		this.setState({
83
+			data: tpl_info,
84
+		});
85
+	}
86
+
87
+	componentWillUnmount() {
88
+
89
+	}
90
+
91
+	sldHandleCancle = () => {
92
+		this.setState({ modalVisible: false });
93
+	};
94
+
95
+	sldHandleConfirm = (val) => {
96
+		let { data } = this.state;
97
+		data.data = val;
98
+		this.setState({
99
+			data,
100
+			modalVisible: false,
101
+		}, () => {
102
+			this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
103
+		});
104
+	};
105
+
106
+	//编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
107
+	editTpl = (part='', modalTitle = '', modalTip = []) => {
108
+		let { data, modalVisible, } = this.state;
109
+		modalVisible = true;
110
+		this.setState({
111
+			cur_part: part,
112
+			cur_data: data,
113
+			modalVisible,
114
+			modal_tip: modalTip,
115
+		});
116
+	};
117
+
118
+
119
+	render() {
120
+		const { data, submiting,modalTitle,modalVisible,cur_data,modal_tip } = this.state;
121
+		return (
122
+			<Fragment>
123
+				<div ref={'wrap_html'}>
124
+					<div className={`${styles.w_sld_react_1210} ${styles.adv_06}`}>
125
+						<div className={` ${styles.adv_06_wrap}`}>
126
+							<div className={styles.sld_mask}
127
+								 onClick={() => this.editTpl('','',tpl_adv_06_modal_tip())}>
128
+								<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
129
+							</div>
130
+							{data.data.map((item,index)=>(
131
+								<div key={index} className={styles.item}>
132
+									<a className={`${item.imgUrl?null:styles.show_tip}`} href="javascript:void(0);">
133
+										{item.imgUrl?<img src={item.imgUrl}/>:<span>{sldComLanguage('此处添加【302*高度不限】图片')}</span>}
134
+									</a>
135
+								</div>
136
+							))
137
+							}
138
+						</div>
139
+
140
+					</div>
141
+				</div>
142
+				<SldDiyMoreImgModal
143
+					width={1000}
144
+					title={modalTitle}
145
+					sldSeleSingleRow={true}
146
+					submiting={submiting}
147
+					modalVisible={modalVisible}
148
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
149
+					sldHandleCancle={this.sldHandleCancle}
150
+					content={cur_data}
151
+					modal_tip={modal_tip}
152
+          client={'pc'}
153
+				/>
154
+			</Fragment>
155
+		);
156
+	}
157
+}

BIN
admin/src/pages/pcdecorate/home/adv_06.png


+ 147 - 0
admin/src/pages/pcdecorate/home/adv_07.js

@@ -0,0 +1,147 @@
1
+/*
2
+* 三栏广告:一行三图,图片之间没有间隔
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  sldComLanguage,
9
+} from '@/utils/utils';
10
+import {
11
+  tpl_adv_07_modal_tip,
12
+} from '@/utils/util_data';
13
+import styles from '../pcdecorate.less';
14
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
15
+
16
+let sthis = '';
17
+let getFieldDecorator_new = '';
18
+@connect(({ product }) => ({
19
+  product,
20
+}))
21
+@Form.create()
22
+export default class Adv_07 extends Component {
23
+  constructor(props) {
24
+    super(props);
25
+    sthis = this;
26
+    const {
27
+      form: { getFieldDecorator },
28
+    } = props;
29
+    getFieldDecorator_new = getFieldDecorator;
30
+    this.state = {
31
+      modalTitle: `${sldComLanguage('编辑三栏广告')}`,//弹框的标题
32
+      modal_tip: [],//弹框的提示语
33
+      submiting: false,//按钮loading
34
+      modalVisible: false,//是否展示modal
35
+      modalSpuShow: false,//是否展示选择商品modal
36
+      modalSingleImgVisible: false,//单图选择器modal是否显示
37
+      modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
38
+      modalComCatSelectorShow: false,//分类选择modal是否显示
39
+      tpl_info: props.tpl_info,
40
+      data: {
41
+        type: 'adv_07',
42
+        width: 403,
43
+        height: 0,//高度为0的话表示不限制
44
+        data: [{
45
+          imgUrl: '',
46
+          imgPath: '',
47
+          title: '',
48
+          link_type: '',
49
+          link_value: '',
50
+          info: {},
51
+        }, {
52
+          imgUrl: '',
53
+          imgPath: '',
54
+          title: '',
55
+          link_type: '',
56
+          link_value: '',
57
+          info: {},
58
+        }, {
59
+          imgUrl: '',
60
+          imgPath: '',
61
+          title: '',
62
+          link_type: '',
63
+          link_value: '',
64
+          info: {},
65
+        }],
66
+      },
67
+    };
68
+  }
69
+
70
+  componentDidMount() {
71
+    let { tpl_info } = this.state;
72
+    this.setState({
73
+      data: tpl_info,
74
+    });
75
+  }
76
+
77
+  componentWillUnmount() {
78
+
79
+  }
80
+
81
+  sldHandleCancle = () => {
82
+    this.setState({ modalVisible: false });
83
+  };
84
+
85
+  sldHandleConfirm = (val) => {
86
+    let { data } = this.state;
87
+    data.data = val;
88
+    this.setState({
89
+      data,
90
+      modalVisible: false,
91
+    }, () => {
92
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
93
+    });
94
+  };
95
+
96
+  //编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
97
+  editTpl = (part = '', modalTitle = '', modalTip = []) => {
98
+    let { data, modalVisible } = this.state;
99
+    modalVisible = true;
100
+    this.setState({
101
+      cur_part: part,
102
+      cur_data: data,
103
+      modalVisible,
104
+      modal_tip: modalTip,
105
+    });
106
+  };
107
+
108
+
109
+  render() {
110
+    const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip } = this.state;
111
+    return (
112
+      <Fragment>
113
+        <div ref={'wrap_html'}>
114
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_07}`}>
115
+            <div className={` ${styles.adv_07_wrap}`}>
116
+              <div className={styles.sld_mask}
117
+                   onClick={() => this.editTpl('', '', tpl_adv_07_modal_tip())}>
118
+                <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
119
+              </div>
120
+              {data.data.map((item, index) => (
121
+                <div key={index} className={styles.item}>
122
+                  <a className={`${item.imgUrl ? null : styles.show_tip}`} href="javascript:void(0);">
123
+                    {item.imgUrl ? <img src={item.imgUrl}/> : <span>{sldComLanguage('此处添加【403*高度不限】图片')}</span>}
124
+                  </a>
125
+                </div>
126
+              ))
127
+              }
128
+            </div>
129
+
130
+          </div>
131
+        </div>
132
+        <SldDiyMoreImgModal
133
+          width={1000}
134
+          title={modalTitle}
135
+          sldSeleSingleRow={true}
136
+          submiting={submiting}
137
+          modalVisible={modalVisible}
138
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
139
+          sldHandleCancle={this.sldHandleCancle}
140
+          content={cur_data}
141
+          modal_tip={modal_tip}
142
+          client={'pc'}
143
+        />
144
+      </Fragment>
145
+    );
146
+  }
147
+}

BIN
admin/src/pages/pcdecorate/home/adv_07.png


+ 161 - 0
admin/src/pages/pcdecorate/home/adv_08.js

@@ -0,0 +1,161 @@
1
+/*
2
+* 五栏广告:一行五图,图片之间没有间隔
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  sldComLanguage,
9
+} from '@/utils/utils';
10
+import {
11
+  tpl_adv_08_modal_tip,
12
+} from '@/utils/util_data';
13
+import styles from '../pcdecorate.less';
14
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
15
+
16
+let sthis = '';
17
+let getFieldDecorator_new = '';
18
+@connect(({ product }) => ({
19
+  product,
20
+}))
21
+@Form.create()
22
+export default class Adv_08 extends Component {
23
+  constructor(props) {
24
+    super(props);
25
+    sthis = this;
26
+    const {
27
+      form: { getFieldDecorator },
28
+    } = props;
29
+    getFieldDecorator_new = getFieldDecorator;
30
+    this.state = {
31
+      modalTitle: `${sldComLanguage('编辑五栏广告')}`,//弹框的标题
32
+      modal_tip: [],//弹框的提示语
33
+      submiting: false,//按钮loading
34
+      modalVisible: false,//是否展示modal
35
+      modalSpuShow: false,//是否展示选择商品modal
36
+      modalSingleImgVisible: false,//单图选择器modal是否显示
37
+      modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
38
+      modalComCatSelectorShow: false,//分类选择modal是否显示
39
+      tpl_info: props.tpl_info,
40
+      data: {
41
+        type: 'adv_08',
42
+        width: 242,
43
+        height: 0,//高度为0的话表示不限制
44
+        data: [{
45
+          imgUrl: '',
46
+          imgPath: '',
47
+          title: '',
48
+          link_type: '',
49
+          link_value: '',
50
+          info: {},
51
+        }, {
52
+          imgUrl: '',
53
+          imgPath: '',
54
+          title: '',
55
+          link_type: '',
56
+          link_value: '',
57
+          info: {},
58
+        }, {
59
+          imgUrl: '',
60
+          imgPath: '',
61
+          title: '',
62
+          link_type: '',
63
+          link_value: '',
64
+          info: {},
65
+        }, {
66
+          imgUrl: '',
67
+          imgPath: '',
68
+          title: '',
69
+          link_type: '',
70
+          link_value: '',
71
+          info: {},
72
+        }, {
73
+          imgUrl: '',
74
+          imgPath: '',
75
+          title: '',
76
+          link_type: '',
77
+          link_value: '',
78
+          info: {},
79
+        }],
80
+      },
81
+    };
82
+  }
83
+
84
+
85
+  componentDidMount() {
86
+    let { tpl_info } = this.state;
87
+    this.setState({
88
+      data: tpl_info,
89
+    });
90
+  }
91
+
92
+  componentWillUnmount() {
93
+
94
+  }
95
+
96
+  sldHandleCancle = () => {
97
+    this.setState({ modalVisible: false });
98
+  };
99
+
100
+  sldHandleConfirm = (val) => {
101
+    let { data } = this.state;
102
+    data.data = val;
103
+    this.setState({
104
+      data,
105
+      modalVisible: false,
106
+    }, () => {
107
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
108
+    });
109
+  };
110
+
111
+  //编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
112
+  editTpl = (part = '', modalTitle = '', modalTip = []) => {
113
+    let { data, modalVisible } = this.state;
114
+    modalVisible = true;
115
+    this.setState({
116
+      cur_part: part,
117
+      cur_data: data,
118
+      modalVisible,
119
+      modal_tip: modalTip,
120
+    });
121
+  };
122
+
123
+
124
+  render() {
125
+    const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip } = this.state;
126
+    return (
127
+      <Fragment>
128
+        <div ref={'wrap_html'}>
129
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_08}`}>
130
+            <div className={` ${styles.adv_08_wrap}`}>
131
+              <div className={styles.sld_mask}
132
+                   onClick={() => this.editTpl('', '', tpl_adv_08_modal_tip())}>
133
+                <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
134
+              </div>
135
+              {data.data.map((item, index) => (
136
+                <div key={index} className={styles.item}>
137
+                  <a className={`${item.imgUrl ? null : styles.show_tip}`} href="javascript:void(0);">
138
+                    {item.imgUrl ? <img src={item.imgUrl}/> : <span>{sldComLanguage('此处添加【242*高度不限】图片')}</span>}
139
+                  </a>
140
+                </div>
141
+              ))
142
+              }
143
+            </div>
144
+          </div>
145
+        </div>
146
+        <SldDiyMoreImgModal
147
+          width={1000}
148
+          title={modalTitle}
149
+          sldSeleSingleRow={true}
150
+          submiting={submiting}
151
+          modalVisible={modalVisible}
152
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
153
+          sldHandleCancle={this.sldHandleCancle}
154
+          content={cur_data}
155
+          modal_tip={modal_tip}
156
+          client={'pc'}
157
+        />
158
+      </Fragment>
159
+    );
160
+  }
161
+}

BIN
admin/src/pages/pcdecorate/home/adv_08.png


+ 434 - 0
admin/src/pages/pcdecorate/home/adv_09.js

@@ -0,0 +1,434 @@
1
+/*
2
+* 一行三列广告,每列由标题和图片布局组成,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  formItemLayoutModal,
9
+  sldComLanguage,
10
+} from '@/utils/utils';
11
+import styles from '../pcdecorate.less';
12
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
13
+import SldModal from '@/components/SldModal/SldModal';
14
+
15
+
16
+let sthis = '';
17
+let getFieldDecorator_new = '';
18
+@connect(({ product }) => ({
19
+  product,
20
+}))
21
+@Form.create()
22
+export default class Adv_09 extends Component {
23
+  constructor(props) {
24
+    super(props);
25
+    sthis = this;
26
+    const {
27
+      form: { getFieldDecorator },
28
+    } = props;
29
+    getFieldDecorator_new = getFieldDecorator;
30
+    this.state = {
31
+      modalTitle: `${sldComLanguage('编辑五栏广告')}`,//弹框的标题
32
+      modal_tip: [],//弹框的提示语
33
+      submiting: false,//按钮loading
34
+      modalVisible: false,//是否展示modal
35
+      modalImgVisible: false,//是否展示多图选择modal
36
+      tpl_info: props.tpl_info,
37
+      addData: [{
38
+        type: 'input',
39
+        label: `${sldComLanguage('标题名称')}`,//标题名称
40
+        name: 'title_name',
41
+        placeholder: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,
42
+        extra: `${sldComLanguage('最多输入5个字')}`,
43
+        initialValue: '',
44
+        maxLength:5,
45
+        rules: [{
46
+          required: true,
47
+          whitespace: true,
48
+          message: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,
49
+        }],
50
+      }, {
51
+        type: 'more_color_picker',
52
+        label: `${sldComLanguage('标题颜色')}`,
53
+        name: 'title_color',
54
+        placeholder: `${sldComLanguage('请点击选择标题颜色')}`,
55
+        initialValue: '',
56
+        is_show: false,
57
+        callbackShow: (color) => this.sldHandleColorPicker(color, 'title_color', 'is_show'),
58
+        callback: (color) => this.sldHandleColorPicker(color, 'title_color', 'color'),
59
+      }, {
60
+        type: 'more_color_picker',
61
+        label: `${sldComLanguage('背景色')}`,
62
+        name: 'title_bg_color',
63
+        placeholder: `${sldComLanguage('请点击选择背景色')}`,
64
+        initialValue: '',
65
+        is_show: false,
66
+        callbackShow: (color) => this.sldHandleColorPicker(color, 'title_bg_color', 'is_show'),
67
+        callback: (color) => this.sldHandleColorPicker(color, 'title_bg_color', 'color'),
68
+      }, {
69
+        type: 'empty',
70
+        name: 'empty',
71
+        height: 0,
72
+      }],//modal框的数据
73
+      data: {
74
+        type: 'adv_09',
75
+        left: {
76
+          width: 187,
77
+          height: 123,//高度为0的话表示不限制
78
+          title_info: {
79
+            title_name: '',//标题名称
80
+            title_color: '#fff',//标题颜色
81
+            title_bg_color: '#6358d4',//标题背景色
82
+          },
83
+          data: [{
84
+            imgUrl: '',
85
+            imgPath: '',
86
+            title: '',
87
+            link_type: '',
88
+            link_value: '',
89
+            info: {},
90
+          }, {
91
+            imgUrl: '',
92
+            imgPath: '',
93
+            title: '',
94
+            link_type: '',
95
+            link_value: '',
96
+            info: {},
97
+          }, {
98
+            imgUrl: '',
99
+            imgPath: '',
100
+            title: '',
101
+            link_type: '',
102
+            link_value: '',
103
+            info: {},
104
+          }, {
105
+            imgUrl: '',
106
+            imgPath: '',
107
+            title: '',
108
+            link_type: '',
109
+            link_value: '',
110
+            info: {},
111
+          }, {
112
+            imgUrl: '',
113
+            imgPath: '',
114
+            title: '',
115
+            link_type: '',
116
+            link_value: '',
117
+            info: {},
118
+          }, {
119
+            imgUrl: '',
120
+            imgPath: '',
121
+            title: '',
122
+            link_type: '',
123
+            link_value: '',
124
+            info: {},
125
+          }],
126
+        },
127
+        center: {
128
+          width: 376,
129
+          height: 123,//高度为0的话表示不限制
130
+          title_info: {
131
+            title_name: '',//标题名称
132
+            title_color: '#fff',//标题颜色
133
+            title_bg_color: '#e05795',//标题背景色
134
+          },
135
+          data: [{
136
+            imgUrl: '',
137
+            imgPath: '',
138
+            title: '',
139
+            link_type: '',
140
+            link_value: '',
141
+            info: {},
142
+          }, {
143
+            imgUrl: '',
144
+            imgPath: '',
145
+            title: '',
146
+            link_type: '',
147
+            link_value: '',
148
+            info: {},
149
+          }, {
150
+            imgUrl: '',
151
+            imgPath: '',
152
+            title: '',
153
+            link_type: '',
154
+            link_value: '',
155
+            info: {},
156
+          }],
157
+        },
158
+        right: {
159
+          width: 124,
160
+          height: 185,//高度为0的话表示不限制
161
+          title_info: {
162
+            title_name: '',//标题名称
163
+            title_color: '#fff',//标题颜色
164
+            title_bg_color: '#47c0ca',//标题背景色
165
+          },
166
+          data: [{
167
+            imgUrl: '',
168
+            imgPath: '',
169
+            title: '',
170
+            link_type: '',
171
+            link_value: '',
172
+            info: {},
173
+          }, {
174
+            imgUrl: '',
175
+            imgPath: '',
176
+            title: '',
177
+            link_type: '',
178
+            link_value: '',
179
+            info: {},
180
+          }, {
181
+            imgUrl: '',
182
+            imgPath: '',
183
+            title: '',
184
+            link_type: '',
185
+            link_value: '',
186
+            info: {},
187
+          }, {
188
+            imgUrl: '',
189
+            imgPath: '',
190
+            title: '',
191
+            link_type: '',
192
+            link_value: '',
193
+            info: {},
194
+          }, {
195
+            imgUrl: '',
196
+            imgPath: '',
197
+            title: '',
198
+            link_type: '',
199
+            link_value: '',
200
+            info: {},
201
+          }, {
202
+            imgUrl: '',
203
+            imgPath: '',
204
+            title: '',
205
+            link_type: '',
206
+            link_value: '',
207
+            info: {},
208
+          }],
209
+        },
210
+      },
211
+    };
212
+  }
213
+
214
+
215
+  componentDidMount() {
216
+    let { tpl_info } = this.state;
217
+    this.setState({
218
+      data: tpl_info,
219
+    });
220
+  }
221
+
222
+  componentWillUnmount() {
223
+
224
+  }
225
+
226
+  sldHandleCancle = () => {
227
+    this.setState({ modalVisible: false, modalImgVisible: false });
228
+  };
229
+
230
+  sldHandleConfirm = (val) => {
231
+    let { data, addData, cur_part } = this.state;
232
+    if (this.operate_type == 'title_info') {
233
+      //编辑标题
234
+      data[cur_part]['title_info'].title_name = val.title_name;
235
+      for (let i in addData) {
236
+        if (addData[i].name == 'title_color' || addData[i].name == 'title_bg_color') {
237
+          data[cur_part]['title_info'][addData[i].name] = addData[i].initialValue;
238
+        }
239
+      }
240
+    } else if (this.operate_type == 'data') {
241
+      //编辑图片
242
+      data[cur_part].data = val.parent_data;
243
+    }
244
+    this.setState({
245
+      data,
246
+      modalVisible: false,
247
+      modalImgVisible: false,
248
+    }, () => {
249
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
250
+    });
251
+  };
252
+
253
+  //设置颜色  color:选中的颜色值  name:addData里面的name  type:color 修改颜色, is_show 是否显示
254
+  sldHandleColorPicker = (color, name, type) => {
255
+    let { addData } = this.state;
256
+    for (let i in addData) {
257
+      if (addData[i].name == name) {
258
+        if (type == 'is_show') {
259
+          addData[i].is_show = color;
260
+        } else if (type == 'color') {
261
+          addData[i].initialValue = color;
262
+        }
263
+      } else {
264
+        if (addData[i].name == 'empty') {
265
+          if (type == 'is_show' && color) {
266
+            addData[i].height = 300;
267
+          } else if (type == 'is_show' && !color) {
268
+            addData[i].height = 0;
269
+          }
270
+        }
271
+
272
+        if (type == 'is_show') {
273
+          addData[i].is_show = false;
274
+        }
275
+      }
276
+    }
277
+    this.setState({ addData: addData });
278
+  };
279
+
280
+  //编辑板块 part:标示哪一部分,比如left,center   type:标示修改的是标题还是data   modalTitle:弹框的标题  modalTip:弹框的整体提示
281
+  editTpl = (part = '', type, modalTitle = '', modalTip = []) => {
282
+    let { data, modalVisible, addData, cur_data, modalImgVisible } = this.state;
283
+    if (type == 'title_info') {
284
+      for (let i in addData) {
285
+        addData[i].initialValue = data[part]['title_info'][addData[i].name];
286
+      }
287
+      modalVisible = true;
288
+    } else if (type == 'data') {
289
+      cur_data = data[part];
290
+      modalImgVisible = true;
291
+    }
292
+    this.operate_type = type;//当前的修改的内容  title_info/data
293
+    this.setState({
294
+      cur_part: part,
295
+      cur_data,
296
+      modalVisible,
297
+      modalImgVisible,
298
+      modal_tip: modalTip,
299
+      modalTitle: modalTitle,
300
+    });
301
+  };
302
+
303
+
304
+  render() {
305
+    const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip, addData, modalImgVisible } = this.state;
306
+    return (
307
+      <Fragment>
308
+        <div ref={'wrap_html'}>
309
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_09}`}>
310
+            <div className={`${styles.adv_09_wrap}`}>
311
+              {/*左侧--start*/}
312
+              <div className={`${styles.item} ${styles.left}`}>
313
+                <div className={`${styles.top_title}`} style={{
314
+                  backgroundColor: data.left.title_info.title_bg_color ? data.left.title_info.title_bg_color : '#6358d4',
315
+                  color: data.left.title_info.title_color ? data.left.title_info.title_color : '#fff',
316
+                }}>
317
+                  {data.left.title_info.title_name ? data.left.title_info.title_name : `${sldComLanguage('请输入标题')}`}
318
+                  <div className={styles.sld_mask}
319
+                       onClick={() => this.editTpl('left', 'title_info', `${sldComLanguage('左侧标题设置')}`, [`${sldComLanguage('请不要超过5个字')}`])}>
320
+                    <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
321
+                  </div>
322
+                </div>
323
+                <div className={`${styles.main_con}`}>
324
+                  <div className={styles.sld_mask}
325
+                       onClick={() => this.editTpl('left', 'data', `${sldComLanguage('左侧图片设置')}`)}>
326
+                    <span>{sldComLanguage('编辑')}</span>
327
+                  </div>
328
+                  {data.left.data.map((item, index) => (
329
+                    <a key={index}
330
+                       className={`${index % 2 == 0 ? styles.first : null} ${styles.show_tip} ${index > data.left.data.length - 3 ? styles.sld_no_border_bottom : null}`}
331
+                       href="javascript:void(0);">
332
+                      {item.imgUrl
333
+                        ? <img src={item.imgUrl}/>
334
+                        : <span>{sldComLanguage('此处添加【187*123】图片')}</span>
335
+                      }
336
+
337
+                    </a>
338
+                  ))}
339
+                </div>
340
+              </div>
341
+              {/*左侧--end*/}
342
+              {/*中间--start*/}
343
+              <div className={`${styles.item} ${styles.center}`}>
344
+                <div className={`${styles.top_title}`} style={{
345
+                  backgroundColor: data.center.title_info.title_bg_color ? data.center.title_info.title_bg_color : '#e05795',
346
+                  color: data.center.title_info.title_color ? data.center.title_info.title_color : '#fff',
347
+                }}>
348
+                  {data.center.title_info.title_name ? data.center.title_info.title_name : `${sldComLanguage('请输入标题')}`}
349
+                  <div className={styles.sld_mask}
350
+                       onClick={() => this.editTpl('center', 'title_info', `${sldComLanguage('中间标题设置')}`, [`${sldComLanguage('请不要超过5个字')}`])}>{/*中间标题设置*/}
351
+                    <span>{sldComLanguage('编辑')}</span>
352
+                  </div>
353
+                </div>
354
+                <div className={`${styles.main_con}`}>
355
+                  <div className={styles.sld_mask}
356
+                       onClick={() => this.editTpl('center', 'data', `${sldComLanguage('中间图片设置')}`)}>
357
+                    <span>{sldComLanguage('编辑')}</span>
358
+                  </div>
359
+                  {data.center.data.map((item, index) => (
360
+                    <a key={index}
361
+                       className={`${styles.show_tip} ${index == data.center.data.length - 1 ? styles.sld_no_border_bottom : null}`}
362
+                       href="javascript:void(0);">
363
+                      {item.imgUrl
364
+                        ? <img src={item.imgUrl}/>
365
+                        : <span>{sldComLanguage('此处添加【376*123】图片')}</span>
366
+                      }
367
+
368
+                    </a>
369
+                  ))}
370
+                </div>
371
+              </div>
372
+              {/*中间--end*/}
373
+              {/*右侧--start*/}
374
+              <div className={`${styles.item} ${styles.right}`}>
375
+                <div className={`${styles.top_title}`} style={{
376
+                  backgroundColor: data.right.title_info.title_bg_color ? data.right.title_info.title_bg_color : '#47c0ca',
377
+                  color: data.right.title_info.title_color ? data.right.title_info.title_color : '#fff',
378
+                }}>
379
+                  {data.right.title_info.title_name ? data.right.title_info.title_name : `${sldComLanguage('请输入标题')}`}
380
+                  <div className={styles.sld_mask}
381
+                       onClick={() => this.editTpl('right', 'title_info', `${sldComLanguage('右侧标题设置')}`, [`${sldComLanguage('请不要超过5个字')}`])}>{/*右侧标题设置*/}
382
+                    <span>{sldComLanguage('编辑')}</span>
383
+                  </div>
384
+                </div>
385
+                <div className={`${styles.main_con}`}>
386
+                  <div className={styles.sld_mask}
387
+                       onClick={() => this.editTpl('right', 'data', `${sldComLanguage('右侧图片设置')}`)}>
388
+                    <span>{sldComLanguage('编辑')}</span>
389
+                  </div>
390
+                  {data.right.data.map((item, index) => (
391
+                    <a key={index}
392
+                       className={`${index % 3 == 0 ? styles.first : null} ${styles.show_tip}  ${index > data.right.data.length - 4 ? styles.sld_no_border_bottom : null}`}
393
+                       href="javascript:void(0);">
394
+                      {item.imgUrl
395
+                        ? <img src={item.imgUrl}/>
396
+                        : <span>{sldComLanguage('此处添加【124*185】图片')}</span>
397
+                      }
398
+
399
+                    </a>
400
+                  ))}
401
+                </div>
402
+              </div>
403
+              {/*右侧--end*/}
404
+            </div>
405
+          </div>
406
+        </div>
407
+        { /*标题对话框-start*/}
408
+        <SldModal
409
+          title={modalTitle}
410
+          submiting={submiting}
411
+          width={500}
412
+          modalVisible={modalVisible}
413
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
414
+          sldHandleCancle={this.sldHandleCancle}
415
+          formItemLayoutModal={formItemLayoutModal}
416
+          content={addData}
417
+        />
418
+        { /*标题对话框-end*/}
419
+        <SldDiyMoreImgModal
420
+          width={1000}
421
+          title={modalTitle}
422
+          sldSeleSingleRow={true}
423
+          submiting={submiting}
424
+          modalVisible={modalImgVisible}
425
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
426
+          sldHandleCancle={this.sldHandleCancle}
427
+          content={cur_data}
428
+          modal_tip={modal_tip}
429
+          client={'pc'}
430
+        />
431
+      </Fragment>
432
+    );
433
+  }
434
+}

BIN
admin/src/pages/pcdecorate/home/adv_09.png


+ 239 - 0
admin/src/pages/pcdecorate/home/adv_10.js

@@ -0,0 +1,239 @@
1
+/*
2
+* 由三行组成,每行都是由图片布局组成,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  sldComLanguage,
9
+} from '@/utils/utils';
10
+import styles from '../pcdecorate.less';
11
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
12
+
13
+let sthis = '';
14
+let getFieldDecorator_new = '';
15
+@connect(({ product }) => ({
16
+  product,
17
+}))
18
+@Form.create()
19
+export default class Adv_10 extends Component {
20
+  constructor(props) {
21
+    super(props);
22
+    sthis = this;
23
+    const {
24
+      form: { getFieldDecorator },
25
+    } = props;
26
+    getFieldDecorator_new = getFieldDecorator;
27
+    this.state = {
28
+      modalTitle: '',//弹框的标题
29
+      modal_tip: [],//弹框的提示语
30
+      submiting: false,//按钮loading
31
+      modalVisible: false,//是否展示modal
32
+      modalSpuShow: false,//是否展示选择商品modal
33
+      modalSingleImgVisible: false,//单图选择器modal是否显示
34
+      modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
35
+      modalComCatSelectorShow: false,//分类选择modal是否显示
36
+      tpl_info: props.tpl_info,
37
+      data: {
38
+        type: 'adv_10',
39
+        row_one: {
40
+          width: 1210,
41
+          height: 30,//高度为0的话表示不限制
42
+          data: [{
43
+            imgUrl: '',
44
+            imgPath: '',
45
+            title: '',
46
+            link_type: '',
47
+            link_value: '',
48
+            info: {},
49
+          }],
50
+        },
51
+        row_four: {
52
+          width: 295,
53
+          height: 220,//高度为0的话表示不限制
54
+          data: [{
55
+            imgUrl: '',
56
+            imgPath: '',
57
+            title: '',
58
+            link_type: '',
59
+            link_value: '',
60
+            info: {},
61
+          }, {
62
+            imgUrl: '',
63
+            imgPath: '',
64
+            title: '',
65
+            link_type: '',
66
+            link_value: '',
67
+            info: {},
68
+          }, {
69
+            imgUrl: '',
70
+            imgPath: '',
71
+            title: '',
72
+            link_type: '',
73
+            link_value: '',
74
+            info: {},
75
+          }, {
76
+            imgUrl: '',
77
+            imgPath: '',
78
+            title: '',
79
+            link_type: '',
80
+            link_value: '',
81
+            info: {},
82
+          }],
83
+        },
84
+        row_five: {
85
+          width: 234,
86
+          height: 130,//高度为0的话表示不限制
87
+          data: [{
88
+            imgUrl: '',
89
+            imgPath: '',
90
+            title: '',
91
+            link_type: '',
92
+            link_value: '',
93
+            info: {},
94
+          }, {
95
+            imgUrl: '',
96
+            imgPath: '',
97
+            title: '',
98
+            link_type: '',
99
+            link_value: '',
100
+            info: {},
101
+          }, {
102
+            imgUrl: '',
103
+            imgPath: '',
104
+            title: '',
105
+            link_type: '',
106
+            link_value: '',
107
+            info: {},
108
+          }, {
109
+            imgUrl: '',
110
+            imgPath: '',
111
+            title: '',
112
+            link_type: '',
113
+            link_value: '',
114
+            info: {},
115
+          }, {
116
+            imgUrl: '',
117
+            imgPath: '',
118
+            title: '',
119
+            link_type: '',
120
+            link_value: '',
121
+            info: {},
122
+          }],
123
+        },
124
+      },
125
+    };
126
+  }
127
+
128
+
129
+  componentDidMount() {
130
+    let { tpl_info } = this.state;
131
+    this.setState({
132
+      data: tpl_info,
133
+    });
134
+  }
135
+
136
+  componentWillUnmount() {
137
+
138
+  }
139
+
140
+  sldHandleCancle = () => {
141
+    this.setState({ modalVisible: false });
142
+  };
143
+
144
+  sldHandleConfirm = (val) => {
145
+    let { data, cur_part } = this.state;
146
+    data[cur_part].data = val;
147
+    this.setState({
148
+      data,
149
+      modalVisible: false,
150
+    }, () => {
151
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
152
+    });
153
+  };
154
+
155
+  //编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
156
+  editTpl = (part = '', modalTitle = '', modalTip = []) => {
157
+    let { data, modalVisible } = this.state;
158
+    modalVisible = true;
159
+    this.setState({
160
+      cur_part: part,
161
+      cur_data: data[part],
162
+      modalVisible,
163
+      modalTitle,
164
+      modal_tip: modalTip,
165
+    });
166
+  };
167
+
168
+
169
+  render() {
170
+    const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip } = this.state;
171
+    return (
172
+      <Fragment>
173
+        <div ref={'wrap_html'}>
174
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_10}`}>
175
+            <div className={` ${styles.adv_10_wrap}`}>
176
+              <div className={`${styles.row_one}`}>
177
+                <div className={styles.sld_mask}
178
+                     onClick={() => this.editTpl('row_one', `${sldComLanguage('顶部单图设置')}`)}>{/*顶部单图设置*/}
179
+                  <span>{sldComLanguage('编辑')}</span>
180
+                </div>
181
+                {data.row_one.data.map((item, index) => (
182
+                  <a key={index} href="javascript:void(0);">
183
+                    {item.imgUrl
184
+                      ? <img src={item.imgUrl}/>
185
+                      : <span>{sldComLanguage('此处添加【1210*30】图片')}</span>
186
+                    }
187
+                  </a>
188
+                ))}
189
+              </div>
190
+
191
+              <div className={`${styles.row_four}`}>
192
+                <div className={styles.sld_mask}
193
+                     onClick={() => this.editTpl('row_four', `${sldComLanguage('中间4图设置')}`)}>{/*中间4图设置*/}
194
+                  <span>{sldComLanguage('编辑')}</span>
195
+                </div>
196
+                {data.row_four.data.map((item, index) => (
197
+                  <a key={index} href="javascript:void(0);">
198
+                    {item.imgUrl
199
+                      ? <img src={item.imgUrl}/>
200
+                      : <span>{sldComLanguage('此处添加【295*220】图片')}</span>
201
+                    }
202
+                  </a>
203
+                ))}
204
+              </div>
205
+
206
+              <div className={`${styles.row_five}`}>
207
+                <div className={styles.sld_mask}
208
+                     onClick={() => this.editTpl('row_five', `${sldComLanguage('底部5图设置')}`)}>{/*底部5图设置*/}
209
+                  <span>{sldComLanguage('编辑')}</span>
210
+                </div>
211
+                {data.row_five.data.map((item, index) => (
212
+                  <a key={index} href="javascript:void(0);">
213
+                    {item.imgUrl
214
+                      ? <img src={item.imgUrl}/>
215
+                      : <span>{sldComLanguage('此处添加【234*130】图片')}</span>
216
+                    }
217
+                  </a>
218
+                ))}
219
+              </div>
220
+
221
+            </div>
222
+          </div>
223
+        </div>
224
+        <SldDiyMoreImgModal
225
+          width={1000}
226
+          title={modalTitle}
227
+          sldSeleSingleRow={true}
228
+          submiting={submiting}
229
+          modalVisible={modalVisible}
230
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
231
+          sldHandleCancle={this.sldHandleCancle}
232
+          content={cur_data}
233
+          modal_tip={modal_tip}
234
+          client={'pc'}
235
+        />
236
+      </Fragment>
237
+    );
238
+  }
239
+}

BIN
admin/src/pages/pcdecorate/home/adv_10.png


+ 240 - 0
admin/src/pages/pcdecorate/home/adv_11.js

@@ -0,0 +1,240 @@
1
+/*
2
+* 由三列组成,每列都是由图片布局组成,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  sldComLanguage,
9
+} from '@/utils/utils';
10
+import styles from '../pcdecorate.less';
11
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
12
+
13
+let sthis = '';
14
+let getFieldDecorator_new = '';
15
+@connect(({ product }) => ({
16
+  product,
17
+}))
18
+@Form.create()
19
+export default class Adv_11 extends Component {
20
+  constructor(props) {
21
+    super(props);
22
+    sthis = this;
23
+    const {
24
+      form: { getFieldDecorator },
25
+    } = props;
26
+    getFieldDecorator_new = getFieldDecorator;
27
+    this.state = {
28
+      modalTitle: '',//弹框的标题
29
+      modal_tip: [],//弹框的提示语
30
+      submiting: false,//按钮loading
31
+      modalVisible: false,//是否展示modal
32
+      modalSpuShow: false,//是否展示选择商品modal
33
+      modalSingleImgVisible: false,//单图选择器modal是否显示
34
+      modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
35
+      modalComCatSelectorShow: false,//分类选择modal是否显示
36
+      tpl_info: props.tpl_info,
37
+      data: {
38
+        type: 'adv_11',
39
+        row_left: {
40
+          width: 400,
41
+          height: 170,//高度为0的话表示不限制
42
+          data: [{
43
+            imgUrl: '',
44
+            imgPath: '',
45
+            title: '',
46
+            link_type: '',
47
+            link_value: '',
48
+            info: {},
49
+          }, {
50
+            imgUrl: '',
51
+            imgPath: '',
52
+            title: '',
53
+            link_type: '',
54
+            link_value: '',
55
+            info: {},
56
+          }, {
57
+            imgUrl: '',
58
+            imgPath: '',
59
+            title: '',
60
+            link_type: '',
61
+            link_value: '',
62
+            info: {},
63
+          }, {
64
+            imgUrl: '',
65
+            imgPath: '',
66
+            title: '',
67
+            link_type: '',
68
+            link_value: '',
69
+            info: {},
70
+          }, {
71
+            imgUrl: '',
72
+            imgPath: '',
73
+            title: '',
74
+            link_type: '',
75
+            link_value: '',
76
+            info: {},
77
+          }, {
78
+            imgUrl: '',
79
+            imgPath: '',
80
+            title: '',
81
+            link_type: '',
82
+            link_value: '',
83
+            info: {},
84
+          }],
85
+        },
86
+        row_right: {
87
+          top: {
88
+            width: 400,
89
+            height: 350,//高度为0的话表示不限制
90
+            data: [{
91
+              imgUrl: '',
92
+              imgPath: '',
93
+              title: '',
94
+              link_type: '',
95
+              link_value: '',
96
+              info: {},
97
+            }],
98
+          },
99
+          bottom: {
100
+            width: 400,
101
+            height: 170,//高度为0的话表示不限制
102
+            data: [{
103
+              imgUrl: '',
104
+              imgPath: '',
105
+              title: '',
106
+              link_type: '',
107
+              link_value: '',
108
+              info: {},
109
+            }],
110
+          },
111
+        },
112
+      },
113
+    };
114
+  }
115
+
116
+
117
+  componentDidMount() {
118
+    let { tpl_info } = this.state;
119
+    this.setState({
120
+      data: tpl_info,
121
+    });
122
+  }
123
+
124
+  componentWillUnmount() {
125
+
126
+  }
127
+
128
+  sldHandleCancle = () => {
129
+    this.setState({ modalVisible: false });
130
+  };
131
+
132
+  sldHandleConfirm = (val) => {
133
+    let { data, cur_part } = this.state;
134
+    if (this.operate_type) {
135
+      data[cur_part][this.operate_type].data = val;
136
+    } else {
137
+      data[cur_part].data = val;
138
+    }
139
+    this.setState({
140
+      data,
141
+      modalVisible: false,
142
+    }, () => {
143
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
144
+    });
145
+  };
146
+
147
+  //编辑板块 part:标示哪一部分,比如left,center type 位置 top/bottom,主要用于区分右侧数据  modalTitle:弹框的标题  modalTip:弹框的整体提示
148
+  editTpl = (part = '', type, modalTitle = '', modalTip = []) => {
149
+    let { data, modalVisible, cur_data } = this.state;
150
+    if (type) {
151
+      cur_data = data[part][type];
152
+    } else {
153
+      cur_data = data[part];
154
+    }
155
+    modalVisible = true;
156
+    this.operate_type = type;//当前的修改的位置 top/bottom,主要用于区分右侧数据
157
+    this.setState({
158
+      cur_part: part,
159
+      cur_data,
160
+      modalVisible,
161
+      modalTitle,
162
+      modal_tip: modalTip,
163
+    });
164
+  };
165
+
166
+
167
+  render() {
168
+    const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip } = this.state;
169
+    return (
170
+      <Fragment>
171
+        <div ref={'wrap_html'}>
172
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_11}`}>
173
+            <div className={` ${styles.adv_11_wrap}`}>
174
+              <div className={`${styles.item} ${styles.row_left}`}>
175
+                <div className={styles.sld_mask}
176
+                     onClick={() => this.editTpl('row_left', '', `${sldComLanguage('左侧图片设置')}`)}>{/*左侧图片设置*/}
177
+                  <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
178
+                </div>
179
+                {data.row_left.data.map((item, index) => (
180
+                  <a className={`${index % 2 == 1 ? styles.lb_margin : null}`} key={index}
181
+                     href="javascript:void(0);">
182
+                    {item.imgUrl
183
+                      ? <img src={item.imgUrl}/>
184
+                      : <span>{sldComLanguage('此处添加【400*170】图片')}</span>
185
+                    }
186
+                  </a>
187
+                ))}
188
+              </div>
189
+              <div className={`${styles.item} ${styles.row_right}`}>
190
+                <div className={`${styles.top}`}>
191
+                  <div className={styles.sld_mask}
192
+                       onClick={() => this.editTpl('row_right', 'top', `${sldComLanguage('右侧上部图片设置')}`)}>{/*右侧上部图片设置*/}
193
+                    <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
194
+                  </div>
195
+                  {data.row_right.top.data.map((item, index) => (
196
+                    <a className={`${index % 2 == 1 ? styles.lb_margin : null}`} key={index}
197
+                       href="javascript:void(0);">
198
+                      {item.imgUrl
199
+                        ? <img src={item.imgUrl}/>
200
+                        : <span>{sldComLanguage('此处添加【400*350】图片')}</span>
201
+                      }
202
+                    </a>
203
+                  ))}
204
+                </div>
205
+                <div className={`${styles.bottom}`}>
206
+                  <div className={styles.sld_mask}
207
+                       onClick={() => this.editTpl('row_right', 'bottom', `${sldComLanguage('右侧下部图片设置')}`)}>{/*右侧下部图片设置*/}
208
+                    <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
209
+                  </div>
210
+                  {data.row_right.bottom.data.map((item, index) => (
211
+                    <a className={`${index % 2 == 1 ? styles.lb_margin : null}`} key={index}
212
+                       href="javascript:void(0);">
213
+                      {item.imgUrl
214
+                        ? <img src={item.imgUrl}/>
215
+                        : <span>{sldComLanguage('此处添加【400*170】图片')}</span>
216
+                      }
217
+                    </a>
218
+                  ))}
219
+                </div>
220
+
221
+              </div>
222
+            </div>
223
+          </div>
224
+        </div>
225
+        <SldDiyMoreImgModal
226
+          width={1000}
227
+          title={modalTitle}
228
+          sldSeleSingleRow={true}
229
+          submiting={submiting}
230
+          modalVisible={modalVisible}
231
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
232
+          sldHandleCancle={this.sldHandleCancle}
233
+          content={cur_data}
234
+          modal_tip={modal_tip}
235
+          client={'pc'}
236
+        />
237
+      </Fragment>
238
+    );
239
+  }
240
+}

BIN
admin/src/pages/pcdecorate/home/adv_11.png


+ 326 - 0
admin/src/pages/pcdecorate/home/adv_12.js

@@ -0,0 +1,326 @@
1
+/*
2
+* 由三列组成,每列都是由图片布局组成,右侧部分可以添加标题,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldComLanguage,
9
+} from '@/utils/utils';
10
+import styles from '../pcdecorate.less';
11
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
12
+import SldDiyTitleLinkModal from '@/components/SldDiyTitleLinkModal/SldDiyTitleLinkModal';
13
+
14
+let sthis = '';
15
+let getFieldDecorator_new = '';
16
+@connect(({ product }) => ({
17
+	product,
18
+}))
19
+@Form.create()
20
+export default class Adv_12 extends Component {
21
+	constructor(props) {
22
+		super(props);
23
+		sthis = this;
24
+		const {
25
+			form: { getFieldDecorator },
26
+		} = props;
27
+		getFieldDecorator_new = getFieldDecorator;
28
+		this.state = {
29
+			modalTitle: '',//弹框的标题
30
+			modal_tip: [],//弹框的提示语
31
+			submiting: false,//按钮loading
32
+			modalVisible: false,//是否展示modal
33
+			modalSpuShow: false,//是否展示选择商品modal
34
+			modalSingleImgVisible: false,//单图选择器modal是否显示
35
+			modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
36
+			modalComCatSelectorShow: false,//分类选择modal是否显示
37
+			tpl_info: props.tpl_info,
38
+			data: {
39
+				type: 'adv_12',
40
+				left: {
41
+					width: 396,
42
+					height: 450,//高度为0的话表示不限制
43
+					data: [{
44
+						imgUrl: '',
45
+						imgPath: '',
46
+						title: '',
47
+						link_type: '',
48
+						link_value: '',
49
+						info: {},
50
+					}],
51
+				},
52
+				center: {
53
+					width: 183,
54
+					height: 210,//高度为0的话表示不限制
55
+					data: [{
56
+						imgUrl: '',
57
+						imgPath: '',
58
+						title: '',
59
+						link_type: '',
60
+						link_value: '',
61
+						info: {},
62
+					}, {
63
+						imgUrl: '',
64
+						imgPath: '',
65
+						title: '',
66
+						link_type: '',
67
+						link_value: '',
68
+						info: {},
69
+					}, {
70
+						imgUrl: '',
71
+						imgPath: '',
72
+						title: '',
73
+						link_type: '',
74
+						link_value: '',
75
+						info: {},
76
+					}, {
77
+						imgUrl: '',
78
+						imgPath: '',
79
+						title: '',
80
+						link_type: '',
81
+						link_value: '',
82
+						info: {},
83
+					}],
84
+				},
85
+				right: {
86
+					title_info: {
87
+						title: {
88
+							label: `标题`,//标题
89
+							name: 'title',
90
+							initialValue: `清仓打折`,//清仓打折
91
+							required: true,
92
+						},//标题名称
93
+						sub_title: {
94
+							label: `子标题`,//子标题
95
+							name: 'sub_title',
96
+							initialValue: `清仓打折`,//清仓打折
97
+							required: false,
98
+						},//子标题名称
99
+						link_type: '',
100
+						link_value: '',
101
+						info: {},
102
+					},
103
+					top: {
104
+						width: 376,
105
+						height: 180,//高度为0的话表示不限制
106
+						data: [{
107
+							imgUrl: '',
108
+							imgPath: '',
109
+							title: '',
110
+							link_type: '',
111
+							link_value: '',
112
+							info: {},
113
+						}],
114
+					},
115
+					bottom: {
116
+						width: 183,
117
+						height: 180,//高度为0的话表示不限制
118
+						data: [{
119
+							imgUrl: '',
120
+							imgPath: '',
121
+							title: '',
122
+							link_type: '',
123
+							link_value: '',
124
+							info: {},
125
+						}, {
126
+							imgUrl: '',
127
+							imgPath: '',
128
+							title: '',
129
+							link_type: '',
130
+							link_value: '',
131
+							info: {},
132
+						}],
133
+					},
134
+
135
+				},
136
+			},
137
+		};
138
+	}
139
+
140
+
141
+	componentDidMount() {
142
+		let { tpl_info } = this.state;
143
+		this.setState({
144
+			data: tpl_info,
145
+		});
146
+	}
147
+
148
+	componentWillUnmount() {
149
+
150
+	}
151
+
152
+	sldHandleCancle = () => {
153
+		this.setState({ modalVisible: false,modalSldDiyTitleLinkVisible: false });
154
+	};
155
+
156
+	sldHandleConfirm = (val) => {
157
+		let { data, cur_part } = this.state;
158
+		if(cur_part == 'right_top'){
159
+			data['right']['top'].data = val;
160
+		}else if(cur_part == 'right_bottom'){
161
+			data['right']['bottom'].data = val;
162
+		}else if(cur_part == 'right_title'){
163
+			for (let i in val) {
164
+				if (i == 'title') {
165
+					data['right']['title_info'].title.initialValue = val.title;
166
+				} else if (i == 'sub_title') {
167
+					data['right']['title_info'].sub_title.initialValue = val.sub_title;
168
+				} else if (i == 'link_type') {
169
+					data['right']['title_info'].link_type = val.link_type;
170
+					data['right']['title_info'].link_value = val.link_value;
171
+					data['right']['title_info'].info = val.info != undefined ? val.info : {};
172
+				}
173
+			}
174
+		}else{
175
+			data[cur_part].data = val;
176
+		}
177
+		this.setState({
178
+			data,
179
+			modalVisible: false,
180
+		}, () => {
181
+			this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
182
+		});
183
+	};
184
+
185
+	//编辑板块 part:标示哪一部分,比如left,center  modalTitle:弹框的标题  modalTip:弹框的整体提示
186
+	editTpl = (part = '', modalTitle = '', modalTip = []) => {
187
+		let { data, modalVisible, cur_data,modalSldDiyTitleLinkVisible } = this.state;
188
+		if(part == 'right_top'){
189
+			cur_data = data['right']['top'];
190
+			modalVisible = true;
191
+		}else if(part == 'right_bottom'){
192
+			cur_data = data['right']['bottom'];
193
+			modalVisible = true;
194
+		}else if(part == 'right_title'){
195
+			//编辑标题
196
+			cur_data = data['right']['title_info'];
197
+			modalSldDiyTitleLinkVisible = true;
198
+		}else{
199
+			cur_data = data[part];
200
+			modalVisible = true;
201
+		}
202
+		this.setState({
203
+			cur_part: part,
204
+			cur_data,
205
+			modalVisible,
206
+			modalSldDiyTitleLinkVisible,
207
+			modalTitle,
208
+			modal_tip: modalTip,
209
+		});
210
+	};
211
+
212
+
213
+	render() {
214
+		const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip,modalSldDiyTitleLinkVisible } = this.state;
215
+		return (
216
+				<Fragment>
217
+					<div ref={'wrap_html'}>
218
+						<div className={`${styles.w_sld_react_1210} ${styles.adv_12}`}>
219
+							<div className={` ${styles.adv_12_wrap}`}>
220
+								<div className={`${styles.item} ${styles.left} ${styles.clear_padding}`}>
221
+									<div className={styles.sld_mask}
222
+										 onClick={() => this.editTpl('left', `${sldComLanguage('左侧图片设置')}`)}>
223
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
224
+									</div>
225
+									{data.left.data.map((item,index) => (
226
+										<a key={index} className={`${styles.l_img}`}
227
+										   href="javascript:void(0);">
228
+											{item.imgUrl
229
+												? <img src={item.imgUrl}/>
230
+												: <span>{sldComLanguage('此处添加【396*450】图片')}</span>
231
+											}
232
+										</a>
233
+									))}
234
+								</div>
235
+								<div className={`${styles.item} ${styles.center}`}>
236
+									<div className={styles.sld_mask}
237
+										 onClick={() => this.editTpl('center',`${sldComLanguage('中间图片设置')}`)}>
238
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
239
+									</div>
240
+									{data.center.data.map((item, index) => (
241
+										<a key={index}
242
+										   className={`${index % 2 == 1 ? styles.l_b_margin : null}`}
243
+										   href="javascript:void(0);">
244
+											{item.imgUrl
245
+												? <img src={item.imgUrl}/>
246
+												: <span>{sldComLanguage('此处添加【183*210】图片')}</span>
247
+											}
248
+										</a>
249
+									))}
250
+								</div>
251
+
252
+
253
+								<div className={`${styles.item} ${styles.right}`}>
254
+									<div className={`${styles.title_wrap}`}>
255
+										<div className={styles.sld_mask}
256
+											 onClick={() => this.editTpl('right_title', `${sldComLanguage('右侧标题设置')}`,[`${sldComLanguage('标题不能为空,最多输入5个字')}`,`${sldComLanguage('子标题不能为空,最多输入10个字')}`])}>{/*右侧标题设置*/}
257
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
258
+										</div>
259
+										<a className={`${styles.title}`}
260
+										   href="javascript:void(0);">{data.right.title_info.title.initialValue ? data.right.title_info.title.initialValue : `${sldComLanguage('添加标题')}`}</a>
261
+										<span>》</span>
262
+										<a className={`${styles.subtitle}`}>{data.right.title_info.title.initialValue ? data.right.title_info.sub_title.initialValue : `${sldComLanguage('添加子标题')}`}</a>
263
+									</div>
264
+									<div className={`${styles.img_top}`}>
265
+										<div className={styles.sld_mask}
266
+											 onClick={() => this.editTpl('right_top', `${sldComLanguage('右侧上部图片设置')}`)}>
267
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
268
+										</div>
269
+										{data.right.top.data.map((item, index) => (
270
+											<a key={index} href="javascript:void(0);">
271
+												{item.imgUrl
272
+													? <img src={item.imgUrl}/>
273
+													: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
274
+												}
275
+											</a>
276
+										))}
277
+									</div>
278
+									<div className={`${styles.img_bottom}`}>
279
+										<div className={styles.sld_mask}
280
+											 onClick={() => this.editTpl('right_bottom',`${sldComLanguage('右侧下部图片设置')}`)}>
281
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
282
+										</div>
283
+										{data.right.bottom.data.map((item, index) => (
284
+											<a key={index} href="javascript:void(0);">
285
+												{item.imgUrl
286
+													? <img src={item.imgUrl}/>
287
+													: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
288
+												}
289
+											</a>
290
+										))}
291
+									</div>
292
+								</div>
293
+
294
+							</div>
295
+						</div>
296
+					</div>
297
+					<SldDiyMoreImgModal
298
+						width={1000}
299
+						title={modalTitle}
300
+						sldSeleSingleRow={true}
301
+						submiting={submiting}
302
+						modalVisible={modalVisible}
303
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
304
+						sldHandleCancle={this.sldHandleCancle}
305
+						content={cur_data}
306
+						modal_tip={modal_tip}
307
+            client={'pc'}
308
+					/>
309
+					{/*标题+链接设置*/}
310
+					<SldDiyTitleLinkModal
311
+						width={1000}
312
+						title={modalTitle}
313
+						sldSeleSingleRow={true}
314
+						submiting={submiting}
315
+						modalVisible={modalSldDiyTitleLinkVisible}
316
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
317
+						sldHandleCancle={this.sldHandleCancle}
318
+						content={cur_data}
319
+						modal_tip={modal_tip}
320
+            client={'pc'}
321
+					/>
322
+					{/*标题+链接设置*/}
323
+				</Fragment>
324
+		);
325
+	}
326
+}

BIN
admin/src/pages/pcdecorate/home/adv_12.png


+ 365 - 0
admin/src/pages/pcdecorate/home/adv_13.js

@@ -0,0 +1,365 @@
1
+/*
2
+* 由三列组成,每列都是由图片布局组成,右侧部分可以添加标题,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldComLanguage,
9
+} from '@/utils/utils';
10
+import global from '../../../global.less';
11
+import styles from '../pcdecorate.less';
12
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
13
+import SldDiyTitleLinkModal from '@/components/SldDiyTitleLinkModal/SldDiyTitleLinkModal';
14
+
15
+let sthis = '';
16
+let getFieldDecorator_new = '';
17
+@connect(({ product }) => ({
18
+	product,
19
+}))
20
+@Form.create()
21
+export default class Adv_13 extends Component {
22
+	constructor(props) {
23
+		super(props);
24
+		sthis = this;
25
+		const {
26
+			form: { getFieldDecorator },
27
+		} = props;
28
+		getFieldDecorator_new = getFieldDecorator;
29
+		this.state = {
30
+			modalTitle: '',//弹框的标题
31
+			modal_tip: [],//弹框的提示语
32
+			submiting: false,//按钮loading
33
+			modalVisible: false,//是否展示modal
34
+			modalSpuShow: false,//是否展示选择商品modal
35
+			modalSingleImgVisible: false,//单图选择器modal是否显示
36
+			modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
37
+			modalComCatSelectorShow: false,//分类选择modal是否显示
38
+			tpl_info: props.tpl_info,
39
+			data: {
40
+				type: 'adv_13',
41
+				left: {
42
+					title_info: {
43
+						title: {
44
+							label: `${sldComLanguage('标题')}`,
45
+							name: 'title',
46
+							initialValue: `${sldComLanguage('清仓打折')}`,
47
+							required: true,
48
+						},//标题名称
49
+						sub_title: {
50
+							label: `${sldComLanguage('子标题')}`,
51
+							name: 'sub_title',
52
+							initialValue: `${sldComLanguage('清仓打折')}`,
53
+							required: false,
54
+						},//子标题名称
55
+						link_type: '',
56
+						link_value: '',
57
+						info: {},
58
+					},
59
+					top: {
60
+						width: 376,
61
+						height: 180,//高度为0的话表示不限制
62
+						data: [{
63
+							imgUrl: '',
64
+							imgPath: '',
65
+							title: '',
66
+							link_type: '',
67
+							link_value: '',
68
+							info: {},
69
+						}],
70
+					},
71
+					bottom: {
72
+						width: 183,
73
+						height: 180,//高度为0的话表示不限制
74
+						data: [{
75
+							imgUrl: '',
76
+							imgPath: '',
77
+							title: '',
78
+							link_type: '',
79
+							link_value: '',
80
+							info: {},
81
+						}, {
82
+							imgUrl: '',
83
+							imgPath: '',
84
+							title: '',
85
+							link_type: '',
86
+							link_value: '',
87
+							info: {},
88
+						}],
89
+					},
90
+
91
+				},
92
+				center: {
93
+					title_info: {
94
+						title: {
95
+							label: `${sldComLanguage('标题')}`,
96
+							name: 'title',
97
+							initialValue: `${sldComLanguage('清仓打折')}`,
98
+							required: true,
99
+						},//标题名称
100
+						sub_title: {
101
+							label: `${sldComLanguage('子标题')}`,
102
+							name: 'sub_title',
103
+							initialValue: `${sldComLanguage('清仓打折')}`,
104
+							required: false,
105
+						},//子标题名称
106
+						link_type: '',
107
+						link_value: '',
108
+						info: {},
109
+					},
110
+					top: {
111
+						width: 376,
112
+						height: 180,//高度为0的话表示不限制
113
+						data: [{
114
+							imgUrl: '',
115
+							imgPath: '',
116
+							title: '',
117
+							link_type: '',
118
+							link_value: '',
119
+							info: {},
120
+						}],
121
+					},
122
+					bottom: {
123
+						width: 183,
124
+						height: 180,//高度为0的话表示不限制
125
+						data: [{
126
+							imgUrl: '',
127
+							imgPath: '',
128
+							title: '',
129
+							link_type: '',
130
+							link_value: '',
131
+							info: {},
132
+						}, {
133
+							imgUrl: '',
134
+							imgPath: '',
135
+							title: '',
136
+							link_type: '',
137
+							link_value: '',
138
+							info: {},
139
+						}],
140
+					},
141
+
142
+				},
143
+				right: {
144
+					width: 396,
145
+					height: 450,//高度为0的话表示不限制
146
+					data: [{
147
+						imgUrl: '',
148
+						imgPath: '',
149
+						title: '',
150
+						link_type: '',
151
+						link_value: '',
152
+						info: {},
153
+					}],
154
+				},
155
+			},
156
+		};
157
+	}
158
+
159
+
160
+	componentDidMount() {
161
+		let { tpl_info } = this.state;
162
+		this.setState({
163
+			data: tpl_info,
164
+		});
165
+	}
166
+
167
+	componentWillUnmount() {
168
+
169
+	}
170
+
171
+	sldHandleCancle = () => {
172
+		this.setState({ modalVisible: false,modalSldDiyTitleLinkVisible: false });
173
+	};
174
+
175
+	sldHandleConfirm = (val) => {
176
+		let { data, cur_part } = this.state;
177
+		if(cur_part == 'right'&&this.operate_type == ''){
178
+			data[cur_part].data = val;
179
+		}else{
180
+			if(this.operate_type == 'title_info'){
181
+				for (let i in val) {
182
+					if (i == 'title') {
183
+						data[cur_part][this.operate_type].title.initialValue = val.title;
184
+					} else if (i == 'sub_title') {
185
+						data[cur_part][this.operate_type].sub_title.initialValue = val.sub_title;
186
+					} else if (i == 'link_type') {
187
+						data[cur_part][this.operate_type].link_type = val.link_type;
188
+						data[cur_part][this.operate_type].link_value = val.link_value;
189
+						data[cur_part][this.operate_type].info = val.info != undefined ? val.info : {};
190
+					}
191
+				}
192
+			}else{
193
+				data[cur_part][this.operate_type].data = val;
194
+			}
195
+
196
+		}
197
+		this.setState({
198
+			data,
199
+			modalVisible: false,
200
+		}, () => {
201
+			this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
202
+		});
203
+	};
204
+
205
+	//编辑板块 part:标示哪一部分,比如left,center type:某一模块下的具体部分  modalTitle:弹框的标题  modalTip:弹框的整体提示
206
+	editTpl = (part = '',type='', modalTitle = '', modalTip = []) => {
207
+		let { data, modalVisible, cur_data,modalSldDiyTitleLinkVisible } = this.state;
208
+		if(part == 'right'&&type == ''){
209
+			cur_data = data[part];
210
+			modalVisible = true;
211
+		}else{
212
+			cur_data = data[part][type];
213
+			if(type == 'title_info'){
214
+				modalSldDiyTitleLinkVisible = true;
215
+			}else{
216
+				modalVisible = true;
217
+			}
218
+
219
+		}
220
+		this.operate_type = type;//当前模块下的具体部分
221
+		this.setState({
222
+			cur_part: part,
223
+			cur_data,
224
+			modalVisible,
225
+			modalSldDiyTitleLinkVisible,
226
+			modalTitle,
227
+			modal_tip: modalTip,
228
+		});
229
+	};
230
+
231
+
232
+	render() {
233
+		const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip,modalSldDiyTitleLinkVisible } = this.state;
234
+		return (
235
+				<Fragment>
236
+					<div ref={'wrap_html'}>
237
+						<div className={`${styles.w_sld_react_1210} ${styles.adv_13}`}>
238
+							<div className={` ${styles.adv_13_wrap}`}>
239
+								<div className={`${styles.item} ${styles.right}`}>
240
+									<div className={`${styles.title_wrap}`}>
241
+										<div className={styles.sld_mask}
242
+											 onClick={() => this.editTpl('left', 'title_info',`${sldComLanguage('左侧标题设置')}`,[`${sldComLanguage('标题不能为空,最多输入5个字,子标题不能为空,最多输入10个字')}`])}>{/*左侧标题设置*/}
243
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
244
+										</div>
245
+										<a className={`${styles.title}`}
246
+										   href="javascript:void(0);">{data.left.title_info.title.initialValue ? data.left.title_info.title.initialValue : `${sldComLanguage('添加标题')}`}</a>
247
+										<span>》</span>
248
+										<a className={`${styles.subtitle}`}>{data.left.title_info.title.initialValue ? data.left.title_info.sub_title.initialValue : `${sldComLanguage('添加子标题')}`}</a>
249
+									</div>
250
+									<div className={`${styles.img_top}`}>
251
+										<div className={styles.sld_mask}
252
+											 onClick={() => this.editTpl('left','top', `${sldComLanguage('左侧上部图片设置')}`)}>
253
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
254
+										</div>
255
+										{data.left.top.data.map((item, index) => (
256
+											<a key={index} href="javascript:void(0);">
257
+												{item.imgUrl
258
+													? <img src={item.imgUrl}/>
259
+													: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
260
+												}
261
+											</a>
262
+										))}
263
+									</div>
264
+									<div className={`${styles.img_bottom}`}>
265
+										<div className={styles.sld_mask}
266
+											 onClick={() => this.editTpl('left','bottom',`${sldComLanguage('左侧下部图片设置')}`)}>
267
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
268
+										</div>
269
+										{data.left.bottom.data.map((item, index) => (
270
+											<a key={index} href="javascript:void(0);">
271
+												{item.imgUrl
272
+													? <img src={item.imgUrl}/>
273
+													: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
274
+												}
275
+											</a>
276
+										))}
277
+									</div>
278
+								</div>
279
+								<div className={`${styles.item} ${styles.right}`}>
280
+									<div className={`${styles.title_wrap}`}>
281
+										<div className={styles.sld_mask}
282
+											 onClick={() => this.editTpl('center','title_info', `${sldComLanguage('中间标题设置')}`,[`${sldComLanguage('标题不能为空,最多输入5个字,子标题不能为空,最多输入10个字')}`])}>{/*中间标题设置*/}
283
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
284
+										</div>
285
+										<a className={`${styles.title}`}
286
+										   href="javascript:void(0);">{data.center.title_info.title.initialValue ? data.center.title_info.title.initialValue : `${sldComLanguage('添加标题')}`}</a>
287
+										<span>》</span>
288
+										<a className={`${styles.subtitle}`}>{data.center.title_info.title.initialValue ? data.center.title_info.sub_title.initialValue : `${sldComLanguage('添加子标题')}`}</a>
289
+									</div>
290
+									<div className={`${styles.img_top}`}>
291
+										<div className={styles.sld_mask}
292
+											 onClick={() => this.editTpl('center','top', `${sldComLanguage('中间上部图片设置')}`)}>{/*中间上部图片设置*/}
293
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
294
+										</div>
295
+										{data.center.top.data.map((item, index) => (
296
+											<a key={index} href="javascript:void(0);">
297
+												{item.imgUrl
298
+													? <img src={item.imgUrl}/>
299
+													: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
300
+												}
301
+											</a>
302
+										))}
303
+									</div>
304
+									<div className={`${styles.img_bottom}`}>
305
+										<div className={styles.sld_mask}
306
+											 onClick={() => this.editTpl('center','bottom',`${sldComLanguage('中间下部图片设置')}`)}>{/*中间下部图片设置*/}
307
+											<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
308
+										</div>
309
+										{data.center.bottom.data.map((item, index) => (
310
+											<a key={index} href="javascript:void(0);">
311
+												{item.imgUrl
312
+													? <img src={item.imgUrl}/>
313
+													: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
314
+												}
315
+											</a>
316
+										))}
317
+									</div>
318
+								</div>
319
+								<div className={`${styles.item} ${styles.left} ${styles.clear_padding}`}>
320
+									<div className={styles.sld_mask}
321
+										 onClick={() => this.editTpl('right','', `${sldComLanguage('右侧图片设置')}`)}>{/*右侧图片设置*/}
322
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
323
+									</div>
324
+									{data.right.data.map((item,index) => (
325
+										<a key={index} className={`${styles.l_img}`}
326
+										   href="javascript:void(0);">
327
+											{item.imgUrl
328
+												? <img src={item.imgUrl}/>
329
+												: <span>{sldComLanguage('此处添加【396*450】图片')}</span>
330
+											}
331
+										</a>
332
+									))}
333
+								</div>
334
+							</div>
335
+						</div>
336
+					</div>
337
+					<SldDiyMoreImgModal
338
+						width={1000}
339
+						title={modalTitle}
340
+						sldSeleSingleRow={true}
341
+						submiting={submiting}
342
+						modalVisible={modalVisible}
343
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
344
+						sldHandleCancle={this.sldHandleCancle}
345
+						content={cur_data}
346
+						modal_tip={modal_tip}
347
+            client={'pc'}
348
+					/>
349
+					{/*标题+链接设置*/}
350
+					<SldDiyTitleLinkModal
351
+						width={1000}
352
+						title={modalTitle}
353
+						sldSeleSingleRow={true}
354
+						submiting={submiting}
355
+						modalVisible={modalSldDiyTitleLinkVisible}
356
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
357
+						sldHandleCancle={this.sldHandleCancle}
358
+						content={cur_data}
359
+						modal_tip={modal_tip}
360
+					/>
361
+					{/*标题+链接设置*/}
362
+				</Fragment>
363
+		);
364
+	}
365
+}

BIN
admin/src/pages/pcdecorate/home/adv_13.png


+ 369 - 0
admin/src/pages/pcdecorate/home/adv_14.js

@@ -0,0 +1,369 @@
1
+/*
2
+* 商品楼层,左侧图片+分类,右侧商品,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldComLanguage,
9
+} from '@/utils/utils';
10
+import global from '../../../global.less';
11
+import styles from '../pcdecorate.less';
12
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
13
+import SldDiyTitleLinkModal from '@/components/SldDiyTitleLinkModal/SldDiyTitleLinkModal';
14
+
15
+let sthis = '';
16
+let getFieldDecorator_new = '';
17
+@connect(({ product }) => ({
18
+	product,
19
+}))
20
+@Form.create()
21
+export default class Adv_14 extends Component {
22
+	constructor(props) {
23
+		super(props);
24
+		sthis = this;
25
+		const {
26
+			form: { getFieldDecorator },
27
+		} = props;
28
+		getFieldDecorator_new = getFieldDecorator;
29
+		this.state = {
30
+			modalTitle: '',//弹框的标题
31
+			modal_tip: [],//弹框的提示语
32
+			submiting: false,//按钮loading
33
+			modalVisible: false,//是否展示modal
34
+			modalSpuShow: false,//是否展示选择商品modal
35
+			modalSingleImgVisible: false,//单图选择器modal是否显示
36
+			modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
37
+			modalComCatSelectorShow: false,//分类选择modal是否显示
38
+			tpl_info: props.tpl_info,
39
+			data: {
40
+				type: 'adv_14',
41
+				left: {
42
+					title_info: {
43
+						title: {
44
+							label: `${sldComLanguage('标题')}`,
45
+							name: 'title',
46
+							initialValue: `${sldComLanguage('清仓打折')}`,
47
+							required: true,
48
+						},//标题名称
49
+						sub_title: {
50
+							label: `${sldComLanguage('子标题')}`,
51
+							name: 'sub_title',
52
+							initialValue: `${sldComLanguage('清仓打折')}`,
53
+							required: false,
54
+						},//子标题名称
55
+						link_type: '',
56
+						link_value: '',
57
+						info: {},
58
+					},
59
+					top: {
60
+						width: 376,
61
+						height: 180,//高度为0的话表示不限制
62
+						data: [{
63
+							imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
64
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
65
+							title: '',
66
+							link_type: '',
67
+							link_value: '',
68
+							info: {},
69
+						}],
70
+					},
71
+					bottom: {
72
+						width: 183,
73
+						height: 180,//高度为0的话表示不限制
74
+						data: [{
75
+							imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
76
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
77
+							title: '',
78
+							link_type: '',
79
+							link_value: '',
80
+							info: {},
81
+						}, {
82
+							imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
83
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
84
+							title: '',
85
+							link_type: '',
86
+							link_value: '',
87
+							info: {},
88
+						}],
89
+					},
90
+
91
+				},
92
+				center: {
93
+					title_info: {
94
+						title: {
95
+							label: `${sldComLanguage('标题')}`,//标题
96
+							name: 'title',
97
+							initialValue: `${sldComLanguage('清仓打折')}`,//清仓打折
98
+							required: true,
99
+						},//标题名称
100
+						sub_title: {
101
+							label: `${sldComLanguage('子标题')}`,//子标题
102
+							name: 'sub_title',
103
+							initialValue: `${sldComLanguage('清仓打折')}`,//清仓打折
104
+							required: false,
105
+						},//子标题名称
106
+						link_type: '',
107
+						link_value: '',
108
+						info: {},
109
+					},
110
+					top: {
111
+						width: 376,
112
+						height: 180,//高度为0的话表示不限制
113
+						data: [{
114
+							imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
115
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
116
+							title: '',
117
+							link_type: '',
118
+							link_value: '',
119
+							info: {},
120
+						}],
121
+					},
122
+					bottom: {
123
+						width: 183,
124
+						height: 180,//高度为0的话表示不限制
125
+						data: [{
126
+							imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
127
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
128
+							title: '',
129
+							link_type: '',
130
+							link_value: '',
131
+							info: {},
132
+						}, {
133
+							imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
134
+							imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
135
+							title: '',
136
+							link_type: '',
137
+							link_value: '',
138
+							info: {},
139
+						}],
140
+					},
141
+
142
+				},
143
+				right: {
144
+					width: 396,
145
+					height: 450,//高度为0的话表示不限制
146
+					data: [{
147
+						imgUrl: 'http://img.slodon.cn/data/upload/fixture/06105719695849326.png',
148
+						imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
149
+						title: '',
150
+						link_type: '',
151
+						link_value: '',
152
+						info: {},
153
+					}],
154
+				},
155
+			},
156
+		};
157
+	}
158
+
159
+
160
+	componentDidMount() {
161
+		// let { tpl_info } = this.state;
162
+		// this.setState({
163
+		// 	data: tpl_info,
164
+		// });
165
+	}
166
+
167
+	componentWillUnmount() {
168
+
169
+	}
170
+
171
+	sldHandleCancle = () => {
172
+		this.setState({ modalVisible: false,modalSldDiyTitleLinkVisible: false });
173
+	};
174
+
175
+	sldHandleConfirm = (val) => {
176
+		let { data, cur_part } = this.state;
177
+		if(cur_part == 'right'&&this.operate_type == ''){
178
+			data[cur_part].data = val;
179
+		}else{
180
+			if(this.operate_type == 'title_info'){
181
+				for (let i in val) {
182
+					if (i == 'title') {
183
+						data[cur_part][this.operate_type].title.initialValue = val.title;
184
+					} else if (i == 'sub_title') {
185
+						data[cur_part][this.operate_type].sub_title.initialValue = val.sub_title;
186
+					} else if (i == 'link_type') {
187
+						data[cur_part][this.operate_type].link_type = val.link_type;
188
+						data[cur_part][this.operate_type].link_value = val.link_value;
189
+						data[cur_part][this.operate_type].info = val.info != undefined ? val.info : {};
190
+					}
191
+				}
192
+			}else{
193
+				data[cur_part][this.operate_type].data = val;
194
+			}
195
+
196
+		}
197
+		this.setState({
198
+			data,
199
+			modalVisible: false,
200
+		}, () => {
201
+			// this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
202
+		});
203
+	};
204
+
205
+	//编辑板块 part:标示哪一部分,比如left,center type:某一模块下的具体部分  modalTitle:弹框的标题  modalTip:弹框的整体提示
206
+	editTpl = (part = '',type='', modalTitle = '', modalTip = []) => {
207
+		let { data, modalVisible, cur_data,modalSldDiyTitleLinkVisible } = this.state;
208
+		if(part == 'right'&&type == ''){
209
+			cur_data = data[part];
210
+			modalVisible = true;
211
+		}else{
212
+			cur_data = data[part][type];
213
+			if(type == 'title_info'){
214
+				modalSldDiyTitleLinkVisible = true;
215
+			}else{
216
+				modalVisible = true;
217
+			}
218
+
219
+		}
220
+		this.operate_type = type;//当前模块下的具体部分
221
+		this.setState({
222
+			cur_part: part,
223
+			cur_data,
224
+			modalVisible,
225
+			modalSldDiyTitleLinkVisible,
226
+			modalTitle,
227
+			modal_tip: modalTip,
228
+		});
229
+	};
230
+
231
+
232
+	render() {
233
+		const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip,modalSldDiyTitleLinkVisible } = this.state;
234
+		return (
235
+			<Fragment>
236
+				<div ref={'wrap_html'}>
237
+					<div className={`${styles.w_sld_react_1210} ${styles.adv_14}`}>
238
+						<div className={` ${styles.adv_14_wrap}`}>
239
+							<div className={`${styles.item} ${styles.right}`}>
240
+								<div className={`${styles.title_wrap}`}>
241
+									<div className={styles.sld_mask}
242
+										 onClick={() => this.editTpl('left', 'title_info',`${sldComLanguage('左侧标题设置')}`,[`${sldComLanguage('标题不能为空,最多输入5个字,子标题不能为空,最多输入10个字')}`])}>{/*左侧标题设置*/}
243
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
244
+									</div>
245
+									<a className={`${styles.title}`}
246
+									   href="javascript:void(0);">{data.left.title_info.title.initialValue ? data.left.title_info.title.initialValue : `${sldComLanguage('添加标题')}`}</a>
247
+									<span>》</span>
248
+									<a className={`${styles.subtitle}`}>{data.left.title_info.title.initialValue ? data.left.title_info.sub_title.initialValue : `${sldComLanguage('添加子标题')}`}</a>
249
+								</div>
250
+								<div className={`${styles.img_top}`}>
251
+									<div className={styles.sld_mask}
252
+										 onClick={() => this.editTpl('left','top', `${sldComLanguage('左侧上部图片设置')}`)}>
253
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
254
+									</div>
255
+									{data.left.top.data.map((item, index) => (
256
+										<a key={index} href="javascript:void(0);">
257
+											{item.imgUrl
258
+												? <img src={item.imgUrl}/>
259
+												: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
260
+											}
261
+										</a>
262
+									))}
263
+								</div>
264
+								<div className={`${styles.img_bottom}`}>
265
+									<div className={styles.sld_mask}
266
+										 onClick={() => this.editTpl('left','bottom',`${sldComLanguage('左侧下部图片设置')}`)}>{/*左侧上部图片设置*/}
267
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
268
+									</div>
269
+									{data.left.bottom.data.map((item, index) => (
270
+										<a key={index} href="javascript:void(0);">
271
+											{item.imgUrl
272
+												? <img src={item.imgUrl}/>
273
+												: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
274
+											}
275
+										</a>
276
+									))}
277
+								</div>
278
+							</div>
279
+							<div className={`${styles.item} ${styles.right}`}>
280
+								<div className={`${styles.title_wrap}`}>
281
+									<div className={styles.sld_mask}
282
+										 onClick={() => this.editTpl('center','title_info', `${sldComLanguage('中间标题设置')}`,[`${sldComLanguage('标题不能为空,最多输入5个字,子标题不能为空,最多输入10个字')}`])}>{/*中间标题设置*/}
283
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
284
+									</div>
285
+									<a className={`${styles.title}`}
286
+									   href="javascript:void(0);">{data.center.title_info.title.initialValue ? data.center.title_info.title.initialValue : `${sldComLanguage('添加标题')}`}</a>
287
+									<span>》</span>
288
+									<a className={`${styles.subtitle}`}>{data.center.title_info.title.initialValue ? data.center.title_info.sub_title.initialValue : `${sldComLanguage('添加子标题')}`}</a>
289
+								</div>
290
+								<div className={`${styles.img_top}`}>
291
+									<div className={styles.sld_mask}
292
+										 onClick={() => this.editTpl('center','top', `${sldComLanguage('中间上部图片设置')}`)}>{/*中间上部图片设置*/}
293
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
294
+									</div>
295
+									{data.center.top.data.map((item, index) => (
296
+										<a key={index} href="javascript:void(0);">
297
+											{item.imgUrl
298
+												? <img src={item.imgUrl}/>
299
+												: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
300
+											}
301
+										</a>
302
+									))}
303
+								</div>
304
+								<div className={`${styles.img_bottom}`}>
305
+									<div className={styles.sld_mask}
306
+										 onClick={() => this.editTpl('center','bottom',`${sldComLanguage('中间下部图片设置')}`)}>
307
+										<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
308
+									</div>
309
+									{data.center.bottom.data.map((item, index) => (
310
+										<a key={index} href="javascript:void(0);">
311
+											{item.imgUrl
312
+												? <img src={item.imgUrl}/>
313
+												: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
314
+											}
315
+										</a>
316
+									))}
317
+								</div>
318
+							</div>
319
+							<div className={`${styles.item} ${styles.left} ${styles.clear_padding}`}>
320
+								<div className={styles.sld_mask}
321
+									 onClick={() => this.editTpl('right','', `${sldComLanguage('右侧图片设置')}`)}>{/*右侧图片设置*/}
322
+									<span>{sldComLanguage('编辑')}</span>{/*编辑*/}
323
+								</div>
324
+								{data.right.data.map((item,index) => (
325
+									<a key={index} className={`${styles.l_img}`}
326
+									   href="javascript:void(0);">
327
+										{item.imgUrl
328
+											? <img src={item.imgUrl}/>
329
+											: <span>{sldComLanguage('此处添加【396*450】图片')}</span>
330
+										}
331
+									</a>
332
+								))}
333
+							</div>
334
+
335
+
336
+
337
+
338
+
339
+						</div>
340
+					</div>
341
+				</div>
342
+				<SldDiyMoreImgModal
343
+					width={1000}
344
+					title={modalTitle}
345
+					sldSeleSingleRow={true}
346
+					submiting={submiting}
347
+					modalVisible={modalVisible}
348
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
349
+					sldHandleCancle={this.sldHandleCancle}
350
+					content={cur_data}
351
+					modal_tip={modal_tip}
352
+				/>
353
+				{/*标题+链接设置*/}
354
+				<SldDiyTitleLinkModal
355
+					width={1000}
356
+					title={modalTitle}
357
+					sldSeleSingleRow={true}
358
+					submiting={submiting}
359
+					modalVisible={modalSldDiyTitleLinkVisible}
360
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
361
+					sldHandleCancle={this.sldHandleCancle}
362
+					content={cur_data}
363
+					modal_tip={modal_tip}
364
+				/>
365
+				{/*标题+链接设置*/}
366
+			</Fragment>
367
+		);
368
+	}
369
+}

BIN
admin/src/pages/pcdecorate/home/adv_14.png


+ 235 - 0
admin/src/pages/pcdecorate/home/adv_15.js

@@ -0,0 +1,235 @@
1
+/*
2
+* 商品楼层,都是商品,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldIconBtn,
9
+	sldLlineRtextAddGoodsAddMargin,
10
+	showMoreHelpTip,
11
+	getSldEmptyH,
12
+	sldComLanguage,
13
+} from '@/utils/utils';
14
+import {
15
+	add_tpl_tip,
16
+} from '@/utils/util_data';
17
+import global from '../../../global.less';
18
+import styles from '../pcdecorate.less';
19
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
20
+import router from 'umi/router';
21
+import SldDiyTitleLinkModal from '@/components/SldDiyTitleLinkModal/SldDiyTitleLinkModal';
22
+
23
+let sthis = '';
24
+let getFieldDecorator_new = '';
25
+@connect(({ product }) => ({
26
+	product,
27
+}))
28
+@Form.create()
29
+export default class Adv_15 extends Component {
30
+	constructor(props) {
31
+		super(props);
32
+		sthis = this;
33
+		const {
34
+			form: { getFieldDecorator },
35
+		} = props;
36
+		getFieldDecorator_new = getFieldDecorator;
37
+		this.state = {
38
+			modalTitle: '',//弹框的标题
39
+			modal_tip: [],//弹框的提示语
40
+			submiting: false,//按钮loading
41
+			modalVisible: false,//是否展示modal
42
+			modalSpuShow: false,//是否展示选择商品modal
43
+			modalSingleImgVisible: false,//单图选择器modal是否显示
44
+			modalSldDiyTitleLinkVisible: false,//标题链接modal是否显示
45
+			modalComCatSelectorShow: false,//分类选择modal是否显示
46
+			tpl_info: props.tpl_info,
47
+			data: {
48
+				type: 'adv_15',
49
+				data: [{
50
+					title_info: {
51
+						title_name: '',//标题名称
52
+					},
53
+					goods_ids: [],
54
+					goods_data: [],
55
+				},{
56
+					title_info: {
57
+						title_name: '',//标题名称
58
+					},
59
+					goods_ids: [],
60
+					goods_data: [],
61
+				},{
62
+					title_info: {
63
+						title_name: '',//标题名称
64
+					},
65
+					goods_ids: [],
66
+					goods_data: [],
67
+				},{
68
+					title_info: {
69
+						title_name: '',//标题名称
70
+					},
71
+					goods_ids: [],
72
+					goods_data: [],
73
+				},{
74
+					title_info: {
75
+						title_name: '',//标题名称
76
+					},
77
+					goods_ids: [],
78
+					goods_data: [],
79
+				}],
80
+			},
81
+		};
82
+	}
83
+
84
+
85
+	componentDidMount() {
86
+		// let { tpl_info } = this.state;
87
+		// this.setState({
88
+		// 	data: tpl_info,
89
+		// });
90
+	}
91
+
92
+	componentWillUnmount() {
93
+
94
+	}
95
+
96
+	sldHandleCancle = () => {
97
+		this.setState({ modalVisible: false,modalSldDiyTitleLinkVisible: false });
98
+	};
99
+
100
+	sldHandleConfirm = (val) => {
101
+		let { data, cur_part } = this.state;
102
+		if(cur_part == 'right'&&this.operate_type == ''){
103
+			data[cur_part].data = val;
104
+		}else{
105
+			if(this.operate_type == 'title_info'){
106
+				for (let i in val) {
107
+					if (i == 'title') {
108
+						data[cur_part][this.operate_type].title.initialValue = val.title;
109
+					} else if (i == 'sub_title') {
110
+						data[cur_part][this.operate_type].sub_title.initialValue = val.sub_title;
111
+					} else if (i == 'link_type') {
112
+						data[cur_part][this.operate_type].link_type = val.link_type;
113
+						data[cur_part][this.operate_type].link_value = val.link_value;
114
+						data[cur_part][this.operate_type].info = val.info != undefined ? val.info : {};
115
+					}
116
+				}
117
+			}else{
118
+				data[cur_part][this.operate_type].data = val;
119
+			}
120
+
121
+		}
122
+		this.setState({
123
+			data,
124
+			modalVisible: false,
125
+		}, () => {
126
+			// this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
127
+		});
128
+	};
129
+
130
+	//编辑板块 part:标示哪一部分,比如left,center type:某一模块下的具体部分  modalTitle:弹框的标题  modalTip:弹框的整体提示
131
+	editTpl = (part = '',type='', modalTitle = '', modalTip = []) => {
132
+		let { data, modalVisible, cur_data,modalSldDiyTitleLinkVisible } = this.state;
133
+		if(part == 'right'&&type == ''){
134
+			cur_data = data[part];
135
+			modalVisible = true;
136
+		}else{
137
+			cur_data = data[part][type];
138
+			if(type == 'title_info'){
139
+				modalSldDiyTitleLinkVisible = true;
140
+			}else{
141
+				modalVisible = true;
142
+			}
143
+
144
+		}
145
+		this.operate_type = type;//当前模块下的具体部分
146
+		this.setState({
147
+			cur_part: part,
148
+			cur_data,
149
+			modalVisible,
150
+			modalSldDiyTitleLinkVisible,
151
+			modalTitle,
152
+			modal_tip: modalTip,
153
+		});
154
+	};
155
+
156
+
157
+	render() {
158
+		const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip,modalSldDiyTitleLinkVisible } = this.state;
159
+		return (
160
+			<div className={`${global.common_page} ${styles.allow_show_edit}`}>
161
+				<Fragment>
162
+					{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('模板编辑')}`, 0, 0, 10)}{/*模板编辑*/}
163
+					{showMoreHelpTip(`${sldComLanguage('操作提示')}`, add_tpl_tip())}{/*操作提示*/}
164
+					{getSldEmptyH(10)}
165
+					{/*公共功能条-start*/}
166
+					<div className={global.operate_bg}>
167
+						{sldIconBtn(() => router.replace(this.props.back_route), `${sldComLanguage('返回')}${sldComLanguage('模板列表')}`, 7, 7, 15, 15, 4, 'fanhui', '#FA6F1E')}{/*返回模板列表*/}
168
+					</div>
169
+					{/*公共功能条-end*/}
170
+					<div className={`${styles.diy_part_wrap} ${styles.allow_show_edit}`}>
171
+						<div ref={'wrap_html'}>
172
+							<div className={`${styles.w_sld_react_1210} ${styles.adv_15}`}>
173
+								<div className={` ${styles.adv_15_wrap}`}>
174
+
175
+									<div className={`${styles.top_title}`}>
176
+										<h2 className={`${styles.title}`}>{sldComLanguage('添加标题')}</h2>
177
+										<ul className={`${styles.tab_nav}`}>
178
+											<li className={`${styles.tabs_selected}`}>
179
+												<i className={`${styles.arrow}`}></i>
180
+												<h3>1332</h3>
181
+											</li>
182
+											<li className={`${styles.arrow}`}>
183
+												<i className="arrow"></i>
184
+												<h3>12312</h3>
185
+											</li>
186
+											<li className="">
187
+												<i className={`${styles.arrow}`}></i>
188
+												<h3>添加商品</h3>
189
+											</li>
190
+											<li className="">
191
+												<i className={`${styles.arrow}`}></i>
192
+												<h3>3333</h3>
193
+											</li>
194
+											<li className="">
195
+												<i className={`${styles.arrow}`}></i>
196
+												<h3>添加商品</h3>
197
+											</li>
198
+										</ul>
199
+									</div>
200
+
201
+
202
+								</div>
203
+							</div>
204
+						</div>
205
+					</div>
206
+
207
+					<SldDiyMoreImgModal
208
+						width={1000}
209
+						title={modalTitle}
210
+						sldSeleSingleRow={true}
211
+						submiting={submiting}
212
+						modalVisible={modalVisible}
213
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
214
+						sldHandleCancle={this.sldHandleCancle}
215
+						content={cur_data}
216
+						modal_tip={modal_tip}
217
+					/>
218
+					{/*标题+链接设置*/}
219
+					<SldDiyTitleLinkModal
220
+						width={1000}
221
+						title={modalTitle}
222
+						sldSeleSingleRow={true}
223
+						submiting={submiting}
224
+						modalVisible={modalSldDiyTitleLinkVisible}
225
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
226
+						sldHandleCancle={this.sldHandleCancle}
227
+						content={cur_data}
228
+						modal_tip={modal_tip}
229
+					/>
230
+					{/*标题+链接设置*/}
231
+				</Fragment>
232
+			</div>
233
+		);
234
+	}
235
+}

BIN
admin/src/pages/pcdecorate/home/adv_15.png


BIN
admin/src/pages/pcdecorate/home/adv_16.png


BIN
admin/src/pages/pcdecorate/home/adv_17.png


BIN
admin/src/pages/pcdecorate/home/adv_18.png


+ 710 - 0
admin/src/pages/pcdecorate/home/adv_19.js

@@ -0,0 +1,710 @@
1
+/*
2
+* 商品楼层,都是商品,效果图可以点击同名图片查看
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+  formItemLayoutModal,
9
+  sldComLanguage,
10
+} from '@/utils/utils';
11
+import styles from '../pcdecorate.less';
12
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
13
+import SldModal from '@/components/SldModal/SldModal';
14
+
15
+let sthis = '';
16
+let getFieldDecorator_new = '';
17
+@connect(({ product }) => ({
18
+  product,
19
+}))
20
+@Form.create()
21
+export default class Adv_19 extends Component {
22
+  constructor(props) {
23
+    super(props);
24
+    sthis = this;
25
+    const {
26
+      form: { getFieldDecorator },
27
+    } = props;
28
+    getFieldDecorator_new = getFieldDecorator;
29
+    this.state = {
30
+      l_tab_index: 0,//左侧选中的tab
31
+      r_tab_index: 0,//右侧选中的tab
32
+      modalTitle: '',//弹框的标题
33
+      modal_tip: [],//弹框的提示语
34
+      submiting: false,//按钮loading
35
+      modalVisible: false,//是否展示modal
36
+      modalTitleVisible: false,//是否展示标题modal
37
+      tpl_info: props.tpl_info,
38
+      addData: [{
39
+        type: 'input',
40
+        label: `${sldComLanguage('标题名称')}`,//标题名称
41
+        name: 'title_name',
42
+        placeholder: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,//请输入标题名称
43
+        extra: `${sldComLanguage('最多输入5个字')}`,//标题名称不能为空,8个字符以内
44
+        initialValue: '',
45
+        maxLength:5,
46
+        rules: [{
47
+          required: true,
48
+          whitespace: true,
49
+          message: `${sldComLanguage('请输入')}${sldComLanguage('标题名称')}`,//请输入标题名称
50
+        }],
51
+      }, {
52
+        type: 'more_color_picker',
53
+        label: `${sldComLanguage('标题颜色')}`,//标题颜色
54
+        name: 'title_color',
55
+        placeholder: `${sldComLanguage('请点击选择标题颜色')}`,//请点击选择标题颜色
56
+        initialValue: '',
57
+        is_show: false,
58
+        callbackShow: (color) => this.sldHandleColorPicker(color, 'title_color', 'is_show'),
59
+        callback: (color) => this.sldHandleColorPicker(color, 'title_color', 'color'),
60
+      }, {
61
+        type: 'more_color_picker',
62
+        label: `${sldComLanguage('背景色')}`,//背景色
63
+        name: 'title_bg_color',
64
+        placeholder: `${sldComLanguage('请点击选择背景色')}`,//请点击选择背景色
65
+        initialValue: '',
66
+        is_show: false,
67
+        callbackShow: (color) => this.sldHandleColorPicker(color, 'title_bg_color', 'is_show'),
68
+        callback: (color) => this.sldHandleColorPicker(color, 'title_bg_color', 'color'),
69
+      }, {
70
+        type: 'empty',
71
+        name: 'empty',
72
+        height: 0,
73
+      }],//modal框的数据
74
+      data: {
75
+        type: 'adv_19',
76
+        data: [{
77
+          top: {
78
+            title_info: {
79
+              title_name: '',//标题名称
80
+              title_color: '#fff',//标题颜色
81
+              title_bg_color: '#f89a3f',//标题背景色
82
+            },
83
+
84
+          },
85
+          center: {
86
+            left: {
87
+              width: 186,
88
+              height: 340,//高度为0的话表示不限制
89
+              data: [{
90
+                imgUrl: '',
91
+                imgPath: '',
92
+                title: '',
93
+                link_type: '',
94
+                link_value: '',
95
+                info: {},
96
+              }],
97
+            },
98
+            right: [{
99
+              title_info: {
100
+                title_name: '',//标题名称
101
+              },
102
+              width: 172,
103
+              height: 106,//高度为0的话表示不限制
104
+              data: [{
105
+                main_title: '',
106
+                sub_title: '',
107
+                imgUrl: '',
108
+                imgPath: '',
109
+                title: '',
110
+                link_type: '',
111
+                link_value: '',
112
+                info: {},
113
+              }, {
114
+                main_title: '',
115
+                sub_title: '',
116
+                imgUrl: '',
117
+                imgPath: '',
118
+                title: '',
119
+                link_type: '',
120
+                link_value: '',
121
+                info: {},
122
+              }, {
123
+                main_title: '',
124
+                sub_title: '',
125
+                imgUrl: '',
126
+                imgPath: '',
127
+                title: '',
128
+                link_type: '',
129
+                link_value: '',
130
+                info: {},
131
+              }, {
132
+                main_title: '',
133
+                sub_title: '',
134
+                imgUrl: '',
135
+                imgPath: '',
136
+                title: '',
137
+                link_type: '',
138
+                link_value: '',
139
+                info: {},
140
+              }],
141
+            }, {
142
+              title_info: {
143
+                title_name: '',//标题名称
144
+              },
145
+              width: 172,
146
+              height: 106,//高度为0的话表示不限制
147
+              data: [{
148
+                main_title: '',
149
+                sub_title: '',
150
+                imgUrl: '',
151
+                imgPath: '',
152
+                title: '',
153
+                link_type: '',
154
+                link_value: '',
155
+                info: {},
156
+              }, {
157
+                main_title: '',
158
+                sub_title: '',
159
+                imgUrl: '',
160
+                imgPath: '',
161
+                title: '',
162
+                link_type: '',
163
+                link_value: '',
164
+                info: {},
165
+              }, {
166
+                main_title: '',
167
+                sub_title: '',
168
+                imgUrl: '',
169
+                imgPath: '',
170
+                title: '',
171
+                link_type: '',
172
+                link_value: '',
173
+                info: {},
174
+              }, {
175
+                main_title: '',
176
+                sub_title: '',
177
+                imgUrl: '',
178
+                imgPath: '',
179
+                title: '',
180
+                link_type: '',
181
+                link_value: '',
182
+                info: {},
183
+              }],
184
+            }, {
185
+              title_info: {
186
+                title_name: '',//标题名称
187
+              },
188
+              width: 172,
189
+              height: 106,//高度为0的话表示不限制
190
+              data: [{
191
+                main_title: '',
192
+                sub_title: '',
193
+                imgUrl: '',
194
+                imgPath: '',
195
+                title: '',
196
+                link_type: '',
197
+                link_value: '',
198
+                info: {},
199
+              }, {
200
+                main_title: '',
201
+                sub_title: '',
202
+                imgUrl: '',
203
+                imgPath: '',
204
+                title: '',
205
+                link_type: '',
206
+                link_value: '',
207
+                info: {},
208
+              }, {
209
+                main_title: '',
210
+                sub_title: '',
211
+                imgUrl: '',
212
+                imgPath: '',
213
+                title: '',
214
+                link_type: '',
215
+                link_value: '',
216
+                info: {},
217
+              }, {
218
+                main_title: '',
219
+                sub_title: '',
220
+                imgUrl: '',
221
+                imgPath: '',
222
+                title: '',
223
+                link_type: '',
224
+                link_value: '',
225
+                info: {},
226
+              }],
227
+            }],
228
+          },
229
+          bottom: {
230
+            width: 187,
231
+            height: 120,//高度为0的话表示不限制
232
+            data: [
233
+              {
234
+                imgUrl: '',
235
+                imgPath: '',
236
+                title: '',
237
+                link_type: '',
238
+                link_value: '',
239
+                info: {},
240
+              }, {
241
+                imgUrl: '',
242
+                imgPath: '',
243
+                title: '',
244
+                link_type: '',
245
+                link_value: '',
246
+                info: {},
247
+              }, {
248
+                imgUrl: '',
249
+                imgPath: '',
250
+                title: '',
251
+                link_type: '',
252
+                link_value: '',
253
+                info: {},
254
+              }],
255
+          },
256
+        }, {
257
+          top: {
258
+            title_info: {
259
+              title_name: '',//标题名称
260
+              title_color: '#fff',//标题颜色
261
+              title_bg_color: '#f89a3f',//标题背景色
262
+            },
263
+          },
264
+          center: {
265
+            left: {
266
+              width: 186,
267
+              height: 340,//高度为0的话表示不限制
268
+              data: [{
269
+                imgUrl: '',
270
+                imgPath: '',
271
+                title: '',
272
+                link_type: '',
273
+                link_value: '',
274
+                info: {},
275
+              }],
276
+            },
277
+            right: [{
278
+              title_info: {
279
+                title_name: '',//标题名称
280
+              },
281
+              width: 172,
282
+              height: 106,//高度为0的话表示不限制
283
+              data: [{
284
+                main_title: '',
285
+                sub_title: '',
286
+                imgUrl: '',
287
+                imgPath: '',
288
+                title: '',
289
+                link_type: '',
290
+                link_value: '',
291
+                info: {},
292
+              }, {
293
+                main_title: '',
294
+                sub_title: '',
295
+                imgUrl: '',
296
+                imgPath: '',
297
+                title: '',
298
+                link_type: '',
299
+                link_value: '',
300
+                info: {},
301
+              }, {
302
+                main_title: '',
303
+                sub_title: '',
304
+                imgUrl: '',
305
+                imgPath: '',
306
+                title: '',
307
+                link_type: '',
308
+                link_value: '',
309
+                info: {},
310
+              }, {
311
+                main_title: '',
312
+                sub_title: '',
313
+                imgUrl: '',
314
+                imgPath: '',
315
+                title: '',
316
+                link_type: '',
317
+                link_value: '',
318
+                info: {},
319
+              }],
320
+            }, {
321
+              title_info: {
322
+                title_name: '',//标题名称
323
+              },
324
+              width: 172,
325
+              height: 106,//高度为0的话表示不限制
326
+              data: [{
327
+                main_title: '',
328
+                sub_title: '',
329
+                imgUrl: '',
330
+                imgPath: '',
331
+                title: '',
332
+                link_type: '',
333
+                link_value: '',
334
+                info: {},
335
+              }, {
336
+                main_title: '',
337
+                sub_title: '',
338
+                imgUrl: '',
339
+                imgPath: '',
340
+                title: '',
341
+                link_type: '',
342
+                link_value: '',
343
+                info: {},
344
+              }, {
345
+                main_title: '',
346
+                sub_title: '',
347
+                imgUrl: '',
348
+                imgPath: '',
349
+                title: '',
350
+                link_type: '',
351
+                link_value: '',
352
+                info: {},
353
+              }, {
354
+                main_title: '',
355
+                sub_title: '',
356
+                imgUrl: '',
357
+                imgPath: '',
358
+                title: '',
359
+                link_type: '',
360
+                link_value: '',
361
+                info: {},
362
+              }],
363
+            }, {
364
+              title_info: {
365
+                title_name: '',//标题名称
366
+              },
367
+              width: 172,
368
+              height: 106,//高度为0的话表示不限制
369
+              data: [{
370
+                main_title: '',
371
+                sub_title: '',
372
+                imgUrl: '',
373
+                imgPath: '',
374
+                title: '',
375
+                link_type: '',
376
+                link_value: '',
377
+                info: {},
378
+              }, {
379
+                main_title: '',
380
+                sub_title: '',
381
+                imgUrl: '',
382
+                imgPath: '',
383
+                title: '',
384
+                link_type: '',
385
+                link_value: '',
386
+                info: {},
387
+              }, {
388
+                main_title: '',
389
+                sub_title: '',
390
+                imgUrl: '',
391
+                imgPath: '',
392
+                title: '',
393
+                link_type: '',
394
+                link_value: '',
395
+                info: {},
396
+              }, {
397
+                main_title: '',
398
+                sub_title: '',
399
+                imgUrl: '',
400
+                imgPath: '',
401
+                title: '',
402
+                link_type: '',
403
+                link_value: '',
404
+                info: {},
405
+              }],
406
+            }],
407
+          },
408
+          bottom: {
409
+            width: 187,
410
+            height: 120,//高度为0的话表示不限制
411
+            data: [
412
+              {
413
+                imgUrl: '',
414
+                imgPath: '',
415
+                title: '',
416
+                link_type: '',
417
+                link_value: '',
418
+                info: {},
419
+              }, {
420
+                imgUrl: '',
421
+                imgPath: '',
422
+                title: '',
423
+                link_type: '',
424
+                link_value: '',
425
+                info: {},
426
+              }, {
427
+                imgUrl: '',
428
+                imgPath: '',
429
+                title: '',
430
+                link_type: '',
431
+                link_value: '',
432
+                info: {},
433
+              }],
434
+          },
435
+        }],
436
+      },
437
+    };
438
+  }
439
+
440
+
441
+  componentDidMount() {
442
+    let { tpl_info } = this.state;
443
+    this.setState({
444
+      data: tpl_info,
445
+    });
446
+  }
447
+
448
+  componentWillUnmount() {
449
+
450
+  }
451
+
452
+  //设置颜色  color:选中的颜色值  name:addData里面的name  type:color 修改颜色, is_show 是否显示
453
+  sldHandleColorPicker = (color, name, type) => {
454
+    let { addData } = this.state;
455
+    for (let i in addData) {
456
+      if (addData[i].name == name) {
457
+        if (type == 'is_show') {
458
+          addData[i].is_show = color;
459
+        } else if (type == 'color') {
460
+          addData[i].initialValue = color;
461
+        }
462
+      } else {
463
+        if (addData[i].name == 'empty') {
464
+          if (type == 'is_show' && color) {
465
+            addData[i].height = 300;
466
+          } else if (type == 'is_show' && !color) {
467
+            addData[i].height = 0;
468
+          }
469
+        }
470
+
471
+        if (type == 'is_show') {
472
+          addData[i].is_show = false;
473
+        }
474
+      }
475
+    }
476
+    this.setState({ addData: addData });
477
+  };
478
+
479
+  sldHandleCancle = () => {
480
+    this.setState({ modalVisible: false, modalSldDiyTitleLinkVisible: false, modalTitleVisible: false });
481
+  };
482
+
483
+  sldHandleConfirm = (val) => {
484
+    let { data, cur_part, addData, l_tab_index, r_tab_index } = this.state;
485
+    if (cur_part == 'bottom') {
486
+      data.data[this.operate_type][cur_part].data = val;
487
+    } else if (cur_part == 'center_left') {
488
+      data.data[this.operate_type]['center']['left'].data = val;
489
+    } else if (cur_part == 'l_title') {
490
+      //编辑顶部左侧标题+文字颜色+背景色
491
+      data.data[this.operate_type]['top']['title_info'].title_name = val.title_name;
492
+      for (let i in addData) {
493
+        if (addData[i].name == 'title_color' || addData[i].name == 'title_bg_color') {
494
+          data.data[this.operate_type]['top']['title_info'][addData[i].name] = addData[i].initialValue;
495
+        }
496
+      }
497
+    } else if (cur_part == 'r_title') {
498
+      //分类名+图片信息
499
+      data.data[this.operate_type]['center']['right'][this.operate_type == 0 ? l_tab_index : r_tab_index]['title_info']['title_name'] = val.title_name;
500
+      data.data[this.operate_type]['center']['right'][this.operate_type == 0 ? l_tab_index : r_tab_index]['data'] = val.parent_data;
501
+    } else {
502
+      if (this.operate_type == 'title_info') {
503
+        for (let i in val) {
504
+          if (i == 'title') {
505
+            data[cur_part][this.operate_type].title.initialValue = val.title;
506
+          } else if (i == 'sub_title') {
507
+            data[cur_part][this.operate_type].sub_title.initialValue = val.sub_title;
508
+          } else if (i == 'link_type') {
509
+            data[cur_part][this.operate_type].link_type = val.link_type;
510
+            data[cur_part][this.operate_type].link_value = val.link_value;
511
+            data[cur_part][this.operate_type].info = val.info != undefined ? val.info : {};
512
+          }
513
+        }
514
+      } else {
515
+        data[cur_part][this.operate_type].data = val;
516
+      }
517
+
518
+    }
519
+    this.setState({
520
+      data,
521
+      modalVisible: false,
522
+      modalTitleVisible: false,
523
+    }, () => {
524
+      this.props.save_tpl_data(data, this.refs.wrap_html.innerHTML);//保存数据
525
+    });
526
+  };
527
+
528
+  //编辑板块 part:标示哪一部分,比如left,center type:某一模块下的具体部分  modalTitle:弹框的标题  modalTip:弹框的整体提示,tab_index 当前选中的tab的index
529
+  editTpl = (part = '', type = '', modalTitle = '', modalTip = [], tab_index = 0) => {
530
+    let { data, modalVisible, cur_data, modalSldDiyTitleLinkVisible, modalTitleVisible, addData } = this.state;
531
+    if (part == 'bottom') {
532
+      cur_data = data.data[type][part];
533
+      modalVisible = true;
534
+    } else if (part == 'center_left') {
535
+      cur_data = data.data[type]['center']['left'];
536
+      modalVisible = true;
537
+    } else if (part == 'l_title') {
538
+      for (let i in addData) {
539
+        addData[i].initialValue = data.data[type]['top']['title_info'][addData[i].name];
540
+      }
541
+      modalTitleVisible = true;
542
+    } else if (part == 'r_title') {
543
+      cur_data = data.data[type]['center']['right'][tab_index];
544
+      modalVisible = true;
545
+    }
546
+    this.operate_type = type;//当前模块下的具体部分
547
+    this.setState({
548
+      cur_part: part,
549
+      cur_data,
550
+      modalVisible,
551
+      modalTitleVisible,
552
+      modalSldDiyTitleLinkVisible,
553
+      modalTitle,
554
+      modal_tip: modalTip,
555
+    });
556
+  };
557
+
558
+  selTab = (index, tab_index) => {
559
+    let { l_tab_index, r_tab_index } = this.state;
560
+    if (index == 0) {
561
+      l_tab_index = tab_index;
562
+    } else {
563
+      r_tab_index = tab_index;
564
+    }
565
+    this.setState({ l_tab_index, r_tab_index });
566
+  };
567
+
568
+
569
+  render() {
570
+    const { data, submiting, modalTitle, modalVisible, cur_data, modal_tip, l_tab_index, r_tab_index, modalTitleVisible, addData } = this.state;
571
+    return (
572
+      <Fragment>
573
+        <div ref={'wrap_html'}>
574
+          <div className={`${styles.w_sld_react_1210} ${styles.adv_19}`}>
575
+            <div className={` ${styles.adv_19_wrap}`}>
576
+
577
+              {data.data.map((item, index) => {
578
+                return <div key={index} className={`${styles.item} ${styles.left}`}>
579
+                  <div className={`${styles.top_title}`}
580
+                       style={{ backgroundColor: item.top.title_info.title_bg_color }}>
581
+                    <div className={`${styles.l_title}`}
582
+                         style={{ color: item.top.title_info.title_color }}>
583
+                      <div className={styles.sld_mask}
584
+                           onClick={() => this.editTpl('l_title', index, `${sldComLanguage('顶部标题设置')}`)}>{/*顶部标题设置*/}
585
+                        <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
586
+                      </div>
587
+                      {item.top.title_info.title_name
588
+                        ? item.top.title_info.title_name
589
+                        : `${sldComLanguage('添加标题')}`
590
+                      }
591
+                    </div>
592
+                    <div className={`${styles.r_title}`}>
593
+                      <ul>
594
+                        {item.center.right.map((val, key) => {
595
+                          return <li key={key} onMouseOver={() => this.selTab(index, key)}
596
+                                     className={`${index == 0 ? (key == l_tab_index ? styles.sel_tab : null) : (key == r_tab_index ? styles.sel_tab : null)}`}>
597
+                            <div className={styles.sld_mask}
598
+                                 onClick={() => this.editTpl('r_title', index, `${sldComLanguage('标题tab设置')}`, [`${sldComLanguage('为达到页面效果,建议上传4张 172*106大小的图片,标题名称不能为空,最多输入4个字')}`], key)}>{/*标题tab设置*/}
599
+                              <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
600
+                            </div>
601
+                            <span className={`${styles.con}`}>
602
+																	{val.title_info.title_name
603
+                                    ? val.title_info.title_name
604
+                                    : `${sldComLanguage('添加内容')}`
605
+                                  }</span>
606
+                          </li>;
607
+                        })}
608
+                      </ul>
609
+                    </div>
610
+                  </div>
611
+                  <div className={`${styles.center}`}>
612
+                    <div className={`${styles.l_center}`}>
613
+                      <div className={styles.sld_mask}
614
+                           onClick={() => this.editTpl('center_left', index, `${sldComLanguage('中间左侧图片设置')}`)}>{/*中间左侧图片设置*/}
615
+                        <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
616
+                      </div>
617
+                      <a href="javascript:;">
618
+                        {item.center.left.data[0].imgUrl
619
+                          ? <img src={item.center.left.data[0].imgUrl}/>
620
+                          : <span>{sldComLanguage('此处添加【186*340】图片')}</span>
621
+                        }
622
+                      </a>
623
+                    </div>
624
+                    <div className={`${styles.r_center}`}>
625
+                      <div className={`${styles.tabs_panel}`}>
626
+
627
+                        {item.center.right.map((vals, keys) => {
628
+                          return <Fragment>
629
+                            {(index == 0 && keys == l_tab_index || index == 1 && keys == r_tab_index) &&
630
+                            vals.data.map((val, key) => {
631
+                              return <div key={key} className={`${styles.item}`}>
632
+                                <div className={`${styles.title_wrap}`}>
633
+                                  <a className={`${styles.main_title}`}
634
+                                     href="javascript:;">
635
+                                    {val.main_title ? val.main_title : `${sldComLanguage('图片标题')}`}
636
+                                  </a>
637
+                                  <a className={`${styles.sub_title}`}
638
+                                     href="javascript:;">
639
+                                    {val.sub_title ? val.sub_title : `${sldComLanguage('图片子标题')}`}
640
+                                  </a>
641
+                                </div>
642
+                                <div className={`${styles.bottom_img}`}>
643
+                                  <a className={`${styles.sld_com_no_img}`}
644
+                                     href="javascript:;">
645
+                                    {val.imgUrl
646
+                                      ? <img src={val.imgUrl}/>
647
+                                      : <span>{sldComLanguage('此处添加【172*106】图片')}</span>
648
+                                    }
649
+                                  </a>
650
+                                </div>
651
+                              </div>;
652
+                            })
653
+
654
+                            }
655
+                          </Fragment>;
656
+
657
+
658
+                        })}
659
+                      </div>
660
+                    </div>
661
+                  </div>
662
+                  <div className={`${styles.bottom}`}>
663
+                    <div className={styles.sld_mask}
664
+                         onClick={() => this.editTpl('bottom', index, `${sldComLanguage('底部图片设置')}`)}>{/*底部图片设置*/}
665
+                      <span>{sldComLanguage('编辑')}</span>{/*编辑*/}
666
+                    </div>
667
+                    {item.bottom.data.map((val, key) => {
668
+                      return <a key={key} className={`${styles.sld_com_no_img}`} href="javascript:;">
669
+                        {val.imgUrl
670
+                          ? <img src={val.imgUrl}/>
671
+                          : <span>{sldComLanguage('此处添加【187*120】图片')}</span>
672
+                        }
673
+                      </a>;
674
+                    })}
675
+                  </div>
676
+                </div>;
677
+              })}
678
+
679
+
680
+            </div>
681
+          </div>
682
+        </div>
683
+        <SldDiyMoreImgModal
684
+          width={1000}
685
+          title={modalTitle}
686
+          sldSeleSingleRow={true}
687
+          submiting={submiting}
688
+          modalVisible={modalVisible}
689
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
690
+          sldHandleCancle={this.sldHandleCancle}
691
+          content={cur_data}
692
+          modal_tip={modal_tip}
693
+          client={'pc'}
694
+        />
695
+        { /*标题对话框-start*/}
696
+        <SldModal
697
+          title={modalTitle}
698
+          submiting={submiting}
699
+          width={500}
700
+          modalVisible={modalTitleVisible}
701
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
702
+          sldHandleCancle={this.sldHandleCancle}
703
+          formItemLayoutModal={formItemLayoutModal}
704
+          content={addData}
705
+        />
706
+
707
+      </Fragment>
708
+    );
709
+  }
710
+}

BIN
admin/src/pages/pcdecorate/home/adv_19.png


+ 408 - 0
admin/src/pages/pcdecorate/home/diy_page_lists.js

@@ -0,0 +1,408 @@
1
+import { connect } from 'dva/index';
2
+import Link from 'umi/link';
3
+import React, { Component, Fragment } from 'react';
4
+import { Input, Form, Spin, Switch } from 'antd';
5
+import {
6
+	sldIconBtn,
7
+	failTip,
8
+	sucTip,
9
+  sldPopConfirmDiy,
10
+	dragSldTableColumn,
11
+	sldHandlePaginationData,
12
+	list_com_page_size_10,
13
+	sldLlineRtextAddGoodsAddMargin,
14
+	formItemLayoutModal,
15
+	sldSvgIcon,
16
+	getTableNum,
17
+	sldComLanguage,
18
+  sldtbaleOpeBtnText,
19
+} from '@/utils/utils';
20
+import global from '../../../global.less';
21
+import StandardTable from '@/components/StandardTable';
22
+import SldModal from '@/components/SldModal/SldModal';
23
+import Search from '@/components/Search/Search';
24
+
25
+let pageSize = list_com_page_size_10;
26
+@connect(({ product }) => ({
27
+	product,
28
+}))
29
+@Form.create()
30
+export default class Diy_page_lists extends Component {
31
+	constructor(props) {
32
+		super(props);
33
+		this.state = {
34
+			formValues: {},//搜索条件
35
+			search_con: '',//搜索框内容
36
+			submiting: false,//按钮loading
37
+			loading: false,
38
+			data: {},
39
+			selectedRows: [],
40
+			selectedRowKeys: [],//selectedRows的key
41
+			modalVisible: false,
42
+			title: '',
43
+			type: 'add',//'add'新增  'edit'编辑
44
+			params: { pageSize: pageSize },//搜索条件
45
+			curData: {},//编辑的数据
46
+			search_data: [{
47
+				type: 'input',
48
+				label: `${sldComLanguage('页面名称')}`,
49
+				name: 'decoName',
50
+				placeholder: `${sldComLanguage('请输入页面名称')}`,
51
+			}, {
52
+				type: 'select',
53
+				label: `${sldComLanguage('使用状态')}`,//使用状态
54
+				name: 'isEnable',
55
+				placeholder: `${sldComLanguage('请选择')}${sldComLanguage('使用状态')}`,
56
+				sel_data: [
57
+					{ key: '', name: `${sldComLanguage('全部')}` },//全部
58
+					{ key: '1', name: `${sldComLanguage('启用')}` },//启用
59
+					{ key: '0', name: `${sldComLanguage('禁用')}` },//禁用
60
+				],
61
+			}],//搜索数据
62
+			addData: [{
63
+				type: 'input',
64
+				label: `${sldComLanguage('装修页面名称')}`,//装修页面名称
65
+				name: 'decoName',
66
+				placeholder: `${sldComLanguage('请输入')}${sldComLanguage('装修页面名称')}`,
67
+				initialValue: '',
68
+        maxLength:20,
69
+				rules: [{
70
+					required: true,
71
+          whitespace: true,
72
+					message: `${sldComLanguage('请输入')}${sldComLanguage('装修页面名称')}`,
73
+				}],
74
+			},
75
+			],//modal框的数据
76
+			columns: [
77
+				{
78
+					title: ' ',
79
+					align: 'center',
80
+					dataIndex: 'decoId',
81
+					width: 50,
82
+					render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
83
+				},
84
+				{
85
+					title: `${sldComLanguage('名称')}`,
86
+					align: 'center',
87
+					dataIndex: 'decoName',
88
+					width: 200,
89
+					render: (text, record) => (
90
+						<Fragment>
91
+							<div className={global.flex_com_space_between}>
92
+								{record.is_edit_name != undefined && record.is_edit_name
93
+									? <Input maxLength={20} onChange={(e) => this.edit_filed_con(record.decoId, 'decoName', e.target.value)}
94
+											 defaultValue={text}/>
95
+									: <span>{text}</span>
96
+								}
97
+								{record.is_edit_name != undefined && record.is_edit_name
98
+									? <a className={global.flex_com_column} href={'javascript:void(0)'}
99
+										 style={{ marginLeft: 7 }}
100
+										 onClick={() => this.save_edit_filed(record, 'decoName', text)}>{sldSvgIcon('#FA6F1E', 16, 16, 'xuanzhong')}</a>
101
+									: <a className={global.flex_com_column} href={'javascript:void(0)'}
102
+										 style={{ marginLeft: 7 }}
103
+										 onClick={() => this.edit_filed(record.decoId, 'is_edit_name', 'true')}>{sldSvgIcon('#FA6F1E', 16, 16, 'edit')}</a>
104
+								}
105
+							</div>
106
+						</Fragment>
107
+					),
108
+				},
109
+				 {
110
+					title: `${sldComLanguage('创建时间')}`,
111
+					align: 'center',
112
+					dataIndex: 'createTime',
113
+					width: 150,
114
+				},
115
+				{
116
+					title: `${sldComLanguage('修改时间')}`,
117
+					dataIndex: 'updateTime',
118
+					align: 'center',
119
+					width: 150,
120
+				},
121
+				{
122
+					title: `${sldComLanguage('启用状态')}`,
123
+					align: 'center',
124
+					dataIndex: 'isEnable',
125
+					width: 100,
126
+					render: (text, record) => {
127
+						return <Switch checked={text == 1 ? true : false}
128
+									   onChange={(val) => this.handleSetEnable(val, record.decoId)}/>;
129
+					},
130
+				},
131
+				{
132
+					title: `${sldComLanguage('操作')}`,
133
+					align: 'center',
134
+					width: 100,
135
+					render: (text, record) => (
136
+						<Fragment>
137
+							<Link to={{ pathname: `/pcdecorate_home/diy_page_lists_to_edit`, search: `?id=${record.decoId}` }}
138
+								  target="_blank">
139
+								{
140
+                  sldtbaleOpeBtnText(`${sldComLanguage('装修')}`, null)
141
+								}
142
+							</Link>
143
+              <span className={global.splitLine}></span>
144
+              {/*删除后不可恢复,是否确定删除?*/}
145
+              {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateDiyPage(record.decoId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
146
+                sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
147
+              <span className={global.splitLine}></span>
148
+              {sldtbaleOpeBtnText(`${sldComLanguage('复制')}`, () => this.operateDiyPage(record.decoId,'copy'))}{/*复制*/}
149
+						</Fragment>
150
+					),
151
+				},
152
+
153
+			],
154
+		};
155
+	}
156
+
157
+	componentDidMount() {
158
+		this.get_list({ pageSize: pageSize });
159
+	}
160
+
161
+	componentWillUnmount() {
162
+
163
+	}
164
+
165
+	//获取数据列表
166
+	get_list = (params) => {
167
+		this.setState({ loading: true });
168
+		const { dispatch } = this.props;
169
+		dispatch({
170
+			type: 'pc_home/get_diy_page_list',
171
+			payload: {...params,decoType:'index'},
172
+			callback: (res) => {
173
+				this.setState({ loading: false });
174
+				if (res.state == 200) {
175
+					if (res.data.length == 0 && this.state.params.current > 1) {
176
+						params.current = params.current - 1;
177
+						this.get_list(params);
178
+					} else {
179
+						this.setState({
180
+							data: res.data,
181
+						});
182
+					}
183
+				}
184
+			},
185
+		});
186
+	};
187
+
188
+	handleSelectRows = (rows, rowkeys) => {
189
+		this.setState({
190
+			selectedRows: rows,
191
+			selectedRowKeys: rowkeys,
192
+		});
193
+	};
194
+
195
+	handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
196
+		const { formValues } = this.state;
197
+		const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
198
+		pageSize = params.pageSize;
199
+		this.setState({
200
+			params: params,
201
+		});
202
+		this.get_list(params);
203
+	};
204
+
205
+	//保存表格列的内容
206
+	save_edit_filed = (record, filed, value) => {
207
+		let { data } = this.state;
208
+		const { dispatch } = this.props;
209
+		dispatch({
210
+			type: 'pc_home/edit_diy_page',
211
+			payload: { decoId: record.decoId, decoName: record.decoName },
212
+			callback: (res) => {
213
+				if (res.state == 200) {
214
+					sucTip(res.msg);
215
+					let tmp = data.list.filter(item => item.decoId == record.decoId)[0];
216
+					tmp[filed] = value;
217
+					tmp.is_edit_name = false;
218
+					this.setState({ data });
219
+				} else {
220
+					failTip(res.msg);
221
+				}
222
+			},
223
+		});
224
+
225
+	};
226
+
227
+	//编辑表格列的内容
228
+	edit_filed_con = (id, filed, value) => {
229
+		let { data } = this.state;
230
+		let tmp = data.list.filter(item => item.decoId == id)[0];
231
+		tmp[filed] = value;
232
+		this.setState({ data });
233
+	};
234
+
235
+	//编辑表格列内容
236
+	edit_filed = (id, filed, flag) => {
237
+		let { data } = this.state;
238
+		let tmp = data.list.filter(item => item.decoId == id)[0];
239
+		tmp[filed] = flag;
240
+		this.setState({ data });
241
+	};
242
+
243
+	//新增数据
244
+	addData = () => {
245
+		let { addData } = this.state;
246
+		for (let i in addData) {
247
+			addData[i].initialValue = '';
248
+		}
249
+		this.setState({ modalVisible: true, type: 'add', title: `${sldComLanguage('新增')}${sldComLanguage('装修页面')}`, addData: addData });
250
+	};
251
+
252
+	//是否启用
253
+	handleSetEnable = (val, id) => {
254
+		this.operateDiyPage({ decoId: id, isEnable: val }, 'enable');
255
+	};
256
+
257
+	//编辑数据
258
+	editData = (val) => {
259
+		let { addData } = this.state;
260
+		addData.map(item => {
261
+			item.initialValue = val[item.name];
262
+		});
263
+		this.setState({ modalVisible: true, type: 'edit', title: `${sldComLanguage('编辑')}${sldComLanguage('装修页面')}`, addData: addData, curData: val });
264
+	};
265
+
266
+	//装修页面操作,edit 编辑,del 删除,enable 启用/禁用, copy 复制
267
+	operateDiyPage = (id, type) => {
268
+		const { dispatch } = this.props;
269
+		let dis_type = '';
270
+		let params = { decoId: id };
271
+		if (type == 'edit') {
272
+			dis_type = 'pc_home/edit_diy_page';
273
+			params = id;
274
+		} else if (type == 'del') {
275
+			dis_type = 'pc_home/del_diy_page';
276
+		} else if (type == 'copy') {
277
+			dis_type = 'pc_home/copy_diy_page';
278
+		} else if (type == 'enable') {
279
+			dis_type = 'pc_home/enable_diy_page';
280
+			params = id;
281
+		}
282
+		dispatch({
283
+			type: dis_type,
284
+			payload: params,
285
+			callback: (res) => {
286
+				this.setState({ submiting: false });
287
+				if (res.state == 200) {
288
+					sucTip(res.msg);
289
+					this.get_list(this.state.params);
290
+					this.setState({
291
+						modalVisible: false,
292
+					});
293
+				} else {
294
+					failTip(res.msg);
295
+				}
296
+			},
297
+		});
298
+	};
299
+
300
+	sldHandleConfirm = (val) => {
301
+		const { curData, type } = this.state;
302
+		const { dispatch } = this.props;
303
+		this.setState({ submiting: true });
304
+		val.decoType = 'index';
305
+		if (type == 'edit') {
306
+			val.decoId = curData.decoId;
307
+			this.operateDiyPage(val, 'edit');
308
+		} else {
309
+			dispatch({
310
+				type: 'pc_home/add_diy_page',
311
+				payload: val,
312
+				callback: (res) => {
313
+					this.setState({ submiting: false });
314
+					if (res.state == 200) {
315
+						sucTip(res.msg);
316
+						this.get_list({ pageSize: pageSize });
317
+						this.setState({
318
+							modalVisible: false,
319
+						});
320
+					} else {
321
+						failTip(res.msg);
322
+					}
323
+				},
324
+			});
325
+		}
326
+	};
327
+
328
+	sldHandleCancle = () => {
329
+		this.setState({ modalVisible: false });
330
+	};
331
+
332
+	//搜索事件
333
+	search = (data) => {
334
+		const values = { ...data };
335
+    for (let i in values) {
336
+      if (values[i] == '') {
337
+        delete values[i];
338
+      }
339
+    }
340
+		this.setState({
341
+			formValues: values,
342
+      params: { pageSize: pageSize }
343
+		});
344
+		this.get_list({ pageSize: pageSize, ...values });
345
+	};
346
+	//搜索重置事件
347
+	seaReset = () => {
348
+		//搜索条件置为空
349
+		this.setState({
350
+			formValues: {},
351
+      params: { pageSize: pageSize }
352
+		});
353
+		this.get_list({ pageSize: pageSize });
354
+	};
355
+
356
+	//表格拖动
357
+	resizeTable = (index, size, type, data) => {
358
+		let datas = dragSldTableColumn(index, size, data);
359
+		this.setState({ [type]: datas });
360
+	};
361
+
362
+	render() {
363
+		const { selectedRows, modalVisible, title, addData, columns, submiting, data, loading, search_data } = this.state;
364
+		return (
365
+			<div className={global.common_page}>
366
+				{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('首页装修列表管理')}`, 0, 0, 10)}
367
+				<Spin spinning={loading}>
368
+					<div className={global.tableListForm}>
369
+						<Search search_data={search_data}
370
+								seaSubmit={(data) => this.search(data)} seaReset={() => this.seaReset()}/>
371
+					</div>
372
+					{/*公共功能条-start*/}
373
+					<div className={global.operate_bg}>
374
+            {sldIconBtn(() => this.addData(), `${sldComLanguage('新增页面')}`, 7, 7)}
375
+					</div>
376
+					{/*公共功能条-end*/}
377
+					{/*标准表格-start*/}
378
+					<StandardTable
379
+						selectedRows={selectedRows}
380
+						data={data}
381
+						rowKey={'decoId'}
382
+						isCheck={false}
383
+						columns={columns}
384
+						onSelectRow={this.handleSelectRows}
385
+						onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
386
+						resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
387
+						isColumnResize={true}
388
+					/>
389
+					{/*标准表格-end*/}
390
+					{/*新增/编辑对话框-start*/}
391
+					<SldModal
392
+						width={600}
393
+						title={title}
394
+						sldSeleSingleRow={true}
395
+						submiting={submiting}
396
+						modalVisible={modalVisible}
397
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
398
+						sldHandleCancle={this.sldHandleCancle}
399
+						formItemLayoutModal={formItemLayoutModal}
400
+						content={addData}
401
+					/>
402
+					{/*新增/编辑对话框-end*/}
403
+				</Spin>
404
+
405
+			</div>
406
+		);
407
+	}
408
+}

+ 412 - 0
admin/src/pages/pcdecorate/home/edit_diy_page.js

@@ -0,0 +1,412 @@
1
+/*
2
+* 装修页面
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form, Carousel, Icon } from 'antd';
7
+import {
8
+  failTip,
9
+  sucTip,
10
+  formItemLayoutModal,
11
+  getSldEmptyH,
12
+  list_com_page_more,
13
+  sldSvgIcon,
14
+  sldComLanguage,
15
+  getSldImgSet,
16
+} from '@/utils/utils';
17
+import global from '../../../global.less';
18
+import SldSeleTpl from '@/components/SldSeleTpl/SldSeleTpl';
19
+import diy from '../diy_page.less';
20
+import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
21
+import EditDdiyPageHead from './edit_diy_page_head';
22
+
23
+let sthis = '';
24
+let getFieldDecorator_new = '';
25
+//设置顶部logo
26
+let main_site_logo = require('@/assets/pc_diy_img/pc_edit_diy_page_logo.png');
27
+let com_img_info = getSldImgSet('com_img_info');
28
+if (com_img_info != '') {
29
+  main_site_logo = com_img_info.filter(item => item.name == 'main_site_logo')[0].url || main_site_logo;
30
+}
31
+//  将拖拽后位置的数据删除然后添加到拖拽前的位置上
32
+const reorder = (list, startIndex, endIndex) => {
33
+  const result = Array.from(list);
34
+  const [removed] = result.splice(startIndex, 1);
35
+  result.splice(endIndex, 0, removed);
36
+  return result;
37
+};
38
+
39
+const grid = 8;
40
+
41
+const getItemStyle = (isDragging, draggableStyle) => ({
42
+  // some basic styles to make the items look a bit nicer
43
+  userSelect: 'none',
44
+  margin: `0 0 ${grid}px 0`,
45
+  display: 'flex',
46
+  flexDirection: 'row',
47
+  justifyContent: 'center',
48
+  alignItems: 'center',
49
+  // change background colour if dragging
50
+  background: isDragging ? '#fff' : '#fff',
51
+  opacity: isDragging ? 0.5 : 1,
52
+  borderStyle: 'solid',
53
+  borderWidth: 4,
54
+  borderColor: isDragging ? '#7abfe8' : '#fff',
55
+  // styles we need to apply on draggables
56
+  ...draggableStyle,
57
+});
58
+
59
+const getListStyle = isDraggingOver => ({
60
+  background: isDraggingOver ? '#cfe2f9' : '#fff',
61
+  width: 1220,
62
+  borderStyle: 'dashed',
63
+  borderWidth: 1,
64
+  borderColor: isDraggingOver ? '#ecf0f5' : '#fff',
65
+
66
+});
67
+@connect(({ product }) => ({
68
+  product,
69
+}))
70
+@Form.create()
71
+
72
+export default class Edit_diy_page extends Component {
73
+  constructor(props) {
74
+    super(props);
75
+    sthis = this;
76
+    const {
77
+      form: { getFieldDecorator },
78
+    } = props;
79
+    getFieldDecorator_new = getFieldDecorator;
80
+    this.state = {
81
+      cur_tpl_type: '',//当前操作模式,main_banner:页面主轮播图,floor:楼层,main_nav:主导航
82
+      is_edit_flag: false,//当前页面是否执行过操作
83
+      swiper_data: [],//选择的页面主轮播的数据
84
+      curData: {},//当前页面数据
85
+      query: props.location.query,
86
+      submiting: false,
87
+      modalVisible: false,
88
+      diy_page_data: {},
89
+      data: [],//装修数据
90
+    };
91
+  }
92
+
93
+  sele_banner_instance_id = '';//选择的实例化模板id
94
+  position = '';//添加模板的位置,top 当前模板的顶部,bottom 当前模板的底部
95
+  id = '';//当前模板的id
96
+
97
+  componentDidMount() {
98
+    const { query } = this.state;
99
+    if (query.id != undefined && query.id > 0) {
100
+      this.get_diy_page_detial(query.id);
101
+    }
102
+    this.get_tpl_type_list();
103
+  }
104
+
105
+  componentWillUnmount() {
106
+
107
+  }
108
+
109
+  //获取所有模板类型列表
110
+  get_tpl_type_list = () => {
111
+    const { dispatch } = this.props;
112
+    let { addData } = this.state;
113
+    dispatch({
114
+      type: 'pc_home/get_tpl_type_list',
115
+      callback: (res) => {
116
+        if (res.state == 200) {
117
+          for (let i in addData) {
118
+            if (addData[i].type == 'sele_instance_tpl') {
119
+              res.data = res.data.filter(item => item.type != 'main_banner' && item.type != 'top_com_nav');
120
+              addData[i].data_left = res.data;
121
+              addData[i].activeKey = res.data[0].type;
122
+              break;
123
+            }
124
+          }
125
+          this.setState({ addData }, () => {
126
+            this.get_tpl_instance_list(res.data[0].type);
127
+          });
128
+        }
129
+      },
130
+    });
131
+  };
132
+
133
+  //装修模板切换
134
+  handleTabChange = (val) => {
135
+    let { addData } = this.state;
136
+    addData.map((item) => {
137
+      if (item.type == 'sele_instance_tpl') {
138
+        item.activeKey = val;
139
+      }
140
+    });
141
+    this.setState({ addData });
142
+    this.get_tpl_instance_list(val);
143
+  };
144
+
145
+  //装修模板的选择
146
+  handle_sele_tpl = (val) => {
147
+    let { addData } = this.state;
148
+    addData.map((item) => {
149
+      if (item.type == 'sele_instance_tpl') {
150
+        item.sele_tpl_info = val;
151
+      }
152
+    });
153
+    this.setState({ addData });
154
+  };
155
+
156
+  sldHandleCancle = () => {
157
+    this.setState({ modalVisible: false });
158
+  };
159
+
160
+  sldHandleConfirm = (val = []) => {
161
+    let { data, swiper_data, cur_tpl_type } = this.state;
162
+    if (cur_tpl_type == 'main_banner') {
163
+      //轮播图处理
164
+      swiper_data = JSON.parse(val[0].json).data;
165
+      this.sele_banner_instance_id = val[0].dataId;
166
+    } else {
167
+      for (let i in val) {
168
+        //楼层模板处理
169
+        let tmp_tpl = { key: val[i].dataId, html: val[i].html, id: data.length + 1 };
170
+        if (this.id != '') {
171
+          for (let i = 0; i < data.length; i++) {
172
+            if (data[i].id == this.id) {
173
+              if (this.position == 'top') {
174
+                data.splice(i, 0, { ...tmp_tpl, id: i + 1 });
175
+                data[i + 1].id = i + 2;
176
+              } else {
177
+                data.splice(i + 1, 0, { ...tmp_tpl, id: i + 2 });
178
+              }
179
+              break;
180
+            }
181
+          }
182
+          data.map((item, index) => {
183
+            item.id = index + 1;
184
+          });
185
+        } else {
186
+          //并将数据追加到装修里面,并将页面滚动到最底部
187
+          data.push(tmp_tpl);
188
+        }
189
+      }
190
+    }
191
+    this.setState({ data, modalVisible: false, is_edit_flag: true, swiper_data });
192
+  };
193
+
194
+  //删除实例化模板
195
+  del_instance = (id) => {
196
+    let { data } = this.state;
197
+    data = data.filter(item => item.id != id);
198
+    for (let i in data) {
199
+      data[i].id = i + 1;
200
+    }
201
+    this.setState({ data, is_edit_flag: true });
202
+  };
203
+
204
+  onDragEnd = (result) => {
205
+    // 拖出范围外
206
+    if (!result.destination) {
207
+      return;
208
+    }
209
+    const data = reorder(
210
+      this.state.data,
211
+      result.source.index,
212
+      result.destination.index,
213
+    );
214
+
215
+    this.setState({ data, is_edit_flag: true });
216
+  };
217
+
218
+  //获取所有开启状态的实例化模板列表  tpl_type 模版类型  mode_type:single 只从一种模板中选择
219
+  get_tpl_instance_list = (tpl_type, mode_type = '') => {
220
+    const { dispatch } = this.props;
221
+    let { addData, modalVisible } = this.state;
222
+    dispatch({
223
+      type: 'pc_home/get_tpl_instance_list_allow_use',
224
+      payload: { tplType: tpl_type, pageSize: list_com_page_more, isEnable: 1 },
225
+      callback: (res) => {
226
+        for (let i in addData) {
227
+          if (addData[i].type == 'sele_instance_tpl') {
228
+            addData[i].data_right = [];
229
+            if (mode_type == 'single') {
230
+              modalVisible = true;
231
+              addData[i].show_left = false;
232
+            } else {
233
+              addData[i].show_left = true;
234
+            }
235
+            if (res.state == 200) {
236
+              addData[i].data_right = res.data.list;
237
+            }
238
+            break;
239
+          }
240
+        }
241
+        this.setState({ addData, cur_tpl_type: mode_type, modalVisible: modalVisible });
242
+      },
243
+    });
244
+  };
245
+
246
+
247
+  //获取装修页面数据
248
+  get_diy_page_detial = (id) => {
249
+    const { dispatch } = this.props;
250
+    dispatch({
251
+      type: 'pc_home/get_diy_page_detial',
252
+      payload: { decoId: id },
253
+      callback: (res) => {
254
+        if (res.state == 200) {
255
+          let tmp = res.data.tplData ? res.data.tplData : [];
256
+          if (tmp.length > 0) {
257
+            tmp.map((val, key) => {
258
+              val.key = val.id;
259
+              val.id = key + 1;
260
+            });
261
+          }
262
+          this.sele_banner_instance_id = !res.data.masterBannerData ? '' : res.data.masterBannerData.id;
263
+          this.setState({
264
+            data: tmp, //楼层数据
265
+            curData: res.data,
266
+            swiper_data: !res.data.masterBannerData ? [] : JSON.parse(res.data.masterBannerData.json).data,//轮播图数据
267
+          });
268
+        }
269
+      },
270
+    });
271
+  };
272
+
273
+
274
+  //添加模板
275
+  addTplData = (position = '', id = '', type = 'floor') => {
276
+    this.position = position;
277
+    this.id = id;
278
+    this.setState({ modalVisible: true, cur_tpl_type: type });
279
+  };
280
+
281
+  //保存装修数据
282
+  save_diy_page_data = () => {
283
+    const { data, curData, is_edit_flag } = this.state;
284
+    if (is_edit_flag) {
285
+      if (this.sele_banner_instance_id == '') {
286
+        failTip(`${sldComLanguage('请选择主轮播图模板')}`);
287
+        return false;
288
+      }
289
+      let param = {};
290
+      param.decoId = curData.decoId;
291
+      let diy_tpl_ids = [];
292
+      for (let i in data) {
293
+        diy_tpl_ids.push(data[i].key);
294
+      }
295
+      param.rankedTplDataIds = diy_tpl_ids.join(',');
296
+      param.masterBannerId = this.sele_banner_instance_id;//主轮播图实例化模板id
297
+      const { dispatch } = this.props;
298
+      dispatch({
299
+        type: 'pc_home/save_diy_page_data',
300
+        payload: param,
301
+        callback: (res) => {
302
+          if (res.state == 200) {
303
+            sucTip(res.msg);
304
+          } else {
305
+            failTip(res.msg);
306
+          }
307
+        },
308
+      });
309
+    }
310
+  };
311
+
312
+  render() {
313
+    const { data, submiting, modalVisible, swiper_data, is_edit_flag, cur_tpl_type } = this.state;
314
+    return (
315
+      <div ref={(el) => {
316
+        this.messagesEnd = el;
317
+      }} className={` ${diy.allow_show_sld_mask}`}
318
+           style={{ display: 'flex', flexDirection: 'column', justifyContent: 'flex-start' }}>
319
+        <div className={diy.add_floor_fixed} style={{ bottom: 120 }}>
320
+          <div className={`${diy.com_btn} ${diy.add_floor_btn}`} onClick={() => this.addTplData()}>
321
+            <Icon type="plus-circle"/> {sldComLanguage('添加楼层')}
322
+          </div>
323
+        </div>
324
+        <div ref={'wrap_top'} className={global.flex_com_column}>
325
+          <EditDdiyPageHead/>
326
+        </div>
327
+        <div style={{ position: 'relative' }}>
328
+          <a className={diy.sld_mask} onClick={() => this.addTplData('', '', 'main_banner')}>
329
+            <span style={{
330
+              right: '50%',
331
+              marginRight: -550,
332
+            }}>{sldComLanguage('选择主轮播模板')}</span>
333
+          </a>
334
+          {swiper_data.length > 0 &&
335
+          <Carousel autoplay>
336
+            {swiper_data.map((item, index) => (
337
+              <div className={diy.swiper_wrap} key={index}><img src={item.imgUrl}/></div>
338
+            ))}
339
+          </Carousel>
340
+          }
341
+          {swiper_data.length == 0 &&
342
+          <div className={diy.swiper_wrap}></div>
343
+          }
344
+        </div>
345
+        <div className={`${global.flex_com_column}`}>
346
+          <DragDropContext onDragEnd={this.onDragEnd}>
347
+            <Droppable droppableId="droppable">
348
+              {(provided, snapshot) => (
349
+                <div
350
+                  {...provided.droppableProps}
351
+                  ref={provided.innerRef}
352
+                  style={getListStyle(snapshot.isDraggingOver)}
353
+                >
354
+                  {data.map((item, index) => (
355
+                    <Draggable key={item.id} draggableId={item.id} index={index}>
356
+                      {(provided, snapshot) => (
357
+                        <div
358
+                          ref={provided.innerRef}
359
+                          {...provided.draggableProps}
360
+                          {...provided.dragHandleProps}
361
+                          style={getItemStyle(
362
+                            snapshot.isDragging,
363
+                            provided.draggableProps.style,
364
+                          )}
365
+                        >
366
+                          <div style={{ position: 'relative' }}>
367
+                            <div dangerouslySetInnerHTML={{ __html: item.html }}></div>
368
+                            <div className={diy.sld_mask}>
369
+                              <a className={diy.top_add}
370
+                                 onClick={() => this.addTplData('top', item.id)}>{sldSvgIcon('#FA6F1E', 16, 16, 'jia')}</a>
371
+                              <a className={diy.bottom_add}
372
+                                 onClick={() => this.addTplData('bottom', item.id)}>{sldSvgIcon('#FA6F1E', 16, 16, 'jia')}</a>
373
+                              <span
374
+                                onClick={() => this.del_instance(item.id)}>{sldComLanguage('删除')}</span>{/*删除*/}
375
+                            </div>
376
+                          </div>
377
+                        </div>
378
+                      )}
379
+                    </Draggable>
380
+                  ))}
381
+                  {provided.placeholder}
382
+                </div>
383
+              )}
384
+            </Droppable>
385
+          </DragDropContext>
386
+          {getSldEmptyH(50)}
387
+        </div>
388
+        {/*新增/编辑对话框-start*/}
389
+        <SldSeleTpl
390
+          width={1000}
391
+          title={sldComLanguage('选择装修模板')}//选择装修模板
392
+          sldSeleSingleRow={true}
393
+          submiting={submiting}
394
+          modalVisible={modalVisible}
395
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
396
+          sldHandleCancle={this.sldHandleCancle}
397
+          formItemLayoutModal={formItemLayoutModal}
398
+          sele_type={cur_tpl_type}
399
+        />
400
+        {/*新增/编辑对话框-end*/}
401
+        {getSldEmptyH(20)}
402
+        <div className={global.m_diy_bottom_wrap}
403
+             style={{ position: 'fixed', left: 0, right: 0 }}>
404
+          <div onClick={() => this.props.form.submit(this.save_diy_page_data)}
405
+               className={`${global.add_goods_bottom_btn} ${is_edit_flag ? global.add_goods_bottom_btn_sel : global.add_goods_bottom_btn_forbidden}`}>
406
+            {sldComLanguage('保 存')}{/*保 存*/}
407
+          </div>
408
+        </div>
409
+      </div>
410
+    );
411
+  }
412
+}

+ 192 - 0
admin/src/pages/pcdecorate/home/edit_diy_page_head.js

@@ -0,0 +1,192 @@
1
+/*
2
+* 装修页面头部
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form } from 'antd';
7
+import {sldSvgIcon,sldComLanguage} from '@/utils/utils';
8
+import global from '../../../global.less';
9
+import styles from './edit_diy_page_head.less';
10
+
11
+let sthis = '';
12
+@connect(({ common, pc_home }) => ({
13
+  common, pc_home,
14
+}))
15
+@Form.create()
16
+
17
+export default class EditDdiyPageHead extends Component {
18
+  constructor(props) {
19
+    super(props);
20
+    sthis = this;
21
+    const {
22
+      form: { getFieldDecorator },
23
+    } = props;
24
+    this.state = {
25
+      hot_search_words: [],//热搜词
26
+      mall_logo: '',//商城logo
27
+      nav_list: [],//导航列表
28
+    };
29
+  }
30
+
31
+
32
+  componentDidMount() {
33
+    this.get_base_setting();//获取基本配置信息
34
+    this.get_nav_list();//获取导航列表
35
+  }
36
+
37
+  //获取基本配置信息
38
+  get_base_setting = () => {
39
+    const { dispatch } = this.props;
40
+    let { hot_search_words, mall_logo } = this.state;
41
+    dispatch({
42
+      type: 'common/getSetting',
43
+      payload: { str: 'hot_search_words,main_site_logo' },
44
+      callback: (res) => {
45
+        if (res.state == 200) {
46
+          res.data.map(item => {
47
+            if (item.name == 'hot_search_words') {
48
+              let tmp = [];
49
+              if (item.value) {
50
+                tmp = item.value.split(',');
51
+              }
52
+              hot_search_words = tmp;
53
+            } else if (item.name == 'main_site_logo') {
54
+              mall_logo = item.imageUrl ? item.imageUrl : require('@/assets/pc_diy_top_default_mall_logo.png');
55
+            }
56
+          });
57
+          this.setState({ hot_search_words, mall_logo });
58
+        }
59
+      },
60
+    });
61
+  };
62
+
63
+  //获取导航列表
64
+  get_nav_list = () => {
65
+    const { dispatch } = this.props;
66
+    dispatch({
67
+      type: 'pc_home/get_home_nav_list',
68
+      payload: { pageSize: 30 },
69
+      callback: (res) => {
70
+        if (res.state == 200) {
71
+          this.setState({ nav_list: res.data.list });
72
+        }
73
+      },
74
+    });
75
+  };
76
+
77
+
78
+  render() {
79
+    const { hot_search_words, mall_logo, nav_list } = this.state;
80
+    return (
81
+      <Fragment>
82
+        {/* 最顶部 start */}
83
+        <div className={styles.header_wrap}>
84
+          <div className={styles.header}>
85
+            <div className={styles.header_left}>
86
+              <span className={styles.hello}>{sldComLanguage('您好,欢迎来到')}</span>
87
+              <span className={`${styles.register} ${styles.h1}`}>{sldComLanguage('登录')}</span>
88
+              <span className={`${styles.register} ${styles.h1}`}>{sldComLanguage('注册')}</span>
89
+            </div>
90
+            <div className={styles.header_right}>
91
+              <ul>
92
+                <li>
93
+                  <div className={styles.li_item}>{sldComLanguage('商城首页')}</div>
94
+                </li>
95
+                <li>
96
+                  <div className={`${styles.has_more} ${styles.li_item}`}>
97
+                    {sldComLanguage('我的订单')}
98
+                    <div className={styles.li_item_more}>
99
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('待支付订单')}</a>
100
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('待收货订单')}</a>
101
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('待评价订单')}</a>
102
+                    </div>
103
+                  </div>
104
+                </li>
105
+                <li>
106
+                  <div className={styles.li_item}>{sldComLanguage('个人中心')}</div>
107
+                </li>
108
+                <li>
109
+                  <div className={`${styles.has_more} ${styles.li_item}`}>
110
+                    {sldComLanguage('我的收藏')}
111
+                    <div className={styles.li_item_more}>
112
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('商品收藏')}</a>
113
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('店铺收藏')}</a>
114
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('我的足迹')}</a>
115
+                    </div>
116
+                  </div>
117
+                </li>
118
+                <li>
119
+                  <div className={`${styles.has_more} ${styles.li_item}`}>
120
+                    {sldComLanguage('我的账户')}
121
+                    <div className={styles.li_item_more}>
122
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('我的优惠券')}</a>
123
+                      <a href="javascript:void(0)" className={styles.li_item_more_item}>{sldComLanguage('我的余额')}</a>
124
+                    </div>
125
+                  </div>
126
+                </li>
127
+                <li>
128
+                  <div className={`${styles.li_item}`}>{sldComLanguage('服务中心')}</div>
129
+                </li>
130
+              </ul>
131
+            </div>
132
+          </div>
133
+        </div>
134
+        {/* 最顶部 end */}
135
+
136
+        {/* 搜索部分 start */}
137
+        <div className={`${styles.sld_home_top_search} ${styles.container}`}>
138
+          <div className={`${styles.ld} ${styles.sld_home_top_search_left}`}>
139
+            <a className={`${styles.sld_logo_wrap} ${global.flex_row_start_center}`}>
140
+              <img src={mall_logo}/>
141
+            </a>
142
+          </div>
143
+          <div className={styles.sld_seach_wrap}>
144
+            <div className={`${styles.sld_seach_box} ${styles.ld}`}>
145
+              <div className={styles.form}>
146
+                <input type="text" className={styles.text} autocomplete="off" style={{ color: 'rgb(153,153,153)' }}
147
+                       placeholder={sldComLanguage('请输入关键词')}/>
148
+                <input type="submit" value={sldComLanguage('搜索')} className={styles.button}/>
149
+              </div>
150
+              <div className={styles.hot_search_wrap}>
151
+                <div>
152
+                  {hot_search_words.length && hot_search_words.map((item, index) => {
153
+                    return <a key={index} href="javascript:void(0)">{item}</a>;
154
+                  })
155
+                  }
156
+                </div>
157
+              </div>
158
+            </div>
159
+          </div>
160
+          <div className={styles.sld_cart_wrap}>
161
+            <dl class>
162
+              <dt className={`${styles.ld} ${styles.cart_icon_text_wrap}`}
163
+                  style={{ borderBottom: '1px solid rgb(239, 239, 239)' }}>
164
+                <span className={styles.iconfont}>{sldSvgIcon('#e2231a',16,16,'gouwuche1')}</span>
165
+                <a href="javascript:void(0)">{sldComLanguage('我的购物车')}</a>
166
+                <div className={styles.cart_goods_num}>0</div>
167
+              </dt>
168
+            </dl>
169
+          </div>
170
+        </div>
171
+        {/* 搜索部分 end */}
172
+
173
+        {/* 导航 start */}
174
+        <div className={styles.nav_cat}>
175
+          <div className={styles.header}>
176
+            <div className={styles.product_sort}>
177
+              <img src={require('@/assets/pc_diy_top_all_cat_icon.png')}/>
178
+              <span className={styles.sort}>{sldComLanguage('产品分类')}</span>
179
+            </div>
180
+            <nav>
181
+              <li><a href="javascript:void(0)">{sldComLanguage('首页')}</a></li>
182
+              {nav_list.length && nav_list.map((item, index) => {
183
+                return <li key={index}><a href="javascript:void(0)">{item.navName}</a></li>;
184
+              })}
185
+            </nav>
186
+          </div>
187
+        </div>
188
+        {/* 导航 end */}
189
+      </Fragment>
190
+    );
191
+  }
192
+}

+ 582 - 0
admin/src/pages/pcdecorate/home/edit_diy_page_head.less

@@ -0,0 +1,582 @@
1
+@import '~antd/lib/style/themes/default.less';
2
+
3
+.header_wrap {
4
+  width: 100%;
5
+  height: 33px;
6
+  background: #f7f7f7;
7
+  display: flex;
8
+  align-items: center;
9
+  justify-content: center;
10
+
11
+  .header {
12
+    width: 1210px;
13
+    height: 33px;
14
+    display: flex;
15
+    justify-content: space-between;
16
+    align-items: center;
17
+
18
+    .header_left {
19
+      width: 360px;
20
+      height: 100%;
21
+      font-size: 12px;
22
+      color: #999;
23
+      line-height: 36px;
24
+      display: flex;
25
+
26
+      .hello {
27
+        margin-right: 20px;
28
+        color: #999;
29
+      }
30
+
31
+      .h1 {
32
+        margin: 0 5px;
33
+        cursor: pointer;
34
+
35
+        &:hover {
36
+          color: #e2231a;
37
+        }
38
+      }
39
+    }
40
+
41
+    .header_right {
42
+      height: 100%;
43
+
44
+      ul {
45
+        width: 100%;
46
+        height: 100%;
47
+        display: flex;
48
+        align-items: center;
49
+
50
+        .personal_center {
51
+          width: 121px;
52
+          height: 30px;
53
+          display: flex;
54
+          align-items: center;
55
+          justify-content: center;
56
+        }
57
+
58
+        li {
59
+          float: left;
60
+          text-align: center;
61
+          border-right: 1px solid #ddd;
62
+          padding: 0 10px;
63
+          height: 12px;
64
+
65
+          .li_item {
66
+            position: relative;
67
+            cursor: pointer;
68
+            font-size: 12px;
69
+            line-height: 12px;
70
+            color: #999;
71
+            height: 33px;
72
+
73
+            &:hover {
74
+              color: #e2231a;
75
+
76
+              &.has_more {
77
+                &:before {
78
+                  border-top-color: #e2231a;
79
+                }
80
+              }
81
+
82
+              .li_item_more {
83
+                display: block;
84
+              }
85
+            }
86
+
87
+            &.has_more {
88
+              padding-right: 12px;
89
+
90
+              &:before,
91
+              &:after {
92
+                position: absolute;
93
+                right: -2px;
94
+                display: block;
95
+                width: 0;
96
+                height: 0;
97
+                content: " ";
98
+                border: 4px solid transparent;
99
+                border-radius: 2px;
100
+              }
101
+
102
+              &:before {
103
+                top: 3px;
104
+                border-top: 5px solid #888;
105
+              }
106
+
107
+              &:after {
108
+                top: 1px;
109
+                border-top: 5px solid #f7f7f7;
110
+              }
111
+            }
112
+
113
+            .li_item_more {
114
+              position: absolute;
115
+              width: 80px;
116
+              padding: 5px 3px;
117
+              left: 50%;
118
+              transform: translateX(-50%);
119
+              top: 21px;
120
+              background: #fff;
121
+              box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
122
+              z-index: 999;
123
+              display: none;
124
+
125
+              &:before,
126
+              &:after {
127
+                position: absolute;
128
+                top: -11px;
129
+                left: 50%;
130
+                transform: translateX(-50%);
131
+                -webkit-transform: translateX(-50%);
132
+                display: block;
133
+                content: " ";
134
+                width: 0;
135
+                height: 0;
136
+                border: 5px solid transparent;
137
+                border-bottom: 6px solid #dedede;
138
+              }
139
+
140
+              &:after {
141
+                top: -10px;
142
+                border-bottom: 6px solid #fff;
143
+              }
144
+
145
+              .li_item_more_item {
146
+                display: block;
147
+                text-align: center;
148
+                color: #999;
149
+                line-height: 12px;
150
+                padding: 8px 0;
151
+
152
+                &:hover {
153
+                  color: #e2231a;
154
+                }
155
+              }
156
+            }
157
+          }
158
+
159
+          &:last-child {
160
+            border-right-width: 0;
161
+            padding-right: 0;
162
+          }
163
+        }
164
+      }
165
+    }
166
+  }
167
+}
168
+.sld_home_top_search {
169
+  height: 99px;
170
+  position: relative;
171
+  z-index: 12;
172
+  width: 1210px;
173
+  margin: 0 auto 15px;
174
+  padding-left: 0px;
175
+  padding-right: 0px;
176
+
177
+  &:before {
178
+    display: table;
179
+    content: " ";
180
+  }
181
+
182
+  .sld_home_top_search_left {
183
+    position: relative;
184
+    float: left;
185
+    width: 331px;
186
+    margin-top: 24px;
187
+
188
+    .sld_logo_wrap {
189
+      display: block;
190
+      width: 160px;
191
+      height: 60px;
192
+
193
+      img {
194
+        max-width: 100%;
195
+        max-height: 100%;
196
+      }
197
+    }
198
+  }
199
+
200
+  .sld_seach_wrap {
201
+    float: left;
202
+    width: 660px;
203
+    padding-top: 4px;
204
+    margin-top: 30px;
205
+
206
+    .sld_seach_box {
207
+      width: 580px;
208
+      z-index: 11;
209
+      height: 38px;
210
+      margin-bottom: 3px;
211
+      border: 2px solid #e2231a;
212
+
213
+      .form {
214
+        background-color: #e2231a;
215
+        height: 34px;
216
+        overflow: hidden;
217
+
218
+        .text {
219
+          background-color: #fff;
220
+          width: 471px;
221
+          -webkit-appearance: none;
222
+          -webkit-border-radius: 0;
223
+          height: 34px;
224
+          padding: 5px 5px 5px 10px;
225
+          background-position: 0 -360px;
226
+          background-repeat: repeat-x;
227
+          line-height: 20px;
228
+          font-size: 12px;
229
+          outline: none;
230
+          border: none;
231
+        }
232
+
233
+        input {
234
+          margin: 0;
235
+          padding: 0;
236
+          height: 34px;
237
+          border: 0;
238
+        }
239
+
240
+        .button {
241
+          width: 103px;
242
+          background: #e2231a;
243
+          font-size: 16px;
244
+          font-weight: 600;
245
+          color: #fff;
246
+          float: right;
247
+          cursor: pointer;
248
+        }
249
+      }
250
+
251
+      .hot_search_wrap {
252
+        height: 30px;
253
+        line-height: 30px;
254
+        color: #999;
255
+        overflow: hidden;
256
+
257
+        strong {
258
+          float: left;
259
+          font-weight: 400;
260
+        }
261
+
262
+        a {
263
+          color: #666;
264
+          font-size: 12px;
265
+
266
+          &:link,
267
+          &:visited {
268
+            float: left;
269
+            margin-right: 10px;
270
+          }
271
+
272
+          &:hover {
273
+            color: #e2231a;
274
+          }
275
+        }
276
+      }
277
+    }
278
+  }
279
+
280
+  .sld_cart_wrap {
281
+    float: right;
282
+    position: relative;
283
+    z-index: 99;
284
+    height: 40px;
285
+    width: 165px;
286
+    margin-top: 34px;
287
+    margin-right: 13px;
288
+
289
+    dl {
290
+      margin-bottom: 0px;
291
+
292
+      .cart_goods_num {
293
+        font: 11px/16px Verdana;
294
+        color: #fff;
295
+        background: #e2231a;
296
+        text-align: center;
297
+        display: inline-block;
298
+        height: 16px;
299
+        min-width: 16px;
300
+        border: none 0;
301
+        border-radius: 8px;
302
+        margin-left: 10px;
303
+      }
304
+
305
+      dt {
306
+        position: absolute;
307
+        z-index: 3;
308
+        width: 165px;
309
+        height: 38px;
310
+        border: 1px solid #e3e3e3;
311
+        background-color: #fff;
312
+        cursor: pointer;
313
+        font-weight: 400;
314
+
315
+        .iconfont {
316
+          display: inline-block;
317
+          margin: 0 13px 0 12px;
318
+          color: #e2231a;
319
+          font-weight: 600;
320
+          vertical-align: bottom;
321
+          font-size: 17px;
322
+          font-style: normal;
323
+          -webkit-font-smoothing: antialiased;
324
+          -moz-osx-font-smoothing: grayscale;
325
+          line-height: 32px;
326
+        }
327
+
328
+        &.cart_icon_text_wrap {
329
+          a {
330
+            color: #666666;
331
+            font-size: 14px;
332
+            line-height: 36px;
333
+          }
334
+        }
335
+      }
336
+
337
+      dd {
338
+        .cart_goods {
339
+          dl {
340
+            padding-top: 8px;
341
+          }
342
+
343
+          dd {
344
+            &.cart_goods_price {
345
+              position: static;
346
+
347
+              em {
348
+                margin-right: 6px;
349
+                width: auto;
350
+                color: #666;
351
+
352
+                &:nth-child(1) {
353
+                  display: block;
354
+                  font-weight: 600;
355
+                }
356
+
357
+                &:nth-child(2) {
358
+                  display: block;
359
+                  text-align: right;
360
+                  margin-top: 6px;
361
+                }
362
+              }
363
+            }
364
+          }
365
+        }
366
+      }
367
+    }
368
+
369
+    dd {
370
+      position: absolute;
371
+      top: 37px;
372
+      right: 0;
373
+      width: 355px;
374
+      border: 1px solid #e3e3e3;
375
+      background: #fff;
376
+      z-index: 1;
377
+    }
378
+
379
+    &:hover .cart_more_view {
380
+      display: inline-block;
381
+    }
382
+  }
383
+
384
+  .cart_more_view {
385
+    display: none;
386
+
387
+    .empty_cart {
388
+      width: 100%;
389
+      position: relative;
390
+
391
+      .empty_cart_line {
392
+        position: absolute;
393
+        width: 163px;
394
+        right: 0;
395
+        height: 2px;
396
+        top: -2px;
397
+        z-index: 999;
398
+        background: #fff;
399
+      }
400
+
401
+      .empty_cart_txt {
402
+        padding: 10px;
403
+        color: #999;
404
+      }
405
+    }
406
+  }
407
+
408
+  .ld {
409
+    position: relative;
410
+    zoom: 1;
411
+  }
412
+
413
+  .cart_data {
414
+    height: 300px;
415
+    display: flex;
416
+    flex-direction: column;
417
+    position: relative;
418
+
419
+    .cart_data_title {
420
+      font-weight: 600;
421
+      float: left;
422
+      padding: 7px;
423
+      line-height: 32px;
424
+      height: 32px;
425
+    }
426
+
427
+    .cart_list {
428
+      padding: 20px;
429
+      overflow-y: scroll;
430
+
431
+      .cart_list_pre {
432
+        margin-bottom: 20px;
433
+
434
+        .cart_pre_left {
435
+          .cart_pre_img {
436
+            width: 48px;
437
+            height: 48px;
438
+            border: 1px solid #e3e3e3;
439
+            cursor: pointer;
440
+
441
+            img {
442
+              width: 100%;
443
+              height: 100%;
444
+            }
445
+          }
446
+
447
+          .cart_pre_cen {
448
+            width: 150px;
449
+            margin-left: 20px;
450
+            cursor: pointer;
451
+
452
+            .cart_pre_name {
453
+              word-break: break-all;
454
+              text-overflow: ellipsis;
455
+              display: -webkit-box;
456
+              -webkit-box-orient: vertical;
457
+              -webkit-line-clamp: 2;
458
+              overflow: hidden;
459
+            }
460
+
461
+            .cart_pre_spec {
462
+              overflow: hidden;
463
+              text-overflow: ellipsis;
464
+              white-space: nowrap;
465
+              margin-top: 5px;
466
+            }
467
+          }
468
+        }
469
+
470
+        .cart_pre_right {
471
+          .cart_pre_price {
472
+            color: #666;
473
+          }
474
+
475
+          .cart_pre_del {
476
+            color: #666;
477
+            cursor: pointer;
478
+            margin-top: 10px;
479
+
480
+            &:hover {
481
+              color: #e2231a;
482
+            }
483
+          }
484
+        }
485
+      }
486
+    }
487
+
488
+    .cart_bottom {
489
+      width: 100%;
490
+      height: 44px;
491
+      border: 1px solid #e3e3e3;
492
+
493
+      .cart_bottom_left {
494
+        padding-left: 11px;
495
+        height: 44px;
496
+
497
+        span {
498
+          color: #666;
499
+
500
+          &:nth-child(2) {
501
+            margin-left: 5px;
502
+          }
503
+        }
504
+      }
505
+
506
+      .cart_bottom_right {
507
+        width: 110px;
508
+        height: 44px;
509
+        text-align: center;
510
+        color: #fff;
511
+        background-color: #f30213;
512
+        line-height: 44px;
513
+        cursor: pointer;
514
+      }
515
+    }
516
+  }
517
+}
518
+.header {
519
+  width: 1210px;
520
+  height: 37px;
521
+  margin: 0 auto;
522
+  display: flex;
523
+  overflow: visible;
524
+
525
+  .product_sort {
526
+    position: relative;
527
+    overflow: visible;
528
+    width: 187px;
529
+    height: 100%;
530
+    background: #e2231a;
531
+    color: #fff;
532
+    font-size: 15px;
533
+    letter-spacing: 3px;
534
+    line-height: 30px;
535
+    display: flex;
536
+    align-items: center;
537
+    flex-wrap: wrap;
538
+    justify-content: space-between;
539
+    cursor: pointer;
540
+    box-sizing: border-box;
541
+    padding: 0 50px 0 26px;
542
+
543
+    &:hover {
544
+      #category_sort {
545
+        display: block;
546
+      }
547
+    }
548
+
549
+    img {
550
+      width: 12px;
551
+      height: 12px;
552
+    }
553
+  }
554
+
555
+  nav {
556
+    width: 1013px;
557
+    height: 30px;
558
+    margin-left: 8px;
559
+    display: flex;
560
+    align-items: center;
561
+    line-height: 30px;
562
+    overflow: hidden;
563
+
564
+    a {
565
+      height: 37px;
566
+      display: inline-block;
567
+      -webkit-box-sizing: border-box;
568
+      box-sizing: border-box;
569
+      color: #333333;
570
+      font-size: 15px;
571
+      margin: 0 20px;
572
+      line-height: 37px;
573
+      padding: 0 7px;
574
+      width: max-content;
575
+    }
576
+
577
+    a:hover {
578
+      color: #e2231a;
579
+      border-bottom: 3px solid #e2231a;
580
+    }
581
+  }
582
+}

+ 343 - 0
admin/src/pages/pcdecorate/home/footer.js

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

+ 375 - 0
admin/src/pages/pcdecorate/home/home_cat.js

@@ -0,0 +1,375 @@
1
+import { connect } from 'dva/index';
2
+import React, { Component, Fragment } from 'react';
3
+import { Form, Spin } from 'antd';
4
+import {
5
+	failTip,
6
+	sucTip,
7
+	list_com_page_size_10,
8
+	dragSldTableColumn,
9
+	sldHandlePaginationData,
10
+	sldLlineRtextAddGoodsAddMargin,
11
+	formItemLayoutModal,
12
+	getTableNum,
13
+	sldComLanguage,
14
+	sldtbaleOpeBtn,
15
+	getSldComImg,
16
+} from '@/utils/utils';
17
+import global from '@/global.less';
18
+import StandardTable from '@/components/StandardTable';
19
+import SldModal from '@/components/SldModal/SldModal';
20
+import { apiUrl } from '@/utils/sldconfig.js';
21
+import SldDiyMoreImgModal from '@/components/SldDiyMoreImgModal/SldDiyMoreImgModal';
22
+
23
+let pageSize = list_com_page_size_10;
24
+@connect(({ pc_home }) => ({
25
+	pc_home,
26
+}))
27
+@Form.create()
28
+export default class HomeCat extends Component {
29
+	constructor(props) {
30
+		super(props);
31
+		this.state = {
32
+			cur_data: {},//当前操作数据
33
+			modal_tip: [],//操作提示
34
+			modalImgVisible: false,//上传多图广告modal是否显示
35
+			initLoading: false,
36
+			submiting: false,
37
+			data: {},//列表数据
38
+			selectedRows: [],
39
+			selectedRowKeys: [],//selectedRows的key
40
+			type: 'add',//'add'新增  'edit'编辑
41
+			params: { pageSize: pageSize },//搜索条件
42
+			addData: [{
43
+				type: 'upload_img_upload',
44
+				label: `${sldComLanguage('分类图标')}`,//分类图标
45
+				name: 'categoryIcon',
46
+				fileList: [],
47
+				img_info: {},
48
+				upload_name: 'file',
49
+				upload_url: apiUrl + `v3/oss/common/upload?source=adminDeco`,
50
+				uploadPreview: this.uploadImgPre,
51
+				uploadChange: (info) => this.uploadImg(info, 'categoryIcon'),
52
+				initialValue: '',
53
+				extra: `${sldComLanguage('建议上传16*16的图片')}`,//建议上传16*16的图片
54
+			},
55
+			],//modal框的数据
56
+			formValues: {},//搜索条件、
57
+			columns: [
58
+				{
59
+					title: ' ',
60
+					dataIndex: 'goodsCategoryId',
61
+					align: 'center',
62
+					width: 55,
63
+					render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
64
+				},
65
+				{
66
+					title: `${sldComLanguage('分类图标')}`,//分类图标
67
+					dataIndex: 'categoryIconUrl',
68
+					align: 'center',
69
+					width: 100,
70
+					render: (text, record, index) => {
71
+						return text ? getSldComImg(text, 20, 20, 16, 16) : null;
72
+					},
73
+				},
74
+				{
75
+					title: `${sldComLanguage('分类名称')}`,//分类名称
76
+					dataIndex: 'name',
77
+					align: 'center',
78
+					width: 100,
79
+				},
80
+				{
81
+					title: `${sldComLanguage('广告图')}`,//广告图
82
+					dataIndex: 'advertisePicture',
83
+					align: 'center',
84
+					width: 100,
85
+					render: (text, record, index) => {
86
+						return text
87
+							? <div className={global.flex_com_row_center}>
88
+								{
89
+									JSON.parse(text).map((val, key) => {
90
+										return getSldComImg(val.imgUrl, 227, 146, 30, 30)
91
+									})
92
+								}
93
+							</div>
94
+							: null;
95
+					},
96
+				},
97
+				{
98
+					title: `${sldComLanguage('更新时间')}`,//更新时间
99
+					dataIndex: 'updateTime',
100
+					align: 'center',
101
+					width: 150,
102
+				}, {
103
+					title: `${sldComLanguage('操作')}`,//操作
104
+					align: 'center',
105
+					width: 100,
106
+					render: (text, record) => (
107
+						<Fragment>
108
+							{
109
+								sldtbaleOpeBtn(sldComLanguage('分类图标设置'), 'fenlei2', () => this.editCat(record, 'icon'))//分类图标设置
110
+							}
111
+							{
112
+								sldtbaleOpeBtn(sldComLanguage('分类广告设置'), 'guanggao', () => this.editCat(record, 'adv'))//分类广告设置
113
+							}
114
+						</Fragment>
115
+					),
116
+				},
117
+			],
118
+			adv_data: {
119
+				width: 227,
120
+				height: 146,//高度为0的话表示不限制
121
+				data: [{
122
+					imgUrl: '',
123
+					imgPath: '',
124
+					title: '',
125
+					link_type: '',
126
+					link_value: '',
127
+					info: {},
128
+				}, {
129
+					imgUrl: '',
130
+					imgPath: '',
131
+					title: '',
132
+					link_type: '',
133
+					link_value: '',
134
+					info: {},
135
+				}, {
136
+					imgUrl: '',
137
+					imgPath: '',
138
+					title: '',
139
+					link_type: '',
140
+					link_value: '',
141
+					info: {},
142
+				}],
143
+			},
144
+		};
145
+	}
146
+
147
+	empty_data = {
148
+		imgUrl: '',
149
+		imgPath: '',
150
+		title: '',
151
+		link_type: '',
152
+		link_value: '',
153
+		info: {},
154
+	};//空数据
155
+	cur_type = '';//当前操作类型 icon 图标 adv 分类广告
156
+	cur_row_info = '';//当前操作行信息
157
+	componentDidMount() {
158
+		this.get_list({ pageSize: pageSize });
159
+	}
160
+
161
+	//预览图片
162
+	uploadImgPre = (info) => {
163
+		this.viewImg(true, info.response.data.url);
164
+	};
165
+
166
+	//预览图片/关闭预览图片
167
+	viewImg = (flag, img = '', text = '') => {
168
+		this.setState({
169
+			preview_img: img,
170
+			preview_alt_con: text,
171
+			show_preview_modal: flag,
172
+		});
173
+	};
174
+
175
+	//上传图片
176
+	uploadImg = (info, type) => {
177
+		let { addData } = this.state;
178
+		if (info.file.status != undefined && info.file.status != 'error') {
179
+			for (let i in addData) {
180
+				if (addData[i].name == type) {
181
+					addData[i].fileList = info.fileList;
182
+					addData[i].img_info = (info.file.response != undefined && info.fileList.length > 0 && info.file.response.data != undefined) ? info.file.response.data : [];
183
+				}
184
+			}
185
+			this.setState({ addData });
186
+		}
187
+	};
188
+	//编辑分类   type icon:分类图标  adv:分类广告
189
+	editCat = (val, type) => {
190
+		let { adv_data, modalImgVisible, addData, modalVisible, cur_data } = this.state;
191
+		if (type == 'adv') {
192
+			if(val.advertisePicture){
193
+				let tmp_data = JSON.parse(val.advertisePicture);
194
+				for(let i in adv_data.data){
195
+					adv_data.data[i] = tmp_data[i]!=undefined?tmp_data[i]:this.empty_data;
196
+				}
197
+			}else{
198
+				for(let i in adv_data.data){
199
+					adv_data.data[i] = this.empty_data;
200
+				}
201
+			}
202
+			cur_data = adv_data;
203
+			modalImgVisible = true;
204
+		} else if (type == 'icon') {
205
+			for (let i in addData) {
206
+				if (addData[i].name == 'categoryIcon') {
207
+					let fileList = [];
208
+					let tmp_data = {};
209
+					tmp_data.uid = val.goodsCategoryId;
210
+					tmp_data.name = val.categoryIconUrl;
211
+					tmp_data.status = 'done';
212
+					tmp_data.url = val.categoryIconUrl;
213
+					fileList.push(tmp_data);
214
+					addData[i].fileList = fileList;
215
+					addData[i].img_info.path = val.categoryIconPath;
216
+				} else {
217
+					addData[i].initialValue = val[addData[i].name];
218
+				}
219
+			}
220
+			modalVisible = true;
221
+		}
222
+		this.cur_type = type;
223
+		this.cur_row_info = val;
224
+		this.setState({
225
+			cur_data,
226
+			modalImgVisible,
227
+			modal_tip: [],
228
+			addData: addData,
229
+			modalVisible,
230
+			adv_data
231
+		});
232
+	};
233
+
234
+	//获取数据列表
235
+	get_list = (params) => {
236
+		this.setState({ initLoading: true });
237
+		const { dispatch } = this.props;
238
+		let { data } = this.state;
239
+		dispatch({
240
+			type: 'pc_home/get_home_cat_lists',
241
+			payload: params,
242
+			callback: (res) => {
243
+				this.setState({ initLoading: false });
244
+				if (res.state == 200) {
245
+					if (res.data.length == 0 && this.state.params.currentPage > 1) {
246
+						params.currentPage = params.currentPage - 1;
247
+						this.get_list(params);
248
+					} else {
249
+						data.list = res.data;
250
+						this.setState({
251
+							data: data,
252
+						});
253
+					}
254
+				}
255
+			},
256
+		});
257
+	};
258
+
259
+	handleSelectRows = (rows, rowkeys) => {
260
+		this.setState({
261
+			selectedRows: rows,
262
+			selectedRowKeys: rowkeys,
263
+		});
264
+	};
265
+
266
+	handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
267
+		const { formValues } = this.state;
268
+		if (type == 'main') {
269
+			const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
270
+			pageSize = params.pageSize;
271
+			this.setState({ params });
272
+			this.get_list(params);
273
+		}
274
+	};
275
+
276
+
277
+//表格拖动
278
+	resizeTable = (index, size, type, data) => {
279
+		let datas = dragSldTableColumn(index, size, data);
280
+		this.setState({ [type]: datas });
281
+	};
282
+
283
+
284
+	sldHandleCancle = () => {
285
+		this.setState({ modalVisible: false, modalImgVisible: false });
286
+	};
287
+
288
+	sldHandleConfirm = (val) => {
289
+		let { adv_data, params, addData } = this.state;
290
+		const { dispatch } = this.props;
291
+		let param_data = {};
292
+		param_data.goodsCategoryId = this.cur_row_info.goodsCategoryId;//分类id
293
+		if (this.cur_type == 'icon') {
294
+			for (let i in addData) {
295
+				if (addData[i].name == 'categoryIcon') {
296
+					if (addData[i].img_info.path == undefined) {
297
+						failTip(`${sldComLanguage('请上传')}${sldComLanguage('分类图标')}`);//请上传分类图标
298
+						return false;
299
+					} else {
300
+						param_data.categoryIcon = addData[i].img_info.path;//分类图标
301
+					}
302
+				}
303
+			}
304
+		} else if (this.cur_type == 'adv') {
305
+			param_data.advertisePicture = JSON.stringify(val);//分类的广告数据
306
+		}
307
+		dispatch({
308
+			type: 'pc_home/edit_cat',
309
+			payload: param_data,
310
+			callback: (res) => {
311
+				if (res.state == 200) {
312
+					sucTip(res.msg);
313
+					this.get_list(params);
314
+					this.setState({
315
+						modalVisible: false,
316
+						modalImgVisible: false,
317
+					});
318
+				} else {
319
+					failTip(res.msg);
320
+				}
321
+				this.setState({ submiting: false });
322
+			},
323
+		});
324
+	};
325
+
326
+	render() {
327
+		const { selectedRows, columns, initLoading, data, submiting, addData, modalVisible, modalImgVisible, cur_data, modal_tip } = this.state;
328
+		return (
329
+			<div className={global.common_page} style={{ flex: 1 }}>
330
+				{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('首页分类')}${sldComLanguage('管理')}`, 0, 0, 10)}{/*首页分类管理*/}
331
+				<Spin spinning={initLoading}>
332
+					{/*标准表格-start*/}
333
+					<StandardTable
334
+						selectedRows={selectedRows}
335
+						data={data}
336
+						rowKey={'goodsCategoryId'}
337
+						isCheck={false}
338
+						columns={columns}
339
+						onSelectRow={this.handleSelectRows}
340
+						onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
341
+						onSldHandleSeleRow={this.onSldHandleSeleRow}
342
+						resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
343
+						isColumnResize={true}
344
+					/>
345
+					{/*标准表格-end*/}
346
+
347
+				</Spin>
348
+				{/*新增/编辑对话框-start*/}
349
+				<SldModal
350
+					title={`${sldComLanguage('首页分类图标设置')}`}//首页分类图标设置
351
+					submiting={submiting}
352
+					width={500}
353
+					modalVisible={modalVisible}
354
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
355
+					sldHandleCancle={this.sldHandleCancle}
356
+					formItemLayoutModal={formItemLayoutModal}
357
+					content={addData}
358
+				/>
359
+				{/*新增/编辑对话框-end*/}
360
+				<SldDiyMoreImgModal
361
+					width={1000}
362
+					title={`${sldComLanguage('首页分类广告设置')}`}//首页分类广告设置
363
+					sldSeleSingleRow={true}
364
+					submiting={submiting}
365
+					modalVisible={modalImgVisible}
366
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
367
+					sldHandleCancle={this.sldHandleCancle}
368
+					content={cur_data}
369
+					modal_tip={modal_tip}
370
+				/>
371
+			</div>
372
+
373
+		);
374
+	}
375
+}

+ 161 - 0
admin/src/pages/pcdecorate/home/home_setting.js

@@ -0,0 +1,161 @@
1
+/*
2
+* 首页轮播图设置
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component, Fragment } from 'react';
6
+import { Form, } from 'antd';
7
+import {
8
+	failTip,
9
+	sucTip,
10
+	sldEmptyHandle2,
11
+	sldComLanguage,
12
+} from '@/utils/utils';
13
+import {  pc_home_modal_tip } from '@/utils/util_data';
14
+import global from '../../../global.less';
15
+import styles from '../pcdecorate.less';
16
+import SldHomeSetting from '@/components/SldHomeSetting/SldHomeSetting';
17
+import SldComHeader from '@/components/SldComHeader';
18
+
19
+let sthis = '';
20
+let getFieldDecorator_new = '';
21
+@connect(({ pc_home }) => ({
22
+	pc_home,
23
+}))
24
+@Form.create()
25
+export default class HomeSetting extends Component {
26
+	constructor(props) {
27
+		super(props);
28
+		sthis = this;
29
+		const {
30
+			form: { getFieldDecorator },
31
+		} = props;
32
+		getFieldDecorator_new = getFieldDecorator;
33
+		this.state = {
34
+			cur_index: '',//当前操作数据的index
35
+			cur_data: {},//当前操作的数据
36
+			tpl_adv_01_modal_tip: [],//modal框提示
37
+			submiting: false,//按钮loading
38
+			modalVisible: false,//是否展示modal
39
+			modal_adv_data: {
40
+				type: 'home_modal_adv',
41
+				width: 500,
42
+				height: 320,
43
+				data: {},
44
+			},//首页开屏幕图设置
45
+			data: {
46
+				type: 'single_img',
47
+				width: 1920,
48
+				height: 457,//高度为0的话表示不限制
49
+				data: [],
50
+			},//装修的数据
51
+
52
+		};
53
+	}
54
+
55
+	cur_flash_id = '';//当前操作的轮播图id
56
+	modal_adv_id = '';//开屏图的id
57
+
58
+	componentDidMount() {
59
+		this.get_modal_adv();
60
+	}
61
+
62
+	componentWillUnmount() {
63
+
64
+	}
65
+
66
+	get_modal_adv = () => {
67
+		const { dispatch } = this.props;
68
+		dispatch({
69
+			type: 'pc_home/get_modal_adv',
70
+			callback: (res) => {
71
+				if (res.state == 200) {
72
+					this.modal_adv_id = res.data.advId;
73
+					this.cur_flash_id = '';
74
+					this.editModaldv(JSON.parse(res.data.data));
75
+				}
76
+			},
77
+		});
78
+	};
79
+
80
+
81
+	//设置首页开屏图事件
82
+	editModaldv = (res) => {
83
+		let { modal_adv_data } = this.state;
84
+		let tmp_data = {};
85
+		tmp_data.width = modal_adv_data.width;
86
+		tmp_data.height = modal_adv_data.height;
87
+		tmp_data.source = 'home_modal_adv';
88
+		tmp_data.data = {
89
+			imgUrl: sldEmptyHandle2(res.imgUrl),
90
+			imgPath: sldEmptyHandle2(res.imgPath),
91
+			title: '',
92
+			link_type: sldEmptyHandle2(res.link_type),
93
+			link_value: sldEmptyHandle2(res.link_value),
94
+			show_switch: sldEmptyHandle2(res.show_switch),//弹出广告开关
95
+			show_radio_sele: sldEmptyHandle2(res.show_radio_sele),//弹出方式,one只有一次 more多次
96
+		};
97
+		this.setState({
98
+			cur_data: tmp_data,
99
+			modalVisible: true,
100
+			modal_tip: pc_home_modal_tip(),
101
+			title: `${sldComLanguage('设置首页开屏图')}`,//设置首页开屏图
102
+		});
103
+
104
+	};
105
+
106
+	//保存开屏设置
107
+	save_modal_adv = (val) => {
108
+		const { dispatch } = this.props;
109
+		dispatch({
110
+			type: 'pc_home/save_modal_adv',
111
+			payload: { data: JSON.stringify(val), advId: this.modal_adv_id },
112
+			callback: (res) => {
113
+				if (res.state == 200) {
114
+					sucTip(res.msg);
115
+				} else {
116
+					failTip(res.msg);
117
+				}
118
+			},
119
+		});
120
+	};
121
+
122
+	sldHandleConfirm = (val) => {
123
+		if (this.modal_adv_id != '') {
124
+			//保存开屏图设置
125
+			let {cur_data} = this.state;
126
+			cur_data.data = val;
127
+			this.setState({cur_data})
128
+			this.save_modal_adv(val);
129
+		}
130
+	};
131
+
132
+	sldHandleCancle = () => {
133
+		this.setState({ modalVisible: false });
134
+	};
135
+
136
+	render() {
137
+		const { submiting, modalVisible, modal_tip, cur_data, title } = this.state;
138
+		return (
139
+			<div className={`${global.common_page} ${styles.allow_show_edit}`}>
140
+				<SldComHeader
141
+					type={2}
142
+					title={sldComLanguage('首页开屏图设置')}//首页开屏图设置
143
+					tip_title={sldComLanguage('操作提示')}
144
+					tip_data={pc_home_modal_tip()}
145
+				/>
146
+				<SldHomeSetting
147
+					width={1000}
148
+					title={title}
149
+					sldSeleSingleRow={true}
150
+					submiting={submiting}
151
+					modalVisible={modalVisible}
152
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
153
+					sldHandleCancle={this.sldHandleCancle}
154
+					content={cur_data}
155
+					modal_tip={modal_tip}
156
+				/>
157
+			</div>
158
+
159
+		);
160
+	}
161
+}

+ 653 - 0
admin/src/pages/pcdecorate/home/instance_template_lists.js

@@ -0,0 +1,653 @@
1
+import { connect } from 'dva/index';
2
+import React, { Component, Fragment } from 'react';
3
+import { Input, Form, Spin, Popover, Switch,InputNumber } from 'antd';
4
+import {
5
+	sldIconBtn,
6
+	failTip,
7
+	sucTip,
8
+  sldPopConfirmDiy,
9
+	dragSldTableColumn,
10
+	sldHandlePaginationData,
11
+	list_com_page_size_10,
12
+	sldLlineRtextAddGoodsAddMargin,
13
+	formItemLayoutModal,
14
+	list_com_page_more,
15
+	sldSvgIcon,
16
+	validatorNumbe,
17
+	getTableNum,
18
+	sldComLanguage,
19
+  sldtbaleOpeBtnText,
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 Search from '@/components/Search/Search';
25
+import router from 'umi/router';
26
+
27
+let pageSize = list_com_page_size_10;
28
+let sthis = '';
29
+@connect(({ product }) => ({
30
+	product,
31
+}))
32
+@Form.create()
33
+export default class Instance_template_lists extends Component {
34
+	constructor(props) {
35
+		super(props);
36
+		sthis = this;
37
+		this.state = {
38
+      search_height:0,
39
+			formValues: {},//搜索条件
40
+			submiting: false,//按钮loading
41
+			loading: false,
42
+			data: {},
43
+			selectedRows: [],
44
+			selectedRowKeys: [],//selectedRows的key
45
+			modalVisible: false,
46
+			title: '',
47
+			type: 'add',//'add'新增  'edit'编辑
48
+			params: { pageSize: pageSize },//搜索条件
49
+			curData: {},//编辑的数据
50
+			search_data: [{
51
+				type: 'input',
52
+				label: `${sldComLanguage('实例化名称')}`,
53
+				name: 'name',
54
+				placeholder: `${sldComLanguage('实例化名称')}`,
55
+			}, {
56
+				type: 'select',
57
+				label: `${sldComLanguage('使用状态')}`,
58
+				name: 'isEnable',
59
+				placeholder: `${sldComLanguage('请选择')}${sldComLanguage('使用状态')}`,
60
+				sel_data: [
61
+					{ key: '', name: `${sldComLanguage('全部')}` },
62
+					{ key: '1', name: `${sldComLanguage('启用')}` },
63
+					{ key: '0', name: `${sldComLanguage('禁用')}` },
64
+				],
65
+			}, {
66
+				type: 'select',
67
+				label: `${sldComLanguage('模板类型')}`,
68
+				name: 'tplType',
69
+				placeholder: `${sldComLanguage('请选择')}${sldComLanguage('模板类型')}`,
70
+				sel_data: [],
71
+				sele_key: 'type',
72
+				sele_name: 'typeName',
73
+				diy: true,
74
+			}, {
75
+				type: 'select',
76
+				label: `${sldComLanguage('模板布局')}`,
77
+				name: 'tplId',
78
+				placeholder: `${sldComLanguage('请选择')}${sldComLanguage('模板布局')}`,
79
+				sel_data: [],
80
+				sele_key: 'tplPcId',
81
+				sele_name: 'name',
82
+				diy: true,
83
+			}],//搜索数据
84
+			addData: [{
85
+				type: 'show_subtitle',
86
+				color: '#ff7e28',
87
+				name: `${sldComLanguage('基本信息')}`,
88
+				distance: {
89
+					left: 5,
90
+					top: 5,
91
+					right: 5,
92
+					bottom: 10,
93
+				},
94
+			}, {
95
+				type: 'input',
96
+				label: `${sldComLanguage('实例化模板名称')}`,
97
+				name: 'name',
98
+				placeholder: `${sldComLanguage('请输入')}${sldComLanguage('实例化模板名称')}`,
99
+				initialValue: '',
100
+        maxLength:20,
101
+				rules: [{
102
+					required: true,
103
+          whitespace: true,
104
+					message: `${sldComLanguage('请输入')}${sldComLanguage('实例化模板名称')}`,
105
+				}],
106
+			}, {
107
+				type: 'inputnum',
108
+				label: `${sldComLanguage('排序')}`,//排序
109
+				name: 'sort',
110
+				placeholder: `${sldComLanguage('请输入排序')}`,
111
+				extra: `${sldComLanguage('请输入0~255的数字,数据越小显示越靠前')}`,
112
+				initialValue: '',
113
+				rules: [{
114
+					required: true,
115
+					message: `${sldComLanguage('请输入排序')}`,
116
+				}, { validator: (rule, value, callback) => validatorNumbe(rule, value, callback) }],
117
+			},
118
+			],//modal框的数据
119
+			columns: [
120
+				{
121
+					title: ' ',
122
+					align: 'center',
123
+					dataIndex: 'dataId',
124
+					width: 55,
125
+					render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
126
+				},
127
+				{
128
+					title: `${sldComLanguage('实例化模板名称')}`,
129
+					align: 'center',
130
+					dataIndex: 'name',
131
+					width: 150,
132
+					render: (text, record) => (
133
+						<Fragment>
134
+							<div className={global.flex_com_space_between}>
135
+								{record.is_edit_name != undefined && record.is_edit_name
136
+									? <Input maxLength={20} onChange={(e) => this.edit_filed_con(record.dataId, 'name', e.target.value)}
137
+											 defaultValue={text}/>
138
+									: <span>{text}</span>
139
+								}
140
+								{record.is_edit_name != undefined && record.is_edit_name
141
+									? <a className={global.flex_com_column} href={'javascript:void(0)'}
142
+										 style={{ marginLeft: 7 }}
143
+										 onClick={() => this.save_edit_filed(record, 'name', text)}>{sldSvgIcon('#FA6F1E', 16, 16, 'xuanzhong')}</a>
144
+									: <a className={global.flex_com_column} href={'javascript:void(0)'}
145
+										 style={{ marginLeft: 7 }}
146
+										 onClick={() => this.edit_filed(record.dataId, 'is_edit_name', 'true')}>{sldSvgIcon('#FA6F1E', 16, 16, 'edit')}</a>
147
+								}
148
+							</div>
149
+						</Fragment>
150
+					),
151
+				},
152
+				{
153
+					title: `${sldComLanguage('模板类型')}`,//模板类型
154
+					dataIndex: 'tplPcTypeName',
155
+					align: 'center',
156
+					width: 80,
157
+				}, {
158
+					title: `${sldComLanguage('模板布局')}`,//模板布局
159
+					dataIndex: 'tplPcName',
160
+					align: 'center',
161
+					width: 100,
162
+				},
163
+				{
164
+					title: `${sldComLanguage('排序')}`,//排序
165
+					dataIndex: 'sort',
166
+          align: 'center',
167
+					width: 80,
168
+					render: (text, record) => (
169
+						<Fragment>
170
+							<div className={global.flex_com_space_between}>
171
+								{record.is_edit_sort != undefined && record.is_edit_sort
172
+									? <InputNumber min={0} max={255} precision={0} onChange={(e) => this.edit_filed_con(record.dataId, 'sort', e)}
173
+											 defaultValue={text}/>
174
+									: <span>{text}</span>
175
+								}
176
+								{record.is_edit_sort != undefined && record.is_edit_sort
177
+									? <a className={global.flex_com_column} href={'javascript:void(0)'}
178
+										 style={{ marginLeft: 7 }}
179
+										 onClick={() => this.save_edit_filed(record, 'sort', text)}>{sldSvgIcon('#FA6F1E', 16, 16, 'xuanzhong')}</a>
180
+									: <a className={global.flex_com_column} href={'javascript:void(0)'}
181
+										 style={{ marginLeft: 7 }}
182
+										 onClick={() => this.edit_filed(record.dataId, 'is_edit_sort', 'true')}>{sldSvgIcon('#FA6F1E', 16, 16, 'edit')}</a>
183
+								}
184
+							</div>
185
+						</Fragment>
186
+					),
187
+				},
188
+				{
189
+					title: `${sldComLanguage('创建时间')}`,//创建时间
190
+					dataIndex: 'createTime',
191
+					align: 'center',
192
+					width: 150,
193
+				}, {
194
+					title: `${sldComLanguage('更新时间')}`,//更新时间
195
+					dataIndex: 'updateTime',
196
+					align: 'center',
197
+					width: 150,
198
+				},
199
+				{
200
+					title: `${sldComLanguage('启用状态')}`,//启用状态
201
+					dataIndex: 'isEnable',
202
+					align: 'center',
203
+					width: 80,
204
+					render: (text, record) => {
205
+						return <Switch checked={text == 1 ? true : false}
206
+									   onChange={(val) => this.handleSetEnable(val, record.dataId)}/>;
207
+					},
208
+				},
209
+				{
210
+					title: `${sldComLanguage('操作')}`,//操作
211
+					align: 'center',
212
+					width: 100,
213
+					render: (text, record) => (
214
+						<Fragment>
215
+              {sldtbaleOpeBtnText(`${sldComLanguage('编辑')}`, () => this.diyTpl(record))}{/*装修*/}
216
+              <span className={global.splitLine}></span>
217
+              {/*删除后不可恢复,是否确定删除?*/}
218
+              {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateInstanceTpl(record.dataId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
219
+                sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
220
+              <span className={global.splitLine}></span>
221
+              {sldtbaleOpeBtnText(`${sldComLanguage('复制')}`, () => this.operateInstanceTpl(record.dataId,'copy'))}{/*复制*/}
222
+              <span className={global.splitLine}></span>
223
+							<Popover placement="leftBottom" content={<div className={global.com_zoom}
224
+																		  dangerouslySetInnerHTML={{ __html: record.html }}></div>}
225
+									 title={sldComLanguage('装修模版效果预览')}>
226
+								{
227
+                  sldtbaleOpeBtnText(`${sldComLanguage('预览')}`, null)
228
+								}
229
+							</Popover>
230
+						</Fragment>
231
+					),
232
+				},
233
+			],
234
+		};
235
+	}
236
+
237
+	sele_tpl_data = {
238
+		type: 'sele_tpl_type',
239
+		handleTabChange(val) {
240
+			sthis.handleTabChange(val);
241
+		},
242
+		handle_sele_tpl(val) {
243
+			sthis.handle_sele_tpl(val);
244
+		},
245
+		activeKey: '',//默认第一个模板分类
246
+		sele_tpl_info: {},//选中的模板信息
247
+		data_left: [],//模板分类列表
248
+		data_right: [],//模板列表
249
+	};//选择模板数据信息
250
+
251
+	sele_tpl_title = {
252
+		type: 'show_subtitle',
253
+		color: '#ff7e28',
254
+		name: `${sldComLanguage('选择模板')}`,
255
+		distance: {
256
+			left: 5,
257
+			top: 10,
258
+			right: 5,
259
+			bottom: 10,
260
+		},
261
+	};//选择模板的标题
262
+
263
+	componentDidMount() {
264
+		this.get_list({ pageSize: pageSize });
265
+		this.get_tpl_type_list();
266
+    this.get_tpl_list('');
267
+    this.resize();
268
+    window.addEventListener('resize', this.resize);
269
+	}
270
+
271
+  componentWillUnmount() {
272
+    window.removeEventListener('resize', this.resize);
273
+  }
274
+
275
+  resize = () =>{
276
+    const {search_height} = this.state;
277
+    if(this.refs.search_part!=undefined){
278
+      if(this.refs.search_part.clientHeight != search_height){
279
+        this.setState({search_height:this.refs.search_part.clientHeight})
280
+      }
281
+    }
282
+  }
283
+
284
+	//获取所有模板类型列表
285
+	get_tpl_type_list = () => {
286
+		const { dispatch } = this.props;
287
+		let { search_data } = this.state;
288
+		dispatch({
289
+			type: 'pc_home/get_tpl_type_list',
290
+			callback: (res) => {
291
+				if (res.state == 200) {
292
+					if(res.data.length != 0){
293
+						this.sele_tpl_data.data_left = res.data;
294
+						this.sele_tpl_data.activeKey = res.data[0].type;
295
+						this.get_tpl_list(res.data[0].type, 'first');
296
+						for (let i in search_data) {
297
+							if (search_data[i].name == 'tplType') {
298
+								search_data[i].sel_data = res.data;
299
+								break;
300
+							}
301
+						}
302
+						this.setState({ search_data });
303
+					}
304
+				}
305
+			},
306
+		});
307
+	};
308
+
309
+	//根据模板类型获取该类型下的模板
310
+	get_tpl_list = (tpl_type, type = '') => {
311
+		const { dispatch } = this.props;
312
+		let { addData,search_data } = this.state;
313
+		let param = {};
314
+		if(tpl_type){
315
+      param.type = tpl_type;
316
+    }
317
+    param.pageSize = list_com_page_more;
318
+		dispatch({
319
+			type: 'pc_home/get_tpl_list',
320
+			payload: param,
321
+			callback: (res) => {
322
+				if(tpl_type == ''){
323
+					//用于搜索
324
+					for(let i in search_data){
325
+						if(search_data[i].name == 'tplId'){
326
+							search_data[i].sel_data = res.data.list;
327
+							break;
328
+						}
329
+					}
330
+					this.setState({search_data})
331
+				}
332
+				if (type == 'first') {
333
+					if (res.state == 200) {
334
+						this.sele_tpl_data.data_right = res.data.list;
335
+					} else {
336
+						this.sele_tpl_data.data_right = [];
337
+					}
338
+				} else {
339
+					addData.map(item => {
340
+						if (item.type == 'sele_tpl_type') {
341
+							item.data_right = [];
342
+							if (res.state == 200) {
343
+								item.data_right = res.data.list;
344
+							}
345
+						}
346
+					});
347
+					this.setState({ addData });
348
+
349
+				}
350
+
351
+			},
352
+		});
353
+	};
354
+
355
+	//获取数据列表
356
+	get_list = (params) => {
357
+		this.setState({ loading: true });
358
+		const { dispatch } = this.props;
359
+		dispatch({
360
+			type: 'pc_home/get_tpl_instance_list',
361
+			payload: params,
362
+			callback: (res) => {
363
+				this.setState({ loading: false });
364
+				if (res.state == 200) {
365
+					if (res.data.length == 0 && this.state.params.current > 1) {
366
+						params.current = params.current - 1;
367
+						this.get_list(params);
368
+					} else {
369
+						this.setState({
370
+							data: res.data,
371
+						});
372
+					}
373
+				}
374
+			},
375
+		});
376
+	};
377
+
378
+	//保存表格列的内容
379
+	save_edit_filed = (record, filed, value) => {
380
+		let { data } = this.state;
381
+		const { dispatch } = this.props;
382
+		dispatch({
383
+			type: 'pc_home/edit_instance_tpl',
384
+			payload: { dataId: record.dataId, name: record.name, sort: record.sort },
385
+			callback: (res) => {
386
+				if (res.state == 200) {
387
+					sucTip(res.msg);
388
+					let tmp = data.list.filter(item => item.dataId == record.dataId)[0];
389
+					tmp[filed] = value;
390
+					tmp.is_edit_name = false;
391
+					tmp.is_edit_sort = false;
392
+					this.setState({ data });
393
+				} else {
394
+					failTip(res.msg);
395
+				}
396
+			},
397
+		});
398
+
399
+	};
400
+
401
+	//编辑表格列的内容
402
+	edit_filed_con = (id, filed, value) => {
403
+		let { data } = this.state;
404
+		let tmp = data.list.filter(item => item.dataId == id)[0];
405
+		tmp[filed] = value;
406
+		this.setState({ data });
407
+	};
408
+
409
+	//编辑表格列内容
410
+	edit_filed = (id, filed, flag) => {
411
+		let { data } = this.state;
412
+		let tmp = data.list.filter(item => item.dataId == id)[0];
413
+		tmp[filed] = flag;
414
+		this.setState({ data });
415
+	};
416
+
417
+
418
+	//装修模板切换
419
+	handleTabChange = (val) => {
420
+		let { addData } = this.state;
421
+		addData.map((item) => {
422
+			if (item.type == 'sele_tpl_type') {
423
+				item.activeKey = val;
424
+			}
425
+		});
426
+		this.setState({ addData });
427
+		this.get_tpl_list(val);
428
+	};
429
+
430
+	//装修模板的选择
431
+	handle_sele_tpl = (val) => {
432
+		let { addData } = this.state;
433
+		addData.map((item) => {
434
+			if (item.type == 'sele_tpl_type') {
435
+				item.sele_tpl_info = val;
436
+			}
437
+		});
438
+		this.setState({ addData });
439
+	};
440
+
441
+	handleSelectRows = (rows, rowkeys) => {
442
+		this.setState({
443
+			selectedRows: rows,
444
+			selectedRowKeys: rowkeys,
445
+		});
446
+	};
447
+
448
+	handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
449
+		const { formValues } = this.state;
450
+		const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
451
+		pageSize = params.pageSize;
452
+		this.setState({
453
+			params: params,
454
+		});
455
+		this.get_list(params);
456
+	};
457
+
458
+	//新增数据
459
+	addData = () => {
460
+		let { addData } = this.state;
461
+		addData = addData.filter(item => item.type != 'sele_tpl_type' && item.name != `${sldComLanguage('选择模板')}`);
462
+		addData.map(item => {
463
+			if (item.type != 'show_subtitle') {
464
+				item.initialValue = '';
465
+			}
466
+		});
467
+		addData.push(this.sele_tpl_title);
468
+		addData.push(this.sele_tpl_data);
469
+		this.setState({ modalVisible: true, type: 'add', title: `${sldComLanguage('添加')}${sldComLanguage('装修模板')}`, addData: addData });
470
+	};
471
+
472
+	//编辑数据
473
+	editData = (val) => {
474
+		let { addData } = this.state;
475
+		addData = addData.filter(item => item.type != 'sele_tpl_type' && item.name != `${sldComLanguage('选择模板')}`);
476
+		addData.map(item => {
477
+			if (item.type != 'show_subtitle') {
478
+				item.initialValue = val[item.name];
479
+			}
480
+		});
481
+		//编辑装修模板基本信息
482
+		this.setState({ type: 'edit', title: `${sldComLanguage('编辑装修模板基本信息')}`, addData: addData, modalVisible: true, curData: val });
483
+	};
484
+
485
+	//模板装修
486
+	diyTpl = (val) => {
487
+		//装修数据存缓存
488
+		val.back_route = '/pcdadd_templateecorate_home/instance_template_lists';
489
+		localStorage.setItem('pc_diy_tpl', JSON.stringify(val));
490
+		router.push('/pcdecorate_home/instance_template_lists_to_add');
491
+	};
492
+
493
+	sldHandleConfirm = (val) => {
494
+		const { curData, type, addData } = this.state;
495
+		const { dispatch } = this.props;
496
+		if (type == 'edit') {
497
+			val.dataId = curData.dataId;
498
+			this.operateInstanceTpl(val, 'edit');
499
+		} else {
500
+			let sele_tpl_info = addData.filter(item => item.type == 'sele_tpl_type')[0].sele_tpl_info;
501
+			val.html = sele_tpl_info.data;
502
+			val.json = sele_tpl_info.defaultData;
503
+			val.tplPcId = sele_tpl_info.tplPcId;
504
+			if(val.tplPcId == undefined){
505
+				failTip(`${sldComLanguage('请选择模板')}`);
506
+				return false;
507
+			}
508
+			this.setState({ submiting: true });
509
+			dispatch({
510
+				type: 'pc_home/add_instance_tpl',
511
+				payload: val,
512
+				callback: (res) => {
513
+					if (res.state == 200) {
514
+						sucTip(res.msg);
515
+						this.get_list({ pageSize: pageSize });
516
+						this.setState({
517
+							modalVisible: false,
518
+							params: { pageSize: pageSize },
519
+						});
520
+					} else {
521
+						failTip(res.msg);
522
+					}
523
+					this.setState({ submiting: false });
524
+				},
525
+			});
526
+		}
527
+	};
528
+
529
+	sldHandleCancle = () => {
530
+		this.setState({ modalVisible: false });
531
+	};
532
+
533
+	//搜索事件
534
+	search = (data) => {
535
+		const values = { ...data };
536
+    for(let i in values){
537
+      if(values[i] == ''){
538
+        delete values[i]
539
+      }
540
+    }
541
+		this.setState({
542
+			formValues: values,
543
+      params: { pageSize: pageSize }
544
+		});
545
+		this.get_list({ pageSize: pageSize, ...values });
546
+	};
547
+	//搜索重置事件
548
+	seaReset = () => {
549
+		//搜索条件置为空
550
+		this.setState({
551
+			formValues: {},
552
+      params: { pageSize: pageSize }
553
+		});
554
+		this.get_list({ pageSize: pageSize });
555
+	};
556
+
557
+
558
+	//表格拖动
559
+	resizeTable = (index, size, type, data) => {
560
+		let datas = dragSldTableColumn(index, size, data);
561
+		this.setState({ [type]: datas });
562
+	};
563
+
564
+	//是否启用
565
+	handleSetEnable = (val, id) => {
566
+		this.operateInstanceTpl({ dataId: id, isEnable: val }, 'enable');
567
+	};
568
+
569
+
570
+	//实例化模板操作,edit 编辑,del 删除,enable 启用/禁用, diy 装修 copy 复制
571
+	operateInstanceTpl = (id, type) => {
572
+		const { dispatch } = this.props;
573
+		let dis_type = '';
574
+		let params = { dataId: id };
575
+		if (type == 'add') {
576
+			dis_type = 'pc_home/add_home_flash';
577
+			params = id;
578
+		} else if (type == 'edit') {
579
+			dis_type = 'pc_home/edit_instance_tpl';
580
+			params = id;
581
+		} else if (type == 'del') {
582
+			dis_type = 'pc_home/del_instance_tpl';
583
+		} else if (type == 'copy') {
584
+			dis_type = 'pc_home/copy_instance_tpl';
585
+		} else if (type == 'enable') {
586
+			dis_type = 'pc_home/enable_instance_tpl';
587
+			params = id;
588
+		}
589
+		dispatch({
590
+			type: dis_type,
591
+			payload: params,
592
+			callback: (res) => {
593
+				if (res.state == 200) {
594
+					sucTip(res.msg);
595
+					this.get_list(this.state.params);
596
+					this.setState({
597
+						modalVisible: false,
598
+					});
599
+				} else {
600
+					failTip(res.msg);
601
+				}
602
+			},
603
+		});
604
+	};
605
+
606
+	render() {
607
+		const { selectedRows, modalVisible, title, addData, columns, submiting, data, loading, type, search_data, search_height } = this.state;
608
+		return (
609
+			<div className={global.common_page}>
610
+				{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('实例化装修模板管理')}`, 0, 0, 10)}{/*实例化装修模板管理*/}
611
+				<Spin spinning={loading}>
612
+					<div className={global.tableListForm} ref={'search_part'}>
613
+						<Search search_data={search_data}
614
+								seaSubmit={(data) => this.search(data)} seaReset={() => this.seaReset()}/>
615
+					</div>
616
+					{/*公共功能条-start*/}
617
+					<div className={global.operate_bg}>
618
+            {sldIconBtn(() => this.addData(), `${sldComLanguage('添加装修模板')}`, 7, 7)}
619
+					</div>
620
+					{/*公共功能条-end*/}
621
+					{/*标准表格-start*/}
622
+					<StandardTable
623
+            totalHeight={document.body.clientHeight-160-search_height-20}
624
+						selectedRows={selectedRows}
625
+						data={data}
626
+						rowKey={'dataId'}
627
+						isCheck={false}
628
+						columns={columns}
629
+						onSelectRow={this.handleSelectRows}
630
+						onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
631
+						resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
632
+						isColumnResize={true}
633
+					/>
634
+					{/*标准表格-end*/}
635
+					{/*新增/编辑对话框-start*/}
636
+					<SldModal
637
+						width={type == 'add' ? 900 : 600}
638
+						title={title}
639
+						sldSeleSingleRow={true}
640
+						submiting={submiting}
641
+						modalVisible={modalVisible}
642
+						sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
643
+						sldHandleCancle={this.sldHandleCancle}
644
+						formItemLayoutModal={formItemLayoutModal}
645
+						content={addData}
646
+					/>
647
+					{/*新增/编辑对话框-end*/}
648
+				</Spin>
649
+
650
+			</div>
651
+		);
652
+	}
653
+}

+ 245 - 0
admin/src/pages/pcdecorate/home/main_banner.js

@@ -0,0 +1,245 @@
1
+/*
2
+* 主轮播图设置,宽度满屏,高度457,主要用于页面分类处
3
+* */
4
+import { connect } from 'dva/index';
5
+import moment from 'moment/moment';
6
+import React, { Component, Fragment } from 'react';
7
+import { Form, Carousel } from 'antd';
8
+import {
9
+	sldPopConfirmDiy,
10
+	sldEmptyHandle2,dateTimeFormat,sldComLanguage
11
+} from '@/utils/utils';
12
+import { tpl_adv_01_modal_tip } from '@/utils/util_data';
13
+import global from '../../../global.less';
14
+import styles from '../pcdecorate.less';
15
+import SldDiySingleImgModal from '@/components/SldDiySingleImgModal/SldDiySingleImgModal';
16
+import diy from '../diy_page.less';
17
+
18
+let sthis = '';
19
+let getFieldDecorator_new = '';
20
+@connect(({ product }) => ({
21
+	product,
22
+}))
23
+@Form.create()
24
+export default class MainBanner extends Component {
25
+	constructor(props) {
26
+		super(props);
27
+		sthis = this;
28
+		const {
29
+			form: { getFieldDecorator },
30
+		} = props;
31
+		getFieldDecorator_new = getFieldDecorator;
32
+		this.state = {
33
+			tpl_info: props.tpl_info,
34
+			cur_index: '',//当前操作数据的index
35
+			cur_data: {},//当前操作的数据
36
+			tpl_adv_01_modal_tip: [],//modal框提示
37
+			submiting: false,//按钮loading
38
+			modalVisible: false,//是否展示modal
39
+			data: {
40
+				type: 'main_banner',
41
+				width: 1920,
42
+				height: 457,//高度为0的话表示不限制
43
+				data: [{
44
+					status: 1,
45
+					imgUrl: '',
46
+					imgPath: '',
47
+					title: '',
48
+					link_type: '',
49
+					link_value: '',
50
+					sort: '',
51
+					startTime: '',
52
+					endTime: '',
53
+				}],
54
+			},//装修的数据
55
+		};
56
+	}
57
+
58
+	cur_operate_index = '';//当前操作的轮播图位置
59
+
60
+	componentDidMount() {
61
+		let { tpl_info } = this.state;
62
+		if (tpl_info.data.length > 0) {
63
+			let tmp_data = [];
64
+			for (let i in tpl_info.data) {
65
+				tmp_data.push({
66
+					status: tpl_info.data[i].status,
67
+					imgUrl: tpl_info.data[i].imgUrl,
68
+					imgPath: tpl_info.data[i].imgPath,
69
+					title: '',
70
+					link_type: tpl_info.data[i].link_type,
71
+					link_value: tpl_info.data[i].link_value,
72
+					sort: tpl_info.data[i].orderNo!=undefined?tpl_info.data[i].orderNo:'',
73
+					range_picker: [moment(tpl_info.data[i].startTime, dateTimeFormat), moment(tpl_info.data[i].endTime, dateTimeFormat)],
74
+				});
75
+			}
76
+			tpl_info.data = tmp_data;
77
+		}
78
+		this.setState({
79
+			data: tpl_info,
80
+		});
81
+	}
82
+
83
+	componentWillUnmount() {
84
+
85
+	}
86
+
87
+	editTpl = (tip, index, type) => {
88
+		let { data, title } = this.state;
89
+		let tmp_data = {};
90
+		tmp_data.width = data.width;
91
+		tmp_data.height = data.height;
92
+		tmp_data.source = 'home_flash';
93
+		this.cur_operate_index = index;
94
+		if (type == 'add') {
95
+			title = `${sldComLanguage('添加')}${sldComLanguage('轮播图')}`;
96
+			tmp_data.data = {
97
+				imgUrl: '',
98
+				imgPath: '',
99
+				title: '',
100
+				link_type: '',
101
+				link_value: '',
102
+				sort: '',//排序
103
+				range_picker: [],//使用时间
104
+			};
105
+		} else {
106
+			title = `${sldComLanguage('编辑')}${sldComLanguage('轮播图')}`;
107
+			tmp_data.data = data.data[index];
108
+		}
109
+		this.setState({
110
+			cur_index: index,
111
+			cur_data: tmp_data,
112
+			modalVisible: true,
113
+			modal_tip: tip,
114
+			title,
115
+		});
116
+	};
117
+
118
+	//轮播图操作,del 删除,start 启用,stop 禁用
119
+	operateFlash = (indexs, type) => {
120
+		let { data } = this.state;
121
+		if (type == 'del') {
122
+			data.data = data.data.filter((item, index) => index != indexs);
123
+		} else if (type == 'start') {
124
+			for (let i in data.data) {
125
+				if (i == indexs) {
126
+					data.data[i].status = 1;
127
+					break;
128
+				}
129
+			}
130
+		} else if (type == 'stop') {
131
+			for (let i in data.data) {
132
+				if (i == indexs) {
133
+					data.data[i].status = 2;
134
+					break;
135
+				}
136
+			}
137
+		}
138
+		this.save(data);
139
+	};
140
+
141
+	sldHandleConfirm = (val) => {
142
+		let { data } = this.state;
143
+		if (this.cur_operate_index !== '') {
144
+			//严格不等于防止把下表为0的数据过滤掉
145
+			for (let i in data.data) {
146
+				if (i == this.cur_operate_index) {
147
+					val.status = data.data[i].status;
148
+					data.data[i] = val;
149
+				}
150
+			}
151
+		} else {
152
+			data.data.push({ ...val, status: 1 });
153
+		}
154
+		this.save(data);
155
+	};
156
+
157
+	//数据处理并保存
158
+	save = (data) => {
159
+		let tmp_data = [];
160
+		if (data.data.length > 0) {
161
+			for (let i in data.data) {
162
+				tmp_data[i] = {...data.data[i]};
163
+				if (data.data[i].range_picker) {
164
+					tmp_data[i].startTime = data.data[i].range_picker[0] ? data.data[i].range_picker[0].format(dateTimeFormat) : '';
165
+					tmp_data[i].endTime = data.data[i].range_picker[1] ? data.data[i].range_picker[1].format(dateTimeFormat) : '';
166
+					delete tmp_data[i].range_picker;
167
+				}
168
+			}
169
+		}
170
+		let data_new = {...data};
171
+		data_new.data = tmp_data
172
+		this.setState({
173
+			modalVisible: false,
174
+		}, () => {
175
+			this.props.save_tpl_data(data_new, sthis.refs.wrap_html.innerHTML);
176
+		});
177
+	};
178
+
179
+	sldHandleCancle = () => {
180
+		this.setState({ modalVisible: false });
181
+	};
182
+
183
+	render() {
184
+		const { data, submiting, modalVisible, modal_tip, cur_data, title } = this.state;
185
+		sldEmptyHandle2(localStorage.getItem('pc_diy_tpl')) != '' ? JSON.parse(localStorage.getItem('pc_diy_tpl')) : '';
186
+		return (
187
+			<Fragment>
188
+				{data.data.length > 0 &&
189
+				<Carousel autoplay>
190
+					{data.data.map((item, index) => (
191
+						<div key={index} className={`${styles.adv_01_wrap}`}>
192
+							<img className={styles.adv_01_img} src={item.imgUrl}/>
193
+							<div className={styles.sld_mask}>
194
+								{/*添加轮播图*/}
195
+								<span className={`${styles.btn_common} ${styles.add}`}
196
+								      onClick={() => this.editTpl(tpl_adv_01_modal_tip(),'',  'add')}>{sldComLanguage('添加')}</span>
197
+								{/*删除*/}
198
+                {/*确定启用该轮播图?*/}
199
+								{item.status == 2 && sldPopConfirmDiy('leftBottom', `${sldComLanguage('pc_home.home_setting.confirm_available')}`, () => this.operateFlash(index, 'start'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
200
+									<span className={`${styles.btn_common} ${styles.enable}`}>{sldComLanguage('启用')}</span>)}{/*启用*/}
201
+                {/*确定停用该轮播图?*/}
202
+								{item.status == 1 && sldPopConfirmDiy('leftBottom', `${sldComLanguage('pc_home.home_setting.confirm_unavailable')}`, () => this.operateFlash(index, 'stop'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
203
+									<span className={`${styles.btn_common} ${styles.enable}`}>{sldComLanguage('禁用')}</span>)}{/*停用*/}
204
+								<span className={`${styles.btn_common} ${styles.edit}`}
205
+									  onClick={() => this.editTpl(tpl_adv_01_modal_tip(), index, 'edit')}>{sldComLanguage('编辑')}</span>{/*编辑*/}
206
+                {/*删除后不可恢复,是否确定删除?*/}
207
+								{sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateFlash(index, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
208
+									<span className={`${styles.btn_common} ${styles.del}`}>{sldComLanguage('删除')}</span>)}{/*删除*/}
209
+							</div>
210
+						</div>
211
+					))}
212
+				</Carousel>
213
+				}
214
+
215
+        {data.data.length == 0
216
+          ? <div ref={'wrap_html'}>
217
+            <div className={diy.main_banner}>
218
+              <div className={styles.sld_mask}>
219
+                {/*添加轮播图*/}
220
+                <span className={`${styles.btn_common} ${styles.add}`}
221
+                      onClick={() => this.editTpl(tpl_adv_01_modal_tip(),'',  'add')} style={{right:5}}>{sldComLanguage('添加')}</span></div>
222
+            </div>
223
+          </div>
224
+          : <div ref={'wrap_html'} style={{ opacity: 0 }}>
225
+            <div className={diy.main_banner}>
226
+              <img src={data.data[0].imgUrl}/>
227
+            </div>
228
+          </div>
229
+        }
230
+
231
+				<SldDiySingleImgModal
232
+					width={1000}
233
+					title={title}
234
+					sldSeleSingleRow={true}
235
+					submiting={submiting}
236
+					modalVisible={modalVisible}
237
+					sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
238
+					sldHandleCancle={this.sldHandleCancle}
239
+					content={cur_data}
240
+					modal_tip={modal_tip}
241
+				/>
242
+			</Fragment>
243
+		);
244
+	}
245
+}

+ 576 - 0
admin/src/pages/pcdecorate/home/nav.js

@@ -0,0 +1,576 @@
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
+  sldSearchValClear,
10
+  list_com_page_size_10,
11
+  dragSldTableColumn,
12
+  sldHandlePaginationData,
13
+  formItemLayoutModal,
14
+  getTableNum,
15
+  sldComLanguage,
16
+  sldtbaleOpeBtnText,
17
+  validatorNumbe,
18
+} from '@/utils/utils';
19
+import { diy_link_type } from '@/utils/util_data';
20
+import global from '@/global.less';
21
+import StandardTable from '@/components/StandardTable';
22
+import SldModal from '@/components/SldModal/SldModal';
23
+import SldSelGoodsSingleDiy from '@/components/SldSelGoodsSingleDiy';
24
+import SldComHeader from '@/components/SldComHeader';
25
+
26
+let pageSize = list_com_page_size_10;
27
+@connect(({ pc_home }) => ({
28
+  pc_home,
29
+}))
30
+@Form.create()
31
+export default class Nav extends Component {
32
+  constructor(props) {
33
+    super(props);
34
+    this.state = {
35
+      link_type: '',
36
+      search_con: '',
37
+      initLoading: false,
38
+      submiting: false,
39
+      data: {},//列表数据
40
+      selectedRows: [],
41
+      selectedRowKeys: [],//selectedRows的key
42
+      title: '',
43
+      type: 'add',//'add'新增  'edit'编辑
44
+      params: { pageSize: pageSize },//搜索条件
45
+      operateData: [],//sldmodal操作数据
46
+      addData: [{
47
+        type: 'input',
48
+        label: `${sldComLanguage('导航名称')}`,
49
+        name: 'navName',
50
+        extra: `${sldComLanguage('最多6个字')}`,
51
+        placeholder: `${sldComLanguage('请输入')}${sldComLanguage('导航名称')}`,
52
+        initialValue: '',
53
+        maxLength: 6,
54
+        rules: [{
55
+          required: true,
56
+          whitespace: true,
57
+          message: `${sldComLanguage('请输入')}${sldComLanguage('导航名称')}`,
58
+        }],
59
+      }, {
60
+
61
+        type: 'inputnum',
62
+        label: `${sldComLanguage('排序')}`,
63
+        name: 'sort',
64
+        extra: `${sldComLanguage('数字越小越靠前')}`,
65
+        placeholder: `${sldComLanguage('请输入排序')}`,
66
+        initialValue: '',
67
+        rules: [{
68
+          required: true,
69
+          message: `${sldComLanguage('排序必填')}`,
70
+        }, { validator: (rule, value, callback) => validatorNumbe(rule, value, callback) }],
71
+      }, {
72
+        type: 'radio_select',
73
+        label: `${sldComLanguage('是否显示')}`,
74
+        name: 'isShow',
75
+        data: [{
76
+          key: 1,
77
+          value: `${sldComLanguage('是')}`,
78
+        }, {
79
+          key: 0,
80
+          value: `${sldComLanguage('否')}`,
81
+        }],
82
+        initialValue: 1,
83
+      }, {
84
+        type: 'select',
85
+        label: `${sldComLanguage('链接类型')}`,
86
+        name: 'linkData',
87
+        placeholder: `${sldComLanguage('请选择')}${sldComLanguage('链接类型')}`,//请选择操作类型
88
+        initialValue: '',
89
+        sel_data: diy_link_type(),
90
+        sldChange: this.handleSeleLinkType,
91
+      },
92
+      ],//modal框的数据
93
+      formValues: {},//搜索条件、
94
+      columns: [
95
+        {
96
+          title: ' ',
97
+          dataIndex: 'navId',
98
+          align: 'center',
99
+          width: 55,
100
+          render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
101
+        },
102
+        {
103
+          title: `${sldComLanguage('导航名称')}`,
104
+          dataIndex: 'navName',
105
+          align: 'center',
106
+          width: 150,
107
+        },
108
+        {
109
+          title: `${sldComLanguage('排序')}`,
110
+          dataIndex: 'sort',
111
+          align: 'center',
112
+          width: 100,
113
+        },
114
+        {
115
+          title: `${sldComLanguage('链接类型')}`,
116
+          dataIndex: 'link_type',
117
+          align: 'center',
118
+          width: 150,
119
+          render: (text, record) => {
120
+            let tmp_data = JSON.parse(record.data);
121
+            let data = diy_link_type().filter(item => item.key == tmp_data.link_type)[0];
122
+            return data != undefined ? data.name : '--';
123
+          },
124
+        }, {
125
+          title: `${sldComLanguage('跳转目标')}`,
126
+          dataIndex: 'link_value',
127
+          align: 'center',
128
+          width: 150,
129
+          render: (text, record) => {
130
+            let tmp_data = JSON.parse(record.data);
131
+            return tmp_data.link_value?tmp_data.link_value:'--';
132
+          },
133
+        }, {
134
+          title: `${sldComLanguage('启用状态')}`,
135
+          dataIndex: 'isShow',
136
+          align: 'center',
137
+          width: 100,
138
+          render: (text, record) => {
139
+            return <Switch checked={text == 1 ? true : false}
140
+                           onChange={(val) => this.handleSetEnable(val, record.navId)}/>;
141
+          },
142
+        }, {
143
+          title: `${sldComLanguage('操作')}`,
144
+          align: 'center',
145
+          width: 100,
146
+          render: (text, record) => (
147
+            <Fragment>
148
+              {sldtbaleOpeBtnText('编辑', () => this.editNav(record))}{/*编辑*/}
149
+              <span className={global.splitLine}></span>
150
+              {/*删除后不可恢复,是否确定删除?*/}
151
+              {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateNav(record.navId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
152
+                sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
153
+            </Fragment>
154
+          ),
155
+        },
156
+      ],
157
+    };
158
+  }
159
+
160
+  cur_edit_id = '';//当前操作数据id
161
+  sele_info = {};//当前选中的数据
162
+  componentDidMount() {
163
+    this.get_list({ pageSize: pageSize });
164
+  }
165
+
166
+  handleSeleLinkType = (val) => {
167
+    let { operateData } = this.state;
168
+    operateData = operateData.filter(item => item.name != 'link_value');
169
+    for (let i = 0; i < operateData.length; i++) {
170
+      if (operateData[i].name == 'linkData') {
171
+        operateData[i].initialValue = val;
172
+        if (val == 'url') {
173
+          operateData.splice(i + 1, 0, {
174
+            type: 'input',
175
+            label: `${sldComLanguage('链接地址')}`,
176
+            name: 'link_value',
177
+            placeholder: `${sldComLanguage('请输入')}${sldComLanguage('链接地址')}`,
178
+            initialValue: '',
179
+            rules: [{
180
+              required: true,
181
+              whitespace: true,
182
+              message: `${sldComLanguage('请输入')}${sldComLanguage('链接地址')}`,
183
+            }],
184
+          });
185
+        } else if (val == 'keyword') {
186
+          operateData.splice(i + 1, 0, {
187
+            type: 'input',
188
+            label: `${sldComLanguage('关键字')}`,//关键字
189
+            name: 'link_value',
190
+            placeholder: `${sldComLanguage('请输入')}${sldComLanguage('关键字')}`,
191
+            initialValue: '',
192
+            rules: [{
193
+              required: true,
194
+              whitespace: true,
195
+              message: `${sldComLanguage('请输入')}${sldComLanguage('关键字')}`,
196
+            }],
197
+          });
198
+        } else if (val == 'goods') {
199
+          operateData.splice(i + 1, 0, {
200
+            type: 'input',
201
+            label: `${sldComLanguage('商品名称')}`,
202
+            name: 'link_value',
203
+            placeholder: `${sldComLanguage('请输入')}${sldComLanguage('商品名称')}`,
204
+            initialValue: '',
205
+            disable: true,
206
+          });
207
+        } else if (val == 'category') {
208
+          operateData.splice(i + 1, 0, {
209
+            type: 'input',
210
+            label: `${sldComLanguage('分类名称')}`,
211
+            name: 'link_value',
212
+            placeholder: `${sldComLanguage('请输入')}${sldComLanguage('分类名称')}`,
213
+            initialValue: '',
214
+            disable: true,
215
+          });
216
+        } else if (val == 'topic') {
217
+          operateData.splice(i + 1, 0, {
218
+            type: 'input',
219
+            label: `${sldComLanguage('专题名称')}`,
220
+            name: 'link_value',
221
+            placeholder: `${sldComLanguage('请输入')}${sldComLanguage('专题名称')}`,
222
+            initialValue: '',
223
+            disable: true,
224
+          });
225
+        }
226
+      }
227
+    }
228
+    this.setState({ operateData, link_type: val });
229
+  };
230
+
231
+  //是否启用
232
+  handleSetEnable = (val, id) => {
233
+    this.operateNav({ navId: id, isShow: val ? 1 : 0 }, 'enable');
234
+  };
235
+
236
+  //编辑导航
237
+  editNav = (val) => {
238
+    let { operateData, addData } = this.state;
239
+    operateData = JSON.parse(JSON.stringify(addData));
240
+    for (let i = 0; i < operateData.length; i++) {
241
+      if (operateData[i].name == 'linkData') {
242
+        let data = JSON.parse(val.data);
243
+        operateData[i].initialValue = data.link_type;
244
+        this.sele_info = data.info;
245
+        if (data.link_type == 'url') {
246
+          operateData.splice(i + 1, 0, {
247
+            type: 'input',
248
+            label: `${sldComLanguage('链接地址')}`,//链接地址
249
+            name: 'link_value',
250
+            placeholder: `${sldComLanguage('请输入链接地址')}`,
251
+            initialValue: data.link_value,
252
+            rules: [{
253
+              required: true,
254
+              whitespace: true,
255
+              message: `${sldComLanguage('请输入链接地址')}`,
256
+            }],
257
+          });
258
+        } else if (data.link_type == 'keyword') {
259
+          operateData.splice(i + 1, 0, {
260
+            type: 'input',
261
+            label: `${sldComLanguage('关键字')}`,//关键字
262
+            name: 'link_value',
263
+            placeholder: `${sldComLanguage('请输入关键字')}`,
264
+            initialValue: data.link_value,
265
+            rules: [{
266
+              required: true,
267
+              whitespace: true,
268
+              message: `${sldComLanguage('请输入关键字')}`,
269
+            }],
270
+          });
271
+        } else if (data.link_type == 'goods') {
272
+          operateData.splice(i + 1, 0, {
273
+            type: 'input',
274
+            label: `${sldComLanguage('商品名称')}`,//商品名称
275
+            name: 'link_value',
276
+            placeholder: `${sldComLanguage('请输入商品名称')}`,
277
+            initialValue: data.link_value,
278
+            disable: true,
279
+          });
280
+        } else if (data.link_type == 'category') {
281
+          operateData.splice(i + 1, 0, {
282
+            type: 'input',
283
+            label: `${sldComLanguage('分类名称')}`,//分类名称
284
+            name: 'link_value',
285
+            placeholder: `${sldComLanguage('请输入分类名称')}`,
286
+            initialValue: data.link_value,
287
+            disable: true,
288
+          });
289
+        } else if (data.link_type == 'topic') {
290
+          operateData.splice(i + 1, 0, {
291
+            type: 'input',
292
+            label: `${sldComLanguage('专题名称')}`,//专题名称
293
+            name: 'link_value',
294
+            placeholder: `${sldComLanguage('请输入专题名称')}`,
295
+            initialValue: data.link_value,
296
+            disable: true,
297
+          });
298
+        }
299
+        operateData[i].sldChange = this.handleSeleLinkType;
300
+      } else if (operateData[i].name != 'link_value') {
301
+        if (operateData[i].name == 'sort') {
302
+          operateData[i].initialValue = val[operateData[i].name].toString();
303
+        } else {
304
+          operateData[i].initialValue = val[operateData[i].name];
305
+        }
306
+      }
307
+    }
308
+    this.cur_edit_id = val.navId;//当前操作数据id
309
+    this.setState({
310
+      type: 'edit',
311
+      title: `${sldComLanguage('编辑导航')}`,
312
+      operateData,
313
+      modalVisible: true,
314
+    });//编辑导航
315
+  };
316
+
317
+  //导航操作  del:删除 edit: 编辑 enable:是否启用
318
+  operateNav = (id, type) => {
319
+    this.setState({ submiting: true });
320
+    const { params } = this.state;
321
+    const { dispatch } = this.props;
322
+    let dis_type = '';
323
+    let param_data = {};
324
+    if (type == 'del') {
325
+      dis_type = 'pc_home/del_home_nav';
326
+      param_data = { navId: id };
327
+    } else if (type == 'edit') {
328
+      dis_type = 'pc_home/edit_home_nav';
329
+      param_data = id;
330
+    } else if (type == 'enable') {
331
+      dis_type = 'pc_home/switch_home_nav';
332
+      param_data = id;
333
+    }
334
+    dispatch({
335
+      type: dis_type,
336
+      payload: param_data,
337
+      callback: (res) => {
338
+        if (res.state == 200) {
339
+          sucTip(res.msg);
340
+          this.setState({
341
+            modalVisible: false,
342
+          });
343
+          this.sele_info = {};
344
+          this.get_list(params);
345
+        } else {
346
+          failTip(res.msg);
347
+        }
348
+        this.setState({ submiting: false });
349
+      },
350
+    });
351
+  };
352
+
353
+  //添加导航
354
+  addNav = () => {
355
+    let { addData, operateData } = this.state;
356
+    operateData = JSON.parse(JSON.stringify(addData));
357
+    for (let i in operateData) {
358
+      if (operateData[i].name == 'sort') {
359
+        operateData[i].rules = [{
360
+          required: true,
361
+          message: `${sldComLanguage('排序必填')}`,//排序必填
362
+        }, { validator: (rule, value, callback) => validatorNumbe(rule, value, callback) }];
363
+      } else if (operateData[i].name == 'linkData') {
364
+        operateData[i].sldChange = this.handleSeleLinkType;
365
+      }
366
+    }
367
+    this.setState({
368
+      modalVisible: true,
369
+      type: 'add',
370
+      title: `${sldComLanguage('添加导航')}`,
371
+      operateData,
372
+    });//添加导航
373
+  };
374
+
375
+  //获取数据列表
376
+  get_list = (params) => {
377
+    this.setState({ initLoading: true });
378
+    const { dispatch } = this.props;
379
+    dispatch({
380
+      type: 'pc_home/get_home_nav_list',
381
+      payload: params,
382
+      callback: (res) => {
383
+        this.setState({ initLoading: false });
384
+        if (res.state == 200) {
385
+          if (res.data.list.length == 0 && this.state.params.currentPage > 1) {
386
+            params.currentPage = params.currentPage - 1;
387
+            this.get_list(params);
388
+          } else {
389
+            this.setState({
390
+              data: res.data,
391
+            });
392
+          }
393
+        }
394
+      },
395
+    });
396
+  };
397
+
398
+  handleSelectRows = (rows, rowkeys) => {
399
+    this.setState({
400
+      selectedRows: rows,
401
+      selectedRowKeys: rowkeys,
402
+    });
403
+  };
404
+
405
+  handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
406
+    const { formValues } = this.state;
407
+    if (type == 'main') {
408
+      const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
409
+      pageSize = params.pageSize;
410
+      this.setState({ params });
411
+      this.get_list(params);
412
+    }
413
+  };
414
+
415
+
416
+//表格拖动
417
+  resizeTable = (index, size, type, data) => {
418
+    let datas = dragSldTableColumn(index, size, data);
419
+    this.setState({ [type]: datas });
420
+  };
421
+
422
+
423
+  sldHandleCancle = () => {
424
+    this.setState({ modalVisible: false });
425
+  };
426
+
427
+  sldHandleConfirm = (val) => {
428
+    const { type } = this.state;
429
+    const { dispatch } = this.props;
430
+    this.setState({ submiting: true });
431
+    val.data = JSON.stringify({
432
+      link_type: val.linkData,
433
+      link_value: val.link_value,
434
+      info: this.sele_info,
435
+    });
436
+    delete val.link_type;
437
+    delete val.link_value;
438
+    delete val.linkData;
439
+    if (type == 'edit') {
440
+      val.navId = this.cur_edit_id;
441
+      this.operateNav(val, 'edit');
442
+    } else {
443
+      dispatch({
444
+        type: 'pc_home/add_home_nav',
445
+        payload: val,
446
+        callback: (res) => {
447
+          if (res.state == 200) {
448
+            sucTip(res.msg);
449
+            this.get_list({ pageSize: pageSize });
450
+            this.sele_info = {};
451
+            this.setState({
452
+              modalVisible: false,
453
+            });
454
+          } else {
455
+            failTip(res.msg);
456
+          }
457
+          this.setState({ submiting: false });
458
+        },
459
+      });
460
+    }
461
+  };
462
+
463
+  //搜索
464
+  sldSearch = (val) => {
465
+    this.setState({
466
+      formValues: { navName: val },
467
+      params: { pageSize: pageSize }
468
+    });
469
+    this.get_list({ pageSize: pageSize, navName: val });
470
+  };
471
+
472
+  //搜索框内容的变化
473
+  sldSearChange = (val) => {
474
+    this.setState({
475
+      search_con: val.target.value,
476
+    });
477
+  };
478
+
479
+  //清空搜索内容
480
+  sldSearClear = () => {
481
+    this.setState({
482
+      search_con: '',
483
+    });
484
+    this.sldSearch('');
485
+  };
486
+
487
+  //商品/分类/专题选中事件
488
+  seleSku = (val) => {
489
+    let { operateData, link_type } = this.state;
490
+    for (let i in operateData) {
491
+      if (operateData[i].name == 'link_value') {
492
+        if (link_type == 'goods') {
493
+          operateData[i].initialValue = val.goodsName;
494
+          this.sele_info.id = val.goodsId;
495
+          this.sele_info.gid = val.defaultProductId;
496
+          this.sele_info.defaultProductId = val.defaultProductId;
497
+        } else if (link_type == 'category') {
498
+          operateData[i].initialValue = val.categoryName;
499
+          this.sele_info.id = val.categoryId;
500
+          this.sele_info.categoryId = val.categoryId;
501
+          this.sele_info.grade = val.grade;
502
+        } else if (link_type == 'topic') {
503
+          operateData[i].initialValue = val.decoName;
504
+          this.sele_info.id = val.decoId;
505
+          this.sele_info.decoId = val.decoId;
506
+        }
507
+        break;
508
+      }
509
+    }
510
+    this.setState({ operateData, link_type: '' });
511
+  };
512
+
513
+  //商品/分类/专题取消事件
514
+  sldHandleLinkCancle = () => {
515
+    let { operateData } = this.state;
516
+    operateData = operateData.filter(item => item.name != 'link_value');
517
+    for (let i in operateData) {
518
+      if (operateData[i].name == 'link_type') {
519
+        operateData[i].initialValue = 'topic';
520
+        break;
521
+      }
522
+    }
523
+    this.sele_info = {};
524
+    this.setState({ operateData, link_type: '' });
525
+  };
526
+
527
+  render() {
528
+    const { selectedRows, columns, initLoading, data, submiting, operateData, modalVisible, title, search_con, link_type } = this.state;
529
+    return (
530
+      <div className={global.common_page} style={{ flex: 1 }}>
531
+        <SldComHeader
532
+          type={2}
533
+          title={sldComLanguage('首页导航设置')}//首页导航设置
534
+          tip_title={sldComLanguage('首页导航设置')}
535
+          tip_data={[`${sldComLanguage('序号越小,显示越靠前')}`, `${sldComLanguage('PC商城首页展示一行,超出部分不展示,需要根据页面效果调整展示的数据')}`]}
536
+        />
537
+        <div className={global.operate_bg}>
538
+          {sldIconBtn(() => this.addNav(), `${sldComLanguage('添加导航')}`, 7, 7)}{/*添加导航*/}
539
+          {/*请输入导航名称   搜索*/}
540
+          {sldSearchValClear(`${sldComLanguage('请输入')}${sldComLanguage('导航名称')}`, 291, this.sldSearch, `${sldComLanguage('搜索')}`, search_con, this.sldSearChange, this.sldSearClear, 65)}
541
+        </div>
542
+        <Spin spinning={initLoading}>
543
+          {/*标准表格-start*/}
544
+          <StandardTable
545
+            selectedRows={selectedRows}
546
+            data={data}
547
+            rowKey={'navId'}
548
+            isCheck={false}
549
+            columns={columns}
550
+            onSelectRow={this.handleSelectRows}
551
+            onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
552
+            onSldHandleSeleRow={this.onSldHandleSeleRow}
553
+            resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
554
+            isColumnResize={true}
555
+          />
556
+          {/*标准表格-end*/}
557
+
558
+        </Spin>
559
+        {/*新增/编辑对话框-start*/}
560
+        <SldModal
561
+          title={title}
562
+          submiting={submiting}
563
+          width={500}
564
+          modalVisible={modalVisible}
565
+          sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
566
+          sldHandleCancle={this.sldHandleCancle}
567
+          formItemLayoutModal={formItemLayoutModal}
568
+          content={operateData}
569
+        />
570
+        {/*新增/编辑对话框-end*/}
571
+        <SldSelGoodsSingleDiy link_type={link_type} seleSku={this.seleSku} sldHandleCancle={this.sldHandleLinkCancle}/>
572
+      </div>
573
+
574
+    );
575
+  }
576
+}

+ 89 - 0
admin/src/pages/pcdecorate/home/tpl_lists.js

@@ -0,0 +1,89 @@
1
+/*
2
+* 模板列表页面
3
+* */
4
+import { connect } from 'dva/index';
5
+import React, { Component } from 'react';
6
+import { Form } from 'antd';
7
+import {
8
+	sldLlineRtextAddGoodsAddMargin,
9
+	getSldEmptyH,
10
+	list_com_page_more,
11
+	sldComLanguage,
12
+} from '@/utils/utils';
13
+import global from '../../../global.less';
14
+import diy_page from '../diy_page.less';
15
+import styles from '../pcdecorate.less';
16
+import { Scrollbars } from 'react-custom-scrollbars';
17
+
18
+let pageSize = list_com_page_more;
19
+let sthis = '';
20
+let getFieldDecorator_new = '';
21
+@connect(({ pc_home }) => ({
22
+	pc_home,
23
+}))
24
+@Form.create()
25
+export default class Tpl_lists extends Component {
26
+	constructor(props) {
27
+		super(props);
28
+		sthis = this;
29
+		const {
30
+			form: { getFieldDecorator },
31
+		} = props;
32
+		getFieldDecorator_new = getFieldDecorator;
33
+		this.state = {
34
+			data: { list: [], pagination: {} },
35
+		};
36
+	}
37
+
38
+	componentDidMount() {
39
+		this.get_list();
40
+	}
41
+
42
+	componentWillUnmount() {
43
+
44
+	}
45
+
46
+	//获取模板列表
47
+	get_list = () => {
48
+		let { data } = this.state;
49
+		const { dispatch } = this.props;
50
+		dispatch({
51
+			type: 'pc_home/get_tpl_list',
52
+			payload: { pageSize: pageSize },
53
+			callback: (res) => {
54
+				if (res.state == 200) {
55
+					data = res.data;
56
+				}
57
+				this.setState({ data });
58
+			},
59
+		});
60
+	};
61
+
62
+	render() {
63
+		const { data } = this.state;
64
+		return (
65
+			<div className={`${global.common_page} ${styles.allow_show_edit}`}>
66
+				{sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('模板列表')}`, 0, 0, 10)}{/*模板列表*/}
67
+				{getSldEmptyH(10)}
68
+				<Scrollbars autoHeight
69
+							autoHeightMin={50}
70
+							autoHeightMax={document.body.clientHeight - 100}>
71
+					<div className={global.flex_com_row_wrap}>
72
+						{data.list!=null&&data.list.length > 0 &&
73
+						data.list.map(val => (
74
+							<div key={val.id} className={`${global.flex_com_column} ${diy_page.tpl_list_item}`}>
75
+              <span className={`${diy_page.img_wrap}`}>
76
+                    <img src={val.image}/>
77
+              </span>
78
+								<span className={diy_page.title}>{val.name}</span>
79
+								<span className={diy_page.desc}>{val.desc}</span>
80
+							</div>
81
+						))
82
+						}
83
+					</div>
84
+          {getSldEmptyH(40)}
85
+				</Scrollbars>
86
+			</div>
87
+		);
88
+	}
89
+}

+ 160 - 0
admin/src/pages/pcdecorate/models/pc_home.js

@@ -0,0 +1,160 @@
1
+import { sldCommonService } from '@/utils/utils';
2
+
3
+export default {
4
+	namespace: 'pc_home',
5
+	state: {
6
+		loading: false,//加载状态
7
+		data: {
8
+			list: [],
9
+			pagination: {},
10
+		},
11
+	},
12
+
13
+	effects: {
14
+	  //slodon_获取pc首页弹层广告
15
+		* get_modal_adv({ payload, callback }, { call }) {
16
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/pcFirstAdv/get');
17
+			if (callback) callback(response);
18
+		},
19
+		//slodon_更新pc首页弹层广告
20
+		* save_modal_adv({ payload, callback }, { call }) {
21
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcFirstAdv/update');
22
+			if (callback) callback(response);
23
+		},
24
+		//slodon_获取mall端装修模板类型列表
25
+		* get_tpl_type_list({ payload, callback }, { call }) {
26
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/tplPc/type/list');
27
+			if (callback) callback(response);
28
+		},
29
+		//slodon_获取mall端装修模板列表
30
+		* get_tpl_list({ payload, callback }, { call }) {
31
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/tplPc/list');
32
+			if (callback) callback(response);
33
+		},
34
+		//slodon_添加mall端装修实例化模板数据
35
+		* add_instance_tpl({ payload, callback }, { call }) {
36
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/tplPc/data/add');
37
+			if (callback) callback(response);
38
+		},
39
+		//slodon_修改mall端装修实例化模板数据
40
+		* edit_instance_tpl({ payload, callback }, { call }) {
41
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/tplPc/data/update');
42
+			if (callback) callback(response);
43
+		},
44
+		//slodon_获取mall端装修实例化模板数据列表
45
+		* get_tpl_instance_list({ payload, callback }, { call }) {
46
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/tplPc/data/list');
47
+			if (callback) callback(response);
48
+		},
49
+		//slodon_删除mall端装修实例化模板数据
50
+		* del_instance_tpl({ payload, callback }, { call }) {
51
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/tplPc/data/del');
52
+			if (callback) callback(response);
53
+		},
54
+		//slodon_启/停用mall端装修实例化模板数据
55
+		* enable_instance_tpl({ payload, callback }, { call }) {
56
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/tplPc/data/isEnable');
57
+			if (callback) callback(response);
58
+		},
59
+		//slodon_修改mall端装修实例化模板数据
60
+		* save_instance_tpl_data({ payload, callback }, { call }) {
61
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/tplPc/data/update');
62
+			if (callback) callback(response);
63
+		},
64
+		//slodon_获取mall端装修页列表
65
+		* get_diy_page_list({ payload, callback }, { call }) {
66
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/pcDeco/list');
67
+			if (callback) callback(response);
68
+		},
69
+		//slodon_添加mall端装修页
70
+		* add_diy_page({ payload, callback }, { call }) {
71
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcDeco/add');
72
+			if (callback) callback(response);
73
+		},
74
+		//slodon_修改mall端装修页
75
+		* edit_diy_page({ payload, callback }, { call }) {
76
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcDeco/update');
77
+			if (callback) callback(response);
78
+		},
79
+		//slodon_删除mall端装修页
80
+		* del_diy_page({ payload, callback }, { call }) {
81
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcDeco/del');
82
+			if (callback) callback(response);
83
+		},
84
+		//slodon_启用/禁用mall端装修页
85
+		* enable_diy_page({ payload, callback }, { call }) {
86
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcDeco/isEnable');
87
+			if (callback) callback(response);
88
+		},
89
+		//slodon_获取mall端装修页详细数据
90
+		* get_diy_page_detial({ payload, callback }, { call }) {
91
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/pcDeco/display');
92
+			if (callback) callback(response);
93
+		},
94
+		//slodon_获取模板类型下的实例化模板列表
95
+		* get_tpl_instance_list_allow_use({ payload, callback }, { call }) {
96
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/tplPc/data/list');
97
+			if (callback) callback(response);
98
+		},
99
+		//slodon_复制mall端实例化模板
100
+		* copy_instance_tpl({ payload, callback }, { call }) {
101
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/tplPc/data/copy');
102
+			if (callback) callback(response);
103
+		},
104
+		//slodon_复制mall端装修页
105
+		* copy_diy_page({ payload, callback }, { call }) {
106
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcDeco/copy');
107
+			if (callback) callback(response);
108
+		},
109
+		//slodon_修改mall端装修页
110
+		* save_diy_page_data({ payload, callback }, { call }) {
111
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/pcDeco/update');
112
+			if (callback) callback(response);
113
+		},
114
+		//slodon_获取首页导航列表
115
+		* get_home_nav_list({ payload, callback }, { call }) {
116
+			const response = yield call(sldCommonService, payload, 'get', 'v3/system/admin/navigation/list');
117
+			if (callback) callback(response);
118
+		},
119
+		//slodon_新增首页导航
120
+		* add_home_nav({ payload, callback }, { call }) {
121
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/navigation/add');
122
+			if (callback) callback(response);
123
+		},
124
+		//slodon_编辑首页导航
125
+		* edit_home_nav({ payload, callback }, { call }) {
126
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/navigation/update');
127
+			if (callback) callback(response);
128
+		},
129
+    //slodon_首页导航_开关
130
+		* switch_home_nav({ payload, callback }, { call }) {
131
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/navigation/isShow');
132
+			if (callback) callback(response);
133
+		},
134
+		//slodon_删除首页导航
135
+		* del_home_nav({ payload, callback }, { call }) {
136
+			const response = yield call(sldCommonService, payload, 'post', 'v3/system/admin/navigation/del');
137
+			if (callback) callback(response);
138
+		},
139
+    //slodon_获取页脚列表
140
+    * get_home_footer_list({ payload, callback }, { call, put }) {
141
+      const response = yield call(sldCommonService, payload, 'get', 'v3/cms/admin/friendLink/list');
142
+      if (callback) callback(response);
143
+    },
144
+    //slodon_添加页脚
145
+    * add_home_footer({ payload, callback }, { call, put }) {
146
+      const response = yield call(sldCommonService, payload, 'post', 'v3/cms/admin/friendLink/add');
147
+      if (callback) callback(response);
148
+    },
149
+    //slodon_编辑页脚
150
+    * edit_home_footer({ payload, callback }, { call, put }) {
151
+      const response = yield call(sldCommonService, payload, 'post', 'v3/cms/admin/friendLink/edit');
152
+      if (callback) callback(response);
153
+    },
154
+    //slodon_删除页脚
155
+    * del_home_footer({ payload, callback }, { call, put }) {
156
+      const response = yield call(sldCommonService, payload, 'post', 'v3/cms/admin/friendLink/del');
157
+      if (callback) callback(response);
158
+    },
159
+	},
160
+};

+ 419 - 0
admin/src/pages/pcdecorate/topic/topic_diy_page_lists.js

@@ -0,0 +1,419 @@
1
+import { connect } from 'dva/index';
2
+import Link from 'umi/link';
3
+import React, { Component, Fragment } from 'react';
4
+import { Input, Form, Spin, Switch } from 'antd';
5
+import {
6
+  sldIconBtn,
7
+  failTip,
8
+  sucTip,
9
+  dragSldTableColumn,
10
+  sldHandlePaginationData,
11
+  list_com_page_size_10,
12
+  sldLlineRtextAddGoodsAddMargin,
13
+  formItemLayoutModal,
14
+  sldSvgIcon,
15
+  getTableNum,
16
+  sldComLanguage,
17
+  sldPopConfirmDiy,
18
+  sldtbaleOpeBtnText,
19
+} from '@/utils/utils';
20
+import global from '../../../global.less';
21
+import StandardTable from '@/components/StandardTable';
22
+import SldModal from '@/components/SldModal/SldModal';
23
+import Search from '@/components/Search/Search';
24
+
25
+let pageSize = list_com_page_size_10;
26
+@connect(({ product }) => ({
27
+  product,
28
+}))
29
+@Form.create()
30
+export default class TopicDiyPageLists extends Component {
31
+  constructor(props) {
32
+    super(props);
33
+    this.state = {
34
+      formValues: {},//搜索条件
35
+      search_con: '',//搜索框内容
36
+      submiting: false,//按钮loading
37
+      loading: false,
38
+      data: {},
39
+      selectedRows: [],
40
+      selectedRowKeys: [],//selectedRows的key
41
+      modalVisible: false,
42
+      title: '',
43
+      type: 'add',//'add'新增  'edit'编辑
44
+      params: { pageSize: pageSize },//搜索条件
45
+      curData: {},//编辑的数据
46
+      search_data: [{
47
+        type: 'input',
48
+        label: `${sldComLanguage('页面名称')}`,
49
+        name: 'decoName',
50
+        placeholder: `${sldComLanguage('请输入页面名称')}`,
51
+      }, {
52
+        type: 'select',
53
+        label: `${sldComLanguage('使用状态')}`,//使用状态
54
+        name: 'isEnable',
55
+        placeholder: `${sldComLanguage('请选择')}${sldComLanguage('使用状态')}`,
56
+        sel_data: [
57
+          { key: '', name: `${sldComLanguage('全部')}` },//全部
58
+          { key: '1', name: `${sldComLanguage('启用')}` },//启用
59
+          { key: '0', name: `${sldComLanguage('禁用')}` },//禁用
60
+        ],
61
+      }],//搜索数据
62
+      addData: [{
63
+        type: 'input',
64
+        label: `${sldComLanguage('装修页面名称')}`,//装修页面名称
65
+        name: 'decoName',
66
+        placeholder: `${sldComLanguage('请输入')}${sldComLanguage('装修页面名称')}`,
67
+        initialValue: '',
68
+        maxLength:20,
69
+        rules: [{
70
+          required: true,
71
+          whitespace: true,
72
+          message: `${sldComLanguage('请输入')}${sldComLanguage('装修页面名称')}`,
73
+        }],
74
+      },
75
+      ],//modal框的数据
76
+      columns: [
77
+        {
78
+          title: ' ',
79
+          align: 'center',
80
+          dataIndex: 'decoId',
81
+          width: 50,
82
+          render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
83
+        },
84
+        {
85
+          title: `${sldComLanguage('名称')}`,//名称
86
+          align: 'center',
87
+          dataIndex: 'decoName',
88
+          width: 200,
89
+          render: (text, record) => (
90
+            <Fragment>
91
+              <div className={global.flex_com_space_between}>
92
+                {record.is_edit_name != undefined && record.is_edit_name
93
+                  ? <Input maxLength={20} onChange={(e) => this.edit_filed_con(record.decoId, 'decoName', e.target.value)}
94
+                           defaultValue={text}/>
95
+                  : <span>{text}</span>
96
+                }
97
+                {record.is_edit_name != undefined && record.is_edit_name
98
+                  ? <a className={global.flex_com_column} href={'javascript:void(0)'}
99
+                       style={{ marginLeft: 7 }}
100
+                       onClick={() => this.save_edit_filed(record, 'decoName', text)}>{sldSvgIcon('#FA6F1E', 16, 16, 'xuanzhong')}</a>
101
+                  : <a className={global.flex_com_column} href={'javascript:void(0)'}
102
+                       style={{ marginLeft: 7 }}
103
+                       onClick={() => this.edit_filed(record.decoId, 'is_edit_name', 'true')}>{sldSvgIcon('#FA6F1E', 16, 16, 'edit')}</a>
104
+                }
105
+              </div>
106
+            </Fragment>
107
+          ),
108
+        },
109
+        {
110
+          title: `${sldComLanguage('创建时间')}`,//创建时间
111
+          align: 'center',
112
+          dataIndex: 'createTime',
113
+          width: 150,
114
+        },
115
+        {
116
+          title: `${sldComLanguage('修改时间')}`,//修改时间
117
+          dataIndex: 'updateTime',
118
+          align: 'center',
119
+          width: 150,
120
+        },
121
+        {
122
+          title: `${sldComLanguage('启用状态')}`,//启用状态
123
+          align: 'center',
124
+          dataIndex: 'isEnable',
125
+          width: 100,
126
+          render: (text, record) => {
127
+            return <Switch checked={text == 1 ? true : false}
128
+                           onChange={(val) => this.handleSetEnable(val, record.decoId)}/>;
129
+          },
130
+        },
131
+        {
132
+          title: `${sldComLanguage('操作')}`,//操作
133
+          align: 'center',
134
+          width: 100,
135
+          render: (text, record) => (
136
+            <Fragment>
137
+              <Link to={{ pathname: `/pcdecorate_topic/topic_diy_page_lists_to_edit`, search: `?id=${record.decoId}` }}
138
+                    target="_blank">
139
+                {
140
+                  sldtbaleOpeBtnText('装修', null)
141
+                }
142
+              </Link>
143
+              <span className={global.splitLine}></span>
144
+              {/*删除后不可恢复,是否确定删除?*/}
145
+              {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateDiyPage(record.decoId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
146
+                sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
147
+              <span className={global.splitLine}></span>
148
+              {sldtbaleOpeBtnText(`${sldComLanguage('复制')}`, () => this.operateDiyPage(record.decoId, 'copy'))}{/*复制*/}
149
+            </Fragment>
150
+          ),
151
+        },
152
+
153
+      ],
154
+    };
155
+  }
156
+
157
+  componentDidMount() {
158
+    this.get_list({ pageSize: pageSize });
159
+  }
160
+
161
+  componentWillUnmount() {
162
+
163
+  }
164
+
165
+  //获取数据列表
166
+  get_list = (params) => {
167
+    this.setState({ loading: true });
168
+    const { dispatch } = this.props;
169
+    dispatch({
170
+      type: 'pc_home/get_diy_page_list',
171
+      payload: { ...params, decoType: 'topic' },
172
+      callback: (res) => {
173
+        this.setState({ loading: false });
174
+        if (res.state == 200) {
175
+          if (res.data.length == 0 && this.state.params.current > 1) {
176
+            params.current = params.current - 1;
177
+            this.get_list(params);
178
+          } else {
179
+            this.setState({
180
+              data: res.data,
181
+            });
182
+          }
183
+        }
184
+      },
185
+    });
186
+  };
187
+
188
+  handleSelectRows = (rows, rowkeys) => {
189
+    this.setState({
190
+      selectedRows: rows,
191
+      selectedRowKeys: rowkeys,
192
+    });
193
+  };
194
+
195
+  handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
196
+    const { formValues } = this.state;
197
+    const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
198
+    pageSize = params.pageSize;
199
+    this.setState({
200
+      params: params,
201
+    });
202
+    this.get_list(params);
203
+  };
204
+
205
+  //保存表格列的内容
206
+  save_edit_filed = (record, filed, value) => {
207
+    let { data } = this.state;
208
+    const { dispatch } = this.props;
209
+    dispatch({
210
+      type: 'pc_home/edit_diy_page',
211
+      payload: { decoId: record.decoId, decoName: record.decoName },
212
+      callback: (res) => {
213
+        if (res.state == 200) {
214
+          sucTip(res.msg);
215
+          let tmp = data.list.filter(item => item.id == record.id)[0];
216
+          tmp[filed] = value;
217
+          tmp.is_edit_name = false;
218
+          this.setState({ data });
219
+        } else {
220
+          failTip(res.msg);
221
+        }
222
+      },
223
+    });
224
+
225
+  };
226
+
227
+  //编辑表格列的内容
228
+  edit_filed_con = (id, filed, value) => {
229
+    let { data } = this.state;
230
+    let tmp = data.list.filter(item => item.decoId == id)[0];
231
+    tmp[filed] = value;
232
+    this.setState({ data });
233
+  };
234
+
235
+  //编辑表格列内容
236
+  edit_filed = (id, filed, flag) => {
237
+    let { data } = this.state;
238
+    let tmp = data.list.filter(item => item.decoId == id)[0];
239
+    tmp[filed] = flag;
240
+    this.setState({ data });
241
+  };
242
+
243
+  //新增数据
244
+  addData = () => {
245
+    let { addData } = this.state;
246
+    for (let i in addData) {
247
+      addData[i].initialValue = '';
248
+    }
249
+    this.setState({
250
+      modalVisible: true,
251
+      type: 'add',
252
+      title: `${sldComLanguage('新增')}${sldComLanguage('装修页面')}`,
253
+      addData: addData,
254
+    });//新增装修页面
255
+  };
256
+
257
+  //是否启用
258
+  handleSetEnable = (val, id) => {
259
+    this.operateDiyPage({ decoId: id, isEnable: val }, 'enable');
260
+  };
261
+
262
+  //编辑数据
263
+  editData = (val) => {
264
+    let { addData } = this.state;
265
+    addData.map(item => {
266
+      item.initialValue = val[item.name];
267
+    });
268
+    this.setState({
269
+      modalVisible: true,
270
+      type: 'edit',
271
+      title: `${sldComLanguage('编辑')}${sldComLanguage('装修页面')}`,
272
+      addData: addData,
273
+      curData: val,
274
+    });//编辑装修页面
275
+  };
276
+
277
+  //装修页面操作,edit 编辑,del 删除,enable 启用/禁用, copy 复制
278
+  operateDiyPage = (id, type) => {
279
+    const { dispatch } = this.props;
280
+    let dis_type = '';
281
+    let params = { decoId: id };
282
+    if (type == 'edit') {
283
+      dis_type = 'pc_home/edit_diy_page';
284
+      params = id;
285
+    } else if (type == 'del') {
286
+      dis_type = 'pc_home/del_diy_page';
287
+    } else if (type == 'copy') {
288
+      dis_type = 'pc_home/copy_diy_page';
289
+    } else if (type == 'enable') {
290
+      dis_type = 'pc_home/enable_diy_page';
291
+      params = id;
292
+    }
293
+    dispatch({
294
+      type: dis_type,
295
+      payload: params,
296
+      callback: (res) => {
297
+        this.setState({ submiting: false });
298
+        if (res.state == 200) {
299
+          sucTip(res.msg);
300
+          this.get_list(this.state.params);
301
+          this.setState({
302
+            modalVisible: false,
303
+          });
304
+        } else {
305
+          failTip(res.msg);
306
+        }
307
+      },
308
+    });
309
+  };
310
+
311
+  sldHandleConfirm = (val) => {
312
+    const { curData, type } = this.state;
313
+    const { dispatch } = this.props;
314
+    this.setState({ submiting: true });
315
+    val.decoType = 'topic';
316
+    if (type == 'edit') {
317
+      val.decoId = curData.decoId;
318
+      this.operateDiyPage(val, 'edit');
319
+    } else {
320
+      dispatch({
321
+        type: 'pc_home/add_diy_page',
322
+        payload: val,
323
+        callback: (res) => {
324
+          this.setState({ submiting: false });
325
+          if (res.state == 200) {
326
+            sucTip(res.msg);
327
+            this.get_list({ pageSize: pageSize });
328
+            this.setState({
329
+              modalVisible: false,
330
+            });
331
+          } else {
332
+            failTip(res.msg);
333
+          }
334
+        },
335
+      });
336
+    }
337
+  };
338
+
339
+  sldHandleCancle = () => {
340
+    this.setState({ modalVisible: false });
341
+  };
342
+
343
+  //搜索事件
344
+  search = (data) => {
345
+    const values = { ...data };
346
+    for (let i in values) {
347
+      if (values[i] == '') {
348
+        delete values[i];
349
+      }
350
+    }
351
+    this.setState({
352
+      formValues: values,
353
+      params: { pageSize: pageSize }
354
+    });
355
+    this.get_list({ pageSize: pageSize, ...values });
356
+  };
357
+  //搜索重置事件
358
+  seaReset = () => {
359
+    //搜索条件置为空
360
+    this.setState({
361
+      formValues: {},
362
+      params: { pageSize: pageSize }
363
+    });
364
+    this.get_list({ pageSize: pageSize });
365
+  };
366
+
367
+  //表格拖动
368
+  resizeTable = (index, size, type, data) => {
369
+    let datas = dragSldTableColumn(index, size, data);
370
+    this.setState({ [type]: datas });
371
+  };
372
+
373
+  render() {
374
+    const { selectedRows, modalVisible, title, addData, columns, submiting, data, loading, search_data } = this.state;
375
+    return (
376
+      <div className={global.common_page}>
377
+        {sldLlineRtextAddGoodsAddMargin('#FA6F1E', `${sldComLanguage('专题装修列表管理')}`, 0, 0, 10)}
378
+        <Spin spinning={loading}>
379
+          <div className={global.tableListForm}>
380
+            <Search search_data={search_data}
381
+                    seaSubmit={(data) => this.search(data)} seaReset={() => this.seaReset()}/>
382
+          </div>
383
+          {/*公共功能条-start*/}
384
+          <div className={global.operate_bg}>
385
+            {sldIconBtn(() => this.addData(), `${sldComLanguage('新增')}`, 7, 7, 15, 15, 4, 'jia', '#FA6F1E')}{/*新增*/}
386
+          </div>
387
+          {/*公共功能条-end*/}
388
+          {/*标准表格-start*/}
389
+          <StandardTable
390
+            selectedRows={selectedRows}
391
+            data={data}
392
+            rowKey={'decoId'}
393
+            isCheck={false}
394
+            columns={columns}
395
+            onSelectRow={this.handleSelectRows}
396
+            onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
397
+            resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
398
+            isColumnResize={true}
399
+          />
400
+          {/*标准表格-end*/}
401
+          {/*新增/编辑对话框-start*/}
402
+          <SldModal
403
+            width={600}
404
+            title={title}
405
+            sldSeleSingleRow={true}
406
+            submiting={submiting}
407
+            modalVisible={modalVisible}
408
+            sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
409
+            sldHandleCancle={this.sldHandleCancle}
410
+            formItemLayoutModal={formItemLayoutModal}
411
+            content={addData}
412
+          />
413
+          {/*新增/编辑对话框-end*/}
414
+        </Spin>
415
+
416
+      </div>
417
+    );
418
+  }
419
+}

+ 26 - 1
admin/src/pages/sysset/base/payment.js

@@ -34,7 +34,7 @@ export default class Payment extends Component {
34 34
 			mobile_data: {},
35 35
 			curData: {},//当前编辑的对象信息
36 36
 			pc_data: {},
37
-			activeTabKey: '2',
37
+			activeTabKey: '1',
38 38
 			columns: [
39 39
 				{
40 40
 					title: ' ',
@@ -101,9 +101,18 @@ export default class Payment extends Component {
101 101
 		} else if (val.name == 'wxpay_is_enable_pc') {
102 102
 			//PC微信支付
103 103
 			dis_type = 'sldsetting/get_pc_weixin_info';
104
+		} else if (val.name == 'alipay_is_enable_h5') {
105
+			//支付宝移动支付
106
+			dis_type = 'sldsetting/get_alipay_mobile';
104 107
 		} else if (val.name == 'wxpay_is_enable_miniapp') {
105 108
 			//微信小程序支付
106 109
 			dis_type = 'sldsetting/get_wxpay_miniapp';
110
+		} else if (val.name == 'wxpay_is_enable_app') {
111
+			//微信app支付
112
+			dis_type = 'sldsetting/get_wxpay_app';
113
+		} else if (val.name == 'wxpay_is_enable_h5') {
114
+			//微信h5支付
115
+			dis_type = 'sldsetting/get_wxpay_h5';
107 116
 		}
108 117
 		title = `${sldComLanguage('编辑')}` + val.payment + `${sldComLanguage('信息')}`;
109 118
 		dispatch({
@@ -246,6 +255,22 @@ export default class Payment extends Component {
246 255
 				{getSldEmptyH(10)}
247 256
 				<Spin spinning={initLoading}>
248 257
 					<Tabs activeKey={activeTabKey} onChange={(key) => this.changeSldTab(key)} type="card">
258
+						<TabPane tab={sldComLanguage('PC支付')} key="1">
259
+							{showMoreHelpTip(``, sld_need_update_setting(),8,sld_show_tip)}{/*操作提示*/}
260
+							{getSldEmptyH(8)}
261
+							<StandardTable
262
+								sldpagination={false}
263
+								selectedRows={[]}
264
+								data={pc_data}
265
+								rowKey={'payment'}
266
+								isCheck={false}
267
+								columns={columns}
268
+								onSelectRow={this.handleSelectRows}
269
+								onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'bottom')}
270
+								resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
271
+								isColumnResize={true}
272
+							/>
273
+						</TabPane>
249 274
 						<TabPane tab={sldComLanguage('移动端支付')} key="2">
250 275
 							{showMoreHelpTip(``, sld_need_update_setting(),8,sld_show_tip)}{/*操作提示*/}
251 276
 							{getSldEmptyH(8)}

+ 2 - 2
admin/src/utils/sldconfig.js

@@ -1,9 +1,9 @@
1 1
 //slodon_配置服务器接口地址
2 2
 module.exports = {
3
-  // apiUrl: document.location.protocol+'//'+window.location.host + '/',
3
+  apiUrl: document.location.protocol+'//'+window.location.host + '/',
4 4
   // apiUrl: 'https://jbbcadmindev.slodon.cn/',
5 5
   // apiUrl: 'https://ad.eqbidding.com/',
6
-  apiUrl: 'http://localhost:8001/',
6
+  // apiUrl: 'http://localhost:8001/',
7 7
   uploadLimit: 20,//上传限制,单位M
8 8
   'specialFlag': window.location.host.indexOf('jbbcadmin.slodon.cn')+window.location.host.indexOf('localhost'),
9 9
 };