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 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 {
|
static propTpyes = {
|
config: PropTypes.object, // 组件配置信息
|
}
|
|
state = {
|
BID: '',
|
type: 'createVoucher',
|
config: null,
|
loading: false,
|
data: [],
|
tbdata: [],
|
typeOptions: [],
|
charType: '',
|
charName: '',
|
charInt: '',
|
vouDate: null,
|
book: null,
|
username: sessionStorage.getItem('User_Name'),
|
remark: '',
|
remarkVisible: false,
|
attachments: 0,
|
title: '',
|
orgcode: '',
|
orgname: '',
|
status: '' // 新建时,empty、change、saved
|
}
|
|
UNSAFE_componentWillMount () {
|
const { config } = this.props
|
|
let BID = ''
|
let BData = ''
|
|
if (config.wrap.supModule) {
|
BData = window.GLOB.CacheData.get(config.wrap.supModule)
|
} else {
|
BData = window.GLOB.CacheData.get(config.$pageId)
|
}
|
if (BData) {
|
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')
|
}
|
}
|
}
|
|
window.GLOB.CacheVoucher.delete(config.uuid)
|
let type = config.wrap.type || 'createVoucher'
|
|
// type = 'checkVoucher'
|
// BID = '202302081418373862P8Q29OUD19CT1AVMU6'
|
|
if (type === 'createVoucher' || type === 'createTemp') {
|
BID = Utils.getguid()
|
}
|
|
this.setState({
|
book: book,
|
vouDate: vouDate,
|
config: fromJS(config).toJS(),
|
type: type,
|
BID: BID || '',
|
status: 'empty'
|
}, () => {
|
this.loadData()
|
this.getVoucher()
|
})
|
}
|
|
componentDidMount () {
|
MKEmitter.addListener('resetSelectLine', this.resetParentParam)
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
/**
|
* @description 组件销毁,清除state更新,清除快捷键设置
|
*/
|
componentWillUnmount () {
|
this.setState = () => {
|
return
|
}
|
|
MKEmitter.removeListener('resetSelectLine', this.resetParentParam)
|
}
|
|
resetParentParam = (MenuID, id, data) => {
|
const { config, type } = this.state
|
|
if (config.wrap.supBook === MenuID) {
|
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 || type === 'createVoucher' || type === 'createTemp') return
|
if (id !== this.state.BID || id !== '') {
|
this.setState({ BID: id }, () => {
|
this.getVoucher()
|
})
|
}
|
}
|
|
loadData = () => {
|
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_year_code: book.account_year_code || '',
|
months: book.months ? book.months : moment().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 (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,
|
})
|
} else {
|
this.setState({
|
typeOptions: typeOptions
|
})
|
}
|
|
let names = {}
|
let supplier = []
|
let customer = []
|
let department = []
|
let project = []
|
let inventory = []
|
let employee = []
|
let cash_flow = []
|
let others = []
|
|
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.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,
|
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)
|
})
|
}
|
|
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
|
}
|
|
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,
|
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'
|
})
|
})
|
}
|
|
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 === '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 _this = this
|
confirm({
|
content: tip + '确认要保存吗?',
|
onOk() {
|
_this.voucherSave(list, t)
|
},
|
onCancel() {}
|
})
|
} else {
|
this.voucherSave(list, t)
|
}
|
}
|
|
voucherSave = (list, t) => {
|
const { type, data, config, charInt, charType, vouDate, book, remark, charName, attachments, title, orgcode, orgname } = this.state
|
|
if (!book) {
|
notification.warning({
|
top: 92,
|
message: '请选择账套!',
|
duration: 5
|
})
|
return
|
}
|
|
let param = {
|
func: 's_fcc_voucher_addupt',
|
BID: book.id,
|
ID: Utils.getguid(),
|
voucher_code: '',
|
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
|
// 辅助科目行id,新增时空,凭证行号空,辅助科目行号空,科目编码,科目名称,辅助科目摘要空,方向'debit'、'credit',行金额,客户编码,客户名称,供应商编码,供应商名称,部门编码,部门名称,职员编码,职员名称,项目编码,项目名称,产品编码,产品名称,现金编码,现金名称,自定义科目编码,自定义科目名称,辅助科目类型,凭证行ID,删除标记
|
|
let sup_data = []
|
let voucherMap = new Map()
|
let supMap = new Map()
|
let extract = localStorage.getItem(window.GLOB.host + '_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`)
|
})
|
}
|
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' : ''}'`
|
})
|
|
if (type === 'createVoucher') {
|
extract = Array.from(new Set(extract))
|
if (extract.length > 20) {
|
extract.length = 20
|
}
|
localStorage.setItem(window.GLOB.host + '_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 : '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' : ''}'`)
|
})
|
|
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`)
|
})
|
|
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: '保存成功!' + (res.voucher_char_int !== charInt ? charInt + '号凭证号已经存在,已为您更新为' + res.voucher_char_int + '号凭证。' : ''),
|
duration: 5
|
})
|
|
if (t === 'add') {
|
this.setState({
|
status: 'empty',
|
remark: '',
|
tbdata: [],
|
charInt: res.voucher_char_int + 1,
|
BID: Utils.getguid()
|
})
|
MKEmitter.emit('cleartable', config.uuid)
|
} else {
|
this.setState({
|
status: 'saved',
|
charInt: res.voucher_char_int || charInt,
|
data: fromJS(list).toJS()
|
})
|
}
|
})
|
}
|
|
triggerprint = () => {
|
this.setState({remarkVisible: true})
|
}
|
|
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) => {
|
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})
|
}
|
|
triggermore = () => {
|
|
}
|
|
triggerclose = () => {
|
|
}
|
|
triggerAttach = () => {
|
|
}
|
|
render() {
|
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}>
|
{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})}/> 号
|
</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">
|
附单据 <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}/>
|
</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>
|
)
|
}
|
}
|
|
export default VoucherModule
|