master
lion 5 months ago
parent dcf8c39d46
commit d69a453c79

@ -2,28 +2,12 @@ import request from "@/utils/request";
export function getList(params){
return request({
url:'/api/admin/gate/visits',
url:'/api/admin/gate/visit-list',
method:'get',
params
})
}
export function show(data){
return request({
url:'/api/admin/gate/visits/detail',
method:'post',
data
})
}
export function update(data){
return request({
url:'/api/admin/gate/visits/update',
method:'post',
data
})
}
export function getUserList(params){
return request({
url:'/api/admin/gate/user-list',

@ -46,7 +46,7 @@
<div class="box box2">
<div class="boxtitle">
<span>施工访客</span>
<span>施工人员</span>
<i class="iconfont icon-banqianguanli statIcon"></i>
</div>
<div class="bline"></div>
@ -87,7 +87,7 @@
<div class="box box4">
<div class="boxtitle">
<span>物流车辆</span>
<span>物流司机</span>
<i class="iconfont icon-cheliangdangan statIcon"></i>
</div>
<div class="bline"></div>

@ -95,22 +95,22 @@
}
},{
value: 0,
name:"施工访客",
name:"施工人员",
itemStyle: {
color: '#9193BC' // 访
color: '#9193BC' //
}
},{
value: 0,
name:"物流车辆",
name:"物流司机",
itemStyle: {
color: '#64A48E' //
color: '#64A48E' //
}
}],
radiusArr:'50%'
},
LineData:{
xArr: [],
legendArr: ["普通访客", "施工访客", "物流车辆"],
legendArr: ["普通访客", "施工人员", "物流司机"],
series:[
{
name: '普通访客',
@ -122,21 +122,21 @@
}
},
{
name: '施工访客',
name: '施工人员',
type: 'line',
stack: 'Total',
data: [],
itemStyle: {
color: '#9193BC' // 访
color: '#9193BC' //
}
},
{
name: '物流车辆',
name: '物流司机',
type: 'line',
stack: 'Total',
data: [],
itemStyle: {
color: '#64A48E' //
color: '#64A48E' //
}
}
]
@ -156,13 +156,13 @@
const today = new Date();
const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(today.getDate() - 30);
return [
this.formatDate(thirtyDaysAgo),
this.formatDate(today)
];
},
// YYYY-MM-DD
formatDate(date) {
const year = date.getFullYear();
@ -170,7 +170,7 @@
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
//
updatePieChartData(listData) {
if (listData && listData.common_visit && listData.work_visit && listData.car_visit) {
@ -184,22 +184,22 @@
},
{
value: listData.work_visit.total || 0,
name: "施工访客",
name: "施工人员",
itemStyle: {
color: '#9193BC' // 访
color: '#9193BC' //
}
},
{
value: listData.car_visit.total || 0,
name: "物流车辆",
name: "物流司机",
itemStyle: {
color: '#64A48E' //
color: '#64A48E' //
}
}
];
}
},
// 线
updateLineChartData(dateList) {
if (dateList && Array.isArray(dateList)) {
@ -211,14 +211,14 @@
const day = String(date.getDate()).padStart(2, '0');
return `${month}-${day}`;
});
// 访
this.LineData.series[0].data = dateList.map(item => item.common_visit || 0);
this.LineData.series[1].data = dateList.map(item => item.work_visit || 0);
this.LineData.series[2].data = dateList.map(item => item.car_visit || 0);
}
},
//
handleDateChange(value) {
console.log('选择的时间段:', value);
@ -256,13 +256,13 @@
await getChartsHome(params).then((res) => {
console.log('接口返回数据:', res);
this.list = res.list;
//
this.updatePieChartData(res.list);
// 线
this.updateLineChartData(res.all_date_list);
// this.chartData = res;
// let _business_data = [];
// let _collect_data = [];

@ -188,15 +188,15 @@ import xyTinymce from "@/components/XyTinymce/index.vue";
fileList: [],
types: [{
id: 1,
value: "访客"
value: "普通访客"
},
{
id: 2,
value: "施工"
value: "施工人员"
},
{
id: 3,
value: "车辆"
value: "物流司机"
}
],
form: {

@ -72,7 +72,7 @@
sortable: false,
prop: 'type',
formatter: (cell, data, value) => {
return value=="1"?"普通访客":(value=="2"?"施工访客":"物流车辆")
return value=="1"?"普通访客":(value=="2"?"施工人员":"物流司机")
}
},
{

@ -174,16 +174,16 @@
created_at: '2024-10-13 15:30:00',
admin: { name: '管理员A' },
vehicle_images_detail: [
{
{
id: 2001,
url: 'https://picsum.photos/300/400?random=11',
url: 'https://picsum.photos/300/400?random=11',
original_name: '访客正面照.png',
extension: 'png',
size: 2544
},
{
{
id: 2002,
url: 'https://picsum.photos/300/400?random=12',
url: 'https://picsum.photos/300/400?random=12',
original_name: '访客侧面照.png',
extension: 'png',
size: 2231
@ -194,7 +194,7 @@
id: 2,
name: '李四',
type: 2,
type_text: '施工访客',
type_text: '施工人员',
audit_status: 0,
audit_status_text: '待审核',
accept_admin: { name: '王主管' },
@ -209,9 +209,9 @@
created_at: '2024-10-13 16:00:00',
admin: { name: '管理员B' },
vehicle_images_detail: [
{
{
id: 2003,
url: 'https://picsum.photos/300/400?random=13',
url: 'https://picsum.photos/300/400?random=13',
original_name: '施工人员照片.png',
extension: 'png',
size: 2784
@ -222,7 +222,7 @@
id: 3,
name: '王五',
type: 3,
type_text: '物流车辆',
type_text: '物流司机',
audit_status: 0,
audit_status_text: '待审核',
accept_admin: { name: '赵总监' },
@ -237,16 +237,16 @@
created_at: '2024-10-13 14:20:00',
admin: { name: '管理员C' },
vehicle_images_detail: [
{
{
id: 2004,
url: 'https://picsum.photos/400/300?random=14',
url: 'https://picsum.photos/400/300?random=14',
original_name: '车辆前方照片.png',
extension: 'png',
size: 2686
},
{
{
id: 2005,
url: 'https://picsum.photos/400/300?random=15',
url: 'https://picsum.photos/400/300?random=15',
original_name: '车辆侧面照片.png',
extension: 'png',
size: 2544
@ -272,9 +272,9 @@
created_at: '2024-10-14 08:30:00',
admin: { name: '管理员D' },
vehicle_images_detail: [
{
{
id: 2006,
url: 'https://picsum.photos/300/400?random=16',
url: 'https://picsum.photos/300/400?random=16',
original_name: '访客证件照.png',
extension: 'png',
size: 2544
@ -285,7 +285,7 @@
id: 5,
name: '孙七',
type: 2,
type_text: '施工访客',
type_text: '施工人员',
audit_status: 0,
audit_status_text: '待审核',
accept_admin: { name: '周主任' },
@ -300,9 +300,9 @@
created_at: '2024-10-13 17:15:00',
admin: { name: '管理员E' },
vehicle_images_detail: [
{
{
id: 2007,
url: 'https://picsum.photos/300/400?random=17',
url: 'https://picsum.photos/300/400?random=17',
original_name: '施工人员照片.png',
extension: 'png',
size: 2784
@ -431,28 +431,28 @@
if (this.useMockData) {
//
let filteredData = [...this.mockData]
//
if (this.select.keyword) {
filteredData = filteredData.filter(item =>
filteredData = filteredData.filter(item =>
item.name.includes(this.select.keyword) ||
item.mobile.includes(this.select.keyword) ||
item.idcard.includes(this.select.keyword) ||
item.company_name.includes(this.select.keyword)
)
}
// check
if (this.select.audit_status !== '' && this.select.audit_status !== null && this.select.audit_status !== undefined) {
filteredData = filteredData.filter(item => item.audit_status === this.select.audit_status)
}
//
this.total = filteredData.length
const start = (this.select.page - 1) * this.select.page_size
const end = start + this.select.page_size
this.data = filteredData.slice(start, end)
console.log('使用模拟数据:', { total: this.total, data: this.data })
} else {
//

@ -626,7 +626,7 @@
},
visitType(val) {
if (val) {
this.typeName = val == 1 ? '普通访客' : (val == 2 ? '施工访客' : (val == 3 ? '物流车辆' : ''))
this.typeName = val == 1 ? '普通访客' : (val == 2 ? '施工人员' : (val == 3 ? '物流司机' : ''))
}
}

@ -18,6 +18,19 @@
</div>
</template>
<template v-slot:end_date>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>结束日期
</div>
<div class="xy-table-item-content">
<el-date-picker style="width:300px" v-model="form.end_date" value-format="yyyy-MM-dd" type="date"
placeholder="选择结束日期">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:visit_time_id>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -73,9 +86,9 @@
<div class="xy-table-item-label">
车辆类型
</div>
<div class="xy-table-item-content">
<el-radio-group v-model="form.plate" style="width:300px">
<el-radio v-for="item in parkAreaList" :key="item.value" :label="item.value">{{item.value}}</el-radio>
<div class="xy-table-item-content">
<el-radio-group v-model="form.plate" style="width:300px">
<el-radio v-for="item in parkAreaList" :key="item.value" :label="item.value">{{item.value}}</el-radio>
</el-radio-group>
<!-- <el-input v-model="form.plate" placeholder="请输入车牌号"></el-input> -->
</div>
@ -150,75 +163,75 @@
<el-input v-model="form.company_name" placeholder="请输入单位名称"></el-input>
</div>
</div>
</template>
<template v-slot:cda v-if="visitType==1&&visitAreaText=='生产区'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>CDA编号
</div>
<div class="xy-table-item-content">
<el-input v-model="form.cda" placeholder="请输入CDA编号(如无注明原因)"></el-input>
</div>
</div>
</template>
<!-- <template v-slot:cars v-if="visitType==3">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>到访车辆
</div>
<div class="xy-table-item-content">
<div v-for="(item,index) in form.cars">
<el-input v-model="form.cars[index]" placeholder="请输入到访车辆"></el-input>
</div>
</div>
</div>
</template> -->
<template v-slot:cars v-if="visitType==3">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>到访车辆
</div>
<div class="xy-table-item-content">
<Button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="carsList.push({car:''})">新增到访车辆</Button>
<xy-table style="width: 620px" :height="180" :is-page="false" :list="carsList"
:table-item="carTable">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
<template v-slot:default="scope">
<Button size="small" type="primary" ghost
@click="carsList.splice(scope.$index, 1)">删除</Button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
<template v-slot:carsno v-else>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>到访车辆
</div>
<div class="xy-table-item-content">
<Button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="carsList.push({car:''})">新增到访车辆</Button>
<xy-table style="width: 620px" :height="180" :is-page="false" :list="carsList"
:table-item="carTable">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
<template v-slot:default="scope">
<Button size="small" type="primary" ghost
@click="carsList.splice(scope.$index, 1)">删除</Button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
<template v-slot:cda v-if="visitType==1&&visitAreaText=='生产区'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>CDA编号
</div>
<div class="xy-table-item-content">
<el-input v-model="form.cda" placeholder="请输入CDA编号(如无注明原因)"></el-input>
</div>
</div>
</template>
<!-- <template v-slot:cars v-if="visitType==3">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>到访车辆
</div>
<div class="xy-table-item-content">
<div v-for="(item,index) in form.cars">
<el-input v-model="form.cars[index]" placeholder="请输入到访车辆"></el-input>
</div>
</div>
</div>
</template> -->
<template v-slot:cars v-if="visitType==3">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>到访车辆
</div>
<div class="xy-table-item-content">
<Button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="carsList.push({car:''})">新增到访车辆</Button>
<xy-table style="width: 620px" :height="180" :is-page="false" :list="carsList"
:table-item="carTable">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
<template v-slot:default="scope">
<Button size="small" type="primary" ghost
@click="carsList.splice(scope.$index, 1)">删除</Button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
<template v-slot:carsno v-else>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>到访车辆
</div>
<div class="xy-table-item-content">
<Button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="carsList.push({car:''})">新增到访车辆</Button>
<xy-table style="width: 620px" :height="180" :is-page="false" :list="carsList"
:table-item="carTable">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
<template v-slot:default="scope">
<Button size="small" type="primary" ghost
@click="carsList.splice(scope.$index, 1)">删除</Button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
<template v-slot:follw_people v-if="visitType==1||visitType==2">
@ -261,7 +274,7 @@
</div>
</div>
</div>
</template> -->
</template> -->
<template v-slot:visitorinfos v-if="visitType==1||visitType==2">
<div class="xy-table-item">
@ -283,26 +296,26 @@
</el-select>
</div>
</div>
</template>
<template v-slot:visitorinfos1 v-if="visitAreaText=='生产区'">
<div class="xy-table-item">
<div class="xy-table-item-content" style="width:400px">
陪同人信息
</div>
</div>
</template>
<template v-slot:accompany_id v-if="visitAreaText=='生产区'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>人员
</div>
<div class="xy-table-item-content">
<el-select filterable v-model="form.accompany_id" @change='changeAdmin' placeholder="请选择" style="width:100%">
<el-option v-for="item in adminList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:visitorinfos1 v-if="visitAreaText=='生产区'">
<div class="xy-table-item">
<div class="xy-table-item-content" style="width:400px">
陪同人信息
</div>
</div>
</template>
<template v-slot:accompany_id v-if="visitAreaText=='生产区'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>人员
</div>
<div class="xy-table-item-content">
<el-select filterable v-model="form.accompany_id" @change='changeAdmin' placeholder="请选择" style="width:100%">
<el-option v-for="item in adminList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:accept_goods_admin_id v-if="visitType==3">
<div class="xy-table-item">
@ -350,12 +363,13 @@
type: 'add',
id: '',
visitType: "",
typeName: '',
typeName: '',
visitAreaText:"",
form: {
// type: 1,
visitinfo: "",
date: "",
end_date:'',
visit_time_id: "",
visit_area_id: "",
workRange: "",
@ -367,24 +381,24 @@
mobile: "",
credent: 1,
idcard: "",
company_name: "",
company_name: "",
cda:'',
cars: [],
cars: [],
carsno:[],
follw_people: [],
long_time: 0,
long_time: 0,
longrange: "",
visitorinfos: "",
accpet_department_id: "",
accept_admin_id: "",
visitorinfos1:'',
visitorinfos: "",
accpet_department_id: "",
accept_admin_id: "",
visitorinfos1:'',
accompany_id:'',
accept_goods_admin_id: ""
},
followList:[],
followList:[],
carsList:[],
visitTimeList: [],
visitAreaList: [],
visitAreaList: [],
parkAreaList: [],
reasonList: [],
credentList: [{
@ -406,17 +420,17 @@
},
],
departmentList: [],
adminList: [],
carTable:[{
label: "车牌号",
prop: "car",
// width: 200,
customFn: (row, scope) => {
return (<el-input type="text" placeholder = "请填写车牌号"
v-model={row.car}>
</el-input>
)
}
adminList: [],
carTable:[{
label: "车牌号",
prop: "car",
// width: 200,
customFn: (row, scope) => {
return (<el-input type="text" placeholder = "请填写车牌号"
v-model={row.car}>
</el-input>
)
}
}],
followTable: [{
label: "姓名",
@ -497,10 +511,10 @@
visit_area_id: [{
required: true,
message: '请选择到访区域'
}],
plate: [{
required: true,
message: '请选择停车区域'
}],
plate: [{
required: true,
message: '请选择停车区域'
}],
name: [{
required: true,
@ -514,31 +528,31 @@
pattern: /^[1][3-9][\d]{9}/,
message: "手机号格式错误",
}
],
company_name: [{
required: true,
message: '请输入单位名称'
}],
cda:[{
required: true,
message: '请输入CDA编号'
}],
// cars: [{
// required: true,
// message: ''
// }],
accompany_id: [{
required: true,
message: '请选择陪同人'
}],
accept_admin_id: [{
required: true,
message: '请选被访人'
}],
accept_goods_admin_id: [{
required: true,
message: '请选择收货人'
}]
],
company_name: [{
required: true,
message: '请输入单位名称'
}],
cda:[{
required: true,
message: '请输入CDA编号'
}],
// cars: [{
// required: true,
// message: ''
// }],
accompany_id: [{
required: true,
message: '请选择陪同人'
}],
accept_admin_id: [{
required: true,
message: '请选被访人'
}],
accept_goods_admin_id: [{
required: true,
message: '请选择收货人'
}]
},
pickerOptions: {
@ -579,39 +593,40 @@
const res = await show({
id: this.id
})
this.form = {
visitinfo: "",
date: res?.date,
visit_time_id: res?.visit_time_id,
visit_area_id: res?.visit_area_id,
workRange: res.work_start_time?[res.work_start_time,res.work_end_time]:"",
reason: res?.reason,
plate: res?.plate,
remark: res?.remark,
visitorinfo: "",
name: res?.name,
mobile: res?.mobile,
credent: res?.credent,
idcard: res?.idcard,
company_name: res?.company_name,
cda:res?.cda,
cars:[],
carsno: [],
follw_people: res?.follw_people,
long_time: res?.long_time,
longrange: res.start_date?[res.start_date,res.end_date]:"",
visitorinfos: "",
accpet_department_id: res?.accpet_department_id,
accept_admin_id: res?.accept_admin_id,
visitorinfos1:'',
accompany_id:res?.accompany_id,
accept_goods_admin_id: res?parseInt(res.accept_goods_admin_id):''
}
this.followList = res?.follw_people
for(var k of res?.cars){
this.carsList.push({car:k})
}
this.visitAreaText = res?.visit_area.name
this.form = {
visitinfo: "",
date: res?.date,
end_date: res?.end_date,
visit_time_id: res?.visit_time_id,
visit_area_id: res?.visit_area_id,
workRange: res.work_start_time?[res.work_start_time,res.work_end_time]:"",
reason: res?.reason,
plate: res?.plate,
remark: res?.remark,
visitorinfo: "",
name: res?.name,
mobile: res?.mobile,
credent: res?.credent,
idcard: res?.idcard,
company_name: res?.company_name,
cda:res?.cda,
cars:[],
carsno: [],
follw_people: res?.follw_people,
long_time: res?.long_time,
longrange: res.start_date?[res.start_date,res.end_date]:"",
visitorinfos: "",
accpet_department_id: res?.accpet_department_id,
accept_admin_id: res?.accept_admin_id,
visitorinfos1:'',
accompany_id:res?.accompany_id,
accept_goods_admin_id: res?parseInt(res.accept_goods_admin_id):''
}
this.followList = res?.follw_people
for(var k of res?.cars){
this.carsList.push({car:k})
}
this.visitAreaText = res?.visit_area.name
console.log(this.followList,this.carsList)
},
async getLabel() {
@ -625,100 +640,100 @@
const reason = await getparameter({
number: "reasonList",
});
this.reasonList = reason?.detail;
const park = await getparameter({
number: "parkArea",
});
this.reasonList = reason?.detail;
const park = await getparameter({
number: "parkArea",
});
this.parkAreaList = park?.detail;
},
changeVisitArea(val){
console.log(val)
this.visitAreaList.map(item=>{
if(item.id==val){
this.visitAreaText = item.name
}
})
console.log(this.visitAreaText)
},
changelongrange(val){
this.form.start_date = val[0]
this.form.end_date = val[1]
},
changeworkrange(val){
this.form.work_start_time = val[0]
this.form.work_end_time = val[1]
},
changeAdmin(item){
if(item){
this.adminList.map(e=>{
if(e.id==item){
this.form.accompany_id = e.id
}
})
}
},
changeAdmin1(item){
if(item){
this.adminList.map(e=>{
if(e.id==item){
this.form.accept_admin_id = e.id
this.form.accpet_department_id = e.department_id
if(this.visitAreaText=='非生产区'){
this.form.accompany_id = e.id
}
}
})
}
},
changeGoods(item){
if(item){
this.adminList.map(e=>{
if(e.id==item){
this.form.accept_admin_id = e.id
this.form.accept_goods_admin_id = e.id
this.form.accpet_department_id = e.department_id
if(this.visitAreaText=='非生产区'){
this.form.accompany_id = e.id
}
}
})
}
},
changeVisitArea(val){
console.log(val)
this.visitAreaList.map(item=>{
if(item.id==val){
this.visitAreaText = item.name
}
})
console.log(this.visitAreaText)
},
changelongrange(val){
this.form.start_date = val[0]
this.form.end_date = val[1]
},
changeworkrange(val){
this.form.work_start_time = val[0]
this.form.work_end_time = val[1]
},
changeAdmin(item){
if(item){
this.adminList.map(e=>{
if(e.id==item){
this.form.accompany_id = e.id
}
})
}
},
changeAdmin1(item){
if(item){
this.adminList.map(e=>{
if(e.id==item){
this.form.accept_admin_id = e.id
this.form.accpet_department_id = e.department_id
if(this.visitAreaText=='非生产区'){
this.form.accompany_id = e.id
}
}
})
}
},
changeGoods(item){
if(item){
this.adminList.map(e=>{
if(e.id==item){
this.form.accept_admin_id = e.id
this.form.accept_goods_admin_id = e.id
this.form.accpet_department_id = e.department_id
if(this.visitAreaText=='非生产区'){
this.form.accompany_id = e.id
}
}
})
}
},
submit() {
let that = this
if(that.form.credent==1){
const regtest = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
if(!regtest.test(that.form.idcard)){
this.$successMessage('身份证格式错误', '','warning')
return
}
}
if(that.form.credent==2){
const regtest = /^([a-zA-z]|[0-9]){5,17}$/
if(!regtest.test(that.form.idcard)){
this.$successMessage('护照格式错误', '','warning')
return
}
}
that.form.follw_people = that.followList
let _car = []
for(var k of that.carsList){
_car.push(k.car)
}
this.form.cars = _car
console.log("this.form.cars",this.form.cars)
// return
if(this.visitType==3){
this.form.accept_admin_id = this.form.accept_goods_admin_id
let that = this
if(that.form.credent==1){
const regtest = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
if(!regtest.test(that.form.idcard)){
this.$successMessage('身份证格式错误', '','warning')
return
}
}
if(that.form.credent==2){
const regtest = /^([a-zA-z]|[0-9]){5,17}$/
if(!regtest.test(that.form.idcard)){
this.$successMessage('护照格式错误', '','warning')
return
}
}
that.form.follw_people = that.followList
let _car = []
for(var k of that.carsList){
_car.push(k.car)
}
this.form.cars = _car
console.log("this.form.cars",this.form.cars)
// return
if(this.visitType==3){
this.form.accept_admin_id = this.form.accept_goods_admin_id
}
if (this.type === 'editor') {
this.form.id = this.id
}else{
this.form.id = ""
}else{
this.form.id = ""
}
// return
save({
@ -732,9 +747,9 @@
},
watch: {
isShow(newVal) {
if (newVal) {
console.log("this.visitType",this.visitType)
this.form.type = this.visitType
if (newVal) {
console.log("this.visitType",this.visitType)
this.form.type = this.visitType
this.form.audit_status = 1
if (this.type === 'editor') {
this.getDetail()
@ -743,15 +758,15 @@
this.id = ''
this.type = ''
this.visitType = 1
this.followList = []
this.carsList = []
this.followList = []
this.carsList = []
this.visitAreaText=''
this.$refs['dialog'].reset()
}
},
visitType(val) {
if (val) {
this.typeName = val == 1 ? '普通访客' : (val == 2 ? '施工访客' : (val == 3 ? '物流车辆' : ''))
this.typeName = val == 1 ? '普通访客' : (val == 2 ? '施工人员' : (val == 3 ? '物流司机' : ''))
}
}
@ -775,11 +790,11 @@
position: absolute;
top: 4px;
right: 4px;
}
.carsitem{
width:450px;margin-bottom:10px;margin-bottom: 10px;display: flex;align-items: center;justify-content: space-between;
}
.carsitem Button{
margin-left:10px
}
</style>
.carsitem{
width:450px;margin-bottom:10px;margin-bottom: 10px;display: flex;align-items: center;justify-content: space-between;
}
.carsitem Button{
margin-left:10px
}
</style>

@ -91,6 +91,16 @@
{{form.date}}
</div>
</div>
</template>
<template v-slot:end_date>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>结束日期
</div>
<div class="xy-table-item-content">
{{form.end_date}}
</div>
</div>
</template>
<template v-slot:visit_time_id>
<div class="xy-table-item">
@ -348,7 +358,7 @@
照片信息
</div>
</template>
<!-- 照片列表 -->
<template v-slot:photos>
<div class="photo-full-width" v-if="form.vehicle_images_detail && form.vehicle_images_detail.length > 0">
@ -419,7 +429,8 @@
car_no: '',
visitinfo: "",
date: "",
date: "",
end_date:'',
visit_time_id: "",
visit_area_id: "",
workRange: "",
@ -719,7 +730,7 @@
display: block !important;
margin: 0 !important;
padding: 0 !important;
// xy-dialog
position: relative;
left: -50%;
@ -736,37 +747,37 @@
width: 100%;
justify-content: flex-start;
max-width: 100%;
.photo-item {
display: flex;
flex-direction: column;
align-items: center;
.photo-wrapper {
position: relative;
width: 120px;
height: 160px;
border-radius: 8px;
overflow: hidden;
.photo-image {
width: 100%;
height: 100%;
border: 2px solid #e4e7ed;
cursor: pointer;
transition: all 0.3s;
&:hover {
border-color: #409eff;
}
::v-deep .el-image__inner {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s;
}
.image-slot {
display: flex;
justify-content: center;
@ -775,13 +786,13 @@
height: 100%;
background: #f5f7fa;
color: #909399;
i {
font-size: 40px;
}
}
}
.photo-overlay {
position: absolute;
top: 0;
@ -796,31 +807,31 @@
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
i {
font-size: 32px;
color: #fff;
margin-bottom: 8px;
}
span {
color: #fff;
font-size: 14px;
font-weight: 500;
}
}
&:hover {
.photo-overlay {
opacity: 1;
}
.photo-image ::v-deep .el-image__inner {
transform: scale(1.1);
}
}
}
.photo-desc {
margin-top: 8px;
font-size: 12px;
@ -850,13 +861,13 @@
justify-content: center !important;
transition: all 0.3s !important;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.5) !important;
&:hover {
background: rgba(255, 73, 73, 0.9) !important;
transform: scale(1.1) rotate(90deg) !important;
}
}
//
.el-image-viewer__prev,
.el-image-viewer__next {
@ -867,32 +878,32 @@
border-radius: 50% !important;
color: #fff !important;
transition: all 0.3s !important;
&:hover {
background: rgba(64, 158, 255, 0.9) !important;
transform: scale(1.1) !important;
}
}
//
.el-image-viewer__actions__inner {
background: rgba(0, 0, 0, 0.7) !important;
border-radius: 30px !important;
padding: 10px 20px !important;
i {
color: #fff !important;
font-size: 24px !important;
margin: 0 8px !important;
transition: all 0.3s !important;
&:hover {
color: #409eff !important;
transform: scale(1.2) !important;
}
}
}
//
.el-image-viewer__mask {
background: rgba(0, 0, 0, 0.85) !important;

@ -37,10 +37,10 @@
@click="visible=false,$refs['addCommon'].isShow = true,$refs['addCommon'].type = 'add',$refs['addCommon'].visitType = 1">普通访客
</el-button>
<el-button type="primary" size="mini"
@click="visible=false,$refs['addCommon'].isShow = true,$refs['addCommon'].type = 'add',$refs['addCommon'].visitType = 2">施工访客
@click="visible=false,$refs['addCommon'].isShow = true,$refs['addCommon'].type = 'add',$refs['addCommon'].visitType = 2">施工人员
</el-button>
<el-button type="primary" size="mini"
@click="visible=false,$refs['addCommon'].isShow = true,$refs['addCommon'].type = 'add',$refs['addCommon'].visitType = 3">物流车辆</el-button>
@click="visible=false,$refs['addCommon'].isShow = true,$refs['addCommon'].type = 'add',$refs['addCommon'].visitType = 3">物流司机</el-button>
</div>
<el-button slot="reference" size="medium" type="primary" style="margin-left: 10px">新增</el-button>
</el-popover>
@ -151,13 +151,13 @@
<el-col :span="12">
<div class="detail-item">
<span class="detail-label">入场时间</span>
<span class="detail-value">{{ getGateTime(currentDetail, '进厂') || '-' }}</span>
<span class="detail-value multi-line">{{ getGateTime(currentDetail, '进厂') || '-' }}</span>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<span class="detail-label">离场时间</span>
<span class="detail-value">{{ getGateTime(currentDetail, '离厂') || '-' }}</span>
<span class="detail-value multi-line">{{ getGateTime(currentDetail, '离厂') || '-' }}</span>
</div>
</el-col>
</el-row>
@ -190,7 +190,7 @@
</div>
</el-col>
</el-row>
<!-- 照片信息 -->
<el-row :gutter="20" class="detail-row" v-if="currentDetail.vehicle_images_detail && currentDetail.vehicle_images_detail.length > 0">
<el-col :span="24">
@ -322,16 +322,16 @@
name: '管理员A'
},
vehicle_images_detail: [
{
{
id: 1001,
url: 'https://picsum.photos/300/400?random=1',
url: 'https://picsum.photos/300/400?random=1',
original_name: '访客正面照.png',
extension: 'png',
size: 2544
},
{
{
id: 1002,
url: 'https://picsum.photos/300/400?random=2',
url: 'https://picsum.photos/300/400?random=2',
original_name: '访客侧面照.png',
extension: 'png',
size: 2231
@ -342,7 +342,7 @@
id: 2,
name: '李四',
type: 2,
type_text: '施工访客',
type_text: '施工人员',
audit_status: 1,
audit_status_text: '通过(待进厂)',
accept_admin: {
@ -362,9 +362,9 @@
name: '管理员B'
},
vehicle_images_detail: [
{
{
id: 1003,
url: 'https://picsum.photos/300/400?random=3',
url: 'https://picsum.photos/300/400?random=3',
original_name: '施工人员照片.png',
extension: 'png',
size: 2784
@ -375,7 +375,7 @@
id: 3,
name: '王五',
type: 3,
type_text: '物流车辆',
type_text: '物流司机',
audit_status: 4,
audit_status_text: '已离厂',
accept_admin: {
@ -398,23 +398,23 @@
name: '管理员C'
},
vehicle_images_detail: [
{
{
id: 1004,
url: 'https://picsum.photos/400/300?random=4',
url: 'https://picsum.photos/400/300?random=4',
original_name: '车辆前方照片.png',
extension: 'png',
size: 2686
},
{
{
id: 1005,
url: 'https://picsum.photos/400/300?random=5',
url: 'https://picsum.photos/400/300?random=5',
original_name: '车辆侧面照片.png',
extension: 'png',
size: 2544
},
{
{
id: 1006,
url: 'https://picsum.photos/400/300?random=6',
url: 'https://picsum.photos/400/300?random=6',
original_name: '车牌号照片.png',
extension: 'png',
size: 2231
@ -445,9 +445,9 @@
name: '管理员D'
},
vehicle_images_detail: [
{
{
id: 1007,
url: 'https://picsum.photos/300/400?random=7',
url: 'https://picsum.photos/300/400?random=7',
original_name: '访客证件照.png',
extension: 'png',
size: 2544
@ -458,7 +458,7 @@
id: 5,
name: '孙七',
type: 2,
type_text: '施工访客',
type_text: '施工人员',
audit_status: 2,
audit_status_text: '驳回',
accept_admin: {
@ -508,7 +508,7 @@
id: 7,
name: '吴九',
type: 3,
type_text: '物流车辆',
type_text: '物流司机',
audit_status: 3,
audit_status_text: '已进厂',
accept_admin: {
@ -530,16 +530,16 @@
name: '管理员G'
},
vehicle_images_detail: [
{
{
id: 1008,
url: 'https://picsum.photos/400/300?random=8',
url: 'https://picsum.photos/400/300?random=8',
original_name: '货车照片.png',
extension: 'png',
size: 2686
},
{
{
id: 1009,
url: 'https://picsum.photos/300/400?random=9',
url: 'https://picsum.photos/300/400?random=9',
original_name: '司机照片.png',
extension: 'png',
size: 2544
@ -725,35 +725,35 @@
if (this.useMockData) {
//
let filteredData = [...this.mockData]
//
if (this.select.keyword) {
filteredData = filteredData.filter(item =>
filteredData = filteredData.filter(item =>
item.name.includes(this.select.keyword) ||
item.mobile.includes(this.select.keyword) ||
item.idcard.includes(this.select.keyword) ||
item.company_name.includes(this.select.keyword)
)
}
//
if (this.select.audit_status !== '' && this.select.audit_status !== null && this.select.audit_status !== undefined) {
filteredData = filteredData.filter(item => item.audit_status === this.select.audit_status)
}
//
if (this.select.start_date && this.select.end_date) {
filteredData = filteredData.filter(item => {
return item.date >= this.select.start_date && item.date <= this.select.end_date
})
}
//
this.total = filteredData.length
const start = (this.select.page - 1) * this.select.page_size
const end = start + this.select.page_size
this.data = filteredData.slice(start, end)
console.log('使用模拟数据:', { total: this.total, data: this.data })
} else {
//
@ -807,9 +807,13 @@
},
// /
getGateTime(record, remark) {
console.log(record,remark)
if (record.gate_logs && record.gate_logs.length > 0) {
const log = record.gate_logs.find(item => item.remark === remark)
return log ? log.created_at : ''
const logs = record.gate_logs.filter(item => item.remark === remark)
if (logs && logs.length > 0) {
//
return logs.map(item => item.created_at).join('\n')
}
}
return ''
},
@ -841,77 +845,81 @@
//
.detail-content {
padding: 10px;
.detail-row {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
}
.detail-item {
display: flex;
align-items: flex-start;
min-height: 32px;
.detail-label {
font-weight: 600;
color: #606266;
min-width: 90px;
flex-shrink: 0;
}
.detail-value {
color: #303133;
flex: 1;
word-break: break-all;
&.multi-line {
white-space: pre-line;
}
}
//
&.detail-photos {
align-items: flex-start;
.detail-value {
width: 100%;
}
.photo-list {
display: flex;
flex-wrap: wrap;
gap: 15px;
margin-top: 5px;
.photo-item {
display: flex;
flex-direction: column;
align-items: center;
.photo-wrapper {
position: relative;
width: 120px;
height: 160px;
border-radius: 8px;
overflow: hidden;
.photo-image {
width: 100%;
height: 100%;
border: 2px solid #e4e7ed;
cursor: pointer;
transition: all 0.3s;
&:hover {
border-color: #409eff;
}
::v-deep .el-image__inner {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s;
}
.image-slot {
display: flex;
justify-content: center;
@ -920,13 +928,13 @@
height: 100%;
background: #f5f7fa;
color: #909399;
i {
font-size: 40px;
}
}
}
.photo-overlay {
position: absolute;
top: 0;
@ -941,31 +949,31 @@
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
i {
font-size: 32px;
color: #fff;
margin-bottom: 8px;
}
span {
color: #fff;
font-size: 14px;
font-weight: 500;
}
}
&:hover {
.photo-overlay {
opacity: 1;
}
.photo-image ::v-deep .el-image__inner {
transform: scale(1.1);
}
}
}
.photo-desc {
margin-top: 8px;
font-size: 12px;
@ -1025,13 +1033,13 @@
justify-content: center !important;
transition: all 0.3s !important;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.5) !important;
&:hover {
background: rgba(255, 73, 73, 0.9) !important;
transform: scale(1.1) rotate(90deg) !important;
}
}
//
.el-image-viewer__prev,
.el-image-viewer__next {
@ -1042,32 +1050,32 @@
border-radius: 50% !important;
color: #fff !important;
transition: all 0.3s !important;
&:hover {
background: rgba(64, 158, 255, 0.9) !important;
transform: scale(1.1) !important;
}
}
//
.el-image-viewer__actions__inner {
background: rgba(0, 0, 0, 0.7) !important;
border-radius: 30px !important;
padding: 10px 20px !important;
i {
color: #fff !important;
font-size: 24px !important;
margin: 0 8px !important;
transition: all 0.3s !important;
&:hover {
color: #409eff !important;
transform: scale(1.2) !important;
}
}
}
//
.el-image-viewer__mask {
background: rgba(0, 0, 0, 0.85) !important;

@ -79,9 +79,9 @@
if(value==1){
return '普通访客'
}else if(value==2){
return '施工访客'
return '施工人员'
}else if(value==3){
return '物流车辆'
return '物流司机'
}else{
return '未知'
}

Loading…
Cancel
Save