| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Button, Select, Input, Modal, DatePicker, notification, InputNumber } from 'antd' |
| | | import { Button, Select, Input, Modal, DatePicker, notification, InputNumber, Dropdown } 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 VoucherTable from './voucherTable' |
| | | import SaveAsTemp from './saveAsTemp' |
| | | import ResetRemark from './resetRemark' |
| | | import ResetAttach from './resetAttach' |
| | | import LoadFromTemp from './loadFromTemp' |
| | | import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | | const { TextArea } = Input |
| | | const VoucherTable = asyncComponent(() => import('./voucherTable')) |
| | | |
| | | class VoucherModule extends Component { |
| | | static propTpyes = { |
| | |
| | | book: null, |
| | | username: sessionStorage.getItem('User_Name'), |
| | | remark: '', |
| | | remarkVisible: false, |
| | | attachments: 0, |
| | | vouAduited: false, |
| | | vouReadOnly: false, |
| | | attachlist: [], |
| | | oriAttachs: [], |
| | | tempTypes: [], |
| | | tempTypeClass: '', |
| | | tempTypeName: '', |
| | | title: '', |
| | | orgcode: '', |
| | | orgname: '', |
| | | status: '', // 新建时,empty、change、saved |
| | | saved: false |
| | | saved: false, |
| | | voucherCode: '' |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | |
| | | |
| | | let BID = '' |
| | | let BData = '' |
| | | |
| | | |
| | | if (config.wrap.supModule) { |
| | | BData = window.GLOB.CacheData.get(config.wrap.supModule) |
| | | } else { |
| | |
| | | } |
| | | } |
| | | |
| | | // config.wrap.type = 'checkVoucher' |
| | | // BID = '20230228173542370E2F4FC1773704C29A6A4' |
| | | |
| | | // config.wrap.type = 'checkTemp' |
| | | // BID = '20230214174458780MFR8IA576ON4VKNOLVH' |
| | | |
| | | window.GLOB.CacheVoucher.delete(config.uuid) |
| | | let type = config.wrap.type || 'createVoucher' |
| | | |
| | | // type = 'checkVoucher' |
| | | // BID = '202302081418373862P8Q29OUD19CT1AVMU6' |
| | | |
| | | if (type === 'createVoucher' || type === 'createTemp') { |
| | | BID = Utils.getguid() |
| | |
| | | charInt: charInt, |
| | | orgcode: res.orgcode, |
| | | orgname: res.orgname, |
| | | tempTypes: res.temp_type || [] |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | typeOptions: typeOptions |
| | | typeOptions: typeOptions, |
| | | orgcode: res.orgcode, |
| | | orgname: res.orgname, |
| | | tempTypes: res.temp_type || [] |
| | | }) |
| | | } |
| | | |
| | |
| | | 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 => { |
| | |
| | | subjects: res.subjects || [], |
| | | names: names, |
| | | supplier: supplier, |
| | | logistics: logistics, |
| | | lessor: lessor, |
| | | customer: customer, |
| | | department: department, |
| | | project: project, |
| | |
| | | ID: BID |
| | | } |
| | | |
| | | if (type === 'checkTemp') { |
| | | param.func = 's_get_fcc_voucher_temp' |
| | | } |
| | | |
| | | Api.genericInterface(param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | |
| | | |
| | | let data = [] |
| | | if (res.voucher) { |
| | | let disabled = res.voucher_status === 'true' |
| | | data = res.voucher.map(line => { |
| | | line.uuid = line.subject_id || '' |
| | | |
| | |
| | | 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 => { |
| | |
| | | }) |
| | | } |
| | | |
| | | this.setState({ |
| | | data: data, |
| | | vouDate: res.fibvoucherdate ? moment(res.fibvoucherdate, 'YYYY-MM-DD') : null, |
| | | charType: res.voucher_class, |
| | | charName: res.voucher_char, |
| | | charInt: res.voucher_char_int, |
| | | orgcode: res.orgcode, |
| | | orgname: res.orgname, |
| | | tbdata: fromJS(data).toJS(), |
| | | status: 'saved' |
| | | }) |
| | | 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' |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | |
| | | 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 (tip) { |
| | | const _this = this |
| | | const that = this |
| | | confirm({ |
| | | content: tip + '确认要保存吗?', |
| | | onOk() { |
| | | _this.voucherSave(list, t) |
| | | that.voucherSave(list, t) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | |
| | | } |
| | | |
| | | voucherSave = (list, t) => { |
| | | const { type, data, config, charInt, charType, vouDate, book, remark, charName, attachments, title, orgcode, orgname } = this.state |
| | | const { type, BID, data, config, voucherCode, charInt, charType, vouDate, book, remark, charName, attachments, title, orgcode, orgname, attachlist, oriAttachs } = this.state |
| | | |
| | | let err = '' |
| | | if (!book) { |
| | |
| | | let param = { |
| | | func: 's_fcc_voucher_addupt', |
| | | BID: book.id, |
| | | ID: Utils.getguid(), |
| | | voucher_code: '', |
| | | ID: BID, |
| | | voucher_code: voucherCode || '', |
| | | voucher_text: title, |
| | | remark: remark, |
| | | account_year_code: book.account_year_code || '', |
| | |
| | | let sup_data = [] |
| | | let voucherMap = new Map() |
| | | let supMap = new Map() |
| | | let extract = localStorage.getItem(window.GLOB.host + '_voucher_extract') |
| | | let extract = localStorage.getItem(window.GLOB.sysSign + '_voucher_extract') |
| | | extract = extract ? JSON.parse(extract) : [] |
| | | |
| | | data.forEach(item => { |
| | |
| | | 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`) |
| | | 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 : '01010001'}','${curr ? item.exratename : 'CNY'}',${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' : ''}'` |
| | | 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') { |
| | |
| | | if (extract.length > 20) { |
| | | extract.length = 20 |
| | | } |
| | | localStorage.setItem(window.GLOB.host + '_voucher_extract', JSON.stringify(extract)) |
| | | localStorage.setItem(window.GLOB.sysSign + '_voucher_extract', JSON.stringify(extract)) |
| | | } |
| | | |
| | | voucherMap.forEach(item => { |
| | |
| | | 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 : '01010001'}','${curr ? item.exratename : 'CNY'}',${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' : ''}'`) |
| | | 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`) |
| | | 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) { |
| | |
| | | status: 'empty', |
| | | remark: '', |
| | | tbdata: [], |
| | | oriAttachs: fromJS(attachlist).toJS(), |
| | | charInt: res.voucher_char_int + 1, |
| | | BID: Utils.getguid(), |
| | | saved: false |
| | |
| | | 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) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | triggerprint = () => { |
| | | this.setState({remarkVisible: true}) |
| | | } |
| | | triggerTempsave = (name, typeChar, typeName) => { |
| | | const { tbdata } = this.state |
| | | |
| | | remarkSubmit = () => { |
| | | const { config } = this.state |
| | | let node = document.getElementById(config.uuid + 'remark') |
| | | let val = node.value |
| | | let err = '' |
| | | let list = [] |
| | | |
| | | if (val && val.length > 512) { |
| | | 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: '当前内容超长,备注最多512个字符。', |
| | | message: err, |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } |
| | | this.setState({remark: val, remarkVisible: false}) |
| | | |
| | | this.voucherTempSave(list, name, typeChar, typeName) |
| | | } |
| | | |
| | | 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) => { |
| | |
| | | _val = parseInt(val) |
| | | } |
| | | |
| | | this.setState({attachments: _val}) |
| | | this.setState({attachments: _val, status: 'change'}) |
| | | } |
| | | |
| | | changeVouDate = (val) => { |
| | | const { type, status, saved } = this.state |
| | | this.setState({vouDate: val}) |
| | | |
| | | this.setState({vouDate: val, status: 'change'}) |
| | | |
| | | if (type === 'createVoucher' && val && !saved && (status === 'empty' || status === 'change')) { |
| | | this.updateVoucherChar(val) |
| | |
| | | } |
| | | |
| | | updateVoucherChar = (val) => { |
| | | const {book} = this.state |
| | | const { book, config } = this.state |
| | | |
| | | if (!book) return |
| | | |
| | |
| | | return |
| | | } |
| | | |
| | | // let typeOptions = res.char || [] |
| | | // let charInt = typeOptions[0] ? typeOptions[0].voucher_char_int + 1 : 1 |
| | | let typeOptions = res.char || [] |
| | | |
| | | // 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, |
| | | // }) |
| | | 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) |
| | | }) |
| | | } |
| | | |
| | | triggermore = () => { |
| | | 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) |
| | | } |
| | | } |
| | | |
| | | triggerAttach = () => { |
| | | 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 { type, status, loading, config, typeOptions, charType, charInt, data, vouDate, username, remark, remarkVisible, attachments, title } = 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}> |
| | | {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> |
| | | <Button className="print-background header-btn" disabled={status !== 'saved'} onClick={this.triggerprint}>打印</Button> |
| | | <Button className="out-background header-btn" onClick={this.triggermore}>更多</Button> |
| | | </div> : null} |
| | | {type === 'checkVoucher' ? <div className="voucher-header"> |
| | | <Button className="add-background header-btn" disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>保存</Button> |
| | | <Button className="print-background header-btn" disabled={status !== 'saved'} onClick={this.triggerprint}>打印</Button> |
| | | <Button className="out-background header-btn" onClick={this.triggerclose}>关闭</Button> |
| | | </div> : null} |
| | | <div className="voucher-body"> |
| | | {type === 'createVoucher' || type === 'checkVoucher' ? <div className="pre-wrap"> |
| | | <div className="voucher-code"> |
| | | <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} 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({charInt: val})}/> 号 |
| | | 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> |
| | | <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({title: e.target.value})}/> |
| | | </div> |
| | | <div className="voucher-affix"> |
| | | 附单据 <InputNumber precision={0} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 张 |
| | | <Button type="link" className="" onClick={this.triggerAttach}>附件</Button> |
| | | <Button type="link" className="" onClick={this.triggerprint}>备注</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> |
| | | <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> |
| | | ) |
| | | ) |
| | | } 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> |
| | | ) |
| | | } |
| | | } |
| | | } |
| | | |