| | |
| | | icon="el-icon-download" |
| | | size="small" |
| | | @click="Batchentry" |
| | | >批量录入人员</el-button |
| | | >批量导入绩效人员</el-button |
| | | > |
| | | </div> |
| | | </el-col> |
| | |
| | | <el-table-column |
| | | prop="beneficiaryname" |
| | | align="center" |
| | | label="绩效人员或单位" |
| | | label="绩效人员/单位" |
| | | width="250" |
| | | > |
| | | <template slot-scope="scope"> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="isunit" |
| | | align="center" |
| | | label="人员类别" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type="scope.row.isunit == 1 ? 'warning' : 'success'" |
| | | size="mini" |
| | | >{{ scope.row.isunit == 1 ? "单位" : "个人" }}</el-tag |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="idcardno" |
| | | align="center" |
| | | label="身份证号" |
| | | width="200" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.idcardno" placeholder="身份证号" /> |
| | | <el-input |
| | | v-model="scope.row.idcardno" |
| | | :disabled="scope.row.isunit == 1" |
| | | :placeholder=" |
| | | scope.row.isunit == 1 ? '单位无需填写' : '身份证号' |
| | | " |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | |
| | | :visible.sync="showSelectionDialog" |
| | | :close-on-click-modal="false" |
| | | :title="'绩效人员(含所在单位)账号选择'" |
| | | width="500px" |
| | | width="560px" |
| | | style="text-align: center" |
| | | v-loading="loading" |
| | | > |
| | | <el-form ref="funddetailForm" :model="funddetailForm"> |
| | | <el-row> |
| | | <el-form-item label="请输入选择:" prop="unitno" label-width="120px"> |
| | | <el-form-item label="筛查人员:" prop="userKey" label-width="120px"> |
| | | <el-select |
| | | v-model="funddetailForm.userName" |
| | | v-model="funddetailForm.userKey" |
| | | filterable |
| | | remote |
| | | reserve-keyword |
| | | clearable |
| | | allow-create |
| | | default-first-option |
| | | placeholder="请输入姓名或单位名称" |
| | | :remote-method="remoteMethod" |
| | | :loading="loadingperformance" |
| | | :filter-method="filterPersonOption" |
| | | placeholder="输入 姓名 / 单位 / 工号 / 身份证后4位 筛查,也可直接输入姓名" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in optionsperformance" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | :key="item.id" |
| | | :label="personOptionLabel(item)" |
| | | :value="item.id" |
| | | > |
| | | <span style="float: left">{{ item.username }}</span> |
| | | <span style="float: right; color: #8492a6; font-size: 13px"> |
| | | {{ |
| | | item.isUnitPerson ? "单位" : "工号 " + (item.userno || "-") |
| | | }}{{ item.unitname ? " · " + item.unitname : "" }} |
| | | </span> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row style="text-align: left; padding-left: 120px"> |
| | | <span style="color: #909399; font-size: 12px"> |
| | | 候选为人员类型含「参与绩效」的人员;选中后身份证号、银行账号等自动带出,单位为单位的行不校验身份证号。 |
| | | </span> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | |
| | | v-if="this.previewpdf && pdfimgsrcList.length" |
| | | class="pdfimgmin" |
| | | > |
| | | <!-- <img :src="pdfimg" /> --> |
| | | <el-image |
| | | style="width: 95%; height: 90%" |
| | | :src="pdfimg" |
| | | :preview-src-list="pdfimgsrcList" |
| | | > |
| | | <!-- <div slot="error" class="image-slot"> |
| | | <i class="el-icon-picture-outline"></i> |
| | | </div> --> |
| | | </el-image> |
| | | @click="handleImageClick(0)" |
| | | /> |
| | | <custom-image-viewer |
| | | :url-list="pdfimgsrcList" |
| | | :initial-index="currentIndex" |
| | | :visible="viewerVisible" |
| | | @update:visible="viewerVisible = $event" |
| | | @close="handleViewerClose" |
| | | /> |
| | | </div> |
| | | <div v-else class="pdfimgmins">{{ hintitle }}</div> |
| | | </div> |
| | |
| | | v-if="this.previewpdf && invoicepdfimgsrcList.length" |
| | | class="pdfimgmin" |
| | | > |
| | | <!-- <img :src="pdfimg" /> --> |
| | | <el-image |
| | | style="width: 95%; height: 90%" |
| | | :src="invoicepdfimg" |
| | | :preview-src-list="invoicepdfimgsrcList" |
| | | > |
| | | <!-- <div slot="error" class="image-slot"> |
| | | <i class="el-icon-picture-outline"></i> |
| | | </div> --> |
| | | </el-image> |
| | | @click="invoiceHandleImageClick(0)" |
| | | /> |
| | | <custom-image-viewer |
| | | :url-list="invoicepdfimgsrcList" |
| | | :initial-index="invoiceCurrentIndex" |
| | | :visible="invoiceViewerVisible" |
| | | @update:visible="invoiceViewerVisible = $event" |
| | | @close="invoiceHandleViewerClose" |
| | | /> |
| | | </div> |
| | | <div v-else class="pdfimgmins">{{ hintitle }}</div> |
| | | </div> |
| | |
| | | <el-radio-button :label="70">年度绩效</el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <div style="margin-bottom: 12px; margin-left: 10px;"> |
| | | <el-input |
| | | v-model="personKeyword" |
| | | clearable |
| | | size="small" |
| | | prefix-icon="el-icon-search" |
| | | placeholder="输入 姓名 / 单位 / 工号 / 身份证后4位 筛查" |
| | | style="width: 330px" |
| | | /> |
| | | <span style="margin-left: 10px; color: #909399; font-size: 12px"> |
| | | 共 {{ filteredCityOptions.length }} 人 |
| | | </span> |
| | | </div> |
| | | <div style="max-height: 330px; overflow-y: auto"> |
| | | <el-checkbox |
| | | :indeterminate="isIndeterminate" |
| | | v-model="checkAll" |
| | | @change="handleCheckAllChange" |
| | | >全选</el-checkbox |
| | | >全选(当前筛查结果)</el-checkbox |
| | | > |
| | | <div style="margin: 15px 0;"></div> |
| | | <el-checkbox-group |
| | |
| | | > |
| | | <el-checkbox |
| | | border |
| | | v-for="city in cityOptions" |
| | | v-for="city in filteredCityOptions" |
| | | :label="city" |
| | | :key="city.userNo" |
| | | >{{ city.userName }}</el-checkbox |
| | | :key="city.id" |
| | | >{{ city.username }}{{ city.isUnitPerson ? "(单位)" : "" |
| | | }}{{ city.unitname ? " · " + city.unitname : "" }}</el-checkbox |
| | | > |
| | | </el-checkbox-group> |
| | | </div> |
| | |
| | | listOrganization, |
| | | getOrganization, |
| | | listReportname, |
| | | listperformance, |
| | | listUser |
| | | } from "@/api/project/organization"; |
| | | |
| | |
| | | import Li_area_select from "@/components/Address"; |
| | | import OrgSelecter from "@/views/project/components/orgselect"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import { moneySum, moneyAdd, moneySub, moneyRound } from "@/utils/money"; |
| | | import CustomImageViewer from "@/components/CustomImageViewer"; |
| | | |
| | | export default { |
| | | //import引入的组件需要注入到对象中才能使用 |
| | | components: { |
| | | Li_area_select, |
| | | OrgSelecter |
| | | OrgSelecter, |
| | | CustomImageViewer |
| | | }, |
| | | name: "fundApply", |
| | | |
| | |
| | | feeUnitList: [], |
| | | batchdialogVisible: false, |
| | | itemlist: [], |
| | | //绩效人员候选(人员类型含「参与绩效」的人员,来自 service_externalperson) |
| | | cityOptions: [], |
| | | //批量录入弹框的筛查关键字 |
| | | personKeyword: "", |
| | | checkAll: false, |
| | | checkedCities: [], |
| | | Personnelforname: null, |
| | |
| | | baselisttages: [ |
| | | { |
| | | id: 1, |
| | | name: "待申请材料" |
| | | name: "待审核" |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: "审核通过等待邮寄纸质材料" |
| | | name: "预审通过等待纸质材料" |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: "已收到报销材料" |
| | | name: "已收到纸质材料" |
| | | } |
| | | ], |
| | | PerformanceType: [ |
| | |
| | | |
| | | funddetailForm: { |
| | | index: null, |
| | | userKey: null, |
| | | userName: null, |
| | | beneficiaryname: null, |
| | | beneficiaryno: null, |
| | |
| | | pdfimgsrcList: [], |
| | | pdfVisible: false, |
| | | previewpdf: false, |
| | | viewerVisible: false, |
| | | currentIndex: 0, |
| | | invoiceViewerVisible: false, |
| | | invoiceCurrentIndex: 0, |
| | | hintitle: "请上传文件后查看", |
| | | atpresent: "", |
| | | Savereminder: false, //提醒保存弹框 |
| | |
| | | }, |
| | | |
| | | //监听属性 类似于data概念 |
| | | computed: {}, |
| | | computed: { |
| | | //批量录入弹框:按关键字(姓名/单位/工号/身份证后4位)筛查后的候选人 |
| | | filteredCityOptions() { |
| | | const kw = (this.personKeyword || "").trim().toLowerCase(); |
| | | if (!kw) { |
| | | return this.cityOptions; |
| | | } |
| | | return this.cityOptions.filter(item => this.personMatchKeyword(item, kw)); |
| | | } |
| | | }, |
| | | //监控data中的数据变化 |
| | | watch: {}, |
| | | //方法集合 |
| | |
| | | ); |
| | | return; |
| | | } |
| | | if (tempDetail.idcardno == null) { |
| | | // 单位行(isunit=1)不需要身份证号 |
| | | if ( |
| | | tempDetail.isunit != 1 && |
| | | (tempDetail.idcardno == null || |
| | | String(tempDetail.idcardno).trim() === "") |
| | | ) { |
| | | this.$modal.msgWarning( |
| | | "服务项目表中,第" + |
| | | (k + 1).toString() + |
| | |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | //明细重复校验:同一人员/单位不允许出现多行 |
| | | const detailNameMap = {}; |
| | | for (let k = 0; k < this.rbDetails.length; k++) { |
| | | const nm = String(this.rbDetails[k].beneficiaryname || "").trim(); |
| | | if (!nm) { |
| | | continue; |
| | | } |
| | | if (detailNameMap[nm]) { |
| | | this.$modal.msgWarning( |
| | | "服务项目表中,人员名称:" + nm + " 重复,请核对后再提交保存!" |
| | | ); |
| | | return; |
| | | } |
| | | detailNameMap[nm] = true; |
| | | } |
| | | |
| | | //处理明细 |
| | |
| | | this.personlist = res.rows; |
| | | for (let j = 0; j < this.personlist.length; j++) { |
| | | //获取费用报销机构列表 |
| | | if (this.personlist[j].usertype == "org") { |
| | | if (this.hasUserType(this.personlist[j].usertype, "org")) { |
| | | this.feeUnitList.push({ |
| | | id: this.personlist[j].id, |
| | | reportNo: this.personlist[j].userno, |
| | |
| | | }); |
| | | } |
| | | //专家人员列表 |
| | | else if (res.rows[j].usertype == "expert") { |
| | | else if (this.hasUserType(res.rows[j].usertype, "expert")) { |
| | | this.expertlist.push({ |
| | | expertNo: this.personlist[j].id, |
| | | exportName: this.personlist[j].username |
| | |
| | | } |
| | | }, |
| | | |
| | | //税前扣税算税后 |
| | | //税前扣税算税后(金额一律走精确运算) |
| | | chargeSum(row, type) { |
| | | let targetValue = 0; |
| | | for (let i = 0; i < this.rbDetails.length; i++) { |
| | | if (!this.rbDetails[i].amount) { |
| | | this.rbDetails[i].amount = 0; |
| | |
| | | if (!this.rbDetails[i].taxamount) { |
| | | this.rbDetails[i].taxamount = 0; |
| | | } |
| | | this.rbDetails[i].taxedamount = ( |
| | | parseFloat(this.rbDetails[i].amount) - |
| | | parseFloat(this.rbDetails[i].taxamount) |
| | | //税前 - 扣税 = 税后(浮点相减会残留极小尾差,导致出现 -0.00) |
| | | this.rbDetails[i].taxedamount = moneySub( |
| | | this.rbDetails[i].amount, |
| | | this.rbDetails[i].taxamount |
| | | ).toFixed(2); |
| | | targetValue += parseFloat(this.rbDetails[i].amount); // 假设每个对象中的特定值存储在'specificValue'属性下 |
| | | console.log(this.rbDetails[i].taxedamount, "合计"); |
| | | } |
| | | console.log(targetValue, "合计"); |
| | | this.form.pretaxcost = targetValue; |
| | | //合计必须精确累加,否则会写入 form.pretaxcost 并落库 |
| | | this.form.pretaxcost = moneySum(this.rbDetails, "amount"); |
| | | }, |
| | | //税后扣税算税前 |
| | | //税后扣税算税前(金额一律走精确运算) |
| | | queenchargeSum(row, type) { |
| | | for (let i = 0; i < this.rbDetails.length; i++) { |
| | | if (!this.rbDetails[i].amount) { |
| | |
| | | if (!this.rbDetails[i].taxamount) { |
| | | this.rbDetails[i].taxamount = 0; |
| | | } |
| | | this.rbDetails[i].amount = |
| | | parseFloat(this.rbDetails[i].taxamount) + |
| | | parseFloat(this.rbDetails[i].taxedamount); |
| | | //扣税 + 税后 = 税前(必须精确相加并归一化到 2 位,否则会残留长小数) |
| | | this.rbDetails[i].amount = moneyRound( |
| | | moneyAdd(this.rbDetails[i].taxamount, this.rbDetails[i].taxedamount) |
| | | ); |
| | | } |
| | | }, |
| | | |
| | |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | //明细重复校验:同一人员/单位不允许出现多行 |
| | | const detailNameMap = {}; |
| | | for (let k = 0; k < this.rbDetails.length; k++) { |
| | | const nm = String(this.rbDetails[k].beneficiaryname || "").trim(); |
| | | if (!nm) { |
| | | continue; |
| | | } |
| | | if (detailNameMap[nm]) { |
| | | this.$modal.msgWarning( |
| | | "服务项目表中,人员名称:" + nm + " 重复,请核对后再提交保存!" |
| | | ); |
| | | return; |
| | | } |
| | | detailNameMap[nm] = true; |
| | | } |
| | | |
| | | //处理明细 |
| | |
| | | } |
| | | }); |
| | | }, |
| | | // 全选 |
| | | // 全选(按当前筛查结果) |
| | | handleCheckAllChange(val) { |
| | | this.checkedCities = val ? this.cityOptions : []; |
| | | this.checkedCities = val ? this.filteredCityOptions.slice() : []; |
| | | this.isIndeterminate = false; |
| | | }, |
| | | handleCheckedCitiesChange(value) { |
| | | let checkedCount = value.length; |
| | | this.checkAll = checkedCount === this.cityOptions.length; |
| | | this.checkAll = |
| | | this.filteredCityOptions.length > 0 && |
| | | checkedCount === this.filteredCityOptions.length; |
| | | this.isIndeterminate = |
| | | checkedCount > 0 && checkedCount < this.cityOptions.length; |
| | | checkedCount > 0 && checkedCount < this.filteredCityOptions.length; |
| | | }, |
| | | // 手动计算 |
| | | Manualcalculationfn() { |
| | |
| | | }, |
| | | // 批量录入点击 |
| | | Batchentry() { |
| | | // ethical |
| | | this.listperformance(); |
| | | this.personKeyword = ""; |
| | | this.checkedCities = []; |
| | | this.checkAll = false; |
| | | this.isIndeterminate = false; |
| | | this.batchdialogVisible = true; |
| | | }, |
| | | /** |
| | | * 载入绩效人员候选。 |
| | | * 改造前取自人员分组表(service_externalperson_group,group_id=1); |
| | | * 2026-09-27 起改为「人员类型(UserType,可多选)含 参与绩效」的外围人员账户, |
| | | * 不再依赖分组表。 |
| | | */ |
| | | listperformance() { |
| | | listperformance(1).then(res => { |
| | | this.cityOptions = res.data; |
| | | this.listperformancea = []; |
| | | this.listperformancea = this.cityOptions.map(item => { |
| | | return { value: item.userName, label: item.userName }; |
| | | }); |
| | | listExternalperson({ |
| | | usertype: "performance", |
| | | pageNum: 1, |
| | | pageSize: 10000 |
| | | }).then(res => { |
| | | const rows = res.rows || []; |
| | | this.cityOptions = rows |
| | | //只保留启用账号(与改造前分组表接口的 userstatus=1 口径一致)。 |
| | | //注意:ServiceExternalperson 实体没有 del_flag 字段,接口不返回该字段, |
| | | //不能用它做过滤,否则 undefined == 0 会把全部候选人滤空。 |
| | | .filter( |
| | | item => |
| | | item.userstatus === undefined || |
| | | item.userstatus === null || |
| | | item.userstatus == 1 |
| | | ) |
| | | .map(item => { |
| | | return Object.assign({}, item, { |
| | | isUnitPerson: this.hasUserType(item.usertype, "org") |
| | | }); |
| | | }); |
| | | }); |
| | | }, |
| | | /** 人员类型(多值,逗号分隔)是否包含指定类型 */ |
| | | hasUserType(usertype, code) { |
| | | if (!usertype) { |
| | | return false; |
| | | } |
| | | return ( |
| | | String(usertype) |
| | | .split(",") |
| | | .map(t => t.trim()) |
| | | .indexOf(code) > -1 |
| | | ); |
| | | }, |
| | | /** 关键字命中判断:姓名 / 单位 / 工号 / 身份证后4位 */ |
| | | personMatchKeyword(item, kw) { |
| | | const idcard = String(item.idcardno || ""); |
| | | return ( |
| | | String(item.username || "") |
| | | .toLowerCase() |
| | | .indexOf(kw) > -1 || |
| | | String(item.unitname || "") |
| | | .toLowerCase() |
| | | .indexOf(kw) > -1 || |
| | | String(item.userno || "") |
| | | .toLowerCase() |
| | | .indexOf(kw) > -1 || |
| | | (idcard.length >= 4 && idcard.slice(-4).indexOf(kw) > -1) |
| | | ); |
| | | }, |
| | | /** 识别人员类别:单位(人员类型含 org)还是个人 */ |
| | | isUnitPerson(item) { |
| | | return !!(item && this.hasUserType(item.usertype, "org")); |
| | | }, |
| | | /** 选择框下拉项文案:姓名(单位) */ |
| | | personOptionLabel(item) { |
| | | return ( |
| | | (item.username || "") + |
| | | (item.unitname ? "(" + item.unitname + ")" : "") + |
| | | (item.isUnitPerson ? " - 单位" : "") |
| | | ); |
| | | }, |
| | | /** 选择框候选:空关键字返回全部,否则按关键字筛查 */ |
| | | filterPersonCandidates(kw) { |
| | | if (!kw) { |
| | | return this.cityOptions.slice(); |
| | | } |
| | | return this.cityOptions.filter(item => this.personMatchKeyword(item, kw)); |
| | | }, |
| | | /** 选择框本地筛查(姓名/单位/工号/身份证后4位) */ |
| | | filterPersonOption(query) { |
| | | const kw = (query || "").trim().toLowerCase(); |
| | | this.optionsperformance = this.filterPersonCandidates(kw); |
| | | // 已选中项要保留在下拉里,否则回显会空白 |
| | | const picked = this.getPickedPerson(this.funddetailForm.userKey); |
| | | if (picked && this.optionsperformance.indexOf(picked) === -1) { |
| | | this.optionsperformance = [picked].concat(this.optionsperformance); |
| | | } |
| | | }, |
| | | /** 按唯一键(人员 ID)取候选;手工输入的姓名返回 null */ |
| | | getPickedPerson(key) { |
| | | if (key === null || key === undefined || key === "") { |
| | | return null; |
| | | } |
| | | return ( |
| | | this.cityOptions.find(item => String(item.id) === String(key)) || null |
| | | ); |
| | | }, |
| | | // 确认录入 |
| | | BatchentryFn() { |
| | |
| | | if (!this.rbDetails[0].applytype) { |
| | | this.rbDetails = []; |
| | | } |
| | | // 明细中已有的人员姓名,用于重复提醒(与伦理专家费页的判重口径一致) |
| | | const existed = {}; |
| | | this.rbDetails.forEach(row => { |
| | | if (row.beneficiaryname) { |
| | | existed[String(row.beneficiaryname).trim()] = true; |
| | | } |
| | | }); |
| | | |
| | | const duplicated = []; |
| | | this.checkedCities.forEach(item => { |
| | | const nameKey = String(item.username || "").trim(); |
| | | if (nameKey && existed[nameKey]) { |
| | | duplicated.push(item.username); |
| | | return; |
| | | } |
| | | if (nameKey) { |
| | | existed[nameKey] = true; |
| | | } |
| | | const isunit = this.isUnitPerson(item); |
| | | let rowData = { |
| | | orderno: null, |
| | | fundid: null, |
| | | beneficiaryname: item.userName, |
| | | beneficiaryno: item.usertNo, |
| | | beneficiaryname: item.username, |
| | | beneficiaryno: item.userno, |
| | | isunit: isunit ? 1 : 0, |
| | | unitname: item.unitname, |
| | | unitno: null, |
| | | unitno: item.unitno, |
| | | uintuserno: null, |
| | | title: item.title, |
| | | idcardtype: null, |
| | | idcardno: item.idcrad, |
| | | idcardno: isunit ? "" : item.idcardno, |
| | | sex: null, |
| | | familyrelations: null, |
| | | phone: null, |
| | | depositbank: item.depositBank, |
| | | bankcardno: item.bankCardNo, |
| | | phone: item.telephone, |
| | | depositbank: item.depositbank, |
| | | bankcardno: item.bankcardno, |
| | | branchbankname: item.branchbankname, |
| | | annexbankcard: null, |
| | | annexregistform: null, |
| | |
| | | this.calculateTax(); |
| | | this.batchdialogVisible = false; |
| | | this.checkedCities = []; |
| | | if (duplicated.length) { |
| | | this.$modal.msgWarning( |
| | | "以下人员在明细中已存在,已跳过重复添加:" + duplicated.join("、") |
| | | ); |
| | | } |
| | | console.log(this.rowfeeItemTypes); |
| | | }, |
| | | //新增一行 |
| | |
| | | fundid: null, |
| | | beneficiaryname: null, |
| | | beneficiaryno: null, |
| | | isunit: 0, |
| | | unitname: null, |
| | | unitno: null, |
| | | uintuserno: null, |
| | |
| | | }); |
| | | //全部删除后添加一条新行 |
| | | }, |
| | | //专家/医疗机构/费用报销机构选择 |
| | | //绩效人员/单位选择:打开时预填当前行已选人员,避免"直接确定"把已有姓名清空 |
| | | ShowDetailDialog(spoce, showType) { |
| | | this.spocewl = spoce; |
| | | this.selectionType = showType; |
| | | this.selectionType = this.experthear; |
| | | this.expertfrom = "1"; |
| | | this.funddetailForm.index = spoce.$index; |
| | | this.funddetailForm.beneficiaryno = spoce.row.beneficiaryno; |
| | | this.funddetailForm.beneficiaryname = spoce.row.beneficiaryname; |
| | | this.funddetailForm.unitno = spoce.row.unitno; |
| | | this.funddetailForm.unitname = spoce.row.unitname; |
| | | this.funddetailForm.expertname = ""; |
| | | this.funddetailForm.expertidcardno = ""; |
| | | this.funddetailForm.expertunitno = ""; |
| | | this.funddetailForm.expertunitname = ""; |
| | | this.funddetailForm.experttitle = ""; |
| | | this.funddetailForm.expertdepositbank = ""; |
| | | this.funddetailForm.expertbankcardno = ""; |
| | | //当前行已选人员的回填:先按人员编号匹配,匹配不到再按姓名匹配 |
| | | let cur = |
| | | this.cityOptions.find( |
| | | item => String(item.userno) === String(spoce.row.beneficiaryno) |
| | | ) || null; |
| | | if (!cur && spoce.row.beneficiaryname) { |
| | | cur = |
| | | this.cityOptions.find( |
| | | item => item.username === spoce.row.beneficiaryname |
| | | ) || null; |
| | | } |
| | | this.funddetailForm.userKey = cur |
| | | ? cur.id |
| | | : spoce.row.beneficiaryname || null; |
| | | this.funddetailForm.userName = spoce.row.beneficiaryname || null; |
| | | //打开时展示全量候选,便于直接浏览筛查 |
| | | this.optionsperformance = this.cityOptions.slice(); |
| | | this.showSelectionDialog = true; |
| | | }, |
| | | |
| | | //专家/医疗机构/费用报销机构选择 |
| | | /** |
| | | * 确定选择:按唯一键(人员 ID)匹配候选, |
| | | * 自动带出身份证号、银行账号、开户银行、电话、职称、人员编号、单位; |
| | | * 单位(人员类型含 org)不写身份证号;手工输入的姓名不做带出。 |
| | | */ |
| | | ConfirmDetailDialog() { |
| | | let tempIndex = this.funddetailForm.index; |
| | | let tempExpertName = this.funddetailForm.userName; |
| | | let singleDetail = this.rbDetails[tempIndex]; |
| | | const tempIndex = this.funddetailForm.index; |
| | | const singleDetail = this.rbDetails[tempIndex]; |
| | | const key = this.funddetailForm.userKey; |
| | | |
| | | //从专家列表获取信息 |
| | | this.cityOptions.map(res => { |
| | | if (tempExpertName == res.userName) { |
| | | singleDetail.beneficiaryno = res.userno; |
| | | singleDetail.bankcardno = res.bankCardNo; |
| | | singleDetail.branchbankname = res.branchbankname; |
| | | singleDetail.depositbank = res.depositBank; |
| | | singleDetail.idcardno = res.idcardNo; |
| | | singleDetail.phone = res.telephone; |
| | | singleDetail.title = res.title; |
| | | singleDetail.unitname = res.unitname; |
| | | singleDetail.unitno = parseInt(res.unitno); |
| | | } |
| | | }); |
| | | singleDetail.beneficiaryname = tempExpertName; |
| | | this.rbDetails[tempIndex] = singleDetail; |
| | | this.showSelectionDialog = false; |
| | | }, |
| | | remoteMethod(query) { |
| | | console.log(this.listperformancea); |
| | | if (query !== "") { |
| | | this.loadingperformance = true; |
| | | setTimeout(() => { |
| | | this.loadingperformance = false; |
| | | this.optionsperformance = this.listperformancea.filter(item => { |
| | | return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1; |
| | | }); |
| | | }, 200); |
| | | } else { |
| | | this.optionsperformance = []; |
| | | if (key === null || key === undefined || key === "") { |
| | | this.$modal.msgWarning("请先筛查并选择绩效人员,或直接输入人员姓名!"); |
| | | return; |
| | | } |
| | | |
| | | const person = this.getPickedPerson(key); |
| | | if (person) { |
| | | // 命中人员库:自动带出全部信息 |
| | | const isunit = this.isUnitPerson(person); |
| | | singleDetail.beneficiaryname = person.username; |
| | | singleDetail.beneficiaryno = person.userno; |
| | | singleDetail.isunit = isunit ? 1 : 0; |
| | | singleDetail.idcardno = isunit ? "" : person.idcardno; |
| | | singleDetail.bankcardno = person.bankcardno; |
| | | singleDetail.branchbankname = person.branchbankname; |
| | | singleDetail.depositbank = person.depositbank; |
| | | singleDetail.phone = person.telephone; |
| | | singleDetail.title = person.title; |
| | | singleDetail.unitname = person.unitname; |
| | | singleDetail.unitno = person.unitno; |
| | | } else { |
| | | // 手工输入的人员:只写姓名,身份证号/银行账号由经办人填写 |
| | | singleDetail.beneficiaryname = String(key); |
| | | singleDetail.isunit = 0; |
| | | this.$modal.msgWarning( |
| | | "人员库中未找到「" + |
| | | key + |
| | | "」,已按手工录入处理,请自行填写身份证号、银行账号等信息。" |
| | | ); |
| | | } |
| | | |
| | | this.$set(this.rbDetails, tempIndex, singleDetail); |
| | | this.showSelectionDialog = false; |
| | | }, |
| | | handleUploadError() {}, |
| | | remove(file, fileList) { |
| | |
| | | destroyed() { |
| | | window.removeEventListener("beforeunload", e => this.beforeunloadFn(e)); |
| | | }, //生命周期 - 销毁完成 |
| | | activated() {} //如果页面有keep-alive缓存功能,这个函数会触发 |
| | | activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发 |
| | | |
| | | // 图片预览 |
| | | handleImageClick(index) { |
| | | this.currentIndex = index; |
| | | this.viewerVisible = true; |
| | | }, |
| | | handleViewerClose() { |
| | | this.viewerVisible = false; |
| | | }, |
| | | invoiceHandleImageClick(index) { |
| | | this.invoiceCurrentIndex = index; |
| | | this.invoiceViewerVisible = true; |
| | | }, |
| | | invoiceHandleViewerClose() { |
| | | this.invoiceViewerVisible = false; |
| | | }, |
| | | }; |
| | | </script> |
| | | |