/* * 单图选择器 * */ import React, { Component, Fragment } from 'react'; import { connect } from 'dva'; import { Form, Select, Icon, Button, Input, Table, Upload, InputNumber, DatePicker, Switch, Radio, } from 'antd'; import global from '../../global.less'; import { sldTsvgBotText, sldBeforeUpload, sldComLanguage, getLocalStorageStingVal, isEmptyObject, } from '@/utils/utils'; import { diy_link_type, pc_home_modaladv_sele_data } from '@/utils/util_data'; import { apiUrl } from '@/utils/sldconfig.js'; import styles from '@/pages/decorate/pc/pcdecorate.less'; import SldSelGoodsSingleDiy from '@/components/SldSelGoodsSingleDiy'; import { Scrollbars } from 'react-custom-scrollbars'; const FormItem = Form.Item; const Option = Select.Option; const RadioGroup = Radio.Group; const { RangePicker } = DatePicker; let sthis = ''; @connect(({ product, global }) => ({ product, global, })) @Form.create() export default class SldHomeSetting extends Component { constructor(props) { super(props); sthis = this; const { form: { getFieldDecorator }, } = props; this.state = { source: '',//来源,主要处理特殊数据用 link_type: '',//当前链接的操作类型 img_width: 150,//图片的宽度 img_height: 150,//图片的高度 sele_index: 0,//当前选中的index selectedRowKeys: [], cur_data: [],//当前 modal_tip: [],//弹框提示内容 data: [{ key: 'img', name: '', value: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg', imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png', type: 'img', required: true, }, { key: 'link_type', name: `${sldComLanguage('操作')}` , value: '', type: 'link_type', }, ],//数据 columns: [{ align: 'right', width: 150, dataIndex: 'name', render: (text, record) => { return
{text} {record.required != undefined && record.required && * }
; }, }, { align: 'left', dataIndex: 'type', render: (text, record) => { let content = ''; if (record.type == 'img') { content =
800 ? 800 : this.state.img_width * 0.5, height: this.state.img_height == 0 ? 'auto' : (this.state.img_width * 0.5 > 800 ? (800 * this.state.img_height / this.state.img_width) : this.state.img_height * 0.5), }}> {record.value != '' ? : sldTsvgBotText('kehubiaoqian', '', 0, '', '', '#999', 30, 30, '#999') }
{sldComLanguage('此处要求宽度为')}{this.state.img_width}{sldComLanguage('像素、高度')}{this.state.img_height == 0 ? `${sldComLanguage('不限制')}` : this.state.img_height + `${sldComLanguage('像素')}`}{sldComLanguage('的图片;支持格式gif,jpg,png。')} this.setImg(info)} headers={{ Authorization: 'Bearer ' + getLocalStorageStingVal('sld_token') }} >
; } else if (record.type == 'link_type') { content =
; } else if (record.type == 'url') { content = {getFieldDecorator(`link_type`, { initialValue: record.value, rules: [{ required: true, whitespace: true, message: `${sldComLanguage('请输入链接地址')}` , }], })( this.handleFieldChange(e, 'url', 'link_value')} placeholder={`${sldComLanguage('请输入链接地址')}` }/>, )} ; } else if (record.type == 'keyword') { content = {getFieldDecorator(`keyword`, { initialValue: record.value, rules: [{ required: true, whitespace: true, message: `${sldComLanguage('请输入关键字')}` , }], })( this.handleFieldChange(e, 'keyword', 'link_value')} placeholder={`${sldComLanguage('请输入关键字')}` }/>, )} ; } else if (record.type == 'goods' || record.type == 'category' || record.type == 'topic') { content =
{record.value}
; } if (this.state.source != undefined) { //首页开屏图数据处理 if (this.state.source == 'home_modal_adv') { if (record.type == 'home_modal_adv_switch') { //弹出广告开关 content = {getFieldDecorator(`${record.type}`, { valuePropName: 'checked', initialValue: record.value, })( , )} ; } else if (record.type == 'home_modal_adv_radio') { //弹出方式 content = {getFieldDecorator(`${record.type}`, { valuePropName: 'checked', initialValue: record.value, })( , )} ; } } //首页轮播图数据处理 if (this.state.source == 'home_flash') { if (record.type == 'home_flash_title') { //标题 content = {getFieldDecorator(`home_flash_title`, { initialValue: record.value, rules: [{ required: true, whitespace: true, message: `${sldComLanguage('请输入标题')}` , }], })( this.handleFieldChange(e, 'home_flash_title', 'home_flash_title')} placeholder={`${sldComLanguage('请输入标题')}` }/>, )} ; } else if (record.type == 'home_flash_sort') { //排序 content = {getFieldDecorator(`home_flash_sort`, { initialValue: record.value, rules: [{ required: true, message: `${sldComLanguage('请输入排序')}` , }], })( this.handleFieldChange(e, 'home_flash_sort', 'home_flash_sort', 'inputnum')} placeholder={`${sldComLanguage('请输入排序')}` }/>, )} ; } else if (record.type == 'home_flash_range_picker') { //展示时间 content = {getFieldDecorator(`home_flash_range_picker`, { initialValue: record.value, // rules:[{ // required: true, // whitespace: true, // message: "请选择展示时间", // }] })( this.handleFieldChange(e, 'home_flash_range_picker', 'home_flash_range_picker', 'range_picker')} getCalendarContainer={(triggerNode)=>{ return triggerNode.parentNode }} />)} ; } } } return content; }, }], }; } first_flag = false; componentDidMount() { this.props.dispatch({ type: 'global/getLayoutCollapsed', }); } componentWillReceiveProps(nextProps, nextContext) { if (!nextProps.modalVisible && !this.props.modalVisible) { //防止别的模板发生变化,影响数据报错 return false; } if (!this.first_flag && !isEmptyObject(nextProps.content)) { let ope_data = nextProps.content.data; let tmp_info = []; tmp_info.push({ key: 'img', name: `${sldComLanguage('图片')}` , value: ope_data.imgUrl != undefined ? ope_data.imgUrl : '', imgPath: ope_data.imgPath != undefined ? ope_data.imgPath : '', type: 'img', required: true, }); tmp_info.push({ key: 'link_type', name: `${sldComLanguage('操作')}` , value: ope_data.link_type, type: 'link_type', }); if (ope_data.link_value != undefined && ope_data.link_value) { let tmp_info_new = { key: 'link_value', name: `${sldComLanguage('关键字')}` , value: ope_data.link_value, type: ope_data.link_type, info: ope_data.info != undefined ? ope_data.info : {}, required: true, }; if (ope_data.link_type == 'url') { tmp_info_new.name = `${sldComLanguage('链接地址')}` ; tmp_info_new.required = true; } else if (ope_data.link_type == 'keyword') { tmp_info_new.name = `${sldComLanguage('关键字')}` ; tmp_info_new.required = true; } else if (ope_data.link_type == 'goods') { tmp_info_new.name = `${sldComLanguage('商品名称')}` ; tmp_info_new.required = true; } else if (ope_data.link_type == 'category') { tmp_info_new.name = `${sldComLanguage('分类名称')}` ; tmp_info_new.required = true; } else if (ope_data.link_type == 'topic') { tmp_info_new.name = `${sldComLanguage('专题名称')}` ; tmp_info_new.required = true; } tmp_info.push(tmp_info_new); } //首页开屏图单独处理 if (nextProps.content.source != undefined && nextProps.content.source == 'home_modal_adv') { if (ope_data.show_switch != undefined) { tmp_info.push({ key: 'home_modal_adv_switch', type: 'home_modal_adv_switch', name: `${sldComLanguage('广告开关')}`, value: ope_data.show_switch, }); } if (ope_data.show_radio_sele != undefined) { tmp_info.push({ key: 'home_modal_adv_radio', type: 'home_modal_adv_radio', name: `${sldComLanguage('显示方式')}`, value: ope_data.show_radio_sele, }); } } //首页轮播图数据单独处理 if (nextProps.content.source != undefined && nextProps.content.source == 'home_flash') { //显示标题 if (ope_data.show_title != undefined) { tmp_info.push({ key: 'home_flash_title', type: 'home_flash_title', name: `${sldComLanguage('标题')}` , value: ope_data.show_title, required: true, }); } //显示排序 if (ope_data.sort != undefined) { tmp_info.push({ key: 'home_flash_sort', type: 'home_flash_sort', name: `${sldComLanguage('排序')}` , value: ope_data.sort + '', required: true, }); } //显示展示时间 if (ope_data.range_picker != undefined) { tmp_info.push({ key: 'home_flash_range_picker', type: 'home_flash_range_picker', name: `${sldComLanguage('展示时间')}` , value: ope_data.range_picker, required: true, }); } } this.first_flag = true; this.setState({ modal_tip: nextProps.modal_tip, data: tmp_info, img_width: nextProps.content.width, img_height: nextProps.content.height, source: nextProps.content.source != undefined ? nextProps.content.source : '', }); } } //上传图片 setImg = (info) => { let { data } = this.state; if (info.file.response != undefined) { let img_data = info.file.response; if (info.file.status != undefined && info.file.status != 'error') { if (img_data.state == 200) { data.map(item => { if (item.key == 'img') { item.value = img_data.data.url; item.imgPath = img_data.data.path; } }); } } this.setState({ data }); } }; //操作类型选择事件 sldHandSeleChange = (val) => { this.props.form.resetFields(); let { data } = this.state; let cur_data = []; for (let i in data) { if (data[i].key != 'link_value') { if (data[i].key == 'link_type') { data[i].value = val; } cur_data.push(data[i]); } } for (let i = 0; i < cur_data.length; i++) { if (cur_data[i].key == 'link_type') { if (val == 'url') { cur_data.splice(i + 1, 0, { key: 'link_value', name: `${sldComLanguage('链接地址')}` , value: '', type: 'url', required: true, }); } else if (val == 'keyword') { cur_data.splice(i + 1, 0, { key: 'link_value', name: `${sldComLanguage('关键字')}` , value: '', type: 'keyword', required: true, }); } else if (val == 'goods') { cur_data.splice(i + 1, 0, { key: 'link_value', name: `${sldComLanguage('商品名称')}` , value: '', info: {}, type: 'goods', required: true, }); } else if (val == 'category') { cur_data.splice(i + 1, 0, { key: 'link_value', name: `${sldComLanguage('分类名称')}` , value: '', info: {}, type: 'category', required: true, }); } else if (val == 'topic') { cur_data.splice(i + 1, 0, { key: 'link_value', name: `${sldComLanguage('专题名称')}` , value: '', info: {}, type: 'topic', required: true, }); } } } data = cur_data; this.setState({ data, link_type: val }); }; /* * input编辑事件 e为组件的值,type为数据的key,key为数据的key,com_type 为组件类型,不同的组件对数据的处理不一样 * com_type为input 则为e.target.value * com_type为inputnum 则为e * com_type为range_picker 则为moment对象 * */ handleFieldChange(e, type, key, com_type = '') { this.first_flag = true; let { data } = this.state; for (let i in data) { if (data[i].key == key) { let tmp_val = ''; if (com_type == 'inputnum') { tmp_val = e + ''; } else if (com_type == 'range_picker') { tmp_val = e;//moment 对象 } else { tmp_val = e.target.value; } data[i].value = tmp_val; } } this.setState({ data }); } //确定事件 sldConfirm = (e) => { this.props.form.validateFieldsAndScroll((err, values) => { if (!err) { //将数据组装,返回给上级页面 const { data, source } = this.state; let tmp_info = {}; for (let i in data) { if (data[i].key == 'img') { tmp_info.imgUrl = data[i].value; tmp_info.imgPath = data[i].imgPath; } else if (data[i].key == 'link_type') { tmp_info.link_type = data[i].value; tmp_info.link_value = ''; tmp_info.info = {}; } else if (data[i].key == 'link_value') { tmp_info.link_type = data[i].type; tmp_info.link_value = data[i].value; tmp_info.info = data[i].info; } if (source != undefined) { //首页轮播图数据处理 if (source == 'home_flash') { tmp_info.show_title = values.home_flash_title; tmp_info.sort = values.home_flash_sort; tmp_info.range_picker = values.home_flash_range_picker; } //首页开屏图数据处理 if (source == 'home_modal_adv') { tmp_info.show_switch = values.home_modal_adv_switch; tmp_info.show_radio_sele = values.home_modal_adv_radio; } } } this.props.sldHandleConfirm(tmp_info); this.sldCancle(); } }); }; //取消事件-清空表单 sldCancle = () => { this.first_flag = false; this.props.form.resetFields(); this.props.sldHandleCancle(); }; //关闭modal之后重置数据 closeReset = () => { this.props.form.resetFields(); }; //选择商品或者分类取消事件 sldHandleLinkCancle = () => { let { data } = this.state; let cur_data = []; for (let i in data) { if (data[i].key != 'link_value') { if (data[i].key == 'link_type') { data[i].value = ''; } cur_data.push(data[i]); } } data = cur_data; this.setState({ data, link_type: '' }); }; //商品或分类选中事件 seleSku = (val) => { let { data } = this.state; data.map(item => { if (item.type == 'goods') { item.value = val.goodsName; item.info = val; } else if (item.type == 'category') { item.value = val.categoryName; item.info = val; } else if (item.type == 'topic') { item.value = val.decoName; item.info = val; } }); this.setState({ data, link_type: '' }); }; render() { const { data, columns, link_type } = this.state; return
this.sldConfirm(e)} >
; } }