king
2025-05-13 f18eef383f288e453b7b6d0a34237ddf6e6620e8
src/tabviews/custom/components/module/voucher/index.jsx
@@ -12,10 +12,8 @@
import ResetRemark from './resetRemark'
import ResetAttach from './resetAttach'
import LoadFromTemp from './loadFromTemp'
import asyncComponent from '@/utils/asyncComponent'
import './index.scss'
const PrintVoucher = asyncComponent(() => import('./printVoucher'))
const { confirm } = Modal
class VoucherModule extends Component {
@@ -39,6 +37,8 @@
    username: sessionStorage.getItem('User_Name'),
    remark: '',
    attachments: 0,
    vouAduited: false,
    vouReadOnly: false,
    attachlist: [],
    oriAttachs: [],
    tempTypes: [],
@@ -304,6 +304,7 @@
      let data = []
      if (res.voucher) {
        let disabled = res.voucher_status === 'true'
        data = res.voucher.map(line => {
          line.uuid = line.subject_id || ''
@@ -320,6 +321,7 @@
          line.exratename = line.foreign_exratename || ''
          line.local_currency = line.local_exratecode || ''
          line.foreign_currency_type = line.foreign_type || ''
          line.$disabled = disabled
          if (line.sup) {
            line.supAccounts = line.sup.map(cell => {
@@ -351,7 +353,9 @@
          data: data,
          attachlist: files,
          vouDate: res.fibvoucherdate ? moment(res.fibvoucherdate, 'YYYY-MM-DD') : null,
          charType: res.voucher_class,
          charType: res.voucher_class || 'keeping',
          vouAduited: res.voucher_status === 'true' || res.read_only === 'true',
          vouReadOnly: res.read_only === 'true',
          charName: res.voucher_char,
          charInt: res.voucher_char_int,
          // orgcode: res.orgcode,
@@ -362,7 +366,7 @@
          attachments: res.attachments_int,
          title: res.voucher_text || '',
          remark: res.remark || '',
          status: 'saved'
          status: res.copy_type === 'true' ? 'copy' : 'saved'
        })
      } else {
        this.setState({
@@ -488,11 +492,11 @@
    }
    if (tip) {
      const _this = this
      const that = this
      confirm({
        content: tip + '确认要保存吗?',
        onOk() {
          _this.voucherSave(list, t)
          that.voucherSave(list, t)
        },
        onCancel() {}
      })
@@ -563,7 +567,7 @@
    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 => {
@@ -609,7 +613,7 @@
          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' : ''}','${item.closing_foreign_exchange || ''}'`
      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') {
@@ -617,7 +621,7 @@
      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 => {
@@ -625,7 +629,7 @@
      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' : ''}','${item.closing_foreign_exchange || ''}'`)
      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 => {
@@ -688,6 +692,15 @@
          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)
      }
    })
  }
@@ -781,7 +794,7 @@
  }
  voucherTempSave = (list, name, typeChar, typeName) => {
    const { type, BID, data, book, title, orgcode, orgname, tempTypeClass, tempTypeName } = this.state
    const { type, config, BID, data, book, title, orgcode, orgname, tempTypeClass, tempTypeName } = this.state
    if (!book) {
      notification.warning({
@@ -893,7 +906,7 @@
          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 : '01010001'}','${curr ? item.exratename : 'CNY'}',${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 || ''}'`
      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 => {
@@ -901,7 +914,7 @@
      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 : '01010001'}','${curr ? item.exratename : 'CNY'}',${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 || ''}'`)
      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 => {
@@ -932,6 +945,15 @@
          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)
      }
    })
  }
@@ -1041,34 +1063,19 @@
    this.setState({status: 'change', attachlist: vals, attachments: num})
  }
  triggermore = () => {
  }
  triggerclose = () => {
    const { config, status } = this.state
    let tabId = ''
    if (config.wrap.linkmenu && config.wrap.linkmenu.length > 0) {
      tabId = config.wrap.linkmenu[config.wrap.linkmenu.length - 1]
    }
    if (status === 'change') {
      confirm({
        content: '内容已变更,确定要关闭吗?',
        onOk() {
          MKEmitter.emit('closeTabView', config.$pageId)
          if (tabId) {
            MKEmitter.emit('reloadMenuView', tabId, 'table')
          }
        },
        onCancel() {}
      })
    } else {
      MKEmitter.emit('closeTabView', config.$pageId)
      if (tabId) {
        MKEmitter.emit('reloadMenuView', tabId, 'table')
      }
    }
  }
