销项发票模块源码

This commit is contained in:
lihao 2025-04-09 14:15:52 +08:00
parent a21cd0b3ad
commit 70ba74c6b9
34 changed files with 2007 additions and 65 deletions

View File

@ -0,0 +1,73 @@
/*29PhywYa6Smee2Xoz8l2SLeeYbdVm+mtmUdoIg8/sys=*/
import {toast, cardCache} from "nc-lightapp-front";
import { get } from "lodash"
let {getCacheById, updateCache} = cardCache;
import requestApi from '../requestApi'
import presetVar from '../presetVar'
export default function (callbackFunction) {
let pkBill = this.props.getUrlParam('id');
if (pkBill) {
let cardData = getCacheById(pkBill, presetVar.dataSource);
if (cardData) {
//控制单据编号
this.props.BillHeadInfo.setBillHeadInfoVisible({
showBillCode: true,
billCode: cardData.head[presetVar.formAreaId].rows[0].values['billno'].value || ''
});
this.props.form.setAllFormValue({[presetVar.formAreaId]: cardData.head[presetVar.formAreaId]});
cardData.body && cardData.body[presetVar.bodyAreaId] && this.props.cardTable.setTableData(presetVar.bodyAreaId, cardData.body[presetVar.bodyAreaId]);
} else {
// 取得表头数据
let formData = this.props.form.getAllFormValue(presetVar.formAreaId);
// 取得表体数据
let bodyData = this.props.cardTable.getAllData(presetVar.bodyAreaId);
// 组装用户数据
let userjson = {
pagecode: this.props.getSearchParam('p'),
pk_invoice: pkBill
}
requestApi.loadData({
data: userjson,
success: (data) => {
if (data && data.head) {
updateCache(presetVar.pkname, pkBill, data, presetVar.formAreaId, presetVar.dataSource);
// 设置表头数据
//控制单据编号
this.props.BillHeadInfo.setBillHeadInfoVisible({
showBillCode: true,
billCode: data.head.head.rows[0].values['billno'].value || ''
});
this.props.form.setAllFormValue(data.head);
// 设置表体数据
data.body && data.body[presetVar.tableAreaId] && this.props.cardTable.setTableData(presetVar.tableAreaId, data.body[presetVar.tableAreaId]);
data.grandSons && data.grandSons[presetVar.tspzBodyAreaId] && this.props.cardTable.setTableData(presetVar.tspzBodyAreaId, data.grandSons[presetVar.tspzBodyAreaId]);
let specialInvoiceIsShow = false;
// 发票类型为“数电票(增值税专用发票):31”或“数电票(普通发票):32”时且特殊票种为E04货物运输、E09旅客运输或征税方式为2差额开票/3全额开票时新扩展的表体行“特殊票种明细”可见。
let fplx = get(data,"head.head.rows[0].values.invoice_type.value","");//发票类型
let tspzCode=get(data,"head.head.rows[0].values.tspz.display","").split('/')[0];//特殊票种编码
let zsfs = get(data,"head.head.rows[0].values.zsfs.value","");//征税方式,枚举值:普通征税=0,差额征税=2,全额开票=3
if (
(fplx == "31" || fplx == "32") &&
(tspzCode === "E04" ||
tspzCode === "E09" ||
zsfs === "2" || zsfs === "3")
) {
specialInvoiceIsShow = true;
}
this.setState({
specialInvoiceIsShow,
});
} else {
toast({
color: 'danger',
content: this.multiLangJson[presetVar.mutiLangCodeDetail.viewBillError]
});
}
callbackFunction && callbackFunction.call(this, data);
}
})
}
}
}
/*29PhywYa6Smee2Xoz8l2SLeeYbdVm+mtmUdoIg8/sys=*/

View File

@ -0,0 +1,11 @@
/*PFX5kEidSR9Hnx7I97Aa2K3hLse+cuHnNwkFseo1mD4=*/
import presetVar from '../presetVar'
export default function () {
return {
[presetVar.tableBtns.Body_Edit]: {
actionCode: 'BodyCardEdit'
}
}
}
/*PFX5kEidSR9Hnx7I97Aa2K3hLse+cuHnNwkFseo1mD4=*/

View File

@ -0,0 +1,32 @@
/*JNnb7VnKIimhevxx9sWXRp2uqhnqWhEwsGPYQD2u3Ic=*/
import viewBill from '../common/viewBill'
import presetVar from '../presetVar'
export default function (props, id) {
this.props.setUrlParam({id: id});
viewBill.call(this, (data) => {
//按钮显示
//正常0 显示红冲作废
//红冲1 显示作废
//作废2 都不显示
if (data.head.head.rows[0].values.fpzt.value == 2) {
this.props.button.setButtonVisible([presetVar.headBtns.Invalid, presetVar.headBtns.RedRush], false);
} else if (data.head.head.rows[0].values.fpzt.value == 0) {
this.props.button.setButtonVisible([presetVar.headBtns.Invalid, presetVar.headBtns.RedRush], true);
} else if (data.head.head.rows[0].values.fpzt.value == 1) {
this.props.button.setButtonVisible([presetVar.headBtns.RedRush], false);
this.props.button.setButtonVisible([presetVar.headBtns.Invalid], true);
}
// 只支持 增值税电子普通发票=1,增值税电子专用发票=2,增值税电子普通发票(成品油)=8
// if (data.head.head.rows[0].values.invoice_type.value == 1 || data.head.head.rows[0].values.invoice_type.value == 2 || data.head.head.rows[0].values.invoice_type.value == 8) {
// this.props.button.setButtonVisible({
// [presetVar.headBtns.Download]: true
// });
// } else {
// this.props.button.setButtonVisible({
// [presetVar.headBtns.Download]: false
// });
// }
});
}
/*JNnb7VnKIimhevxx9sWXRp2uqhnqWhEwsGPYQD2u3Ic=*/

View File

@ -0,0 +1,100 @@
/*4prg4SsHcHRCMh7vQKzFQTJEXcpBkkWOyJFq1BdXVvk=*/
import {toast, formDownload} from 'nc-lightapp-front';
import presetVar from '../presetVar';
import requestApi from '../requestApi'
import linkinvoice from './linkinvoice'
import showListMessage from "../../../../invoiceApplication/invoiceApl/list/common/showListMessage";
/**
* 表头按钮事件
* @param {*} props
* @param {*} key 按钮KEY
*/
export default function (props, key) {
let formData = this.props.form.getAllFormValue(presetVar.formAreaId);
let arr = [];
arr.push({
'fpdm': formData.rows[0].values.fpdm.value,
'fphm': formData.rows[0].values.fphm.value,
'pk': formData.rows[0].values.pk_invoice.value,
'ts': formData.rows[0].values.ts.value
});
let sendData = {
data: arr
};
let pk = formData.rows[0].values.pk_invoice.value; //当前发票pk
let invoice_type = formData.rows[0].values.invoice_type.value; //当前发票pk
let redinfo = {rows:[{
values:{
fphm: {value:formData.rows[0].values.fphm.value},
fpdm: {value:formData.rows[0].values.fpdm.value},
jshj: {value:formData.rows[0].values.jshj.value},
pk: {value:formData.rows[0].values.pk_invoice.value},
ts: {value:formData.rows[0].values.ts.value},
invoice_type: {value:formData.rows[0].values.invoice_type.value,display:formData.rows[0].values.invoice_type.display},
hcyy:{value:''},
redinfo:{value:''}
}
}]}
switch (key) {
case presetVar.headBtns.RedRush :
this.props.modal.show('redinfomodal');
this.props.editTable.setTableData('redinfo', redinfo);
this.props.editTable.setStatus('redinfo', 'edit');
break;
case presetVar.headBtns.Invalid:
requestApi.Invalid({
data: sendData,
success: (data) => {
// if (data.msg && data.msg.indexOf('失败明细') == -1) {
// // toast({content: data.msg, color: 'success'});
// showListMessage.call(this, JSON.parse(data.userjson));
// } else {
// toast({content: data.msg, color: 'danger'});
showListMessage.call(this, JSON.parse(data.userjson));
// }
}
});
break;
case presetVar.headBtns.LinkInvoice:
linkinvoice.call(this);
break;
case presetVar.headBtns.LinkBill:
let formData = this.props.form.getAllFormValue(presetVar.formAreaId);
this.setState({
show: true,
linkBill: {
fphm: formData.rows[0].values.fphm.value,
fpdm: formData.rows[0].values.fpdm.value,
pk: formData.rows[0].values.pk_invoice.value
}
});
break;
case presetVar.headBtns.Download:
this.props.modal.show('LnvoiceDownloadTypeModal');
this.props.form.setFormStatus('LnvoiceDownloadType', 'edit');
// const params = {pk};
// requestApi.download({
// data: params,
// success: (res) => {
// formDownload({
// params,
// url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// enctype: 1
// });
// }
// })
break;
case presetVar.headBtns.LinkBusiBill:
// 联查单据
this.setState({
linkBusiBillModalShow: true,
LinkBusiBillQueryParams: {
pk_inovice: pk,
appcode: this.props.getSearchParam('c')
}
});
break;
}
}
/*4prg4SsHcHRCMh7vQKzFQTJEXcpBkkWOyJFq1BdXVvk=*/

