<template>
	<div>
		<el-card class="box-card" :class="[isShowCard ? '' : 'is-show-card']">
			<c-col :span="24">
				<el-form-item 
					:label='argadr.title' 
					:prop="`${argadr.grp}.${argadr.rol}.pts.extkey`" 
					style="width: 100%"
					:rules="[{required: requiredExtkey, message: '必输项', trigger:['blur','change'] }]"
				>
					<c-input 
						v-model.trim="model[argadr.grp][argadr.rol].pts.extkey" 
						placeholder="" 
						maxlength="16" 
						:disabled="disabledExtkey"
						@keyup.enter.native="showPtapDialog()" 
						@blur="handleExtkeyBlur"
					>
					</c-input>
				</el-form-item>
			</c-col>
			<c-col :span="24">
				<el-form-item 
					label="联行行号"
					:prop="`${argadr.grp}.${argadr.rol}.pts.bankno`" 
					style="width: 100%"
					:rules="[{required: requiredBankno, message: '必输项', trigger:['blur','change'] }]"
				>
					<c-input
						v-model.trim="model[argadr.grp][argadr.rol].pts.bankno"
						placeholder=""
						maxlength="20"
						:disabled="disabledBankno"
						@keyup.enter.native="showBankPtapDialog()"
						@blur="blurBankno()"
						@input="banknoInput()"
					>
					</c-input>
				</el-form-item>
			</c-col>
			<c-col :span="24">
				<el-form-item  
					:prop="`${argadr.grp}.${argadr.rol}.pts.jigomc`" 
					style="width: 100%"
					label="联行名称"
				>
					<c-mul-row-input 
						type="textarea"
						:rows="4"
						:cols="35" 
						:charmod="charmod" 
						v-model.trim="model[argadr.grp][argadr.rol].pts.jigomc" 
						placeholder=""
						:isRequired="requiredNam"
						:isCheckInCompontent = "false"
						:disabled="disabledJigomc || isDisabled"
					>
					</c-mul-row-input>
				</el-form-item>
			</c-col>
			<c-col :span="24">
				<el-form-item  
					:prop="`${argadr.grp}.${argadr.rol}.pts.dizhii`" 
					style="width: 100%"
					label="地址"
					:rules="[{required: requiredDizhii, message: '必输项', trigger:['blur','change'] }]"
				>
					<c-mul-row-input 
						type="textarea" 
						:rows="4"
						:cols="35"
						:charmod="charmod"
						:isRequired="requiredAdrblk" 
						v-model.trim="model[argadr.grp][argadr.rol].pts.dizhii" 
						placeholder=""
						:isCheckInCompontent= "false"
						:disabled="disabledDizhii"
					>
					</c-mul-row-input>
				</el-form-item>
			</c-col>
			<c-col :span="24">
				<c-col :span="12">
					<el-form-item 
						label="邮编" 
						:prop="`${argadr.grp}.${argadr.rol}.pts.youzbm`"
					>
						<c-input 
							v-model.trim="model[argadr.grp][argadr.rol].pts.youzbm" 
							maxlength="6" 
							placeholder="请输入邮编" 
							:disabled="disabledYouzbm"
						></c-input>
					</el-form-item>
				</c-col>
				<c-col :span="12">
					<el-form-item 
						label="电话" 
						:prop="`${argadr.grp}.${argadr.rol}.pts.dihdig`"
					>
						<c-input 
							v-model.trim="model[argadr.grp][argadr.rol].pts.dihdig" 
							maxlength="16"
							placeholder="请输入电话" 
							:disabled="disabledDihdig"
						></c-input>
					</el-form-item>
				</c-col>
			</c-col>
		</el-card>
		<!-- 弹窗 -->
		<el-dialog
			v-dialogDrag
			width="64%"
			:visible.sync="dialogTableVisible"
			:close-on-click-modal="false"
			:close-on-press-escape="false"
			:show-close="false"
			v-if="dialogTableVisible"
			:modal-append-to-body="false"
			:append-to-body="true"
		>
			<div slot="title" style="font-size: 16px;color: black;position: realtive;">
				{{ dialogTitle }}
				<!-- 关闭按钮 -->
				<div class="close-btn" @click="handleCloseDialogTable"><i class="el-icon-close"></i></div>
			</div>
			<div v-if="!tableLoading && tableList.length === 0">暂无数据</div>
			<div v-else style="width: 100%;height: 100%;">
				<el-table id='tableRef' height="calc(100% - 32px)" style="width: 100%;" v-loading="tableLoading" :data="tableList" @row-dblclick="dbClickRow" :before-close="beforeClose">
					<el-table-column v-for="(item,key) in tableColumn" :key="key" :prop="item.prop" :render-header="renderheader" :label="item.label">
					</el-table-column>
				</el-table>
				<el-pagination
					class="eContainer-pagination"
					layout="prev, pager, next, jumper, ->, sizes, total"
					:page-sizes="pageSizes"
					:page-size="pageSize"
					:current-page="currentPage"
					:total="total"
					@size-change="sizeChange"
					@current-change="currentChange"
				></el-pagination>
			</div>
		</el-dialog>
		<!-- 弹窗 -->
		<el-dialog
			v-dialogDrag
			width="64%"
			:visible.sync="dialogBankTableVisible"
			:close-on-click-modal="false"
			:close-on-press-escape="false"
			:show-close="false"
			v-if="dialogBankTableVisible"
			:modal-append-to-body="false"
			:append-to-body="true"
		>
			<div slot="title" style="font-size: 16px;color: black;position: realtive;">
				 联行信息 
				<!-- 关闭按钮 -->
				<div class="close-btn" @click="handleCloseDialogBankTable"><i class="el-icon-close"></i></div>
			</div>
			<div v-if="!bankTableLoading && bankTableList.length === 0">暂无数据</div>
			<div v-else style="width: 100%;height: 100%;">
				<el-table id='tableRef' height="calc(100% - 32px)" style="width: 100%;" v-loading="bankTableLoading" :data="bankTableList" @row-dblclick="bankdbClickRow" :before-close="beforeBankClose">
					<el-table-column v-for="(item,key) in bankTableColumn" :key="key" :prop="item.prop"  :label="item.label">
					</el-table-column>
				</el-table>
				<el-pagination
					class="eContainer-pagination"
					layout="prev, pager, next, jumper, ->, sizes, total"
					:page-sizes="bankPageSizes"
					:page-size="bankPageSize"
					:current-page="bankCurrentPage"
					:total="bankTotal"
					@size-change="bankSizeChange"
					@current-change="bankCurrentChange"
				></el-pagination>
			</div>
		</el-dialog>
	</div>
