Compare commits

...

9 Commits

Author SHA1 Message Date
6ec38cfd31 页面修改 2025-08-26 16:27:52 +08:00
ed68fafa5d 页面修改 2025-08-26 16:08:30 +08:00
c74e635212 页面修改 2025-08-23 18:32:30 +08:00
50dbd27f51 问题处理 2025-08-21 16:15:37 +08:00
f1c1e9d905 更新 pages/sys/msg/index.vue 2025-08-21 14:22:30 +08:00
d927f79768 页面调整 2025-08-20 11:34:43 +08:00
845c5593ba 页面调整 2025-08-20 11:33:31 +08:00
6636b4f1b2 页面调整 2025-08-15 11:08:21 +08:00
8365986c05 页面调整 2025-08-14 14:27:26 +08:00
6 changed files with 865 additions and 632 deletions

View File

@@ -26,5 +26,6 @@ const config = {
// 设置后台接口服务的基础地址
// config.baseUrl = 'http://tc.cqsznc.com:7080';
// config.baseUrl = 'http://192.168.71.139:8080';
config.baseUrl = '/api';
config.baseUrl = 'http://183.230.235.66:11010/api';
// config.baseUrl = '/api';
export default config;

View File

@@ -9,6 +9,9 @@ const install = (Vue, vm) => {
// 将各个定义的接口名称统一放进对象挂载到vm.$u.api(因为vm就是this也即this.$u.api)下
vm.$u.api = {
//获取单位列表
getUnits:(params = {}) => vm.$u.get(config.adminPath+'/property/enum-fetcher/enum-values/getUnit',params),
codesub: (params = {}) => vm.$u.get(config.adminPath+'/property/visitorManagement/useqr', params),
uploadimg: (params = {}) => vm.$u.post(config.adminPath+'/resource/oss/upload', params),
fksub: (params = {}) => vm.$u.post(config.adminPath+'/property/visitorManagement/add', params),

39
package-lock.json generated
View File

@@ -1,32 +1,49 @@
{
"name": "Aidex",
"version": "2.3.0",
"lockfileVersion": 1,
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Aidex",
"version": "2.3.0",
"license": "MIT",
"dependencies": {
"@icon-park/vue": {
"@icon-park/vue": "^1.3.5",
"vue-i18n": "^8.20.0"
}
},
"node_modules/@icon-park/vue": {
"version": "1.3.5",
"resolved": "https://registry.nlark.com/@icon-park/vue/download/@icon-park/vue-1.3.5.tgz",
"resolved": "https://registry.npmmirror.com/@icon-park/vue/download/@icon-park/vue-1.3.5.tgz",
"integrity": "sha1-twRuLCtdpexNZz/7Wta8gL6loTs=",
"requires": {
"dependencies": {
"@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
"csstype": "^3.0.3"
},
"engines": {
"node": ">= 8.0.0",
"npm": ">= 5.0.0"
},
"peerDependencies": {
"vue": "2.x"
}
},
"@vue/babel-helper-vue-jsx-merge-props": {
"node_modules/@vue/babel-helper-vue-jsx-merge-props": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
"resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
"integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
},
"csstype": {
"node_modules/csstype": {
"version": "3.0.9",
"resolved": "https://registry.nlark.com/csstype/download/csstype-3.0.9.tgz?cache=0&sync_timestamp=1631540658518&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-3.0.9.tgz",
"resolved": "https://registry.npmmirror.com/csstype/download/csstype-3.0.9.tgz",
"integrity": "sha1-ZBCvMbJr0FIJM9AsvGT86c4/vws="
},
"vue-i18n": {
"node_modules/vue-i18n": {
"version": "8.20.0",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.20.0.tgz",
"integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg=="
"resolved": "https://registry.npmmirror.com/vue-i18n/download/vue-i18n-8.20.0.tgz",
"integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg==",
"deprecated": "Vue I18n v8.x has reached EOL and is no longer actively maintained. About maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html"
}
}
}

View File

@@ -21,43 +21,43 @@
"navigationBarTextStyle": "black",
"navigationBarTitleText": "Aidex",
"navigationBarBackgroundColor": "#ffffff"
},
"tabBar": {
"color": "#333333",
"selectedColor": "#4094ff",
"backgroundColor": "#ffffff",
"borderStyle": "white",
"list": [
{
"pagePath": "pages/sys/msg/index",
"iconPath": "static/aidex/tabbar/msg_1.png",
"selectedIconPath": "static/aidex/tabbar/msg_2.png",
"text": "访客等级"
},
}
// "tabBar": {
// "color": "#333333",
// "selectedColor": "#4094ff",
// "backgroundColor": "#ffffff",
// "borderStyle": "white",
// "list": [
// {
// "pagePath": "pages/sys/home/index",
// "iconPath": "static/aidex/tabbar/home_1.png",
// "selectedIconPath": "static/aidex/tabbar/home_2.png",
// "text": "首页"
// "pagePath": "pages/sys/msg/index",
// "iconPath": "static/aidex/tabbar/msg_1.png",
// "selectedIconPath": "static/aidex/tabbar/msg_2.png",
// "text": "访客等级"
// },
{
"pagePath": "pages/sys/work/work",
"iconPath": "static/aidex/tabbar/apply_1.png",
"selectedIconPath": "static/aidex/tabbar/apply_2.png",
"text": "到访确认"
},
{
"pagePath": "pages/sys/qrpage/qrpage",
"iconPath": "static/aidex/tabbar/book_1.png",
"selectedIconPath": "static/aidex/tabbar/book_2.png",
"text": "扫码登记"
},
{
"pagePath": "pages/sys/camera/camera",
"iconPath": "static/aidex/tabbar/my_1.png",
"selectedIconPath": "static/aidex/tabbar/my_2.png",
"text": "我的"
}
]
}
// // {
// // "pagePath": "pages/sys/home/index",
// // "iconPath": "static/aidex/tabbar/home_1.png",
// // "selectedIconPath": "static/aidex/tabbar/home_2.png",
// // "text": "首页"
// // },
// {
// "pagePath": "pages/sys/work/work",
// "iconPath": "static/aidex/tabbar/apply_1.png",
// "selectedIconPath": "static/aidex/tabbar/apply_2.png",
// "text": "到访确认"
// },
// {
// "pagePath": "pages/sys/qrpage/qrpage",
// "iconPath": "static/aidex/tabbar/book_1.png",
// "selectedIconPath": "static/aidex/tabbar/book_2.png",
// "text": "扫码登记"
// },
// {
// "pagePath": "pages/sys/camera/camera",
// "iconPath": "static/aidex/tabbar/my_1.png",
// "selectedIconPath": "static/aidex/tabbar/my_2.png",
// "text": "我的"
// }
// ]
// }
}

View File

@@ -13,7 +13,14 @@
</view>
<view class="form-item">
<text class="label required">所属公司</text>
<text class="label required">证件号</text>
<view class="input-wrapper">
<input type="text" placeholder="请输入您的证件号" v-model="formData.idCard"/>
</view>
</view>
<view class="form-item">
<text class="label">所属公司</text>
<view class="input-wrapper">
<input type="text" placeholder="请输入您的公司名称" v-model="formData.visitorUnit"/>
</view>
@@ -28,15 +35,28 @@
<view class="form-item">
<text class="label required">拜访事由</text>
<view class="input-wrapper">
<!-- <view class="input-wrapper">
<input type="text" placeholder="请简要描述拜访目的" v-model="formData.visitingReason" />
</view> -->
<view class="select-wrapper" :class="{active: showTypeDialog}" @click.stop="showTypeDialog = true">
<text>{{ formData.visitingReason || '请选择拜访事由' }}</text>
<image class="filter-img" src="/static/ic_down_arrow_g.png"/>
<view v-if="showTypeDialog" class="dropdown">
<view class="dropdown-list">
<view v-for="(item, index) in typeList" :key="index" class="dropdown-item"
@click.stop="selectVisitingReason(item)">
{{ item }}
</view>
</view>
</view>
</view>
</view>
<!-- 被访人信息 -->
<view class="section-title">被访人信息</view>
<view class="form-item">
<text class="label required">被访人姓名</text>
<text class="label">被访人姓名</text>
<view class="input-wrapper">
<input type="text" placeholder="请输入被访人姓名" v-model="formData.interviewedPerson"/>
</view>
@@ -44,8 +64,17 @@
<view class="form-item">
<text class="label">被访单位</text>
<view class="input-wrapper">
<input type="text" placeholder="请输入被访单位名称" v-model="formData.interviewedUnit" />
<view class="select-wrapper" :class="{active: showUnitDialog}" @click.stop="showUnitDialog = true">
<text>{{ formData.interviewedUnit || '请选择被访单位' }}</text>
<image class="filter-img" src="/static/ic_down_arrow_g.png"/>
<view v-if="showUnitDialog" class="dropdown">
<view class="dropdown-list">
<view v-for="(item, index) in unitList" :key="index" class="dropdown-item"
@click.stop="selectInterviewedUnit(item)">
{{ item.name }}
</view>
</view>
</view>
</view>
</view>
@@ -89,7 +118,7 @@
</view>
<!-- 预约信息 -->
<view class="section-title">预约信息</view>
<!-- <view class="section-title">预约信息</view>
<view class="form-item">
<text class="label">预约车位</text>
<view class="picker-wrapper">
@@ -97,15 +126,15 @@
<view class="picker-value">{{formData.bookingParkingSpace ? '需要' : '不需要'}}</view>
</picker>
</view>
</view>
</view> -->
<!-- 条件显示预约车位时显示车牌号 -->
<view class="form-item" v-if="formData.bookingParkingSpace">
<!-- <view class="form-item" v-if="formData.bookingParkingSpace">
<text class="label required">车牌号</text>
<view class="input-wrapper">
<input type="text" placeholder="请输入车牌号" v-model="formData.licensePlate" />
</view>
</view>
</view> -->
<view class="form-item">
<text class="label required">人脸照片</text>
@@ -118,6 +147,11 @@
</view>
</view>
</view>
<view class="form-item">
<view class="face-tip-wrapper">
<text class="face-tip">请确保无遮挡光线明亮正脸拍摄</text>
</view>
</view>
<!-- <view class="form-item">
<text class="label">预约状态</text>
@@ -148,13 +182,14 @@
return {
formData: {
visitorName: '1',
visitorUnit: '1',
visitorPhone: '15555555555',
visitingReason: '1',
interviewedPerson: '1',
interviewedUnit: '1',
interviewedPhone: '15555555555',
visitorName: '',
visitorUnit: '',
idCard: '',
visitorPhone: '',
visitingReason: '',
interviewedPerson: '',
interviewedUnit: '',
interviewedPhone: '',
visitingBeginDate: date,
visitingBeginTime: time,
visitingEndDate: date,
@@ -171,7 +206,11 @@
1: '已确认',
2: '已取消',
3: '已完成'
}
},
typeList: ['业务洽谈', '会议参与', '面试应聘', '技术支持', '办事咨询', '调研考察'],
unitList: [],
showTypeDialog: false,
showUnitDialog: false
}
},
onLoad(options) {
@@ -195,13 +234,49 @@
// #ifdef APP-PLUS
plus.screen.lockOrientation('default');
// #endif
// 获取单位列表
this.getUnits();
},
onReady() {
// #ifdef APP-PLUS
plus.screen.lockOrientation('landscape-primary');
// #endif
},
mounted() {
document.addEventListener('click', this.handleClickOutside);
// 调用getUnits方法获取被访单位数据
this.getUnits();
},
beforeDestroy() {
document.removeEventListener('click', this.handleClickOutside);
},
methods: {
async getUnits() {
let res = await this.$u.api.getUnits();
if (res.code == '200') {
this.unitList = res.data;
}
},
// 添加选择拜访事由方法
selectVisitingReason(reason) {
this.formData.visitingReason = reason;
this.showTypeDialog = false;
},
// 添加选择被访单位方法
selectInterviewedUnit(unit) {
this.formData.interviewedUnit = unit.name;
this.formData.interviewedUnitId = unit.value;
this.showUnitDialog = false;
},
// 点击外部关闭下拉菜单
handleClickOutside() {
this.showTypeDialog = false;
this.showUnitDialog = false;
},
// 处理日期时间选择
onBeginDateChange(e) {
this.formData.visitingBeginDate = e.detail.value;
@@ -217,12 +292,12 @@
},
// 处理车位预约选择
handleParkingChange(e) {
this.formData.bookingParkingSpace = e.detail.value === 1;
if (!this.formData.bookingParkingSpace) {
this.formData.licensePlate = '';
}
},
// handleParkingChange(e) {
// this.formData.bookingParkingSpace = e.detail.value === 1;
// if (!this.formData.bookingParkingSpace) {
// this.formData.licensePlate = '';
// }
// },
// 处理状态选择
handleStatusChange(e) {
@@ -237,6 +312,20 @@
success: (res) => {
// console.log(res.tempFilePaths[0])
this.formData.facePictures = res.tempFilePaths[0];
// 压缩图片
uni.compressImage({
src: this.formData.facePictures, // 原图路径
quality: 70, // 压缩质量 0-100
success: (res) => {
this.formData.facePictures = res.tempFilePath
},
fail: (err) => {
uni.showToast({
title: '拍照失败',
icon: 'none'
});
}
});
},
fail: (err) => {
uni.showToast({
@@ -253,9 +342,11 @@
qrCodeId,
visitorName,
visitorUnit,
idCard,
visitorPhone,
visitingReason,
interviewedPerson,
interviewedUnit,
bookingParkingSpace,
licensePlate,
facePictures,
@@ -271,8 +362,13 @@
}
// 验证公司
if (!visitorUnit) {
return '请输入所属公司';
if (!idCard) {
return '请输入证件号';
}
// 验证被访单位
if (!interviewedUnit) {
return '请选择被访单位';
}
// 验证电话
@@ -291,14 +387,14 @@
}
// 验证被访人
if (!interviewedPerson) {
return '请输入被访人姓名';
}
// if (!interviewedPerson) {
// return '请输入被访人姓名';
// }
// 验证车牌号(如果需要预约车位)
if (bookingParkingSpace && !licensePlate) {
return '请输入车牌号';
}
// if (bookingParkingSpace && !licensePlate) {
// return '请输入车牌号';
// }
if (!facePictures) {
@@ -331,12 +427,7 @@
this.formData.visitingBeginTime = `${this.formData.visitingBeginDate} ${this.formData.visitingBeginTime}`;
this.formData.visitingEndTime = `${this.formData.visitingEndDate} ${this.formData.visitingEndTime}`;
// 准备提交数据
const submitData = {
...this.formData,
bookingParkingSpace: this.formData.bookingParkingSpace ? 0 : 1
};
console.log(submitData)
// 显示加载提示
uni.showLoading({
@@ -369,25 +460,59 @@
formData: {
'code': this.formData.qrCodeId // 示例:其他表单字段
},
// 上传进度回调
onProgressUpdate: (res) => {
this.progress = res.progress;
console.log('上传进度:' + res.progress);
},
// // 上传进度回调
// onProgressUpdate: (res) => {
// this.progress = res.progress;
// console.log('上传进度:' + res.progress);
// },
// 上传成功回调
success: (res) => {
console.log('上传成功', res);
this.uploadResult = res.data;
uni.showToast({
title: '上传成功',
icon: 'success'
title: "上传图片成功!",
icon: "success"
})
// this.formData.facePictures = res.data.ossId;
// 准备提交数据
const submitData = {
...this.formData,
bookingParkingSpace: this.formData.bookingParkingSpace ? 0 : 1
};
const parsedData = JSON.parse(res.data);
if(parsedData.code == 200){
// 第二步从解析后的数据中获取ossId
const ossId = parsedData.data.ossId;
console.log("ossId",ossId)
submitData.facePictures=ossId;
submitData.interviewedUnitId = this.formData.interviewedUnitId;
console.log(submitData)
this.$u.api.fksub(submitData).then(res => {
console.log(res)
if (res.code == 200) {
uni.showToast({
title: "提交成功,请等待审核!",
icon: "success"
})
}
})
}else{
uni.showToast({
title: '提交失败',
icon: 'none'
});
}
// uni.showToast({
// title: '上传成功',
// icon: 'success'
// });
},
// 上传失败回调
fail: (err) => {
console.error('上传失败', err);
console.error('提交失败', err);
uni.showToast({
title: '上传失败',
title: '提交失败',
icon: 'none'
});
},
@@ -413,20 +538,7 @@
});
this.$u.api.fksub(submitData).then(res => {
console.log(res)
if (res.code == 200) {
uni.showToast({
title: "提交成功,请等待审核!",
icon: "success"
})
} else {
uni.showToast({
title: "提交失败!",
icon: "error"
})
}
})
uni.hideLoading();
// 显示成功提示
@@ -465,6 +577,7 @@
visitingReason: '',
interviewedPerson: '',
interviewedUnit: '',
interviewedUnitId: '',
interviewedPhone: '',
visitingBeginDate: date,
visitingBeginTime: time,
@@ -539,6 +652,36 @@
padding: 0 12px;
display: flex;
align-items: center;
position: relative;
}
.select-wrapper {
flex: 1;
height: 40px;
border: 1px solid #e5e6eb;
border-radius: 6px;
padding: 0 12px;
display: flex;
align-items: center;
position: relative;
cursor: pointer;
}
.select-wrapper text {
flex: 1;
font-size: 14px;
color: #333;
}
.filter-img {
width: 18rpx;
height: 10rpx;
margin-left: 8rpx;
transition: transform 0.3s;
}
.select-wrapper.active .filter-img {
transform: rotate(180deg);
}
.input-wrapper input {
@@ -548,6 +691,15 @@
color: #333;
}
.input-wrapper .filter-img {
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
width: 18px; /* Adjust based on your image size */
height: 10px; /* Adjust based on your image size */
}
.picker-wrapper {
flex: 1;
height: 40px;
@@ -635,4 +787,64 @@
align-items: center;
justify-content: center;
}
.filter-btn {
padding: 15rpx 22rpx;
background: #f7f7f7;
border-radius: 25rpx;
height: 58rpx;
color: #9a9a9a;
font-size: 28rpx;
display: flex;
justify-content: center;
align-items: center;
margin-right: 24rpx;
position: relative;
cursor: pointer;
}
.filter-img {
width: 18rpx;
height: 10rpx;
margin-left: 8rpx;
}
.dropdown {
position: absolute;
top: calc(100% + 5px);
left: 0;
right: 0;
background: #fff;
border-radius: 6px;
box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, 0.1);
z-index: 999;
max-height: 200px;
overflow-y: auto;
}
.dropdown-item {
padding: 12px;
font-size: 14px;
color: #333;
border-bottom: 1rpx solid #eee;
text-align: left;
cursor: pointer;
}
.dropdown-item:last-child {
border-bottom: none;
}
.dropdown-item:hover {
background-color: #f5f7fa;
}
.face-tip-wrapper {
flex: 1;
margin-left: 108px; /* 与label宽度和margin一致 */
}
.face-tip {
font-size: 12px;
color: #999;
}
</style>

BIN
static/ic_down_arrow_g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B