View File

@ -0,0 +1,123 @@
/*pmFWCFu5nhKkBzYmrkBakW6TAzJpB+wJDv+WV4b5Sr8=*/
import {base, high, ajax, toast, getMultiLang} from 'nc-lightapp-front';
import 'ssccommon/components/globalPresetVar';
import presetVar from '../presetVar'
import {setTableExtendCol} from 'ssccommon/components/bill';
import viewBill from "../common/viewBill";
import bodyinnerBtnEvent from './bodyinnerBtnEvent'
export default function (props) {
let that = this;
/**
* 取得模板
*/
let createUIDomPromise = new Promise((resolve, reject) => {
props.createUIDom(
{},
(data) => {
resolve(data);
}
)
});
let createUIDomPromise2 = new Promise((resolve, reject) => {
props.createUIDom(
{pagecode:'105802KP_list'},
(data) => {
resolve(data);
}
)
});
this.getMultiLangPromise = new Promise((resolve, reject) => {
getMultiLang({
moduleId: presetVar.mutiLangCode,
domainName: presetVar.domainName,
currentLocale: presetVar.currentLocale,
callback: (json) => {
resolve(json);
}
});
});
Promise.all([createUIDomPromise, this.getMultiLangPromise, createUIDomPromise2]).then((resultList) => {
let data = resultList[0];
let json = resultList[1];
let data4T2 = resultList[2];
data.template.redinfo = data4T2.template.redinfo;
this.multiLangJson = json;
let button = data.button;
// 设置按钮模板
props.button.setButtons(button);
let meta = data.template;
// 设置表格扩展列
setTableExtendCol(props, meta, button, [{
width: '200px',
tableAreaId: presetVar.tableAreaId,
btnAreaId: presetVar.tableBtnAreaId,
onButtonClick: bodyinnerBtnEvent.bind(this),
buttonVisible: (record, index) => {
return bodyBtnEnabled(record);
}
}]);
// 判断模板中是否存在特殊票种明细表体区域
if(meta[presetVar.tspzBodyAreaId]){
// 平台逻辑为字段全部不显示,则表格区域不显示,不满足产品需求,故手动将该区域修改为显示
meta[presetVar.tspzBodyAreaId].areaVisible=true;
}
// 设置模版
props.meta.setMeta(meta);
viewBill.call(this, (data) => {
// 设置按钮显示隐藏
//正常0 显示红冲作废
//红冲1 显示作废
//作废2 都不显示
if (data.head.head.rows[0].values.fpzt.value == 1) {
this.props.button.setButtonVisible({
[presetVar.headBtns.Invalid]: true,
[presetVar.headBtns.RedRush]: false
});
} else if (data.head.head.rows[0].values.fpzt.value == 0) {
this.props.button.setButtonVisible({
[presetVar.headBtns.Invalid]: true,
[presetVar.headBtns.RedRush]: true
});
} else if (data.head.head.rows[0].values.fpzt.value == 2) {
this.props.button.setButtonVisible({
[presetVar.headBtns.Invalid]: false,
[presetVar.headBtns.RedRush]: false
});
}
// // 只支持 增值税电子普通发票=1,增值税电子专用发票=2,增值税电子普通发票(成品油)=8全电票(3132)矿产类发票116增值税电子普通发票、216增值税电子专用发票、316增值税普通发票、416增值税专用发票
// if (data.head.head.rows[0].values.invoice_type.value == 1 || data.head.head.rows[0].values.invoice_type.value == 2 ||
// data.head.head.rows[0].values.invoice_type.value == 8 || data.head.head.rows[0].values.invoice_type.value == 31 ||
// data.head.head.rows[0].values.invoice_type.value == 32 || data.head.head.rows[0].values.invoice_type.value == 116 ||
// data.head.head.rows[0].values.invoice_type.value == 216 || data.head.head.rows[0].values.invoice_type.value == 316 ||
// data.head.head.rows[0].values.invoice_type.value == 416 ) {
// this.props.button.setButtonVisible({
// [presetVar.headBtns.Download]: true
// });
// } else {
// this.props.button.setButtonVisible({
// [presetVar.headBtns.Download]: false
// });
// }
// 设置翻页器
this.props.cardPagination.setCardPaginationId({status: 1, id: this.props.getUrlParam('id')});
});
})
}
/**
* 列表按钮可用判断
* @param {*} record
*/
function bodyBtnEnabled(record) {
return [presetVar.tableBtns.Body_Edit]
}
/*pmFWCFu5nhKkBzYmrkBakW6TAzJpB+wJDv+WV4b5Sr8=*/

View File

@ -0,0 +1,16 @@
/*wkIeZP/f+8mx3/nHYiHB/wEqIKtCN3804nqhAXRXxdI=*/
import selfPresetVar from '../presetVar'
/**
* 联查发票
*/
export default function () {
this.invoiceComponent.setBillParams({
pkBill: this.props.getUrlParam('id'),
billType: selfPresetVar.LinkInvoiceBillType,//单据类型
tradeType:"",//销项发票中获取不到交易类型,此处传空,由后端处理
}, () => {
this.invoiceComponent.linkInvoice.show();
});
}
/*wkIeZP/f+8mx3/nHYiHB/wEqIKtCN3804nqhAXRXxdI=*/

View File

@ -0,0 +1,8 @@
#invoicecard {
.ivm-pagination--show {
display: block;
}
.ivm-pagination--hide {
display: none;
}
}

View File

