From 380b4b3234084862a30faae34a7d3ed70d119f34 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 26 三月 2024 09:33:22 +0800 Subject: [PATCH] 2024-03-26 --- src/menu/components/module/voucher/options.jsx | 22 ++ src/assets/css/viewstyle.scss | 10 src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx | 1 src/tabviews/custom/components/module/voucher/resetRemark/index.jsx | 4 src/components/normalform/modalform/index.jsx | 11 + src/tabviews/custom/components/module/voucher/index.jsx | 293 ++++++++++++++++++++++------- src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx | 2 src/menu/datasource/verifycard/settingform/index.jsx | 3 src/tabviews/custom/components/module/voucher/resetAttach/index.jsx | 7 src/menu/components/module/voucher/index.jsx | 23 +- src/tabviews/custom/components/module/voucher/voucherTable/index.jsx | 100 +++++++-- src/tabviews/custom/components/module/voucher/index.scss | 60 ++--- src/menu/components/module/voucher/index.scss | 47 +--- 13 files changed, 397 insertions(+), 186 deletions(-) diff --git a/src/assets/css/viewstyle.scss b/src/assets/css/viewstyle.scss index d924c51..ceedbf9 100644 --- a/src/assets/css/viewstyle.scss +++ b/src/assets/css/viewstyle.scss @@ -175,8 +175,10 @@ border-color: $color6; } // 涓嬫媺妗� - .ant-select-selection:hover { - border-color: $color5; + .ant-select:not(.ant-select-disabled) { + .ant-select-selection:hover { + border-color: $color5; + } } .ant-select-focused .ant-select-selection, .ant-select-selection:focus, .ant-select-selection:active { border-color: $color5; @@ -187,7 +189,7 @@ background-color: $color6; } // 杈撳叆妗� - .ant-input:hover { + .ant-input:not([disabled]):hover { border-color: $color5; } .ant-input:focus, .ant-input:active { @@ -198,7 +200,7 @@ border-color: $color5; box-shadow: 0 0 0 2px $color2; } - .ant-input-number:hover, .ant-input-number:focus, .ant-input-number:active, .ant-input-number-input:hover, .ant-input-number-input:focus, .ant-input-number-input:active, .ant-input-number-focused:hover, .ant-input-number-focused:focus, .ant-input-number-focused:active { + .ant-input-number:not(.ant-input-number-disabled):hover, .ant-input-number:focus, .ant-input-number:active, .ant-input-number-input:hover, .ant-input-number-input:focus, .ant-input-number-input:active, .ant-input-number-focused:hover, .ant-input-number-focused:focus, .ant-input-number-focused:active { border-color: $color5; } .ant-input-number:focus, .ant-input-number:active { diff --git a/src/components/normalform/modalform/index.jsx b/src/components/normalform/modalform/index.jsx index 776c225..1623373 100644 --- a/src/components/normalform/modalform/index.jsx +++ b/src/components/normalform/modalform/index.jsx @@ -18,6 +18,7 @@ const MKCheckbox = asyncComponent(() => import('./mkCheckbox')) const StyleInput = asyncComponent(() => import('./styleInput')) const MKFileUpload = asyncComponent(() => import('@/tabviews/zshare/fileupload')) +const MkPrintTemps = asyncComponent(() => import('@/menu/components/share/actioncomponent/actionform/mkPrintTemps')) const MKColor = asyncComponent(() => import('@/mob/colorsketch')) // const MKColor = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkColor')) const MkEditIcon = asyncComponent(() => import('@/components/mkIcon')) @@ -314,14 +315,22 @@ </Col> ) return + } else if (item.type === 'printTemps') { + content = <MkPrintTemps onChange={(val) => this.recordChange({[item.field]: val})}/> } if (!content) return if (item.help) { + let help = null + if (typeof(item.help) === 'function') { + help = item.help(this.record) + } else { + help = <span style={{fontSize: '12px'}}>{item.help}</span> + } fields.push( <Col span={item.span || 12} key={index}> - <Form.Item label={label} help={<span style={{fontSize: '12px'}}>{item.help}</span>}> + <Form.Item label={label} help={help}> {getFieldDecorator(item.field, { initialValue: item.initval, rules: item.rules diff --git a/src/menu/components/module/voucher/index.jsx b/src/menu/components/module/voucher/index.jsx index 905ef23..4d26cc9 100644 --- a/src/menu/components/module/voucher/index.jsx +++ b/src/menu/components/module/voucher/index.jsx @@ -122,16 +122,17 @@ <ToolOutlined /> </Popover> <div className="voucher-box"> - {card.wrap.type === 'createVoucher' ? <div className="voucher-header"> - <Button className="add-background header-btn">淇濆瓨骞舵柊澧�</Button> - <Button className="add-background header-btn">淇濆瓨</Button> - <Button className="print-background header-btn">鎵撳嵃</Button> - <Button className="out-background header-btn">鏇村</Button> + {card.wrap.type === 'createVoucher' ? <div className="voucher-header" style={{padding: `10px ${card.wrap.space || 0}px`}}> + <Button>淇濆瓨骞舵柊澧�</Button> + <Button>淇濆瓨</Button> + <Button>鎵撳嵃</Button> + <Button>鏇村</Button> </div> : null} - {card.wrap.type === 'checkVoucher' ? <div className="voucher-header"> - <Button className="add-background header-btn">淇濆瓨</Button> - <Button className="print-background header-btn">鎵撳嵃</Button> - <Button className="out-background header-btn">鍏抽棴</Button> + {card.wrap.type === 'checkVoucher' ? <div className="voucher-header" style={{padding: `10px ${card.wrap.space || 0}px`}}> + <Button>淇濆瓨</Button> + <Button>鎵撳嵃</Button> + <Button>瀹℃牳</Button> + <Button>鍏抽棴</Button> </div> : null} <div className="voucher-body" style={{padding: `0px ${card.wrap.space || 0}px`}}> {card.wrap.type === 'createVoucher' || card.wrap.type === 'checkVoucher' ? <div className="pre-wrap"> @@ -158,8 +159,8 @@ 妯℃澘绫诲瀷: <div>鏃ュ父鏀嚭<DownOutlined/></div> </div> - <Button className="close-temp header-btn">鍏抽棴</Button> - <Button className="save-temp header-btn">淇濆瓨</Button> + <Button>鍏抽棴</Button> + <Button>淇濆瓨</Button> </div> : null} <VoucherTable config={card}/> {card.wrap.type === 'createVoucher' || card.wrap.type === 'checkVoucher' ? <div className="user">鍒跺崟浜猴細</div> : null} diff --git a/src/menu/components/module/voucher/index.scss b/src/menu/components/module/voucher/index.scss index 964fd36..9f43cfe 100644 --- a/src/menu/components/module/voucher/index.scss +++ b/src/menu/components/module/voucher/index.scss @@ -24,10 +24,13 @@ padding: 10px; border-bottom: 1px solid #eeeeee; - .header-btn { + .ant-btn { height: 28px; min-width: 80px; margin-right: 10px; + background-color: #ffffff; + border-color: #d8d8d8; + color: rgba(0, 0, 0, 0.65); } } .voucher-body { @@ -76,12 +79,14 @@ } } } - .header-btn { - float: right; - margin-left: 10px; - } .pre-wrap { padding: 10px 0px; + >.ant-btn { + margin-right: 10px; + background-color: #ffffff; + border-color: #d8d8d8; + color: rgba(0, 0, 0, 0.65); + } } .voucher-date { display: inline-block; @@ -117,38 +122,6 @@ .user { padding-top: 15px; } - } - - .add-background { - background: #26C281; - border-color: #26C281; - color: #ffffff; - } - .print-background { - background-color: #8E44AD; - border-color: #8E44AD; - color: #ffffff; - } - .out-background { - background-color: rgb(50, 197, 210); - border-color: rgb(50, 197, 210); - color: #ffffff; - } - .save-temp { - background-color: #1890ff; - border-color: #1890ff; - color: #ffffff; - } - .close-temp { - background-color: #ffffff; - border-color: #f5222d; - color: #f5222d; - } - - .system-background { - background: #1890ff; - border-color: #1890ff; - color: #ffffff; } } .menu-voucher-box::after { diff --git a/src/menu/components/module/voucher/options.jsx b/src/menu/components/module/voucher/options.jsx index bdc8eb0..2f268e6 100644 --- a/src/menu/components/module/voucher/options.jsx +++ b/src/menu/components/module/voucher/options.jsx @@ -1,3 +1,4 @@ +import React from 'react' import MenuUtils from '@/utils/utils-custom.js' /** @@ -56,6 +57,7 @@ {field: 'voucherType', values: ['createVoucher', 'checkVoucher']}, {field: 'voucherTypeText', values: ['createVoucher', 'checkVoucher']}, {field: 'voucherSign', values: ['createVoucher', 'checkVoucher']}, + {field: 'printTemp', values: ['createVoucher', 'checkVoucher']}, {field: 'supModule', values: ['checkTemp', 'checkVoucher']}, {field: 'attachStatus', values: ['createVoucher', 'checkVoucher']}, ] @@ -138,6 +140,26 @@ ] }, { + type: 'printTemps', + field: 'printTemp', + label: '鎵撳嵃妯℃澘', + initval: wrap.printTemp || '', + help: (record) => { + if (record.printTemp) { + return <span onClick={() => { + sessionStorage.setItem('mk-print-temp', record.printTemp) + window.open('#/hs') + + setTimeout(() => { + sessionStorage.removeItem('mk-print-temp') + }, 50) + }} style={{color: '#1890ff', cursor: 'pointer', fontSize: '13px'}}>#鏌ョ湅妯℃澘</span> + } + return '' + }, + required: true + }, + { type: 'number', field: 'space', label: '鐣欑櫧', diff --git a/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx b/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx index 4ad9280..3d37897 100644 --- a/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx +++ b/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx @@ -74,6 +74,7 @@ showSearch allowClear value={value} + dropdownMatchSelectWidth={false} filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} onSelect={this.selectChange} onChange={(val) => val === undefined && this.selectChange('')} diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx index d52d420..8433cc5 100644 --- a/src/menu/datasource/verifycard/settingform/index.jsx +++ b/src/menu/datasource/verifycard/settingform/index.jsx @@ -683,8 +683,7 @@ wrapClassName="mk-flow-type" visible={visible} width={400} - maskClosable={false} - closable={false} + onCancel={() => this.setState({visible: false})} footer={[ <Button key="cancel" className="mk-green" onClick={() => this.execAddProcess('flowstart')}>鍙戣捣</Button>, <Button key="confirm" className="mk-primary" onClick={() => this.execAddProcess('flowcheck')}>瀹℃壒</Button> diff --git a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx index a400204..6299d11 100644 --- a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx +++ b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx @@ -79,7 +79,7 @@ } ] })( - <InputNumber readOnly={nodetype !== 'node' && nodetype !== 'edge'} precision={0}/> + <InputNumber readOnly={nodetype !== 'node' && nodetype !== 'edge' && nodetype !== 'end'} precision={0}/> )} </Form.Item> </Col> diff --git a/src/tabviews/custom/components/module/voucher/index.jsx b/src/tabviews/custom/components/module/voucher/index.jsx index 8c282b4..6b70332 100644 --- a/src/tabviews/custom/components/module/voucher/index.jsx +++ b/src/tabviews/custom/components/module/voucher/index.jsx @@ -12,10 +12,8 @@ import ResetRemark from './resetRemark' import ResetAttach from './resetAttach' import LoadFromTemp from './loadFromTemp' -import asyncComponent from '@/utils/asyncComponent' import './index.scss' -const PrintVoucher = asyncComponent(() => import('./printVoucher')) const { confirm } = Modal class VoucherModule extends Component { @@ -39,6 +37,7 @@ username: sessionStorage.getItem('User_Name'), remark: '', attachments: 0, + vouAduited: false, attachlist: [], oriAttachs: [], tempTypes: [], @@ -304,6 +303,7 @@ let data = [] if (res.voucher) { + let disabled = res.voucher_status === 'true' data = res.voucher.map(line => { line.uuid = line.subject_id || '' @@ -320,6 +320,7 @@ line.exratename = line.foreign_exratename || '' line.local_currency = line.local_exratecode || '' line.foreign_currency_type = line.foreign_type || '' + line.$disabled = disabled if (line.sup) { line.supAccounts = line.sup.map(cell => { @@ -351,7 +352,8 @@ data: data, attachlist: files, vouDate: res.fibvoucherdate ? moment(res.fibvoucherdate, 'YYYY-MM-DD') : null, - charType: res.voucher_class, + charType: res.voucher_class || 'keeping', + vouAduited: res.voucher_status === 'true', charName: res.voucher_char, charInt: res.voucher_char_int, // orgcode: res.orgcode, @@ -1059,10 +1061,6 @@ this.setState({status: 'change', attachlist: vals, attachments: num}) } - triggermore = () => { - - } - triggerclose = () => { const { config, status } = this.state @@ -1139,72 +1137,227 @@ }) } - render() { - const { type, status, loading, config, orgcode, orgname, typeOptions, tempTypes, charType, charName, charInt, data, vouDate, username, remark, attachments, title, attachlist, tempTypeClass } = this.state + triggerPrint = () => { + const { config, BID } = this.state - return ( - <div className="menu-voucher-wrap" style={config.style}> - {type === 'createVoucher' ? <div className="voucher-header"> - <Button className="add-background header-btn" disabled={status === 'empty'} onClick={() => this.triggersave('add')}>淇濆瓨骞舵柊澧�</Button> - <Button className="add-background header-btn" disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>淇濆瓨</Button> - <PrintVoucher ID={config.uuid + 'print'} data={data} orgname={orgname} vouDate={vouDate} charName={charName} charInt={charInt} attachments={attachments} disabled={status !== 'saved'}/> - <Dropdown overlay={<div className="mk-voucher-dropdown-wrap"> - <SaveAsTemp tempTypes={tempTypes} onChange={this.triggerTempsave}/> - <div className="split"></div> - <LoadFromTemp tempTypes={tempTypes} onChange={this.triggerTempLoad}/> - </div>} trigger={['click']}> - <Button className="out-background header-btn" onClick={this.triggermore}>鏇村</Button> - </Dropdown> - </div> : null} - {type === 'checkVoucher' ? <div className="voucher-header"> - <Button className="add-background header-btn" disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>淇濆瓨</Button> - <PrintVoucher ID={config.uuid + 'print'} data={data} orgname={orgname} vouDate={vouDate} charName={charName} charInt={charInt} attachments={attachments} disabled={status !== 'saved'}/> - <Button className="out-background header-btn" onClick={this.triggerclose}>鍏抽棴</Button> - </div> : null} - <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}> - {type === 'createVoucher' || type === 'checkVoucher' ? <div className="pre-wrap"> - <div className="voucher-code"> - <Select value={charType} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({status: 'change', charType: val, charName: option.props.charName, charInt: option.props.charint})}> - {typeOptions.map(option => - <Select.Option key={option.id} value={option.voucher_class} charName={option.voucher_char} charint={option.voucher_char_int}>{option.voucher_char}</Select.Option> - )} - </Select> - <InputNumber precision={0} min={1} value={charInt} autoComplete="off" onChange={(val) => this.setState({status: 'change', charInt: val})}/> 鍙� + if (!config.wrap.printTemp) { + notification.warning({ + top: 92, + message: '灏氭湭璁剧疆鎵撳嵃妯℃澘锛�', + duration: 5 + }) + return + } + + window.open('#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify({ id: BID, tempId: config.wrap.printTemp, pageId: config.$pageId || '', dataM: sessionStorage.getItem('dataM') })))) + } + + triggerAduit = () => { + const { book, BID, voucherCode, username } = this.state + + if (!book) { + notification.warning({ + top: 92, + message: '璇烽�夋嫨璐﹀锛�', + duration: 5 + }) + return + } + + let param = { + func: 's_fcc_voucher_sub', + ID: BID, + status: 10, + statusname: '宸插鏍�', + voucher_code: voucherCode || '', + username: username, + fullname: sessionStorage.getItem('Full_Name') || '' + } + + const that = this + + confirm({ + content: '纭畾瑕佸鏍稿悧锛�', + onOk() { + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + Modal.success({ + title: '宸茬粡閫氳繃瀹℃牳' + }) + + that.getVoucher() + }) + }, + onCancel() {} + }) + } + + triggerUnAduit = () => { + const { book, BID, voucherCode, username } = this.state + + if (!book) { + notification.warning({ + top: 92, + message: '璇烽�夋嫨璐﹀锛�', + duration: 5 + }) + return + } + + let param = { + func: 's_fcc_voucher_sub', + ID: BID, + status: 0, + statusname: '鍙栨秷瀹℃牳', + voucher_code: voucherCode || '', + username: username, + fullname: sessionStorage.getItem('Full_Name') || '' + } + + const that = this + + confirm({ + content: '纭瑕佸彇娑堝鏍稿悧锛�', + onOk() { + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + Modal.success({ + title: '瀹℃牳宸插彇娑�' + }) + + that.getVoucher() + }) + }, + onCancel() {} + }) + } + + render() { + const { type, status, loading, config, orgcode, typeOptions, tempTypes, charType, charInt, data, vouDate, username, remark, attachments, title, attachlist, tempTypeClass, vouAduited } = this.state + + if (type === 'checkVoucher') { + return ( + <div className="menu-voucher-wrap" style={config.style}> + <div className="voucher-header" style={{padding: `10px ${config.wrap.space || 0}px`}}> + {!vouAduited ?<Button disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>淇濆瓨</Button> : null} + {/* <PrintVoucher ID={config.uuid + 'print'} data={data} orgname={orgname} vouDate={vouDate} charName={charName} charInt={charInt} attachments={attachments} disabled={status !== 'saved'}/> */} + <Button disabled={status !== 'saved'} onClick={this.triggerPrint}>鎵撳嵃</Button> + {vouAduited ? + <Button onClick={this.triggerUnAduit}>鍙栨秷瀹℃牳</Button> : + <Button onClick={this.triggerAduit}>瀹℃牳</Button>} + <Button onClick={this.triggerclose}>鍏抽棴</Button> + </div> + <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}> + <div className="pre-wrap"> + <div className="voucher-code"> + <Select value={charType} disabled={vouAduited} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({status: 'change', charType: val, charName: option.props.charname, charInt: option.props.charint})}> + {typeOptions.map(option => + <Select.Option key={option.id} value={option.voucher_class} charname={option.voucher_char} charint={option.voucher_char_int}>{option.voucher_char}</Select.Option> + )} + </Select> + <InputNumber precision={0} min={1} disabled={vouAduited} value={charInt} autoComplete="off" onChange={(val) => this.setState({status: 'change', charInt: val})}/> 鍙� + </div> + <div className="voucher-date"> + 鏃ユ湡锛�<DatePicker value={vouDate} disabled={vouAduited} onChange={this.changeVouDate}/> + </div> + <div className="voucher-text"> + <Input value={title} placeholder="鍑瘉鏂囨湰" disabled={vouAduited} autoComplete="off" onChange={(e) => this.setState({status: 'change', title: e.target.value})}/> + </div> + <div className="voucher-affix"> + 闄勫崟鎹� <InputNumber precision={0} disabled={vouAduited} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 寮� + <ResetAttach config={config} disabled={vouAduited} orgcode={orgcode} voucherCode={this.state.voucherCode} attachlist={attachlist} onChange={this.resetAttachList}/> + <ResetRemark remark={remark} disabled={vouAduited} ID={config.uuid + 'remark'} onChange={(val) => this.setState({status: 'change', remark: val})}/> + </div> </div> - <div className="voucher-date"> - 鏃ユ湡锛�<DatePicker value={vouDate} onChange={this.changeVouDate}/> - </div> - <div className="voucher-text"> - <Input value={title} placeholder="鍑瘉鏂囨湰" autoComplete="off" onChange={(e) => this.setState({status: 'change', title: e.target.value})}/> - </div> - <div className="voucher-affix"> - 闄勫崟鎹� <InputNumber precision={0} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 寮� - <ResetAttach config={config} orgcode={orgcode} voucherCode={this.state.voucherCode} attachlist={attachlist} onChange={this.resetAttachList}/> - <ResetRemark remark={remark} ID={config.uuid + 'remark'} onChange={(val) => this.setState({status: 'change', remark: val})}/> - </div> - </div> : null} - {type === 'createTemp' || type === 'checkTemp' ? <div className="pre-temp-wrap"> - <div className="temp-text"> - <span>妯℃澘鍚嶇О锛�</span><Input value={title} placeholder="妯℃澘鍚嶇О" autoComplete="off" onChange={(e) => this.setState({title: e.target.value})}/> - </div> - <div className="temp-text"> - <span>妯℃澘绫诲瀷锛�</span> - <Select value={tempTypeClass} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({tempTypeClass: val, tempTypeName: option.props.children})}> - {tempTypes.map(option => - <Select.Option key={option.data_code} value={option.data_code}>{option.data_name}</Select.Option> - )} - </Select> - </div> - <div className="temp-action"> - <Button className="save-temp header-btn" onClick={() => this.triggerTempsave()}>淇濆瓨</Button> - <Button className="close-temp header-btn" onClick={this.triggerclose}>鍏抽棴</Button> - </div> - </div> : null} - <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> + <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> + </div> + <div className="user" style={{paddingLeft: `${config.wrap.space || 0}px`}}>鍒跺崟浜猴細{username}</div> </div> - {type === 'createVoucher' || type === 'checkVoucher' ? <div className="user">鍒跺崟浜猴細{username}</div> : null} - </div> - ) + ) + } else if (type === 'createVoucher') { + return ( + <div className="menu-voucher-wrap" style={config.style}> + <div className="voucher-header" style={{padding: `10px ${config.wrap.space || 0}px`}}> + <Button disabled={status === 'empty'} onClick={() => this.triggersave('add')}>淇濆瓨骞舵柊澧�</Button> + <Button disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>淇濆瓨</Button> + <Button disabled={status !== 'saved'} onClick={this.triggerPrint}>鎵撳嵃</Button> + <Dropdown overlay={<div className="mk-voucher-dropdown-wrap"> + <SaveAsTemp tempTypes={tempTypes} onChange={this.triggerTempsave}/> + <div className="split"></div> + <LoadFromTemp tempTypes={tempTypes} onChange={this.triggerTempLoad}/> + </div>} trigger={['hover']} placement="bottomCenter"> + <Button>鏇村</Button> + </Dropdown> + </div> + <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}> + <div className="pre-wrap"> + <div className="voucher-code"> + <Select value={charType} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({status: 'change', charType: val, charName: option.props.charname, charInt: option.props.charint})}> + {typeOptions.map(option => + <Select.Option key={option.id} value={option.voucher_class} charname={option.voucher_char} charint={option.voucher_char_int}>{option.voucher_char}</Select.Option> + )} + </Select> + <InputNumber precision={0} min={1} value={charInt} autoComplete="off" onChange={(val) => this.setState({status: 'change', charInt: val})}/> 鍙� + </div> + <div className="voucher-date"> + 鏃ユ湡锛�<DatePicker value={vouDate} onChange={this.changeVouDate}/> + </div> + <div className="voucher-text"> + <Input value={title} placeholder="鍑瘉鏂囨湰" autoComplete="off" onChange={(e) => this.setState({status: 'change', title: e.target.value})}/> + </div> + <div className="voucher-affix"> + 闄勫崟鎹� <InputNumber precision={0} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 寮� + <ResetAttach config={config} orgcode={orgcode} voucherCode={this.state.voucherCode} attachlist={attachlist} onChange={this.resetAttachList}/> + <ResetRemark remark={remark} ID={config.uuid + 'remark'} onChange={(val) => this.setState({status: 'change', remark: val})}/> + </div> + </div> + <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> + </div> + <div className="user" style={{paddingLeft: `${config.wrap.space || 0}px`}}>鍒跺崟浜猴細{username}</div> + </div> + ) + } else { + return ( + <div className="menu-voucher-wrap" style={config.style}> + <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}> + <div className="pre-temp-wrap"> + <div className="temp-text"> + <span>妯℃澘鍚嶇О锛�</span><Input value={title} placeholder="妯℃澘鍚嶇О" autoComplete="off" onChange={(e) => this.setState({title: e.target.value})}/> + </div> + <div className="temp-text"> + <span>妯℃澘绫诲瀷锛�</span> + <Select value={tempTypeClass} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({tempTypeClass: val, tempTypeName: option.props.children})}> + {tempTypes.map(option => + <Select.Option key={option.data_code} value={option.data_code}>{option.data_name}</Select.Option> + )} + </Select> + </div> + <div className="temp-action"> + <Button onClick={() => this.triggerTempsave()}>淇濆瓨</Button> + <Button onClick={this.triggerclose}>鍏抽棴</Button> + </div> + </div> + <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> + </div> + </div> + ) + } } } diff --git a/src/tabviews/custom/components/module/voucher/index.scss b/src/tabviews/custom/components/module/voucher/index.scss index 4eec234..0849306 100644 --- a/src/tabviews/custom/components/module/voucher/index.scss +++ b/src/tabviews/custom/components/module/voucher/index.scss @@ -14,10 +14,23 @@ padding: 10px; border-bottom: 1px solid #eeeeee; - .header-btn { + .ant-btn { height: 28px; min-width: 80px; margin-right: 10px; + background-color: #ffffff; + border-color: #d8d8d8; + color: rgba(0, 0, 0, 0.65); + } + .ant-btn[disabled] { + background-color: #dadada!important; + border-color: #dadada!important; + color: #ffffff!important; + } + .ant-btn:not([disabled]):hover { + background-color: var(--mk-sys-color); + border-color: var(--mk-sys-color); + color: #ffffff; } } .voucher-body { @@ -91,42 +104,14 @@ .ant-btn { margin-left: 15px; } + .ant-btn:hover { + color: var(--mk-sys-color); + border-color: var(--mk-sys-color); + } } } } - .add-background { - background: #26C281; - border-color: #26C281; - color: #ffffff; - } - .print-background { - background-color: #8E44AD; - border-color: #8E44AD; - color: #ffffff; - } - .out-background { - background-color: rgb(50, 197, 210); - border-color: rgb(50, 197, 210); - color: #ffffff; - } - - .save-temp { - background-color: var(--mk-sys-color); - border-color: var(--mk-sys-color); - color: #ffffff; - } - .close-temp { - background-color: #ffffff; - border-color: #f5222d; - color: #f5222d; - } - - .system-background { - background: var(--mk-sys-color); - border-color: var(--mk-sys-color); - color: #ffffff; - } .user { padding: 15px 30px 0px; } @@ -145,10 +130,19 @@ border: 1px solid #d8d8d8; border-radius: 4px; min-height: 66px; + overflow: hidden; + .ant-btn { display: block; width: 100%; border: none; + color: rgba(0, 0, 0, 0.65); + border-radius: 0; + } + .ant-btn:not([disabled]):hover { + background-color: var(--mk-sys-color); + border-color: var(--mk-sys-color); + color: #ffffff; } .split { width: 100%; diff --git a/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx b/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx index cbf864d..652b60d 100644 --- a/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx +++ b/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx @@ -231,6 +231,7 @@ } render() { + const { disabled } = this.props const { visible, upVisible, docVisible, files, list, documents, loading } = this.state return ( @@ -248,8 +249,8 @@ destroyOnClose > {loading ? <Spin /> : null} - <Button type="link" className="attach-type-btn" disabled={loading} onClick={() => this.setState({upVisible: true})}>涓婁紶鏂版枃浠�</Button> - <Button type="link" className="attach-type-btn" disabled={loading} onClick={() => this.setState({docVisible: true, selectDocs: []})}>浠庝細璁$數瀛愭。妗堥�夋嫨</Button> + <Button type="link" className="attach-type-btn" disabled={loading || disabled} onClick={() => this.setState({upVisible: true})}>涓婁紶鏂版枃浠�</Button> + <Button type="link" className="attach-type-btn" disabled={loading || disabled} onClick={() => this.setState({docVisible: true, selectDocs: []})}>浠庝細璁$數瀛愭。妗堥�夋嫨</Button> <div className="attach-selected-list"> {list.map(item => { return <div className="attach-item" key={item.id}> @@ -259,7 +260,7 @@ <div>{item.data_name ? item.data_name + ' / ' : ''}{item.attachments_title}</div> </div> <div> - <DeleteOutlined onClick={() => this.deleteFile(item.id)}/> + {!disabled ? <DeleteOutlined onClick={() => this.deleteFile(item.id)}/> : null} </div> </div> })} diff --git a/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx b/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx index a2a28b9..53af62e 100644 --- a/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx +++ b/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx @@ -37,7 +37,7 @@ } render() { - const { ID } = this.props + const { ID, disabled } = this.props const { visible, remark } = this.state return ( @@ -52,7 +52,7 @@ onCancel={() => { this.setState({ visible: false })}} destroyOnClose > - <TextArea id={ID} defaultValue={remark} rows={6}/> + <TextArea id={ID} disabled={disabled} defaultValue={remark} rows={6}/> </Modal> </> ) diff --git a/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx b/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx index ba436ea..6edc5b7 100644 --- a/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx +++ b/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx @@ -712,7 +712,9 @@ if (record.type === 'total') { children = <div className="content-wrap" style={{lineHeight: '60px'}}>鍚堣: {val}</div> colSpan = 2 - } else { + } else if (record.$disabled) { + children = <div className="content-wrap">{val}</div> + } else { extra = <PlusOutlined onClick={this.plusLine}/> if (editing) { @@ -817,6 +819,17 @@ <span><InputNumber precision={4} className="inner-input" id={col.uuid + record.uuid + 'price'} defaultValue={record.net_unitprice || 0} onChange={(val) => this.onChange(val)} onPressEnter={this.pricePress} onBlur={this.priceBlur}/></span> </span> </div> + } else if (record.$disabled) { + countNode = <div className="count-wrap"> + <span style={{marginRight: '5px'}}> + <span>鏁伴噺锛�</span> + <span>{record.fcc_count || 0}</span> + </span> + <span> + <span>鍗曚环锛�</span> + <span>{record.net_unitprice || 0}</span> + </span> + </div> } else { countNode = <div className="count-wrap"> <span style={{marginRight: '5px'}} onClick={this.editCount}> @@ -891,6 +904,21 @@ <span><InputNumber precision={2} className="inner-input" id={col.uuid + record.uuid + 'origin'} defaultValue={record.foreign_amount || 0} onChange={(val) => this.onChange(val)} onPressEnter={this.originPress} onBlur={this.originBlur}/></span> </span> </div> + } else if (record.$disabled) { + currencyNode = <div className="count-wrap"> + <span style={{marginRight: '5px'}}> + <span>璐у竵锛�</span> + <span>{record.exratename || ''}</span> + </span> + <span style={{marginRight: '5px'}}> + <span>姹囩巼锛�</span> + <span>{record.unitratio || 1}</span> + </span> + <span> + <span>鍘熷竵锛�</span> + <span>{record.foreign_amount || 0}</span> + </span> + </div> } else { currencyNode = <div className="count-wrap"> <span style={{marginRight: '5px'}} onClick={this.editCurrency}> @@ -909,11 +937,19 @@ } } - children = <div className="content-wrap" onClick={this.focus}> - {val} - {countNode} - {currencyNode} - </div> + if (record.$disabled) { + children = <div className="content-wrap"> + {val} + {countNode} + {currencyNode} + </div> + } else { + children = <div className="content-wrap" onClick={this.focus}> + {val} + {countNode} + {currencyNode} + </div> + } } } } else if (col.field === 'debit') { @@ -930,13 +966,23 @@ } vals = (val * 100).toFixed(0).split('').reverse() } - 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 (record.$disabled) { + children = <div className={'money-uint' + (down ? ' down' : '')}> + <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 { + 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 === 'credit') { - extra = <CloseOutlined onClick={this.delVoucher}/> + if (record.type !== 'total' && !record.$disabled) { + extra = <CloseOutlined onClick={this.delVoucher}/> + } if (editing) { children = <InputNumber id={col.uuid + record.uuid} precision={2} defaultValue={record.credit} onChange={(val) => this.onChange(val)} onPressEnter={this.enterPress} onBlur={this.onBlur}/> @@ -951,10 +997,18 @@ } vals = (val * 100).toFixed(0).split('').reverse() } - 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 (record.$disabled) { + children = <div className={'money-uint' + (down ? ' down' : '')}> + <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 { + 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> + } } } @@ -966,17 +1020,17 @@ class VoucherTable extends Component { static propTpyes = { - config: PropTypes.object, // 鑿滃崟Id - data: PropTypes.any, // 琛ㄦ牸鏁版嵁 - loading: PropTypes.bool, // 琛ㄦ牸鍔犺浇涓� - onChange: PropTypes.func, // 琛ㄦ牸鍙樺姩 + config: PropTypes.object, + data: PropTypes.any, + loading: PropTypes.bool, + onChange: PropTypes.func } state = { data: [], edData: [], - tableId: '', // 琛ㄦ牸ID - columns: null, // 鏄剧ず鍒� + tableId: '', + columns: null, } UNSAFE_componentWillMount () { @@ -1105,9 +1159,11 @@ return item }) + let disabled = _data[0] && _data[0].$disabled ? true : false + if (_data.length < 4) { for (let i = _data.length - 1; i < 4; i++) { - _data.push({uuid: Utils.getguid(), index: i + 1, subject_voucher_text: '', subject_code: '', subject_name: '', debit: '', credit: ''}) + _data.push({uuid: Utils.getguid(), $disabled: disabled, index: i + 1, subject_voucher_text: '', subject_code: '', subject_name: '', debit: '', credit: ''}) } } return _data -- Gitblit v1.8.0