蒙马用户信息录入功能添加

master
gsy 10 months ago
parent d8591968c5
commit 171f17a981

@ -515,3 +515,19 @@ export const getUserGrow = data => post("PetrolCafeteriaFee/User/getUserGrow",da
export const getUserVehicleGrow = data => post("PetrolCafeteriaFee/UserVehicle/getUserVehicleGrow",data);
//获取蒙马录入用户名信息
export const getMMUserInfo = data => post("PetrolCafeteriaFee/User/getMMUserInfo", data)
//保存蒙马录入用户名信息
export const saveMMUserInfo = data => post("PetrolCafeteriaFee/User/addMMUserInfo", data)
//保存蒙马录入用户名信息
export const deleteMMUser = data => post("PetrolCafeteriaFee/User/deleteMMUser", data)

@ -5,8 +5,8 @@ import {ElMessage} from "element-plus";
// axios.defaults.staticBaseURL = '../'
axios.defaults.baseURL = 'http://' + window.location.host //正式
//axios.defaults.baseURL = 'http://' + window.location.hostname + ':9440' //测试
//axios.defaults.baseURL = 'http://' + window.location.host //正式
axios.defaults.baseURL = 'http://' + window.location.hostname + ':9440' //测试
//post请求头
axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";

@ -84,6 +84,11 @@ import uservehiclegrowcollection from '../..//views/PetrolCafeteriaFee/uservehic
import vehiclescoredivPage from '../..//views/PetrolCafeteriaFee/vehiclescoredivPage.vue';
import mmUserManage from '../..//views/PetrolCafeteriaFee/mmUserManage/mmUserManage.vue';
import menu from '../../views/menu/menu.vue';
import menuIndex from '../../views/menu/menuIndex.vue';
@ -198,6 +203,9 @@ const routes = [
},{
path: 'vehiclescoredivPage',//cafterqueryPage
component: vehiclescoredivPage,
},{
path: 'mmUserManage',//cafterqueryPage
component: mmUserManage,
},
{
path: 'index',//index

@ -1570,7 +1570,7 @@ function handleCurrentChangeEvery(pageNum) {
function handleSizeChangeDay(pageSize) {
//
tableLoading.value = true;
tableSearchEvery.pageSize = pageSize;
tableSearchDay.pageSize = pageSize;
loadDayTableDate();
}
@ -1578,7 +1578,7 @@ function handleSizeChangeDay(pageSize) {
function handleCurrentChangeDay(pageNum) {
//
tableLoading.value = true;
tableSearchEvery.pageNum = pageNum;
tableSearchDay.pageNum = pageNum;
loadDayTableDate()
}

@ -248,7 +248,7 @@ async function beforeUpload(file) {
}
function exeedFile(file) {
ElMessage.warning("最多只允许上传张图片");
ElMessage.warning("最多只允许上传张图片");
}
</script>

@ -0,0 +1,235 @@
<template>
<el-form ref="formDom" :rules="addFormRules" :model="formData" size="medium" v-loading="loading">
<el-row>
<el-col :span="19" :offset="2">
<el-form-item label="真实姓名" :label-width="formLabelWidth" prop="realName">
<el-input v-model="formData.realName" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="2">
<el-form-item label="身份证号" :label-width="formLabelWidth" prop="idNumber">
<el-input :disabled="formData.openId!=''" v-model="formData.idNumber" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="2">
<el-form-item label="手机号" :label-width="formLabelWidth" prop="phone">
<el-input v-model="formData.phone" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="2">
<el-form-item label="身份证正面照片" :label-width="formLabelWidth">
<el-upload multiple v-model:file-list="formData.picList" :limit="1" action="#"
list-type="picture-card" :auto-upload="false" accept="image/*" :on-change="beforeUpload"
:on-exceed="exeedFile">
<el-icon>
<Plus />
</el-icon>
<template v-slot:file="{ file }">
<div>
<img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-delete">
<el-button :icon="ZoomIn" circle @click="handlePictureCardPreview(file)" />
<el-button :icon="Download" circle @click="handleDownload(file)" />
<el-button :icon="Delete" circle @click="handleRemove(file)" />
</span>
</span>
</div>
</template>
</el-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-dialog width="50%" v-model="dialogVisible">
<img style="width: 100%;" :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>
</template>
<script lang="ts" setup>
import pro from '../../../util/tool.js';
import { Delete, Download, Plus, ZoomIn } from '@element-plus/icons-vue'
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getMealFiterDataList, saveServiceArea, getMealPic } from '@/util/api/api.js';
import { ElMessage, ElMessageBox, UploadFile } from "element-plus";
//url
const dialogImageUrl = ref('')
//
const dialogVisible = ref(false)
//
const props = defineProps(['rowData']);
//
//const emit = defineEmits(['addReload']);
// label
const formLabelWidth = ref('130px');
//
const formData = ref({ picList: [] });
//
const operationList = ref([]);
//
const loading = ref(false);
const formDom = ref(null);
const base64PicData = ref([]);
//
const addFormRules = ref({
realName: [{ required: true, message: '请输入真实姓名', trigger: 'blur' }],
idNumber: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
})
//访
const picUrl = ref(localStorage.getItem('picUrl'));
onMounted(() => {
loading.value = true;
formData.value = props.rowData;
if(formData.value.picList.length > 0){
if(null != formData.value.picList[0].url){
formData.value.picList[0].url = picUrl.value + formData.value.picList[0].url+"?v="+Math.random();
changePic(picUrl.value + formData.value.picList[0].url+"?v="+Math.random());
}
}
loading.value = false;
});
async function changePic(url){
loading.value = true;
let picBase64 = await pro.getBase64(url,'jpg');
formData.value.picList[0].url = "data:image/jpg;base64,"+picBase64;
loading.value = false;
return picBase64
}
//
function saveData() {
let picBase64 = [];
//
for (let item of base64PicData.value) {
picBase64.push(item.base64Pic);
}
for (let item of formData.value.picList) {
if (item.status == 'success') {
var reg = new RegExp('^data:image/[^;]+;base64,');
picBase64.push(item.url.replace(reg, ''));
}
}
//
let saveDatas = {
realName: formData.value.realName,
id: formData.value.id,
openId:formData.value.openId,
idNumber:formData.value.idNumber,
phone: formData.value.phone,
numberPicName:formData.value.numberPicName,
picBase64:picBase64[0],
}
return { saveDatas: saveDatas};
}
//使
defineExpose({
formDom,
saveData
});
//
const handleRemove = (file: UploadFile) => {
for (var i = 0; i < formData.value.picList.length; i++) {
if (formData.value.picList[i].uid == file.uid) {
formData.value.picList.splice(i, 1);
break;
}
}
for (var i = 0; i < base64PicData.value.length; i++) {
if (base64PicData.value[i].uid == file.uid) {
base64PicData.value.splice(i, 1);
break;
}
}
}
//
const handlePictureCardPreview = (file: UploadFile) => {
dialogImageUrl.value = file.url!
dialogVisible.value = true
}
//
const handleDownload = (file: UploadFile) => {
let link = document.createElement('a');
link.style.display = 'none';
link.href = file.url;
link.download = file.name;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
async function beforeUpload(file) {
//base64
if (file.status != 'success') {
let base64Pic = await pro.getBase64(file.url, file.raw.type);
base64PicData.value.push({ "uid": file.uid, "base64Pic": base64Pic })
}
}
function exeedFile(file) {
ElMessage.warning("最多只允许上传一张图片");
}
</script>
<style scoped>
::v-deep .hide_box {
.el-upload .el-upload--picture-card {
display: none;
}
}
::v-deep .el-input-number--large{
line-height: 30px;
}
</style>

@ -0,0 +1,547 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="addServiceArea">
<el-icon>
<plus />
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="primary" style="margin-top: 0px;" @click="updateServiceArea">
<el-icon>
<Edit />
</el-icon>
<span style="vertical-align: middle;"> 修改 </span>
</el-button>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow = true">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 查找 </span>
</el-button>
<el-upload
:limit="1"
:on-exceed="handleExceed"
:show-file-list="false"
:on-success="successFile"
:on-change="changeFile"
:on-error="errorFile"
style="margin-left: 0.5%;margin-top: 0px;"
ref="upload"
class="upload-demo"
action="http://localhost:9440/PetrolCafeteriaFee/User/uploadFileImportMMUser"
:auto-upload="true"
:headers="headers">
<template #trigger>
<el-button type="success">导入Excel文件</el-button>
</template>
<!-- <el-button class="ml-3" type="success" @click="submitUpload">
选择导入的Excel文件
</el-button> -->
</el-upload>
<el-button text type="danger" style="margin-top: 0px;margin-left: auto;color: white;" @click="del">
<el-icon>
<delete />
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading.fullscreen.lock="tableLoading"
:data="tableData" border style="width: 100%;" @current-change="tableHandleCurrentChange"
@selection-change="handleSelectionChange">
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="realName" width="120" label="真实姓名" />
<el-table-column :resizable="false" align="center" prop="idNumber" width="180" label="身份证号" />
<el-table-column :resizable="false" align="center" prop="phone" width="140" label="手机号" />
<el-table-column show-overflow-tooltip :resizable="false" align="center" width="120"
prop="operationUserName" label="录入人" />
<el-table-column show-overflow-tooltip :resizable="false" align="center" width="180"
prop="operationTime" label="录入时间" />
<el-table-column :resizable="false" align="center" prop="numberPic" label="身份证正面照">
<template #default="scope" style="padding-left: 0px; padding-right: 0px;">
<el-image style="width: 240px; height: 120px"
:src="(null != scope.row.numberPicName ? picUrl + scope.row.numberPicName + '?v=' + random : '')"
:preview-src-list="[picUrl + scope.row.numberPicName + '?v=' + random]"
preview-teleported="true" />
</template>
</el-table-column>
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true"
title="蒙马用户信息录入" v-model="addMealShow" width="40%" top="0.5%" :modal="false">
<template #header="{ titleId, titleClass, warnMessgae }">
<div class="my-header">
<span :id="titleId" :class="titleClass">蒙马用户信息录入</span>
<span :id="warnMessgae" :class="titleClass" style="color: red;">
身份证号涉及与小程序账号同步新增保存后不允许修改 </span>
</div>
</template>
<mmUserAddUpdate ref="mmUserAddUpdateDom" :rowData="addForm">
</mmUserAddUpdate>
<template #footer>
<span class="dialog-footer">
<el-button @click="addMealShow = false"> 取消</el-button>
<el-button type="primary" @click="saveData()">
<span style="vertical-align: middle;"> 保存 </span>
</el-button>
</span>
</template>
</el-dialog>
<el-dialog title="蒙马用户信息查找" v-model="searchShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="用户真实姓名" :label-width="formLabelWidth">
<el-input placeholder="请输入" v-model="searchForm.realNameQuery" autocomplete="off"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="身份证号" :label-width="formLabelWidth">
<el-input placeholder="请输入" v-model="searchForm.idNumberQuery" autocomplete="off"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="录入时间(起始)" :label-width="formLabelWidth">
<el-date-picker v-model="searchForm.operationStartTime" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD 00:00:00" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="录入时间(终止)" :label-width="formLabelWidth">
<el-date-picker v-model="searchForm.operationEndTime" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD 23:59:59" style="width: 100%;" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow = false">取消</el-button>
<el-button type="primary" @click="resetSearchData">
<el-icon>
<Refresh />
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="searchData">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
</el-row>
</template>
<script lang="ts" setup>
import { Upload } from '@element-plus/icons-vue';
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getMMUserInfo, deleteMMUser, saveMMUserInfo, getMealFiterDataList } from '@/util/api/api.js';
import { ElMessage, ElMessageBox, ElNotification } from "element-plus";
import mmUserAddUpdate from './mmUserAddUpdate.vue';
//formdom
const addFormElement = ref(null);
//
const tableLoading = ref(true);
// label
const formLabelWidth = ref('130px');
//
const myHeight = ref(500);
//
const searchForm = reactive({
total: 0,
pageNum: 1,
pageSize: 20,
startTime: '', //
endTime: '', //
realNameQuery: "",
idNumberQuery: "",
operationStartTime: null,
operationEndTime: null,
});
//
const addForm = ref({
serivceAreaName: ""
});
//
const tableData = ref([]);
// false true
const addMealShow = ref(false);
//
const currentRow = ref(null);
//
const multipleSelection = ref(null);
const mmUserAddUpdateDom = ref(null);
const searchShow = ref(false);
//
const operationList = ref([]);
//
const serviceAreaList = ref([]);
//访
const picUrl = ref(localStorage.getItem('picUrl'));
const random = ref(Math.random());
const headers = ref({ loginId: localStorage.getItem('loginName') })
onMounted(() => {
tableLoading.value = true;
//
getTableData();
});
function getTableData() {
getMMUserInfo(searchForm).then(res => {
if (res.records != null) {
//getOtherData();
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.77;
})
}
function getOtherData() {
getMealFiterDataList({ type: "search" }).then(res => {
if (res.operationList != null) {
operationList.value = res.operationList;
}
if (res.serviceAreaList != null) {
serviceAreaList.value = res.serviceAreaList;
}
tableLoading.value = false;
});
}
function reloadTableData() {
random.value = Math.random();
tableLoading.value = true;
getMMUserInfo(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
})
}
//
function searchData() {
if (searchForm.jobnumberQury != null && typeof (searchForm.jobnumberQury) == 'string') {
searchForm.jobnumberQury = null;
}
if (searchForm.serviceIdQuery != null && typeof (searchForm.serviceIdQuery) == 'string') {
searchForm.serviceIdQuery = null;
}
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}
//
function resetSearchData() {
//
searchForm.realNameQuery = "";
//
// searchForm.startTime = pro.dateFormatDay(new Date().setDate((new Date().getDate() - 7))) + " 00:00:00" //
// searchForm.endTime = pro.dateFormatDay(new Date()) + " 23:59:59"; //4
searchForm.startTime = ''; //
searchForm.endTime = ''; //4
searchForm.operationStartTime = null
searchForm.operationEndTime = null
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}
//
function addServiceArea() {
//addUpdateForm
addForm.value = {
realName: "",
openId: "",
id: "",
idNumber: "",
phone: "",
numberPicName: "",
picList: [],
};
addMealShow.value = true;
}
function updateServiceArea() {
//
if (currentRow.value == null) {
ElMessage({
showClose: true,
message: '请选择要修改的数据!',
type: 'warning',
})
return;
}
//退
addForm.value = { ...currentRow.value };
let picListData = [];
picListData.push({ url: addForm.value.numberPicName, name: "身份证正面照片.png" });
addForm.value.picList = picListData;
addMealShow.value = true;
}
//
function saveData() {
mmUserAddUpdateDom.value.formDom.validate((valid) => {
if (valid) { // valid true;
//
let datas = mmUserAddUpdateDom.value.saveData();
tableLoading.value = true;
saveMMUserInfo(datas).then(res => {
if (res.result == 1) {
addMealShow.value = false;
ElMessage.success(res.msg);
reloadTableData();
} else if (res.result == -2) {
ElMessage.error(res.msg);
} else if (res.result == -3) {
ElMessage.error(res.msg);
} else {
ElMessage.error(res.msg);
}
tableLoading.value = false;
})
} else {
return false
}
});
}
function del() {
if (null == currentRow.value && null == multipleSelection.value) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
let serivceAreaList = [];
//
if (null != multipleSelection.value && multipleSelection.value.length > 0) {
serivceAreaList = [...multipleSelection.value];
if (null != currentRow.value) {
let isCanAdd = true;
for (let item of serivceAreaList) {
if (item.openId == currentRow.value.openId) {
isCanAdd = false;
break;
}
}
if (isCanAdd) {
serivceAreaList.push({ ...currentRow.value });
}
}
} else {
serivceAreaList.push({ ...currentRow.value });
}
let msg = "";
if (serivceAreaList.length == 1) {
msg = '是否确定删除该数据?';
} else {
msg = '是否批量删除' + serivceAreaList.length + '条数据?';
}
ElMessageBox.confirm(
msg,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deleteMMUser(serivceAreaList).then((res) => {
if (res.result == 1) {
ElMessage.success(res.msg);
//
reloadTableData();
currentRow.value = null;
} else {
ElMessage.error(res.msg);
}
})
}).catch(() => {
})
}
function tableHandleCurrentChange(row) {
currentRow.value = row;
}
//
function handleSizeChange(pageSize) {
searchForm.pageSize = pageSize;
reloadTableData();
}
//
function handleCurrentChange(pageNum) {
searchForm.pageNum = pageNum;
reloadTableData();
}
//
function handleSelectionChange(row) {
multipleSelection.value = row
}
import { genFileId } from 'element-plus'
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
const upload = ref<UploadInstance>()
const handleExceed: UploadProps['onExceed'] = (files) => {
upload.value!.clearFiles()
const file = files[0] as UploadRawFile
file.uid = genFileId()
upload.value!.handleStart(file)
upload.value!.submit()
}
function changeFile(){
tableLoading.value = true;
}
//
function successFile(res, file, files) {
if (res.result == 1) {
ElMessage.success(res.msg);
} else if (res.result == -2) {
ElMessage.error(res.msg);
} else if (res.result == -3) {
ElMessage.warning(res.msg);
} else {
ElMessage.error(res.msg);
}
reloadTableData();
}
//
function errorFile(){
reloadTableData();
}
</script>
<style scoped>
::v-deep.el-upload-list__item.is-success {
float: right;
}
</style>

@ -121,7 +121,6 @@ onMounted(() => {
if(formData.value.picList.length > 0){
formData.value.picList[0].url = picUrl.value + formData.value.picList[0].url+"?v="+Math.random();
changePic(picUrl.value + formData.value.picList[0].url+"?v="+Math.random());
}
//
getOtherData();

Loading…
Cancel
Save