@ -0,0 +1,369 @@
/*UFigk5STJwm8UdgGL1uB/XekbNt/WrTNa19WDhPxAaU=*/
import React, {
Component
} from "react";
import {
formDownload,
createPage,
getMultiLang,
base,
high,
createBillHeadInfo,
toast
} from "nc-lightapp-front";
import "./index.less";
import initTemplate from "./events/initTemplate.js";
import headBtnClick from "./events/headBtnClick";
import presetVar from './presetVar'
import InvoiceComponent from '../../../invoiceComponent/compoundComponent/component'
import LinkBill from '../../linkBill/list/index'
import handlePageInfoChange from "./events/handlePageInfoChange";
import LinkBillModal from 'ssccommon/components/linkbill/linkbillmodal/LinkBillModal';
import viewBill from './common/viewBill'
import { setForm, setCardTable, setEditTable } from 'ssccommon/utils/setComponentUsed';
import showListMessage from "../../../invoiceApplication/invoiceApl/list/common/showListMessage";
import listRequestApi from '../list/requestApi'
import requestApi from './requestApi'
import { replace, get } from "lodash";
const { NCRefreshBtn, NCAffix, NCDiv } = base;
const DATA_SOURCE = `SSCIVM.INVOICE.RECEIVE.DATASOURCE`;
class InvoiceSaleCard extends Component {
constructor(props) {
super(props);
this.state = {
multiLang: {}, // 多语对象
pageStatus: 'browse', //页面状态
approveDownBillId: '',
show: false, //联查开票情况弹框
linkBill: {}, //联查开票情况传递参数
linkBusiBillModalShow: false, // 联查单据显示控制标志
LinkBusiBillQueryParams: {}, // 联查单据传递参数
specialInvoiceIsShow:false,//特殊票种表体是否显示
};
this.invoiceComponent = new InvoiceComponent('Invoice');
//平台组件初始化
setCardTable(props, presetVar.tableAreaId);
setCardTable(props, presetVar.tspzBodyAreaId);
setForm(props, presetVar.formAreaId);
setForm(props, 'LnvoiceDownloadType');
setEditTable(props, 'redinfo'),
initTemplate.call(this, props);
}
//刷新按钮
handleClick = () => {
let multiLang = this.props.MutiInit.getIntl(1058); //this.moduleId
viewBill.call(this, () => {
// "1058-SP-0035": "刷新成功!",
toast({ content: multiLang && multiLang.get('1058-SP-0035'), color: 'success' });
})
}
//翻页事件
handlePageInfoChange = (...params) => {
handlePageInfoChange.call(this, ...params)
};
render() {
const { createBillHeadInfo } = this.props.BillHeadInfo;
const {
props: {
cardTable: { createCardTable },
form: { createForm, },
button: { createButtonApp, },
cardPagination: { createCardPagination },
},
handleClick,
handlePageInfoChange,
} = this
const scene = this.props.getUrlParam('scene');
let multiLang = this.props.MutiInit.getIntl(1058); //this.moduleId
return (
<div className="nc-bill-card" id="invoicecard">
<div className="nc-bill-top-area">
<NCAffix offsetTop={0}>
<NCDiv className="invoice-card--head" areaCode={NCDiv.config.HEADER}>
<div className="nc-bill-header-area">
<span className="header-title-search-area">
{/*"1058-FP-0001": "销项发票"*/}
{
createBillHeadInfo(
{
title: this.props.getSearchParam('n'), //标题
initShowBackBtn: scene == 'listTo' ? true : false,
backBtnClick: () => { //返回按钮的点击事件
this.props.pushTo("/list", { pagecode: presetVar.listPagecode })
}
}
)
}
</span>
<div className="header-button-area">
{createButtonApp({
area: presetVar.headAreaId,
onButtonClick: headBtnClick.bind(this)
})}
</div>
{/* NCRefreshBtn TODO */}
<NCRefreshBtn onClick={handleClick}></NCRefreshBtn>
{/* 翻页器 */}
<div className={scene == 'listTo' ? 'ivm-pagination--show' : 'ivm-pagination--hide'}>
{
createCardPagination({
handlePageInfoChange: handlePageInfoChange,
dataSource: DATA_SOURCE
})}
</div>
</div>
</NCDiv>
</NCAffix>
<div className="nc-bill-form-area">
{createForm(presetVar.formAreaId, {})}
</div>
</div>
<div className="nc-bill-bottom-area">
<div className='nc-bill-table-area'>
{createCardTable(presetVar.tableAreaId, {
showIndex: true,
adaptionHeight: true
})}
</div>
{/* 特殊票种明细表体 */}
{this.state.specialInvoiceIsShow && (
<div className="nc-bill-table-area">
{createCardTable(presetVar.tspzBodyAreaId, {
showIndex: true,
adaptionHeight: true,
})}
</div>
)}
</div>
{/* 联查发票组件 */}
{this.invoiceComponent.createComponent()}
{/*联查开票申请*/}
{this.state.show && <LinkBill
show={this.state.show}
linkBill={this.state.linkBill}
closeModalEve={() => {
this.setState({ show: false })
}}
></LinkBill>}
{/* 联查单据 */}
{this.state.linkBusiBillModalShow &&
<LinkBillModal
{...this.props}
modalTitle={multiLang && multiLang.get('1058-SP-0043')} // 联查单据
LinkBillModalAppCode="105802KP"
LinkBillModalPageCode="105802KP_LinkBill"
tableAreaId="bills"
tableRenderField="billno"
queryUrl="/nccloud/sscivm/ivsale/LinkBillAction.do"
queryParams={this.state.LinkBusiBillQueryParams}
onRowDoubleClick={(record, index) => {
listRequestApi.openbill({
data: {
openbillid: record.pk_bill.value,
tradetype: record.pk_tradetype.value
},
success: (data) => {
this.props.openTo(data.url, data.data);
}
})
}}
closeModalEve={() => {
this.setState({ linkBusiBillModalShow: false });
}}
/>}
{this.props.modal.createModal('redinfomodal', {
title: multiLang && multiLang.get('1058-invoice-0024'),
content: (
<div className="area-content">
{this.props.editTable.createEditTable('redinfo', {
showIndex: true,
adaptionHeight: false
})}
</div>
),
size: 'xlg',
beSureBtnClick: () => {
let rows = this.props.editTable.getAllRows('redinfo');
let toastMsgs=[];
// "refer-XX-0003": "序号{n}:发票号码为\"{a}\"且发票类型为\"{b}\"的\"{c}\"不能为空;"
// "refer-XX-0004": "红字信息单编号","refer-XX-0005": "红冲原因"
let mulTisp=multiLang && multiLang.get('refer-XX-0003');
rows.forEach((element,index) => {
let itemMulTisp=mulTisp;
if(['2','4','11','99'].some(ele=>{
return ele===element.values.invoice_type.value
})&&element.values.redinfo.value===''){
itemMulTisp=replace(itemMulTisp,'{n}',index+1);
itemMulTisp=replace(itemMulTisp,'{a}',get(element,"values.fphm.value",''));
itemMulTisp=replace(itemMulTisp,'{b}',get(element,"values.invoice_type.display",""));
itemMulTisp=replace(itemMulTisp,'{c}',multiLang && multiLang.get('refer-XX-0004')||'红字信息单编号');
}else if(['1','3','8','10','12'].some(ele=>{
return ele===element.values.invoice_type.value
})&&!element.values.hcyy.value){
itemMulTisp=replace(itemMulTisp,'{n}',index+1);
itemMulTisp=replace(itemMulTisp,'{a}',get(element,"values.fphm.value",""));
itemMulTisp=replace(itemMulTisp,'{b}',get(element,"values.invoice_type.display",""));
itemMulTisp=replace(itemMulTisp,'{c}',multiLang && multiLang.get('refer-XX-0005')||'红冲原因');
}else{
itemMulTisp='';
}
if(itemMulTisp!==''){
toastMsgs.push(itemMulTisp)
}
});
// 提示信息
// "1058-SQ-0006": "展开",
// "1058-SQ-0007": "收起",
// "1058-SQ-0008": "关闭",
// "refer-XX-0001": "明细",
// "refer-XX-0002": "部分数据不合规,请修改。",
if(toastMsgs.length){
return toast({
color: "danger",
groupOperation: true,
TextArr: [
multiLang && multiLang.get('1058-SQ-0006'),
multiLang && multiLang.get('1058-SQ-0007'),
multiLang && multiLang.get('1058-SQ-0008'),
],
content: multiLang && multiLang.get('refer-XX-0002'),
groupOperationMsg: toastMsgs,
});
}
let newdatas = rows.map((one) => {
return {
pk: one.values.pk.value,
ts: one.values.ts.value,
fphm: one.values.fphm.value,
fpdm: one.values.fpdm.value,
redinfo: one.values.redinfo && one.values.redinfo.value||'',
hcyy: one.values.hcyy && one.values.hcyy.value||'',
}
})
requestApi.RedRush({
data: {data: newdatas},
success: (data) => {
// if (data.msg && data.msg.indexOf('失败明细') == -1) {
// // toast({content: data.msg, color: 'success'});
// showListMessage.call(this, JSON.parse(data.userjson));
// } else {
// toast({content: data.msg, color: 'danger'});
showListMessage.call(this, JSON.parse(data.userjson));
// }
this.props.modal.close('redinfomodal');
}
});
},
cancelBtnClick: ()=>{
this.props.modal.close('redinfomodal');
},
userControl:true,
})}
{this.props.modal.createModal('LnvoiceDownloadTypeModal', {
title: '发票类型',
content: (
<div className="area-content">
<div className="nc-bill-form-area">
{createForm('LnvoiceDownloadType', {
onAfterEvent : this.onAfterEditForm,//表单编辑后事件
})}
</div>
</div>
),
size: '100',
beSureBtnClick: () => {
let formData = this.props.form.getAllFormValue(presetVar.formAreaId);
let formMap = this.props.form.getAllFormValue('LnvoiceDownloadType');
let pk = formData.rows[0].values.pk_invoice.value; //当前发票pk
let {pdf_type, xml_type, ofd_type} = formMap.rows[0].values
let invoiceType = pdf_type.value ? '1' : xml_type.value ? '2' : ofd_type.value ? '3' : '';
if (!invoiceType) {
return toast({
color: 'danger',
content: '请选择下载的文件类型'
})
}
let arrInvoiceTypes=[];
if(pdf_type.value){
arrInvoiceTypes.push('1');
invoiceType='1';
let params = {pk, invoiceType};
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
enctype: 1
});
}
if(xml_type.value){
arrInvoiceTypes.push('2');
invoiceType='2';
let params = {pk, invoiceType};
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
enctype: 1
});
}
if(ofd_type.value){
arrInvoiceTypes.push('3');
invoiceType='3';
let params = {pk, invoiceType};
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
enctype: 1
});
}
this.props.modal.close('LnvoiceDownloadTypeModal')
// let params = {pk, invoiceType};
// requestApi.download({
// data: params,
// success: (res) => {
// formDownload({
// params,
// url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// enctype: 1
// });
// }
// })
// formDownload({
// params,
// url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// // url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
// enctype: 1
// });
},
cancelBtnClick: () => {
this.props.modal.close('LnvoiceDownloadTypeModal')
},
userControl: true
})}
</div>
)
}
}
let InvoiceSaleCardDom = createPage({
mutiLangCode: '1058',
billinfo: {
billtype: 'card',
pagecode: '105802KP_card',
headcode: 'head',
bodycode: 'invoicebody',
},
})(InvoiceSaleCard);
export default InvoiceSaleCardDom;
/*UFigk5STJwm8UdgGL1uB/XekbNt/WrTNa19WDhPxAaU=*/

View File

@ -0,0 +1,48 @@
/*VYZh/ieLfoiunqL5CmpQqFo7O+k8nzrIZsNJltzpfDE=*/
import presetVarParent from '../../../public/common/presetVar'
export default {
...presetVarParent,
pagecode: '105802KP_card',
listPagecode: '105802KP_list',
formAreaId: 'head',
mutiLangCode: '1058',
moduleId: '1058',
domainName: 'sscivm',
currentLocale: 'simpchn',
headAreaId: 'header',
tableAreaId: 'invoicebody',
tableBtnAreaId: 'body',
tableBtns: {
/**
* 展开
*/
Body_Edit: 'Body_Edit'
},
headBtns: {
/**
* 红冲
*/
body_RedRush: 'body_RedRush',
/**
* 作废
*/
body_Invalid: 'body_Invalid',
/**
* 联查发票
*/
LinkInvoice: 'LinkInvoice',
RedRush: 'RedRush',
Invalid: 'Invalid',
Download: 'Download',
LinkBill: 'LinkBill',
/**
* 联查单据
*/
LinkBusiBill: 'LinkBusiBill'
},
LinkInvoiceBillType:'SSIV',//联查发票billType
/** 特殊票种表体区域编码 */
tspzBodyAreaId:'invoice_Tspz'
}
/*VYZh/ieLfoiunqL5CmpQqFo7O+k8nzrIZsNJltzpfDE=*/

