From 0a775d67b17400de3bbac4767d5ea25e6f0d14f9 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 06 二月 2023 15:15:00 +0800 Subject: [PATCH] 2023-02-06 --- src/tabviews/custom/components/module/voucher/index.jsx | 176 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 143 insertions(+), 33 deletions(-) diff --git a/src/tabviews/custom/components/module/voucher/index.jsx b/src/tabviews/custom/components/module/voucher/index.jsx index ca3cc7b..82e9e79 100644 --- a/src/tabviews/custom/components/module/voucher/index.jsx +++ b/src/tabviews/custom/components/module/voucher/index.jsx @@ -1,15 +1,17 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Button, Select, Input, Modal, DatePicker, notification } from 'antd' +import { Button, Select, Input, Modal, DatePicker, notification, InputNumber } from 'antd' import moment from 'moment' import Api from '@/api' +import Utils from '@/utils/utils.js' import asyncComponent from '@/utils/asyncComponent' import MKEmitter from '@/utils/events.js' import './index.scss' const { confirm } = Modal +const { TextArea } = Input const VoucherTable = asyncComponent(() => import('./voucherTable')) class VoucherModule extends Component { @@ -26,10 +28,16 @@ tbdata: [], typeOptions: [], charType: '', + charName: '', charInt: '', vouDate: null, book: null, username: sessionStorage.getItem('User_Name'), + remark: '', + remarkVisible: false, + attachments: 0, + title: '', + delItems: [], status: '' // 鏂板缓鏃讹紝empty銆乧hange銆乻aved } @@ -113,8 +121,9 @@ let param = { func: 's_get_fcc_account_data', - account_code: book.account_code || '', - fcc_date: book.months ? book.months + '-01' : moment().format('YYYY-MM-DD') + // account_code: book.account_code || '', + fcc_date: book.months ? book.months + '-01' : moment().format('YYYY-MM-DD'), + BID: book.id } Api.genericInterface(param).then(res => { @@ -132,6 +141,7 @@ this.setState({ typeOptions: typeOptions, charType: typeOptions[0] ? typeOptions[0].voucher_class : '', + charName: typeOptions[0] ? typeOptions[0].voucher_char : '', charInt: typeOptions[0] ? typeOptions[0].voucher_char_int : '', }) @@ -184,8 +194,13 @@ department: department, project: project, inventory: inventory, + currency: res.currency || [], employee: employee, cash_flow: cash_flow, + orgcode: res.orgcode, + orgname: res.orgname, + account_code: res.account_code, + account_year_code: res.account_year_code } window.GLOB.CacheVoucher.set(config.uuid, message) @@ -227,11 +242,12 @@ } triggersave = (t) => { - const { tbdata } = this.state + const { tbdata, delItems } = this.state let err = '' let tip = '' let list = [] + let _Items = [...delItems] tbdata.forEach((line, index) => { if (err) return @@ -247,7 +263,10 @@ if (!line.remark && !line.subjectscode && !line.debtor && line.debtor !== 0 && !line.creditor && line.creditor !== 0) { if (_index === 1) { err = '绗�1琛屼笉鍙负绌恒��' + } else if (line.$origin) { + _Items.push(line) } + return } @@ -259,6 +278,8 @@ err = `绗�${_index}琛岋紝璇疯緭鍏ラ噾棰濄�俙 } else if (line.debtor === 0 || line.creditor === 0) { err = `绗�${_index}琛岋紝閲戦涓嶈兘涓�0銆俙 + } else if (line.foreign_currency_type === 'Y' && !line.origin) { + err = `绗�${_index}琛岋紝鍘熷竵涓嶅彲涓虹┖鎴栦负0銆俙 } else if (line.sup_accounting) { line.sup_accounting.split(',').forEach(item => { if (!line[item]) { @@ -300,17 +321,17 @@ confirm({ content: tip + '纭瑕佷繚瀛樺悧锛�', onOk() { - _this.voucherSave(list, t) + _this.voucherSave(list, _Items, t) }, onCancel() {} }) } else { - this.voucherSave(list, t) + this.voucherSave(list, _Items, t) } } - voucherSave = (list, t) => { - const { BID, config, charInt, charType, book } = this.state + voucherSave = (list, items, t) => { + const { config, charInt, charType, vouDate, book, remark, charName, attachments, title } = this.state if (!book) { notification.warning({ @@ -321,29 +342,65 @@ return } + let message = window.GLOB.CacheVoucher.get(config.uuid) || {} + let param = { func: 's_fcc_voucher_addupt', - BID: BID, + BID: book.id, + ID: Utils.getguid(), voucher_code: '', - voucher_text: '', - remark: '', - account_year_code: '', - voucher_type: '', - voucher_type_text: '', - orgcode: '', - orgname: '', - voucher_class: '', + voucher_text: title, + remark: remark, + account_year_code: book.account_year_code || '', + voucher_type: config.wrap.voucherType || '', + voucher_type_text: config.wrap.voucherTypeText || '', + orgcode: message.orgcode || '', + orgname: message.orgname || '', + voucher_class: charType, years: book.years, - business_type: '', - voucher_sign: '', - voucher_char: charType, + business_type: config.wrap.businessType || '', + voucher_sign: config.wrap.voucherSign || '', + voucher_char: charName, voucher_char_int: charInt, account_code: book.account_code || '', - fibvoucherdate: '', + fibvoucherdate: moment(vouDate).format('YYYY-MM-DD'), UserName: sessionStorage.getItem('User_Name') || '', FullName: sessionStorage.getItem('Full_Name') || '', + attachments_int: attachments, sup_data: '', subject_data: '' + } + + // subject_id,subject_voucher_code,voucher_lp,subject_code,subject_name + // ,subject_voucher_text,fcc_count,net_unitprice,unit,net_amount,direction_type + // ,exratecode,exratename,unitratio,sup_accounting ,direction_type_count,src_amount,deleted,local_exratecode + + // sup_id,sup_voucher_code,sup_voucher_lp,voucher_sup_lp,sup_subject_code,sup_subject_name,sup_voucher_text,sup_direction_type,sup_net_amount,customercode,customername,suppliercode,suppliername,co_pro_code,co_pro_name,workercode,workername,project_code,project_name,productcode,productname,cash_flow_code,cash_flow_name,sup_acc_code_01,sup_acc_name_01,sup_acc_code_02,sup_acc_name_02,sup_acc_code_03,sup_acc_name_03,sup_acc_code_04,sup_acc_name_04,sup_acc_code_05,sup_acc_name_05,sup_acc_code_06,sup_acc_name_06,sup_acc_code_07,sup_acc_name_07,sup_acc_code_08,sup_acc_name_08,sup_acc_code_09,sup_acc_name_09,sup_acc_code_10,sup_acc_name_10,sup_bid + + let sup_data = [] + + let subject_data = list.map(item => { + let count = item.count_type === 'Y' + let curr = item.foreign_currency_type === 'Y' + if (item.sup_accounting) { + item.sup_accounting.split(',').forEach(n => { + + }) + } + sup_data.push(`${item.uuid},sup_voucher_code,sup_voucher_lp,voucher_sup_lp,sup_subject_code,sup_subject_name,sup_voucher_text,sup_direction_type,sup_net_amount,customercode,customername,suppliercode,suppliername,co_pro_code,co_pro_name,workercode,workername,project_code,project_name,productcode,productname,cash_flow_code,cash_flow_name,sup_acc_code_01,sup_acc_name_01,sup_acc_code_02,sup_acc_name_02,sup_acc_code_03,sup_acc_name_03,sup_acc_code_04,sup_acc_name_04,sup_acc_code_05,sup_acc_name_05,sup_acc_code_06,sup_acc_name_06,sup_acc_code_07,sup_acc_name_07,sup_acc_code_08,sup_acc_name_08,sup_acc_code_09,sup_acc_name_09,sup_acc_code_10,sup_acc_name_10,sup_bid`) + return `${item.uuid},'','','${item.subjectscode}','${item.subjectsname}','${item.remark}',${count ? item.count || 0 : 0},${count ? item.price || 0 : 0},'${item.unit}',${item.debtor || item.creditor},'${item.debtor ? 'debit' : 'credit'}','${curr ? item.exratecode : '01010001'}','${curr ? item.exratename : 'CNY'}',${curr ? item.unitratio || 0 : 0},'${item.sup_accounting}',${item.debtor ? 1 : -1},${curr ? item.origin || 0 : 0},0,'${item.local_currency || ''}'` + }) + + items.forEach(item => { + let count = item.count_type === 'Y' + let curr = item.foreign_currency_type === 'Y' + subject_data.push(`${item.uuid},'','','${item.subjectscode}','${item.subjectsname}','${item.remark}',${count ? item.count || 0 : 0},${count ? item.price || 0 : 0},'${item.unit}',${item.debtor || item.creditor},'${item.debtor ? 'debit' : 'credit'}','${curr ? item.exratecode : '01010001'}','${curr ? item.exratename : 'CNY'}',${curr ? item.unitratio || 0 : 0},'${item.sup_accounting}',${item.debtor ? 1 : -1},${curr ? item.origin || 0 : 0},1,'${item.local_currency || ''}'`) + }) + + param.subject_data = window.btoa(window.encodeURIComponent(subject_data.join(';un'))) + + if (param) { + return } Api.genericInterface(param).then(res => { @@ -359,31 +416,70 @@ if (t === 'add') { this.setState({ status: 'empty', + remark: '', tbdata: [], + delItems: [], charInt: charInt + 1 }) MKEmitter.emit('cleartable', config.uuid) } else { this.setState({ - status: 'saved' + status: 'saved', + delItems: [], }) } }) } triggerprint = () => { - + this.setState({remarkVisible: true}) } - dataChange = (data) => { - this.setState({ - status: 'change', - tbdata: data - }) + remarkSubmit = () => { + const { config } = this.state + let node = document.getElementById(config.uuid + 'remark') + let val = node.value + + if (val && val.length > 512) { + notification.warning({ + top: 92, + message: '褰撳墠鍐呭瓒呴暱锛屽娉ㄦ渶澶�512涓瓧绗︺��', + duration: 5 + }) + return + } + this.setState({remark: val, remarkVisible: false}) + } + + dataChange = (data, item) => { + if (item) { + this.setState({ + status: 'change', + tbdata: data, + delItems: [...this.state.delItems, item] + }) + } else { + this.setState({ + status: 'change', + tbdata: data + }) + } + } + + changeAttach = (val) => { + let _val = val + + if (isNaN(val) || val < 0) { + _val = 0 + } else { + _val = parseInt(val) + } + + this.setState({attachments: _val}) } render() { - const { type, status, loading, config, typeOptions, charType, charInt, data, vouDate, username } = this.state + const { type, status, loading, config, typeOptions, charType, charInt, data, vouDate, username, remark, remarkVisible, attachments, title } = this.state return ( <div className="menu-voucher-wrap" style={config.style}> @@ -396,18 +492,21 @@ <div className="voucher-body"> {type === 'createVoucher' ? <div className="pre-wrap"> <div className="voucher-code"> - <Select value={charType} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({charType: val, charInt: option.props.charint})}> + <Select value={charType} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({charType: val, charName: option.props.charName, charInt: option.props.charint})}> {typeOptions.map(option => - <Select.Option key={option.voucher_char_int} value={option.voucher_class} charint={option.voucher_char_int}>{option.voucher_char}</Select.Option> + <Select.Option key={option.voucher_char_int} value={option.voucher_class} charName={option.voucher_char} charint={option.voucher_char_int}>{option.voucher_char}</Select.Option> )} </Select> - <Input value={charInt} autoComplete="off" onChange={(e) => this.setState({charInt: e.target.value})}/> 鍙� + <InputNumber precision={0} min={1} value={charInt} autoComplete="off" onChange={(val) => this.setState({charInt: val})}/> 鍙� </div> <div className="voucher-date"> 鏃ユ湡锛�<DatePicker value={vouDate} onChange={(val) => this.setState({vouDate: val})}/> </div> + <div className="voucher-text"> + <Input value={title} placeholder="鍑瘉鏂囨湰" autoComplete="off" onChange={(e) => this.setState({title: e.target.value})}/> + </div> <div className="voucher-affix"> - 闄勫崟鎹� <Input autoComplete="off" /> 寮� + 闄勫崟鎹� <InputNumber precision={0} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 寮� <Button type="link" className="" onClick={this.triggerprint}>闄勪欢</Button> <Button type="link" className="" onClick={this.triggerprint}>澶囨敞</Button> </div> @@ -415,6 +514,17 @@ <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> </div> <div className="user">鍒跺崟浜猴細{username}</div> + <Modal + title="澶囨敞" + visible={remarkVisible} + width={700} + maskClosable={false} + onOk={this.remarkSubmit} + onCancel={() => { this.setState({ remarkVisible: false })}} + destroyOnClose + > + <TextArea id={config.uuid + 'remark'} defaultValue={remark} rows={6}/> + </Modal> </div> ) } -- Gitblit v1.8.0