|
@@ -18,10 +18,11 @@
|
|
|
>
|
|
|
<a href="javascript:;" class="file"
|
|
|
>批量导入白名单<input
|
|
|
+
|
|
|
type="file"
|
|
|
name="file"
|
|
|
ref="file"
|
|
|
- @change="upload($event)"
|
|
|
+ @change="uploadFun($event)"
|
|
|
/></a>
|
|
|
<!-- <input type="file" @change="impexcel(this)" /> -->
|
|
|
<el-button
|
|
@@ -190,21 +191,39 @@
|
|
|
>
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
-<el-select
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- v-model="page.data.warehousingStatus"
|
|
|
- placeholder="请选择入库状态"
|
|
|
- class="margin-left input"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in putStorage"
|
|
|
- :key="item.id"
|
|
|
- :label="item.name"
|
|
|
- :value="item.id"
|
|
|
+ <template v-if="placeType == 3">
|
|
|
+ <el-select
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ v-model="page.data.warehousingStatus"
|
|
|
+ placeholder="请选择入库状态"
|
|
|
+ class="margin-left input"
|
|
|
>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
+ <el-option
|
|
|
+ v-for="item in putStorage"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <el-select
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ v-model="page.data.personnelType"
|
|
|
+ placeholder="请选择人员类型"
|
|
|
+ class="margin-left input"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in userTypeList"
|
|
|
+ :key="item.code"
|
|
|
+ :label="item.desc"
|
|
|
+ :value="item.code"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+
|
|
|
<!-- <el-date-picker
|
|
|
v-model="page.data.startTime"
|
|
|
type="datetime"
|
|
@@ -283,7 +302,7 @@
|
|
|
>
|
|
|
<el-button
|
|
|
type="primary"
|
|
|
- icon="el-icon-download"
|
|
|
+ icon="el-icon-dEditownload"
|
|
|
class="margin-left"
|
|
|
@click="exportRecord"
|
|
|
v-if="isOut === 1"
|
|
@@ -299,13 +318,13 @@
|
|
|
v-if="checkRole([5]) && placeType != 2"
|
|
|
>删除所有人员</el-button
|
|
|
>
|
|
|
- <a v-if="checkRole([5])" href="javascript:;" class="file"
|
|
|
- >批量编辑<input
|
|
|
- type="file"
|
|
|
- name="file"
|
|
|
- ref="file"
|
|
|
- @change="batchEditor($event)"
|
|
|
- /></a>
|
|
|
+ <el-button
|
|
|
+ v-if="checkRole([5])"
|
|
|
+ type="primary"
|
|
|
+ class="margin-left"
|
|
|
+ @click="batchEditVisible = true"
|
|
|
+ >批量编辑</el-button
|
|
|
+ >
|
|
|
<!--主表格-->
|
|
|
<el-table
|
|
|
class="table"
|
|
@@ -981,41 +1000,6 @@
|
|
|
</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
- <!--错误返回-->
|
|
|
- <el-dialog
|
|
|
- title="提示"
|
|
|
- center
|
|
|
- :visible.sync="resultVisible"
|
|
|
- destroy-on-close
|
|
|
- >
|
|
|
- <el-table
|
|
|
- class="table"
|
|
|
- ref="table_form_result"
|
|
|
- v-loading="false"
|
|
|
- :data="result_list"
|
|
|
- element-loading-text="Loading"
|
|
|
- border
|
|
|
- fit
|
|
|
- highlight-current-row
|
|
|
- height="500"
|
|
|
- >
|
|
|
- <el-table-column label="错误序号" align="center" width="100px">
|
|
|
- <template slot-scope="scope">
|
|
|
- {{ scope.$index + 1 }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="错误描述" align="center">
|
|
|
- <template slot-scope="scope">
|
|
|
- {{ scope.row | matchNull }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <div slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="resultVisible = false">
|
|
|
- 我已知晓
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
<!-- 详情对话框 -->
|
|
|
<detailsDialog
|
|
|
:detailsList="detailsList"
|
|
@@ -1157,6 +1141,56 @@
|
|
|
></BatchUpload>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+ <!-- 批量编辑-弹框 -->
|
|
|
+ <el-dialog
|
|
|
+ class="batchVisible"
|
|
|
+ title="批量编辑"
|
|
|
+ :visible.sync="batchEditVisible"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ @close="closeBatch"
|
|
|
+ >
|
|
|
+ <p class="text-color">
|
|
|
+ 在“比对唯一参数”里选择一项作为更新文件里的数据和后台数据进行寻找匹配的标准参数值。上传excel更新文件后,根据选择的比对唯一参数寻找匹配对应的后台数据,更新文件里填写的内容在匹配上对应的后台数据后将覆盖更新,没填写的内容将不进行覆盖更新。
|
|
|
+ </p>
|
|
|
+ <el-form
|
|
|
+ :model="batch_edit_form"
|
|
|
+ :rules="batch_edit_rules"
|
|
|
+ ref="batch_edit_form"
|
|
|
+ label-width="120px"
|
|
|
+ label-position="left"
|
|
|
+ >
|
|
|
+ <el-form-item
|
|
|
+ label="对比唯一参数"
|
|
|
+ prop="uniqueCode"
|
|
|
+ class="form-item-style"
|
|
|
+ >
|
|
|
+ <el-radio-group v-model="batch_edit_form.uniqueCode">
|
|
|
+ <el-radio :label="1">身份证号</el-radio>
|
|
|
+ <el-radio :label="2">手机号</el-radio>
|
|
|
+ <el-radio :label="3">卡号</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="上传Excel文件" prop="file">
|
|
|
+ <a href="javascript:;" class="file file1">
|
|
|
+ 上传文件
|
|
|
+ <input
|
|
|
+ type="file"
|
|
|
+ name="file"
|
|
|
+ ref="file"
|
|
|
+ @change="batchEditUpload($event)"
|
|
|
+ />
|
|
|
+ </a>
|
|
|
+ <span style="margin-left: 8px">
|
|
|
+ {{ batch_edit_form.file ? batch_edit_form.fileName : "" }}</span
|
|
|
+ >
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="closeBatch"> 取消 </el-button>
|
|
|
+ <el-button type="primary" @click="batchEditFun"> 确定 </el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
<!--操作人-->
|
|
|
<el-dialog
|
|
|
title="操作人"
|
|
@@ -1165,10 +1199,10 @@
|
|
|
destroy-on-close
|
|
|
>
|
|
|
<div class="content-operator" v-if="operatorData">
|
|
|
- <div>UID:{{operatorData.zfbUserId}}</div>
|
|
|
- <div>姓名:{{operatorData.username}}</div>
|
|
|
- <div>手机号:{{operatorData.phone | desensitization( 3, 7)}}</div>
|
|
|
- <div>证件号:{{operatorData.idNumber| desensitization( 6,14)}}</div>
|
|
|
+ <div>UID:{{ operatorData.zfbUserId }}</div>
|
|
|
+ <div>姓名:{{ operatorData.username }}</div>
|
|
|
+ <div>手机号:{{ operatorData.phone | desensitization(3, 7) }}</div>
|
|
|
+ <div>证件号:{{ operatorData.idNumber | desensitization(6, 14) }}</div>
|
|
|
</div>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button type="primary" @click="operatorVisible = false">
|
|
@@ -1211,6 +1245,7 @@ import {
|
|
|
queryEnterpriseAccount,
|
|
|
getUserWhitePersonnelTypeEnum,
|
|
|
getParentInfo,
|
|
|
+ batchEditUserWhitelist,
|
|
|
} from "@/api/user_manage";
|
|
|
import { reIssue } from "@/api/old_api_pengwenbing";
|
|
|
import { downloadPhotosWhiteList } from "@/utils/steakPhoto";
|
|
@@ -1324,7 +1359,7 @@ export default {
|
|
|
pushType: null, //推送类型
|
|
|
endTime: null,
|
|
|
startTime: null,
|
|
|
- warehousingStatus:null,
|
|
|
+ warehousingStatus: null,
|
|
|
},
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
@@ -1402,9 +1437,6 @@ export default {
|
|
|
userTypeList: [],
|
|
|
// 是否显示提示
|
|
|
showTooltip: false,
|
|
|
- // 批量导入结果返回
|
|
|
- resultVisible: false,
|
|
|
- result_list: [],
|
|
|
doUpload: "",
|
|
|
// 详情
|
|
|
dialogTableVisible: false,
|
|
@@ -1460,10 +1492,21 @@ export default {
|
|
|
uploadFileName: "", //文件夹名称
|
|
|
temporaryAreaList: [], //私有区域临时数据
|
|
|
operatorData: null, //操作人
|
|
|
- putStorage:[
|
|
|
- {id:0,name:'关闭'},
|
|
|
- {id:1,name:'开通'},
|
|
|
+ putStorage: [
|
|
|
+ { id: 0, name: "关闭" },
|
|
|
+ { id: 1, name: "开通" },
|
|
|
],
|
|
|
+ // 批量编辑
|
|
|
+ batchEditVisible: false,
|
|
|
+ batch_edit_form: {
|
|
|
+ uniqueCode: null,
|
|
|
+ fileName: null,
|
|
|
+ file: null,
|
|
|
+ },
|
|
|
+ batch_edit_rules: {
|
|
|
+ uniqueCode: [{ required: true, message: "请选择", trigger: "blur" }],
|
|
|
+ file: [{ required: true, message: "请选择", trigger: "blur" }],
|
|
|
+ },
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
@@ -1825,10 +1868,40 @@ export default {
|
|
|
document.body.removeChild(eleLink);
|
|
|
});
|
|
|
},
|
|
|
+ closeBatch() {
|
|
|
+ (this.batch_edit_form = {
|
|
|
+ uniqueCode: null,
|
|
|
+ fileName: null,
|
|
|
+ file: null,
|
|
|
+ }),
|
|
|
+ (this.batchEditVisible = false);
|
|
|
+ },
|
|
|
+ batchEditUpload(e) {
|
|
|
+ this.batch_edit_form.fileName = e.target.files[0].name;
|
|
|
+ this.batch_edit_form.file = e.currentTarget.files;
|
|
|
+ },
|
|
|
+ // 批量编辑
|
|
|
+ batchEditFun(e) {
|
|
|
+ this.$refs["batch_edit_form"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.batchEditVisible = false;
|
|
|
+ this.uploadFun(
|
|
|
+ this.batch_edit_form.file,
|
|
|
+ "batchEdit",
|
|
|
+ this.batch_edit_form.uniqueCode
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
// 批量导入
|
|
|
- async upload(e) {
|
|
|
+ async uploadFun(e, type, uniqueCode) {
|
|
|
this.loading = true;
|
|
|
- var files = e.currentTarget.files;
|
|
|
+ let files;
|
|
|
+ if (type) {
|
|
|
+ files = e;
|
|
|
+ } else {
|
|
|
+ files = e.currentTarget.files;
|
|
|
+ }
|
|
|
if (!files.length) {
|
|
|
return;
|
|
|
}
|
|
@@ -1846,10 +1919,11 @@ export default {
|
|
|
this.loading = false;
|
|
|
this.allNumber = data.length;
|
|
|
this.drawerVisible = true;
|
|
|
- this.doUploadAddUserInfo(0, data);
|
|
|
+ this.doUploadAddUserInfo(0, data, type, uniqueCode);
|
|
|
+ e.target.value=""
|
|
|
},
|
|
|
// 递归调用校验数据并请求
|
|
|
- async doUploadAddUserInfo(i, data) {
|
|
|
+ async doUploadAddUserInfo(i, data, type, uniqueCode) {
|
|
|
if (i > data.length - 1) {
|
|
|
this.hasCompleted = true;
|
|
|
this.fetchData();
|
|
@@ -1871,6 +1945,19 @@ export default {
|
|
|
form.phone = data[i]["手机号"];
|
|
|
form.idNumber = data[i]["身份证号"];
|
|
|
form.startTime = data[i]["开始有效期"];
|
|
|
+ form.personnelType1 = data[i]["人员类型"];
|
|
|
+ if (form.personnelType1) {
|
|
|
+ switch (form.personnelType1) {
|
|
|
+ case "学生":
|
|
|
+ form.personnelType = 1;
|
|
|
+ break;
|
|
|
+ case "教职工":
|
|
|
+ form.personnelType = 2;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
if (form.startTime) {
|
|
|
form.startTime.toString().trim();
|
|
|
}
|
|
@@ -1886,20 +1973,37 @@ export default {
|
|
|
}
|
|
|
form.inputType = 1;
|
|
|
form.pushType = 1;
|
|
|
- await this.isPassFun(form, i).then(async (res) => {
|
|
|
- let timeout = 0;
|
|
|
- if (res.isOk) {
|
|
|
- await this.addUserInfo(data, form, i);
|
|
|
- } else {
|
|
|
- this.getFileList1(data, i, res, form);
|
|
|
- timeout = 0;
|
|
|
- }
|
|
|
- this.hasDealNumber = i + 1;
|
|
|
- this.waitDealNumber = data.length - (i + 1);
|
|
|
- setTimeout(() => {
|
|
|
- this.doUploadAddUserInfo(++i, data);
|
|
|
- }, timeout);
|
|
|
- });
|
|
|
+ if (type) {
|
|
|
+ await this.isPassBatchEditFun(form, i, uniqueCode).then(async (res) => {
|
|
|
+ let timeout = 0;
|
|
|
+ if (res.isOk) {
|
|
|
+ await this.batchEditUserWhitelist(data, form, i, uniqueCode);
|
|
|
+ } else {
|
|
|
+ this.getFileList1(data, i, res, form);
|
|
|
+ timeout = 0;
|
|
|
+ }
|
|
|
+ this.hasDealNumber = i + 1;
|
|
|
+ this.waitDealNumber = data.length - (i + 1);
|
|
|
+ setTimeout(() => {
|
|
|
+ this.doUploadAddUserInfo(++i, data);
|
|
|
+ }, timeout);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ await this.isPassFun(form, i).then(async (res) => {
|
|
|
+ let timeout = 0;
|
|
|
+ if (res.isOk) {
|
|
|
+ await this.addUserInfo(data, form, i);
|
|
|
+ } else {
|
|
|
+ this.getFileList1(data, i, res, form);
|
|
|
+ timeout = 0;
|
|
|
+ }
|
|
|
+ this.hasDealNumber = i + 1;
|
|
|
+ this.waitDealNumber = data.length - (i + 1);
|
|
|
+ setTimeout(() => {
|
|
|
+ this.doUploadAddUserInfo(++i, data);
|
|
|
+ }, timeout);
|
|
|
+ });
|
|
|
+ }
|
|
|
},
|
|
|
// 校验模板数据内容
|
|
|
async isPassFun(form, i) {
|
|
@@ -1910,6 +2014,11 @@ export default {
|
|
|
err: "",
|
|
|
},
|
|
|
};
|
|
|
+ if (!form.personnelType && this.placeType == 3) {
|
|
|
+ isPass.incorrect.err = "人员类型为必填项";
|
|
|
+ isPass.isOk = false;
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
if (!form.name) {
|
|
|
isPass.incorrect.err = "姓名为必填项";
|
|
|
isPass.isOk = false;
|
|
@@ -2052,6 +2161,66 @@ export default {
|
|
|
resolve(isPass);
|
|
|
});
|
|
|
},
|
|
|
+ // 校验批量编辑模板数据内容
|
|
|
+ async isPassBatchEditFun(form, i) {
|
|
|
+ let isPass = {
|
|
|
+ isOk: true,
|
|
|
+ incorrect: {
|
|
|
+ name: `第${i + 1}行`,
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ };
|
|
|
+ switch (this.batch_edit_form.uniqueCode) {
|
|
|
+ case 1:
|
|
|
+ if (!form.idNumber) {
|
|
|
+ isPass.isOk = false;
|
|
|
+ isPass.incorrect.err = "身份证号为必填";
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
+ if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(form.idNumber)) {
|
|
|
+ isPass.isOk = false;
|
|
|
+ isPass.incorrect.err = "身份证长度或格式有误";
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if (!form.phone) {
|
|
|
+ isPass.isOk = false;
|
|
|
+ isPass.incorrect.err = "手机号为必填";
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
+ if (form.phone && !/^[0-9]*$/.test(form.phone)) {
|
|
|
+ isPass.isOk = false;
|
|
|
+ isPass.incorrect.err = "手机号只能由数字组成";
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ if (!form.cardIdEx) {
|
|
|
+ isPass.isOk = false;
|
|
|
+ isPass.incorrect.err = "卡号为必填";
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (form.adminName) {
|
|
|
+ let index = this.enterprise_list.findIndex((item) => {
|
|
|
+ return item.username === form.adminName;
|
|
|
+ });
|
|
|
+ if (index > -1) {
|
|
|
+ form.adminId = this.enterprise_list[index].adminId;
|
|
|
+ } else {
|
|
|
+ isPass.isOk = false;
|
|
|
+ isPass.incorrect.err = "账号名称有误";
|
|
|
+ return isPass;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ resolve(isPass);
|
|
|
+ });
|
|
|
+ },
|
|
|
// 批量导入-调用添加员工接口
|
|
|
async addUserInfo(data, form, i) {
|
|
|
await insert(form)
|
|
@@ -2061,45 +2230,24 @@ export default {
|
|
|
this.makeScrollDown();
|
|
|
});
|
|
|
},
|
|
|
+ // 常客的批量编辑
|
|
|
+ async batchEditUserWhitelist(data, form, i, uniqueCode) {
|
|
|
+ console.log(uniqueCode);
|
|
|
+ form.uniqueCode = uniqueCode;
|
|
|
+ await batchEditUserWhitelist(form)
|
|
|
+ .then((res) => {})
|
|
|
+ .catch((err) => {
|
|
|
+ this.batchUploadResultList.push({ name: `第${i + 1}行`, err: err });
|
|
|
+ this.makeScrollDown();
|
|
|
+ });
|
|
|
+ },
|
|
|
// 批量导入-推入错误信息
|
|
|
getFileList1(data, i, isPass) {
|
|
|
// this.initAddress(this.user_form.contents);
|
|
|
this.batchUploadResultList.push(isPass.incorrect);
|
|
|
this.makeScrollDown();
|
|
|
},
|
|
|
- // 批量编辑
|
|
|
- batchEditor(e) {
|
|
|
- var files = e.currentTarget.files;
|
|
|
- if (!files.length) {
|
|
|
- return;
|
|
|
- }
|
|
|
- const loading = this.$loading({
|
|
|
- lock: true,
|
|
|
- text: "拼命导入中...",
|
|
|
- spinner: "el-icon-loading",
|
|
|
- background: "rgba(0, 0, 0, 0.7)",
|
|
|
- });
|
|
|
- var formData = new FormData(); // 必需声明一个FormData对象
|
|
|
- formData.append("file", files[0]);
|
|
|
- editUserWhitelistExcel(formData)
|
|
|
- .then((res) => {
|
|
|
- loading.close();
|
|
|
- this.fetchData();
|
|
|
- if (res.data.length > 0) {
|
|
|
- this.resultVisible = true;
|
|
|
- this.result_list = res.data;
|
|
|
- } else {
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "导入成功!",
|
|
|
- });
|
|
|
- }
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- loading.close();
|
|
|
- this.fetchData();
|
|
|
- });
|
|
|
- },
|
|
|
+
|
|
|
// 点击批量注册人员
|
|
|
clickBulkRegistration() {
|
|
|
this.batchVisible = true;
|
|
@@ -2237,7 +2385,7 @@ export default {
|
|
|
let excel_url = window.URL.createObjectURL(blob);
|
|
|
let link = document.createElement("a");
|
|
|
link.href = excel_url;
|
|
|
- link.download = "批量注册结果错误名单.xls";
|
|
|
+ link.download = "错误名单列表.xls";
|
|
|
document.body.appendChild(link);
|
|
|
link.click();
|
|
|
document.body.removeChild(link);
|