From ec3cc73f8deaf0b83b0b517e65f949a5a5c496dc Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 07 一月 2020 09:07:46 +0800 Subject: [PATCH] 2020-01-07 --- src/templates/tableshare/verifycard/customform/index.jsx | 127 ++++++++ src/templates/tableshare/verifycard/billcodeform/index.scss | 0 src/templates/comtableconfig/index.jsx | 4 src/templates/subtableconfig/index.jsx | 4 src/templates/tableshare/verifycard/index.scss | 6 src/tabviews/tableshare/actionList/index.jsx | 10 src/templates/comtableconfig/settingform/index.jsx | 13 src/tabviews/commontable/index.scss | 20 + src/templates/modalconfig/index.jsx | 2 src/templates/comtableconfig/tabdragelement/index.scss | 16 src/templates/tableshare/verifycard/uniqueform/index.jsx | 133 ++++++++ src/templates/comtableconfig/tabdragelement/index.jsx | 8 src/templates/tableshare/verifycard/uniqueform/index.scss | 0 src/tabviews/commontable/index.jsx | 19 src/templates/subtableconfig/settingform/index.jsx | 20 + src/tabviews/commontable/mainTable/index.jsx | 10 src/templates/tableshare/verifycard/customform/index.scss | 0 src/templates/tableshare/verifycard/index.jsx | 332 +++++++++++++++------ src/templates/subtableconfig/settingform/index.scss | 2 src/templates/tableshare/verifycard/billcodeform/index.jsx | 169 +++++++++++ src/utils/utils.js | 4 21 files changed, 754 insertions(+), 145 deletions(-) diff --git a/src/tabviews/commontable/index.jsx b/src/tabviews/commontable/index.jsx index 2b576ed..c9d7e50 100644 --- a/src/tabviews/commontable/index.jsx +++ b/src/tabviews/commontable/index.jsx @@ -138,7 +138,7 @@ } let _actions = config.action.filter(item => item.position === 'toolbar') // 杩囨护宸ュ叿鏍忔寜閽紙鏈粡杩囨潈闄愯繃婊わ級 - let _tab = config.tabs.filter(tab => tab.supMenu === 'mainTable') // 妫�鏌ユ槸鍚︽湁涓庝富琛ㄥ叧鑱旂殑瀛愯〃 + let _isLinkMain = false // 妫�鏌ユ槸鍚︽湁涓庝富琛ㄥ叧鑱旂殑瀛愯〃 let supmenus = {} config.tabgroups.forEach(group => { if (config[group] && config[group].length > 0) { @@ -150,6 +150,7 @@ } if (config.setting.subtabs.includes(tab.uuid)) { tab.supMenu = 'mainTable' + _isLinkMain = true } else if (supmenus[tab.uuid]) { tab.supMenu = supmenus[tab.uuid] } @@ -166,7 +167,7 @@ searchlist: config.search, actions: _actions, columns: _columns, - isLinkMain: _tab.length > 0, + isLinkMain: _isLinkMain, arr_field: _arrField.join(','), search: Utils.initMainSearch(config.search), // 鎼滅储鏉′欢鍒濆鍖栵紙鍚湁鏃堕棿鏍煎紡锛岄渶瑕佽浆鍖栵級 loading: true @@ -292,6 +293,10 @@ } else { param = this.getDefaultParam() } + + this.setState({ + pickup: false + }) this.handleTableId('mainTable', '') @@ -661,7 +666,7 @@ const { setting, searchlist, actions, columns, loadingview, viewlost, setsingle, pickup, isLinkMain, config } = this.state return ( - <div className="commontable" id={'commontable' + this.props.MenuID}> + <div className={'commontable ' + (isLinkMain ? 'pick-control' : '')} id={'commontable' + this.props.MenuID}> {loadingview && <Spin size="large" />} {searchlist && searchlist.length > 0 ? <MainSearch @@ -686,8 +691,12 @@ } {columns && setting.onload !== 'false' ? <div className="main-table-box"> - {isLinkMain && setting.tableType === 'checkbox' ? <Switch title="鍗曢�夊垏鎹�" checkedChildren="澶�" unCheckedChildren="鍗�" defaultChecked={setsingle} onChange={this.checkChange} /> : null} - {isLinkMain && this.state.BIDs.mainTable && (setting.tableType === 'radio' || setsingle) ? <Switch title="鏀惰捣" checkedChildren="鍏�" unCheckedChildren="寮�" defaultChecked={pickup} onChange={this.pickupChange} /> : null} + {isLinkMain ? + <div className="pickchange"> + {setting.tableType === 'checkbox' ? <Switch title="鍗曢�夊垏鎹�" checkedChildren="澶�" unCheckedChildren="鍗�" defaultChecked={setsingle} onChange={this.checkChange} /> : null} + {this.state.BIDs.mainTable && (setting.tableType === 'radio' || setsingle) ? <Switch title="鏀惰捣" checkedChildren="鍏�" unCheckedChildren="寮�" defaultChecked={pickup} onChange={this.pickupChange} /> : null} + </div> : null + } <MainTable ref="mainTable" pickup={pickup} diff --git a/src/tabviews/commontable/index.scss b/src/tabviews/commontable/index.scss index d859eac..ef364c5 100644 --- a/src/tabviews/commontable/index.scss +++ b/src/tabviews/commontable/index.scss @@ -56,17 +56,27 @@ } .main-table-box { position: relative; - .ant-switch { - z-index: 1; - float: right; - margin-right: 20px; - margin-bottom: 5px; + .pickchange { + position: absolute; + right: 0px; + top: -25px; + .ant-switch { + z-index: 1; + float: right; + margin-right: 20px; + margin-bottom: 5px; + } } } .ant-tabs + .ant-tabs { margin-top: 20px; } } +.commontable.pick-control { + >.button-list { + padding-right: 140px; + } +} .ant-back-top { bottom: 30px; right: 30px; diff --git a/src/tabviews/commontable/mainTable/index.jsx b/src/tabviews/commontable/mainTable/index.jsx index 3bcf3b9..0fc7524 100644 --- a/src/tabviews/commontable/mainTable/index.jsx +++ b/src/tabviews/commontable/mainTable/index.jsx @@ -30,7 +30,7 @@ } UNSAFE_componentWillMount () { - const { columns } = this.props + const { columns, setting } = this.props let _columns = [] columns.forEach(item => { @@ -47,7 +47,10 @@ _columns.push(cell) }) - this.setState({columns: _columns}) + this.setState({ + columns: _columns, + isSingleSelect: setting.tableType === 'radio' + }) } UNSAFE_componentWillReceiveProps(nextProps) { @@ -316,6 +319,9 @@ } let _data = this.props.data ? this.props.data : [] + console.log(selectId) + console.log(pickup) + console.log(isSingleSelect) if (selectId && pickup && isSingleSelect) { _data = _data.filter(item => item[setting.primaryKey] === selectId) } diff --git a/src/tabviews/tableshare/actionList/index.jsx b/src/tabviews/tableshare/actionList/index.jsx index eca17b6..0b85658 100644 --- a/src/tabviews/tableshare/actionList/index.jsx +++ b/src/tabviews/tableshare/actionList/index.jsx @@ -164,7 +164,7 @@ if (btn.innerFunc) { param.func = btn.innerFunc } else if (btn.sql) { - param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting)) // 鏁版嵁婧� + param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param[setting.primaryKey])) // 鏁版嵁婧� param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.LText, param.timestamp) } @@ -181,11 +181,11 @@ param[setting.primaryKey] = Utils.getguid() } - param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata)) // 鏁版嵁婧� + param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param[setting.primaryKey])) // 鏁版嵁婧� param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.LText, param.timestamp) } else if (btn.sql) { - param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata)) // 鏁版嵁婧� + param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param[setting.primaryKey])) // 鏁版嵁婧� param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.LText, param.timestamp) } @@ -216,7 +216,7 @@ if (btn.innerFunc) { param.func = btn.innerFunc } else if (btn.sql) { - param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting)) // 鏁版嵁婧� + param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param[setting.primaryKey])) // 鏁版嵁婧� param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.LText, param.timestamp) } @@ -232,7 +232,7 @@ if (setting.primaryKey) { param[setting.primaryKey] = cell[setting.primaryKey] } - param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata)) // 鏁版嵁婧� + param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param[setting.primaryKey])) // 鏁版嵁婧� param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.LText, param.timestamp) } diff --git a/src/templates/comtableconfig/index.jsx b/src/templates/comtableconfig/index.jsx index cc74c33..cf9bfdc 100644 --- a/src/templates/comtableconfig/index.jsx +++ b/src/templates/comtableconfig/index.jsx @@ -2793,7 +2793,7 @@ }} > {this.state.tables.map((table, index) => ( - <Option key={index} value={table.TbName}>{table.Remark}</Option> + <Option key={index} title={table.TbName} value={table.TbName}>{table.Remark}</Option> ))} </Select> {this.state.selectedTables.length > 0 && <List @@ -3069,7 +3069,7 @@ onCancel={() => { this.setState({ profileVisible: false }) }} destroyOnClose > - <VerifyCard card={this.state.card} wrappedComponentRef={(inst) => this.verifyRef = inst} dict={this.state.dict} /> + <VerifyCard card={this.state.card} columns={this.state.config.columns} wrappedComponentRef={(inst) => this.verifyRef = inst} dict={this.state.dict} /> </Modal> {/* 璁剧疆鍏ㄥ眬閰嶇疆鍙婂垪琛ㄦ暟鎹簮 */} <Modal diff --git a/src/templates/comtableconfig/settingform/index.jsx b/src/templates/comtableconfig/settingform/index.jsx index cd61657..243ed97 100644 --- a/src/templates/comtableconfig/settingform/index.jsx +++ b/src/templates/comtableconfig/settingform/index.jsx @@ -80,11 +80,9 @@ } selectChange = (val) => { - let _order = this.props.form.getFieldValue('order') - if (_order) return - + // let _order = this.props.form.getFieldValue('order') this.props.form.setFieldsValue({ - order: `${val} desc`, + order: `${val} desc` }) } @@ -110,6 +108,9 @@ if (field.length !== 1) { primaryKey = '' } + } + if (!primaryKey && columns.length === 0) { + primaryKey = 'ID' } let str = '^(' + usefulFields.join('|') + ')' @@ -238,7 +239,7 @@ <Col span={12}> <Form.Item label="涓婚敭"> {getFieldDecorator('primaryKey', { - initialValue: primaryKey ? primaryKey : (columns.length === 0 ? 'ID' : '') + initialValue: primaryKey })( <Select getPopupContainer={() => document.getElementById('commontable-setting-form')} @@ -258,7 +259,7 @@ <Col span={12}> <Form.Item label="榛樿鎺掑簭"> {getFieldDecorator('order', { - initialValue: data.order, + initialValue: data.order || (primaryKey ? primaryKey + ' desc' : ''), rules: [ { required: true, diff --git a/src/templates/comtableconfig/tabdragelement/index.jsx b/src/templates/comtableconfig/tabdragelement/index.jsx index 7db819c..5f50bde 100644 --- a/src/templates/comtableconfig/tabdragelement/index.jsx +++ b/src/templates/comtableconfig/tabdragelement/index.jsx @@ -4,13 +4,9 @@ import { Tabs, Icon } from 'antd' import Utils from '@/utils/utils.js' import Card from './card' -import subtable from '@/assets/img/subtable.jpg' import './index.scss' const { TabPane } = Tabs -const photo = { - SubTable: subtable -} const Container = ({list, type, groupId, placeholder, handleList, handleMenu, deleteMenu }) => { let target = null @@ -85,7 +81,7 @@ } return ( - <div ref={drop} className="ant-row"> + <div ref={drop} className="ant-row maintable-tab-list"> <Tabs defaultActiveKey="0"> {cards.map((card, index) => ( <TabPane tab={ @@ -103,7 +99,7 @@ <Icon className="edit close" type="close" onClick={() => del(card)} /> </div> } key={`${index}`}> - <img src={photo[card.type]} alt=""/> + 銆妠card.label}銆嬫爣绛惧唴瀹� </TabPane> ))} </Tabs> diff --git a/src/templates/comtableconfig/tabdragelement/index.scss b/src/templates/comtableconfig/tabdragelement/index.scss index dc8ed55..56fbd3b 100644 --- a/src/templates/comtableconfig/tabdragelement/index.scss +++ b/src/templates/comtableconfig/tabdragelement/index.scss @@ -7,9 +7,15 @@ cursor: move; border-radius: 4px; } -.commontab-drawarea-placeholder { - position: absolute; - top: 25px; - left: calc(50% - 50px); - color: #bcbcbc; +.maintable-tab-list { + .ant-tabs-content { + text-align: center; + color: #bcbcbc; + } + .commontab-drawarea-placeholder { + position: absolute; + top: 25px; + left: calc(50% - 50px); + color: #bcbcbc; + } } \ No newline at end of file diff --git a/src/templates/modalconfig/index.jsx b/src/templates/modalconfig/index.jsx index 6dfff2d..d40c539 100644 --- a/src/templates/modalconfig/index.jsx +++ b/src/templates/modalconfig/index.jsx @@ -1088,7 +1088,7 @@ }} > {this.state.tables.map((table, index) => ( - <Option key={index} value={table.TbName}>{table.Remark}</Option> + <Option key={index} title={table.TbName} value={table.TbName}>{table.Remark}</Option> ))} </Select> {this.state.selectedTables.length > 0 && <List diff --git a/src/templates/subtableconfig/index.jsx b/src/templates/subtableconfig/index.jsx index 97d8123..bc0d1be 100644 --- a/src/templates/subtableconfig/index.jsx +++ b/src/templates/subtableconfig/index.jsx @@ -2412,7 +2412,7 @@ }} > {this.state.tables.map((table, index) => ( - <Option key={index} value={table.TbName}>{table.Remark}</Option> + <Option key={index} title={table.TbName} value={table.TbName}>{table.Remark}</Option> ))} </Select> {this.state.selectedTables.length > 0 && <List @@ -2629,7 +2629,7 @@ onCancel={() => { this.setState({ profileVisible: false }) }} destroyOnClose > - <VerifyCard card={this.state.card} wrappedComponentRef={(inst) => this.verifyRef = inst} dict={this.state.dict} /> + <VerifyCard card={this.state.card} columns={this.state.config.columns} wrappedComponentRef={(inst) => this.verifyRef = inst} dict={this.state.dict} /> </Modal> {/* 璁剧疆鍏ㄥ眬閰嶇疆鍙婂垪琛ㄦ暟鎹簮 */} <Modal diff --git a/src/templates/subtableconfig/settingform/index.jsx b/src/templates/subtableconfig/settingform/index.jsx index 19c8939..ba01c15 100644 --- a/src/templates/subtableconfig/settingform/index.jsx +++ b/src/templates/subtableconfig/settingform/index.jsx @@ -49,6 +49,12 @@ }) } + selectChange = (val) => { + this.props.form.setFieldsValue({ + order: `${val} desc` + }) + } + render() { const { data, dict, tabId, usefulFields } = this.props const { getFieldDecorator } = this.props.form @@ -72,12 +78,15 @@ primaryKey = '' } } + if (!primaryKey && columns.length === 0) { + primaryKey = 'ID' + } let str = '^(' + usefulFields.join('|') + ')' let _patten = new RegExp(str + '[0-9a-zA-Z_]*$', 'g') return ( - <Form {...formItemLayout} className="ant-advanced-search-form commontable-setting-form" id="commontable-setting-form"> + <Form {...formItemLayout} className="ant-advanced-search-form subtable-setting-form" id="subtable-setting-form"> <Row gutter={24}> <Col span={12}> <Form.Item label="琛ㄥ悕"> @@ -98,7 +107,7 @@ initialValue: data.tableType })( <Select - getPopupContainer={() => document.getElementById('commontable-setting-form')} + getPopupContainer={() => document.getElementById('subtable-setting-form')} > <Select.Option value="">涓嶅彲閫�</Select.Option> <Select.Option value="radio">鍗曢��</Select.Option> @@ -175,10 +184,11 @@ <Col span={12}> <Form.Item label="涓婚敭"> {getFieldDecorator('primaryKey', { - initialValue: primaryKey ? primaryKey : (columns.length === 0 ? 'ID' : '') + initialValue: primaryKey })( <Select - getPopupContainer={() => document.getElementById('commontable-setting-form')} + getPopupContainer={() => document.getElementById('subtable-setting-form')} + onChange={this.selectChange} > <Select.Option key='unset' value="">涓嶈缃�</Select.Option> {columns.length === 0 ? @@ -194,7 +204,7 @@ <Col span={12}> <Form.Item label="榛樿鎺掑簭"> {getFieldDecorator('order', { - initialValue: data.order, + initialValue: data.order || (primaryKey ? primaryKey + ' desc' : ''), rules: [ { required: true, diff --git a/src/templates/subtableconfig/settingform/index.scss b/src/templates/subtableconfig/settingform/index.scss index cd1a9f6..1024b34 100644 --- a/src/templates/subtableconfig/settingform/index.scss +++ b/src/templates/subtableconfig/settingform/index.scss @@ -1,4 +1,4 @@ -.ant-advanced-search-form.commontable-setting-form { +.ant-advanced-search-form.subtable-setting-form { .textarea { .ant-form-item-label { width: 16.3%; diff --git a/src/templates/tableshare/verifycard/billcodeform/index.jsx b/src/templates/tableshare/verifycard/billcodeform/index.jsx new file mode 100644 index 0000000..c88deb9 --- /dev/null +++ b/src/templates/tableshare/verifycard/billcodeform/index.jsx @@ -0,0 +1,169 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Row, Col, Input, Select, Button, InputNumber } from 'antd' +import './index.scss' + + +class UniqueForm extends Component { + static propTpyes = { + dict: PropTypes.object, // 瀛楀吀椤� + billCode: PropTypes.object, // 琛ㄥ崟 + billCodeChange: PropTypes.func // 琛ㄥ崟 + } + + + handleConfirm = () => { + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + values.uuid = this.state.editItem ? this.state.editItem.uuid : '' + values.field = values.field.join(',') + + this.props.uniqueChange(values) + this.setState({ + editItem: null + }) + } + }) + } + + render() { + const { getFieldDecorator } = this.props.form + const { billCode } = this.props + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + return ( + <Form {...formItemLayout} className="custom-verify-form"> + <Row gutter={24}> + <Col span={6}> + <Form.Item label={'瀛楁'}> + {getFieldDecorator('field', { + initialValue: billCode.ModularDetailCode || '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鍑瘉鏍囪瘑!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鍗曞彿绫诲瀷'}> + {getFieldDecorator('TypeCharOne', { + initialValue: billCode.TypeCharOne || 'Y', + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '鍗曞彿绫诲瀷!' + } + ] + })( + <Select> + <Select.Option value="Y"> 鍗曞彿 </Select.Option> + <Select.Option value="n"> 缂栫爜 </Select.Option> + <Select.Option value="Lp"> 琛屽彿 </Select.Option> + <Select.Option value="BN"> 鎵规 </Select.Option> + </Select> + )} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鍑瘉鏍囪瘑'}> + {getFieldDecorator('ModularDetailCode', { + initialValue: billCode.ModularDetailCode || '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鍑瘉鏍囪瘑!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'娴佹按鐮佷綅鏁�'}> + {getFieldDecorator('Type', { + initialValue: billCode.Type || 4, + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '娴佹按鐮佷綅鏁�!' + } + ] + })(<InputNumber defaultValue={4} min={1} max={10} precision={0} />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'绫诲瀷'}> + {getFieldDecorator('TypeCharTwo', { + initialValue: billCode.TypeCharTwo || 'BillCode', + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '绫诲瀷!' + } + ] + })( + <Select> + <Select.Option value="BillCode"> 涓氬姟 </Select.Option> + <Select.Option value="TableCode"> 涓绘暟鎹� </Select.Option> + </Select> + )} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鎶ラ敊淇℃伅'}> + {getFieldDecorator('errmsg', { + initialValue: '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鎶ラ敊淇℃伅!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鎶ラ敊缂栫爜'}> + {getFieldDecorator('errorCode', { + initialValue: 'E', + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '鎶ラ敊缂栫爜!' + } + ] + })( + <Select> + <Select.Option value="E"> E </Select.Option> + <Select.Option value="N"> N </Select.Option> + <Select.Option value="F"> F </Select.Option> + <Select.Option value="NM"> NM </Select.Option> + <Select.Option value="S"> S </Select.Option> + <Select.Option value="-1"> -1 </Select.Option> + </Select> + )} + </Form.Item> + </Col> + <Col span={2}> + <Button onClick={this.handleConfirm} type="primary" className="add-row"> + 纭畾 + </Button> + </Col> + </Row> + </Form> + ) + } +} + +export default Form.create()(UniqueForm) \ No newline at end of file diff --git a/src/templates/tableshare/verifycard/billcodeform/index.scss b/src/templates/tableshare/verifycard/billcodeform/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/templates/tableshare/verifycard/billcodeform/index.scss diff --git a/src/templates/tableshare/verifycard/customform/index.jsx b/src/templates/tableshare/verifycard/customform/index.jsx new file mode 100644 index 0000000..73fc966 --- /dev/null +++ b/src/templates/tableshare/verifycard/customform/index.jsx @@ -0,0 +1,127 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Row, Col, Input, Select, Button } from 'antd' +import './index.scss' + +const { TextArea } = Input + +class CustomForm extends Component { + static propTpyes = { + dict: PropTypes.object, // 瀛楀吀椤� + fields: PropTypes.array, // 琛ㄥ崟 + customChange: PropTypes.func // 琛ㄥ崟 + } + + state = { + editItem: null + } + + edit = (record) => { + this.setState({ + editItem: record + }) + + this.props.form.setFieldsValue({ + sql: record.sql, + errmsg: record.errmsg, + errorCode: record.errorCode + }) + } + + + handleConfirm = () => { + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + values.uuid = this.state.editItem ? this.state.editItem.uuid : '' + + this.props.customChange(values) + this.setState({ + editItem: null + }) + this.props.form.setFieldsValue({ + sql: '', + errmsg: '', + errorCode: 'E' + }) + } + }) + } + + render() { + const { getFieldDecorator } = this.props.form + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + return ( + <Form {...formItemLayout} className="custom-verify-form" id="verifycard2"> + <Row gutter={24}> + <Col span={10} className="sql"> + <Form.Item label={'sql'}> + {getFieldDecorator('sql', { + initialValue: '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + 'sql!' + } + ] + })(<TextArea rows={3} />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鎶ラ敊淇℃伅'}> + {getFieldDecorator('errmsg', { + initialValue: '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鎶ラ敊淇℃伅!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鎶ラ敊缂栫爜'}> + {getFieldDecorator('errorCode', { + initialValue: 'E', + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '鎶ラ敊缂栫爜!' + } + ] + })( + <Select + getPopupContainer={() => document.getElementById('verifycard2')} + > + <Select.Option value="E"> E </Select.Option> + <Select.Option value="N"> N </Select.Option> + <Select.Option value="F"> F </Select.Option> + <Select.Option value="NM"> NM </Select.Option> + <Select.Option value="S"> S </Select.Option> + <Select.Option value="-1"> -1 </Select.Option> + </Select> + )} + </Form.Item> + </Col> + <Col span={2} className="add"> + <Button onClick={this.handleConfirm} type="primary" className="add-row"> + 纭畾 + </Button> + </Col> + </Row> + </Form> + ) + } +} + +export default Form.create()(CustomForm) \ No newline at end of file diff --git a/src/templates/tableshare/verifycard/customform/index.scss b/src/templates/tableshare/verifycard/customform/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/templates/tableshare/verifycard/customform/index.scss diff --git a/src/templates/tableshare/verifycard/index.jsx b/src/templates/tableshare/verifycard/index.jsx index 7ec4119..b4052da 100644 --- a/src/templates/tableshare/verifycard/index.jsx +++ b/src/templates/tableshare/verifycard/index.jsx @@ -1,20 +1,25 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { Form, Tabs, Row, Col, Radio, Input, Button, Select, Table, Popconfirm, Icon, notification, Modal, message, InputNumber } from 'antd' +import { Form, Tabs, Row, Col, Radio, Button, Table, Popconfirm, Icon, notification, Modal, message, InputNumber } from 'antd' import Utils from '@/utils/utils.js' +import UniqueForm from './uniqueform' +import CustomForm from './customform' +import BillcodeForm from './billcodeform' +import Api from '@/api' import './index.scss' const { TabPane } = Tabs -const { TextArea } = Input class VerifyCard extends Component { static propTpyes = { - dict: PropTypes.object, // 瀛楀吀椤� - card: PropTypes.object + dict: PropTypes.object, // 瀛楀吀椤� + card: PropTypes.object, + columns: PropTypes.array } state = { - verify: {} + verify: {}, + fields: [] } UNSAFE_componentWillMount() { @@ -23,25 +28,95 @@ this.setState({ verify: { invalid: _verify.invalid || 'false', - unique: _verify.unique || 'false', + uniques: _verify.uniques || [], accountdate: _verify.accountdate || 'false', - customverifys: _verify.customverifys || [] + customverifys: _verify.customverifys || [], + billCode: _verify.billCode || {} } + }) + + if (this.props.card.OpenType === 'pop') { + Api.getSystemConfig({ + func: 'sPC_Get_LongParam', + MenuID: this.props.card.uuid + }).then(res => { + if (res.status) { + let _LongParam = '' + if (res.LongParam) { + _LongParam = window.decodeURIComponent(window.atob(res.LongParam)) + try { + _LongParam = JSON.parse(_LongParam) + } catch (e) { + _LongParam = '' + } + } + + if (!_LongParam) return + + let _fields = [] + if (_LongParam.groups.length > 0) { + _LongParam.groups.forEach(group => { + group.sublist.forEach(field => { + _fields.push(field) + }) + }) + } else { + _fields = _LongParam.fields + } + + this.setState({ + fields: _fields + }) + } else { + notification.warning({ + top: 92, + message: res.message, + duration: 10 + }) + } + }) + } + } + + uniqueChange = (values) => { + let verify = JSON.parse(JSON.stringify(this.state.verify)) + + if (values.uuid) { + verify.uniques = verify.uniques.map(item => { + if (item.uuid === values.uuid) { + return values + } else { + return item + } + }) + } else { + values.uuid = Utils.getuuid() + verify.uniques.push(values) + } + + this.setState({ + verify: verify }) } - handleConfirm = () => { + customChange = (values) => { let verify = JSON.parse(JSON.stringify(this.state.verify)) - // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� - this.props.form.validateFieldsAndScroll((err, values) => { - if (!err) { - values.uuid = Utils.getuuid() - verify.customverifys.push(values) - this.setState({ - verify: verify - }) - } + if (values.uuid) { + verify.customverifys = verify.customverifys.map(item => { + if (item.uuid === values.uuid) { + return values + } else { + return item + } + }) + } else { + values.uuid = Utils.getuuid() + verify.customverifys.push(values) + } + + this.setState({ + verify: verify }) } @@ -54,11 +129,73 @@ }) } - handleDelete = (uuid) => { + handleDelete = (record, type) => { const { verify } = this.state - verify.customverifys = verify.customverifys.filter(item => item.uuid !== uuid) + + if (type === 'customverify') { + verify.customverifys = verify.customverifys.filter(item => item.uuid !== record.uuid) + } else if (type === 'unique') { + verify.uniques = verify.uniques.filter(item => item.uuid !== record.uuid) + } this.setState({ verify: verify }) + } + + handleEdit = (record, type) => { + if (type === 'customverify') { + this.customForm.edit(record) + } else if (type === 'unique') { + this.uniqueForm.edit(record) + } + } + + handleUpDown = (record, type, direction) => { + let verify = JSON.parse(JSON.stringify(this.state.verify)) + let index = 0 + + if (type === 'customverify') { + verify.customverifys = verify.customverifys.filter((item, i) => { + if (item.uuid === record.uuid) { + index = i + } + + return item.uuid !== record.uuid + }) + if ((index === 0 && direction === 'up') || (index === verify.customverifys.length && direction === 'down')) { + return + } + + if (direction === 'up') { + verify.customverifys.splice(index - 1, 0, record) + } else { + verify.customverifys.splice(index + 1, 0, record) + } + + this.setState({ + verify: verify + }) + } else if (type === 'unique') { + verify.uniques = verify.uniques.filter((item, i) => { + if (item.uuid === record.uuid) { + index = i + } + + return item.uuid !== record.uuid + }) + if ((index === 0 && direction === 'up') || (index === verify.uniques.length && direction === 'down')) { + return + } + + if (direction === 'up') { + verify.uniques.splice(index - 1, 0, record) + } else { + verify.uniques.splice(index + 1, 0, record) + } + + this.setState({ + verify: verify + }) + } } showError = (errorType) => { @@ -92,16 +229,15 @@ timeChange = (val, type) => { const { verify } = this.state - console.log(val) - console.log(type) + this.setState({ verify: {...verify, [type]: val} }) } render() { - const { getFieldDecorator } = this.props.form - const { verify } = this.state + // const { getFieldDecorator } = this.props.form + const { verify, fields } = this.state const formItemLayout = { labelCol: { xs: { span: 24 }, @@ -112,6 +248,39 @@ sm: { span: 16 } } } + let uniqueColumns = [ + { + title: '瀛楁鍚�', + dataIndex: 'field', + width: '50%' + }, + { + title: 'ErrorMessage', + dataIndex: 'errmsg', + width: '25%' + }, + { + title: 'ErrorCode', + dataIndex: 'errorCode', + width: '10%' + }, + { + title: '鎿嶄綔', + align: 'center', + width: '15%', + dataIndex: 'operation', + render: (text, record) => + (<div> + <span className="operation-btn" onClick={() => this.handleEdit(record, 'unique')} style={{color: '#1890ff'}}><Icon type="edit" /></span> + <Popconfirm title="纭畾鍒犻櫎鍚�?" onConfirm={() => this.handleDelete(record, 'unique')}> + <span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span> + </Popconfirm> + <span className="operation-btn" onClick={() => this.handleUpDown(record, 'unique', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span> + <span className="operation-btn" onClick={() => this.handleUpDown(record, 'unique', 'down')} style={{color: '#ff4d4f'}}><Icon type="arrow-down" /></span> + </div>) + } + ] + let columns = [ { title: 'SQL', @@ -134,11 +303,14 @@ width: '15%', dataIndex: 'operation', render: (text, record) => - ( - <Popconfirm title="纭畾鍒犻櫎鍚�?" onConfirm={() => this.handleDelete(record.uuid)}> - <span style={{color: '#1890ff', cursor: 'pointer'}}><Icon type="delete" /></span> + (<div> + <span className="operation-btn" onClick={() => this.handleEdit(record, 'customverify')} style={{color: '#1890ff'}}><Icon type="edit" /></span> + <Popconfirm title="纭畾鍒犻櫎鍚�?" onConfirm={() => this.handleDelete(record, 'customverify')}> + <span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span> </Popconfirm> - ) + <span className="operation-btn" onClick={() => this.handleUpDown(record, 'customverify', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span> + <span className="operation-btn" onClick={() => this.handleUpDown(record, 'customverify', 'down')} style={{color: '#ff4d4f'}}><Icon type="arrow-down" /></span> + </div>) } ] @@ -148,24 +320,16 @@ <Form {...formItemLayout}> <Row gutter={24}> <Col span={12}> - <Form.Item label={'澶辨晥楠岃瘉'}> - <Radio.Group value={verify.invalid} onChange={(e) => {this.onOptionChange(e, 'invalid')}}> - <Radio value="true">寮�鍚�</Radio> - <Radio value="false">涓嶅紑鍚�</Radio> - </Radio.Group> - </Form.Item> - </Col> - <Col span={12}> - <Form.Item label={'鍞竴鎬ч獙璇�'}> - <Radio.Group value={verify.unique} onChange={(e) => {this.onOptionChange(e, 'unique')}}> - <Radio value="true">寮�鍚�</Radio> - <Radio value="false">涓嶅紑鍚�</Radio> - </Radio.Group> - </Form.Item> - </Col> - <Col span={12}> <Form.Item label={'璐︽湡楠岃瘉'}> <Radio.Group value={verify.accountdate} onChange={(e) => {this.onOptionChange(e, 'accountdate')}}> + <Radio value="true">寮�鍚�</Radio> + <Radio value="false">涓嶅紑鍚�</Radio> + </Radio.Group> + </Form.Item> + </Col> + <Col span={12}> + <Form.Item label={'澶辨晥楠岃瘉'}> + <Radio.Group value={verify.invalid} onChange={(e) => {this.onOptionChange(e, 'invalid')}}> <Radio value="true">寮�鍚�</Radio> <Radio value="false">涓嶅紑鍚�</Radio> </Radio.Group> @@ -174,61 +338,28 @@ </Row> </Form> </TabPane> - <TabPane tab="鑷畾涔夐獙璇�" key="2"> - <Form {...formItemLayout} className="custom-verify-form" id="verifycard1"> - <Row gutter={24}> - <Col span={10} className="sql"> - <Form.Item label={'sql'}> - {getFieldDecorator('sql', { - initialValue: '', - rules: [ - { - required: true, - message: this.props.dict['form.required.input'] + 'sql!' - } - ] - })(<TextArea rows={3} />)} - </Form.Item> - </Col> - <Col span={6}> - <Form.Item label={'鎶ラ敊淇℃伅'}> - {getFieldDecorator('errmsg', { - initialValue: '', - rules: [ - { - required: true, - message: this.props.dict['form.required.input'] + '鎶ラ敊淇℃伅!' - } - ] - })(<Input placeholder="" autoComplete="off" />)} - </Form.Item> - </Col> - <Col span={6}> - <Form.Item label={'鎶ラ敊缂栫爜'}> - {getFieldDecorator('errorCode', { - initialValue: 'E', - rules: [ - { - required: true, - message: this.props.dict['form.required.select'] + '鎶ラ敊缂栫爜!' - } - ] - })( - <Select - getPopupContainer={() => document.getElementById('verifycard1')} - > - <Select.Option value="E"> E </Select.Option> - </Select> - )} - </Form.Item> - </Col> - <Col span={2} className="add"> - <Button onClick={this.handleConfirm} type="primary" className="add-row"> - 娣诲姞 - </Button> - </Col> - </Row> - </Form> + <TabPane tab="鍞竴鎬ч獙璇�" key="2"> + <UniqueForm + fields={fields} + dict={this.props.dict} + uniqueChange={this.uniqueChange} + wrappedComponentRef={(inst) => this.uniqueForm = inst} + /> + <Table + bordered + rowKey="uuid" + className="custom-table" + dataSource={verify.uniques} + columns={uniqueColumns} + pagination={false} + /> + </TabPane> + <TabPane tab="鑷畾涔夐獙璇�" key="3"> + <CustomForm + dict={this.props.dict} + customChange={this.customChange} + wrappedComponentRef={(inst) => this.customForm = inst} + /> <Table bordered rowKey="uuid" @@ -238,7 +369,10 @@ pagination={false} /> </TabPane> - <TabPane tab="淇℃伅鎻愮ず" key="3"> + <TabPane tab="鍗曞彿鐢熸垚" key="4"> + {verify.billCode ? <BillcodeForm dict={this.props.dict} billCode={verify.billCode} /> : null} + </TabPane> + <TabPane tab="淇℃伅鎻愮ず" key="5"> <Form {...formItemLayout}> <Row gutter={24}> <Col offset={6} span={6}> diff --git a/src/templates/tableshare/verifycard/index.scss b/src/templates/tableshare/verifycard/index.scss index a7a8067..4d4c447 100644 --- a/src/templates/tableshare/verifycard/index.scss +++ b/src/templates/tableshare/verifycard/index.scss @@ -26,4 +26,10 @@ display: inline-block; width: 30px; } + .operation-btn { + display: inline-block; + font-size: 16px; + padding: 0 5px; + cursor: pointer; + } } \ No newline at end of file diff --git a/src/templates/tableshare/verifycard/uniqueform/index.jsx b/src/templates/tableshare/verifycard/uniqueform/index.jsx new file mode 100644 index 0000000..397149b --- /dev/null +++ b/src/templates/tableshare/verifycard/uniqueform/index.jsx @@ -0,0 +1,133 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Row, Col, Input, Select, Button } from 'antd' +import './index.scss' + + +class UniqueForm extends Component { + static propTpyes = { + dict: PropTypes.object, // 瀛楀吀椤� + fields: PropTypes.array, // 琛ㄥ崟 + uniqueChange: PropTypes.func // 琛ㄥ崟 + } + + state = { + editItem: null + } + + edit = (record) => { + this.setState({ + editItem: record + }) + this.props.form.setFieldsValue({ + field: record.field.split(','), + errmsg: record.errmsg, + errorCode: record.errorCode + }) + } + + + handleConfirm = () => { + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + values.uuid = this.state.editItem ? this.state.editItem.uuid : '' + values.field = values.field.join(',') + + this.props.uniqueChange(values) + this.setState({ + editItem: null + }) + this.props.form.setFieldsValue({ + field: [], + errmsg: '', + errorCode: 'E' + }) + } + }) + } + + render() { + const { getFieldDecorator } = this.props.form + const { fields } = this.props + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + return ( + <Form {...formItemLayout} className="custom-verify-form" id="verifycard1"> + <Row gutter={24}> + <Col span={10}> + <Form.Item label={'瀛楁鍚�'}> + {getFieldDecorator('field', { + initialValue: [], + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '瀛楁鍚�!' + } + ] + })( + <Select + mode="multiple" + > + {fields.map(item => ( + <Select.Option key={item.uuid} value={item.field}>{item.field}</Select.Option> + ))} + </Select> + )} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鎶ラ敊淇℃伅'}> + {getFieldDecorator('errmsg', { + initialValue: '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鎶ラ敊淇℃伅!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + <Col span={6}> + <Form.Item label={'鎶ラ敊缂栫爜'}> + {getFieldDecorator('errorCode', { + initialValue: 'E', + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '鎶ラ敊缂栫爜!' + } + ] + })( + <Select> + <Select.Option value="E"> E </Select.Option> + <Select.Option value="N"> N </Select.Option> + <Select.Option value="F"> F </Select.Option> + <Select.Option value="NM"> NM </Select.Option> + <Select.Option value="S"> S </Select.Option> + <Select.Option value="-1"> -1 </Select.Option> + </Select> + )} + </Form.Item> + </Col> + <Col span={2} className="add"> + <Button onClick={this.handleConfirm} type="primary" className="add-row"> + 纭畾 + </Button> + </Col> + </Row> + </Form> + ) + } +} + +export default Form.create()(UniqueForm) \ No newline at end of file diff --git a/src/templates/tableshare/verifycard/uniqueform/index.scss b/src/templates/tableshare/verifycard/uniqueform/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/templates/tableshare/verifycard/uniqueform/index.scss diff --git a/src/utils/utils.js b/src/utils/utils.js index e4b03b9..46f7773 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -448,9 +448,11 @@ * @return {String} type 鎵ц绫诲瀷 * @return {String} table 琛ㄥ悕 */ - static getSysDefaultSql (btn, setting, formdata) { + static getSysDefaultSql (btn, setting, formdata, primaryId) { let primaryKey = setting.primaryKey || 'id' let _sql = '' + + console.log(primaryId) if (btn.OpenType === 'pop' && btn.sqlType === 'insert') { let keys = [] let values = [] -- Gitblit v1.8.0