@@ -1132,72 +1139,233 @@
    })
  }
  render() {
    const { type, status, loading, config, orgcode, orgname, typeOptions, tempTypes, charType, charName, charInt, data, vouDate, username, remark, attachments, title, attachlist, tempTypeClass } = this.state
  triggerPrint = () => {
    const { config, BID } = this.state
    return (
      <div className="menu-voucher-wrap" style={config.style}>
        {type === 'createVoucher' ? <div className="voucher-header">
          <Button className="add-background header-btn" disabled={status === 'empty'} onClick={() => this.triggersave('add')}>保存并新增</Button>
          <Button className="add-background header-btn" disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>保存</Button>
          <PrintVoucher ID={config.uuid + 'print'} data={data} orgname={orgname} vouDate={vouDate} charName={charName} charInt={charInt} attachments={attachments} disabled={status !== 'saved'}/>
          <Dropdown overlay={<div className="mk-voucher-dropdown-wrap">
            <SaveAsTemp tempTypes={tempTypes} onChange={this.triggerTempsave}/>
            <div className="split"></div>
            <LoadFromTemp tempTypes={tempTypes} onChange={this.triggerTempLoad}/>
          </div>} trigger={['click']}>
            <Button className="out-background header-btn" onClick={this.triggermore}>更多</Button>
          </Dropdown>
        </div> : null}
        {type === 'checkVoucher' ? <div className="voucher-header">
          <Button className="add-background header-btn" disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>保存</Button>
          <PrintVoucher ID={config.uuid + 'print'} data={data} orgname={orgname} vouDate={vouDate} charName={charName} charInt={charInt} attachments={attachments} disabled={status !== 'saved'}/>
          <Button className="out-background header-btn" onClick={this.triggerclose}>关闭</Button>
        </div> : null}
        <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}>
          {type === 'createVoucher' || type === 'checkVoucher' ? <div className="pre-wrap">
            <div className="voucher-code">
              <Select value={charType} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({status: 'change', charType: val, charName: option.props.charName, charInt: option.props.charint})}>
                {typeOptions.map(option =>
                  <Select.Option key={option.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({status: 'change', charInt: val})}/> 号
    if (!config.wrap.printTemp) {
      notification.warning({
        top: 92,
        message: '尚未设置打印模板!',
        duration: 5
      })
      return
    }
    window.open('#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify({ id: BID, tempId: config.wrap.printTemp, pageId: config.$pageId || '', dataM: sessionStorage.getItem('dataM') }))))
  }
  triggerAduit = () => {
    const { book, BID, voucherCode, username } = this.state
    if (!book) {
      notification.warning({
        top: 92,
        message: '请选择账套!',
        duration: 5
      })
      return
    }
    let param = {
      func: 's_fcc_voucher_sub',
      ID: BID,
      status: 10,
      statusname: '已审核',
      voucher_code: voucherCode || '',
      username: username,
      fullname: sessionStorage.getItem('Full_Name') || ''
    }
    const that = this
    confirm({
      content: '确定要审核吗?',
      onOk() {
        Api.genericInterface(param).then(res => {
          if (!res.status) {
            notification.warning({
              top: 92,
              message: res.message,
              duration: 5
            })
            return
          }
          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, orgcode, typeOptions, tempTypes, charType, charInt, data, vouDate, username, remark, attachments, title, attachlist, tempTypeClass, vouAduited, vouReadOnly, voucherCode } = this.state
    if (type === 'checkVoucher') {
      return (
        <div className="menu-voucher-wrap" style={config.style}>
          <div className="voucher-header" style={{padding: `10px ${config.wrap.space || 0}px`}}>
            {!vouAduited ? <Button disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>保存</Button> : null}
            {/* <PrintVoucher ID={config.uuid + 'print'} data={data} orgname={orgname} vouDate={vouDate} charName={charName} charInt={charInt} attachments={attachments} disabled={status !== 'saved'}/> */}
            <Button disabled={status !== 'saved'} onClick={this.triggerPrint}>打印</Button>
            {vouAduited && !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({status: 'change', title: e.target.value})}/>
            </div>
            <div className="voucher-affix">
              附单据 <InputNumber precision={0} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 张
              <ResetAttach config={config} orgcode={orgcode} voucherCode={this.state.voucherCode} attachlist={attachlist} onChange={this.resetAttachList}/>
              <ResetRemark remark={remark} ID={config.uuid + 'remark'} onChange={(val) => this.setState({status: 'change', remark: val})}/>
            </div>
          </div> : null}
          {type === 'createTemp' || type === 'checkTemp' ? <div className="pre-temp-wrap">
            <div className="temp-text">
              <span>模板名称:</span><Input value={title} placeholder="模板名称" autoComplete="off" onChange={(e) => this.setState({title: e.target.value})}/>
            </div>
            <div className="temp-text">
              <span>模板类型:</span>
              <Select value={tempTypeClass} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({tempTypeClass: val, tempTypeName: option.props.children})}>
                {tempTypes.map(option =>
                  <Select.Option key={option.data_code} value={option.data_code}>{option.data_name}</Select.Option>
                )}
              </Select>
            </div>
            <div className="temp-action">
              <Button className="save-temp header-btn" onClick={() => this.triggerTempsave()}>保存</Button>
              <Button className="close-temp header-btn" onClick={this.triggerclose}>关闭</Button>
            </div>
          </div> : null}
          <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/>
            <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/>
          </div>
          <div className="user" style={{paddingLeft: `${config.wrap.space || 0}px`}}>制单人:{username}</div>
        </div>
        {type === 'createVoucher' || type === 'checkVoucher' ? <div className="user">制单人:{username}</div> : null}
      </div>
    )
      )
    } else if (type === 'createVoucher') {
      return (
        <div className="menu-voucher-wrap" style={config.style}>
          <div className="voucher-header" style={{padding: `10px ${config.wrap.space || 0}px`}}>
            <Button disabled={status === 'empty'} onClick={() => this.triggersave('add')}>保存并新增</Button>
            <Button disabled={status === 'empty' || status === 'saved'} onClick={() => this.triggersave()}>保存</Button>
            <Button disabled={status !== 'saved'} onClick={this.triggerPrint}>打印</Button>
            <Dropdown overlay={<div className="mk-voucher-dropdown-wrap">
              <SaveAsTemp tempTypes={tempTypes} onChange={this.triggerTempsave}/>
              <div className="split"></div>
              <LoadFromTemp tempTypes={tempTypes} onChange={this.triggerTempLoad}/>
            </div>} trigger={['hover']} placement="bottomCenter">
              <Button>更多</Button>
            </Dropdown>
          </div>
          <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}>
            <div className="pre-wrap">
              <div className="voucher-code">
                <Select value={charType} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({status: 'change', charType: val, charName: option.props.charname, charInt: option.props.charint})}>
                  {typeOptions.map(option =>
                    <Select.Option key={option.id} value={option.voucher_class} charname={option.voucher_char} charint={option.voucher_char_int}>{option.voucher_char}</Select.Option>
                  )}
                </Select>
                <InputNumber precision={0} min={1} value={charInt} autoComplete="off" onChange={(val) => this.setState({status: 'change', charInt: val})}/> 号
              </div>
              <div className="voucher-date">
                日期:<DatePicker value={vouDate} onChange={this.changeVouDate}/>
              </div>
              <div className="voucher-text">
                <Input value={title} placeholder="凭证文本" autoComplete="off" onChange={(e) => this.setState({status: 'change', title: e.target.value})}/>
              </div>
              <div className="voucher-affix">
                附单据 <InputNumber precision={0} value={attachments || 0} autoComplete="off" onChange={this.changeAttach}/> 张
                <ResetAttach config={config} orgcode={orgcode} voucherCode={this.state.voucherCode} attachlist={attachlist} onChange={this.resetAttachList}/>
                <ResetRemark remark={remark} ID={config.uuid + 'remark'} onChange={(val) => this.setState({status: 'change', remark: val})}/>
              </div>
            </div>
            <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/>
          </div>
          <div className="user" style={{paddingLeft: `${config.wrap.space || 0}px`}}>制单人:{username}</div>
        </div>
      )
    } else {
      return (
        <div className="menu-voucher-wrap" style={config.style}>
          <div className="voucher-body" style={{padding: `0px ${config.wrap.space || 0}px`}}>
            <div className="pre-temp-wrap">
              <div className="temp-text">
                <span>模板名称:</span><Input value={title} placeholder="模板名称" autoComplete="off" onChange={(e) => this.setState({title: e.target.value})}/>
              </div>
              <div className="temp-text">
                <span>模板类型:</span>
                <Select value={tempTypeClass} dropdownClassName="mk-vcode-dropdown" onChange={(val, option) => this.setState({tempTypeClass: val, tempTypeName: option.props.children})}>
                  {tempTypes.map(option =>
                    <Select.Option key={option.data_code} value={option.data_code}>{option.data_name}</Select.Option>
                  )}
                </Select>
              </div>
              <div className="temp-action">
                <Button onClick={() => this.triggerTempsave()}>保存</Button>
                <Button onClick={this.triggerclose}>关闭</Button>
              </div>
            </div>
            <VoucherTable config={config} loading={loading} data={data} onChange={this.dataChange}/>
          </div>
        </div>
      )
    }
  }
}