View File

@ -0,0 +1,62 @@
/*Mq+ry/aXt/6nN0mNqW5qEOCuGEUiGEcOgTSebzVVuDg=*/
import {ajax} from 'nc-lightapp-front';
let requestApi = {
//初始化card数据
loadData: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/IVSaleCardQryAction.do',
data: opt.data,
success: (data) => {
data = data.data;
opt.success(data);
}
})
},
// 刷新
refresh: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/ApplicationQryAction.do',
data: opt.data,
success: (data) => {
data = data.data;
opt.success(data);
}
})
},
//红冲
RedRush: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/SaleInvoiceRedRushAction.do',
data: opt.data,
success: (data) => {
data = data.data;
opt.success(data);
}
})
},
//作废
Invalid: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/SaleInvoiceInvalidAction.do',
data: opt.data,
success: (data) => {
data = data.data;
opt.success(data);
}
})
},
//下载
download: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
data: opt.data,
success: (data) => {
data = data.data;
opt.success(data);
}
})
},
};
export default requestApi;
/*Mq+ry/aXt/6nN0mNqW5qEOCuGEUiGEcOgTSebzVVuDg=*/

View File

@ -0,0 +1,52 @@
/*ss7v63N3d4GC7jYsqbOM0ldGBNnWu4PifVYhhfl6Nqc=*/
import {toast} from "nc-lightapp-front"
import requestApi from '../requestApi'
import presetVar from '../presetVar'
export default function (props, searchVal, pageIndex, pageSize, scene) {
let pageInfo = this.props.table.getTablePageInfo(presetVar.tableAreaId);
pageInfo.pageIndex = pageIndex.toString();
pageInfo.pageSize = pageInfo.pageSize.toString();
let searchInfo = props.search.getQueryInfo(presetVar.searchAreaId);
let data = {
querycondition: this.searchVal,
pagecode: presetVar.pagecode,
areaid: presetVar.tableAreaId,
queryAreaCode: presetVar.searchAreaId,  //查询区编码
oid: (searchInfo || {}).oid || presetVar.queryOid,  //查询模板id
querytype: 'tree',
pageInfo: pageInfo
};
requestApi.queryData({
data: data,
success: (data) => {
let dataNum = data.pks ? data.pks.length : 0;
if (dataNum > 0) {
if (scene == 'refresh') {
this.pubMessage.refreshSuccess();
} else {
this.pubMessage.querySuccess(dataNum);
}
let pageData = {
...data[presetVar.tableAreaId][presetVar.tableAreaId],
allpks: data.pks,
alltss: data.ts,
pageInfo: {
...pageInfo,
total: dataNum,
totalPage: Math.ceil(dataNum / pageInfo.pageSize).toString(),
}
}
props.table.setAllTableData(presetVar.tableAreaId, pageData);
} else {
toast({color: 'warning', content: this.multiLangJson[presetVar.mutiLangCodeDetail.queryNoData]});
props.table.setAllTableData(presetVar.tableAreaId, {rows: []});
}
// props.button.setButtonDisabled([presetVar.headBtns.RedRush, presetVar.headBtns.Invalid, presetVar.headBtns.Download], true);
// 更新按钮状态
this.onSelected.call(this);
}
})
}
/*ss7v63N3d4GC7jYsqbOM0ldGBNnWu4PifVYhhfl6Nqc=*/

View File

@ -0,0 +1,36 @@
/*JcqPaQna8Ia7w+G9n+w0DFWjspVEDM20+HMpPQMYUTI=*/
import { requestPromise } from 'ssccommon/utils/asyncFunctions.js';
import presetVar from '../presetVar'
/**
* 根据pks铲鲟数据
* @param {*} data
*/
async function queryDataByPks(data) {
try {
const result = await requestPromise({
url: `/nccloud/sscivm/ivsale/IVSaleListQryAction.do`,
data,
});
return result
} catch (e) {
toast({ title: e.message, duration: 5, color: 'danger', })
}
}
export default async function (pks) {
let sendData = {
pagecode: presetVar.pagecode,
areaid: presetVar.tableAreaId,
pks,
};
let data = await queryDataByPks(sendData);
if (data) {
return data;
} else {
toast({ color: 'warning', content: this.multiLangJson[presetVar.mutiLangCodeDetail.queryNoData] });
return null;
}
}
/*JcqPaQna8Ia7w+G9n+w0DFWjspVEDM20+HMpPQMYUTI=*/

View File

@ -0,0 +1,17 @@
/*m8B93TCdFd8qlmmtcAONoDmJvPJyYp0eyNtfZP4NixE=*/
import presetVar from '../presetVar'
export default function (data) {
if (data[presetVar.tableAreaId]) {
let rowIdMap = {};
let tableData = this.props.table.getAllTableData(presetVar.tableAreaId);
tableData.rows.forEach(one => {
rowIdMap[one.values[presetVar.pkname].value] = one.rowId;
});
data[presetVar.tableAreaId][presetVar.tableAreaId].rows.forEach(one => {
one.rowId = rowIdMap[one.values[presetVar.pkname].value];
});
this.props.table.updateTableData(presetVar.tableAreaId, data[presetVar.tableAreaId][presetVar.tableAreaId]);
}
}
/*m8B93TCdFd8qlmmtcAONoDmJvPJyYp0eyNtfZP4NixE=*/

View File

@ -0,0 +1,94 @@
/*5Sewzsgb8H4wZEbgmC08glOakf82gL82KPgXhgql5QY=*/
import { toast, formDownload, } from 'nc-lightapp-front';
import queryDataByPks from '../common/queryDataByPks'
import presetVar from '../presetVar';
import requestApi from '../requestApi'
export default async function () {
let multiLang = this.props.MutiInit.getIntl(1058); //this.moduleId
let tableData = this.props.table.getCheckedRows(presetVar.tableAreaId);
let eInvoiceArr = []; //电子发票
let sInvoiceArr = []; //普通发票s
let hasPageChange = false;
let pks = tableData.map((one)=>{
if(one.data.values) {
return one.data.values.pk_invoice.value;
}else{
hasPageChange = true;
return one.data.pk;
}
})
if (hasPageChange) {
// 如果选择得是后页数据,需要从数据库重新查询数据
let data = await queryDataByPks(pks);
if (data.data && data.data[presetVar.tableAreaId] && data.data[presetVar.tableAreaId][presetVar.tableAreaId] && data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows && data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows.length > 0) {
tableData = data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows.map((one)=>{
return {
data: one
}
})
}
}
tableData.map((item) => {
// 只支持 增值税电子普通发票=1,增值税电子专用发票=2,增值税电子普通发票(成品油)=8全电票(3132)矿产类发票116增值税电子普通发票、216增值税电子专用发票、316增值税普通发票、416增值税专用发票
if (
item.data.values.invoice_type.value == 1 ||
item.data.values.invoice_type.value == 2 || item.data.values.invoice_type.value == 8 ||
item.data.values.invoice_type.value == 31 || item.data.values.invoice_type.value == 32 ||
item.data.values.invoice_type.value == 116 || item.data.values.invoice_type.value == 216 ||
item.data.values.invoice_type.value == 316 || item.data.values.invoice_type.value == 416 ) {
eInvoiceArr.push({
pk: item.data.values.pk_invoice.value,
type: item.data.values.invoice_type.value
})
} else {
sInvoiceArr.push({
fphm: item.data.values.fphm.value,
fpdm: item.data.values.fpdm.value
})
}
});
if (eInvoiceArr.length > 0) {
eInvoiceArr.forEach((item, index) => {
// 只支持 增值税电子普通发票=1,增值税电子专用发票=2,增值税电子普通发票(成品油)=8,全电票(3132)矿产类发票116增值税电子普通发票、216增值税电子专用发票、316增值税普通发票、416增值税专用发票
if (item.type == 1 ||
item.type == 2 || item.type == 8 ||
item.type == 31 || item.type == 32 ||
item.type == 116 || item.type == 216 ||
item.type == 316 || item.type == 416 ) {
const params = item;
requestApi.download({
data: params,
success: (res) => {
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
enctype: 1
});
}
})
}
})
// 清除勾选状态
this.props.table.selectAllRows(presetVar.tableAreaId, false);
// 更新按钮状态
this.onSelected.call(this);
}
if (sInvoiceArr.length > 0) {
let hmArr = [];
let dmArr = [];
sInvoiceArr.forEach((item) => {
hmArr.push(item.fphm);
dmArr.push(item.fpdm)
});
// "1058-FP-0005": "本次共下载",
// "1058-FP-0006": "张发票,",
// "1058-FP-0007": "张非电票未能下载。未下载明细:发票号码:",
// "1058-FP-0008": "发票代码:",
toast({
content: (multiLang && multiLang.get('1058-FP-0005')) + eInvoiceArr.length + (multiLang && multiLang.get('1058-FP-0006')) + sInvoiceArr.length + (multiLang && multiLang.get('1058-FP-0007')) + hmArr.join() + (multiLang && multiLang.get('1058-FP-0008')) + dmArr.join(),
color: 'danger'
})
}
}
/*5Sewzsgb8H4wZEbgmC08glOakf82gL82KPgXhgql5QY=*/

