From 66bdbc1df92e8ec4a5108a4e0323e25a7b9ff8f8 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 21 五月 2024 16:37:16 +0800 Subject: [PATCH] Merge branch 'develop' --- src/tabviews/custom/components/module/invoice/index.jsx | 633 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 580 insertions(+), 53 deletions(-) diff --git a/src/tabviews/custom/components/module/invoice/index.jsx b/src/tabviews/custom/components/module/invoice/index.jsx index 363794d..e50407c 100644 --- a/src/tabviews/custom/components/module/invoice/index.jsx +++ b/src/tabviews/custom/components/module/invoice/index.jsx @@ -2,8 +2,9 @@ import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' import { Select, Form, Input, Button, Modal, Spin, notification } from 'antd' -import { EllipsisOutlined } from '@ant-design/icons' +import { EllipsisOutlined, LeftOutlined } from '@ant-design/icons' import moment from 'moment' +import md5 from 'md5' import Api from '@/api' import UtilsDM from '@/utils/utils-datamanage.js' @@ -20,17 +21,11 @@ state = { BID: '', - ID: Utils.getuuid(), + ID: Utils.getguid(), io: '', - invTypes: [ - {value: '1', label: '鐢靛瓙鍙戠エ锛堝鍊肩◣涓撶敤鍙戠エ锛�'}, - {value: '2', label: '鐢靛瓙鍙戠エ锛堟櫘閫氬彂绁級'}, - {value: '3', label: '澧炲�肩◣绾歌川涓撶敤鍙戠エ'}, - {value: '4', label: '澧炲�肩◣绾歌川鏅�氬彂绁�'}, - {value: '5', label: '澧炲�肩◣鐢靛瓙鏅�氬彂绁�'}, - {value: '6', label: '澧炲�肩◣鐢靛瓙涓撶敤鍙戠エ'}, - ], + invTypes: [], invoice_type: '', + business_type: '', date: moment().format('YYYY骞碝M鏈圖D鏃�'), from_to_name: '', from_to_tax_no: '', @@ -58,7 +53,13 @@ saveType: '', tax_type: '', reqfields: [], - requireds: [] + requireds: [], + invoice_no: '', + invoice_code: '', + invoice_date: '', + read_only: false, + invoice_type_name: '', + timestamp: '' } UNSAFE_componentWillMount () { @@ -83,6 +84,7 @@ _config.buyer = this.formatSetting(_config.buyer, 'buyer') _config.detail = this.formatSetting(_config.detail, 'detail') + _config.detail.uuid = _config.uuid let book = null let pas = {} @@ -134,12 +136,21 @@ item.setting.arr_field = item.columns.map(col => col.field).join(',') item.setting.laypage = item.setting.laypage === 'true' + if (item.refreshTab && item.refreshTab.length) { + item.reTabId = item.refreshTab.pop() + } + if (item.syncComponent && item.syncComponent.length) { + item.syncComId = item.syncComponent.pop() + } + if (type === 'buyer') { item.columns = item.columns.map(cell => { if (['from_to_tel', 'from_to_account_no', 'from_to_code'].includes(cell.field)) { cell.Hide = 'true' } else if (['from_to_email', 'from_to_mob'].includes(cell.field)) { cell.Width = 80 + } else if (['from_to_name'].includes(cell.field)) { + cell.Width = 140 } return cell }) @@ -149,7 +160,7 @@ cell.field = 'tax_rate' cell.label = '绋庣巼' } - if (['Description', 'id', 'small_tax_rate', 'free_tax_mark', 'vat_special_management'].includes(cell.field)) { + if (['Description', 'id', 'small_tax_rate', 'free_tax_mark', 'vat_special_management', 'tax_item', 'tax_method'].includes(cell.field)) { cell.Hide = 'true' } else if (['spec'].includes(cell.field)) { cell.Width = 150 @@ -281,9 +292,13 @@ } async loadData() { - const { config, BID } = this.state + const { config, BID, book } = this.state - if (config.wrap.datatype !== 'dynamic') return + if (config.wrap.datatype !== 'dynamic' || !book) return + if (!BID) { + this.clearData() + return + } let param = UtilsDM.getQueryDataParams(config.setting, [], config.setting.order, 1, 1, BID) @@ -293,14 +308,91 @@ let result = await Api.genericInterface(param) if (result.status) { + if (!result.data[0]) { + this.clearData() + this.setState({ + loading: false + }) + return + } + + let line = result.data[0] + let details = result.data.map(item => { + let tax_name = item.tax_rate * 100 + '%' + + if (item.vat_special_management && item.free_tax_mark === 'true') { + tax_name = item.vat_special_management + } + + return { + uuid: item.jskey, + productname: item.productname, + productcode: item.productcode, + spec: item.spec, + unit: item.unit, + bill_count: item.bill_count, + unitprice: item.unitprice, + tax_rate: item.tax_rate, + free_tax_mark: item.free_tax_mark, + vat_special_management: item.vat_special_management, + tax_classify_code: item.tax_classify_code, + tax_classify_name: item.tax_classify_name, + amount_line: item.amount_line, + tax_amount: item.tax_amount, + invoice_lp: item.invoice_lp, + tax_item: item.tax_item, + tax_method: item.tax_method, + tax_name: tax_name + } + }) + + 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: result.data[0][config.setting.primaryKey] || Utils.getuuid(), - io: '', - details: [], - oriDetails: [], + ID: line[config.setting.primaryKey] || Utils.getguid(), + io: line.io, + invoice_type: line.invoice_type, + business_type: line.business_type, + from_to_name: line.from_to_name, + from_to_tax_no: line.from_to_tax_no, + from_to_addr: line.from_to_addr, + from_to_tel: line.from_to_tel, + from_to_bank_name: line.from_to_bank_name, + from_to_account_no: line.from_to_account_no, + from_to_mob: line.from_to_mob, + from_to_email: line.from_to_email, + from_to_code: line.from_to_code, + orgname: line.orgname, + tax_no: line.tax_no, + addr: line.addr, + tel: line.tel, + bank_name: line.bank_name, + account_no: line.account_no, + remark: line.remark, + payee: line.payee, + 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 }) + + this.getRequired(line.invoice_type) UtilsDM.querySuccess(result) } else { @@ -313,6 +405,25 @@ } } + clearData = () => { + this.setState({ + ID: Utils.getguid(), + 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: '', + from_to_code: '', + business_type: '', + details: [], + oriDetails: [], + timestamp: new Date().getTime() + '', + }) + } + changeType = (val) => { sessionStorage.setItem('pre_invoice_type', val) this.setState({invoice_type: val}) @@ -320,7 +431,13 @@ } getRequired = (invoice_type) => { - if (!invoice_type) return + if (!invoice_type) { + this.setState({ + reqfields: [], + requireds: [] + }) + return + } let reqfields = [] let requireds = [] @@ -364,7 +481,7 @@ } saveBill = () => { - const { config, book, saveType } = this.state + const { config, BID, saveType } = this.state if (saveType) return @@ -377,7 +494,7 @@ LText: sql, exec_type: window.GLOB.execType || 'y', timestamp: moment().format('YYYY-MM-DD HH:mm:ss'), - BID: book.id + BID: BID } param.secretkey = Utils.encrypt('', param.timestamp) @@ -388,7 +505,16 @@ }) Api.genericInterface(param).then(res => { + this.setState({ + saveType: '' + }) if (res.status) { + if (config.billSaveBtn.reTabId) { + MKEmitter.emit('reloadMenuView', config.billSaveBtn.reTabId, 'table') + } + if (config.billSaveBtn.syncComId) { + MKEmitter.emit('reloadData', config.billSaveBtn.syncComId) + } notification.success({ top: 92, message: '淇濆瓨鎴愬姛銆�', @@ -401,9 +527,6 @@ duration: 5 }) } - this.setState({ - saveType: '' - }) }) }, (error) => { notification.warning({ @@ -411,13 +534,21 @@ message: error, duration: 5 }) - return }) }, 20) } outBill = () => { - const { config, book, saveType } = this.state + const { config, BID, saveType } = this.state + + if (window.GLOB.systemType === 'production' && !config.billOutBtn.proInterface) { + notification.warning({ + top: 92, + message: '灏氭湭璁剧疆姝e紡绯荤粺鎺ュ彛鍦板潃锛�', + duration: 5 + }) + return + } if (saveType) return @@ -428,16 +559,33 @@ let param = { func: 'sPC_TableData_InUpDe', LText: sql, - key_back_type: 'Y', + script_type: 'Y', exec_type: window.GLOB.execType || 'y', timestamp: moment().format('YYYY-MM-DD HH:mm:ss'), - BID: book.id + BID: BID } param.secretkey = Utils.encrypt('', param.timestamp) param.LText = Utils.formatOptions(param.LText, param.exec_type) - console.info(sql) + this.setState({ + saveType: 'out' + }) + + Api.genericInterface(param).then(res => { + if (res.status) { + this.outPutBill(res) + } else { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + this.setState({ + saveType: '' + }) + } + }) }, (error) => { notification.warning({ top: 92, @@ -449,11 +597,15 @@ }) } - getPreSql = (btn) => { - const { book, ID, io, details, oriDetails, 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, from_to_code, orgname, tax_no, addr, tel, bank_name, account_no, remark, reviewer, drawer, payee } = this.state + goback = () => { + const { config } = this.state + MKEmitter.emit('closeTabView', config.$pageId) + } - let BID = book.id - let userName = sessionStorage.getItem('User_Name') || '' + getPreSql = (btn) => { + const { config, book, ID, BID, io, details, oriDetails, business_type, 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, from_to_code, orgname, tax_no, addr, tel, bank_name, account_no, remark, reviewer, drawer, payee } = this.state + + let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' let RoleID = sessionStorage.getItem('role_id') || '' let departmentcode = sessionStorage.getItem('departmentcode') || '' @@ -468,8 +620,11 @@ let price = 0 let tax = 0 - let lines = details.map(line => { - let _sql = `Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.free_tax_mark || ''}', '${line.vat_special_management || ''}', '${line.invoice_lp || ''}', '${line.uuid}'` + let lines = [] + details.forEach(line => { + if (!line.productcode) return + + let _sql = `Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.free_tax_mark || ''}', '${line.vat_special_management || ''}', '${line.invoice_lp || ''}', '${line.tax_item}', '${line.tax_method}', '${line.uuid}'` let data_type = 'add' price += line.amount_line * 100 @@ -485,7 +640,7 @@ }) } - return _sql + `, '${data_type}'` + lines.push(_sql + `, '${data_type}'`) }) let _total = (price - tax) / 100 @@ -494,7 +649,7 @@ if (options.length) { options.forEach(line => { - lines.push(`Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.free_tax_mark || ''}', '${line.vat_special_management || ''}', '${line.invoice_lp || ''}', '${line.uuid}', 'del'`) + lines.push(`Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.free_tax_mark || ''}', '${line.vat_special_management || ''}', '${line.invoice_lp || ''}', '${line.tax_item}', '${line.tax_method}', '${line.uuid}', 'del'`) }) } @@ -511,25 +666,31 @@ let sql = `/* 绯荤粺瀛楁 */ Declare @UserName nvarchar(50), @FullName nvarchar(50), @RoleID nvarchar(512), @mk_departmentcode nvarchar(512), @mk_organization nvarchar(512), @mk_user_type nvarchar(20), @mk_nation nvarchar(50), @mk_province nvarchar(50), @mk_city nvarchar(50), @mk_district nvarchar(50), @mk_address nvarchar(100), @ErrorCode nvarchar(50), @retmsg nvarchar(4000), @account_id nvarchar(50), @account_year_id nvarchar(50), @account_code nvarchar(50), @account_year_code nvarchar(50), @bid nvarchar(50), @tbid nvarchar(50) - Select @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @ErrorCode='', @retmsg='', @account_id='${book.account_id || ''}', @account_year_id='${book.account_year_id || ''}', @account_code='${book.account_code || ''}', @account_year_code='${book.account_year_code || ''}', @bid='' + Select @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @ErrorCode='', @retmsg='', @account_id='${book.account_id || ''}', @account_year_id='${book.account_year_id || ''}', @account_code='${book.account_code || ''}', @account_year_code='${book.account_year_code || ''}', @bid='${BID}' /* 鍙戠エ涓昏〃瀛楁 */ - Declare @invoice_type Nvarchar(50), @from_to_name Nvarchar(50), @from_to_tax_no Nvarchar(50), @from_to_addr Nvarchar(100), @from_to_tel Nvarchar(50), @from_to_bank_name Nvarchar(50), @from_to_account_no Nvarchar(50), @from_to_mob Nvarchar(50), @from_to_email Nvarchar(50), @from_to_code Nvarchar(50), @orgname Nvarchar(50), @tax_no Nvarchar(50), @addr Nvarchar(100), @tel Nvarchar(50), @bank_name Nvarchar(50), @account_no Nvarchar(50), @remark Nvarchar(512), @payee Nvarchar(50), @reviewer Nvarchar(50), @drawer Nvarchar(50), @io Nvarchar(50), @orgcode Nvarchar(50), @total_net_amount Decimal(18,2), @total_tax Decimal(18,2), @total_amount Decimal(18,2) + Declare @invoice_type Nvarchar(50), @from_to_name Nvarchar(50), @from_to_tax_no Nvarchar(50), @from_to_addr Nvarchar(100), @from_to_tel Nvarchar(50), @from_to_bank_name Nvarchar(50), @from_to_account_no Nvarchar(50), @from_to_mob Nvarchar(50), @from_to_email Nvarchar(50), @from_to_code Nvarchar(50), @orgname Nvarchar(50), @tax_no Nvarchar(50), @addr Nvarchar(100), @tel Nvarchar(50), @bank_name Nvarchar(50), @account_no Nvarchar(50), @remark Nvarchar(512), @payee Nvarchar(50), @reviewer Nvarchar(50), @drawer Nvarchar(50), @io Nvarchar(50), @orgcode Nvarchar(50), @total_net_amount Decimal(18,2), @total_tax Decimal(18,2), @total_amount Decimal(18,2), @business_type Nvarchar(20) - Select @invoice_type='${invoice_type}', @from_to_name='${from_to_name}', @from_to_tax_no='${from_to_tax_no}', @from_to_addr='${from_to_addr}', @from_to_tel='${from_to_tel}', @from_to_bank_name='${from_to_bank_name}', @from_to_account_no='${from_to_account_no}', @from_to_mob='${from_to_mob}', @from_to_email='${from_to_email}', @from_to_code='${from_to_code}', @orgname='${orgname}', @tax_no='${tax_no}', @addr='${addr}', @tel='${tel}', @bank_name='${bank_name}', @account_no='${account_no}', @remark='${remark}', @payee='${payee}', @reviewer='${reviewer}', @drawer='${drawer}', @io='${io}', @orgcode='${book.orgcode || ''}', @total_net_amount=${_total}, @total_tax=${tax}, @total_amount=${price} + Select @invoice_type='${invoice_type}', @from_to_name='${from_to_name}', @from_to_tax_no='${from_to_tax_no}', @from_to_addr='${from_to_addr}', @from_to_tel='${from_to_tel}', @from_to_bank_name='${from_to_bank_name}', @from_to_account_no='${from_to_account_no}', @from_to_mob='${from_to_mob}', @from_to_email='${from_to_email}', @from_to_code='${from_to_code}', @orgname='${orgname}', @tax_no='${tax_no}', @addr='${addr}', @tel='${tel}', @bank_name='${bank_name}', @account_no='${account_no}', @remark='${remark}', @payee='${payee}', @reviewer='${reviewer}', @drawer='${drawer}', @io='${io}', @orgcode='${book.orgcode || ''}', @total_net_amount=${_total}, @total_tax=${tax}, @total_amount=${price}, @business_type='${business_type || config.wrap.business_type || ''}' /* 鍙戠エ鏄庣粏涓存椂琛� */ - Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), free_tax_mark Nvarchar(50), vat_special_management Nvarchar(50), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50)) + Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), free_tax_mark Nvarchar(50), vat_special_management Nvarchar(50), invoice_lp Nvarchar(50), tax_item Nvarchar(50), tax_method Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50)) - Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, free_tax_mark, vat_special_management, invoice_lp, jskey, data_type) + Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, free_tax_mark, vat_special_management, invoice_lp, tax_item, tax_method, jskey, data_type) ${lines} /* 鑷畾涔夎剼鏈� */ ${_script} + ` - aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` + if (btn.type === 'billout') { + sql += `aaa: if @ErrorCode!='' + insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg, @UserID@` + } else { + sql += `aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` + } sql = sql.replace(/@ID@/ig, `'${ID}'`) sql = sql.replace(/@BID@/ig, `'${BID}'`) @@ -585,7 +746,7 @@ } if (!error) { - if (details.length === 0) { + if (details.length === 0 || details.filter(line => !!line.productcode).length === 0) { error = '璇锋坊鍔犳槑缁嗭紒' } else { details.forEach((line, index) => { @@ -596,8 +757,6 @@ } else if (!line.unitprice) { error = '鏄庣粏绗�' + (index + 1) + '琛岋紝璇疯緭鍏ュ崟浠凤紒' } - } else { - error = '鏄庣粏绗�' + (index + 1) + '琛岋紝璇烽�夋嫨璐х墿鎴栧簲绋庡姵鍔°�佹湇鍔″悕绉帮紒' } }) } @@ -609,6 +768,249 @@ resolve() } }) + } + + outPutBill = (res) => { + const { config } = this.state + + if (!res.data_invoice || !res.sellerName || !res.taxNo) { + notification.warning({ + top: 92, + message: '缂哄皯寮�绁ㄥ弬鏁帮紒', + duration: 5 + }) + this.setState({ + saveType: '' + }) + } + + let param = { + data: res.data_invoice, + sellerName: res.sellerName, + taxNo: res.taxNo + } + + let trans = { + e_general: '02', + e_special: '01' + } + + param.data.invoiceTypeCode = trans[param.data.invoiceTypeCode] || '' + + 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 = { + url: url, + method: 'post', + headers: { 'Content-Type': 'application/json' }, + data: param + } + + Api.directRequest(_params).then(result => { + result.mk_api_key = res.mk_api_key || '' + this.callBackBill(result) + }) + } + + callBackBill = (result) => { + const { config, BID, ID } = this.state + + let btn = config.billOutBtn + let lines = [] + let pre = '@' + + let getDefaultSql = (obj, tb, bid, level) => { + let keys = [] + let vals = [] + let subObjs = [] + let id = Utils.getuuid() + let tbName = pre + tb + + delete obj.$$key + + Object.keys(obj).forEach(key => { + let val = obj[key] + if (val === null || val === undefined) return + if (typeof(val) === 'object') { + if (Array.isArray(val)) { + val.forEach(item => { + if (typeof(item) !== 'object' || Array.isArray(item)) return + if (Object.keys(item).length > 0) { + item.$$key = tb + '_' + key + subObjs.push(item) + } + }) + } else if (Object.keys(val).length > 0) { + val.$$key = tb + '_' + key + subObjs.push(val) + } + } else { + if (typeof(val) === 'string') { + val = val.replace(/'/ig, '"') + } + keys.push('[' + key + ']') + vals.push(`'${val}'`) + } + }) + + keys = keys.join(',') + vals = vals.join(',') + + lines.push({ + table: md5(tb + keys), + insert: `Insert into ${tbName} (${keys ? keys + ',' : ''}[mk_level],[mk_id],[mk_bid])`, + select: `Select ${keys ? vals + ',' : ''}'${level}','${id}','${bid}'` + }) + + subObjs.forEach(item => { + getDefaultSql(item, item.$$key, id, level + 1) + }) + } + + getDefaultSql(result, btn.cbTable, '', 1) + + let lineMap = new Map() + lines.forEach(line => { + if (lineMap.has(line.table)) { + let _line = lineMap.get(line.table) + _line.selects.push(line.select) + lineMap.set(line.table, _line) + } else { + lineMap.set(line.table, { + table: line.table, + insert: line.insert, + selects: [line.select] + }) + } + }) + + let param = { + func: 'sPC_TableData_InUpDe', + BID: BID, + menuname: config.name + '(鍥炶皟)' + } + + let callbacksql = this.getBackSql() + let _prevCustomScript = `${callbacksql} + ` + let _backCustomScript = '' + + btn.cbScripts.forEach(script => { + if (script.status === 'false') return + + if (script.position === 'front') { + _prevCustomScript += ` + /* 鑷畾涔夎剼鏈� */ + ${script.sql} + ` + } else { + _backCustomScript += ` + /* 鑷畾涔夎剼鏈� */ + ${script.sql} + ` + } + }) + + _backCustomScript += ` + aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` + + let sql = [...lineMap.values()].map(item => (` + ${item.insert} + ${item.selects.join(` union all + `)} + `)) + sql = sql.join('') + sql = _prevCustomScript + sql + sql = sql + _backCustomScript + + sql = sql.replace(/@ID@/ig, `'${ID || ''}'`) + sql = sql.replace(/@BID@/ig, `'${BID || ''}'`) + sql = sql.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) + sql = sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) + sql = sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) + sql = sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) + sql = sql.replace(/@typename@/ig, `'admin'`) + + if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺 + sql = sql.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, `'Y'`) + } else { + sql = sql.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, `''`) + } + + if (window.GLOB.debugger === true) { + console.info('%c' + config.name + '(鍥炶皟)', 'color: blue') + console.info(sql.replace(/\n\s{8}/ig, '\n')) + } + + param.LText = sql + param.exec_type = window.GLOB.execType || 'y' // 鍚庡彴瑙g爜 + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt('', param.timestamp) + param.LText = Utils.formatOptions(param.LText, param.exec_type) + + if (window.GLOB.probation) { + param.s_debug_type = 'Y' + } + + Api.genericInterface(param).then(res => { + this.setState({ + saveType: '' + }) + if (res.status) { + if (config.billOutBtn.reTabId) { + MKEmitter.emit('reloadMenuView', config.billOutBtn.reTabId, 'table') + } + if (config.billOutBtn.syncComId) { + MKEmitter.emit('reloadData', config.billOutBtn.syncComId) + } + this.clearData() + + notification.success({ + top: 92, + message: '寮�绁ㄦ垚鍔熴��', + duration: 5 + }) + } else { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + }) + } + + getBackSql = () => { + const { book, BID } = this.state + + let userName = sessionStorage.getItem('User_Name') || '' + let fullName = sessionStorage.getItem('Full_Name') || '' + let RoleID = sessionStorage.getItem('role_id') || '' + let departmentcode = sessionStorage.getItem('departmentcode') || '' + let organization = sessionStorage.getItem('organization') || '' + let mk_user_type = sessionStorage.getItem('mk_user_type') || '' + let nation = sessionStorage.getItem('nation') || '' + let province = sessionStorage.getItem('province') || '' + let city = sessionStorage.getItem('city') || '' + let district = sessionStorage.getItem('district') || '' + let address = sessionStorage.getItem('address') || '' + + let sql = `/* 绯荤粺瀛楁 */ + Declare @UserName nvarchar(50), @FullName nvarchar(50), @RoleID nvarchar(512), @mk_departmentcode nvarchar(512), @mk_organization nvarchar(512), @mk_user_type nvarchar(20), @mk_nation nvarchar(50), @mk_province nvarchar(50), @mk_city nvarchar(50), @mk_district nvarchar(50), @mk_address nvarchar(100), @ErrorCode nvarchar(50), @retmsg nvarchar(4000), @account_id nvarchar(50), @account_year_id nvarchar(50), @account_code nvarchar(50), @account_year_code nvarchar(50), @bid nvarchar(50), @tbid nvarchar(50) + + Select @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @ErrorCode='', @retmsg='', @account_id='${book.account_id || ''}', @account_year_id='${book.account_year_id || ''}', @account_code='${book.account_code || ''}', @account_year_code='${book.account_year_code || ''}', @bid='${BID || ''}' + + ` + + return sql } changeBuyer = (item) => { @@ -626,16 +1028,138 @@ }) } - render() { - const { config, book, loading, invTypes, reqfields, saveType, date, 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 + addInvice = () => { + const { saveType } = this.state - if (!book || (config.wrap.datatype === 'dynamic' && !tax_no)) { + if (saveType) { + notification.warning({ + top: 92, + message: saveType === 'bill' ? '鍗曟嵁淇濆瓨涓紝璇风◢鍚庛��' : '寮�绁ㄤ腑锛岃绋嶅悗銆�', + duration: 3 + }) + return + } + + this.clearData() + + notification.success({ + top: 92, + message: '鍗曟嵁宸叉洿鏂般��', + duration: 3 + }) + } + + // jumpSys = () => { + // window.open(`${window.location.origin}/kgcs/thirdPlatFormLogin?userName=admin&taxCode=91120222MA07GMNW97&taxName=澶╂触鐣呬韩鏁板瓧绉戞妧鏈夐檺鍏徃`) + // } + + 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>鍙戠エ浠g爜锛歿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 ( @@ -647,11 +1171,14 @@ </div> : null } <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> </div> <div className="inv-header"> - {invoice_type ? <Select defaultValue={invoice_type} onChange={this.changeType} dropdownClassName="inv-type-select"> + {invoice_type ? <Select value={invoice_type} onChange={this.changeType} dropdownClassName="inv-type-select"> {invTypes.map(item => ( <Select.Option key={item.value} value={item.value}>{item.label}</Select.Option> ))} @@ -667,7 +1194,7 @@ <div className="inv-buyer"> <div className="inv-label">璐拱鏂�</div> <div className="inv-content"> - <Form.Item required={reqfields.includes('from_to_name')} label={<>鍚�<span></span>绉�</>} extra={<EllipsisOutlined onClick={() => this.setState({visible: true})}/>}> + <Form.Item className="mk-name" required={reqfields.includes('from_to_name')} label={<>鍚�<span></span>绉�</>} extra={<EllipsisOutlined onClick={() => this.setState({visible: true})}/>}> <Input placeholder="璇疯緭鍏ヨ喘涔版柟鍚嶇О" allowClear value={from_to_name} autoComplete="off" onChange={(e) => this.setState({from_to_name: e.target.value})}/> </Form.Item> <Form.Item required={reqfields.includes('from_to_tax_no')} label="绾崇◣浜鸿瘑鍒彿"> @@ -696,7 +1223,7 @@ </div> </div> <div className="inv-details"> - <InvoiceTable data={details} 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"> @@ -742,7 +1269,7 @@ <Modal title="瀹㈡埛淇℃伅" visible={visible} - width="70vw" + width="75vw" maskClosable={false} onCancel={() => { this.setState({ visible: false }) }} footer={null} -- Gitblit v1.8.0