From d5a12181a3fe9719e721920fea6093e31cc58ecb Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 23 二月 2022 18:26:30 +0800 Subject: [PATCH] 2022-02-23 --- src/mob/components/formdragelement/card.jsx | 1 src/tabviews/custom/components/module/voucher/voucherTable/index.jsx | 680 ++++++++++++++++++++++++++++++++++++++++ src/tabviews/custom/components/module/voucher/index.jsx | 15 src/tabviews/custom/components/module/voucher/index.scss | 12 src/tabviews/custom/components/module/voucher/voucherTable/index.scss | 259 +++++++++++++++ src/mob/searchconfig/searchdragelement/card.jsx | 1 src/templates/modalconfig/dragelement/card.jsx | 1 7 files changed, 965 insertions(+), 4 deletions(-) diff --git a/src/mob/components/formdragelement/card.jsx b/src/mob/components/formdragelement/card.jsx index 3b4a23c..784b8b7 100644 --- a/src/mob/components/formdragelement/card.jsx +++ b/src/mob/components/formdragelement/card.jsx @@ -194,6 +194,7 @@ className={'ant-form-item' + (card.required === 'true' ? ' required' : '') + (card.splitline === 'false' ? ' no-boder' : '')} > {formItem} + <div></div> {showField ? <div className="field-name" style={card.writein === 'false' ? {color: 'orange'} : {}}> {card.field}{card.hidden === 'true' ? '锛堥殣钘忥級' : ''}{card.readonly === 'true' ? '锛堝彧璇伙級' : ''}{card.linkField ? <span style={{color: '#1890ff'}}>{`锛堝叧鑱�${card.linkField}锛塦}</span> : ''}{card.supField ? <span style={{color: '#8E44AD'}}>{`锛堜笂绾�${card.supField}锛塦}</span> : ''} </div> : ''} diff --git a/src/mob/searchconfig/searchdragelement/card.jsx b/src/mob/searchconfig/searchdragelement/card.jsx index df3e2c6..20a0b9a 100644 --- a/src/mob/searchconfig/searchdragelement/card.jsx +++ b/src/mob/searchconfig/searchdragelement/card.jsx @@ -129,6 +129,7 @@ className={'ant-form-item' + (card.required === 'true' ? ' required' : '') + (card.splitline === 'false' ? ' no-boder' : '')} > {formItem} + <div></div> {showField ? <div className="field-name">{card.field}{card.hidden === 'true' ? '(闅愯棌)' : ''}</div> : ''} </Form.Item>} </div> diff --git a/src/tabviews/custom/components/module/voucher/index.jsx b/src/tabviews/custom/components/module/voucher/index.jsx index 59ea03c..f5a95a1 100644 --- a/src/tabviews/custom/components/module/voucher/index.jsx +++ b/src/tabviews/custom/components/module/voucher/index.jsx @@ -4,9 +4,11 @@ import { Button, Select, Input, DatePicker } from 'antd' // import { EditOutlined, ToolOutlined, DeleteOutlined, FontColorsOutlined } from '@ant-design/icons' +import asyncComponent from '@/utils/asyncComponent' // import MKEmitter from '@/utils/events.js' - import './index.scss' + +const VoucherTable = asyncComponent(() => import('./voucherTable')) class VoucherModule extends Component { static propTpyes = { @@ -70,7 +72,7 @@ } render() { - const { config, disableSave, disableAdd, typeOptions } = this.state + const { config, disableSave, disableAdd, typeOptions, data } = this.state return ( <div className="menu-voucher-wrap" style={config.style}> @@ -87,13 +89,18 @@ <Select.Option value={option.value}>{option.label}</Select.Option> )} </Select> - <Input autoComplete="off" />鍙� + <Input autoComplete="off" /> 鍙� </div> <div className="voucher-date"> 鏃ユ湡锛�<DatePicker onChange={this.onChange}/> </div> + <div className="voucher-affix"> + 闄勫崟鎹� <Input autoComplete="off" /> 寮� + <Button type="link" className="" onClick={this.triggerprint}>闄勪欢</Button> + <Button type="link" className="" onClick={this.triggerprint}>澶囨敞</Button> + </div> </div> - + <VoucherTable config={config} data={data}/> </div> </div> ) diff --git a/src/tabviews/custom/components/module/voucher/index.scss b/src/tabviews/custom/components/module/voucher/index.scss index 856d44b..0137321 100644 --- a/src/tabviews/custom/components/module/voucher/index.scss +++ b/src/tabviews/custom/components/module/voucher/index.scss @@ -7,6 +7,7 @@ background-size: cover; min-height: 150px; overflow-y: auto; + color: #000000; .voucher-header { padding: 10px; @@ -19,6 +20,7 @@ } } .voucher-body { + padding: 0 15px; .voucher-code { display: inline-block; width: 160px; @@ -32,12 +34,22 @@ width: 60px; } } + .pre-wrap { + padding: 10px 0px; + } .voucher-date { display: inline-block; .ant-calendar-picker { width: 120px; } } + .voucher-affix { + float: right; + width: 250px; + .ant-input { + width: 60px; + } + } } } diff --git a/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx b/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx new file mode 100644 index 0000000..10c587a --- /dev/null +++ b/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx @@ -0,0 +1,680 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { Table, Modal, Input, InputNumber, notification, message } from 'antd' +// import { EditOutlined } from '@ant-design/icons' + +import Api from '@/api' +import MKEmitter from '@/utils/events.js' +import zhCN from '@/locales/zh-CN/main.js' +import enUS from '@/locales/en-US/main.js' +import '@/assets/css/table.scss' +import './index.scss' + +class BodyRow extends React.Component { + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.props.data), fromJS(nextProps.data)) + } + + render() { + let { data, ...resProps } = this.props + let style = {} + let className = '' + + return <tr {...resProps} className={className} style={style}/> + } +} + +class BodyCell extends React.Component { + state = { + editing: false, + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.props.record), fromJS(nextProps.record)) || + nextState.editing !== this.state.editing + } + + componentDidMount () { + MKEmitter.addListener('tdFocus', this.tdFocus) + } + + /** + * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆 + */ + componentWillUnmount () { + this.setState = () => { + return + } + MKEmitter.removeListener('tdFocus', this.tdFocus) + } + + tdFocus = (id) => { + const { col, record } = this.props + + if (id !== col.uuid + record.uuid) return + + this.focus() + } + + enterPress = () => { + const { col, record } = this.props + const { value } = this.state + + this.setState({editing: false}) + setTimeout(() => { + if (col.enter === '$next') { + MKEmitter.emit('nextLine', col, record.uuid) + } else { + MKEmitter.emit('tdFocus', col.enter + record.uuid) + } + }, 50) + + if (value !== record[col.field]) { + MKEmitter.emit('changeRecord', col.tableId, {...record, [col.field]: value}) + } + } + + focus = () => { + const { col, record } = this.props + + if (record.type === 'total') return + + let val = record[col.field] !== undefined ? record[col.field] : '' + + this.setState({editing: true, value: val}, () => { + let node = document.getElementById(col.uuid + record.uuid) + node && node.select() + }) + } + + onBlur = () => { + const { col, record } = this.props + const { value } = this.state + + this.setState({editing: false}) + + if (value !== record[col.field]) { + MKEmitter.emit('changeRecord', col.tableId, {...record, [col.field]: value}) + } + } + + onChange = (val) => { + this.setState({value: val}) + } + + render() { + let { col, record, className } = this.props + const { editing } = this.state + + let children = null + let colSpan = 1 + + if (col.field === 'remark') { + if (record.type === 'total') { + children = <div className="content-wrap" style={{lineHeight: '60px'}}>鍚堣: {record.total}</div> + colSpan = 2 + } else { + let val = record.remark || '' + + if (editing) { + children = <Input.TextArea id={col.uuid + record.uuid} autoSize={false} defaultValue={val} onChange={(e) => this.onChange(e.target.value)} onPressEnter={this.enterPress} onBlur={this.onBlur}/> + } else { + children = <div className="content-wrap" onClick={this.focus}>{val}</div> + } + } + } else if (col.field === 'subject') { + if (record.type === 'total') { + colSpan = 0 + } else { + let val = record.subject || '' + + if (editing) { + children = <Input.TextArea id={col.uuid + record.uuid} autoSize={false} defaultValue={val} onChange={(e) => this.onChange(e.target.value)} onPressEnter={this.enterPress} onBlur={this.onBlur}/> + } else { + children = <div className="content-wrap" onClick={this.focus}>{val}</div> + } + } + } else if (col.field === 'debtor') { + let val = record.debtor + let down = false + let vals = [] + if (typeof(val) === 'number') { + if (val < 0) { + down = true + val = Math.abs(val) + } + vals = (val * 100).toFixed(0).split('').reverse() + } + + if (editing) { + children = <InputNumber id={col.uuid + record.uuid} defaultValue={val} onChange={(val) => this.onChange(val)} onPressEnter={this.enterPress} onBlur={this.onBlur}/> + } else { + children = <div className={'money-uint' + (down ? ' down' : '')} onClick={this.focus}> + <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span> + <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span> + </div> + } + } else if (col.field === 'creditor') { + let val = record.creditor + let down = false + let vals = [] + if (typeof(val) === 'number') { + if (val < 0) { + down = true + val = Math.abs(val) + } + vals = (val * 100).toFixed(0).split('').reverse() + } + + if (editing) { + children = <InputNumber id={col.uuid + record.uuid} defaultValue={val} onChange={(val) => this.onChange(val)} onPressEnter={this.enterPress} onBlur={this.onBlur}/> + } else { + children = <div className={'money-uint' + (down ? ' down' : '')} onClick={this.focus}> + <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span> + <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span> + </div> + } + } + + if (!colSpan) return null + + return (<td colSpan={colSpan} className={className}>{children}</td>) + } +} + +class VoucherTable extends Component { + static propTpyes = { + config: PropTypes.object, // 鑿滃崟Id + BID: PropTypes.any, // 涓昏〃ID + data: PropTypes.any, // 琛ㄦ牸鏁版嵁 + total: PropTypes.any, // 鎬绘暟 + loading: PropTypes.bool, // 琛ㄦ牸鍔犺浇涓� + refreshdata: PropTypes.func, // 琛ㄦ牸涓帓搴忓垪銆侀〉鐮佺殑鍙樺寲鏃跺埛鏂� + } + + state = { + dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, + data: [], + edData: [], + edColumns: [], + tableId: '', // 琛ㄦ牸ID + pageSize: 10, // 姣忛〉鏁版嵁鏉℃暟 + columns: null, // 鏄剧ず鍒� + loading: false, + } + + UNSAFE_componentWillMount () { + let tableId = (() => { + let uuid = [] + let _options = 'abcdefghigklmnopqrstuv' + for (let i = 0; i < 19; i++) { + uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1)) + } + return uuid.join('') + }) () + + this.setState({ + data: [ + {uuid: 'dsfdsfdsfs', remark: '鎻愮幇', subject: '1001 搴撳瓨鐜伴噾', debtor: 124, creditor: ''}, + {uuid: 'dsfdsfsdfdsfs', remark: '璐叆鍥哄畾璧勪骇', subject: '1001 搴撳瓨鐜伴噾', debtor: '', creditor: 124}, + {uuid: 'dsfdsfsdgdrsfs', remark: '杞粨閿�鍞垚鏈�', subject: '1001 搴撳瓨鐜伴噾', debtor: -524, creditor: ''}, + {uuid: 'dsfdsfsdgfdsgdsfs', remark: '鎻愮幇', subject: '1001 搴撳瓨鐜伴噾', debtor: 34, creditor: ''}, + {uuid: 'dsfdsfsdgfdsswgdsfs', type: 'total', total: this.changeMoneyToChinese(354.24), debtor: 354.24, creditor: ''}, + ], + columns: [ + { + title: '鎽樿', + dataIndex: 'remark', + key: 'remark', + width: '22%', + onCell: record => ({ + record, + col: {uuid: 'remark', field: 'remark', tableId: tableId}, + }) + }, + { + title: '浼氳绉戠洰', + dataIndex: 'subject', + key: 'subject', + width: '34%', + onCell: record => ({ + record, + col: {uuid: 'subject', field: 'subject', tableId: tableId}, + }) + }, + { + title: () => (<> + <div className="money-title">鍊熸柟閲戦</div> + <div className="money-uint"> + <span>浜�</span> <span>鍗�</span> <span>鐧�</span> <span>鍗�</span> <span>涓�</span> <span>鍗�</span> + <span>鐧�</span> <span>鍗�</span> <span>鍏�</span> <span>瑙�</span> <span className="last">鍒�</span> + </div> + </>), + dataIndex: 'debtor', + key: 'debtor', + width: '22%', + onCell: record => ({ + record, + col: {uuid: 'debtor', field: 'debtor', tableId: tableId}, + }) + }, + { + title: () => (<> + <div className="money-title">璐锋柟閲戦</div> + <div className="money-uint"> + <span>浜�</span> <span>鍗�</span> <span>鐧�</span> <span>鍗�</span> <span>涓�</span> <span>鍗�</span> + <span>鐧�</span> <span>鍗�</span> <span>鍏�</span> <span>瑙�</span> <span className="last">鍒�</span> + </div> + </>), + dataIndex: 'creditor', + key: 'creditor', + width: '22%', + onCell: record => ({ + record, + col: {uuid: 'creditor', field: 'creditor', tableId: tableId}, + }) + } + ], + tableId + }) + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) + } + + componentDidMount () { + MKEmitter.addListener('nextLine', this.nextLine) + MKEmitter.addListener('delRecord', this.delRecord) + MKEmitter.addListener('changeRecord', this.changeRecord) + } + + /** + * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊 + */ + componentWillUnmount () { + this.setState = () => { + return + } + MKEmitter.removeListener('nextLine', this.nextLine) + MKEmitter.removeListener('delRecord', this.delRecord) + MKEmitter.removeListener('changeRecord', this.changeRecord) + } + + UNSAFE_componentWillReceiveProps(nextProps) { + if (!is(fromJS(this.props.data), fromJS(nextProps.data))) { + this.setState({data: nextProps.data || []}) + } + } + + changeMoneyToChinese = (money) => { + let cnNums = ['闆�', '澹�', '璐�', '鍙�', '鑲�', '浼�', '闄�', '鏌�', '鎹�', '鐜�'] + let cnIntRadice = ['', '鎷�', '浣�', '浠�'] + let cnIntUnits = ['', '涓�', '浜�', '鍏�'] + let cnDecUnits = ['瑙�', '鍒�', '姣�', '鍘�'] + let cnInteger = '鏁�' + let cnIntLast = '鍏�' + let maxNum = 999999999999999.9999 // 鏈�澶у鐞嗙殑鏁板瓧 + let IntegerNum = null + let DecimalNum = null + let ChineseStr = '' + let parts = null // 鍒嗙閲戦鍚庣敤鐨勬暟缁勶紝棰勫畾涔� + let Symbol = '' // 姝h礋鍊兼爣璁� + + if (money === '') return '' + + if (money >= maxNum) return '瓒呭嚭鏈�澶у鐞嗘暟瀛�' + + if (money === 0) { + ChineseStr = cnNums[0] + cnIntLast + cnInteger; + return ChineseStr + } + if(money < 0) { + money = -money + Symbol = '璐�' + } + money = money.toString() // 杞崲涓哄瓧绗︿覆 + if (money.indexOf('.') === -1) { + IntegerNum = money + DecimalNum = '' + } else { + parts = money.split('.') + IntegerNum = parts[0] + DecimalNum = parts[1].substr(0, 4) + } + + if (parseInt(IntegerNum, 10) > 0) { // 鑾峰彇鏁村瀷閮ㄥ垎杞崲 + let zeroCount = 0 + let IntLen = IntegerNum.length + for (let i = 0; i < IntLen; i++) { + let n = IntegerNum.substr(i, 1) + let p = IntLen - i - 1 + let q = p / 4 + let m = p % 4 + + if (n === '0') { + zeroCount++ + } else { + if (zeroCount > 0) { + ChineseStr += cnNums[0] + } + zeroCount = 0 // 褰掗浂 + ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m] + } + + if (m === 0 && zeroCount < 4) { + ChineseStr += cnIntUnits[q] + } + } + ChineseStr += cnIntLast + } + + if (DecimalNum !== '') { // 灏忔暟閮ㄥ垎 + let decLen = DecimalNum.length + + for (let i = 0; i < decLen; i++) { + let n = DecimalNum.substr(i, 1) + if (n !== '0') { + ChineseStr += cnNums[Number(n)] + cnDecUnits[i] + } + } + } + if (ChineseStr === '') { + ChineseStr += cnNums[0] + cnIntLast + cnInteger + } else if (DecimalNum === '') { + ChineseStr += cnInteger + } + + ChineseStr = Symbol + ChineseStr + + return ChineseStr + } + + nextLine = (col, index) => { + const { setting } = this.props + const { edData, initEditLine, tableId } = this.state + + if (col.tableId !== tableId) return + + index = +index + + if (index < edData.length && initEditLine) { + MKEmitter.emit('tdFocus', initEditLine.uuid + (index + 1)) + } else if (col.footEnter === 'add' && setting.addable === 'true') { + setTimeout(() => { + this.plusLine(initEditLine) + }, 10) + } else if (col.footEnter === 'sub') { + setTimeout(() => { + this.checkData() + }, 10) + } + } + + plusLine = (initEditLine) => { + const { edData } = this.state + + let item = {...edData[edData.length - 1]} + + item.key = item.key + 1 + item.$$uuid = '$new' + + this.setState({edData: [...edData, item]}, () => { + MKEmitter.emit('tdFocus', initEditLine.uuid + item.uuid) + }) + } + + delRecord = (id, record) => { + const { tableId, edData } = this.state + + if (id !== tableId) return + + let _data = [] + + if (record.$$uuid === '$new') { + _data = edData.filter(item => item.uuid !== record.uuid) + _data = _data.map((item, index) => { + item.key = index + return item + }) + } else { + _data = edData.map(item => { + if (item.uuid === record.uuid) { + record.$deleted = true + return record + } else { + return item + } + }) + } + + this.setState({edData: _data}) + } + + changeRecord = (id, record) => { + const { tableId } = this.state + + if (id !== tableId) return + + let _data = this.state.edData.map(item => { + if (item.uuid === record.uuid) { + return record + } else { + return item + } + }) + + this.setState({edData: _data}) + } + + addLine = () => { + const { BID } = this.props + const { edData } = this.state + + let item = {} + if (edData.length > 0) { + item = {...edData[edData.length - 1]} + item.key = item.key + 1 + item.$$uuid = '$new' + } else { + item.key = 0 + item.$$uuid = '$new' + item.$$BID = BID || '' + } + + this.setState({edData: [...edData, item]}) + } + + checkData = () => { + const { edData } = this.state + + if (edData.length === 0) { + notification.warning({ + top: 92, + message: '鎻愪氦鏁版嵁涓嶅彲涓虹┖锛�', + duration: 5 + }) + return + } + let err = '' + let data = fromJS(edData).toJS().map(item => { + // let line = [] + // fields.forEach(col => { + // if (col.editable !== 'true' || item.$deleted) { + // if (col.type === 'number') { + // item[col.field] = +item[col.field] + // if (isNaN(item[col.field])) { + // item[col.field] = 0 + // } + // } else { + // item[col.field] = item[col.field] !== undefined ? (item[col.field] + '') : '' + // } + // return + // } + // if (col.type === 'text') { + // let val = item[col.field] !== undefined ? (item[col.field] + '') : '' + // if (col.required === 'true' && !val) { + // line.push(`${col.label}涓嶅彲涓虹┖`) + // } + // item[col.field] = val + // } else if (col.type === 'number') { + // let val = item[col.field] + // if (!val && val !== 0) { + // line.push(`${col.label}涓嶅彲涓虹┖`) + // return + // } + // val = +val + // if (isNaN(val)) { + // line.push(`${col.label}鏁版嵁鏍煎紡閿欒`) + // return + // } + + // val = +val.toFixed(col.decimal || 0) + + // if (typeof(col.max) === 'number' && val > col.max) { + // line.push(`${col.label}涓嶅彲澶т簬${col.max}`) + // } else if (typeof(col.min) === 'number' && val < col.min) { + // line.push(`${col.label}涓嶅彲灏忎簬${col.min}`) + // } + + // item[col.field] = val + // } + // }) + + return item + }) + + if (err) { + notification.warning({ + top: 92, + message: err, + duration: 5 + }) + } else { + this.submit(data) + } + } + + submit = (data) => { + const { BID } = this.props + + let param = { + // excel_in: result.lines, + BID: BID || '' + } + + this.setState({ + loading: true + }) + + param.func = 'submit.innerFunc' + + Api.genericInterface(param).then((res) => { + if (res.status) { + this.execSuccess(res) + } else { + this.execError(res) + } + }, () => { + this.execError({}) + }) + } + + execSuccess = (res) => { + const { submit } = this.props + + if (res && res.ErrCode === 'S') { // 鎵ц鎴愬姛 + notification.success({ + top: 92, + message: res.ErrMesg || this.state.dict['main.action.confirm.success'], + duration: submit.stime ? submit.stime : 2 + }) + } else if (res && res.ErrCode === 'Y') { // 鎵ц鎴愬姛 + Modal.success({ + title: res.ErrMesg || this.state.dict['main.action.confirm.success'] + }) + } else if (res && res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず + + } + + this.setState({ + loading: false + }) + + if (submit.closetab === 'true') { + MKEmitter.emit('popclose') + } + if (submit.execSuccess !== 'never') { + MKEmitter.emit('refreshByButtonResult', submit.$menuId, submit.execSuccess, submit) + } + } + + execError = (res) => { + const { submit } = this.props + + if (res.ErrCode === 'E') { + Modal.error({ + title: res.message || res.ErrMesg, + }) + } else if (res.ErrCode === 'N') { + notification.error({ + top: 92, + message: res.message || res.ErrMesg, + duration: submit.ntime ? submit.ntime : 10 + }) + } else if (res.ErrCode === 'F') { + notification.error({ + className: 'notification-custom-error', + top: 92, + message: res.message || res.ErrMesg, + duration: submit.ftime ? submit.ftime : 10 + }) + } else if (res.ErrCode === 'NM') { + message.error(res.message || res.ErrMesg) + } + + this.setState({ + loading: false + }) + + if (submit.execError !== 'never') { + MKEmitter.emit('refreshByButtonResult', submit.$menuId, submit.execError, submit) + } + } + + render() { + const { tableId, data, columns} = this.state + + const components = { + body: { + row: BodyRow, + cell: BodyCell + } + } + + // 鏁版嵁鏀惰捣鏃讹紝杩囨护宸查�夋暟鎹� + let _data = data + + return ( + <div className="voucher-table-wrap" id={tableId}> + <Table + rowKey="uuid" + components={components} + columns={columns} + dataSource={_data} + bordered={true} + // loading={this.props.loading} + onRow={(record, index) => { + return { + data: record + } + }} + pagination={false} + /> + </div> + ) + } +} + +export default VoucherTable \ No newline at end of file diff --git a/src/tabviews/custom/components/module/voucher/voucherTable/index.scss b/src/tabviews/custom/components/module/voucher/voucherTable/index.scss new file mode 100644 index 0000000..e8175c8 --- /dev/null +++ b/src/tabviews/custom/components/module/voucher/voucherTable/index.scss @@ -0,0 +1,259 @@ +.voucher-table-wrap { + position: relative; + padding: 0px; + + .normal-table-footer { + padding: 10px 0px; + color: rgba(0, 0, 0, 0.65); + } + .normal-table-footer.pagination { + position: absolute; + bottom: 10px; + } + >.ant-table-wrapper { + position: relative; + z-index: 1; + } + .ant-table { + color: inherit; + font-size: inherit; + } + + .money-uint { + display: flex; + span { + display: inline-block; + flex: 1; + text-align: center; + font-size: 12px; + } + span:not(.last) { + border-right: 1px solid #e9e9e9; + } + span:nth-child(3), span:nth-child(6) { + border-color: #91d5ff; + } + span:nth-child(9) { + border-color: #ffa39e; + } + } + + table { + max-width: 100%; + width: 100%; + .ant-table-thead { + tr { + th { + position: relative; + background-color: transparent; + padding: 0; + height: 60px; + line-height: 60px; + text-align: center; + + .ant-table-header-column { + display: block; + width: 100%; + height: 100%; + + .ant-table-column-title { + display: block; + width: 100%; + height: 100%; + font-weight: bold; + font-size: 13px; + } + } + .money-title { + line-height: 30px; + font-weight: bold; + font-size: 13px; + } + .money-uint { + line-height: 30px; + border-top: 1px solid #dadada; + } + } + } + } + .ant-table-selection-column { + width: 60px; + min-width: 60px; + max-width: 60px; + } + .ant-table-tbody { + tr td { + position: relative; + background-color: transparent; + padding: 0; + height: 60px; + vertical-align: top; + + .content-wrap { + padding: 5px; + height: 100%; + font-size: 13px; + font-weight: bold; + } + .money-uint { + height: 100%; + line-height: 60px; + + span { + font-size: 14px; + font-weight: bold; + } + } + .money-uint.down { + span { + color: #ff4d4f; + } + } + } + } + } + .ant-input { + height: 60px; + border-radius: 0; + resize: none; + } + .ant-input-number { + height: 60px; + border-radius: 0; + + .ant-input-number-handler-wrap { + display: none; + } + .ant-input-number-input { + border-radius: 0; + height: 60px; + } + } + .editing_table_cell { + .ant-input { + padding: 0px; + position: absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + border: 1px solid #1890ff; + } + .ant-input-number-input { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + border: 1px solid #1890ff; + } + .anticon { + color: #ff4d4f; + position: absolute; + right: 3px; + top: calc(50% - 8px); + } + } + td.pointer { + position: relative; + } + td.pointer { + .mk-mask { + display: none; + cursor: pointer; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + } + } +} +.edit-custom-table.editable { + td { + background-color: #ffffff!important; + } + td.pointer .mk-mask { + display: block; + } + .mk-operation { + display: none; + } + .ant-table-placeholder { + display: none; + } +} +.edit-custom-table:not(.fixed-height) { + .ant-table-body::-webkit-scrollbar { + width: 8px; + height: 10px; + } + ::-webkit-scrollbar-thumb { + border-radius: 5px; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13); + background: rgba(0, 0, 0, 0.13); + } + ::-webkit-scrollbar-track {/*婊氬姩鏉¢噷闈㈣建閬�*/ + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); + border-radius: 3px; + border: 1px solid rgba(0, 0, 0, 0.07); + background: rgba(0, 0, 0, 0); + } +} +.edit-custom-table.fixed-height { + .ant-table-body { + border-bottom: 1px solid rgba(0, 0, 0, .05); + .ant-table-fixed { + border-bottom: 0; + } + } +} +.edit-custom-table.hidden { + thead { + display: none; + } +} +.edit-custom-table.ghost { + .ant-table-thead > tr { + > th { + color: inherit; + background: transparent; + .ant-table-column-sorter .ant-table-column-sorter-inner { + color: inherit; + } + } + > th:hover { + background: transparent; + } + } + .ant-table-body { + overflow-x: auto; + tr { + td { + background: transparent!important; + } + } + tr:hover td { + background: transparent!important; + } + } +} +.image-scale-modal { + width: 70vw; + min-height: 80vh; + top: 10vh; + .ant-modal-body { + min-height: calc(80vh - 110px); + line-height: calc(80vh - 160px); + text-align: center; + } + .ant-modal-footer { + text-align: center; + span { + display: inline-block; + color: #1890ff; + padding: 5px 15px; + cursor: pointer; + } + } +} \ No newline at end of file diff --git a/src/templates/modalconfig/dragelement/card.jsx b/src/templates/modalconfig/dragelement/card.jsx index e2ab66e..449c503 100644 --- a/src/templates/modalconfig/dragelement/card.jsx +++ b/src/templates/modalconfig/dragelement/card.jsx @@ -155,6 +155,7 @@ wrapperCol={card.labelwidth ? {style: {width: (100 - card.labelwidth) + '%'}} : null} > {formItem} + <div></div> {showField ? <div className="field-name" style={card.writein === 'false' ? {color: 'orange'} : {}}> {card.field}{card.hidden === 'true' ? '锛堥殣钘忥級' : ''}{card.readonly === 'true' ? '锛堝彧璇伙級' : ''}{card.linkField ? <span style={{color: '#1890ff'}}>{`锛堝叧鑱�${card.linkField}锛塦}</span> : ''}{card.supField ? <span style={{color: '#8E44AD'}}>{`锛堜笂绾�${card.supField}锛塦}</span> : ''} </div> : ''} -- Gitblit v1.8.0