View File

@ -0,0 +1,58 @@
/*iJZETWydRmfD8GcyN7tU3027MMbMhRuXNnqDSW3mvN0=*/
import {toast} from "nc-lightapp-front"
import requestApi from '../requestApi'
import presetVar from '../presetVar'
import updataListData from "../common/updataListData";
import showListMessage from "../../../../invoiceApplication/invoiceApl/list/common/showListMessage";
export default function (data) {
let multiLang = this.props.MutiInit.getIntl(1058); //this.moduleId
let CheckedRows = this.props.table.getCheckedRows(presetVar.tableAreaId);
let arr = [];
if (data) {
arr.push(data)
} else {
if (CheckedRows.length > 0) {
CheckedRows.forEach((CheckedRows) => {
arr.push({
pk: CheckedRows.data.values && CheckedRows.data.values.pk_invoice.value || CheckedRows.data.pk,
ts: CheckedRows.data.values && CheckedRows.data.values.ts.value || CheckedRows.data.ts,
});
});
}
}
let sendData = {
data: arr
}
if (CheckedRows) {
requestApi.Invalid({
data: sendData,
success: (data) => {
if (data) {
// 更新页面数据
updataListData.call(this, data);
// 更新按钮状态
this.onSelected.call(this);
// 失败不清除勾选状态
if (data.userjson && data.userjson.failData) {
let tableData = this.props.table.getAllTableData(presetVar.tableAreaId);
JSON.parse(data.userjson).failData.map((one) => {
tableData.rows.map((currentValue, index) => {
if (currentValue.values.fpdm.value == one.fpdm) {
this.props.table.selectTableRows(presetVar.tableAreaId, index, true);
}
})
})
}
showListMessage.call(this, JSON.parse(data.userjson));
}
}
})
} else {
// "1058-FP-0002": "请选择要作废的发票",
toast({content: multiLang && multiLang.get('1058-FP-0002'), color: 'warning'});
}
}
/*iJZETWydRmfD8GcyN7tU3027MMbMhRuXNnqDSW3mvN0=*/

View File

@ -0,0 +1,109 @@
/*Khh89dHQlUVkuhmWu2d317GC9qs+ZmXFCj3NbKTVe2w=*/
import {toast} from "nc-lightapp-front"
import requestApi from '../requestApi'
import presetVar from '../presetVar'
import updataListData from "../common/updataListData";
import queryDataByPks from '../common/queryDataByPks'
import showListMessage from "../../../../invoiceApplication/invoiceApl/list/common/showListMessage";
export default async function (data, flag) {
let multiLang = this.props.MutiInit.getIntl(1058); //this.moduleId
let arr = [];
let needRedInfo = [];
if (data && flag) {
arr=data
}else if(data){
arr.push(data)
} else {
let CheckedRows = this.props.table.getCheckedRows(presetVar.tableAreaId);
if (CheckedRows.length > 0) {
let hasPageChange = false;
let pks = CheckedRows.map((one)=>{
if(one.data.values) {
return one.data.values.pk_invoice.value;
}else{
hasPageChange = true;
return one.data.pk;
}
})
if (hasPageChange) {
// 如果选择得是后页数据,需要从数据库重新查询数据
let data = await queryDataByPks(pks);
if (data.data && data.data[presetVar.tableAreaId] && data.data[presetVar.tableAreaId][presetVar.tableAreaId] && data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows && data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows.length > 0) {
CheckedRows = data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows.map((one)=>{
return {
data: one
}
})
}
}
this.noRedInfo=[];
CheckedRows.forEach((CheckedRows) => {
if(CheckedRows.data.values.fpzt.value == 0 && CheckedRows.data.values.jshj.value >= 0){
needRedInfo.push({
values: {
fphm: { value: CheckedRows.data.values.fphm.value },
fpdm: { value: CheckedRows.data.values.fpdm.value },
jshj: { value: CheckedRows.data.values.jshj.value },
pk: { value: CheckedRows.data.values.pk_invoice.value },
ts: { value: CheckedRows.data.values.ts.value },
invoice_type: {
value: CheckedRows.data.values.invoice_type.value,
display:CheckedRows.data.values.invoice_type.display
},
hcyy:{value:''}
},
});
}else{
this.noRedInfo.push({
pk: CheckedRows.data.values && CheckedRows.data.values.pk_invoice.value || CheckedRows.data.pk,
ts: CheckedRows.data.values && CheckedRows.data.values.ts.value || CheckedRows.data.ts,
})
}
arr.push({
pk: CheckedRows.data.values && CheckedRows.data.values.pk_invoice.value || CheckedRows.data.pk,
ts: CheckedRows.data.values && CheckedRows.data.values.ts.value || CheckedRows.data.ts
});
});
}
}
let sendData = {
data: arr
};
if(needRedInfo.length>0){
this.props.modal.show('redinfomodal');
this.props.editTable.setTableData('redinfo', {rows:needRedInfo});
this.props.editTable.setStatus('redinfo', 'edit');
return;
}
if (arr.length>0) {
requestApi.RedRush({
data: sendData,
success: (data) => {
if (data) {
// 更新页面数据
updataListData.call(this, data);
// 更新按钮状态
this.onSelected.call(this);
// 失败不清除勾选状态
if (data.userjson && data.userjson.failData) {
let tableData = this.props.table.getAllTableData(presetVar.tableAreaId);
JSON.parse(data.userjson).failData.map((one) => {
tableData.rows.map((currentValue, index) => {
if (currentValue.values.fpdm.value == one.fpdm) {
this.props.table.selectTableRows(presetVar.tableAreaId, index, true);
}
})
})
}
showListMessage.call(this, JSON.parse(data.userjson));
}
}
})
} else {
// "1058-FP-0003": "请选择要红冲的发票",
toast({content: multiLang && multiLang.get('1058-FP-0003'), color: 'warning'});
}
}
/*Khh89dHQlUVkuhmWu2d317GC9qs+ZmXFCj3NbKTVe2w=*/

View File

@ -0,0 +1,23 @@
/*JNnb7VnKIimhevxx9sWXRp2uqhnqWhEwsGPYQD2u3Ic=*/
import presetVar from '../presetVar'
import requestApi from '../requestApi'
import {toast} from 'nc-lightapp-front';
export default function (props, config, pks) {
let sendData = {
pagecode: presetVar.pagecode,
areaid: presetVar.tableAreaId,
pks: pks
};
requestApi.changePage({
data: sendData,
success: (data) => {
if (data) {
props.table.setAllTableData(presetVar.tableAreaId, data[presetVar.tableAreaId][presetVar.tableAreaId]);
} else {
toast({color: 'warning', content: this.multiLangJson[presetVar.mutiLangCodeDetail.queryNoData]});
}
}
});
}
/*JNnb7VnKIimhevxx9sWXRp2uqhnqWhEwsGPYQD2u3Ic=*/

View File

