123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- /*
- * 通用的modal弹框,主要实现快捷添加,快捷搜索便添加的功能
- * 目前只用于添加类型时选择规格和品牌 分类里面选择商品类型
- * 多选
- * */
- import { connect } from 'dva/index';
- import React, { Component } from 'react';
- import { Form } from 'antd';
- import {
- formItemLayoutModal,
- sldHandlePaginationData,
- sldComLanguage
- } from '@/utils/utils';
- import {
- comm_cur_page_global,
- column_client_tags_search,
- column_spec_list,
- column_brand_list,
- column_attr_list,
- type_list_column,
- enterprise_list_column,
- } from '@/utils/util_data';
- import global from '@/global.less';
- import SldModal from '@/components/SldModal/SldModal';
- let pageSize = 10;
- let sthis = '';
- @connect(({ product }) => ({
- product,
- }))
- @Form.create()
- export default class CommonSeleMore extends Component {
- constructor(props) {
- comm_cur_page_global.cur = 1;
- super(props);
- sthis = this;
- this.state = {
- show_flag:false,//是否显示表格
- submiting: false,//按钮loading
- selectedRows: [],
- selectedRowKeys: [],//selectedRows的key
- modalVisible: false,
- modalTableVisible: props.modalTableVisible,//列表展示对话框是否显示
- data: {},//数据
- loading: false,//是否加载中
- title: `${sldComLanguage('新增商品单位')}`,//新增商品单位
- tableTitle: props.tableTitle,
- tablesldSAddTitle: props.tablesldSAddTitle,//input后缀添加modal的标题
- params: { pageSize: pageSize },//搜索条件
- curData: {},//编辑的数据
- addData: [],//要渲染的modal的数据
- formValues: {},//搜索条件
- modalTableSeleData: {},//表格里面选中的值
- search_modal_width: props.search_modal_width,//modal宽度、
- addTableData: [{
- type: 'modal_table_sele',
- search: this.modalSearch,
- searchCon: this.modalSearchCon,
- table: {},
- isCheck: true,
- columns: column_client_tags_search,
- rowKey: 'unit_id',
- search_value: '',//搜索内容
- handleSelectRows: this.handleSelectRows,
- onChange: this.handleTablePagination,
- onSldHandleSeleRow: this.onSldHandleSeleRow,
- selectedRows: [],
- selectedRowKeys: [],
- add: false,
- topSeaplaceHolder:'',//搜索框的placeholder
- searchClear:this.sldSearClear,//清除搜索框内容的事件
- extraProps:{},//额外的属性
- }],//列表对话框展示的数据
- };
- }
- cur_operate_type = this.props.cur_operate_type;//点击类型,很重要,根据这个识别点击类型,然后获取数据
- type = this.props.cur_type;//show_list表示表格搜索,add表示添加数据
- flag = 1;//是否走componentWillReceiveProps方法,0不走,1走
- modalTableSeleData = {};//当前选中的数据
- selectedRows = [];//选中的行数据
- selectedRowKeys = [];//选中的行id
- componentDidMount() {
- this.initData();
- }
- componentWillReceiveProps(props) {
- this.setState({
- modalTableVisible: props.modalTableVisible,
- });
- if ((!this.props.modalTableVisible) && props.modalTableVisible) {
- this.flag = 1;
- }
- if (this.flag == 1) {
- let { addTableData } = this.state;
- if (props.modalTableVisible) {
- this.flag = 0;
- } else {
- this.flag = 1;
- }
- addTableData[0].selectedRows = props.selectedRows;
- addTableData[0].selectedRowKeys = props.selectedRowKeys;
- if(props.extraProps!=undefined){
- addTableData[0].extraProps = props.extraProps;
- }
- this.selectedRows = props.selectedRows;
- this.selectedRowKeys = props.selectedRowKeys;
- this.setState({
- tableTitle: props.tableTitle,
- modalTableVisible: props.modalTableVisible,
- search_modal_width: props.search_modal_width,
- addTableData: addTableData,
- tablesldSAddTitle: props.tablesldSAddTitle,
- });
- this.cur_operate_type = props.cur_operate_type,
- this.type = props.cur_type;
- this.initData();
- }
- }
- initData = () => {
- if (this.type == 'show_list') {
- this.get_list({ pageSize: pageSize });
- }
- };
- handleSelectRows = (rows, rowkeys) => {
- //针对翻页无法保存选择的行数据处理
- let selectedRows = this.selectedRows;
- let selectedRowKeys = this.selectedRowKeys;
- let pre_sele_rows_keyarray = [];
- let main_key = 'id';
- if(this.cur_operate_type == 'search_spec_more'){
- main_key = 'specId';
- }else if(this.cur_operate_type == 'search_brand_more'){
- main_key = 'brandId';
- }else if(this.cur_operate_type == 'search_attr_more'){
- main_key = 'attributeId';
- }else if(this.cur_operate_type == 'search_goods_type'){
- main_key = 'typeId';
- }
- for (let i in selectedRows) {
- pre_sele_rows_keyarray.push(selectedRows[i][main_key]);
- }
- //去掉的话要删掉行数据
- for (let i in selectedRowKeys) {
- if (rowkeys.indexOf(selectedRowKeys[i]) == -1) {
- selectedRows = selectedRows.filter(item => item[main_key] != selectedRowKeys[i]);
- }
- }
- //没有的话追加行数据
- for (let i in rowkeys) {
- if (pre_sele_rows_keyarray.indexOf(rowkeys[i]) == -1) {
- let cur_row = rows.filter(item => item[main_key] == rowkeys[i])[0];
- selectedRows.push(cur_row);
- }
- }
- let { addTableData } = this.state;
- addTableData[0].selectedRows = selectedRows;
- addTableData[0].selectedRowKeys = rowkeys;
- this.setState({
- addTableData: addTableData,
- });
- this.selectedRows = selectedRows;//选中的行数据
- this.selectedRowKeys = rowkeys;//选中的行id
- };
- //清空选中的数据
- clearSeleData = () => {
- this.selectedRows = [];//选中的行数据
- this.selectedRowKeys = [];//选中的行id
- let { addTableData } = this.state;
- addTableData[0].selectedRows = [];
- addTableData[0].selectedRowKeys = [];
- this.setState({
- addTableData: addTableData,
- });
- };
- //选中单行的操作
- onSldHandleSeleRow = (record) => {
- this.modalTableSeleData = record;
- };
- //获取数据列表
- get_list = (params) => {
- this.flag = 0;
- const { dispatch } = this.props;
- let { addTableData } = this.state;
- if (this.cur_operate_type == 'search_spec_more') {
- //获取规格列表
- ; dispatch({
- type: 'product/get_goods_spec_list',
- payload: {...params,state:1},
- callback: (res) => {
- addTableData[0].table = res.data;
- addTableData[0].type = 'modal_table_sele';
- addTableData[0].isCheck = true;
- addTableData[0].columns = column_spec_list();
- addTableData[0].rowKey = 'specId';
- addTableData[0].topSeaplaceHolder = `${sldComLanguage('请输入规格名称')}`;//搜索框的placeholder
- this.setState({
- addTableData: addTableData,
- show_flag:true,
- });
- },
- });
- } else if (this.cur_operate_type == 'search_brand_more') {
- //获取品牌列表
- dispatch({
- type: 'product/get_brand_lists',
- payload: params,
- callback: (res) => {
- addTableData[0].table = res.data;
- addTableData[0].type = 'modal_table_sele';
- addTableData[0].isCheck = true;
- addTableData[0].columns = column_brand_list();
- addTableData[0].rowKey = 'brandId';
- addTableData[0].topSeaplaceHolder = `${sldComLanguage('请输入品牌名称')}`;//搜索框的placeholder
- this.setState({
- addTableData: addTableData,
- show_flag:true,
- });
- },
- });
- } else if (this.cur_operate_type == 'search_attr_more') {
- //获取检索属性列表
- dispatch({
- type: 'product/get_search_attr_lists',
- payload: {...params,isShow:1},
- callback: (res) => {
- addTableData[0].table = res.data;
- addTableData[0].type = 'modal_table_sele';
- addTableData[0].isCheck = true;
- addTableData[0].columns = column_attr_list();
- addTableData[0].rowKey = 'attributeId';
- addTableData[0].topSeaplaceHolder = `${sldComLanguage('请输入属性名称')}`;//搜索框的placeholder
- this.setState({
- addTableData: addTableData,
- show_flag:true,
- });
- },
- });
- } else if (this.cur_operate_type == 'search_goods_type') {
- dispatch({
- type: 'product/get_goods_type_list',
- payload: { ...params },
- callback: (res) => {
- addTableData[0].table = res.data;
- addTableData[0].type = 'modal_table_sele';
- addTableData[0].isCheck = false;
- addTableData[0].columns = type_list_column();
- addTableData[0].rowKey = 'typeId';
- addTableData[0].add = false;
- addTableData[0].topSeaplaceHolder = `${sldComLanguage('请输入类型名称')}`;//搜索框的placeholder
- this.setState({
- addTableData: addTableData,
- show_flag:true,
- });
- },
- });
- } else if (this.cur_operate_type == 'search_product_enterprise') {
- //选择生产企业
- dispatch({
- type: 'product/enterprises',
- payload: { ...params },
- callback: (res) => {
- addTableData[0].table = res.data;
- addTableData[0].type = 'modal_table_sele';
- addTableData[0].isCheck = false;
- addTableData[0].columns = enterprise_list_column();
- addTableData[0].rowKey = 'enterprisesId';
- addTableData[0].add = false;
- addTableData[0].search_right = 647;//搜索框里删除按钮距离右边的距离
- addTableData[0].topSeaplaceHolder = `${sldComLanguage('请输入生产企业')}`;//搜索框的placeholder
- this.setState({
- addTableData: addTableData,
- show_flag:true,
- });
- },
- });
- }
- };
- //搜索内容
- modalSearch = (val) => {
- let { params, addTableData } = this.state;
- addTableData[0].search_value = val;
- let search_key = 'name';
- if(this.cur_operate_type == 'search_spec_more'){
- search_key = 'specName';
- }else if(this.cur_operate_type == 'search_brand_more'){
- search_key = 'brandName';
- }else if(this.cur_operate_type == 'search_attr_more'){
- search_key = 'attributeName';
- }else if(this.cur_operate_type == 'search_goods_type'){
- search_key = 'typeName';
- }else if(this.cur_operate_type == 'search_product_enterprise'){
- search_key = 'enterprisesName';
- }
- params[search_key] = val;
- this.get_list(params);
- this.setState({
- formValues: { ...params},
- addTableData: addTableData,
- params: { pageSize: pageSize }
- });
- };
- //搜索内容
- modalSearchCon = (val) => {
- let { addTableData } = this.state;
- addTableData[0].search_value = val.target.value;
- this.setState({
- addTableData: addTableData,
- });
- };
- //清空搜索内容
- sldSearClear = () => {
- let { addTableData } = this.state;
- addTableData[0].search_value = '';
- this.setState({
- addTableData: addTableData,
- });
- this.modalSearch('');
- };
- //表格数据的确认操作-将选中的数据传回到父组件
- sldHandleTableConfirm = (val) => {
- if (this.cur_operate_type == 'search_brand_more' || this.cur_operate_type == 'search_spec_more' || this.cur_operate_type == 'search_attr_more') {
- this.props.seleCurData(this.selectedRows, this.selectedRowKeys);
- } else {
- this.props.seleCurData(this.modalTableSeleData);
- }
- this.clearSeleData();
- this.sldHandleTableCancle();
- };
- handleTablePagination = (pagination, filtersArg, sorter) => {
- const { formValues } = this.state;
- const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
- comm_cur_page_global.cur = pagination.current;
- pageSize = params.pageSize;
- this.setState({
- params: params,
- });
- this.get_list(params);
- };
- //列表展示对话框隐藏
- sldHandleTableCancle = () => {
- this.clearSeleData();
- comm_cur_page_global.cur = 1;//列表序号重置为1
- this.props.sldHandleTableCancle();
- };
- render() {
- const { addTableData, tableTitle, search_modal_width, modalTableVisible,show_flag } = this.state;
- return (
- <div className={`${global.common_page_20}`}>
- {/*列表展示对话框-start*/}
- {
- show_flag&&<SldModal
- destroyOnClose={true}
- zIndex={11}
- title={tableTitle}
- width={search_modal_width}
- modalVisible={modalTableVisible}
- sldHandleConfirm={(val) => this.sldHandleTableConfirm(val)}
- sldHandleCancle={this.sldHandleTableCancle}
- formItemLayoutModal={formItemLayoutModal}
- content={addTableData}
- />
- }
- {/*列表展示对话框-end*/}
- </div>
- );
- }
- }
|