From 0e10e10157b90002b99996914eaf1e5574924ddf Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期一, 12 十月 2026 11:15:50 +0800
Subject: [PATCH] 修改了报销校验
---
src/views/project/externalperson/index.vue | 402 +++++++++++++++++++++-----------------------------------
1 files changed, 152 insertions(+), 250 deletions(-)
diff --git a/src/views/project/externalperson/index.vue b/src/views/project/externalperson/index.vue
index 2e594a1..af8db6b 100644
--- a/src/views/project/externalperson/index.vue
+++ b/src/views/project/externalperson/index.vue
@@ -1,148 +1,65 @@
<template>
<div class="app-container">
- <el-form
- :model="queryParams"
- ref="queryForm"
- :inline="true"
- v-show="showSearch"
- label-width="80px"
- >
- <el-form-item label="璐﹀彿缂栧彿" prop="userno">
- <el-input
- v-model="queryParams.userno"
- placeholder="璇疯緭鍏ヨ处鍙风紪鍙�"
- clearable
- size="small"
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="璐﹀彿鍚嶇О" prop="username">
- <el-input
- v-model="queryParams.username"
- placeholder="璇疯緭鍏ヨ处鍙峰悕绉�"
- clearable
- size="small"
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
+ <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="80px">
+
<el-form-item label="璐﹀彿绫诲埆" prop="usertype">
- <el-select
- v-model="queryParams.usertype"
- placeholder="璇烽�夋嫨璐﹀彿绫诲埆"
- clearable
- size="small"
- >
- <el-option
- v-for="dict in dict.type.sys_UserType"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
+ <el-select v-model="queryParams.usertype" placeholder="璇烽�夋嫨璐﹀彿绫诲埆" clearable size="small">
+ <el-option v-for="dict in dict.type.sys_UserType" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
+ <el-form-item label="璐﹀彿缂栧彿" prop="userno">
+ <el-input v-model="queryParams.userno" placeholder="璇疯緭鍏ヨ处鍙风紪鍙�" clearable size="small"
+ @keyup.enter.native="handleQuery" />
+ </el-form-item>
+ <el-form-item label="璐﹀彿鍚嶇О" prop="username">
+ <el-input v-model="queryParams.username" placeholder="璇疯緭鍏ヨ处鍙峰悕绉�" clearable size="small"
+ @keyup.enter.native="handleQuery" />
+ </el-form-item>
+ <el-form-item label="鎵�鍦ㄥ崟浣�" prop="unitname">
+ <el-input v-model="queryParams.unitname" placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣�" clearable size="small"
+ @keyup.enter.native="handleQuery" />
+ </el-form-item>
<el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="mini"
- @click="handleQuery"
- >鎼滅储</el-button
- >
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
- >閲嶇疆</el-button
- >
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
- <el-button
- type="primary"
- plain
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['project:externalperson:add']"
- >鏂板</el-button
- >
+ <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+ v-hasPermi="['project:externalperson:add']">鏂板</el-button>
</el-col>
<el-col :span="1.5">
- <el-button
- type="success"
- plain
- icon="el-icon-edit"
- size="mini"
- :disabled="single"
- @click="handleUpdate"
- v-hasPermi="['project:externalperson:edit']"
- >淇敼</el-button
- >
+ <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+ v-hasPermi="['project:externalperson:edit']">淇敼</el-button>
</el-col>
<el-col :span="1.5">
- <el-button
- type="danger"
- plain
- icon="el-icon-delete"
- size="mini"
- :disabled="multiple"
- @click="handleDelete"
- v-hasPermi="['project:externalperson:remove']"
- >鍒犻櫎</el-button
- >
+ <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+ v-hasPermi="['project:externalperson:remove']">鍒犻櫎</el-button>
</el-col>
<el-col :span="1.5">
- <el-button
- type="warning"
- plain
- icon="el-icon-download"
- size="mini"
- :loading="exportLoading"
- @click="handleExport"
- v-hasPermi="['project:externalperson:export']"
- >瀵煎嚭</el-button
- >
+ <el-button type="warning" plain icon="el-icon-download" size="mini" :loading="exportLoading"
+ @click="handleExport" v-hasPermi="['project:externalperson:export']">瀵煎嚭</el-button>
</el-col>
- <right-toolbar
- :showSearch.sync="showSearch"
- @queryTable="getList"
- ></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
- <el-table
- v-loading="loading"
- :data="externalpersonList"
- @selection-change="handleSelectionChange"
- >
+ <el-table v-loading="loading" :data="externalpersonList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
- <el-table-column label="璐﹀彿绫诲埆" align="center" prop="usertype">
+ <el-table-column label="璐﹀彿绫诲埆" align="center" prop="usertype" width="220">
<template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_UserType"
- :value="scope.row.usertype"
- />
+ <dict-tag v-for="t in splitUserType(scope.row.usertype)" :key="t"
+ :options="dict.type.sys_UserType" :value="t" />
</template>
</el-table-column>
<el-table-column label="璐﹀彿缂栧彿" align="center" prop="userno" />
<el-table-column label="璐﹀彿鍚嶇О" align="center" prop="username" />
- <el-table-column
- label="韬唤璇佸彿"
- width="200"
- align="center"
- prop="idcardno"
- />
+ <el-table-column label="韬唤璇佸彿" width="200" align="center" prop="idcardno" />
<el-table-column label="鑱岀О" align="center" prop="title">
<template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_professionaltitle"
- :value="scope.row.title"
- /> </template
- ></el-table-column>
- <el-table-column
- label="鍗曚綅鍚嶇О"
- width="250"
- align="center"
- prop="unitname"
- />
+ <dict-tag :options="dict.type.sys_professionaltitle" :value="scope.row.title" /> </template></el-table-column>
+ <el-table-column label="鎵�鍦ㄥ崟浣�" width="250" align="center" prop="unitname" />
<!--
<el-table-column label="鎬у埆" align="center" prop="sex">
<template slot-scope="scope">
@@ -157,68 +74,32 @@
</el-table-column>
<el-table-column label="鑱旂郴鐢佃瘽" width="200" align="center" prop="telephone" />
<el-table-column label="鑱旂郴鍦板潃" width="250" align="center" prop="address" />-->x
- <el-table-column
- label="鎿嶄綔"
- align="center"
- class-name="small-padding fixed-width"
- >
+ <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['project:externalperson:edit']"
- >淇敼</el-button
- >
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- >鍒犻櫎</el-button
- >
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+ v-hasPermi="['project:externalperson:edit']">淇敼</el-button>
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
</template>
</el-table-column>
</el-table>
- <pagination
- v-show="total > 0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
+ <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+ @pagination="getList" />
<!-- 娣诲姞鎴栦慨鏀逛汉鍛�/鍗曚綅璐﹀彿淇℃伅瀵硅瘽妗� -->
- <el-dialog
- :title="title"
- :visible.sync="open"
- width="800px"
- append-to-body
- :close-on-click-modal="false"
- >
+ <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
- <el-col :span="12"
- ><el-form-item label="璐﹀彿绫诲埆" prop="usertype">
- <el-select v-model="form.usertype" placeholder="璇烽�夋嫨璐﹀彿绫诲埆">
- <el-option
- v-for="dict in dict.type.sys_UserType"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
+ <el-col :span="12"><el-form-item label="璐﹀彿绫诲埆" prop="usertype">
+ <el-select v-model="form.usertype" multiple collapse-tags placeholder="璇烽�夋嫨璐﹀彿绫诲埆锛堝彲澶氶�夛級">
+ <el-option v-for="dict in dict.type.sys_UserType" :key="dict.value" :label="dict.label"
+ :value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="璐﹀彿缂栧彿" prop="userno">
- <el-input
- disabled="true"
- v-model="form.userno"
- placeholder="璇疯緭鍏ヨ处鍙风紪鍙�"
- />
+ <el-input disabled="true" v-model="form.userno" placeholder="璇疯緭鍏ヨ处鍙风紪鍙�" />
</el-form-item>
</el-col>
</el-row>
@@ -229,98 +110,59 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item
- label="鍚敤鐘舵��"
- prop="userstatus"
- :disabled="ismanager == false"
- >
- <el-radio-group v-model="form.userstatus">
- <el-radio
- v-for="dict in dict.type.sys_0_1"
- :key="dict.value"
- :label="parseInt(dict.value)"
- >{{ dict.label }}</el-radio
- >
+ <el-form-item label="鍚敤鐘舵��" prop="userstatus" >
+ <el-radio-group v-model="form.userstatus" :disabled="!ismanager">
+ <el-radio v-for="dict in dict.type.sys_0_1" :key="dict.value" :label="parseInt(dict.value)">{{
+ dict.label
+ }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
- <el-row v-if="form.usertype != 'org'">
+ <el-row v-if="!isUnitForm">
<el-col :span="24">
<el-form-item label="韬唤璇佸彿" prop="idcardno">
<el-input v-model="form.idcardno" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" />
</el-form-item>
</el-col>
</el-row>
- <el-row v-if="form.usertype != 'org'"
- ><el-col :span="12">
+ <el-row v-if="!isUnitForm"><el-col :span="12">
<el-form-item label="鎬у埆" prop="sex">
<el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆">
- <el-option
- v-for="dict in dict.type.sys_user_sex"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option> </el-select
- ></el-form-item>
+ <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
+ :value="dict.value"></el-option> </el-select></el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鑱岀О" prop="title">
<el-select v-model="form.title" placeholder="璇烽�夋嫨浜哄憳鑱岀О">
- <el-option
- v-for="dict in dict.type.sys_professionaltitle"
- :key="dict.value"
- :label="dict.label"
- :value="dict.label"
- ></el-option>
+ <el-option v-for="dict in dict.type.sys_professionaltitle" :key="dict.value" :label="dict.label"
+ :value="dict.label"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
- <el-row v-if="form.usertype != 'org'">
+ <el-row v-if="!isUnitForm">
<el-col :span="12">
<el-form-item label="鎵�鍦ㄥ崟浣�" prop="unitname">
- <el-select
- v-model="form.unitno"
- placeholder="鎵�鍦ㄥ崟浣�"
- clearable
- filterable
- allow-create
- style="width: 100%"
- >
- <el-option
- v-for="(spec, index) in unitList"
- :key="index"
- :label="spec.organizationname"
- :value="spec.organizationid"
- ></el-option>
+ <el-select v-model="form.unitno" placeholder="鎵�鍦ㄥ崟浣�" clearable filterable allow-create style="width: 100%">
+ <el-option v-for="(spec, index) in unitList" :key="index" :label="spec.organizationname"
+ :value="spec.organizationid"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鍗曚綅宸ュ彿" prop="personnelunitno">
- <el-input
- v-model="form.personnelunitno"
- placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣嶇殑宸ュ彿"
- />
+ <el-input v-model="form.personnelunitno" placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣嶇殑宸ュ彿" />
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="24"
- ><el-form-item label="寮�鎴烽摱琛�" prop="depositbank">
- <el-input
- v-model="form.depositbank"
- placeholder="璇疯緭鍏ュ紑鎴烽摱琛屽悕绉�"
- />
+ <el-col :span="24"><el-form-item label="寮�鎴烽摱琛�" prop="depositbank">
+ <el-input v-model="form.depositbank" placeholder="璇疯緭鍏ュ紑鎴烽摱琛屽悕绉�" />
</el-form-item>
</el-col>
- <el-col :span="24"
- ><el-form-item label="閾惰鍗″彿" prop="bankcardno">
- <el-input
- v-model="form.bankcardno"
- placeholder="璇疯緭鍏ラ摱琛屽崱鍙�"
- />
+ <el-col :span="24"><el-form-item label="閾惰鍗″彿" prop="bankcardno">
+ <el-input v-model="form.bankcardno" placeholder="璇疯緭鍏ラ摱琛屽崱鍙�" />
</el-form-item>
</el-col>
</el-row>
@@ -362,6 +204,7 @@
addExternalperson,
updateExternalperson,
exportExternalperson,
+ getInfoByIDCardNo,
getOnlyCode
} from "@/api/project/externalperson";
@@ -411,6 +254,9 @@
usertype: null
},
+ //鏄惁鏄笓瀹惰垂鐨凮PO瀹℃壒浜哄憳
+ ismanager: false,
+
// 鏌ヨ鏈�鏂板簭鍙峰弬鏁�
seqnoParams: {
businessType: "externalperson",
@@ -427,7 +273,19 @@
{ required: true, message: "璇疯緭鍏ヨ处鎴峰悕绉�", trigger: "blur" }
],
idcardno: [
- { required: true, message: "璇疯緭鍏ヨ韩浠借瘉鍙风爜", trigger: "blur" }
+ {
+ //璐﹀彿绫诲埆涓�"鍗曚綅鏈烘瀯"鏃舵棤闇�韬唤璇佸彿
+ validator: (rule, value, callback) => {
+ if (this.hasUserType(this.form.usertype, "org")) {
+ return callback();
+ }
+ if (!value || !String(value).trim()) {
+ return callback(new Error("璇疯緭鍏ヨ韩浠借瘉鍙风爜"));
+ }
+ return callback();
+ },
+ trigger: "blur"
+ }
],
bankcardno: [
{ required: true, message: "璇疯緭鍏ラ摱琛岃处鍙�", trigger: "blur" }
@@ -435,10 +293,14 @@
depositbank: [
{ required: true, message: "璇疯緭鍏ュ紑鎴烽摱琛�", trigger: "blur" }
]
- },
- //鏄惁鏄笓瀹惰垂鐨凮PO瀹℃壒浜哄憳
- ismanager: false
+ },
};
+ },
+ computed: {
+ /** 琛ㄥ崟鏄惁閫夋嫨浜�"鍗曚綅鏈烘瀯"锛堣处鍙风被鍒负澶氬�硷紝鍚� org 鍗充负鍗曚綅锛� */
+ isUnitForm() {
+ return this.hasUserType(this.form.usertype, "org");
+ }
},
created() {
this.getUserProfile();
@@ -449,21 +311,37 @@
methods: {
//鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
getUserProfile() {
- getUserProfile().then(res => {
- if (
- res.data.userName == "admin" ||
- res.data.userName == "053" ||
- res.data.userName == "047"
- ) {
- this.ismanager = true;
- } else {
- this.ismanager = false;
- }
+ getUserProfile().then(res => {
+ const managerList = ["admin", "048", "047"];
+ this.ismanager = managerList.includes(res.data.userName);
});
+ },
+
+ /** 浜哄憳绫诲瀷锛堝鍊硷紝閫楀彿鍒嗛殧锛夎浆鏁扮粍 */
+ splitUserType(usertype) {
+ if (!usertype) {
+ return [];
+ }
+ if (Array.isArray(usertype)) {
+ return usertype;
+ }
+ return String(usertype)
+ .split(",")
+ .map(t => t.trim())
+ .filter(t => t);
+ },
+ /** 浜哄憳绫诲瀷鏁扮粍杞�楀彿鍒嗛殧瀛楃涓� */
+ joinUserType(usertype) {
+ return Array.isArray(usertype) ? usertype.join(",") : usertype;
+ },
+ /** 浜哄憳绫诲瀷鏄惁鍖呭惈鎸囧畾绫诲瀷锛堝 org = 鍗曚綅鏈烘瀯锛� */
+ hasUserType(usertype, code) {
+ return this.splitUserType(usertype).indexOf(code) > -1;
},
/** 鏌ヨ鍗曚綅銆佷汉鍛樿处鍙峰垪琛� */
getList() {
+ /*
if (
this.queryParams.username === null ||
this.queryParams.username.replace(/\s/g, "") == ""
@@ -473,6 +351,7 @@
);
return;
}
+ */
// this.loading = true;
listExternalperson(this.queryParams).then(response => {
@@ -493,7 +372,7 @@
userno: null,
username: null,
userstatus: 0,
- usertype: null,
+ usertype: [],
personnelunitno: null,
delFlag: null,
createBy: null,
@@ -507,7 +386,7 @@
},
/** 鎼滅储鎸夐挳鎿嶄綔 */
handleQuery() {
- console.log("handleQuery", this.queryParams);
+ /*
if (
this.queryParams.username === null ||
this.queryParams.username.replace(/\s/g, "") == ""
@@ -517,6 +396,7 @@
);
return;
}
+ */
this.queryParams.pageNum = 1;
this.getList();
@@ -544,6 +424,8 @@
const id = row.id || this.ids;
getExternalperson(id).then(response => {
this.form = response.data;
+ //璐﹀彿绫诲埆涓哄鍊硷紙閫楀彿鍒嗛殧锛夛紝琛ㄥ崟鐢ㄦ暟缁勫洖鏄�
+ this.form.usertype = this.splitUserType(response.data.usertype);
this.open = true;
this.title = "浜哄憳/鍗曚綅璐﹀彿淇℃伅淇敼";
});
@@ -557,6 +439,8 @@
if (res.organizationid == this.form.unitno)
this.form.unitname = res.organizationname;
});
+ //璐﹀彿绫诲埆涓哄鍊硷細鎻愪氦鍓嶈浆鍥為�楀彿鍒嗛殧鐨勫瓧绗︿覆
+ this.form.usertype = this.joinUserType(this.form.usertype);
console.log(this.form);
if (this.form.id != null) {
updateExternalperson(this.form).then(response => {
@@ -566,15 +450,33 @@
this.getList();
});
} else {
- getOnlyCode(this.seqnoParams).then(res => {
- this.form.userno = res.data.currentvalue;
+ //淇濆瓨淇℃伅锛堝崟浣嶈处鍙锋病鏈夎韩浠借瘉鍙凤紝璺宠繃韬唤璇佹煡閲嶏級
+ const saveNew = () => {
+ getOnlyCode(this.seqnoParams).then(res => {
+ this.form.userno = res.data.currentvalue;
- addExternalperson(this.form).then(response => {
- this.$modal.msgSuccess("鏂板鎴愬姛");
- this.open = false;
- this.queryParams.username = this.form.username;
- this.getList();
+ addExternalperson(this.form).then(response => {
+ this.$modal.msgSuccess("涓撳淇℃伅淇濆瓨鎴愬姛锛�");
+ this.open = false;
+ this.queryParams.username = this.form.username;
+ this.getList();
+ });
});
+ };
+
+ if (!this.form.idcardno || !String(this.form.idcardno).trim()) {
+ saveNew();
+ return;
+ }
+
+ //妫�鏌ヨ韩浠借瘉鍞竴
+ getInfoByIDCardNo(this.form.idcardno).then(res => {
+ if (res.data.length > 1) {
+ this.$modal.msgWarning("韬唤璇佸彿淇℃伅宸茶鐧昏锛岃妫�鏌ヨ韩浠借瘉鍙凤紒"
+ );
+ return;
+ }
+ saveNew();
});
}
}
@@ -585,14 +487,14 @@
const ids = row.id || this.ids;
this.$modal
.confirm('鏄惁纭鍒犻櫎浜哄憳/鍗曚綅璐﹀彿淇℃伅缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�')
- .then(function() {
+ .then(function () {
return delExternalperson(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
})
- .catch(() => {});
+ .catch(() => { });
},
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
handleExport() {
@@ -607,7 +509,7 @@
this.$download.name(response.msg);
this.exportLoading = false;
})
- .catch(() => {});
+ .catch(() => { });
},
//鑾峰彇鍖荤枟鏈烘瀯鍒楄〃
--
Gitblit v1.9.3