<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%" > <c-fullbox> <c-input v-model.trim="model[argadr.grp][argadr.rol].pts.extkey" placeholder="" maxlength="16" :disabled="disabledExtkey" clearable @keyup.enter.native="showPtapDialog()" @blur="handleExtkeyBlur" @clear="clear" @input="extkeyInput" @change="extkeyChange" > </c-input> <template slot="footer"> <c-button style="margin:0 10px 0 10px;padding: 0 12px;" size="small" type="primary" icon="el-icon-search" :disabled="disabledExtkey" @click="showPtapDialog()" > </c-button> <el-button style="margin:0 0" size="small" type="primary" :disabled="disabledDetail" @click="showDerail" > Details </el-button> </template> </c-fullbox> </el-form-item> </c-col> <c-col :span="24"> <el-form-item :label="isShowNam ? 'Name':''" :prop="`${argadr.grp}.${argadr.rol}.pts.nam`" style="width: 100%" > <c-mul-row-input type="textarea" :rows="2" :cols="20" :charmod="charmod" v-model="model[argadr.grp][argadr.rol].pts.nam" placeholder="" :disabled="disabledNam || isDisabled" @blur="handleFocus('nam')" > </c-mul-row-input> </el-form-item> </c-col> <c-col :span="24"> <el-form-item :label="isShowAddress ? 'Address':''" :prop="`${argadr.grp}.${argadr.rol}.pts.adrblk`" > <c-mul-row-input type="textarea" :rows="2" :cols="70" :autosize="{minRows: 1, maxRows: 2}" :charmod="charmod" :showTip="false" v-model="model[argadr.grp][argadr.rol].pts.adrblk" placeholder="" :disabled="disabledAdrblk || isDisabled" @blur="handleFocus('adr')" > </c-mul-row-input> </el-form-item> </c-col> </el-card> <!-- 临时地址名称和地址的 --> <el-dialog v-dialogDrag width="64%" custom-class="temp-rol" :visible.sync="tempRolVisible" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" v-if="tempRolVisible" > <div slot="title" style="font-size: 16px;color: black;position: realtive;"> 临时角色信息 </div> <div> <el-form ref="tempForm" :model="tempFormData" :rules="tempRolRules" :validate-on-rule-change="false"> <el-form-item label="名称" prop="name" label-width="95px"> <c-mul-row-input type="textarea" :rows="2" :cols="70" v-model="tempFormData.name" placeholder="请输入" :isCheckInCompontent="false" :showTip="false" ></c-mul-row-input> </el-form-item> <el-form-item label="地址" prop="address" label-width="95px" > <c-mul-row-input type="textarea" :rows="2" :cols="70" v-model="tempFormData.address" placeholder="请输入" :isCheckInCompontent="false" :showTip="false" ></c-mul-row-input> </el-form-item> </el-form> </div> <span slot="footer" class="dialog-footer"> <el-button type="default" @click="handletempRolClose">取消</el-button> <el-button type="primary" @click="buildTemp" v-if="!model[argadr.grp][argadr.rol].pts.ptainr">创建临时地址</el-button> <el-button type="primary" @click="tempSure">确 定</el-button> </span> </el-dialog> <!-- 弹窗 --> <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%" title="详情查看" custom-class="temp-rol" :visible.sync="detailVisible" :close-on-click-modal="false" :close-on-press-escape="false" v-if="detailVisible" > <el-form :model="detailFormData" label-width="95px"> <c-col :span="24"> <c-col :span="12" style="padding-right: 10px"> <c-col :span="24"> <el-form-item label="客户编号"> <el-input v-model="detailFormData.ptaptyextkey" disabled></el-input> </el-form-item> </c-col> <c-col :span="24"> <el-form-item label="中文名称"> <el-input type="textarea" v-model="detailFormData.nam" disabled></el-input> </el-form-item> </c-col> <c-col :span="24"> <el-form-item label="中文地址"> <el-input type="textarea" v-model="detailFormData.adr" disabled></el-input> </el-form-item> </c-col> </c-col> <c-col :span="12" style="padding-left: 10px"> <c-col :span="24"> <!-- :prop="`${argadr.grp}.${argadr.rol}.pts.ref`" --> <el-form-item label="参考号"> <c-input v-model="detailFormData.ref" :customModifykey="`${argadr.grp}.${argadr.rol}.pts.ref`" placeholder="请输入参考号" maxlength="16" show-word-limit @input="handleInput" ></c-input> </el-form-item> </c-col> <c-col :span="24"> <el-form-item label="英文名称"> <el-input type="textarea" v-model="detailFormData.ennam" disabled></el-input> </el-form-item> </c-col> <c-col :span="24"> <el-form-item label="英文地址"> <el-input type="textarea" v-model="detailFormData.enadr" disabled></el-input> </el-form-item> </c-col> </c-col> </c-col> </el-form> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="saveRef">保存</el-button> </span> </el-dialog> </div> </template> <script> import { columnMap } from "./ptapColumn.js"; import { getPtaTableDtat, getPtsptaByInr,getTempExtkey } 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 }, isShowNam: { type: Boolean, default: false }, isShowAddress: { type: Boolean, default: false }, disabledExtkey: { //extkey是否灰显(true:extkey处灰显) type: Boolean, default: false }, disabledDetail: { //details是否灰显(true:details处灰显) type: Boolean, default: false }, disabledNam: { //nam是否灰显(true:nam处灰显) type: Boolean, default: false }, disabledAdrblk: { //Adrblk是否灰显(true:Adrblk处灰显) type: Boolean, default: false }, }, data() { return { dialogTitle: "", // 弹框标题 dialogTableVisible: false, // 控制弹框的展示和隐藏 tableLoading: false, total: 0, isDisabled: false, currentPage: 1, // 页数 pageSizes: [5, 10, 20, 30, 40, 50, 100], pageSize: 5, // 条数 tableList: [], tableColumn: [], detailVisible: false, //详情数据 detailFormData:{ ptaptyextkey:'', nam:'', adr:'', ennam:'', enadr:'', ref:'' }, isChangeRef: false, markExtkey:"", // 是否触发校验(客户号的有效性) isCheckPtainr: false, // 临时地址相关(名称和地址) tempRolVisible: false, tempFormData: { name: '', address: '' }, tempRolRules:{ name:[ { validator: (rule, value, callback) => { if (this.tempFormData.name && this.tempFormData.address) { if(this.tempFormData.name.length + this.tempFormData.address.length > 141) { callback(new Error('名址总长度不能超过140')) } else { callback() } } else { callback() } }, }, { required: false, message: '请输入名称', trigger: 'blur' }, ], address: [ ], }, }; }, watch: {}, 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`]); }) } }, // 清除 clear() { this.$emit("clear"); }, // extkey输入框失焦 handleExtkeyBlur (e) { let extkey = this.model[this.argadr.grp][this.argadr.rol].pts.extkey if (extkey && extkey !== this.markExtkey) { this.showPtapDialog() } }, //显示详情 showDerail(){ this.detailVisible = true //给详情弹框赋值 this.detailFormData.ptaptyextkey=this.model[this.argadr.grp][this.argadr.rol].pts.extkey this.detailFormData.nam=this.model[this.argadr.grp][this.argadr.rol].pts.nam this.detailFormData.adr=this.model[this.argadr.grp][this.argadr.rol].pts.adr this.detailFormData.ennam=this.model[this.argadr.grp][this.argadr.rol].pts.ennam this.detailFormData.enadr=this.model[this.argadr.grp][this.argadr.rol].pts.enadr this.detailFormData.ref=this.model[this.argadr.grp][this.argadr.rol].pts.ref }, // 关闭弹框 handleCloseDialogTable () { this.dialogTableVisible = false; this.$nextTick(()=>{ this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]); }) }, handletempRolClose(){ this.tempRolVisible = false if(!this.model[this.argadr.grp][this.argadr.rol].pts.ptainr){ this.tempFormData.name = '' this.tempFormData.address = '' } this.$nextTick(()=>{ this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]); }) }, async dbClickRow(row, column, event) { let params = { inr: row.ptainr, rol: this.argadr.rol }; const response = await getPtsptaByInr(params, this.moduleRouter()); if (response.respCode == SUCCESS) { // 赋值 this.model[this.argadr.grp][this.argadr.rol].pts.nam = response.data.nam this.model[this.argadr.grp][this.argadr.rol].pts.extkey = row.ptaobjkey 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.nam = response.data.nam; this.model[this.argadr.grp][this.argadr.rol].pts.adr = response.data.adr; this.model[this.argadr.grp][this.argadr.rol].pts.adrblk = response.data.ennamadr; // 此处为了回填数据时回调 this.$emit('handleChange',{ rowData: row, }) this.isDisabled = true this.$nextTick(()=>{ this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]); }) } this.dialogTableVisible = false; }, // 获取弹框内的table数据 async getTableData(value) { return new Promise(async (resolve) => { this.tableLoading = true; this.tableList = []; // 获取table的表格数据 let params = { ptytyp: this.ptytyp, extkey: value || "", bchinr: this.bchinr, pageNum: this.currentPage, pageSize: this.pageSize }; const loading = this.loading(); const res = await getPtaTableDtat(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, })); resolve(this.tableList) } } this.tableLoading = false; //接口掉完变成false }) }, saveRef(){ // 打开弹框并且修改过参考号才给其添加modifySet和markSet if (this.isChangeRef) { this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts, 'ref') } this.model[this.argadr.grp][this.argadr.rol].pts.ref = this.detailFormData.ref this.detailVisible=false this.$nextTick(() => { this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]); }) }, // 地址和名称的两栏聚焦 handleFocus (type) { switch (type) { case 'nam': this.tempRolVisible = true this.tempFormData.address = this.model[this.argadr.grp][this.argadr.rol].pts.adrblk this.tempFormData.name = this.model[this.argadr.grp][this.argadr.rol].pts.nam; break; case 'adr': this.tempRolVisible = true this.tempFormData.name = this.model[this.argadr.grp][this.argadr.rol].pts.nam; this.tempFormData.address = this.model[this.argadr.grp][this.argadr.rol].pts.adrblk break; default: return; } }, buildTemp () { this.$refs['tempForm'].validate((validStatic) => { if (validStatic) { this.queryTempExtkey(true) this.tempRolVisible = false } }) this.modifyPtap() }, // 点击确定 tempSure () { this.$refs['tempForm'].validate((validStatic) => { if (validStatic) { this.queryTempExtkey(false) this.tempRolVisible = false } }) this.modifyPtap() this.$nextTick(()=>{ this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]); }) }, handleInput(){ this.isChangeRef = true }, async queryTempExtkey (flg) { let language = 'EN' let params = { rol: this.argadr.rol, flg, typflg: this.typflg, language, ptainr: this.model[this.argadr.grp][this.argadr.rol].pts.ptainr, namelc: this.tempFormData.name, adrelc: this.tempFormData.address, } const loading = this.loading(); let res = await getTempExtkey(params, this.moduleRouter()) loading.close(); if (res.respCode == SUCCESS) { this.model[this.argadr.grp][this.argadr.rol].pts.extkey = res.data.extkey this.$nextTick(()=>{ this.root.$refs['modelForm'].validateField([`${this.argadr.grp}.${this.argadr.rol}.pts.extkey`]); }) // 备份的extkey this.markExtkey = res.data.extkey this.model[this.argadr.grp][this.argadr.rol].pts.rol = res.data.rol.toUpperCase() this.model[this.argadr.grp][this.argadr.rol].pts.ptainr = res.data.ptainr this.model[this.argadr.grp][this.argadr.rol].pts.ptyinr = res.data.ptyinr this.model[this.argadr.grp][this.argadr.rol].pts.nam = res.data.nam this.model[this.argadr.grp][this.argadr.rol].pts.adrblk = res.data.pts.adrblk this.model[this.argadr.grp][this.argadr.rol].pts.nam = res.data.pts.nam this.model[this.argadr.grp][this.argadr.rol].pts.adr = res.data.pts.adr this.model[this.argadr.grp][this.argadr.rol].pts.ennam = res.data.pts.ennam this.model[this.argadr.grp][this.argadr.rol].pts.enadr = res.data.pts.enadr //置灰名址 this.isDisabled = true; // 此处为了回填数据时回调 this.$emit('handleChange',{ rowData: res.data }) } else { this.model[this.argadr.grp][this.argadr.rol].pts.extkey = '' this.$message.error(res.respMsg) } }, //extkey清空时 extkeyInput(){ if (!this.model[this.argadr.grp][this.argadr.rol].pts.extkey) { this.model[this.argadr.grp][this.argadr.rol].pts.nam='' 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.nam='' this.model[this.argadr.grp][this.argadr.rol].pts.adr='' this.model[this.argadr.grp][this.argadr.rol].pts.adrblk='' this.model[this.argadr.grp][this.argadr.rol].pts.ptainr='' this.model[this.argadr.grp][this.argadr.rol].pts.ptyinr='' this.markExtkey = '' // this.disabledDetail = true this.isDisabled = false // 内容被清空,触发清空事件 this.clear() } this.isCheckPtainr = false }, extkeyChange () { this.modifyPtap() }, modifyPtap(){ this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts, 'extkey') this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts,'nam') this.customAddModify(this.model[this.argadr.grp][this.argadr.rol].pts,'adrblk') }, }, }; </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; } } .is-show-card { border: none!important; box-shadow: none!important; margin-bottom: 0!important; /deep/ .el-card__body { padding: 0!important; } } </style>