From 380b4b3234084862a30faae34a7d3ed70d119f34 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 26 三月 2024 09:33:22 +0800
Subject: [PATCH] 2024-03-26

---
 src/menu/components/module/voucher/options.jsx                              |   22 ++
 src/assets/css/viewstyle.scss                                               |   10 
 src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx |    1 
 src/tabviews/custom/components/module/voucher/resetRemark/index.jsx         |    4 
 src/components/normalform/modalform/index.jsx                               |   11 +
 src/tabviews/custom/components/module/voucher/index.jsx                     |  293 ++++++++++++++++++++++-------
 src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx        |    2 
 src/menu/datasource/verifycard/settingform/index.jsx                        |    3 
 src/tabviews/custom/components/module/voucher/resetAttach/index.jsx         |    7 
 src/menu/components/module/voucher/index.jsx                                |   23 +-
 src/tabviews/custom/components/module/voucher/voucherTable/index.jsx        |  100 +++++++--
 src/tabviews/custom/components/module/voucher/index.scss                    |   60 ++---
 src/menu/components/module/voucher/index.scss                               |   47 +---
 13 files changed, 397 insertions(+), 186 deletions(-)

diff --git a/src/assets/css/viewstyle.scss b/src/assets/css/viewstyle.scss
index d924c51..ceedbf9 100644
--- a/src/assets/css/viewstyle.scss
+++ b/src/assets/css/viewstyle.scss
@@ -175,8 +175,10 @@
     border-color: $color6;
   }
   // 涓嬫媺妗�
-  .ant-select-selection:hover {
-    border-color: $color5;
+  .ant-select:not(.ant-select-disabled) {
+    .ant-select-selection:hover {
+      border-color: $color5;
+    }
   }
   .ant-select-focused .ant-select-selection, .ant-select-selection:focus, .ant-select-selection:active {
     border-color: $color5;
@@ -187,7 +189,7 @@
     background-color: $color6;
   }
   // 杈撳叆妗�
-  .ant-input:hover {
+  .ant-input:not([disabled]):hover {
     border-color: $color5;
   }
   .ant-input:focus, .ant-input:active {
@@ -198,7 +200,7 @@
     border-color: $color5;
     box-shadow: 0 0 0 2px $color2;
   }
-  .ant-input-number:hover, .ant-input-number:focus, .ant-input-number:active, .ant-input-number-input:hover, .ant-input-number-input:focus, .ant-input-number-input:active, .ant-input-number-focused:hover, .ant-input-number-focused:focus, .ant-input-number-focused:active {
+  .ant-input-number:not(.ant-input-number-disabled):hover, .ant-input-number:focus, .ant-input-number:active, .ant-input-number-input:hover, .ant-input-number-input:focus, .ant-input-number-input:active, .ant-input-number-focused:hover, .ant-input-number-focused:focus, .ant-input-number-focused:active {
     border-color: $color5;
   }
   .ant-input-number:focus, .ant-input-number:active {
diff --git a/src/components/normalform/modalform/index.jsx b/src/components/normalform/modalform/index.jsx
index 776c225..1623373 100644
--- a/src/components/normalform/modalform/index.jsx
+++ b/src/components/normalform/modalform/index.jsx
@@ -18,6 +18,7 @@
 const MKCheckbox = asyncComponent(() => import('./mkCheckbox'))
 const StyleInput = asyncComponent(() => import('./styleInput'))
 const MKFileUpload = asyncComponent(() => import('@/tabviews/zshare/fileupload'))
+const MkPrintTemps = asyncComponent(() => import('@/menu/components/share/actioncomponent/actionform/mkPrintTemps'))
 const MKColor = asyncComponent(() => import('@/mob/colorsketch'))
 // const MKColor = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkColor'))
 const MkEditIcon = asyncComponent(() => import('@/components/mkIcon'))
@@ -314,14 +315,22 @@
           </Col>
         )
         return
+      } else if (item.type === 'printTemps') {
+        content = <MkPrintTemps onChange={(val) => this.recordChange({[item.field]: val})}/>
       }
 
       if (!content) return
 
       if (item.help) {
+        let help = null
+        if (typeof(item.help) === 'function') {
+          help = item.help(this.record)
+        } else {
+          help = <span style={{fontSize: '12px'}}>{item.help}</span>
+        }
         fields.push(
           <Col span={item.span || 12} key={index}>
-            <Form.Item label={label} help={<span style={{fontSize: '12px'}}>{item.help}</span>}>
+            <Form.Item label={label} help={help}>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: item.rules
diff --git a/src/menu/components/module/voucher/index.jsx b/src/menu/components/module/voucher/index.jsx
index 905ef23..4d26cc9 100644
--- a/src/menu/components/module/voucher/index.jsx
+++ b/src/menu/components/module/voucher/index.jsx
@@ -122,16 +122,17 @@
           <ToolOutlined />
         </Popover>
         <div className="voucher-box">
-          {card.wrap.type === 'createVoucher' ? <div className="voucher-header">
-            <Button className="add-background header-btn">淇濆瓨骞舵柊澧�</Button>
-            <Button className="add-background header-btn">淇濆瓨</Button>
-            <Button className="print-background header-btn">鎵撳嵃</Button>
-            <Button className="out-background header-btn">鏇村</Button>
+          {card.wrap.type === 'createVoucher' ? <div className="voucher-header" style={{padding: `10px ${card.wrap.space || 0}px`}}>
+            <Button>淇濆瓨骞舵柊澧�</Button>
+            <Button>淇濆瓨</Button>
+            <Button>鎵撳嵃</Button>
+            <Button>鏇村</Button>
           </div> : null}
-          {card.wrap.type === 'checkVoucher' ? <div className="voucher-header">
-            <Button className="add-background header-btn">淇濆瓨</Button>
-            <Button className="print-background header-btn">鎵撳嵃</Button>
-            <Button className="out-background header-btn">鍏抽棴</Button>
+          {card.wrap.type === 'checkVoucher' ? <div className="voucher-header" style={{padding: `10px ${card.wrap.space || 0}px`}}>
+            <Button>淇濆瓨</Button>
+            <Button>鎵撳嵃</Button>
+            <Button>瀹℃牳</Button>
+            <Button>鍏抽棴</Button>
           </div> : null}
           <div className="voucher-body" style={{padding: `0px ${card.wrap.space || 0}px`}}>
             {card.wrap.type === 'createVoucher' || card.wrap.type === 'checkVoucher' ? <div className="pre-wrap">
@@ -158,8 +159,8 @@
                 妯℃澘绫诲瀷:
                 <div>鏃ュ父鏀嚭<DownOutlined/></div>
               </div>
-              <Button className="close-temp header-btn">鍏抽棴</Button>
-              <Button className="save-temp header-btn">淇濆瓨</Button>
+              <Button>鍏抽棴</Button>
+              <Button>淇濆瓨</Button>
             </div> : null}
             <VoucherTable config={card}/>
             {card.wrap.type === 'createVoucher' || card.wrap.type === 'checkVoucher' ? <div className="user">鍒跺崟浜猴細</div> : null}
diff --git a/src/menu/components/module/voucher/index.scss b/src/menu/components/module/voucher/index.scss
index 964fd36..9f43cfe 100644
--- a/src/menu/components/module/voucher/index.scss
+++ b/src/menu/components/module/voucher/index.scss
@@ -24,10 +24,13 @@
     padding: 10px;
     border-bottom: 1px solid #eeeeee;
 
-    .header-btn {
+    .ant-btn {
       height: 28px;
       min-width: 80px;
       margin-right: 10px;
+      background-color: #ffffff;
+      border-color: #d8d8d8;
+      color: rgba(0, 0, 0, 0.65);
     }
   }
   .voucher-body {
@@ -76,12 +79,14 @@
         }
       }
     }
-    .header-btn {
-      float: right;
-      margin-left: 10px;
-    }
     .pre-wrap {
       padding: 10px 0px;
+      >.ant-btn {
+        margin-right: 10px;
+        background-color: #ffffff;
+        border-color: #d8d8d8;
+        color: rgba(0, 0, 0, 0.65);
+      }
     }
     .voucher-date {
       display: inline-block;
@@ -117,38 +122,6 @@
     .user {
       padding-top: 15px;
     }
-  }
-
-  .add-background {
-    background: #26C281;
-    border-color: #26C281;
-    color: #ffffff;
-  }
-  .print-background {
-    background-color: #8E44AD;
-    border-color: #8E44AD;
-    color: #ffffff;
-  }
-  .out-background {
-    background-color: rgb(50, 197, 210);
-    border-color: rgb(50, 197, 210);
-    color: #ffffff;
-  }
-  .save-temp {
-    background-color: #1890ff;
-    border-color: #1890ff;
-    color: #ffffff;
-  }
-  .close-temp {
-    background-color: #ffffff;
-    border-color: #f5222d;
-    color: #f5222d;
-  }
-
-  .system-background {
-    background: #1890ff;
-    border-color: #1890ff;
-    color: #ffffff;
   }
 }
 .menu-voucher-box::after {
diff --git a/src/menu/components/module/voucher/options.jsx b/src/menu/components/module/voucher/options.jsx
index bdc8eb0..2f268e6 100644
--- a/src/menu/components/module/voucher/options.jsx
+++ b/src/menu/components/module/voucher/options.jsx
@@ -1,3 +1,4 @@
+import React from 'react'
 import MenuUtils from '@/utils/utils-custom.js'
 
 /**
@@ -56,6 +57,7 @@
         {field: 'voucherType', values: ['createVoucher', 'checkVoucher']},
         {field: 'voucherTypeText', values: ['createVoucher', 'checkVoucher']},
         {field: 'voucherSign', values: ['createVoucher', 'checkVoucher']},
+        {field: 'printTemp', values: ['createVoucher', 'checkVoucher']},
         {field: 'supModule', values: ['checkTemp', 'checkVoucher']},
         {field: 'attachStatus', values: ['createVoucher', 'checkVoucher']},
       ]
@@ -138,6 +140,26 @@
       ]
     },
     {
+      type: 'printTemps',
+      field: 'printTemp',
+      label: '鎵撳嵃妯℃澘',
+      initval: wrap.printTemp || '',
+      help: (record) => {
+        if (record.printTemp) {
+          return <span onClick={() => {
+            sessionStorage.setItem('mk-print-temp', record.printTemp)
+            window.open('#/hs')
+
+            setTimeout(() => {
+              sessionStorage.removeItem('mk-print-temp')
+            }, 50)
+          }} style={{color: '#1890ff', cursor: 'pointer', fontSize: '13px'}}>#鏌ョ湅妯℃澘</span>
+        }
+        return ''
+      },
+      required: true
+    },
+    {
       type: 'number',
       field: 'space',
       label: '鐣欑櫧',
diff --git a/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx b/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx
index 4ad9280..3d37897 100644
--- a/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx
+++ b/src/menu/components/share/actioncomponent/actionform/mkPrintTemps/index.jsx
@@ -74,6 +74,7 @@
         showSearch
         allowClear
         value={value}
+        dropdownMatchSelectWidth={false}
         filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
         onSelect={this.selectChange}
         onChange={(val) => val === undefined && this.selectChange('')}
diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx
index d52d420..8433cc5 100644
--- a/src/menu/datasource/verifycard/settingform/index.jsx
+++ b/src/menu/datasource/verifycard/settingform/index.jsx
@@ -683,8 +683,7 @@
           wrapClassName="mk-flow-type"
           visible={visible}
           width={400}
-          maskClosable={false}
-          closable={false}
+          onCancel={() => this.setState({visible: false})}
           footer={[
             <Button key="cancel" className="mk-green" onClick={() => this.execAddProcess('flowstart')}>鍙戣捣</Button>,
             <Button key="confirm" className="mk-primary" onClick={() => this.execAddProcess('flowcheck')}>瀹℃壒</Button>
diff --git a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx
index a400204..6299d11 100644
--- a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx
+++ b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx
@@ -79,7 +79,7 @@
                   }
                 ]
               })(
-                <InputNumber readOnly={nodetype !== 'node' && nodetype !== 'edge'} precision={0}/>
+                <InputNumber readOnly={nodetype !== 'node' && nodetype !== 'edge' && nodetype !== 'end'} precision={0}/>
               )}
             </Form.Item>
           </Col>
diff --git a/src/tabviews/custom/components/module/voucher/index.jsx b/src/tabviews/custom/components/module/voucher/index.jsx
index 8c282b4..6b70332 100644
--- a/src/tabviews/custom/components/module/voucher/index.jsx
+++ b/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,7 @@
     username: sessionStorage.getItem('User_Name'),
     remark: '',
     attachments: 0,
+    vouAduited: false,
     attachlist: [],
     oriAttachs: [],
     tempTypes: [],
@@ -304,6 +303,7 @@
 
       let data = []
       if (res.voucher) {
+        let disabled = res.voucher_status === 'true'
         data = res.voucher.map(line => {
           line.uuid = line.subject_id || ''
 
@@ -320,6 +320,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 +352,8 @@
           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',
           charName: res.voucher_char,
           charInt: res.voucher_char_int,
           // orgcode: res.orgcode,
@@ -1059,10 +1061,6 @@
     this.setState({status: 'change', attachlist: vals, attachments: num})
   }
 
-  triggermore = () => {
-
-  }
-
   triggerclose = () => {
     const { config, status } = this.state
 
@@ -1139,72 +1137,227 @@
     })
   }
 
-  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.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})}/> 鍙�
+    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
+          }
+    
+          Modal.success({
+            title: '宸茬粡閫氳繃瀹℃牳'
+          })
+
+          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
+          }
+    
+          Modal.success({
+            title: '瀹℃牳宸插彇娑�'
+          })
+
+          that.getVoucher()
+        })
+      },
+      onCancel() {}
+    })
+  }
+
+  render() {
+    const { type, status, loading, config, orgcode, typeOptions, tempTypes, charType, charInt, data, vouDate, username, remark, attachments, title, attachlist, tempTypeClass, vouAduited } = 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 ?
+              <Button onClick={this.triggerUnAduit}>鍙栨秷瀹℃牳</Button> :
+              <Button onClick={this.triggerAduit}>瀹℃牳</Button>}
+            <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-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="鍑瘉鏂囨湰" 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>
+      )
+    }
   }
 }
 
diff --git a/src/tabviews/custom/components/module/voucher/index.scss b/src/tabviews/custom/components/module/voucher/index.scss
index 4eec234..0849306 100644
--- a/src/tabviews/custom/components/module/voucher/index.scss
+++ b/src/tabviews/custom/components/module/voucher/index.scss
@@ -14,10 +14,23 @@
     padding: 10px;
     border-bottom: 1px solid #eeeeee;
 
-    .header-btn {
+    .ant-btn {
       height: 28px;
       min-width: 80px;
       margin-right: 10px;
+      background-color: #ffffff;
+      border-color: #d8d8d8;
+      color: rgba(0, 0, 0, 0.65);
+    }
+    .ant-btn[disabled] {
+      background-color: #dadada!important;
+      border-color: #dadada!important;
+      color: #ffffff!important;
+    }
+    .ant-btn:not([disabled]):hover {
+      background-color: var(--mk-sys-color);
+      border-color: var(--mk-sys-color);
+      color: #ffffff;
     }
   }
   .voucher-body {
@@ -91,42 +104,14 @@
         .ant-btn {
           margin-left: 15px;
         }
+        .ant-btn:hover {
+          color: var(--mk-sys-color);
+          border-color: var(--mk-sys-color);
+        }
       }
     }
   }
 
-  .add-background {
-    background: #26C281;
-    border-color: #26C281;
-    color: #ffffff;
-  }
-  .print-background {
-    background-color: #8E44AD;
-    border-color: #8E44AD;
-    color: #ffffff;
-  }
-  .out-background {
-    background-color: rgb(50, 197, 210);
-    border-color: rgb(50, 197, 210);
-    color: #ffffff;
-  }
-
-  .save-temp {
-    background-color: var(--mk-sys-color);
-    border-color: var(--mk-sys-color);
-    color: #ffffff;
-  }
-  .close-temp {
-    background-color: #ffffff;
-    border-color: #f5222d;
-    color: #f5222d;
-  }
-
-  .system-background {
-    background: var(--mk-sys-color);
-    border-color: var(--mk-sys-color);
-    color: #ffffff;
-  }
   .user {
     padding: 15px 30px 0px;
   }
@@ -145,10 +130,19 @@
   border: 1px solid #d8d8d8;
   border-radius: 4px;
   min-height: 66px;
+  overflow: hidden;
+
   .ant-btn {
     display: block;
     width: 100%;
     border: none;
+    color: rgba(0, 0, 0, 0.65);
+    border-radius: 0;
+  }
+  .ant-btn:not([disabled]):hover {
+    background-color: var(--mk-sys-color);
+    border-color: var(--mk-sys-color);
+    color: #ffffff;
   }
   .split {
     width: 100%;
diff --git a/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx b/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx
index cbf864d..652b60d 100644
--- a/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx
+++ b/src/tabviews/custom/components/module/voucher/resetAttach/index.jsx
@@ -231,6 +231,7 @@
   }
 
   render() {
+    const { disabled } = this.props
     const { visible, upVisible, docVisible, files, list, documents, loading } = this.state
 
     return (
@@ -248,8 +249,8 @@
           destroyOnClose
         >
           {loading ? <Spin /> : null}
-          <Button type="link" className="attach-type-btn" disabled={loading} onClick={() => this.setState({upVisible: true})}>涓婁紶鏂版枃浠�</Button>
-          <Button type="link" className="attach-type-btn" disabled={loading} onClick={() => this.setState({docVisible: true, selectDocs: []})}>浠庝細璁$數瀛愭。妗堥�夋嫨</Button>
+          <Button type="link" className="attach-type-btn" disabled={loading || disabled} onClick={() => this.setState({upVisible: true})}>涓婁紶鏂版枃浠�</Button>
+          <Button type="link" className="attach-type-btn" disabled={loading || disabled} onClick={() => this.setState({docVisible: true, selectDocs: []})}>浠庝細璁$數瀛愭。妗堥�夋嫨</Button>
           <div className="attach-selected-list">
             {list.map(item => {
               return <div className="attach-item" key={item.id}>
@@ -259,7 +260,7 @@
                   <div>{item.data_name ? item.data_name + ' / ' : ''}{item.attachments_title}</div>
                 </div>
                 <div>
-                  <DeleteOutlined onClick={() => this.deleteFile(item.id)}/>
+                  {!disabled ? <DeleteOutlined onClick={() => this.deleteFile(item.id)}/> : null}
                 </div>
               </div>
             })}
diff --git a/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx b/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx
index a2a28b9..53af62e 100644
--- a/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx
+++ b/src/tabviews/custom/components/module/voucher/resetRemark/index.jsx
@@ -37,7 +37,7 @@
   }
 
   render() {
-    const { ID } = this.props
+    const { ID, disabled } = this.props
     const { visible, remark } = this.state
 
     return (
@@ -52,7 +52,7 @@
           onCancel={() => { this.setState({ visible: false })}}
           destroyOnClose
         >
-          <TextArea id={ID} defaultValue={remark} rows={6}/>
+          <TextArea id={ID} disabled={disabled} defaultValue={remark} rows={6}/>
         </Modal>
       </>
     )
diff --git a/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx b/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx
index ba436ea..6edc5b7 100644
--- a/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx
+++ b/src/tabviews/custom/components/module/voucher/voucherTable/index.jsx
@@ -712,7 +712,9 @@
       if (record.type === 'total') {
         children = <div className="content-wrap" style={{lineHeight: '60px'}}>鍚堣: {val}</div>
         colSpan = 2
-      } else {
+      } else if (record.$disabled) {
+        children = <div className="content-wrap">{val}</div>
+      } else  {
         extra = <PlusOutlined onClick={this.plusLine}/>
 
         if (editing) {
@@ -817,6 +819,17 @@
                   <span><InputNumber precision={4} className="inner-input" id={col.uuid + record.uuid + 'price'} defaultValue={record.net_unitprice || 0} onChange={(val) => this.onChange(val)} onPressEnter={this.pricePress} onBlur={this.priceBlur}/></span>
                 </span>
               </div>
+            } else if (record.$disabled) {
+              countNode = <div className="count-wrap">
+                <span style={{marginRight: '5px'}}>
+                  <span>鏁伴噺锛�</span>
+                  <span>{record.fcc_count || 0}</span>
+                </span>
+                <span>
+                  <span>鍗曚环锛�</span>
+                  <span>{record.net_unitprice || 0}</span>
+                </span>
+              </div>
             } else {
               countNode = <div className="count-wrap">
                 <span style={{marginRight: '5px'}} onClick={this.editCount}>
@@ -891,6 +904,21 @@
                   <span><InputNumber precision={2} className="inner-input" id={col.uuid + record.uuid + 'origin'} defaultValue={record.foreign_amount || 0} onChange={(val) => this.onChange(val)} onPressEnter={this.originPress} onBlur={this.originBlur}/></span>
                 </span>
               </div>
+            } else if (record.$disabled) {
+              currencyNode = <div className="count-wrap">
+                <span style={{marginRight: '5px'}}>
+                  <span>璐у竵锛�</span>
+                  <span>{record.exratename || ''}</span>
+                </span>
+                <span style={{marginRight: '5px'}}>
+                  <span>姹囩巼锛�</span>
+                  <span>{record.unitratio || 1}</span>
+                </span>
+                <span>
+                  <span>鍘熷竵锛�</span>
+                  <span>{record.foreign_amount || 0}</span>
+                </span>
+              </div>
             } else {
               currencyNode = <div className="count-wrap">
                 <span style={{marginRight: '5px'}} onClick={this.editCurrency}>
@@ -909,11 +937,19 @@
             }
           }
 
-          children = <div className="content-wrap" onClick={this.focus}>
-            {val}
-            {countNode}
-            {currencyNode}
-          </div>
+          if (record.$disabled) {
+            children = <div className="content-wrap">
+              {val}
+              {countNode}
+              {currencyNode}
+            </div>
+          } else {
+            children = <div className="content-wrap" onClick={this.focus}>
+              {val}
+              {countNode}
+              {currencyNode}
+            </div>
+          }
         }
       }
     } else if (col.field === 'debit') {
@@ -930,13 +966,23 @@
           }
           vals = (val * 100).toFixed(0).split('').reverse()
         }
-        children = <div className={'money-uint' + (down ? ' down' : '')} onClick={this.focus}>
-          <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span>
-          <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span>
-        </div>
+        
+        if (record.$disabled) {
+          children = <div className={'money-uint' + (down ? ' down' : '')}>
+            <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span>
+            <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span>
+          </div>
+        } else {
+          children = <div className={'money-uint' + (down ? ' down' : '')} onClick={this.focus}>
+            <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span>
+            <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span>
+          </div>
+        }
       }
     } else if (col.field === 'credit') {
-      extra = <CloseOutlined onClick={this.delVoucher}/>
+      if (record.type !== 'total' && !record.$disabled) {
+        extra = <CloseOutlined onClick={this.delVoucher}/>
+      }
 
       if (editing) {
         children = <InputNumber id={col.uuid + record.uuid} precision={2} defaultValue={record.credit} onChange={(val) => this.onChange(val)} onPressEnter={this.enterPress} onBlur={this.onBlur}/>
@@ -951,10 +997,18 @@
           }
           vals = (val * 100).toFixed(0).split('').reverse()
         }
-        children = <div className={'money-uint' + (down ? ' down' : '')} onClick={this.focus}>
-        <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span>
-        <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span>
-      </div>
+
+        if (record.$disabled) {
+          children = <div className={'money-uint' + (down ? ' down' : '')}>
+            <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span>
+            <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span>
+          </div>
+        } else {
+          children = <div className={'money-uint' + (down ? ' down' : '')} onClick={this.focus}>
+            <span>{vals[10] || ''}</span> <span>{vals[9] || ''}</span> <span>{vals[8] || ''}</span> <span>{vals[7] || ''}</span> <span>{vals[6] || ''}</span> <span>{vals[5] || ''}</span>
+            <span>{vals[4] || ''}</span> <span>{vals[3] || ''}</span> <span>{vals[2] || ''}</span> <span>{vals[1] || ''}</span> <span className="last">{vals[0] || ''}</span>
+          </div>
+        }
       }
     }
 
@@ -966,17 +1020,17 @@
 
 class VoucherTable extends Component {
   static propTpyes = {
-    config: PropTypes.object,        // 鑿滃崟Id
-    data: PropTypes.any,             // 琛ㄦ牸鏁版嵁
-    loading: PropTypes.bool,         // 琛ㄦ牸鍔犺浇涓�
-    onChange: PropTypes.func,        // 琛ㄦ牸鍙樺姩
+    config: PropTypes.object,
+    data: PropTypes.any,
+    loading: PropTypes.bool,
+    onChange: PropTypes.func
   }
 
   state = {
     data: [],
     edData: [],
-    tableId: '',          // 琛ㄦ牸ID
-    columns: null,        // 鏄剧ず鍒�
+    tableId: '',
+    columns: null,
   }
 
   UNSAFE_componentWillMount () {
@@ -1105,9 +1159,11 @@
       return item
     })
 
+    let disabled = _data[0] && _data[0].$disabled ? true : false
+
     if (_data.length < 4) {
       for (let i = _data.length - 1; i < 4; i++) {
-        _data.push({uuid: Utils.getguid(), index: i + 1, subject_voucher_text: '', subject_code: '', subject_name: '', debit: '', credit: ''})
+        _data.push({uuid: Utils.getguid(), $disabled: disabled, index: i + 1, subject_voucher_text: '', subject_code: '', subject_name: '', debit: '', credit: ''})
       }
     }
     return _data

--
Gitblit v1.8.0