@ -0,0 +1,125 @@
/*pmFWCFu5nhKkBzYmrkBakW6TAzJpB+wJDv+WV4b5Sr8=*/
import {base, high, ajax, toast, getMultiLang, getBusinessInfo} from 'nc-lightapp-front';
import 'ssccommon/components/globalPresetVar';
import presetVar from '../presetVar'
import {setTableExtendCol} from 'ssccommon/components/profile'
import onRowDoubleClick from "./onRowDoubleClick";
import tableButtonEvent from './tableButtonEvent'
export default function (props) {
let that = this;
/**
* 取得模板
*/
let createUIDomPromise = new Promise((resolve, reject) => {
props.createUIDom(
{},
(data) => {
resolve(data);
}
)
})
// 多语
this.getMultiLangPromise = new Promise((resolve, reject) => {
getMultiLang({
moduleId: presetVar.mutiLangCode,
domainName: presetVar.domainName,
currentLocale: presetVar.currentLocale,
callback: (json) => {
resolve(json);
}
});
})
Promise.all([createUIDomPromise, this.getMultiLangPromise]).then((resultList) => {
let data = resultList[0];
let json = resultList[1];
this.multiLangJson = json;
let button = data.button;
// 设置按钮模板
props.button.setButtons(button);
//设置按钮的初始可用性
props.button.setButtonDisabled([presetVar.headBtns.RedRush, presetVar.headBtns.Invalid, presetVar.headBtns.Download, presetVar.headBtns.LinkBill, presetVar.headBtns.linkinvoice, presetVar.headBtns.LinkBusiBill], true);
let meta = data.template;
meta[presetVar.searchAreaId].items.forEach(ele => {
if (ele.attrcode === 'invoice_type') {
const codes = ['15', '16', '17', '18', '19', '20', '21',]
ele.options = ele.options.filter(each => !codes.includes(each.value))
}else if(ele.attrcode == 'pk_org') {
ele.queryCondition = () => {
return {
pk_group: (getBusinessInfo() || {}).groupId,
TreeRefActionExt: 'nccloud.web.sscivm.ivrec.ref.sqlbuilder.FinanceOrgRefSqlBuilder',
DataPowerOperationCode: 'fi',
isDataPowerEnable: 'Y',
appcode: props.getSearchParam('c')
};
};
}
})
// 页面标题
// that.setState({pageTitle: that.props.getSearchParam('n')});
// 设置列表支持翻页
meta[presetVar.tableAreaId].pagination = true;
//设置表格的扩展按钮列
setTableExtendCol(props, data.template, [{
width: '200px',
areaId: presetVar.tableAreaId,
btnAreaId: presetVar.tableBtnAreaId,
buttonVisible: (record, index) => {
return bodyBtnEnabled(record);
},
onButtonClick: tableButtonEvent.bind(that)
}]);
// 发票号列自定义
props.table.setTableRender(presetVar.tableAreaId, "fphm", (text, record, index) => {
return (<a className="fphm" style={{cursor: 'pointer'}}
onClick={() => {
onRowDoubleClick.call(that, record, index, props);
}}> {record.fphm.value} </ a>
)
})
// props.meta.setMeta(meta);
//设置默认时间和组织
if ((this.props.search.getAllSearchData(presetVar.searchAreaId, false).conditions || []).length == 0) {
if (data.context.pk_org) {
this.props.search.setSearchValByField(presetVar.searchAreaId, 'pk_org', {
value: data.context.pk_org,
display: data.context.org_Name
});
}
this.props.search.setSearchValByField(presetVar.searchAreaId, 'kprq', {value: ['#month(0)#', '#month(0)#']});
}
})
}
/**
* 列表按钮可用判断
* @param {*} record
*/
//正常0 显示红冲作废
//红冲1 显示作废
//作废2 都不显示
function bodyBtnEnabled(record) {
if (record.fpzt.value == 1) {
return [presetVar.tableBtns.body_Invalid]
} else if (record.fpzt.value == 0) {
if (record.red_flag.value === '1') {
return [presetVar.tableBtns.body_Invalid,]
} else {
return [
presetVar.tableBtns.body_RedRush,
presetVar.tableBtns.body_Invalid,
]
}
} else if (record.fpzt.value == 2) {
return []
}
}
/*pmFWCFu5nhKkBzYmrkBakW6TAzJpB+wJDv+WV4b5Sr8=*/

View File

@ -0,0 +1,11 @@
/*s+bAmh19O1OWrgiuPwXSstGgSjMjFLS595hansunioE=*/
import queryData from '../common/queryData'
export default function (props, searchVal, scene) {
if (searchVal && JSON.stringify(searchVal) != "{}") {
this.searchVal = searchVal;
queryData.call(this, props, searchVal, 0, 10, scene);
}
}
/*s+bAmh19O1OWrgiuPwXSstGgSjMjFLS595hansunioE=*/

View File

@ -0,0 +1,29 @@
/*wkIeZP/f+8mx3/nHYiHB/wEqIKtCN3804nqhAXRXxdI=*/
import queryDataByPks from '../common/queryDataByPks'
import presetVar from '../presetVar'
/**
* 联查发票
*/
export default async function () {
let checked = this.props.table.getCheckedRows(presetVar.tableAreaId);
let values = {};
if(checked[0].data.values){
values = checked[0].data.values
}else{
// 如果选择得是后页数据,需要从数据库重新查询数据
let data = await queryDataByPks([checked[0].data.pk]);
if(data.data && data.data[presetVar.tableAreaId] && data.data[presetVar.tableAreaId][presetVar.tableAreaId] && data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows && data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows.length > 0){
values = data.data[presetVar.tableAreaId][presetVar.tableAreaId].rows[0].values;
}
}
this.invoiceComponent.setBillParams({
pkBill: values[presetVar.pkname].value,
billType: presetVar.LinkInvoiceBillType,//单据类型
tradeType:"",//销项发票中获取不到交易类型,此处传空,由后端处理
}, () => {
this.invoiceComponent.linkInvoice.show();
});
}
/*wkIeZP/f+8mx3/nHYiHB/wEqIKtCN3804nqhAXRXxdI=*/

View File

@ -0,0 +1,15 @@
/*xbBNZdDFBeHR0NxHIc8oECyrN49bDHrrIZosDMc0bAs=*/
import presetVar from '../presetVar'
export default function (record, index, props) {
// 打开单据页面
this.props.pushTo("/card", {
status: presetVar.status.browse,
pagecode: presetVar.cardPagecode,
id: record[presetVar.pkname].value,
tradetype: record[presetVar.billtypecode].value,
scene: 'listTo',
billcode: record.billno.value
})
}
/*xbBNZdDFBeHR0NxHIc8oECyrN49bDHrrIZosDMc0bAs=*/

View File

@ -0,0 +1,9 @@
/*upBNcA9hDYBunI8fe4SwjEWttezceFcoGTDyYpyXW6I=*/
import ivmSearchBtnClick from './ivmSearchBtnClick'
import presetVar from "../presetVar";
export default function (props, searchVal) {
searchVal = this.props.search.getAllSearchData(presetVar.searchAreaId);
ivmSearchBtnClick.call(this, props, searchVal, 'refresh');
}
/*upBNcA9hDYBunI8fe4SwjEWttezceFcoGTDyYpyXW6I=*/

View File

@ -0,0 +1,42 @@
/*2m/SN66JmdiWgHtRCBPRtNdar5Kd56DoEKmbsEF48C4=*/
import presetVar from '../presetVar'
import redrush from './RedRush'
import invalid from './Invalid'
export default function () {
return {
// 红冲
[presetVar.tableBtns.body_RedRush]: {
click: (btnKey, record, index) => {
this.noRedInfo=[];
this.props.modal.show('redinfomodal');
this.props.editTable.setTableData('redinfo', {
rows:[{
values:{
fphm: {value:record.fphm.value},
fpdm: {value:record.fpdm.value},
jshj: {value:record.jshj.value},
pk: {value:record.pk_invoice.value},
ts: {value:record.ts.value},
invoice_type: {value:record.invoice_type.value,display:record.invoice_type.display},
redinfo:{value:''},
hcyy:{value:''}
}
}]
});
this.props.editTable.setStatus('redinfo', 'edit');
}
},
// 作废
[presetVar.tableBtns.body_Invalid]: {
click: (btnKey, record, index) => {
let data = {
'pk': record.pk_invoice.value,
'ts': record.ts.value,
};
invalid.call(this, data);
}
}
}
}
/*2m/SN66JmdiWgHtRCBPRtNdar5Kd56DoEKmbsEF48C4=*/

View File

@ -0,0 +1,7 @@
#invoice-sale-list{
.ivm-searcharea{
background: #fff;
padding-left: 20px;
padding-bottom: 5px;
}
}

View File

