From feb1479b80e84e11d1008e87765593e6f5468622 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 13 五月 2025 11:18:28 +0800 Subject: [PATCH] 2025-05-13 --- src/tabviews/custom/components/module/voucher/index.jsx | 1320 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 1,255 insertions(+), 65 deletions(-) diff --git a/src/tabviews/custom/components/module/voucher/index.jsx b/src/tabviews/custom/components/module/voucher/index.jsx index e423749..fb67d1d 100644 --- a/src/tabviews/custom/components/module/voucher/index.jsx +++ b/src/tabviews/custom/components/module/voucher/index.jsx @@ -1,15 +1,20 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Button, Select, Input, DatePicker, notification } from 'antd' +import { Button, Select, Input, Modal, DatePicker, notification, InputNumber, Dropdown } from 'antd' import moment from 'moment' import Api from '@/api' -import asyncComponent from '@/utils/asyncComponent' +import Utils from '@/utils/utils.js' import MKEmitter from '@/utils/events.js' +import VoucherTable from './voucherTable' +import SaveAsTemp from './saveAsTemp' +import ResetRemark from './resetRemark' +import ResetAttach from './resetAttach' +import LoadFromTemp from './loadFromTemp' import './index.scss' -const VoucherTable = asyncComponent(() => import('./voucherTable')) +const { confirm } = Modal class VoucherModule extends Component { static propTpyes = { @@ -18,13 +23,33 @@ state = { BID: '', + type: 'createVoucher', config: null, loading: false, - data: null, - disableAdd: false, - disableSave: false, + data: [], + tbdata: [], typeOptions: [], - book: null + charType: '', + charName: '', + charInt: '', + vouDate: null, + book: null, + username: sessionStorage.getItem('User_Name'), + remark: '', + attachments: 0, + vouAduited: false, + vouReadOnly: false, + attachlist: [], + oriAttachs: [], + tempTypes: [], + tempTypeClass: '', + tempTypeName: '', + title: '', + orgcode: '', + orgname: '', + status: '', // 鏂板缓鏃讹紝empty銆乧hange銆乻aved + saved: false, + voucherCode: '' } UNSAFE_componentWillMount () { @@ -32,7 +57,7 @@ let BID = '' let BData = '' - + if (config.wrap.supModule) { BData = window.GLOB.CacheData.get(config.wrap.supModule) } else { @@ -42,12 +67,44 @@ BID = BData.$BID || '' } + let book = null + let vouDate = null + if (config.wrap.supBook) { + book = window.GLOB.CacheData.get(config.wrap.supBook) || null + + if (book) { + let month = book.months + vouDate = moment() + + if (month && month < moment().format('YYYY-MM')) { + vouDate = moment(month, 'YYYY-MM').endOf('month') + } + } + } + + // config.wrap.type = 'checkVoucher' + // BID = '20230228173542370E2F4FC1773704C29A6A4' + + // config.wrap.type = 'checkTemp' + // BID = '20230214174458780MFR8IA576ON4VKNOLVH' + + window.GLOB.CacheVoucher.delete(config.uuid) + let type = config.wrap.type || 'createVoucher' + + if (type === 'createVoucher' || type === 'createTemp') { + BID = Utils.getguid() + } + this.setState({ + book: book, + vouDate: vouDate, config: fromJS(config).toJS(), + type: type, BID: BID || '', - book: window.GLOB.CacheData.get(config.wrap.supBook) || null + status: 'empty' }, () => { this.loadData() + this.getVoucher() }) } @@ -71,32 +128,43 @@ } resetParentParam = (MenuID, id, data) => { - const { config } = this.state + const { config, type } = this.state if (config.wrap.supBook === MenuID) { - this.setState({ book: data }, () => { + let month = data.months + let vouDate = moment() + + if (month && month < moment().format('YYYY-MM')) { + vouDate = moment(month, 'YYYY-MM').endOf('month') + } + + this.setState({ book: data, vouDate }, () => { this.loadData() + this.getVoucher() }) return } - if (!config.wrap.supModule || config.wrap.supModule !== MenuID) return + if (!config.wrap.supModule || config.wrap.supModule !== MenuID || type === 'createVoucher' || type === 'createTemp') return if (id !== this.state.BID || id !== '') { - this.setState({ BID: id, BData: data }, () => { - this.loadData() + this.setState({ BID: id }, () => { + this.getVoucher() }) } } loadData = () => { - const { book } = this.state + const { book, config, type } = this.state if (!book) return 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'), + account_year_code: book.account_year_code || '', + months: book.months ? book.months : moment().format('YYYY-MM'), + BID: book.id } Api.genericInterface(param).then(res => { @@ -109,73 +177,1195 @@ return } + let typeOptions = res.char || [] + if (type === 'createVoucher') { + let charInt = typeOptions[0] ? typeOptions[0].voucher_char_int + 1 : 1 + + this.setState({ + typeOptions: typeOptions, + charType: typeOptions[0] ? typeOptions[0].voucher_class : '', + charName: typeOptions[0] ? typeOptions[0].voucher_char : '', + charInt: charInt, + orgcode: res.orgcode, + orgname: res.orgname, + tempTypes: res.temp_type || [] + }) + } else { + this.setState({ + typeOptions: typeOptions, + orgcode: res.orgcode, + orgname: res.orgname, + tempTypes: res.temp_type || [] + }) + } + + let names = {} + let supplier = [] + let customer = [] + let department = [] + let project = [] + let inventory = [] + let employee = [] + let cash_flow = [] + let others = [] + let logistics = [] + let lessor = [] + + res.sup && res.sup.forEach(item => { + names[item.sup_type_code] = item.sup_type_name + }) + + res.supplier && res.supplier.forEach(item => { + supplier.push({value: item.suppliercode, label: item.suppliername}) + }) + + res.logistics && res.logistics.forEach(item => { + logistics.push({value: item.logistics_code, label: item.logistics_name}) + }) + + res.lessor && res.lessor.forEach(item => { + lessor.push({value: item.lessor_code, label: item.lessor_name}) + }) + + res.customer && res.customer.forEach(item => { + customer.push({value: item.customercode, label: item.customername}) + }) + res.co_pro && res.co_pro.forEach(item => { + department.push({value: item.co_pro_code, label: item.co_pro_name}) + }) + + res.pm && res.pm.forEach(item => { + project.push({value: item.projectcode, label: item.projectname}) + }) + + res.materiel && res.materiel.forEach(item => { + inventory.push({value: item.productcode, label: item.productname}) + }) + + res.workers && res.workers.forEach(item => { + employee.push({value: item.workercode, label: item.workername}) + }) + + res.cash_flow && res.cash_flow.forEach(item => { + cash_flow.push({value: item.cash_flow_code, label: item.cash_flow_name}) + }) + + res.others && res.others.forEach(item => { + others.push({value: item.sup_acc_code, label: item.sup_acc_name, parentId: item.sup_acc_type}) + }) + + let message = { + subjects: res.subjects || [], + names: names, + supplier: supplier, + logistics: logistics, + lessor: lessor, + customer: customer, + department: department, + project: project, + inventory: inventory, + currency: res.currency || [], + employee: employee, + cash_flow: cash_flow, + others: others, + account_code: res.account_code, + account_year_code: res.account_year_code + } + + window.GLOB.CacheVoucher.set(config.uuid, message) }) } - triggeradd = () => { + getVoucher = () => { + const { book, BID, type } = this.state + + if (!book || !BID || type === 'createVoucher' || type === 'createTemp') return + + let param = { + func: 's_get_fcc_voucher', + BID: book.id, + ID: BID + } + + if (type === 'checkTemp') { + param.func = 's_get_fcc_voucher_temp' + } + + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + let data = [] + if (res.voucher) { + let disabled = res.voucher_status === 'true' + data = res.voucher.map(line => { + line.uuid = line.subject_id || '' + + if (line.direction_type === 'credit') { + line.credit = line.net_amount || 0 + line.debit = '' + } else { + line.debit = line.net_amount || 0 + line.credit = '' + } + + line.unitratio = line.foreign_unitratio || 0 + line.exratecode = line.foreign_exratecode || '' + 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 => { + cell.uuid = cell.sup_id + return cell + }) + delete line.sup + } + + return line + }) + } + + if (type !== 'checkTemp') { + let files = [] + + res.fcc_files && res.fcc_files.forEach(file => { + file.attachments.forEach(item => { + item.id = item.attach_id + item.data_code = file.data_code + item.data_name = file.data_name + item.BID = file.id + + files.push(item) + }) + }) + + this.setState({ + data: data, + attachlist: files, + vouDate: res.fibvoucherdate ? moment(res.fibvoucherdate, 'YYYY-MM-DD') : null, + charType: res.voucher_class || 'keeping', + vouAduited: res.voucher_status === 'true' || res.read_only === 'true', + vouReadOnly: res.read_only === 'true', + charName: res.voucher_char, + charInt: res.voucher_char_int, + // orgcode: res.orgcode, + // orgname: res.orgname, + voucherCode: res.voucher_code || '', + tbdata: fromJS(data).toJS(), + oriAttachs: fromJS(files).toJS(), + attachments: res.attachments_int, + title: res.voucher_text || '', + remark: res.remark || '', + status: res.copy_type === 'true' ? 'copy' : 'saved' + }) + } else { + this.setState({ + data: data, + tbdata: fromJS(data).toJS(), + title: res.voucher_text || '', + tempTypeClass: res.typechartwo || '', + tempTypeName: res.typecharthree || '', + status: 'saved' + }) + } + }) + } + + triggersave = (t) => { + const { tbdata } = this.state + + let err = '' + let tip = '' + let list = [] + + tbdata.forEach((line, index) => { + if (err) return + if (line.type === 'total') { + if (line.debit !== line.credit) { + err = '鍊熻捶涓嶅钩琛★紒' + } + return + } + + let _index = index + 1 + + if (!line.subject_voucher_text && !line.subject_code && !line.debit && line.debit !== 0 && !line.credit && line.credit !== 0) { + if (_index === 1) { + err = '绗�1琛屼笉鍙负绌恒��' + } + + return + } + + if (!line.subject_voucher_text) { + err = `绗�${_index}琛岋紝鎽樿涓嶅彲涓虹┖銆俙 + } else if (!line.subject_code) { + err = `绗�${_index}琛岋紝绉戠洰涓嶅彲涓虹┖銆俙 + } else if (!line.debit && line.debit !== 0 && !line.credit && line.credit !== 0) { + err = `绗�${_index}琛岋紝璇疯緭鍏ラ噾棰濄�俙 + } else if (line.debit === 0 || line.credit === 0) { + err = `绗�${_index}琛岋紝閲戦涓嶈兘涓�0銆俙 + } else if (line.foreign_currency_type === 'Y' && !line.foreign_amount) { + err = `绗�${_index}琛岋紝鍘熷竵涓嶅彲涓虹┖鎴栦负0銆俙 + } else if (line.sup_accounting && !line.supAccounts) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } else if (line.sup_accounting && line.supAccounts) { + line.supAccounts.forEach(item => { + if (item.sup_acc_type === 'supplier') { + if (!item.suppliercode || !item.suppliername) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'logistics') { + if (!item.logistics_code || !item.logistics_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'lessor') { + if (!item.lessor_code || !item.lessor_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'customer') { + if (!item.customercode || !item.customername) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'department') { + if (!item.co_pro_code || !item.co_pro_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'project') { + if (!item.projectcode || !item.projectname) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'inventory') { + if (!item.productcode || !item.productname) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'employee') { + if (!item.workercode || !item.workername) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'cash_flow') { + if (!item.cash_flow_code || !item.cash_flow_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (!item.sup_acc_type || !item.sup_acc_code || !item.sup_acc_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + }) + } + + if (line.count_type === 'Y' && !err) { + if (!line.fcc_count) { + tip += `绗�${_index}琛岋紝鏁伴噺涓虹┖鎴栦负0锛侊紱` + } else if (line.net_unitprice) { + if (line.debit && line.debit !== line.fcc_count * line.net_unitprice) { + tip += `绗�${_index}琛岋紝鏁伴噺鍜岄噾棰濅笉鍖归厤锛侊紱` + } else if (line.credit && line.credit !== line.fcc_count * line.net_unitprice) { + tip += `绗�${_index}琛岋紝鏁伴噺鍜岄噾棰濅笉鍖归厤锛侊紱` + } + } + } + + list.push(line) + }) + + if (!err && list.length === 0) { + err = '绗�1琛屼笉鍙负绌恒��' + } + + if (err) { + notification.warning({ + top: 92, + message: err, + duration: 5 + }) + return + } + + if (tip) { + const that = this + confirm({ + content: tip + '纭瑕佷繚瀛樺悧锛�', + onOk() { + that.voucherSave(list, t) + }, + onCancel() {} + }) + } else { + this.voucherSave(list, t) + } + } + + voucherSave = (list, t) => { + const { type, BID, data, config, voucherCode, charInt, charType, vouDate, book, remark, charName, attachments, title, orgcode, orgname, attachlist, oriAttachs } = this.state + + let err = '' + if (!book) { + err = '璇烽�夋嫨璐﹀锛�' + } else if (!vouDate) { + err = '璇烽�夋嫨鏃ユ湡锛�' + } else if (!charName || !charInt) { + err = '璇烽�夋嫨鍑瘉鍙凤紒' + } + + if (err) { + notification.warning({ + top: 92, + message: err, + duration: 5 + }) + return + } + + let param = { + func: 's_fcc_voucher_addupt', + BID: book.id, + ID: BID, + voucher_code: voucherCode || '', + voucher_text: title, + remark: remark, + account_year_code: book.account_year_code || '', + voucher_type: config.wrap.voucherType || '', + voucher_type_text: config.wrap.voucherTypeText || '', + orgcode: orgcode || '', + orgname: orgname || '', + voucher_class: charType, + years: book.years, + months: moment(vouDate).format('YYYY-MM'), + business_type: config.wrap.businessType || '', + voucher_sign: config.wrap.voucherSign || '', + voucher_char: charName, + voucher_char_int: charInt, + account_code: book.account_code || '', + fibvoucherdate: moment(vouDate).format('YYYY-MM-DD'), + UserName: sessionStorage.getItem('User_Name') || '', + FullName: sessionStorage.getItem('Full_Name') || '', + attachments_int: attachments, + sup_data: '', + subject_data: '', + attachments_data: '' + } + + // id,deleted + // 闄勪欢鍒楄〃 + + // 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,sup_acc_name,sup_acc_type,sup_bid,deleted + // 杈呭姪绉戠洰琛宨d锛屾柊澧炴椂绌猴紝鍑瘉琛屽彿绌猴紝杈呭姪绉戠洰琛屽彿绌猴紝绉戠洰缂栫爜锛岀鐩悕绉帮紝杈呭姪绉戠洰鎽樿绌猴紝鏂瑰悜'debit'銆�'credit'锛岃閲戦锛屽鎴风紪鐮侊紝瀹㈡埛鍚嶇О锛屼緵搴斿晢缂栫爜锛屼緵搴斿晢鍚嶇О锛岄儴闂ㄧ紪鐮侊紝閮ㄩ棬鍚嶇О锛岃亴鍛樼紪鐮侊紝鑱屽憳鍚嶇О锛岄」鐩紪鐮侊紝椤圭洰鍚嶇О锛屼骇鍝佺紪鐮侊紝浜у搧鍚嶇О锛岀幇閲戠紪鐮侊紝鐜伴噾鍚嶇О锛岃嚜瀹氫箟绉戠洰缂栫爜锛岃嚜瀹氫箟绉戠洰鍚嶇О锛岃緟鍔╃鐩被鍨嬶紝鍑瘉琛孖D锛屽垹闄ゆ爣璁� + let sup_data = [] + let voucherMap = new Map() + let supMap = new Map() + let extract = localStorage.getItem(window.GLOB.sysSign + '_voucher_extract') + extract = extract ? JSON.parse(extract) : [] + + data.forEach(item => { + voucherMap.set(item.uuid, item) + + if (item.sup_accounting && item.supAccounts) { + item.supAccounts.forEach(cell => { + if (!cell.sup_acc_type) return + + let _cell = {...cell} + + _cell.sup_voucher_code = item.subject_voucher_code || '' + _cell.sup_voucher_lp = item.voucher_lp || '' + _cell.sup_subject_code = item.subject_code || '' + _cell.sup_subject_name = item.subject_name || '' + _cell.sup_bid = item.uuid || '' + _cell.sup_direct = item.debit ? 'debit' : 'credit' + _cell.sup_net_amount = item.debit || item.credit + + supMap.set(item.uuid + cell.sup_acc_type, _cell) + }) + } + }) + + let subject_data = list.map(item => { + let count = item.count_type === 'Y' + let curr = item.foreign_currency_type === 'Y' + let direct = item.debit ? 'debit' : 'credit' + + if (type === 'createVoucher' && item.subject_voucher_text && item.subject_voucher_text.length < 20) { + extract.unshift(item.subject_voucher_text) + } + + if (voucherMap.has(item.uuid)) { + voucherMap.delete(item.uuid) + } + if (item.sup_accounting && item.supAccounts) { + item.supAccounts.forEach(n => { + if (supMap.has(item.uuid + n.sup_acc_type)) { + supMap.delete(item.uuid + n.sup_acc_type) + } + + sup_data.push(`'${n.uuid}','${item.subject_voucher_code || ''}','${item.voucher_lp || ''}','${n.voucher_sup_lp || ''}','${item.subject_code}','${item.subject_name}','${n.sup_voucher_text || ''}','${direct}',${item.debit || item.credit},'${n.customercode || ''}','${n.customername || ''}','${n.suppliercode || ''}','${n.suppliername || ''}','${n.co_pro_code || ''}','${n.co_pro_name || ''}','${n.workercode || ''}','${n.workername || ''}','${n.project_code || ''}','${n.project_name || ''}','${n.productcode || ''}','${n.productname || ''}','${n.cash_flow_code || ''}','${n.cash_flow_name || ''}','${n.sup_acc_code || ''}','${n.sup_acc_name || ''}','${n.sup_acc_type || ''}','${item.uuid}',0,'${n.lessor_code || ''}','${n.lessor_name || ''}','${n.logistics_code || ''}','${n.logistics_name || ''}'`) + }) + } + return `'${item.uuid}','${item.subject_voucher_code || ''}','${item.voucher_lp || ''}','${item.subject_code}','${item.subject_name}','${item.subject_voucher_text || ''}',${count ? item.fcc_count || 0 : 0},${count ? item.net_unitprice || 0 : 0},'${item.unit}',${item.debit || item.credit},'${direct}','${curr ? item.exratecode : ''}','${curr ? item.exratename : ''}',${curr ? item.unitratio || 0 : 0},'${item.sup_accounting}',${item.debit ? 1 : -1},${curr ? item.foreign_amount || 0 : 0},0,'${item.local_currency || ''}','${count ? 'Y' : ''}','${curr ? 'Y' : ''}','${item.closing_foreign_exchange || ''}'` + }) + + if (type === 'createVoucher') { + extract = Array.from(new Set(extract)) + if (extract.length > 20) { + extract.length = 20 + } + localStorage.setItem(window.GLOB.sysSign + '_voucher_extract', JSON.stringify(extract)) + } + + voucherMap.forEach(item => { + let count = item.count_type === 'Y' + let curr = item.foreign_currency_type === 'Y' + let direct = item.debit ? 'debit' : 'credit' + + subject_data.push(`'${item.uuid}','${item.subject_voucher_code || ''}','${item.voucher_lp || ''}','${item.subject_code}','${item.subject_name}','${item.subject_voucher_text || ''}',${count ? item.fcc_count || 0 : 0},${count ? item.net_unitprice || 0 : 0},'${item.unit}',${item.debit || item.credit},'${direct}','${curr ? item.exratecode : ''}','${curr ? item.exratename : ''}',${curr ? item.unitratio || 0 : 0},'${item.sup_accounting}',${item.debit ? 1 : -1},${curr ? item.foreign_amount || 0 : 0},1,'${item.local_currency || ''}','${count ? 'Y' : ''}','${curr ? 'Y' : ''}','${item.closing_foreign_exchange || ''}'`) + }) + + supMap.forEach(n => { + sup_data.push(`'${n.uuid}','${n.sup_voucher_code}','${n.sup_voucher_lp}','${n.voucher_sup_lp || ''}','${n.sup_subject_code}','${n.sup_subject_name}','${n.sup_voucher_text || ''}','${n.sup_direct}',${n.sup_net_amount},'${n.customercode || ''}','${n.customername || ''}','${n.suppliercode || ''}','${n.suppliername || ''}','${n.co_pro_code || ''}','${n.co_pro_name || ''}','${n.workercode || ''}','${n.workername || ''}','${n.project_code || ''}','${n.project_name || ''}','${n.productcode || ''}','${n.productname || ''}','${n.cash_flow_code || ''}','${n.cash_flow_name || ''}','${n.sup_acc_code || ''}','${n.sup_acc_name || ''}','${n.sup_acc_type || ''}','${n.sup_bid}',1,'${n.lessor_code || ''}','${n.lessor_name || ''}','${n.logistics_code || ''}','${n.logistics_name || ''}'`) + }) + + let attachments_data = [] + let ids = [] + + attachlist.forEach(item => { + ids.push(item.id) + + attachments_data.push(`'${item.id}',0`) + }) + + if (oriAttachs.length > 0) { + oriAttachs.forEach(item => { + if (!ids.includes(item.id)) { + attachments_data.push(`'${item.id}',1`) + } + }) + } + + param.subject_data = window.btoa(window.encodeURIComponent(subject_data.join(';un'))) + param.sup_data = window.btoa(window.encodeURIComponent(sup_data.join(';un'))) + param.attachments_data = window.btoa(window.encodeURIComponent(attachments_data.join(';un'))) + + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + notification.success({ + top: 92, + message: '淇濆瓨鎴愬姛锛�' + (res.voucher_char_int !== charInt ? charInt + '鍙峰嚟璇佸彿宸茬粡瀛樺湪锛屽凡涓烘偍鏇存柊涓�' + res.voucher_char_int + '鍙峰嚟璇併��' : ''), + duration: 5 + }) + + if (t === 'add') { + this.setState({ + status: 'empty', + remark: '', + tbdata: [], + oriAttachs: fromJS(attachlist).toJS(), + charInt: res.voucher_char_int + 1, + BID: Utils.getguid(), + saved: false + }) + MKEmitter.emit('cleartable', config.uuid) + } else { + this.setState({ + status: 'saved', + charInt: res.voucher_char_int || charInt, + data: fromJS(list).toJS(), + oriAttachs: fromJS(attachlist).toJS(), + saved: true + }) + } + + let tabId = '' + if (config.wrap.linkmenu && config.wrap.linkmenu.length > 0) { + tabId = config.wrap.linkmenu[config.wrap.linkmenu.length - 1] + } + + if (tabId) { + MKEmitter.emit('reloadMenuView', tabId) + } + }) } - triggersave = () => { + triggerTempsave = (name, typeChar, typeName) => { + const { tbdata } = this.state + let err = '' + let list = [] + + tbdata.forEach((line, index) => { + if (err) return + + let _index = index + 1 + + if (!line.subject_voucher_text && !line.subject_code) { + if (_index === 1) { + err = '绗�1琛屼笉鍙负绌恒��' + } + + return + } + + if (!line.subject_voucher_text) { + err = `绗�${_index}琛岋紝鎽樿涓嶅彲涓虹┖銆俙 + } else if (!line.subject_code) { + err = `绗�${_index}琛岋紝绉戠洰涓嶅彲涓虹┖銆俙 + } else if (line.sup_accounting && !line.supAccounts) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } else if (line.sup_accounting && line.supAccounts) { + line.supAccounts.forEach(item => { + if (item.sup_acc_type === 'supplier') { + if (!item.suppliercode || !item.suppliername) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'logistics') { + if (!item.logistics_code || !item.logistics_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'lessor') { + if (!item.lessor_code || !item.lessor_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'customer') { + if (!item.customercode || !item.customername) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'department') { + if (!item.co_pro_code || !item.co_pro_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'project') { + if (!item.projectcode || !item.projectname) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'inventory') { + if (!item.productcode || !item.productname) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'employee') { + if (!item.workercode || !item.workername) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (item.sup_acc_type === 'cash_flow') { + if (!item.cash_flow_code || !item.cash_flow_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + } else if (!item.sup_acc_type || !item.sup_acc_code || !item.sup_acc_name) { + err = `绗�${_index}琛岋紝璇烽�夋嫨杈呭姪鏍哥畻銆俙 + } + }) + } + + list.push(line) + }) + + if (!err && list.length === 0) { + err = '绗�1琛屼笉鍙负绌恒��' + } + + if (err) { + notification.warning({ + top: 92, + message: err, + duration: 5 + }) + return + } + + this.voucherTempSave(list, name, typeChar, typeName) } - triggerprint = () => { + voucherTempSave = (list, name, typeChar, typeName) => { + const { type, config, BID, data, book, title, orgcode, orgname, tempTypeClass, tempTypeName } = this.state + if (!book) { + notification.warning({ + top: 92, + message: '璇烽�夋嫨璐﹀锛�', + duration: 5 + }) + return + } else if (type !== 'createVoucher' && !title) { + notification.warning({ + top: 92, + message: '璇峰~鍐欐ā鏉垮悕绉帮紒', + duration: 5 + }) + return + } else if (type !== 'createVoucher' && !tempTypeClass) { + notification.warning({ + top: 92, + message: '璇烽�夋嫨妯℃澘绫诲瀷锛�', + duration: 5 + }) + return + } + + let id = BID + let _name = title + let _typeChar = tempTypeClass + let _typeName = tempTypeName + + if (type === 'createVoucher') { + id = Utils.getguid() + _name = name + _typeChar = typeChar + _typeName = typeName + } + + let param = { + func: 's_fcc_voucher_addupt_temp', + BID: book.id, + ID: id, + voucher_code: '', + voucher_text: _name, + remark: '', + account_year_code: book.account_year_code || '', + voucher_type: 'fcc_temp', + voucher_type_text: '鍑瘉妯℃澘', + orgcode: orgcode || '', + orgname: orgname || '', + voucher_class: 'temp', + years: book.years, + months: moment().format('YYYY-MM'), + business_type: '', + voucher_sign: 'temp', + voucher_char: '', + voucher_char_int: 0, + account_code: book.account_code || '', + fibvoucherdate: moment().format('YYYY-MM-DD'), + UserName: sessionStorage.getItem('User_Name') || '', + FullName: sessionStorage.getItem('Full_Name') || '', + attachments_int: 0, + typechartwo: _typeChar, + typecharthree: _typeName, + sup_data: '', + subject_data: '' + } + + let sup_data = [] + let voucherMap = new Map() + let supMap = new Map() + + if (type !== 'createVoucher') { + data.forEach(item => { + voucherMap.set(item.uuid, item) + + if (item.sup_accounting && item.supAccounts) { + item.supAccounts.forEach(cell => { + if (!cell.sup_acc_type) return + + let _cell = {...cell} + + _cell.sup_voucher_code = item.subject_voucher_code || '' + _cell.sup_voucher_lp = item.voucher_lp || '' + _cell.sup_subject_code = item.subject_code || '' + _cell.sup_subject_name = item.subject_name || '' + _cell.sup_bid = item.uuid || '' + _cell.sup_direct = !item.credit ? 'debit' : 'credit' + _cell.sup_net_amount = item.debit || item.credit || 0 + + supMap.set(item.uuid + cell.sup_acc_type, _cell) + }) + } + }) + } + + let subject_data = list.map(item => { + let count = item.count_type === 'Y' + let curr = item.foreign_currency_type === 'Y' + let direct = !item.credit ? 'debit' : 'credit' + + if (voucherMap.has(item.uuid)) { + voucherMap.delete(item.uuid) + } + if (item.sup_accounting && item.supAccounts) { + item.supAccounts.forEach(n => { + if (supMap.has(item.uuid + n.sup_acc_type)) { + supMap.delete(item.uuid + n.sup_acc_type) + } + + sup_data.push(`'${n.uuid}','${item.subject_voucher_code || ''}','${item.voucher_lp || ''}','${n.voucher_sup_lp || ''}','${item.subject_code}','${item.subject_name}','${n.sup_voucher_text || ''}','${direct}',${item.debit || item.credit || 0},'${n.customercode || ''}','${n.customername || ''}','${n.suppliercode || ''}','${n.suppliername || ''}','${n.co_pro_code || ''}','${n.co_pro_name || ''}','${n.workercode || ''}','${n.workername || ''}','${n.project_code || ''}','${n.project_name || ''}','${n.productcode || ''}','${n.productname || ''}','${n.cash_flow_code || ''}','${n.cash_flow_name || ''}','${n.sup_acc_code || ''}','${n.sup_acc_name || ''}','${n.sup_acc_type || ''}','${item.uuid}',0,'${n.lessor_code || ''}','${n.lessor_name || ''}','${n.logistics_code || ''}','${n.logistics_name || ''}'`) + }) + } + return `'${item.uuid}','${item.subject_voucher_code || ''}','${item.voucher_lp || ''}','${item.subject_code}','${item.subject_name}','${item.subject_voucher_text || ''}',${count ? item.fcc_count || 0 : 0},${count ? item.net_unitprice || 0 : 0},'${item.unit}',${item.debit || item.credit || 0},'${direct}','${curr ? item.exratecode : ''}','${curr ? item.exratename : ''}',${curr ? item.unitratio || 0 : 0},'${item.sup_accounting}',${item.direct ? 1 : -1},${curr ? item.foreign_amount || 0 : 0},0,'${item.local_currency || ''}','${count ? 'Y' : ''}','${curr ? 'Y' : ''}','${item.closing_foreign_exchange || ''}'` + }) + + voucherMap.forEach(item => { + let count = item.count_type === 'Y' + let curr = item.foreign_currency_type === 'Y' + let direct = !item.credit ? 'debit' : 'credit' + + subject_data.push(`'${item.uuid}','${item.subject_voucher_code || ''}','${item.voucher_lp || ''}','${item.subject_code}','${item.subject_name}','${item.subject_voucher_text || ''}',${count ? item.fcc_count || 0 : 0},${count ? item.net_unitprice || 0 : 0},'${item.unit}',${item.debit || item.credit || 0},'${direct}','${curr ? item.exratecode : ''}','${curr ? item.exratename : ''}',${curr ? item.unitratio || 0 : 0},'${item.sup_accounting}',${item.direct ? 1 : -1},${curr ? item.foreign_amount || 0 : 0},1,'${item.local_currency || ''}','${count ? 'Y' : ''}','${curr ? 'Y' : ''}','${item.closing_foreign_exchange || ''}'`) + }) + + supMap.forEach(n => { + sup_data.push(`'${n.uuid}','${n.sup_voucher_code}','${n.sup_voucher_lp}','${n.voucher_sup_lp || ''}','${n.sup_subject_code}','${n.sup_subject_name}','${n.sup_voucher_text || ''}','${n.sup_direct}',${n.sup_net_amount},'${n.customercode || ''}','${n.customername || ''}','${n.suppliercode || ''}','${n.suppliername || ''}','${n.co_pro_code || ''}','${n.co_pro_name || ''}','${n.workercode || ''}','${n.workername || ''}','${n.project_code || ''}','${n.project_name || ''}','${n.productcode || ''}','${n.productname || ''}','${n.cash_flow_code || ''}','${n.cash_flow_name || ''}','${n.sup_acc_code || ''}','${n.sup_acc_name || ''}','${n.sup_acc_type || ''}','${n.sup_bid}',1,'${n.lessor_code || ''}','${n.lessor_name || ''}','${n.logistics_code || ''}','${n.logistics_name || ''}'`) + }) + + param.subject_data = window.btoa(window.encodeURIComponent(subject_data.join(';un'))) + param.sup_data = window.btoa(window.encodeURIComponent(sup_data.join(';un'))) + + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + notification.success({ + top: 92, + message: '淇濆瓨鎴愬姛锛�', + duration: 5 + }) + + if (type !== 'createVoucher') { + this.setState({ + status: 'saved', + data: fromJS(list).toJS(), + }) + } + + let tabId = '' + if (config.wrap.linkmenu && config.wrap.linkmenu.length > 0) { + tabId = config.wrap.linkmenu[config.wrap.linkmenu.length - 1] + } + + if (tabId) { + MKEmitter.emit('reloadMenuView', tabId) + } + }) + } + + dataChange = (data) => { + 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, status: 'change'}) + } + + changeVouDate = (val) => { + const { type, status, saved } = this.state + + this.setState({vouDate: val, status: 'change'}) + + if (type === 'createVoucher' && val && !saved && (status === 'empty' || status === 'change')) { + this.updateVoucherChar(val) + } + } + + updateVoucherChar = (val) => { + const { book, config } = this.state + + if (!book) return + + let param = { + func: 's_get_fcc_account_data', + search_type: 'Y', + fcc_date: book.months ? book.months + '-01' : moment().format('YYYY-MM-DD'), + account_year_code: book.account_year_code || '', + months: moment(val).format('YYYY-MM'), + BID: book.id + } + + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + let typeOptions = res.char || [] + + if (typeOptions.length > 0) { + let charType = this.state.charType + let charName = this.state.charName + let charInt = this.state.charInt + + if (charType && typeOptions.filter(n => n.voucher_class === charType) > 0) { + typeOptions.forEach(n => { + if (n.voucher_class === charType) { + charName = n.voucher_char + charInt = n.voucher_char_int + 1 + } + }) + } else { + charType = typeOptions[0].voucher_class + charName = typeOptions[0].voucher_char + charInt = typeOptions[0].voucher_char_int + 1 + } + + this.setState({ + typeOptions: typeOptions, + charType: charType, + charName: charName, + charInt: charInt + }) + } + + let msg = window.GLOB.CacheVoucher.get(config.uuid) || {} + msg.currency = res.currency || [] + + window.GLOB.CacheVoucher.set(config.uuid, msg) + }) + } + + resetAttachList = (vals) => { + const { attachlist } = this.state + let num = this.state.attachments + + if (num) { + num = num + (vals.length - attachlist.length) + } else { + num = vals.length + } + + if (num < 0) { + num = 0 + } + + this.setState({status: 'change', attachlist: vals, attachments: num}) + } + + triggerclose = () => { + const { config, status } = this.state + + if (status === 'change') { + confirm({ + content: '鍐呭宸插彉鏇达紝纭畾瑕佸叧闂悧锛�', + onOk() { + MKEmitter.emit('closeTabView', config.$pageId) + }, + onCancel() {} + }) + } else { + MKEmitter.emit('closeTabView', config.$pageId) + } + } + + triggerTempLoad = (id) => { + const { book } = this.state + + if (!book) return + + let param = { + func: 's_get_fcc_voucher_temp', + BID: book.id, + ID: id + } + + Api.genericInterface(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + let data = [] + if (res.voucher) { + data = res.voucher.map(line => { + line.uuid = line.subject_id || '' + + if (line.direction_type === 'credit') { + line.credit = line.net_amount || 0 + line.debit = '' + } else { + line.debit = line.net_amount || 0 + line.credit = '' + } + + line.unitratio = line.foreign_unitratio || 0 + line.exratecode = line.foreign_exratecode || '' + line.exratename = line.foreign_exratename || '' + line.local_currency = line.local_exratecode || '' + line.foreign_currency_type = line.foreign_type || '' + + if (line.sup) { + line.supAccounts = line.sup.map(cell => { + cell.uuid = cell.sup_id + return cell + }) + delete line.sup + } + + return line + }) + } + + this.setState({ + data: data, + tbdata: fromJS(data).toJS(), + status: 'change' + }) + }) + } + + triggerPrint = () => { + const { config, BID } = this.state + + 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 + } + + notification.success({ + top: 92, + message: '宸茬粡閫氳繃瀹℃牳', + duration: 2 + }) + + 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 + } + + notification.success({ + top: 92, + message: '瀹℃牳宸插彇娑�', + duration: 2 + }) + + that.getVoucher() + }) + }, + onCancel() {} + }) } render() { - const { config, disableSave, disableAdd, typeOptions, data } = this.state + const { type, status, loading, config, orgcode, typeOptions, tempTypes, charType, charInt, data, vouDate, username, remark, attachments, title, attachlist, tempTypeClass, vouAduited, vouReadOnly, voucherCode } = this.state - return ( - <div className="menu-voucher-wrap" style={config.style}> - <div className="voucher-header"> - <Button className="add-background header-btn" disabled={disableAdd} onClick={this.triggeradd}>鏂板</Button> - <Button className="add-background header-btn" disabled={disableSave} onClick={this.triggersave}>淇濆瓨</Button> - <Button className="print-background header-btn" disabled={disableSave} onClick={this.triggerprint}>鎵撳嵃</Button> - <Button className="system-background header-btn" disabled={disableSave} onClick={this.triggerprint}>瀵煎叆</Button> - <Button className="out-background header-btn" disabled={disableSave} onClick={this.triggerprint}>瀵煎嚭</Button> + 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 && !vouReadOnly ? <Button onClick={this.triggerUnAduit}>鍙栨秷瀹℃牳</Button> : null} + {!vouAduited && !vouReadOnly ? <Button onClick={this.triggerAduit}>瀹℃牳</Button> : null} + <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-number"> + 鍑瘉鍙凤細{voucherCode} + </div> + <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={vouAduited ? '' : '鍑瘉鏂囨湰'} 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> + <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> + </div> + <div className="user" style={{paddingLeft: `${config.wrap.space || 0}px`}}>鍒跺崟浜猴細{username}</div> </div> - {config.wrap.type === 'edit' ? <div className="voucher-body"> - <div className="pre-wrap"> - <div className="voucher-code"> - <Select dropdownClassName="mk-vcode-dropdown"> - {typeOptions.map(option => - <Select.Option value={option.value}>{option.label}</Select.Option> - )} - </Select> - <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> + ) + } 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> - <VoucherTable config={config} data={data}/> - </div> : null} - {config.wrap.type === 'check' ? <div className="voucher-body"> - <div className="pre-wrap"> - <div className="voucher-code"> - 璁� 1 鍙� + <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> - <div className="voucher-date"> - 鏃ユ湡锛�2022-02-24 - </div> - <div className="voucher-affix"> - 闄勫崟鎹� 2 寮� - <Button type="link" className="" onClick={this.triggerprint}>闄勪欢</Button> - <Button type="link" className="" onClick={this.triggerprint}>澶囨敞</Button> - </div> + <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/> </div> - <VoucherTable config={config} data={data}/> - </div> : null} - </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> + ) + } } } -- Gitblit v1.8.0