<template> <div class="eibs-tab"> <!-- <c-list-search @form-reset="handleReset" @form-search="handleSearch"> <template v-slot="searchSlot"> --> <div class="m-table-search"> <el-row> <c-col :span="24"> <c-col :span="8"> <el-form-item label="业务编号" prop="trncorco.ownref" style="width: 100%"> <c-input v-model="model.trncorco.ownref" clearable maxlength="16" placeholder="请输入业务编号"></c-input> </el-form-item> </c-col> <c-col :span="8"> <el-form-item label="业务类型" prop="trncorco.dflg" style="width: 100%"> <c-select multiple v-model="model.trncorco.dflg" :filterKey ="filRolcon" @change="bustypChange" style="width: 100%" placeholder="请选择业务类型" :clearable="true" dbCode="TRADE" uil="CN"> </c-select> </el-form-item> <!-- <el-form-item label="业务类型" prop="trncorco.dflg" style="width: 100%"> <c-select v-model="model.trncorco.dflg" dbCode="TRADE" uil="CN" @change="bustypChange" style="width: 100%" placeholder="请选择业务类型" clearable> </c-select> </el-form-item>--> </c-col> <c-col :span="8"> <el-form-item label="交易名称" prop="atp.cod" style="width: 100%"> <c-col :span="24"> <c-col :span="22"> <c-select v-model="model.atp.cod" filterable v-if ="inifrmList.dataflg1" style="width: 100%" placeholder="请选择交易代码" clearable> <el-option v-for="item in inifrmList.data1" :key="item.mancod" :label="item.mancodName" :value="item.mancod"> </el-option> </c-select> <c-select v-model="model.atp.cod" filterable style="width: 100%" v-if ="inifrmList.dataflg2" placeholder="请选择交易代码" clearable> <el-option v-for="item in inifrmList.data2" :key="item.cod" :label="item.cod.replace('1','')+'-'+item.codName" :value="item.cod"> </el-option> </c-select> <!-- <c-input v-model="model.atp.cod" maxlength="6" clear style="width: 95%" placeholder="请输入交易代码" @keyup.enter.native="onSeainf"></c-input> --> </c-col> <c-col :span="2"> <el-tooltip placement="top"> <div slot="content" > 选{{'\u00a0\u00a0\u00a0'}}中:启用交易大类交易码;<br/>不选中:启用交易子类交易码。 </div> <c-checkbox size="small" style="width:100%;margin-left:0" true-label="01" false-label="02" v-model="model.codeLev" @change="changeCode"> </c-checkbox> </el-tooltip> <!-- <c-button size="small" style="width:100%;margin-left:0" type="primary" @click="onSeainf" icon="el-icon-search"></c-button> --> </c-col> </c-col> </el-form-item> </c-col> </c-col> </el-row> <!-- 可控展示区 --> <el-row > <c-col :span="24" v-show="searchToggle"> <c-col :span="8"> <el-form-item label="创建时间" style="width: 100%" prop="trncorco.inidatfro"> <c-col :span="11"> <c-date-picker type="date" v-model="model.trncorco.inidatfro" style="width: 100%" placeholder="请选择创建时间"> </c-date-picker> </c-col> <c-col :span="2" style="text-align: center"> <label style="display: inline-block; width: 100%">-</label> </c-col> <c-col :span="11"> <c-date-picker type="date" v-model="model.trncorco.inidattil" style="width: 100%" placeholder="请选择创建时间"> </c-date-picker> </c-col> </el-form-item> </c-col> <c-col :span="8"> <el-form-item label="业务机构" prop="bchcon" style="width: 100%"> <c-select v-model="model.bchcon" @change="bchChange" style="width: 100%" placeholder="请选择业务机构" clearable> <el-option v-for="item in bchtypList" :key="item.branch" :label="item.bchname" :value="item.branch"> </el-option> </c-select> </el-form-item> </c-col> <c-col :span="8"> <el-form-item label="经办柜员" prop="usrcon" style="width: 100%"> <c-select v-model="model.usrcon" style="width: 100%" placeholder="请选择经办柜员" clearable> <el-option v-for="item in userList" :key="item.extkey" :label="item.extkey+'-'+item.nam" :value="item.extkey"> </el-option> </c-select> </el-form-item> </c-col> </c-col> <c-col :span="8" v-show="searchToggle" v-if="roleTypeName==='单证中心'"> <el-form-item label="业务处理模式"> <el-radio-group v-model="model.tranTypeStr" @change="changeTrantype"> <el-radio label="">全部</el-radio> <el-radio label="01">收单行业务</el-radio> <el-radio label="02">非收单行业务</el-radio> </el-radio-group> </el-form-item> <!-- <el-form-item label="业务处理模式" prop="tranType"> <el-checkbox-group @change="handleCheckedStaChange" v-model="model.tranType"> <el-checkbox :key="sta.value" :label="sta.value" class="el-checkbox-width" v-for="sta in tranTypeCode">{{sta.label}} </el-checkbox> </el-checkbox-group> </el-form-item> --> </c-col> <c-col :span="8" v-show="searchToggle"> <el-form-item label="业务状态" prop="relflg" style="width: 100%" > <c-select collapse-tags multiple v-model="model.relflg" style="width: 100%" placeholder="请选择交易状态" clearable> <el-option v-for="item in relflgCodes" :key="item.value" :label="item.label" :value="item.value"> </el-option> </c-select> </el-form-item> </c-col> <c-col :span="8" v-show="searchToggle"> <el-form-item label="业务金额" style="width: 100%"> <c-col :span="11"> <c-input type="number" maxlength="16" placeholder="请输入最小金额" clearable v-model="model.minamt"></c-input> </c-col> <c-col :span="2" style="text-align: center"> <label style="display: inline-block; width: 100%">-</label> </c-col> <c-col :span="11"> <c-input type="number" maxlength="16" placeholder="请输入最大金额" clearable v-model="model.maxamt"></c-input> </c-col> </el-form-item> </c-col> <c-col :span="24"> <span style="float: right"> <el-button size="small" @click="handleReset">重置</el-button> <el-button v-if="isSearchCenter" type="primary" size="small" :loading="searchLoading" @click="handleSearchOwn()">Search Own </el-button> <el-button v-if="isSearchCenter" type="primary" size="small" :loading="searchLoadingAll" @click="handleSearchAll()">Search All </el-button> <el-button v-if="!isSearchCenter" type="primary" icon="el-icon-search" size="small" @click="handleSearch">查询 </el-button> <el-button type="text" @click="handleToggleSearch"> {{searchToggle? $t('buttons.收起') : $t('buttons.展开') }} <i :class="searchToggle? 'el-icon-arrow-up': 'el-icon-arrow-down'"></i> </el-button> </span> </c-col> </el-row> </div> <!-- </template> </c-list-search> --> <el-row style="margin-top: 2px;margin-bottom: 2px;"> <el-col :span="24" > <c-button class="medium_bcs" style="margin-left:0;" size="medium" type="primary" @click="exportExcel">导出Excel</c-button> <c-button :disabled="isRebackDisable" v-if="isJinBCp" @click="reBackMethod" class="medium_bcs" size="medium" style="margin-left: 20" type="primary">批量退回 </c-button> </el-col> </el-row> <!-- table表格 --> <el-row> <c-col :span="24"> <el-table :data="stmData.data" @row-dblclick="dbQueClickRow" border :columns="stmData.columns" size="small" height="calc(100vh - 360px)" style="width:100%" @sort-change="sortChange" @selection-change="handleSelectionChange"> <el-table-column :selectable="selectableFn" type="selection" min-width="55" v-if="isJinBCp" > </el-table-column> <el-table-column sortable="custom" v-for="(item, key) in stmData.columns" :show-overflow-tooltip="item.prop!=='ownref'" v-if="item.show" :key="key" :label="item.label" :min-width="item.width" :prop="item.prop"> <template slot-scope="scope"> <span v-if="item.prop==='reloriamt'"> {{ moneyFormat(scope.row.reloriamt, scope.row.reloricur) }} </span> <span v-else-if="item.prop==='inifrm'"> {{ tranInifrm(scope.row.inifrm) }} </span> <span v-else-if="item.prop==='iniusr'"> {{ tranName(scope.row.iniusr,scope.row.iniusrName) }} </span> <span v-else-if="item.prop==='usr'"> {{ tranName(scope.row.usr,scope.row.usrName) }} </span> <span v-else-if="item.prop==='relusr3'"> {{ tranName(scope.row.relusr3,scope.row.relusrName) }} </span> <span v-else-if="item.prop==='ownref'"> {{ scope.row.hxyewubh?`${scope.row.ownref}\n${scope.row.hxyewubh}`:scope.row.ownref }} </span> <span v-else> {{ scope.row[item.prop] }} </span> </template> </el-table-column> <el-table-column fixed="right" prop="op" label="操作" width="250px"> <template slot-scope="scope"> <c-button size="small" type="text" v-if="isAllowReturn(scope.row)" @click="onReturnOne(scope.$index,scope.row)">退回</c-button> <c-button size="small" type="text" v-if="isUpdateYspVisible(scope.row)" @click="updateYspSta(scope.row)">更新状态</c-button> <c-button :disabled="isDetailDisable(scope.row)" size="small" type="text" @click="onWaitDetail(scope.$index,scope.row)">详情</c-button> <c-button :disabled="isDisplayDisable(scope.row)" style="margin-left: 5px;" size="small" type="text" @click="onHandle(scope.$index,scope.row)">快照</c-button> <c-button size="small" type="text" @click="onNodeStatus(scope.$index, scope.row)">交易节点</c-button> </template> </el-table-column> </el-table> <el-pagination :current-page.sync="pagination.pageIndex" :page-sizes="[10, 20, 50, 100, 500]" :page-size="pagination.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination> </c-col> </el-row> <!-- 弹窗 --> <el-dialog v-dialogDrag width="50%" :title="dialogTitle" v-if="dialogTableVisible" :visible.sync="dialogTableVisible"> <div v-if="!loadingFlag && tableList.length === 0">暂无数据</div> <div v-else> <el-table id='tableRef' size="small" v-loading="loadingFlag" :data="tableList" @row-dblclick="dbClickRow" :before-close="beforeClose"> <el-table-column v-for="(item,key) in tableColumn" :key="key" :prop="item.prop" :width="item.width" :label="item.label"> </el-table-column> </el-table> </div> </el-dialog> <!--交易节点状态 弹窗 --> <nodeStatusDialog ref="nodeStatus" :activities="activities" :nextNode="nextNode"/> </div> </template> <script> import event from "../event"; import moment from "moment"; import nodeStatusDialog from "~/page/Business/Quesel/views/nodeStatusDialog"; import Api from '~/service/Api'; export default { inject: ["root"], props: ["codes", "model"], mixins: [event], components: {nodeStatusDialog}, data() { return { dbCodes:{ rolcon:[], trade:[], }, filRolcon:[], searchModel:"OWN", searchToggle:true, sortObj:{}, searchLoadingAll: false, searchLoading: false, logname:window.sessionStorage.userName, inifrmList:{ dataflg1:true, dataflg2:false, data1: [], data2: [] }, batchflg:"N", multipleSelection:[], multipleSelectionRow: {}, activities: [], nextNode:[], dialogTitle: "", dialogTableVisible: false, loadingFlag: true, total: 0, currentPage: 1, roleTypeName:JSON.parse(window.sessionStorage.curRole).name, currentOrg:JSON.parse(window.sessionStorage.currentOrg).departmentNumber, accbch:JSON.parse(window.sessionStorage.accbch), pageSizes: [5, 10, 20, 30, 40, 50, 100], pageSize: 5, tableList: [], tableColumn: [ { label: "序号", prop: "index", width: "80px" }, { label: "交易代码", prop: "cod", width: "200px" }, { label: "交易名称", prop: "txt", width: "400px" } ], userList: [], bchtypList: [], relflgCodes: [], busTypeCode: [ { label: "国内保函", value: "01" }, { label: "国际保函", value: "02" }, { label: "海关税款担保保函", value: "03" } ], tranTypeCode: [ { label: "收单行业务", value: "01" }, { label: "非收单业务", value: "02" } ], stmData: { columns: [ { label: "交易代码", prop: "inifrm", width: "110px" ,show: true}, { label: "交易名称", prop: "inifrmNameCn", width: "140px" ,show: true}, { label: "业务编号", prop: "ownref", width: "160px" ,show: true}, { label: "业务状态", prop: "relflgName", width: "140px" ,show: true}, { label: "币种", prop: "reloricur", width: "80px" ,show: true}, { label: "金额", prop: "reloriamt", width: "130px" ,show: true}, { label: "创建时间", prop: "inidattim", width: "160px" ,show: true}, { label: "经办柜员", prop: "iniusr", width: "160px", show:true}, { label: "总行经办柜员", prop: "relusr3", width: "160px", show: window.sessionStorage.accbch && JSON.parse(window.sessionStorage.accbch).bchtyp==='6'?true:false}, { label: "分配柜员", prop: "usr", width: "160px", show: window.sessionStorage.curRole && (JSON.parse(window.sessionStorage.curRole).id===10255 ||JSON.parse(window.sessionStorage.curRole).id===10256)?true:false}, { label: "客户名称", prop: "objnam", width: "210px" ,show: true}, { label: "业务机构", prop: "bchname", width: "180px" ,show: true}, { label: "签名要求", prop: "relreqCom", width: "140px" ,show: true}, { label: "签名状态", prop: "relresCom", width: "140px" ,show: true} ], data: [] }, pagination: { pageIndex: 1, pageSize: 20, total: 0 } }; }, methods: { async initInifrm(){ let roleId = JSON.parse(window.sessionStorage.curRole).id+""; let codeobj = this.dbCodes["rolcon"].find(obj => obj.value === roleId); if(codeobj){ this.filRolcon=codeobj.label.split("|"); }else{ await this.getdbCode("trade","","trade"); this.filRolcon=this.dbCodes["trade"].map((item)=>{ return item.value; }); } }, async getdbCode(codeType, uil, codeNam) { let params = { codeType: codeType, uil: uil ? uil : 'CN' } let rtnmsg = await Api.post("/manager/dic/listDicInfo", params) if (rtnmsg.respCode === SUCCESS) { let curList = rtnmsg.data.map(item => ({ value: item.codeValue, label: item.codeName })); this.dbCodes[codeNam] = curList } }, //表格码表格式化 getCodelabel(value,codenam) { const codeobj = this.dbCodes[codenam].find(obj => obj.value === value) return codeobj ? codeobj.label : value; }, tranInifrm(inifrm){ if(inifrm.indexOf("1")>=0){ return inifrm.replace("1", ""); } return inifrm; }, async updateYspSta(row){ let params = { inr: row.inr }; const res = await Api.post("/public/ysprel/updateSta", params); if (res.respCode == SUCCESS) { this.$notify({title: '成功', message: res.data.respMsg, type: 'success', }); this.handleSearch(); }else{ this.$notify({title: '失败', message: res.data.respMsg, type: 'error', }); } }, dbQueClickRow(row, column, event) { this.onHandle(column.rowSpan,row); }, isJinB() { return this.isPubJinB(); }, handleCheckedStaChange() { this.changeTrantype(); this.searchModel="ALL" this.handleSearch(); }, changeCode(val) { this.model.atp.cod = ""; this.inifrmList.dataflg1=false; this.inifrmList.dataflg2=false; if(val==="01"){ this.inifrmList.dataflg1=true; this.getFirstCodeList(); }else{ this.inifrmList.dataflg2=true; this.getSecondCodeList(); } }, bustypChange(){ this.model.atp.cod=""; if(this.inifrmList.dataflg1){ this.getFirstCodeList(); }else { this.getSecondCodeList(); } }, bchChange(){ this.model.usrcon=""; this.getUserList(); }, tranName(usr,usrName){ if(usr==='-') return '-'; if(usr && usrName){ return usr+"-"+usrName; } return ""; }, async getFirstCodeList() { this.currentPage = 1; this.pageSize = 10000; this.total = 0; let params = { cod: this.model.atp.cod, dflg:this.model.trncorco.dflg, pageNo: this.currentPage, pageSize: this.pageSize }; const res = await Api.post('/public/quesel/getFirstCodeList', params); if (res.respCode === SUCCESS) { if (res.data && res.data.list) { this.inifrmList.data1 = res.data.list; } } }, isDisplayDisable(row) { if(row.objtyp==='SPT' && "-P1-P2-".indexOf(row.relflg)>0){ return true; } return false; }, isDetailDisable(row) { if(row.objtyp==='SPT' && "-P1-P2-".indexOf(row.relflg)>0){ return true; } return false; }, isBranchFuhe() { return this.isPubBranchFuhe(); }, isUpdateYspVisible(row){ if (row.inifrm.includes("JST") && this.isBranchFuhe()) { return true; } return false; }, isAllowReturn(row){ if(this.isJinB()){ if(row.bchtyp==='6'){ //收单行上收退回,涉及分行经办 和 总行经办 退回 if (this.currentOrg!='1000' && row.relflg==='W2'){ //待分行复核 return true; } if (this.currentOrg==='1000' && row.relflg==='W1'){ //待总行复核 return true; } }else{ //非收单行处理 分行经办 if (this.currentOrg!=='1000' && "-W1-W2-".indexOf(row.relflg)>0){ return true; } } } return false; }, async getSecondCodeList() { this.currentPage = 1; this.pageSize = 10000; this.total = 0; let params = { cod: this.model.atp.cod, dflg:this.model.trncorco.dflg, pageNo: this.currentPage, pageSize: this.pageSize }; const res = await Api.post('/public/quesel/getSecondCodeList', params); if (res.respCode === SUCCESS) { if (res.data && res.data.list) { this.inifrmList.data2 = res.data.list; } } }, changeTrantype(){ //if(this.model.tranTypeStr==="02"){ if(this.model.tranType.length===1 && this.model.tranType.indexOf("02")>=0){ this.relflgCodes=[{ label: "待总行复核", value: "W1" } ,{ label: "已退回分行经办", value: "C2" } ,{ label: "待分行复核", value: "W2" } ,{ label: "分行经办暂存", value: "P2" } ]; }else{ this.relflgCodes=[{ label: "待总行复核", value: "W1" } ,{ label: "总行经办暂存", value: "P1" } ,{ label: "已退回总行经办", value: "C1" } ,{ label: "押汇中心已分配", value: "G1" } ,{ label: "押汇中心待分配", value: "G2" } ,{ label: "已退回分行经办", value: "C2" } ,{ label: "待分行复核", value: "W2" } ,{ label: "分行经办暂存", value: "P2" } ]; } this.model.relflg=[]; }, getInidatfro() { this.model.trncorco.inidatfro = moment(new Date()).format("YYYY-MM-DD") + " 00:00:00"; this.model.trncorco.inidattil = moment(new Date()).format("YYYY-MM-DD") + " 23:59:59"; }, async onNodeStatus(index, row) { let roleId=JSON.parse(window.sessionStorage.curRole).id+""; let trninr=this.getTrninr(row); this.$refs.nodeStatus.nodeStatusVisible = true; let params={}; if(this.currentOrg==="1000" && "-10253-10255-10256-10245-".indexOf(roleId)>0 && row.objtyp==="SPT"){ params.queinr=row.inr; }else{ params.trninr=trninr; } let res = await Api.post("/public/quesel/getNodeList", params); if (res.respCode == SUCCESS) { this.nextNode=res.data.nextNode; this.activities = res.data.data.filter((item)=>{ return item.typ!=="MAN" }); } } }, computed:{ isJinBCp() { return this.isPubJinB(); }, isRebackDisable() { if (this.multipleSelection.length===0) { return true; } return false; }, isSearchCenter() { let roleName = JSON.parse(window.sessionStorage.curRole).name; let roleId=JSON.parse(window.sessionStorage.curRole).id; if ("-单证中心-".indexOf(roleName)>0 || roleName==="押汇中心经办" || roleName==="押汇中心复核"){ return true; } if ("-10253-10255-10256-".indexOf(roleId)>0 ){ return true; } return false; }, }, async mounted() { let bchtyp=""; let roleId=""; if(window.sessionStorage.accbch){ bchtyp=JSON.parse(window.sessionStorage.accbch).bchtyp; } if(window.sessionStorage.curRole){ roleId=JSON.parse(window.sessionStorage.curRole).id+""; } this.model.codeLev="01"; if(this.currentOrg==="1000"){ if(roleId==="10255"){//押汇中心经办 this.relflgCodes=[{ label: "待总行复核", value: "W1" } ,{ label: "总行经办暂存", value: "P1" } ,{ label: "已退回总行经办", value: "C1" } ,{ label: "押汇中心已分配", value: "G1" } ,{ label: "已退回分行经办", value: "C2" } ,{ label: "待分行复核", value: "W2" } ,{ label: "分行经办暂存", value: "P2" } ]; this.model.relflg=[]; }else if(roleId==="10253"){//单证中心 this.changeTrantype(); }else{//押汇中心复核 this.relflgCodes=[{ label: "待总行复核", value: "W1" } ,{ label: "总行经办暂存", value: "P1" } ,{ label: "已退回总行经办", value: "C1" } ,{ label: "押汇中心已分配", value: "G1" } ,{ label: "押汇中心待分配", value: "G2" } ,{ label: "已退回分行经办", value: "C2" } ,{ label: "待分行复核", value: "W2" } ,{ label: "分行经办暂存", value: "P2" } ]; this.model.relflg=[]; } }else if(bchtyp==='6'){ this.relflgCodes=[{ label: "待分行复核", value: "W" } ,{ label: "分行已复核", value: "A" } ,{ label: "总行已经办", value: "B" } ]; this.model.relflg=["W","A","B"]; }else{ this.relflgCodes=[{ label: "待分行复核", value: "W2" },{ label: "待总行复核", value: "W1" }]; this.model.relflg=["W1","W2"]; } await this.getdbCode("rolcon",'CN',"rolcon"); this.model.assignFlag=["Y"]; this.getInidatfro(); this.getBranchList(); this.getUserList(); this.getFirstCodeList(); this.getSecondCodeList(); this.handleSearch(); this.initInifrm(); }, activated(){ //if(this.$first === undefined){ // this.$first = 1 // return //} //this.handleSearch() }, }; </script> <style scoped lang="less"> ::v-deep input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button{ -webkit-appearance: none; margin:0; } ::v-deep input[type="number"]{ -moz-appearance: textfield; } .el-checkbox-width { margin-right: 0px; float: left; text-align: left !important; width: 150px; } ::v-deep .el-dialog__body { height: calc(100% - 54px); } .table-button-item-list { padding: 0; margin: 0; } ::v-deep .m-table-search { padding-bottom: 0px !important; padding-top: 8px !important; } ::v-deep .el-table .el-button--small.el-button--text { padding: 0 5px!important; } .table-button-item-list li { list-style: none; padding: 5px 0; text-align: center; color: #606266; cursor: pointer; } </style>