king
2024-05-23 9a11e62adeb8d435b52a361eb62d5b59e1deef2a
src/tabviews/custom/components/module/invoice/index.jsx
@@ -54,7 +54,12 @@
    tax_type: '',
    reqfields: [],
    requireds: [],
    timestamp: new Date().getTime() + ''
    invoice_no: '',
    invoice_code: '',
    invoice_date: '',
    read_only: false,
    invoice_type_name: '',
    timestamp: ''
  }
  UNSAFE_componentWillMount () {
@@ -341,6 +346,17 @@
        }
      })
      let invoice_type_name = ''
      if (line.read_only === 'true') {
        let types = book.invoice_type || []
        types.forEach(item => {
          if (item.value === line.invoice_type) {
            invoice_type_name = item.label
          }
        })
        invoice_type_name = invoice_type_name || line.invoice_type
      }
      this.setState({
        ID: line[config.setting.primaryKey] || Utils.getguid(),
        io: line.io,
@@ -366,6 +382,11 @@
        reviewer: line.reviewer,
        drawer: line.drawer,
        details: details,
        invoice_no: line.invoice_no,
        invoice_code: line.invoice_code,
        invoice_date: line.read_only === 'true' ? line.invoice_date : '',
        read_only: line.read_only === 'true',
        invoice_type_name: invoice_type_name,
        oriDetails: fromJS(details).toJS(),
        timestamp: new Date().getTime() + '',
        loading: false
@@ -519,6 +540,22 @@
  outBill = () => {
    const { config, BID, saveType } = this.state
    if (window.GLOB.storeFiles) {
      if (!window.GLOB.storeDate || window.GLOB.storeDate < 0) {
        Modal.warning({
          title: `电子档案存储包已过期。`,
          okText: '知道了'
        })
        return
      } else if (window.GLOB.storeDate < 30) {
        notification.warning({
          top: 92,
          message: `电子档案存储包还剩${window.GLOB.storeDate}天。`,
          duration: 5
        })
      }
    }
    if (window.GLOB.systemType === 'production' && !config.billOutBtn.proInterface) {
      notification.warning({
@@ -776,11 +813,18 @@
    param.data.invoiceTypeCode = trans[param.data.invoiceTypeCode] || ''
    if (window.GLOB.storeFiles) {
      param.store = true
    }
    let url = ''
    if (window.GLOB.systemType === 'production') {
      url = config.billOutBtn.proInterface
    } else {
      url = config.billOutBtn.interface
    }
    if (!/^http/.test(url)) {
      url = window.location.origin + url
    }
    let _params = {
@@ -1025,16 +1069,117 @@
    })
  }
  render() {
    const { config, book, loading, invTypes, reqfields, saveType, date, timestamp, invoice_type, from_to_name, from_to_tax_no, from_to_addr, from_to_tel, from_to_bank_name, from_to_account_no, from_to_mob, from_to_email, orgname, tax_no, addr, tel, bank_name, account_no, remark, reviewer, drawer, payee, details, visible, tax_type } = this.state
  // jumpSys = () => {
  //   window.open(`${window.location.origin}/kgcs/thirdPlatFormLogin?userName=admin&taxCode=91120222MA07GMNW97&taxName=天津畅享数字科技有限公司`)
  // }
    if (!book || (config.wrap.datatype === 'dynamic' && !tax_no)) {
  render() {
    const { config, book, loading, invTypes, reqfields, saveType, date, timestamp, invoice_type, from_to_name, from_to_tax_no, from_to_addr, from_to_tel, from_to_bank_name, from_to_account_no, from_to_mob, from_to_email, orgname, tax_no, addr, tel, bank_name, account_no, remark, reviewer, drawer, payee, details, visible, tax_type, invoice_no, invoice_code, invoice_date, read_only, invoice_type_name } = this.state
    if (!book || (config.wrap.datatype === 'dynamic' && !timestamp)) {
      return <div className="menu-invoice-wrap" style={config.style}>
        <div className="loading-mask">
          <div className="ant-spin-blur"></div>
          <Spin />
        </div>
      </div>
    }
    if (read_only) {
      return (
        <div className="menu-invoice-wrap read_only" style={config.style}>
          {loading ?
            <div className="loading-mask">
              <div className="ant-spin-blur"></div>
              <Spin />
            </div> : null
          }
          <div className="inv-action">
            {config.wrap.backBtn === 'show' ? <Button className="mk-back" onClick={this.goback}><LeftOutlined />返回</Button> : null}
          </div>
          <div className="inv-header">
            <div className="inv-type">{invoice_type_name}</div>
            <div className="inv-msg">
              {invoice_no ? <div>发票号码:{invoice_no}</div> : null}
              {invoice_code ? <div>发票代码:{invoice_code}</div> : null}
              {invoice_date ? <div>开票日期:{invoice_date}</div> : null}
            </div>
          </div>
          <div className="inv-body">
            <div className="inv-main-content">
              <div className="inv-buyer">
                <div className="inv-label">购买方</div>
                <div className="inv-content">
                  <Form.Item className="mk-name" label={<>名<span></span>称</>}>
                    {from_to_name}
                  </Form.Item>
                  <Form.Item label="纳税人识别号">
                    {from_to_tax_no}
                  </Form.Item>
                  <Form.Item label={<>地<span></span>址<span></span>、<span></span>电<span></span>话</>}>
                    {from_to_addr + ' ' + from_to_tel}
                  </Form.Item>
                  <Form.Item label="开户行及账号">
                    {from_to_bank_name + ' ' + from_to_account_no}
                  </Form.Item>
                </div>
              </div>
              <div className="inv-notice">
                <div className="inv-label">通知到</div>
                <div className="inv-content">
                  <Form.Item label={<>手<span></span>机<span></span>号</>}>
                    {from_to_mob}
                  </Form.Item>
                  <Form.Item label={<>邮<span></span>箱</>}>
                    {from_to_email}
                  </Form.Item>
                </div>
              </div>
            </div>
            <div className="inv-details">
              <InvoiceTable data={details} timestamp={timestamp} read_only={true} config={config.detail} tax_type={tax_type} onChange={(details) => this.setState({details})}/>
            </div>
            <div className="inv-main-content">
              <div className="inv-buyer">
                <div className="inv-label">销售方</div>
                <div className="inv-content">
                  <Form.Item label={<>名<span></span>称</>}>
                    {orgname}
                  </Form.Item>
                  <Form.Item label="纳税人识别号">
                    {tax_no}
                  </Form.Item>
                  <Form.Item label={<>地<span></span>址<span></span>、<span></span>电<span></span>话</>}>
                    {addr + ' ' + tel}
                  </Form.Item>
                  <Form.Item label="开户行及账号">
                    {bank_name + ' ' + account_no}
                  </Form.Item>
                </div>
              </div>
              <div className="inv-notice">
                <div className="inv-label">备注</div>
                <div className="inv-content" style={{paddingTop: '30px'}}>
                  <Form.Item label="">
                    {remark}
                  </Form.Item>
                </div>
              </div>
            </div>
          </div>
          <div className="inv-tail">
            <Form.Item label="收款人">
              {payee}
            </Form.Item>
            <Form.Item label="复核人">
              {reviewer}
            </Form.Item>
            <Form.Item label="开票人">
              {drawer}
            </Form.Item>
          </div>
        </div>
      )
    }
    return (
@@ -1047,6 +1192,7 @@
        }
        <div className="inv-action">
          {config.wrap.backBtn === 'show' ? <Button className="mk-back" onClick={this.goback}><LeftOutlined />返回</Button> : null}
          {/* <Button className="mk-addinv" onClick={this.jumpSys}>跳转</Button> */}
          <Button className="mk-addinv" onClick={this.addInvice}>新增发票</Button>
          <Button className="mk-bill" loading={saveType === 'bill'} onClick={this.saveBill}>保存单据</Button>
          <Button className="mk-submit" loading={saveType === 'out'} onClick={this.outBill}>提交开票</Button>
@@ -1097,7 +1243,7 @@
            </div>
          </div>
          <div className="inv-details">
            <InvoiceTable data={details} timestamp={timestamp} config={config.detail} tax_type={tax_type} onChange={(details) => this.setState({details})}/>
            <InvoiceTable data={details} timestamp={timestamp} read_only={false} config={config.detail} tax_type={tax_type} onChange={(details) => this.setState({details})}/>
          </div>
          <div className="inv-main-content">
            <div className="inv-buyer">