@ -0,0 +1,389 @@
/*XqV/awHDdJTpxRspYcyLqVDeDCgh8D0u/n5Pb+9JsHE=*/
import React, {
Component
} from "react";
import {
formDownload,
createPage,
getMultiLang,
base,
toast
} from "nc-lightapp-front";
import "./index.less";
import initTemplate from "./events/initTemplate.js";
import handlePageInfoChange from './events/handlePageInfoChange';
import ivmSearchBtnClick from './events/ivmSearchBtnClick';
import onRowDoubleClick from './events/onRowDoubleClick';
import RedRush from './events/RedRush';
import Invalid from './events/Invalid';
import refresh from './events/refresh';
import Download from './events/Download';
import linkinvoice from './events/linkinvoice'
import BillListStyle from 'ssccommon/components/bill-list';
import presetVar from './presetVar'
import LinkBill from '../../linkBill/list/index'
import PubMessage from 'ssccommon/utils/pubMessage';
import InvoiceComponent from '../../../invoiceComponent/compoundComponent/component'
import LinkBillModal from 'ssccommon/components/linkbill/linkbillmodal/LinkBillModal';
import { setSearch, setTable, setEditTable,setForm } from 'ssccommon/utils/setComponentUsed';
import requestApi from "./requestApi";
import { replace, get } from "lodash";
import LinkSituation from '../../../invoiceApplication/linkSituation/list/linkSituation.js'
const DATA_SOURCE = `SSCIVM.INVOICE.RECEIVE.DATASOURCE`;
class InvoiceSale extends Component {
constructor(props) {
super(props);
this.state = {
multiLang: {}, // 多语对象
pageStatus: 'browse', // 页面状态
pageTitle: "", //页面标题
show: false, //联查开票情况弹框
linkBusiBillModalShow: false, //联查单据弹框
LinkBusiBillQueryParams: {} // 联查单据查询条件
};
this.searchVal = {}; //查询缓存
this.linkBill = {}; //联查开票情况传递参数
this.invoiceComponent = new InvoiceComponent('Invoice');
this.pubMessage = new PubMessage();
//平台组件初始化
setTable(props, presetVar.tableAreaId),
setSearch(props, presetVar.searchAreaId),
setEditTable(props, 'redinfo'),
setForm(props,'LnvoiceDownloadType')
initTemplate.call(this, props);
}
// 头部按钮组事件分发
headerBtnEventDistribute = () => ({
[presetVar.headBtns.RedRush]: () => {
RedRush.call(this);
}, // 红冲
[presetVar.headBtns.Invalid]: () => {
Invalid.call(this);
}, // 作废
[presetVar.headBtns.Download]: () => {
this.props.modal.show('LnvoiceDownloadTypeModal');
this.props.form.setFormStatus('LnvoiceDownloadType', 'edit');
// Download.call(this);
}, // 下载
[presetVar.headBtns.LinkBill]: () => {
this.setState({ show: true });
}, // 联查开票申请
[presetVar.headBtns.linkinvoice]: () => {
linkinvoice.call(this);
}, // 联查关联发票
[presetVar.headBtns.LinkBusiBill]: () => {
let checked = this.props.table.getCheckedRows(presetVar.tableAreaId);
let pk = checked[0].data.values && checked[0].data.values[presetVar.pkname].value || checked[0].data.pk;
this.setState({
linkBusiBillModalShow: true,
LinkBusiBillQueryParams: {
pk_inovice: pk,
appcode: this.props.getSearchParam('c')
}
});
}, // 联查单据
});
//头部刷新事件
refreshButtonEvent = () => {
refresh.call(this, this.props, this.searchVal)
};
// 查询区查询按钮点击
ivmSearchBtnClick = (...params) => {
ivmSearchBtnClick.call(this, ...params)
};
//表格行双击事件
onRowDoubleClick = (...params) => {
onRowDoubleClick.call(this, ...params);
};
//翻页器事件
handlePageInfoChange = (...params) => {
handlePageInfoChange.call(this, ...params);
};
//单选事件
onSelected = (props, moduleId, status, index, isSelect) => {//单选第五个参数为是否选中true/false
let checked = this.props.table.getCheckedRows(presetVar.tableAreaId);
if (checked && checked.length > 0) {
if (checked[0].data && checked[0].data.values) {
this.linkBill = {
fphm: checked[0].data.values.fphm.value,
fpdm: checked[0].data.values.fpdm.value,
pk: checked[0].data.values.pk_invoice.value
};
} else {
this.linkBill = {
fphm: '',
fpdm: '',
pk: checked[0].data ? checked[0].data.pk : '',
};
}
this.props.button.setButtonDisabled([presetVar.headBtns.RedRush, presetVar.headBtns.Invalid, presetVar.headBtns.Download, presetVar.headBtns.LinkBill, presetVar.headBtns.linkinvoice, presetVar.headBtns.LinkBusiBill], false);
} else {
this.props.button.setButtonDisabled([presetVar.headBtns.RedRush, presetVar.headBtns.Invalid, presetVar.headBtns.Download, presetVar.headBtns.LinkBill, presetVar.headBtns.linkinvoice, presetVar.headBtns.LinkBusiBill], true);
}
};
// 缓存数据赋值成功的钩子函数
componentInitFinished = () => {setTimeout(()=>{this.onSelected()},500)}
render() {
const {
props: {
search: { NCCreateSearch, },
table: { createSimpleTable, },
form: {createForm,},
},
headerBtnEventDistribute,
ivmSearchBtnClick,
refreshButtonEvent,
onRowDoubleClick,
handlePageInfoChange,
onSelected,
componentInitFinished,
} = this;
let multiLang = this.props.MutiInit.getIntl(1058);
return (
<BillListStyle
id='invoice-sale-list'
{...this.props}
>
{/*"1058-FP-0001": "销项发票"*/}
<BillListStyle.HeadArea
title={this.props.getSearchParam('n')}
refreshButtonEvent={refreshButtonEvent}
status={this.state.pageStatus}
>
{/* 头部按钮组 */}
<BillListStyle.ButtonGroup
area={presetVar.headBtnAreaId}
buttonEvent={headerBtnEventDistribute}
/>
</BillListStyle.HeadArea>
{/* 查询区 */}
<BillListStyle.SearchArea>
{NCCreateSearch(presetVar.searchAreaId, {
clickSearchBtn: ivmSearchBtnClick,
})}
</BillListStyle.SearchArea>
<BillListStyle.BodyArea>
{/* 列表 */}
{createSimpleTable(presetVar.tableAreaId, {
showCheck: true,
showIndex: true,
onRowDoubleClick: onRowDoubleClick,
dataSource: DATA_SOURCE,
pkname: presetVar.pkname,
handlePageInfoChange: handlePageInfoChange,
selectedChange: onSelected,
componentInitFinished,
})}
{/*联查开票申请*/}
{this.state.show && <LinkBill
show={this.state.show}
linkBill={this.linkBill}
closeModalEve={() => {
this.setState({ show: false })
}}
></LinkBill>}
{/* 联查发票组件 */}
{this.invoiceComponent.createComponent()}
{/* 联查单据组件 */}
{this.state.linkBusiBillModalShow &&
<LinkBillModal
{...this.props}
modalTitle={multiLang && multiLang.get('1058-SP-0043')} // 联查单据
LinkBillModalPageCode="105802KP_LinkBill"
tableAreaId="bills"
tableRenderField="billno"
queryUrl="/nccloud/sscivm/ivsale/LinkBillAction.do"
queryParams={this.state.LinkBusiBillQueryParams}
onRowDoubleClick={(record, index) => {
requestApi.openbill({
data: {
openbillid: record.pk_bill.value,
tradetype: record.pk_tradetype.value
},
success: (data) => {
this.props.openTo(data.url, data.data);
}
})
}}
closeModalEve={() => {
this.setState({ linkBusiBillModalShow: false });
}}
/>}
{this.props.modal.createModal('redinfomodal', {
userControl:true,
title: multiLang && multiLang.get('1058-invoice-0024')|| '红字信息申请表补录',
content: (
<div className="area-content">
{this.props.editTable.createEditTable('redinfo', {
showIndex: true,
adaptionHeight: false
})}
</div>
),
size: 'xlg',
cancelBtnClick: ()=>{
this.props.modal.close('redinfomodal');
},
beSureBtnClick: () => {
let tableData = this.props.editTable.getAllData('redinfo').rows;
let checkRequired = this.props.editTable.checkRequired('redinfo', tableData);
let rows = this.props.editTable.getAllRows('redinfo');
if (!checkRequired) {
return;
}
let toastMsgs=[];
// "refer-XX-0003": "序号{n}:发票号码为\"{a}\"且发票类型为\"{b}\"的\"{c}\"不能为空;"
// "refer-XX-0004": "红字信息单编号","refer-XX-0005": "红冲原因"
let mulTisp=multiLang && multiLang.get('refer-XX-0003');
rows.forEach((element,index) => {
let itemMulTisp=mulTisp;
if(['2','4','11','99'].some(ele=>{
return ele===element.values.invoice_type.value
})&&element.values.redinfo.value===''){
itemMulTisp=replace(itemMulTisp,'{n}',index+1);
itemMulTisp=replace(itemMulTisp,'{a}',get(element,"values.fphm.value",''));
itemMulTisp=replace(itemMulTisp,'{b}',get(element,"values.invoice_type.display",""));
itemMulTisp=replace(itemMulTisp,'{c}',multiLang && multiLang.get('refer-XX-0004')||'红字信息单编号');
}else if(['1','3','8','10','12','31','32','116','216','316','416'].some(ele=>{
// 116增值税电子普通发票矿产类、216增值税电子专用发票矿产类、316增值税普通发票矿产类、416增值税专用发票矿产类
// 31,32全电发票
return ele===element.values.invoice_type.value
})&&!element.values.hcyy.value){
itemMulTisp=replace(itemMulTisp,'{n}',index+1);
itemMulTisp=replace(itemMulTisp,'{a}',get(element,"values.fphm.value",""));
itemMulTisp=replace(itemMulTisp,'{b}',get(element,"values.invoice_type.display",""));
itemMulTisp=replace(itemMulTisp,'{c}',multiLang && multiLang.get('refer-XX-0005')||'红冲原因');
}else{
itemMulTisp='';
}
if(itemMulTisp!==''){
toastMsgs.push(itemMulTisp)
}
});
// 提示信息
// "1058-SQ-0006": "展开",
// "1058-SQ-0007": "收起",
// "1058-SQ-0008": "关闭",
// "refer-XX-0001": "明细",
// "refer-XX-0002": "部分数据不合规,请修改。",
if(toastMsgs.length){
return toast({
color: "danger",
groupOperation: true,
TextArr: [
multiLang && multiLang.get('1058-SQ-0006'),
multiLang && multiLang.get('1058-SQ-0007'),
multiLang && multiLang.get('1058-SQ-0008'),
],
content: multiLang && multiLang.get('refer-XX-0002'),
groupOperationMsg: toastMsgs,
});
}
let newdatas = rows.map((one) => {
return {
pk: one.values.pk.value,
ts: one.values.ts.value,
redinfo: one.values.redinfo && one.values.redinfo.value||'',
hcyy: one.values.hcyy && one.values.hcyy.value||'',
}
})
RedRush.call(this, [...newdatas, ...this.noRedInfo], true);
this.props.modal.close('redinfomodal');
}
})}
{this.props.modal.createModal('LnvoiceDownloadTypeModal', {
title: '发票类型',
content: (
<div className="area-content">
<div className="nc-bill-form-area">
{createForm('LnvoiceDownloadType', {
})}
</div>
</div>
),
size: '100',
beSureBtnClick: () => {
let formData = this.props.table.getCheckedRows(presetVar.tableAreaId);
let formMap = this.props.form.getAllFormValue('LnvoiceDownloadType');
let {pdf_type, xml_type, ofd_type} = formMap.rows[0].values
let invoiceType = pdf_type.value ? '1' : xml_type.value ? '2' : ofd_type.value ? '3' : '';
if (!invoiceType) {
return toast({
color: 'danger',
content: '请选择下载的文件类型'
})
}
for(let i=0;i<formData.length;i++){
let pk = formData[i].data.values.pk_invoice; //当前发票pk
let arrInvoiceTypes = [];
if (pdf_type.value) {
arrInvoiceTypes.push('1');
invoiceType = '1';
let params = {pk, invoiceType};
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
enctype: 1
});
}
if (xml_type.value) {
arrInvoiceTypes.push('2');
invoiceType = '2';
let params = {pk, invoiceType};
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
enctype: 1
});
}
if (ofd_type.value) {
arrInvoiceTypes.push('3');
invoiceType = '3';
let params = {pk, invoiceType};
formDownload({
params,
url: '/nccloud/sscivm/ivsale/InvoiceDownloadAction.do',
// url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
enctype: 1
});
}
}
this.props.modal.close('LnvoiceDownloadTypeModal')
},
cancelBtnClick: () => {
this.props.modal.close('LnvoiceDownloadTypeModal')
},
userControl: true
})}
</BillListStyle.BodyArea>
</BillListStyle>
);
}
}
let InvoiceSaleDom = createPage({ mutiLangCode: presetVar.mutiLangCode })(InvoiceSale);
export default InvoiceSaleDom;
/*XqV/awHDdJTpxRspYcyLqVDeDCgh8D0u/n5Pb+9JsHE=*/