</template>
<script>
import { columnMap } from "./ptapColumn.js";
import { queryPtaBic, queryPtsptaBic,queryPtaInfo5, queryptsptainfo5 } from "~/service/business/common";
import commonFunctions from '~/mixin/commonFunctions.js';
import commonDepend from '~/mixin/commonDepend.js'
export default {
	inject: ["root"],
	mixins: [commonFunctions,commonDepend],
  props: {
    model: {
      type: Object,
      default: () => {}
    },
    argadr: {
      type: Object,
      default: function() {
        return {
					title: "", //角色名称
          rol: "", //角色
          grp: "" //所属模块
        };
      }
    },
    charmod: {
      type: Number,
      default: 0
    },
    isShowCard: {
      type: Boolean,
      default: true
		},
		requiredExtkey:{
			type: Boolean,
      default: false
		},
    disabledExtkey: {
      //extkey是否灰显(true:extkey处灰显)
      type: Boolean,
      default: false
		},
		requiredBankno:{
			type: Boolean,
      default: false
		},
		requiredDizhii:{
			type: Boolean,
      		default: false
		},
		requiredNam: {
			type: Boolean,
			default: true
		},
		requiredAdrblk: {
			type: Boolean,
			default: true
		},
    disabledBankno: {
      //Bankno是否灰显(true:Bankno处灰显)
      type: Boolean,
      default: false
    },
    disabledJigomc: {
      //Jigomc是否灰显(true:Jigomc处灰显)
      type: Boolean,
      default: false
    },
    disabledDizhii: {
      //Dizhii是否灰显(true:Dizhii处灰显)
      type: Boolean,
      default: false
    },
    disabledYouzbm: {
      //Youzbm是否灰显(true:Youzbm处灰显)
      type: Boolean,
      default: false
    },
    disabledDihdig: {
      //Dihdig是否灰显(true:Dihdig处灰显)
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
			dialogTitle: "", // 弹框标题
      dialogTableVisible: false, // 控制弹框的展示和隐藏
			tableLoading: false,
			markExtkey: '',
      total: 0,
      isDisabled: false,
      currentPage: 1, // 页数
      pageSizes: [5, 10, 20, 30, 40, 50, 100],
      pageSize: 5, // 条数
      tableList: [],
			tableColumn: [],
			dialogBankTableVisible: false, // 控制弹框的展示和隐藏
			bankTableLoading: false,
      bankTotal: 0,
      bankCurrentPage: 1, // 页数
      bankPageSizes: [5, 10, 20, 30, 40, 50, 100],
      bankPageSize: 5, // 条数
      bankTableList: [],
			bankTableColumn: [],
		};
  },
  methods: {
		async showPtapDialog() {
			if (this.tableLoading || this.dialogTableVisible) {
				return
			}
      const value = this.model[this.argadr.grp][this.argadr.rol].pts.extkey;
      // 分层取值
      await this.getTableData(value);
      if (this.total == 1) {
					this.dbClickRow(this.tableList[0]);
      } else {
				// 设置弹框标题
				this.dialogTitle = `${this.argadr.title}详情`;
				this.dialogTableVisible = true;
				this.tableColumn = columnMap['C'];
				this.$nextTick(()=>{
					this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]);
				})
      }
		},
		sizeChange(num){
      this.pageSize = num;
      const value = this.model[this.argadr.grp][this.argadr.rol].pts.extkey;
			this.getTableData(value);
		},
    currentChange(num) {
      this.currentPage = num;
      const value = this.model[this.argadr.grp][this.argadr.rol].pts.extkey;
      this.getTableData(value);
    },
		// 获取弹框内的table数据
    async getTableData(value) {
			return new Promise(async (resolve) => {
				this.tableLoading = true;
				this.tableList = [];
				// 获取table的表格数据
				let params = {
					extkey: value || "",
					pageNum: this.currentPage,
					pageSize: this.pageSize
        };
				const loading = this.loading();
				const res = await queryPtaBic(params, this.moduleRouter());
				loading.close();
				if (res.respCode == SUCCESS) {
					if (res.data && res.data.list) {
						this.total = res.data.total;
						this.tableList = res.data.list.map(it => ({
							...it,
							// 添加新key将Party Number和Address Number换行
							partyNumberAndAdressNumber: `${it.ptaptyextkey || ""}\n${it.ptaobjkey || ""}`,
							bchbranchAndBchbchname: `${it.bchbranch || ""}\n${it.bchbchname || ""}`,
							adrnam1AndPtanam1: `${it.adrnam1 || ""}\n${it.ptanam1 || ""}`,
							adradr1AndAdrstr1: `${it.adradr1 || ""}\n${it.adrstr1 || ""}`,
							adrstr2Andadrloccty: `${it.adrstr2 || ""}\n${it.adrloccty || ""}`,
							adrloczipAndadrloctxt: `${it.adrloczip || ""}\n${it.adrloctxt || ""}`
						}));
						resolve(this.tableList)
					}
				}
				this.tableLoading = false; //接口掉完变成false
			})
		},
		async dbClickRow(row, column, event) {
      let params = {
        inr: row.ptainr,
        rol: this.argadr.rol
      };
			const response = await queryPtsptaBic(params, this.moduleRouter());
      if (response.respCode == SUCCESS) {
				//备份extkey
				this.markExtkey = row.ptaobjkey
				this.model[this.argadr.grp][this.argadr.rol].pts.extkey = row.ptaobjkey
				this.model[this.argadr.grp][this.argadr.rol].pts.ptainr = response.data.ptainr
				this.model[this.argadr.grp][this.argadr.rol].pts.ptyinr = response.data.ptyinr
				//this.model[this.argadr.grp][this.argadr.rol].pts.nam = response.data.cnnam
				this.model[this.argadr.grp][this.argadr.rol].pts.rol = this.argadr.rol.toUpperCase()
				this.model[this.argadr.grp][this.argadr.rol].pts.ennam = response.data.ennam
				this.model[this.argadr.grp][this.argadr.rol].pts.enadr = response.data.enadr
				this.model[this.argadr.grp][this.argadr.rol].pts.cnnam = response.data.cnnam
				this.model[this.argadr.grp][this.argadr.rol].pts.cnadr = response.data.cnadr
				this.model[this.argadr.grp][this.argadr.rol].pts.dizhii = response.data.cnadr
				this.$nextTick(()=>{
					this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]);
				})
			}
      this.dialogTableVisible = false;
		},
		beforeClose(done) {
      this.dialogTableVisible = false;
      this.currentPage = 1;
      done();
		},
		// 表头 头部换行,以 / 作为换行标志
    renderheader(h, { column, $index }) {
      return h("span", {}, [
        h("span", {}, column.label.split("/")[0]),
        h("br"),
        h("span", {}, column.label.split("/")[1])
      ]);
		},
		// extkey输入框失焦
		handleExtkeyBlur (e) {
			let extkey = this.model[this.argadr.grp][this.argadr.rol].pts.extkey
			if (extkey && extkey !== this.markExtkey) {
				this.showPtapDialog()
			}
			if(!extkey){
				this.cleanExtkey()
			}
		},
		cleanExtkey(){
			this.model[this.argadr.grp][this.argadr.rol].pts.ptainr = ''
      this.model[this.argadr.grp][this.argadr.rol].pts.ptyinr = ''
			this.model[this.argadr.grp][this.argadr.rol].pts.ennam = ''
      this.model[this.argadr.grp][this.argadr.rol].pts.enadr = ''
      this.model[this.argadr.grp][this.argadr.rol].pts.cnnam = ''
			this.model[this.argadr.grp][this.argadr.rol].pts.cnadr = ''
		},
		// 关闭弹框
		handleCloseDialogTable () {
			this.dialogTableVisible = false;
			this.$nextTick(()=>{
				this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]);
			})
			this.model[this.argadr.grp][this.argadr.rol].pts.extkey = this.markExtkey
		},
		async showBankPtapDialog(){
			if (this.bankTableLoading || this.dialogBankTableVisible) {
				return
			}
      const value = this.model[this.argadr.grp][this.argadr.rol].pts.bankno;
      // 分层取值
      await this.getBnakTableData(value);
      if (this.bankTotal == 1) {
					this.bankdbClickRow(this.bankTableList[0]);
      } else {
				this.dialogBankTableVisible = true;
				this.bankTableColumn = columnMap['X'];
				this.$nextTick(()=>{
					this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.bankno`]);
				})
      }
		},
		blurBankno(){
			let bankno = this.model[this.argadr.grp][this.argadr.rol].pts.bankno
			if (bankno && bankno != this.markBankno){
				this.showBankPtapDialog()
			}
		},
		// 获取弹框内的table数据
    async getBnakTableData(value) {
			return new Promise(async (resolve) => {
				this.bankTableLoading = true;
				this.bankTableList = [];
				// 获取table的表格数据
				let params = {
					fqcyjg: value || "",
					pageNum: this.bankCurrentPage,
					pageSize: this.bankPageSize
        };
				const loading = this.loading();
				const res = await queryPtaInfo5(params, this.moduleRouter());
				loading.close();
				if (res.respCode == SUCCESS) {
					if (res.data && res.data.list) {
						this.bankTotal = res.data.total;
						this.bankTableList = res.data.list.map(it => ({
							...it,
						}));
						resolve(this.bankTableList)
					}
				}
				this.bankTableLoading = false; //接口掉完变成false
			})
		},
		bankSizeChange(num){
      this.bankPageSize = num;
      const value = this.model[this.argadr.grp][this.argadr.rol].pts.bankno;
			this.getBnakTableData(value);
		},
    bankCurrentChange(num) {
      this.bankCurrentPage = num;
      const value = this.model[this.argadr.grp][this.argadr.rol].pts.bankno;
      this.getBnakTableData(value);
    },
		beforeBankClose(done) {
      this.dialogBankTableVisible = false;
      this.bankCurrentPage = 1;
      done();
		},
		async bankdbClickRow(row, column, event) {
      let params = {
        fqcyjg: row.fqcyjg,
        rol: this.argadr.rol
      };
			const response = await queryptsptainfo5(params, this.moduleRouter());
      if (response.respCode == SUCCESS) {
				// 备份bankno
				this.markBankno = row.fqcyjg
				this.model[this.argadr.grp][this.argadr.rol].pts.bankno = row.fqcyjg
				this.model[this.argadr.grp][this.argadr.rol].pts.jigomc = response.data.fukrhm
				// this.model[this.argadr.grp][this.argadr.rol].pts.dizhii = response.data.dizhii
				this.model[this.argadr.grp][this.argadr.rol].pts.youzbm = response.data.youzbm
				this.model[this.argadr.grp][this.argadr.rol].pts.dihdig = response.data.dihdig
        this.model[this.argadr.grp][this.argadr.rol].pts.rol = this.argadr.rol.toUpperCase()
        //pts的nam取联行行号名称
        this.model[this.argadr.grp][this.argadr.rol].pts.nam = response.data.fukrhm
      
				// 此处为了回填数据时回调
        this.isDisabled = true
				this.$nextTick(()=>{
					this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.bankno`]);
				})
			}
			this.dialogBankTableVisible = false;
			this.modifyPtap()
		},
		modifyPtap(){
			this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts, 'bankno')
			this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts,'jigomc')
			this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts,'dizhii')
			this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts,'youzbm')
			this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts,'dihdig')
		},
		banknoInput(){
			if(!this.model[this.argadr.grp][this.argadr.rol].pts.bankno){
				this.model[this.argadr.grp][this.argadr.rol].pts.jigomc = ''
				// this.model[this.argadr.grp][this.argadr.rol].pts.dizhii = ''
				this.model[this.argadr.grp][this.argadr.rol].pts.youzbm = ''
				this.model[this.argadr.grp][this.argadr.rol].pts.dihdig = ''
			}
		},
		// 关闭弹框
		handleCloseDialogBankTable () {
			this.dialogBankTableVisible = false;
			this.$nextTick(()=>{
				this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.bankno`]);
			})
			let nam = this.model[this.argadr.grp][this.argadr.rol].pts.jigomc
			let adr = this.model[this.argadr.grp][this.argadr.rol].pts.dizhii
			if (nam || adr){
				this.model[this.argadr.grp][this.argadr.rol].pts.bankno = this.markBankno
			}
		},
	}
};
</script>
<style scoped lang="less">
.box-card {
  margin-bottom: 10px;
  /deep/ .el-form-item--mini.el-form-item,
  .el-form-item--small.el-form-item {
    margin-bottom: 10px;
  }
  /deep/ .el-card__body {
    padding: 10px 10px 10px 0px;
  }
}
.close-btn {
	width: 20px;
	height: 20px;
	position: absolute;
	top: 20px;
	right: 20px;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
}
.close-btn:hover {
	background: rgba(0, 0, 0, .1)
}
.is-show-card {
  border: none !important;
  box-shadow: none !important;
  margin-bottom: 0 !important;
  /deep/ .el-card__body {
    padding: 0 !important;
  }
}
</style>