View File

@ -0,0 +1,41 @@
/*VYZh/ieLfoiunqL5CmpQqFo7O+k8nzrIZsNJltzpfDE=*/
import presetVarParent from '../../../public/common/presetVar'
export default {
...presetVarParent,
pagecode: '105802KP_list',
cardPagecode: '105802KP_card',
searchAreaId: 'xxfp_search',
mutiLangCode: '1058',
moduleId: '1058',
tableAreaId: 'invoices',
pkname: 'pk_invoice',
billtypecode: 'billtypecode',
headBtnAreaId: 'header',
tableBtnAreaId: 'body',
queryOid: '1001ZG1000000000FR5M',
linkBusiBillModal: 'linkBusiBillModal',
tableBtns: {
/**
* 红冲
*/
body_RedRush: 'body_RedRush',
/**
* 作废
*/
body_Invalid: 'body_Invalid',
},
headBtns: {
RedRush: 'RedRush',
Invalid: 'Invalid',
Download: 'Download',
LinkBill: 'LinkBill',
linkinvoice: 'LinkInvoice',
/**
* 联查单据
*/
LinkBusiBill: 'LinkBusiBill'
},
LinkInvoiceBillType:'SSIV',//联查发票billType
}
/*VYZh/ieLfoiunqL5CmpQqFo7O+k8nzrIZsNJltzpfDE=*/

View File

@ -0,0 +1,62 @@
/*Mq+ry/aXt/6nN0mNqW5qEOCuGEUiGEcOgTSebzVVuDg=*/
import { ajax } from 'nc-lightapp-front';
let requestApi = {
//初始化table数据
queryData: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/IVSaleListQryAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
//翻页
changePage: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/IVSaleListQryAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
//红冲
RedRush: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/SaleInvoiceRedRushAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
//作废
Invalid: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/SaleInvoiceInvalidAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
//获取用户默认组织
GetDefOrg: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/IVSaleListGetDefOrgAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
//下载
download: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/InvoiceIsDownloadAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
//联查单据
openbill: (opt) => {
ajax({
url: '/nccloud/sscivm/ivsale/AppInfoQueryAction.do',
data: opt.data,
success: response => opt.success(response.data),
})
},
}
export default requestApi;
/*Mq+ry/aXt/6nN0mNqW5qEOCuGEUiGEcOgTSebzVVuDg=*/

View File

@ -0,0 +1,12 @@
{
"dependModuleName": [
"uap/common/components/ApproveDetail",
"uap/common/components/NCUploader",
"uap/common/components/approvalTrans"
],
"dependjs": [
"../../../../uap/common/components/ApproveDetail/index.js",
"../../../../uap/common/components/NCUploader/index.js",
"../../../../uap/common/components/approvalTrans/index.js"
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,56 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="referrer" content="no-referrer" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<title> Application </title>
<link rel="stylesheet" href="../../../../platform/api/index.css" />
<link rel="stylesheet" href="../../../../platform/base/index.css" />
<link rel="stylesheet" href="../../../../platform/components/index.css" />
<link rel="stylesheet" href="../../../../platform/form/index.css" />
<link rel="stylesheet" href="../../../../platform/table-core/index.css" />
<link rel="stylesheet" href="../../../../platform/simple-table/index.css" />
<link rel="stylesheet" href="../../../../platform/edit-table/index.css" />
<link rel="stylesheet" href="../../../../platform/card-table/index.css" />
<link rel="stylesheet" href="../../../../platform/transfer-table/index.css" />
<link rel="stylesheet" href="../../../../platform/tree-table/index.css" />
<link rel="stylesheet" href="../../../../platform/nc-lightapp-front.css" />
<script type="text/javascript" src="../../../../platform/resource/yonyou-yyy.js"></script>
</head>
<body>
<div id="app"></div>
<script src="../../../../platform/resource/polyfill.js"></script>
<script src="../../../../platform/library/index.js"></script>
<script src="../../../../platform/resource/ca/ca0.js"></script>
<script src="../../../../platform/resource/ca/ca1.js"></script>
<script src="../../../../platform/resource/ca/ca2.js"></script>
<script src="../../../../platform/resource/ca/nccsign.js"></script>
<script src="../../../../platform/resource/ca/sha256.js"></script>
<script src="../../../../platform/api/index.js"></script>
<script src="../../../../platform/base/index.js"></script>
<script src="../../../../platform/template/index.js"></script>
<script src="../../../../platform/form/index.js"></script>
<script src="../../../../platform/table-core/index.js"></script>
<script src="../../../../platform/simple-table/index.js"></script>
<script src="../../../../platform/edit-table/index.js"></script>
<script src="../../../../platform/card-table/index.js"></script>
<script src="../../../../platform/transfer-table/index.js"></script>
<script src="../../../../platform/tree-table/index.js"></script>
<script src="../../../../platform/components/index.js"></script>
<script src="../../../../platform/nc-lightapp-front.js"></script>
<script src="../../../../uap/common/components/ApproveDetail/index.js"></script><script src="../../../../uap/common/components/NCUploader/index.js"></script><script src="../../../../uap/common/components/approvalTrans/index.js"></script>
<script type="text/javascript" src="../../../../sscivm/invoiceSale/invoiceSale/main/index.a3987c13.js"></script></body>

View File

@ -0,0 +1,9 @@
/*uDNyZvexWm/EyN3fR2QvYRqVqZ29ili3JGeYyoMJWUY=*/
import {RenderRouter} from 'nc-lightapp-front';
import routes from './router.js';
(function main(routers, htmlTagid){
RenderRouter(routers,htmlTagid);
})(routes, "app");
/*uDNyZvexWm/EyN3fR2QvYRqVqZ29ili3JGeYyoMJWUY=*/

View File

@ -0,0 +1,25 @@
/*jhdF+/YAK2aUdakCnmQMxoyVWJ3OC/NvOHmNxSS4jDc=*/
import { asyncComponent } from 'nc-lightapp-front';
import InvoiceSaleList from '../list/invoiceSaleList.js';
const Card = asyncComponent(() => import(/* webpackChunkName: "nccloud/sscivm/invoiceReceive/invoiceReceive/card" */ /* webpackMode: "eager" */ '../card/invoiceSaleCard.js'));
const routes = [
{
path: '/',
component: InvoiceSaleList,
exact: true
},
{
path: '/list',
component: InvoiceSaleList
},
{
path: '/card',
component: Card
},
];
export default routes;
/*jhdF+/YAK2aUdakCnmQMxoyVWJ3OC/NvOHmNxSS4jDc=*/