From 97e1b9d6c8d7da0891aa7a1e00116b4b14e1b942 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 05 七月 2024 18:22:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
admin/src/components/business/operaVisitsWindow.vue | 42
h5/pages/staff/vehicle/shiwai.vue | 3
h5/main.js | 11
h5/pages/staff/meetingCalendar.vue | 8
admin/src/views/business/visits.vue | 36
admin/src/views/meeting/components/OperaBookingsDetailWindow.vue | 62 +
h5/static/ic_enter_shinei@2x.png | 0
admin/src/assets/style/style.scss | 4
h5/static/ic_enter_shiwai@2x.png | 0
h5/pages/staff/vehicle/shinei.vue | 162 +++
admin/src/api/business/hiddenDangerParam.js | 6
admin/src/components/business/OperaHiddenDangerParamWindow.vue | 21
h5/pages/applicationRecord/applicationRecord.vue | 4
h5/components/Li-Calendar/Li-Calendar.vue | 4
h5/pages/index/index.vue | 341 ++++---
admin/src/api/business/carUseBook.js | 11
h5/api/staff.js | 10
admin/src/views/meeting/bookings.vue | 195 +++
admin/src/components/operation/HiddenDangerParam.vue | 15
h5/manifest.json | 4
h5/pages/staff/vehicle/apply.vue | 22
h5/pages.json | 10
h5/pages/staffLogin/login.vue | 20
h5/pages/staff/meetingSubOrder.vue | 43
admin/src/api/business/visits.js | 2
h5/pages/login/login.vue | 110 ++
h5/pages/staff/index.vue | 73 +
h5/pages/staff/meetingSel.vue | 122 +
h5/utils/service.js | 3
admin/src/views/meeting/rooms.vue | 17
admin/src/api/meeting/rooms.js | 2
admin/src/views/business/approvalReport.vue | 37
h5/pages/visitorApplication/visitorApplication.vue | 3
h5/pages/staff/task/index.vue | 93 +
h5/pages/staff/snapshot.vue | 4
h5/pages/staff/vehicle/sendACarDetail.vue | 9
admin/src/views/operation/serviceCar/apprRecord.vue | 34
h5/pages/answer/answer.vue | 78 +
admin/src/views/task/dangetDetail.vue | 14
admin/src/assets/style/element-variables.scss | 3
h5/pages/appointmentDetails/appointmentDetails.vue | 17
admin/src/views/business/reportRecord.vue | 11
h5/pages/staff/meetingSub.vue | 32
h5/pages/staff/vehicle/index.vue | 32
admin/src/views/business/approvalConfiguration.vue | 12
h5/static/ic_driver@2x.png | 0
h5/store/index.js | 2
admin/src/components/business/OperaCarDriverWindow.vue | 3
admin/src/components/operation/OperCarUseBookParamWindow.vue | 142 ++
admin/src/components/common/upload.vue | 1
admin/src/api/business/approve.js | 6
h5/static/ic_visitor@2x.png | 0
admin/src/components/business/OperaCarUseBookWindow.vue | 64
h5/pages/staff/meetingManager.vue | 6
admin/src/views/meeting/devices.vue | 1
admin/src/views/task/visSubDetail.vue | 17
admin/src/components/common/UploadAvatarImage.vue | 8
admin/src/components/common/QueryForm/queryForm.vue | 27
admin/src/views/login.vue | 2
admin/src/api/meeting/bookings.js | 13
admin/src/views/operation/serviceCar/apprConfig.vue | 18
h5/static/ic_staff@2x.png | 0
admin/src/views/task/index.vue | 15
h5/pages/notice/notice.vue | 27
h5/pages/staff/meetingDetail.vue | 145 ++
admin/src/components/business/OperaHiddenDangerWindow.vue | 27
h5/App.vue | 67
h5/pages/staff/vehicle/applePeo.vue | 52
h5/pages/staff/task/vDangetAppr.vue | 90 +
admin/src/components/business/operaVisitsReportWindow.vue | 7
admin/src/views/meeting/components/OperaBookingsWindow.vue | 145 ++
admin/src/components/business/OperaCarsWindow.vue | 2
admin/src/views/operation/danger/record.vue | 7
h5/api/meeting.js | 10
74 files changed, 1,895 insertions(+), 751 deletions(-)
diff --git a/admin/src/api/business/approve.js b/admin/src/api/business/approve.js
index 1bf61d9..5baffdf 100644
--- a/admin/src/api/business/approve.js
+++ b/admin/src/api/business/approve.js
@@ -41,3 +41,9 @@
export function dealHiddenDanger (data) {
return request.post('/visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger', data)
}
+// 浠诲姟涓績鏍囪宸茶
+export function taskSignRead (params) {
+ return request.get('/visitsAdmin/cloudService/business/staging/signRead', {
+ params
+ })
+}
diff --git a/admin/src/api/business/carUseBook.js b/admin/src/api/business/carUseBook.js
index 5fea156..2bafdea 100644
--- a/admin/src/api/business/carUseBook.js
+++ b/admin/src/api/business/carUseBook.js
@@ -6,6 +6,13 @@
trim: true
})
}
+// 瀵煎嚭
+export function carUseBookRecordEx (data) {
+ return request.post('/visitsAdmin/cloudService/business/carUseBook/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
// 鏌ヨ
export function findLogList (data) {
return request.post('/visitsAdmin/cloudService/business/carUseBookLog/findList', data, {
@@ -33,6 +40,10 @@
export function deleteById (id) {
return request.get(`/visitsAdmin/cloudService/business/carUseBook/delete/${id}`)
}
+// 鎾ら攢
+export function revokeById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/carUseBook/revoke?id=${id}`)
+}
// 鏍规嵁ID鏌ヨ
export function detail (id) {
return request.get(`/visitsAdmin/cloudService/business/carUseBook/${id}`)
diff --git a/admin/src/api/business/hiddenDangerParam.js b/admin/src/api/business/hiddenDangerParam.js
index 89d4128..9373c06 100644
--- a/admin/src/api/business/hiddenDangerParam.js
+++ b/admin/src/api/business/hiddenDangerParam.js
@@ -11,6 +11,12 @@
trim: true
})
}
+export function exportExcel (data) {
+ return request.post('/visitsAdmin/cloudService/business/hiddenDanger/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
export function memberList (data) {
return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/findHiddenAreaMemberList', data, {
trim: true
diff --git a/admin/src/api/business/visits.js b/admin/src/api/business/visits.js
index a6da90d..c0a99fa 100644
--- a/admin/src/api/business/visits.js
+++ b/admin/src/api/business/visits.js
@@ -55,7 +55,7 @@
}
// 鎻愪氦璁垮淇℃伅
export const createFk = (data) => {
- return request.post('/visitsAdmin/cloudService/web/visitor/createFk', data)
+ return request.post('/visitsAdmin/cloudService/business/visits/createFk', data)
}
// 璁垮鎶ュ
export const createVisit = (data) => {
diff --git a/admin/src/api/meeting/bookings.js b/admin/src/api/meeting/bookings.js
index 72bfb1d..544beb4 100644
--- a/admin/src/api/meeting/bookings.js
+++ b/admin/src/api/meeting/bookings.js
@@ -25,8 +25,17 @@
}
// 鍙栨秷
export function cancelById (data) {
- debugger
- return request.post('/meetingAdmin/cloudService/business/bookings/cancelById', data)
+ return request.post('/meetingAdmin/cloudService/business/meeting/reservationCancel', data)
+}
+// 缁撴潫
+export function overBookById (data) {
+ return request.post('/meetingAdmin/cloudService/business/meeting/reservationOver', data)
+}
+// 棰勫畾璇︽儏
+export function BookDetailById (params) {
+ return request.get('/meetingAdmin/cloudService/web/meeting/meetingDetail', {
+ params
+ })
}
// 鍒犻櫎
diff --git a/admin/src/api/meeting/rooms.js b/admin/src/api/meeting/rooms.js
index c129e77..9735b54 100644
--- a/admin/src/api/meeting/rooms.js
+++ b/admin/src/api/meeting/rooms.js
@@ -33,7 +33,7 @@
// 鍒犻櫎
export function deleteById (id) {
- return request.get(`/meetingAdmin/cloudService/rooms/delete/${id}`)
+ return request.get(`/meetingAdmin/cloudService/business/rooms/delete/${id}`)
}
// 鎵归噺鍒犻櫎
diff --git a/admin/src/assets/style/element-variables.scss b/admin/src/assets/style/element-variables.scss
index ebd97d0..c17c714 100644
--- a/admin/src/assets/style/element-variables.scss
+++ b/admin/src/assets/style/element-variables.scss
@@ -9,4 +9,7 @@
.el-drawer__header {
color: #333333 !important;
+}
+.el-image-viewer__wrapper{
+ z-index: 3000 !important;
}
\ No newline at end of file
diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss
index 0be2757..52c0841 100644
--- a/admin/src/assets/style/style.scss
+++ b/admin/src/assets/style/style.scss
@@ -142,6 +142,10 @@
padding: 30px;
margin: 0 16px;
}
+.query_btns{
+ border-bottom: 1px solid #eee;
+ padding-bottom: 10px;
+}
/** 鍩虹閫氱敤 **/
// 澶у皬 澶栬竟璺�
.flex1{
diff --git a/admin/src/components/business/OperaCarDriverWindow.vue b/admin/src/components/business/OperaCarDriverWindow.vue
index ac8c22b..72cd9a5 100644
--- a/admin/src/components/business/OperaCarDriverWindow.vue
+++ b/admin/src/components/business/OperaCarDriverWindow.vue
@@ -88,7 +88,8 @@
},
loadMember () {
allList({
- type: 2
+ type: 2,
+ companyType: 1
})
.then(res => {
this.memberList = res
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
index ba39fd1..607212d 100644
--- a/admin/src/components/business/OperaCarUseBookWindow.vue
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -15,7 +15,7 @@
<span class="right" v-if="model.status === 1">瀹℃壒涓�</span>
<span class="right" style="background:#53b76f " v-if="model.status === 2">瀹℃壒閫氳繃</span>
<span class="right" style="background:#dc362e " v-if="model.status === 3">瀹℃壒涓嶉�氳繃</span>
- <span class="right" style="background:#dc362e " v-if="model.status === 4">宸插彇娑�</span>
+ <span class="right" style="background:#B2B2B2; " v-if="model.status === 4">宸叉挙閿�</span>
</div>
<div class="info">
<div class="title">鍏姟杞︾敵璇蜂俊鎭�</div>
@@ -110,8 +110,8 @@
</div>
<!-- -->
<template v-slot:footer>
- <el-button @click="isShowProblem = true" type="primary" v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 " class="status-red">鍚屾剰</el-button>
- <el-button @click="isBackProblem=true" type="danger" v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 " >鎷掔粷</el-button>
+ <el-button @click="agreeOpen" type="primary" v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 " class="status-red">鍚屾剰</el-button>
+ <el-button @click="jectOpen" type="danger" v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 " >鎷掔粷</el-button>
<el-button @click="visible=false">杩斿洖</el-button>
</template>
<el-dialog
@@ -123,8 +123,9 @@
width="480px"
>
<el-form :model="dealForm" ref="dealForm" >
- <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.drvierParam ===1">
- <el-select v-model="transForm.driverId" style="width: 300px" filterable clearable placeholder="璇烽�夋嫨娲鹃仯鍙告満">
+ <!-- <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> -->
+ <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam == 1">
+ <el-select v-model="dealForm.driverId" style="width: 300px" filterable clearable placeholder="璇烽�夋嫨娲鹃仯鍙告満">
<el-option
v-for="item in memberList"
:key="item.id"
@@ -138,7 +139,7 @@
type="textarea"
placeholder="璇峰~鍐欒鏄�"
:rows="4"
- v-model="backForm.checkInfo"
+ v-model="dealForm.checkInfo"
/>
</el-form-item>
</el-form>
@@ -222,9 +223,9 @@
this.dealing = true
approveDo({
objId: this.dataId,
- objType: this.model.type == 1?4:3,
+ objType: this.model.type == 1 ? 4 : 3,
status: 2,
- driverId: this.dealForm.driveId,
+ driverId: this.dealForm.driverId,
checkInfo: this.dealForm.checkInfo
})
.then(res => {
@@ -238,27 +239,42 @@
})
})
},
+ agreeOpen () {
+ this.isShowProblem = true
+ this.dealForm = {
+ driveId: null,
+ checkInfo: null
+ }
+ this.loadMemberList()
+ },
+ jectOpen () {
+ this.isBackProblem = true
+ this.dealForm = {
+ driveId: null,
+ checkInfo: null
+ }
+ },
backDo () {
this.$refs.backForm.validate((valid) => {
if (!valid) {
return
}
approveDo({
- objId: this.dataId,
- objType: this.model.type == 1?4:3,
- status: 3,
- checkInfo: this.dealForm.checkInfo
- }).then(res => {
- this.$tip.apiSuccess('閫�鍥炴垚鍔�')
- this.getDetail()
- this.isBackProblem = false
- })
- .catch(e => {
- })
- .finally(() => {
- this.dealing = false
- })
+ objId: this.dataId,
+ objType: this.model.type == 1 ? 4 : 3,
+ status: 3,
+ checkInfo: this.dealForm.checkInfo
+ }).then(res => {
+ this.$tip.apiSuccess('閫�鍥炴垚鍔�')
+ this.getDetail()
+ this.isBackProblem = false
+ })
+ .catch(e => {
})
+ .finally(() => {
+ this.dealing = false
+ })
+ })
},
open (title, target) {
this.title = title
@@ -283,10 +299,6 @@
this.model = res
this.dealForm.driveId = res.driveId
})
- },
- handleTransfer () {
- this.isShowTransfer = true
- this.loadMemberList()
},
loadMemberList () {
driveList({}).then(res => {
diff --git a/admin/src/components/business/OperaCarsWindow.vue b/admin/src/components/business/OperaCarsWindow.vue
index 3e70371..629bc85 100644
--- a/admin/src/components/business/OperaCarsWindow.vue
+++ b/admin/src/components/business/OperaCarsWindow.vue
@@ -19,7 +19,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="閫夋嫨杞︿富锛�" prop="memberId">
- <el-select v-model="form.memberId" filterable placeholder="璇烽�夋嫨">
+ <el-select v-model="form.memberId" clearable filterable placeholder="璇烽�夋嫨">
<el-option
v-for="item in memberList"
:key="item.id"
diff --git a/admin/src/components/business/OperaHiddenDangerParamWindow.vue b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
index 1f2e576..3e2b4df 100644
--- a/admin/src/components/business/OperaHiddenDangerParamWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -61,17 +61,17 @@
})
},
methods: {
- open (title, target,type) {
+ open (title, target, type) {
this.title = title
this.visible = true
- this.form.type=type
+ this.form.type = type
this.loadMember()
// 鏂板缓缁勭粐
if (target == null) {
this.$nextTick(() => {
this.$refs.form.resetFields()
this.form[this.configData['field.id']] = null
- this.form.type=type
+ this.form.type = type
})
return
}
@@ -79,20 +79,21 @@
this.$nextTick(() => {
for (const key in this.form) {
this.form[key] = target[key]
- this.form.type=type
- if (this.type ==0 && target.memberIds != null && target.memberIds != '') {
- let t = target.memberIds.split(',')
- this.form.memberIdList =[]
- t.forEach(item =>{
+ this.form.type = type
+ if (this.form.type == 0 && target.memberIds != null && target.memberIds != '') {
+ const t = target.memberIds.split(',')
+ this.form.memberIdList = []
+ t.forEach(item => {
this.form.memberIdList.push(parseInt(item))
- });
+ })
}
}
})
},
loadMember () {
allList({
- type: 2
+ type: 2,
+ companyType: 1
})
.then(res => {
this.memberList = res
diff --git a/admin/src/components/business/OperaHiddenDangerWindow.vue b/admin/src/components/business/OperaHiddenDangerWindow.vue
index d2895a6..4d7486e 100644
--- a/admin/src/components/business/OperaHiddenDangerWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -144,9 +144,9 @@
</div>
<!-- -->
<template v-slot:footer>
- <el-button @click="isShowProblem = true" type="primary" v-if="model.status==0&& model.checkUserId == userInfo.memberId" class="status-red">澶勭悊</el-button>
+ <el-button @click="openHandModal" type="primary" v-if="model.status==0&& model.checkUserId == userInfo.memberId" class="status-red">澶勭悊</el-button>
<el-button type="primary" plain v-if="model.status==0 && model.checkUserId == userInfo.memberId" @click="handleTransfer">杞氦</el-button>
- <el-button @click="isBackProblem=true" v-if="model.status==0&& model.checkUserId == userInfo.memberId" type="danger" >閫�鍥�</el-button>
+ <el-button @click="openBackModal" v-if="model.status==0&& model.checkUserId == userInfo.memberId" type="danger" >閫�鍥�</el-button>
<el-button @click="visible=false">杩斿洖</el-button>
</template>
@@ -236,7 +236,7 @@
v-model="backForm.checkDate"
/>
</el-form-item>
- <el-form-item label="鏁存敼鍓�" prop="dealBeforeFileList">
+ <el-form-item label="鍥剧墖/瑙嗛" prop="dealBeforeFileList">
<div class="df_ac">
<upload width="80px" height="80px" :list="backForm.dealBeforeFileList" :tips="'鍥剧墖/瑙嗛'" accept=".png,.jpg,.jpeg,.mp4" folder="hiddendanger" @loading="uploading = true" @dele="dele($event,2)" @success="uploadFileList($event, 2)" />
</div>
@@ -264,6 +264,7 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import upload from '@/components/common/upload'
+import dayjs from 'dayjs'
import { memberList } from '@/api/business/hiddenDangerParam'
import { mapState } from 'vuex'
export default {
@@ -309,7 +310,7 @@
/*,
dealBeforeFileList: [
{ required: true, message: '璇蜂笂浼犳暣鏀瑰墠鎯呭喌' }
- ]*/
+ ] */
},
memberList: [],
transForm: {
@@ -338,6 +339,24 @@
})
},
methods: {
+ openHandModal () {
+ const { model } = this
+ this.isShowProblem = true
+ this.$set(this.dealForm, 'checkDate', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+ if (model.submitFileList && model.submitFileList.length > 0) {
+ this.$set(this.dealForm, 'dealBeforeFileList', model.submitFileList.map(item => {
+ return {
+ fileurl: item.fileurl,
+ name: item.name,
+ url: item.fileurlFull
+ }
+ }))
+ }
+ },
+ openBackModal () {
+ this.isBackProblem = true
+ this.$set(this.backForm, 'checkDate', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+ },
dele (index, type) {
if (type == 0) {
if (this.dealForm.dealBeforeFileList != null && this.dealForm.dealBeforeFileList.length > index) {
diff --git a/admin/src/components/business/operaVisitsReportWindow.vue b/admin/src/components/business/operaVisitsReportWindow.vue
index c0976eb..1884a39 100644
--- a/admin/src/components/business/operaVisitsReportWindow.vue
+++ b/admin/src/components/business/operaVisitsReportWindow.vue
@@ -5,6 +5,7 @@
:visible.sync="isShowModal"
:confirm-working="isWorking"
@confirm="confirm"
+ @close="close"
>
<el-form :model="param" ref="paramRef" :rules="rules">
<div class="title_tip">璁垮棰勭害</div>
@@ -43,6 +44,7 @@
<el-form-item label="鎵嬫満鍙�" prop="phone">
<el-input
v-model="param.phone"
+ maxlength="11"
placeholder="璇疯緭鍏ヨ仈绯讳汉鐨勬墜鏈哄彿"
></el-input>
</el-form-item>
@@ -58,6 +60,7 @@
<el-form-item label="闅忚溅浜烘暟" prop="memberNum">
<el-input
v-model="param.memberNum"
+ oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)"
placeholder="璇疯緭鍏ラ殢杞︿汉鍛樻�绘暟"
></el-input>
</el-form-item>
@@ -193,6 +196,10 @@
this.$set(this.param, 'faceImg', file.imgurl)
this.$set(this.param, 'faceImgUrl', file.imgurlfull)
},
+ close () {
+ this.isShowModal = false
+ this.$emit('close')
+ },
// 鍚屾淇℃伅
confirm () {
this.$refs.paramRef.validate((valid) => {
diff --git a/admin/src/components/business/operaVisitsWindow.vue b/admin/src/components/business/operaVisitsWindow.vue
index 046b710..784cdcd 100644
--- a/admin/src/components/business/operaVisitsWindow.vue
+++ b/admin/src/components/business/operaVisitsWindow.vue
@@ -5,6 +5,7 @@
:visible.sync="isShowModal"
:confirm-working="isWorking"
@confirm="confirm"
+ @close="close"
>
<el-form :model="param" ref="paramRef" :rules="rules">
<div class="title_tip">璁垮淇℃伅</div>
@@ -17,6 +18,7 @@
<el-form-item label="璁垮鎵嬫満鍙�" prop="phone">
<el-input
v-model="param.phone"
+ maxlength="11"
placeholder="璇疯緭鍏ヨ瀹㈢殑鎵嬫満鍙�"
></el-input>
</el-form-item>
@@ -40,7 +42,7 @@
placeholder="璇疯緭鍏ユ潵璁跨殑鍗曚綅鍏ㄧО"
></el-input>
</el-form-item>
- <el-form-item label="浜鸿劯鐓х墖">
+ <el-form-item label="浜鸿劯鐓х墖" prop="faceImgUrl">
<div class="upload_wrap">
<UploadFaceImg
:file="{ imgurlfull: param.faceImgUrl, imgurl: param.faceImg }"
@@ -134,7 +136,7 @@
GlobalWindow,
UploadFaceImg
},
- data() {
+ data () {
return {
isShowModal: false,
param: {
@@ -149,7 +151,7 @@
folder: 'member'
},
startPickerOptions: {
- disabledDate(time) {
+ disabledDate (time) {
return time.getTime() < Date.now() - 8.64e7 // 绂佺敤瓒呰繃褰撳墠鏃堕棿鐨勬棩鏈�
},
selectableRange: '00:00:00 - 23:59:59' // 杩欎釜鍔犱笂涔嬪悗锛屾椂鍒嗙涓婇潰鎵嶆湁绂佹閫夋嫨鍙樼伆锛屽鏋滀笉鍔狅紝涔熷彲浠ョ姝㈤�夋嫨锛屼絾鏄笉浼氬彉鐏�
@@ -180,13 +182,14 @@
}
}
},
- created() {
+ created () {
this.$set(this.param, 'receptMemberId', this.$store.state.userInfo.memberId)
+ this.$set(this.param, 'starttime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
this.initData()
},
watch: {
'param.starttime': {
- handler(newValue, oldValue) {
+ handler (newValue, oldValue) {
if (newValue) {
const date = new Date()
// const min = date.getMinutes()
@@ -210,7 +213,7 @@
immediate: true
},
'param.endtime': {
- handler(newValue, oldValue) {
+ handler (newValue, oldValue) {
if (newValue) {
const nowDate = dayjs(this.param.starttime).format('HH:mm:ss')
let st = ''
@@ -228,7 +231,11 @@
}
},
methods: {
- initData() {
+ close () {
+ this.isShowModal = false
+ this.$emit('close')
+ },
+ initData () {
getVisitedVisitReason({}).then(res => {
this.VisitReason = res || []
})
@@ -237,19 +244,21 @@
console.log('memberList', this.memberList)
})
},
- uploadAvatarSuccess(file) {
+ uploadAvatarSuccess (file) {
this.$set(this.param, 'faceImg', file.imgurl)
this.$set(this.param, 'faceImgUrl', file.imgurlfull)
},
- changeStarttime(e) {
- this.$set(this.param, 'endtime', this.param.starttime)
+ changeStarttime (e) {
+ // this.$set(this.param, 'endtime', this.param.starttime)
},
// 鍚屾淇℃伅
- confirm() {
+ confirm () {
this.$refs.paramRef.validate((valid) => {
if (!valid) {
return
}
+ const { param } = this
+ if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('鍏ュ洯鏃堕棿鍜岀鍥椂闂翠笉鍙法澶�')
// 璋冪敤鏂板缓鎺ュ彛
this.isWorking = true
createFk({
@@ -262,7 +271,6 @@
this.$emit('close')
})
.catch(e => {
- this.$tip.apiFailed(e)
})
.finally(() => {
this.isWorking = false
@@ -281,6 +289,16 @@
.upload_wrap{
display: flex;
align-items: center;
+ justify-content: center;
+ .avatar-uploader{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ ::v-deep .avatar{
+ max-width: 90px;
+ max-height: 90px;
+ }
.content{
display: flex;
flex-direction: column;
diff --git a/admin/src/components/common/QueryForm/queryForm.vue b/admin/src/components/common/QueryForm/queryForm.vue
index bb962f5..4755b31 100644
--- a/admin/src/components/common/QueryForm/queryForm.vue
+++ b/admin/src/components/common/QueryForm/queryForm.vue
@@ -54,6 +54,7 @@
:label="item.label || '閫夋嫨鏃ユ湡'">
<el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
+ :default-time="['00:00:00', '23:59:59']"
:picker-options="item.pickerOptions || pickerOptions" range-separator="鑷�"
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
:start-placeholder="item.start || '寮�濮嬫椂闂�'" :end-placeholder="item.end || '缁撴潫鏃堕棿'" class="w400"
@@ -99,13 +100,13 @@
default: () => { }
}
},
- data() {
+ data () {
return {
showZk: false,
pickerOptions: {
shortcuts: [{
text: '杩�7澶�',
- onClick(picker) {
+ onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(end.getTime() - 3600 * 1000 * 24 * 6)
@@ -114,7 +115,7 @@
},
{
text: '杩�30澶�',
- onClick(picker) {
+ onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(end.getTime() - 3600 * 1000 * 24 * 29)
@@ -123,7 +124,7 @@
},
{
text: '杩�60澶�',
- onClick(picker) {
+ onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(end.getTime() - 3600 * 1000 * 24 * 59)
@@ -132,14 +133,14 @@
},
{
text: '杩�90澶�',
- onClick(picker) {
+ onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(end.getTime() - 3600 * 1000 * 24 * 89)
picker.$emit('pick', [start, end])
}
}],
- disabledDate(time) {
+ disabledDate (time) {
var curDate = new Date(new Date().toLocaleDateString()).getTime()
var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1)
return time.getTime() > preDate
@@ -150,31 +151,31 @@
emits: ['input', 'handleQuery', 'clear'],
computed: {
searchForm: {
- get() {
+ get () {
return this.value
},
- set(value) {
+ set (value) {
this.$emit('input', value)
}
}
},
methods: {
- handleQuery() {
+ handleQuery () {
this.$emit('handleQuery')
},
- handlekeyup(pd) {
+ handlekeyup (pd) {
if (pd) {
this.$emit('handleQuery')
}
},
- changeForm(filed) {
+ changeForm (filed) {
this.$emit('changeForm', filed)
},
- zkBtn() {
+ zkBtn () {
this.showZk = !this.showZk
this.$emit('zkBtn', this.zk)
},
- clear() {
+ clear () {
this.$emit('clear')
}
}
diff --git a/admin/src/components/common/UploadAvatarImage.vue b/admin/src/components/common/UploadAvatarImage.vue
index d541ed6..72f91b9 100644
--- a/admin/src/components/common/UploadAvatarImage.vue
+++ b/admin/src/components/common/UploadAvatarImage.vue
@@ -2,7 +2,7 @@
<div>
<el-upload
class="avatar-uploader"
- accept=".png,.jpg"
+ accept=".png,.jpg,.jpeg"
:style="customStyle"
:action="uploadImgUrl"
:data="uploadData"
@@ -30,7 +30,7 @@
tipsLabel: '',
customStyle: {
type: String,
- default: 'width: 90px; height: 90px;'
+ default: 'width: 90px; max-height: 90px;'
},
uploadData: Object
},
@@ -92,8 +92,8 @@
text-align: center;
}
.avatar {
- width: 100% !important;
- height: auto !important;
+ width: 90px;
+ max-height: 90px;
display: block;
}
.tips-style {
diff --git a/admin/src/components/common/upload.vue b/admin/src/components/common/upload.vue
index d6dfc8d..ccde115 100644
--- a/admin/src/components/common/upload.vue
+++ b/admin/src/components/common/upload.vue
@@ -72,7 +72,6 @@
console.log(res.data.data)
})
.catch(e => {
- this.$message.error(e)
})
.finally(() => {
this.$refs.file.value = null
diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
index f96d588..947776d 100644
--- a/admin/src/components/operation/HiddenDangerParam.vue
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -158,6 +158,8 @@
const memberNames = item.memberNames.split(',')
if (memberIds && memberIds.length === 1) {
this.$set(this.param, 'checkUserId', memberIds[0])
+ } else {
+ this.$set(this.param, 'checkUserId', '')
}
memberIds.forEach((mem, i) => {
arr.push({
@@ -255,10 +257,15 @@
display: flex;
flex-wrap: wrap;
.item {
- width: 140px;
- max-height: 140px;
+ width: 92px;
+ max-height: 92px;
margin-left: 10px;
position: relative;
+ border: 1px dashed #d9d9d9;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
.close{
font-size: 20px;
position: absolute;
@@ -269,8 +276,8 @@
cursor: pointer;
}
.img {
- width: 140px;
- max-height: 90px;
+ width: 92px;
+ max-height: 92px;
}
}
}
diff --git a/admin/src/components/operation/OperCarUseBookParamWindow.vue b/admin/src/components/operation/OperCarUseBookParamWindow.vue
index d8bc84d..10d590b 100644
--- a/admin/src/components/operation/OperCarUseBookParamWindow.vue
+++ b/admin/src/components/operation/OperCarUseBookParamWindow.vue
@@ -17,7 +17,7 @@
>
</el-form-item>
<el-form-item label="閫夋嫨杞﹁締" prop="carId">
- <el-select v-model="form.carId" placeholder="閫夋嫨杞﹁締">
+ <el-select v-model="form.carId" @change="clearTime" placeholder="閫夋嫨杞﹁締">
<el-option
v-for="item in carsList"
:key="item.id"
@@ -133,6 +133,7 @@
:class="{
disable: item.isUse == 1,
active: item.checked == '1',
+ hasSub: item.carUseBookId,
}"
@click="datetimeClick(item, i)"
v-for="(item, i) in timeList"
@@ -161,6 +162,7 @@
:visible.sync="isShowShiwai"
append-to-body
width="600px"
+ :before-close="clearTime"
>
<el-form :model="form" ref="modalRef" class="el_form" :rules="rules">
<el-form-item label="鐢ㄨ溅寮�濮嬫椂闂�" prop="startTime">
@@ -189,7 +191,10 @@
<div class="have_info" v-if="info && info.length > 0">
<div class="tit">鎮ㄧ敵璇风殑鐢ㄨ溅鏃舵宸叉湁杞﹁締棰勭害</div>
<div class="content" v-for="(item, i) in info" :key="i">
- <div class="card">{{ item.carCode }}</div>
+ <div class="df_sb">
+ <span class="card" v-if="item.carCode">{{ item.carCode }}</span>
+ <span>{{ i + 1 }}/{{ info.length }}</span>
+ </div>
<div class="line">
<span>鐢ㄨ溅鏃舵</span>
<span>
@@ -212,16 +217,48 @@
</div>
<div class="line">
<span>鐢宠浜�</span>
- <span>{{ item.memberName }} {{ item.memberMobile }}</span>
+ <span>{{ item.memberName }} <span class="primaryColor">{{ item.memberMobile }}</span></span>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<div>宸查�夋嫨锛歿{ selDatetime }}</div>
- <div class="btn" @click="subTime">纭鏃堕棿</div>
+ <div class="btn" :class="{disable: info && info.length > 0}" @click="subTime">纭鏃堕棿</div>
</span>
</el-dialog>
+ <!-- 璇︽儏 -->
+ <el-dialog
+ title="閫夋嫨鐢ㄨ溅鏃堕棿"
+ :visible.sync="isShowDetail"
+ append-to-body
+ width="600px"
+ >
+ <div class="detail_modal">
+ <div class="title">杞﹁締棰勭害鎯呭喌</div>
+ <div class="h1" v-if="activeInfo.carCode">{{ activeInfo.carCode }}</div>
+ <div class="line">
+ <div class="label">棰勮鐢ㄨ溅鏃舵</div>
+ <div class="value" v-if="activeInfo.startTime">{{ activeInfo.startTime.slice(5, 16) }} - {{ activeInfo.endTime.slice(5, 16) }}</div>
+ </div>
+ <div class="line">
+ <div class="label">鐩殑鍦�</div>
+ <div class="value">{{ activeInfo.addr }}</div>
+ </div>
+ <div class="line">
+ <div class="label">涔樿溅浜烘暟</div>
+ <div class="value" v-if="activeInfo.memberIds">{{ activeInfo.memberIds.split(',').length }}浜�</div>
+ </div>
+ <div class="line">
+ <div class="label">鐢ㄨ溅浜嬬敱</div>
+ <div class="value">{{ activeInfo.content || '' }}</div>
+ </div>
+ <div class="line">
+ <div class="label">鐢宠浜�</div>
+ <div class="value">{{ activeInfo.memberName }} <span class="primaryColor ml12">{{ activeInfo.memberPhone }}</span></div>
+ </div>
+ </div>
+ </el-dialog>
</GlobalWindow>
</template>
@@ -230,14 +267,15 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import { allList } from '@/api/business/member'
import { allList as getCarList } from '@/api/business/cars'
-import { carCanReservationDate, carUseBookCraete, carUseBookList } from '@/api/business/carUseBook'
+import { carCanReservationDate, carUseBookCraete, carUseBookList, detail } from '@/api/business/carUseBook'
import { findTypeMemberInfo } from '@/api/business/memberCard'
import dayjs from 'dayjs'
+
export default {
name: 'OperCarUseBookParamWindow',
extends: BaseOpera,
components: { GlobalWindow },
- data() {
+ data () {
return {
// 琛ㄥ崟鏁版嵁
isShowTime: false,
@@ -260,6 +298,9 @@
endTime: '',
memberIds: []
},
+ activeInfo: {},
+ isShowDetail: false,
+ carBookInfo: {},
pickerOptions: {
disabledDate: (time) => {
if (this.form.startTime) {
@@ -306,7 +347,7 @@
},
watch: {
'form.planUseDate': {
- handler(newValue, oldValue) {
+ handler (newValue, oldValue) {
if (newValue) {
this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + this.form.endTime.slice(11, 19))
// this.startPickerOptions = this.startPickerOptions
@@ -316,7 +357,7 @@
immediate: true
},
'form.startTime': {
- handler(newValue, oldValue) {
+ handler (newValue, oldValue) {
if (newValue) {
this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + '23:59:59')
// this.startPickerOptions = this.startPickerOptions
@@ -326,11 +367,11 @@
immediate: true
}
},
- created() {
+ created () {
this.initData()
},
methods: {
- open() {
+ open () {
this.title = '鏂板缓鍏姟杞︾敤杞︾敵璇�'
this.form = {
type: 0,
@@ -341,7 +382,7 @@
})
this.visible = true
},
- confirm() {
+ confirm () {
const form = JSON.parse(JSON.stringify(this.form))
this.$refs.formRef.validate((valid) => {
const memberList = []
@@ -365,18 +406,32 @@
}
})
},
- openTime() {
+ openTime () {
const { form } = this
if (!form.carId) {
return this.$tip.error('璇峰厛閫夋嫨杞﹁締')
}
if (this.form.type === 0) {
+ this.$set(this.form, 'dateDay', '')
+ this.timeList = []
this.isShowTime = true
} else {
+ this.clearTime()
this.isShowShiwai = true
}
},
- subTime() {
+ clearTime () {
+ this.isShowShiwai = false
+ this.$set(this.form, 'startTime', '')
+ this.$set(this.form, 'endTime', '')
+ this.$nextTick(() => {
+ if (this.$refs.modalRef) {
+ this.$refs.modalRef.clearValidate()
+ }
+ })
+ },
+ subTime () {
+ if (this.info && this.info.length > 0) return
if (this.form.type === 0) {
const selTimeList = this.timeList.filter(i => i.checked == '1')
if (selTimeList.length === 0) {
@@ -389,11 +444,24 @@
this.$forceUpdate()
} else {
this.$refs.modalRef.validate((valid) => {
+ const { form } = this
+ if (new Date(form.startTime).getTime() > new Date(form.endTime).getTime()) {
+ return this.$tip.error('缁撴潫鏃堕棿搴斿ぇ浜庡紑濮嬫椂闂�')
+ }
this.isShowShiwai = false
})
}
},
- datetimeClick(item, index) {
+ datetimeClick (item, index) {
+ if (item.carUseBookId) {
+ detail(
+ item.carUseBookId
+ ).then(res => {
+ this.activeInfo = res
+ this.isShowDetail = true
+ })
+ return
+ }
if (item.isUse == '1') return
const { timeList } = this
const selTimeList = timeList.filter(i => i.checked == '1')
@@ -434,10 +502,10 @@
this.selDatetime = this.form.dateDay.slice(5) + ' ' + selTimeLists[0].startHours + '-' + selTimeLists[selTimeLists.length - 1].endHours
}
},
- seletedDate(e) {
+ seletedDate (e) {
this.gettimes()
},
- seletedShiwaiDate() {
+ seletedShiwaiDate () {
const { form } = this
if (form.startTime && form.endTime) {
this.selDatetime = form.startTime + '-' + form.endTime
@@ -450,7 +518,7 @@
})
}
},
- gettimes() {
+ gettimes () {
const { form } = this
carCanReservationDate({
dateDay: form.dateDay,
@@ -459,18 +527,19 @@
this.timeList = res || []
this.timeList.forEach((i, j) => {
i.checked = '0',
- i.index = j
+ i.index = j
})
})
},
- initData() {
+ initData () {
getCarList({
type: 1
}).then(res => {
this.carsList = res
})
findTypeMemberInfo({
- type: '2'
+ type: '2',
+ companyType: 1
}).then(res => {
this.memberList = res || []
})
@@ -539,6 +608,10 @@
background-color: #cccccc;
color: #999999;
}
+ .hasSub {
+ color: #fff;
+ background: #cccccc;
+ }
}
.color_op {
display: flex;
@@ -564,6 +637,10 @@
color: #fff;
width: 120px;
text-align: center;
+ cursor: pointer;
+ }
+ .disable{
+ background: #cccccc;
}
}
.have_info {
@@ -600,4 +677,29 @@
}
}
}
+.detail_modal {
+ padding: 20px 15px;
+ .title {
+ text-align: center;
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 20px;
+ }
+ .h1 {
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 16px;
+ }
+ .line {
+ display: flex;
+ margin-bottom: 10px;
+ .label {
+ width: 120px;
+ color: #888888;
+ }
+ .value {
+ color: #333333;
+ }
+ }
+}
</style>
diff --git a/admin/src/views/business/approvalConfiguration.vue b/admin/src/views/business/approvalConfiguration.vue
index 8e374e7..eba5df1 100644
--- a/admin/src/views/business/approvalConfiguration.vue
+++ b/admin/src/views/business/approvalConfiguration.vue
@@ -120,7 +120,7 @@
<div class="config_data_item_reviewed_r">
<span>琚浜虹殑</span>
<el-select
- v-model="apprList[activeIndex].level"
+ v-model="apprList[activeIndex].objLevel"
placeholder="璇烽�夋嫨"
style="margin: 0 20px 0 10px"
>
@@ -163,6 +163,7 @@
<div class="config_data_submit">
<el-button
@click="onSubmit"
+ :loading="subLoading"
style="background: #435ebe"
type="primary"
>淇濆瓨閰嶇疆椤�</el-button
@@ -243,6 +244,7 @@
data () {
return {
activeType: '0',
+ subLoading: false,
apprList: [
{ remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
{ remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
@@ -323,13 +325,15 @@
item.objIds = ''
}
})
+ this.subLoading = true
approveTemplSave({
type: activeType,
paramList: temp
}).then(res => {
- // if (res.code === 200) {
- this.$message.success('淇濆瓨鎴愬姛')
- // }
+ this.subLoading = false
+ this.$tip.success('淇濆瓨鎴愬姛')
+ }, () => {
+ this.subLoading = false
})
},
handleDel () {
diff --git a/admin/src/views/business/approvalReport.vue b/admin/src/views/business/approvalReport.vue
index 49fee30..b264bba 100644
--- a/admin/src/views/business/approvalReport.vue
+++ b/admin/src/views/business/approvalReport.vue
@@ -26,15 +26,26 @@
>
<div class="head">{{ item.remark }}</div>
<div class="content">
- <div v-if="item.objIds && item.objIds.length === 1 ">
- <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span>
- <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
- <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
+ <div v-if="item.objIds && item.objIds.length === 1">
+ <span
+ >{{ item.objIds[0].name }}
+ {{ item.objIds[0].companyName }}</span
+ >
+ <span v-if="item.approveType == 0 && item.type == '0'">
+ 鎴栫</span
+ >
+ <span v-if="item.approveType == 1 && item.type == '0'">
+ 浼氱</span
+ >
</div>
<div v-else-if="item.objIds && item.objIds.length > 1">
<span>{{ item.objIds[0].name }} 绛�</span>
- <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
- <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
+ <span v-if="item.approveType == 0 && item.type == '0'">
+ 鎴栫</span
+ >
+ <span v-if="item.approveType == 1 && item.type == '0'">
+ 浼氱</span
+ >
</div>
<div v-else>璇烽�夋嫨</div>
<i class="el-icon-arrow-right"></i>
@@ -96,7 +107,7 @@
</div>
<div class="config_data_item_reviewed_content">
<div
- v-for="mem,memIndex in apprList[activeIndex].objIds"
+ v-for="(mem, memIndex) in apprList[activeIndex].objIds"
:key="mem.id"
class="config_data_item_reviewed_content_item"
>
@@ -116,7 +127,7 @@
<div class="config_data_item_reviewed_r">
<span>琚浜虹殑</span>
<el-select
- v-model="apprList[activeIndex].level"
+ v-model="apprList[activeIndex].objLevel"
placeholder="璇烽�夋嫨"
style="margin: 0 20px 0 10px"
>
@@ -159,6 +170,7 @@
<div class="config_data_submit">
<el-button
@click="onSubmit"
+ :loading="subLoading"
style="background: #435ebe"
type="primary"
>淇濆瓨閰嶇疆椤�</el-button
@@ -239,6 +251,7 @@
data () {
return {
activeType: '2',
+ subLoading: false,
apprList: [
{ remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
{ remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
@@ -310,13 +323,15 @@
item.objIds = ''
}
})
+ this.subLoading = true
approveTemplSave({
type: activeType,
paramList: temp
}).then(res => {
- if (res.code === 200) {
- this.$message.success('淇濆瓨鎴愬姛')
- }
+ this.subLoading = false
+ this.$tip.success('淇濆瓨鎴愬姛')
+ }, () => {
+ this.subLoading = false
})
},
handleDel () {
diff --git a/admin/src/views/business/reportRecord.vue b/admin/src/views/business/reportRecord.vue
index fcb9c59..82a650f 100644
--- a/admin/src/views/business/reportRecord.vue
+++ b/admin/src/views/business/reportRecord.vue
@@ -6,7 +6,7 @@
@handleQuery="getList(1)"
@clear="clear"
/>
- <div style="margin: 16px 0 0" v-permissions="['business:visits:create', 'business:visits:exportExcel']">
+ <div class="query_btns" style="margin: 16px 0 0" v-permissions="['business:visits:create', 'business:visits:exportExcel']">
<el-button type="primary" @click="handleEdit()" icon="el-icon-plus" v-permissions="['business:visits:create']">鏂板缓</el-button>
<el-button type="primary" :loading="exLoading" @click="exportExcel" v-permissions="['business:visits:exportExcel']">瀵煎嚭</el-button>
</div>
@@ -17,6 +17,7 @@
row-key="id"
default-expand-all
>
+ <el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column
prop="carNos"
label="鍏ュ洯杞﹁締"
@@ -42,7 +43,7 @@
label="琚浜�"
min-width="100px"
></el-table-column>
- <el-table-column label="鎷滆鏃堕棿" min-width="170px">
+ <el-table-column label="鎷滆鏃堕棿" min-width="160px">
<template slot-scope="{ row }">
<span>璧凤細{{ row.starttime }}</span
><br />
@@ -52,13 +53,13 @@
<el-table-column
prop="reason"
label="鎷滆浜嬬敱"
- min-width="100px"
+ min-width="100"
></el-table-column>
<el-table-column
prop="status"
fixed="right"
label="鐘舵��"
- min-width="100px"
+ min-width="100"
>
<template slot-scope="{ row }">
<span style="color: rgba(245, 154, 35, 0.996)" v-if="row.status === 0"
@@ -79,7 +80,7 @@
<span v-if="row.status === 9" style="color: gray">宸插け鏁�</span>
</template>
</el-table-column>
- <el-table-column label="鎿嶄綔" width="230" fixed="right">
+ <el-table-column label="鎿嶄綔" width="100" fixed="right">
<template slot-scope="{ row }">
<el-button
type="text"
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
index 25ebbb8..bbf8005 100644
--- a/admin/src/views/business/visits.vue
+++ b/admin/src/views/business/visits.vue
@@ -8,8 +8,8 @@
<el-form-item label="韬唤璇佸彿" prop="idcardNo">
<el-input v-model="searchForm.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="缁勭粐鍚嶇О" prop="companyName">
- <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ョ粍缁囧悕绉�" @keypress.enter.native="search"></el-input>
+ <el-form-item label="璁垮鍗曚綅" prop="companyName">
+ <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ヨ瀹㈠崟浣�" @keypress.enter.native="search"></el-input>
</el-form-item>
<el-form-item label="瀹℃壒鐘舵��" prop="status">
<el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
@@ -46,7 +46,7 @@
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="name" label="璁垮濮撳悕" min-width="100px"></el-table-column>
<el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
- <el-table-column prop="companyName" label="缁勭粐鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="companyName" label="璁垮鍗曚綅" min-width="100px"></el-table-column>
<el-table-column prop="receptMemberName" label="琚浜�" min-width="100px"></el-table-column>
<el-table-column prop="reason" label="鎷滆浜嬬敱" min-width="100px"></el-table-column>
<el-table-column label="棰勭害鏃堕棿" min-width="170px">
@@ -64,14 +64,15 @@
<span v-else>-</span>
</template>
</el-table-column>
- <el-table-column label="闅忚浜哄憳" min-width="100px">
+ <el-table-column label="鏂藉伐浜哄憳" min-width="100px">
<template slot-scope="{row}">
- <span>{{row.memberNum || '-'}}</span>
+ <span v-if="row.type == 0">鍚�</span>
+ <span v-if="row.type == 1">鏄�</span>
</template>
</el-table-column>
<el-table-column label="闅忚杞﹁締" min-width="100px">
<template slot-scope="{row}">
- <span>{{row.carNum}}</span>
+ <span>{{row.carNos}}</span>
</template>
</el-table-column>
<el-table-column prop="status" fixed="right" label="鐘舵��" min-width="100px">
@@ -97,7 +98,8 @@
<template slot-scope="{row}">
<el-button type="text" @click="departure(row.id)" v-permissions="['business:visits:level']" icon="el-icon-delete" style="color: red" v-if="row.status == 7">绂诲巶</el-button>
<el-button type="text" @click="cancel(row.id)" v-permissions="['business:visits:cancel']" icon="el-icon-delete" style="color: red" v-if="row.status == 5">鍙栨秷棰勭害</el-button>
- <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" icon="el-icon-view">璇︽儏</el-button>
+ <!-- <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" icon="el-icon-view">璇︽儏</el-button> -->
+ <el-button type="text" @click="handleDetail(row)" icon="el-icon-view">璇︽儏</el-button>
<!-- <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">鏌ヨ瀹℃壒缁撴灉</el-button>-->
</template>
</el-table-column>
@@ -109,7 +111,8 @@
>
</pagination>
<!-- 璇︽儏 -->
- <OperaVisitsDesWindow ref="OperaVisitsDesWindow" />
+ <!-- <OperaVisitsDesWindow ref="OperaVisitsDesWindow" /> -->
+ <TaskDetail v-if="isShowDetail" ref="DetailRef" />
<!-- 鏂板缓 -->
<OperaVisitsWindow @close="isShowEdit = false" @success="search" v-if="isShowEdit" ref="operaVisitsWindowRef" />
</template>
@@ -122,20 +125,23 @@
import Pagination from '@/components/common/Pagination'
import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
import OperaVisitsWindow from '@/components/business/operaVisitsWindow'
+import TaskDetail from '@/views/task/visSubDetail.vue'
export default {
name: 'Visits',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaVisitsDesWindow, OperaVisitsWindow },
+ components: { TableLayout, Pagination, TaskDetail, OperaVisitsWindow },
data () {
return {
isShowEdit: false,
+ isShowDetail: false,
// 鎼滅储
searchForm: {
name: '',
companyName: '',
idcardNo: '',
- status: ''
+ status: '',
+ type: 0
}
}
},
@@ -149,6 +155,16 @@
this.search()
},
methods: {
+ handleDetail (row) {
+ this.isShowDetail = true
+ console.log('row', row);
+ this.$nextTick(() => {
+ this.$refs.DetailRef.id = row.id
+ this.$refs.DetailRef.type = 0
+ this.$refs.DetailRef.getDetail()
+ this.$refs.DetailRef.isShowModal = true
+ })
+ },
handleEdit () {
this.isShowEdit = true
this.$nextTick(() => {
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index 87b3f52..16a3215 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -66,7 +66,7 @@
})
.catch(e => {
this.refreshCaptcha()
- this.$tip.apiFailed(e)
+ // this.$tip.apiFailed(e)
})
.finally(() => {
this.loading = false
diff --git a/admin/src/views/meeting/bookings.vue b/admin/src/views/meeting/bookings.vue
index 706d8fc..83a83f6 100644
--- a/admin/src/views/meeting/bookings.vue
+++ b/admin/src/views/meeting/bookings.vue
@@ -1,7 +1,13 @@
<template>
<TableLayout :permissions="['business:bookings:query']">
<!-- 鎼滅储琛ㄥ崟 -->
- <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form
+ ref="searchForm"
+ slot="search-form"
+ :model="searchForm"
+ label-width="100px"
+ inline
+ >
<el-form-item label="浼氳瀹�" prop="roomId">
<el-select
v-model="searchForm.roomId"
@@ -9,7 +15,12 @@
clearable
placeholder="璇烽�夋嫨浼氳瀹�"
>
- <el-option v-for="item in rooms" :key="item.id" :value="item.id" :label="item.name" />
+ <el-option
+ v-for="item in rooms"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ />
</el-select>
</el-form-item>
<el-form-item label="棰勭害閮ㄩ棬" prop="department">
@@ -31,19 +42,32 @@
</el-select> -->
</el-form-item>
<el-form-item label="浼氳涓婚" prop="name">
- <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヤ細璁富棰�" @keypress.enter.native="search"></el-input>
+ <el-input
+ v-model="searchForm.name"
+ placeholder="璇疯緭鍏ヤ細璁富棰�"
+ @keypress.enter.native="search"
+ ></el-input>
</el-form-item>
<el-form-item label="棰勭害浜�" prop="realName">
- <el-input v-model="searchForm.realName" placeholder="璇疯緭鍏ラ绾︿汉" @keypress.enter.native="search"></el-input>
+ <el-input
+ v-model="searchForm.realName"
+ placeholder="璇疯緭鍏ラ绾︿汉"
+ @keypress.enter.native="search"
+ ></el-input>
</el-form-item>
<el-form-item label="浼氳鐘舵��" prop="status">
<el-select
- v-model="searchForm.status"
+ v-model="searchForm.meetingStatus"
filterable
clearable
placeholder="璇烽�夋嫨鐘舵��"
>
- <el-option v-for="item in status" :key="item.id" :value="item.id" :label="item.name" />
+ <el-option
+ v-for="item in status"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ />
</el-select>
</el-form-item>
<el-form-item label="璧锋鏃堕棿" prop="startTime">
@@ -52,6 +76,7 @@
type="datetimerange"
range-separator="鑷�"
value-format="yyyy-MM-dd HH:mm:ss"
+ :default-time="['00:00:00', '23:59:59']"
start-placeholder="寮�濮嬫椂闂�"
end-placeholder="缁撴潫鏃堕棿"
@change="selectDate"
@@ -77,10 +102,30 @@
</el-form>
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
- <ul class="toolbar" v-permissions="['business:bookings:create', 'business:bookings:exportExcel']">
- <li><el-button type="primary" @click="$refs.operaBookingsWindow.open('鏂板缓浼氳')" v-permissions="['business:bookings:create']">鏂板缓</el-button></li>
+ <ul
+ class="toolbar"
+ v-permissions="[
+ 'business:bookings:create',
+ 'business:bookings:exportExcel',
+ ]"
+ >
+ <li>
+ <el-button
+ type="primary"
+ @click="$refs.operaBookingsWindow.open('鏂板缓浼氳')"
+ v-permissions="['business:bookings:create']"
+ >鏂板缓</el-button
+ >
+ </li>
<!-- <li><el-button @click="deleteByIdInBatch" v-permissions="['business:bookings:delete']">鍒犻櫎</el-button></li> -->
- <li><el-button :loading="isWorking.export" v-permissions="['business:bookings:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+ <li>
+ <el-button
+ :loading="isWorking.export"
+ v-permissions="['business:bookings:exportExcel']"
+ @click="exportExcel"
+ >瀵煎嚭</el-button
+ >
+ </li>
</ul>
<el-table
v-loading="isWorking.search"
@@ -90,42 +135,81 @@
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" align="center" width="55"></el-table-column> -->
- <el-table-column prop="name" label="浼氳涓婚" align="center" min-width="120px" show-overflow-tooltip>
- <template slot-scope="{row}">
+ <el-table-column
+ prop="name"
+ label="浼氳涓婚"
+ align="center"
+ min-width="120px"
+ show-overflow-tooltip
+ >
+ <template slot-scope="{ row }">
<span class="long-title-style">{{ row.name }}</span>
</template>
</el-table-column>
- <el-table-column prop="roomName" label="浼氳瀹�" align="center" min-width="120px" show-overflow-tooltip>
- <template slot-scope="{row}">
+ <el-table-column
+ prop="roomName"
+ label="浼氳瀹�"
+ align="center"
+ min-width="120px"
+ show-overflow-tooltip
+ >
+ <template slot-scope="{ row }">
<span class="long-title-style">{{ row.roomName }}</span>
</template>
</el-table-column>
- <el-table-column prop="meetingTime" label="浼氳鏃堕棿" align="center" min-width="120px"></el-table-column>
- <el-table-column prop="managerInfo" label="棰勭害浜�" align="center" min-width="100px"></el-table-column>
- <el-table-column label="鐘舵��" align="center" min-width="60px">
- <template slot-scope="{row}">
- <span v-if="row.status==0" style="color:rgb(127, 178, 53)">姝e父</span>
- <span v-else style="color:rgb(234, 54, 38)">鍙栨秷</span>
+ <el-table-column
+ prop="meetingTime"
+ label="浼氳鏃堕棿"
+ align="center"
+ min-width="120px"
+ ></el-table-column>
+ <el-table-column
+ prop="managerInfo"
+ label="棰勭害浜�"
+ align="center"
+ min-width="100px"
+ ></el-table-column>
+ <el-table-column label="浼氳鐘舵��" align="center" min-width="60px">
+ <template slot-scope="{ row }">
+ <span v-if="row.meetingStatus == 1">鏈紑濮�</span>
+ <span v-if="row.meetingStatus == 2">杩涜涓�</span>
+ <span v-if="row.meetingStatus == 3">宸茬粨鏉�</span>
+ <span v-if="row.meetingStatus == 4">鍗冲皢寮�濮�</span>
+ <span v-if="row.meetingStatus == 5">宸叉挙閿�</span>
<!-- {{ row.status==0 ? '姝e父' : '鍙栨秷' }} -->
</template>
</el-table-column>
- <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="100px"></el-table-column>
+ <el-table-column
+ prop="createDate"
+ label="鍒涘缓鏃堕棿"
+ align="center"
+ min-width="150px"
+ ></el-table-column>
<!-- <el-table-column prop="content" label="浼氳鍐呭" min-width="100px"></el-table-column> -->
<el-table-column
- v-if="containPermissions(['business:bookings:update', 'business:bookings:delete'])"
+ v-if="
+ containPermissions([
+ 'business:bookings:update',
+ 'business:bookings:delete',
+ ])
+ "
label="鎿嶄綔"
- min-width="120"
+ min-width="100"
align="center"
fixed="right"
>
- <template slot-scope="{row}">
- <template v-if="row.status==0">
- <el-button type="text" @click="$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', row)">鏌ョ湅</el-button>
- <el-button v-if="row.flag == 0" type="text" @click="$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', row)" v-permissions="['business:bookings:update']">淇敼</el-button>
- <el-button type="text" @click="copy(row)">澶嶅埗</el-button>
- <el-button v-if="row.flag == 0" type="text" @click="cancelMeeting(row.id)" v-permissions="['business:bookings:update']">鍙栨秷</el-button>
+ <template slot-scope="{ row }">
+ <template>
+ <el-button
+ type="text"
+ @click="$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', row)"
+ >鏌ョ湅璇︽儏</el-button
+ >
+ <el-button v-if="row.meetingStatus == '1'" type="text" @click="$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', row)" v-permissions="['business:bookings:update']">缂栬緫</el-button>
+ <!-- <el-button type="text" @click="copy(row)">澶嶅埗</el-button> -->
+ <el-button v-if="row.meetingStatus == '1'" type="text" @click="cancelMeeting(row.id)" v-permissions="['business:bookings:update']">鎾ゅ洖</el-button>
</template>
- <el-button v-else type="text" @click="deleteById(row)" v-permissions="['business:bookings:delete']">鍒犻櫎</el-button>
+ <!-- <el-button v-else type="text" @click="deleteById(row)" v-permissions="['business:bookings:delete']">鍒犻櫎</el-button> -->
</template>
</el-table-column>
</el-table>
@@ -137,8 +221,15 @@
</pagination>
</template>
<!-- 鏂板缓/淇敼 -->
- <OperaBookingsWindow ref="operaBookingsWindow" @success="handlePageChange"/>
- <OperaBookingsDetailWindow ref="operaBookingsDetailWindow"/>
+ <OperaBookingsWindow
+ ref="operaBookingsWindow"
+ @success="handlePageChange"
+ />
+ <OperaBookingsDetailWindow
+ @success="search"
+ ref="operaBookingsDetailWindow"
+ />
+
</TableLayout>
</template>
@@ -166,7 +257,7 @@
// departmentId: [],
department: [],
realName: '',
- status: '',
+ meetingStatus: '',
createDate: '',
editor: '',
editDate: '',
@@ -190,9 +281,11 @@
{ name: '寮�鍙戦儴闂�', id: '0' }
],
status: [
- { name: '鍏ㄩ儴', id: '' },
- { name: '姝e父', id: '0' },
- { name: '鍙栨秷', id: '1' }
+ { name: '鏈紑濮�', id: 1 },
+ { name: '鍗冲皢寮�濮�', id: 4 },
+ { name: '杩涜涓�', id: 2 },
+ { name: '宸叉挙閿�', id: 5 },
+ { name: '宸茬粨鏉�', id: 3 }
],
link: 'https://dmtest.ahapp.net/meeting_h5/' // H5_LINK_ADDR
}
@@ -278,7 +371,6 @@
this.$message.success('浼氳淇℃伅澶嶅埗鎴愬姛锛屽幓鍒嗕韩缁欏悓浜嬪惂~')
})
.catch(e => {
- this.$message.error(e)
})
},
cancelMeeting (id) {
@@ -290,7 +382,6 @@
this.handlePageChange()
})
.catch(e => {
- this.$message.error(e)
})
})
},
@@ -300,7 +391,6 @@
this.$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', res)
})
.catch(e => {
- this.$message.error(e)
})
},
editBookings (id) {
@@ -309,7 +399,6 @@
this.$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', res)
})
.catch(e => {
- this.$message.error(e)
})
},
handlePageChange (pageIndex) {
@@ -340,3 +429,31 @@
}
}
</script>
+
+<style lang="scss" scoped>
+.detail_modal {
+ padding: 20px 16px;
+ .title {
+ text-align: center;
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 20px;
+ }
+ .h1 {
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 15px;
+ }
+ .line {
+ display: flex;
+ margin-bottom: 10px;
+ .label {
+ width: 70px;
+ color: #888888;
+ }
+ .value {
+ color: #333333;
+ }
+ }
+}
+</style>
diff --git a/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue b/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue
index a1de55f..d0e96a2 100644
--- a/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue
+++ b/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue
@@ -13,15 +13,19 @@
<div class="content-style">
<div class="item">
<div class="item-title">鍙備細浜哄憳</div>
- <div>{{ form.sysList.map(item => `${item.realName}`).join('锛�') }}</div>
+ <div>
+ {{ form.sysList.map((item) => `${item.realName}`).join("锛�") }}
+ </div>
</div>
<div class="item">
<div class="item-title">浼氳鍐呭</div>
- <div class="item-value">{{ form.content || '鏃�' }}</div>
+ <div class="item-value">{{ form.content || "鏃�" }}</div>
</div>
<div v-if="form.projectList.length" class="item">
<div class="">鏈嶅姟椤�</div>
- <div class="item-value">{{ form.projectList.map(item => item.projectName).join(' | ') }}</div>
+ <div class="item-value">
+ {{ form.projectList.map((item) => item.projectName).join(" | ") }}
+ </div>
</div>
<div class="item" v-if="form.fileList.length">
<div class="item-title">闄勪欢</div>
@@ -43,8 +47,33 @@
<div class="item-value">{{ form.managerInfo }}</div>
</div>
<div slot="footer">
- <el-button @click="visible=false">鍙栨秷</el-button>
+ <el-button type="primary" v-if="form.meetingStatus == 1" @click="openCancel('0')">鎾ら攢</el-button>
+ <el-button v-if="form.meetingStatus == 2" type="primary" @click="openCancel('1')">缁撴潫</el-button>
+ <el-button @click="visible = false">鍙栨秷</el-button>
</div>
+ <!-- 鍙栨秷/缁撴潫 -->
+ <el-dialog
+ :title="cancelParam.falg == '1' ? '缁撴潫浼氳' : '鎾ら攢浼氳'"
+ :visible.sync="isShowCancel"
+ append-to-body
+ width="500px"
+ >
+ <el-form style="padding: 30px">
+ <el-form-item label="鎾ゅ洖璇存槑">
+ <el-input
+ type="textarea"
+ :rows="4"
+ placeholder="璇疯緭鍏ヨ鏄庛��"
+ v-model="cancelParam.businessRemark"
+ >
+ </el-input>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowCancel = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="onSubCancel()">纭畾</el-button>
+ </span>
+ </el-dialog>
</GlobalAlertWindow>
</template>
@@ -52,6 +81,7 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
import FileLink from '@/views/meeting/components/common/FileLink'
+import { cancelById, overBookById } from '@/api/meeting/bookings'
export default {
name: 'OperaBookingsDetailWindow',
extends: BaseOpera,
@@ -69,6 +99,7 @@
projectList: [],
remark: '',
roomId: '',
+ meetingStatus: '',
startTime: '',
endTime: '',
times: [],
@@ -81,6 +112,11 @@
sysList: [],
projectList: [],
timelist: [],
+
+ isShowCancel: false,
+ cancelParam: {
+ flag: '0'
+ },
// 楠岃瘉瑙勫垯
rules: {
@@ -92,9 +128,22 @@
api: '/meeting/bookings',
'field.id': 'id'
})
-
},
methods: {
+ openCancel (flag) {
+ this.isShowCancel = true
+ this.cancelParam.flag = flag
+ },
+ onSubCancel () {
+ const { id } = this.form
+ const fn = this.cancelParam.flag === '0' ? cancelById : overBookById
+ fn({ id, businessRemark: this.cancelParam.businessRemark }).then(res => {
+ this.$tip.success('鎻愪氦鎴愬姛')
+ this.visible = false
+ this.isShowCancel = false
+ this.$emit('success')
+ })
+ }
/**
* 鎵撳紑绐楀彛
* @title 绐楀彛鏍囬
@@ -124,7 +173,7 @@
// })
// },
- },
+ }
}
</script>
@@ -160,5 +209,4 @@
.bottom-style {
padding: 20px;
}
-
</style>
diff --git a/admin/src/views/meeting/components/OperaBookingsWindow.vue b/admin/src/views/meeting/components/OperaBookingsWindow.vue
index b998662..7730505 100644
--- a/admin/src/views/meeting/components/OperaBookingsWindow.vue
+++ b/admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -31,7 +31,11 @@
class="time-item"
v-for="(item, index) in timelist"
:key="item.id"
- :class="form.times.indexOf(index)!=-1?'time-item-sel': item.isUse ? 'time-item-disable' : ''"
+ :class="{
+ 'time-item-sel': form.times.indexOf(index)!=-1,
+ 'time-item-disable': item.isUse,
+ 'disable': item.bookingTimeId
+ }"
@click="selectTimes(index, item)"
>{{ `${item.startTime}-${item.endTime}` }}</div>
</div>
@@ -40,7 +44,7 @@
<el-input v-model="form.name" placeholder="璇疯緭鍏ヤ細璁富棰�" :maxlength="30" v-trim/>
</el-form-item>
- <el-form-item label="鍙備細浜哄憳" prop="sysList">
+ <el-form-item label="鍙備細浜哄憳">
<!-- <el-input style="width:40%" disabled v-model="sysList" placeholder="閫夋嫨鍙備細浜哄憳" v-trim/> -->
<el-select
v-model="form.sysList"
@@ -94,6 +98,32 @@
</el-form-item>
<input type="file" @change="upFiles" ref="upFile" style="display: none;" />
</el-form>
+
+ <el-dialog
+ title="浼氳瀹ら绾︽儏鍐�"
+ :visible.sync="isShowDetail"
+ append-to-body
+ width="600px"
+ >
+ <div class="detail_modal">
+ <div class="h1">{{ activeInfo.meetingName }}</div>
+ <div class="line">
+ <div class="label">浼氳鏃堕棿</div>
+ <div class="value" v-if="activeInfo.meetingDate">
+ {{ activeInfo.meetingDate.slice(5) }} {{ activeInfo.meetingTime }}
+ </div>
+ </div>
+ <div class="line">
+ <div class="label">浼氳瀹�</div>
+ <div class="value">{{ activeInfo.roomName }}</div>
+ </div>
+ <div class="line">
+ <div class="label">棰勭害浜�</div>
+ <div class="value">{{ activeInfo.bookingUserName }}</div>
+ </div>
+ <el-button @click="isShowDetail = false">鍏抽棴</el-button>
+ </div>
+ </el-dialog>
</GlobalAlertWindow>
</template>
@@ -101,9 +131,10 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
import FileLink from '@/views/meeting/components/common/FileLink'
-import { upload as upload } from '@/api/system/common'
+import { upload } from '@/api/system/common'
import { fetchList as userList } from '@/api/system/user'
import { findListByObjId } from '@/api/meeting/projects'
+import { BookDetailById } from '@/api/meeting/bookings'
import { findList } from '@/api/meeting/roomTime'
import { numRule, arrayRule } from '@/utils/form'
export default {
@@ -126,8 +157,10 @@
times: [],
content: '',
sysList: [],
- fileList: [],
+ fileList: []
},
+ activeInfo: {},
+ isShowDetail: false,
isEdit: false,
// room: [],
sysList: [],
@@ -136,20 +169,20 @@
// 楠岃瘉瑙勫垯
rules: {
roomId: [
- { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
+ { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
],
date: [
- { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
+ { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
],
times: [
- { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
+ { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
],
sysList: [
- { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
+ { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
],
name: [
- { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
- ],
+ { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
+ ]
// content: [
// { required: true, message: '璇疯緭鍏ヤ細璁唴瀹�', tigger: 'blur' }
// ],
@@ -165,10 +198,10 @@
userList({
page: 1,
capacity: 9999,
- model: { realname: this.filterText },
+ model: { realname: this.filterText, memberType: 2 }
})
.then(res => {
- console.log('userList', res);
+ console.log('userList', res)
this.sysList = res.records
})
},
@@ -178,7 +211,7 @@
* @title 绐楀彛鏍囬
* @target 缂栬緫鐨勫璞�
*/
- open (title, target) {
+ open (title, target) {
this.title = title
this.visible = true
this.timelist = []
@@ -187,8 +220,6 @@
if (target == null) {
this.$nextTick(() => {
this.$refs.form.resetFields()
- console.log(this.form.content);
- debugger
this.form[this.configData['field.id']] = null
})
return
@@ -208,7 +239,7 @@
this.selectRoom(this.form.roomId)
})
},
- selectRoom(objId) {
+ selectRoom (objId) {
this.getTimes()
findListByObjId({
objId: objId,
@@ -218,11 +249,11 @@
this.projectList = res
})
},
- selectDate(v) {
+ selectDate (v) {
// console.log(v);
this.getTimes()
},
- getTimes(isInit=false) {
+ getTimes (isInit = false) {
this.form.times = []
this.timelist = []
@@ -259,33 +290,45 @@
})
}
},
- selectTimes(index, item) {
+ getDetail (id) {
+ BookDetailById({
+ id
+ }).then(res => {
+ this.activeInfo = res
+ this.isShowDetail = true
+ })
+ },
+ selectTimes (index, item) {
+ if (item.bookingTimeId) {
+ this.getDetail(item.bookingTimeId)
+ return
+ }
if (this.isEdit) {
return
}
- let tempIndex = this.form.times.indexOf(index)
+ const tempIndex = this.form.times.indexOf(index)
if (tempIndex != -1) {
- if (tempIndex==0) {
+ if (tempIndex == 0) {
// console.log(this.form.times);
// debugger
this.form.times.splice(0, 1)
- } else if (tempIndex==this.form.times.length-1) {
+ } else if (tempIndex == this.form.times.length - 1) {
this.form.times.splice(tempIndex, 1)
}
} else {
if (item.isUse) {
return
}
- if (this.form.times.length && index+1 !== this.form.times[0] && index-1 !== this.form.times[this.form.times.length-1]) {
+ if (this.form.times.length && index + 1 !== this.form.times[0] && index - 1 !== this.form.times[this.form.times.length - 1]) {
this.$message.error('棰勭害鏃堕棿蹇呴』鏄浉閭荤殑锛�')
return
}
this.form.times.push(index)
- this.form.times.sort((x,y)=> x - y)
+ this.form.times.sort((x, y) => x - y)
}
// console.log(this.form.times);
},
- upFiles(file) {
+ upFiles (file) {
const formdate = new FormData()
this.isUploading = true
formdate.append('file', file.target.files[0])
@@ -318,21 +361,21 @@
this.isWorking = true
let sysList = [...this.form.sysList]
sysList = sysList.map(item => {
- return {userId: item}
+ return { userId: item }
})
let projectList = [...this.form.projectList]
projectList = projectList.map(item => {
- return {projectId: item}
+ return { projectId: item }
})
- let bookingTimeList = []
+ const bookingTimeList = []
this.form.times.forEach(item => {
bookingTimeList.push({
timeId: this.timelist[item].id,
id: this.timelist[item].bookingTimeId
})
})
- let startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
- let endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length-1]].endTime + ':00'
+ const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
+ const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00'
this.api.create({
...this.form,
sysList,
@@ -364,21 +407,21 @@
this.isWorking = true
let sysList = [...this.form.sysList]
sysList = sysList.map(item => {
- return {userId: item}
+ return { userId: item }
})
let projectList = [...this.form.projectList]
projectList = projectList.map(item => {
- return {projectId: item}
+ return { projectId: item }
})
- let bookingTimeList = []
+ const bookingTimeList = []
this.form.times.forEach(item => {
bookingTimeList.push({
timeId: this.timelist[item].id,
id: this.timelist[item].bookingTimeId
})
})
- let startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
- let endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length-1]].endTime + ':00'
+ const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
+ const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00'
this.api.updateById({
...this.form,
sysList,
@@ -400,7 +443,7 @@
})
})
}
- },
+ }
}
</script>
@@ -433,10 +476,40 @@
color: #fff;
}
.time-item-disable {
+ color: #e4e4e4;
+ border-color: #999;
+ background-color: #999;
+ }
+ .disable{
border-color: #999;
background-color: #999;
color: #111;
}
}
+.detail_modal {
+ padding: 20px 16px;
+ .title {
+ text-align: center;
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 20px;
+ }
+ .h1 {
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 15px;
+ }
+ .line {
+ display: flex;
+ margin-bottom: 10px;
+ .label {
+ width: 70px;
+ color: #888888;
+ }
+ .value {
+ color: #333333;
+ }
+ }
+}
</style>
diff --git a/admin/src/views/meeting/devices.vue b/admin/src/views/meeting/devices.vue
index cd564ba..236e75e 100644
--- a/admin/src/views/meeting/devices.vue
+++ b/admin/src/views/meeting/devices.vue
@@ -144,7 +144,6 @@
this.$message.success('淇敼鎴愬姛')
})
.catch(e => {
- this.$message.error(e)
})
.finally(() => {
this.handlePageChange()
diff --git a/admin/src/views/meeting/rooms.vue b/admin/src/views/meeting/rooms.vue
index 0b49a6c..c2f1e3c 100644
--- a/admin/src/views/meeting/rooms.vue
+++ b/admin/src/views/meeting/rooms.vue
@@ -152,7 +152,7 @@
}
}
},
- provide() {
+ provide () {
return {
userList: () => this.userList
}
@@ -167,7 +167,8 @@
userList({
page: 1,
capacity: 9999,
- model: { realname: this.filterText },
+ memberType: 2,
+ model: { realname: this.filterText }
})
.then(res => {
this.userList = res.records
@@ -175,16 +176,16 @@
this.search()
},
methods: {
- // 椤电爜鍙樻洿澶勭悊
+ // 椤电爜鍙樻洿澶勭悊
handlePageChange (pageIndex) {
this.__checkApi()
this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex
this.isWorking.search = true
let sysList = [...this.searchForm.sysList]
sysList = sysList.map(item => {
- return {userId: item}
+ return { userId: item }
})
- console.log(sysList);
+ console.log(sysList)
this.api.fetchList({
page: this.tableData.pagination.pageIndex,
capacity: this.tableData.pagination.pageSize,
@@ -209,23 +210,21 @@
// console.log('21212');
// this.$refs.selectMember.open('閫夋嫨绠$悊鍛�')
// },
- changeStatus(item) {
+ changeStatus (item) {
updateStatusById({
id: item.id,
status: item.status
})
.then(() => {
this.$message.success('淇敼鎴愬姛')
-
})
.catch(e => {
- this.$message.error(e)
})
.finally(() => {
this.handlePageChange()
})
}
- },
+ }
}
</script>
diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue
index da410d6..d59d296 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -3,7 +3,7 @@
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
<el-form-item label="鎻愭姤浜�" prop="memberName">
- <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"></el-input>
</el-form-item>
<el-form-item label="鎻愭姤浜虹粍缁�" prop="companyName">
<el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
@@ -43,6 +43,7 @@
type="datetimerange"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
+ :default-time="['00:00:00', '23:59:59']"
range-separator="鑷�"
start-placeholder="寮�濮嬫棩鏈�"
end-placeholder="缁撴潫鏃ユ湡">
@@ -155,9 +156,7 @@
.then(() => {
this.exLoading = true
exportExcel({
- page: this.pagination.page,
- capacity: 1000000,
- model: this.filters
+ model: this.searchForm
})
.then(response => {
this.download(response)
diff --git a/admin/src/views/operation/serviceCar/apprConfig.vue b/admin/src/views/operation/serviceCar/apprConfig.vue
index e977f26..93ec48d 100644
--- a/admin/src/views/operation/serviceCar/apprConfig.vue
+++ b/admin/src/views/operation/serviceCar/apprConfig.vue
@@ -2,8 +2,8 @@
<TableLayout>
<template v-slot:table-wrap>
<el-tabs v-model="activeType" @tab-click="handleClick">
- <el-tab-pane label="瀹ゅ唴鐢ㄨ溅" name="3"></el-tab-pane>
- <el-tab-pane label="瀹ゅ鐢ㄨ溅" name="4"></el-tab-pane>
+ <el-tab-pane label="甯傚唴鐢ㄨ溅" name="3"></el-tab-pane>
+ <el-tab-pane label="甯傚鐢ㄨ溅" name="4"></el-tab-pane>
</el-tabs>
<div class="config">
<div class="config_list">
@@ -120,7 +120,7 @@
<div class="config_data_item_reviewed_r">
<span>琚浜虹殑</span>
<el-select
- v-model="apprList[activeIndex].level"
+ v-model="apprList[activeIndex].objLevel"
placeholder="璇烽�夋嫨"
style="margin: 0 20px 0 10px"
>
@@ -164,14 +164,15 @@
<div>鍏佽淇敼"椹鹃┒鍛�"</div>
<el-switch
class="ml10"
- active-value="0"
- inactive-value="1"
+ :active-value="1"
+ :inactive-value="0"
v-model="apprList[activeIndex].driverParam"
></el-switch>
</div>
<div class="config_data_submit">
<el-button
@click="onSubmit"
+ :loading="subLoading"
style="background: #435ebe"
type="primary"
>淇濆瓨閰嶇疆椤�</el-button
@@ -252,6 +253,7 @@
data () {
return {
activeType: '3',
+ subLoading: false,
apprList: [
{ remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
{ remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
@@ -332,13 +334,15 @@
item.objIds = ''
}
})
+ this.subLoading = true
approveTemplSave({
type: activeType,
paramList: temp
}).then(res => {
- // if (res.code === 200) {
+ this.subLoading = false
this.$tip.success('淇濆瓨鎴愬姛')
- // }
+ }, () => {
+ this.subLoading = false
})
},
handleDel () {
diff --git a/admin/src/views/operation/serviceCar/apprRecord.vue b/admin/src/views/operation/serviceCar/apprRecord.vue
index c204187..85828a2 100644
--- a/admin/src/views/operation/serviceCar/apprRecord.vue
+++ b/admin/src/views/operation/serviceCar/apprRecord.vue
@@ -17,7 +17,7 @@
<el-option label="瀹℃牳涓�" value="1"></el-option>
<el-option label="瀹℃壒閫氳繃" value="2"></el-option>
<el-option label="瀹℃壒涓嶉�氳繃" value="3"></el-option>
- <el-option label="宸插彇娑�" value="4"></el-option>
+ <el-option label="宸叉挙閿�" value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="鐩殑鍦扮被鍨�" prop="type">
@@ -34,6 +34,7 @@
type="datetimerange"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
+ :default-time="['00:00:00', '23:59:59']"
range-separator="鑷�"
start-placeholder="寮�濮嬫棩鏈�"
end-placeholder="缁撴潫鏃ユ湡">
@@ -53,7 +54,7 @@
<template v-slot:table-wrap>
<ul class="toolbar" v-permissions="['business:carusebook:create','business:carusebook:exportExcel']">
<li><el-button type="primary" @click="handleEdit" icon="el-icon-plus" v-permissions="['business:carusebook:create']">鏂板缓</el-button></li>
- <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:carusebook:exportExcel']">瀵煎嚭</el-button></li>
+ <li><el-button type="primary" @click="handleEx" v-permissions="['business:carusebook:exportExcel']">瀵煎嚭</el-button></li>
</ul>
<el-table
v-loading="isWorking.search"
@@ -82,10 +83,10 @@
<el-table-column label="鐘舵��" min-width="100px">
<template slot-scope="{row}">
<span class="status-blue" v-if="row.status === 0">鐢宠涓�</span>
- <span class="status-blue" v-if="row.status === 1">寰呭鎵�</span>
+ <span class="status-blue" v-if="row.status === 1">瀹℃牳涓�</span>
<span class="status-green" v-if="row.status === 2">瀹℃壒閫氳繃</span>
<span class="status-red" v-if="row.status === 3">瀹℃壒涓嶉�氳繃</span>
- <span class="status-red" v-if="row.status === 4">宸插彇娑�</span>
+ <span class="status-red" v-if="row.status === 4">宸叉挙閿�</span>
</template>
</el-table-column>
@@ -93,12 +94,13 @@
<el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
<el-table-column
label="鎿嶄綔"
- min-width="100"
+ min-width="140"
align="center"
fixed="right"
>
<template slot-scope="{row}">
<el-button type="text" icon="el-icon-edit" @click="$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�',row)" >鏌ョ湅璇︽儏</el-button>
+ <el-button v-if="(row.status === 1 || row.status === 2) && new Date().getTime() < new Date(row.startTime).getTime()" type="text" icon="el-icon-delete" @click="rowRevokeClick(row)" >鎾ら攢</el-button>
</template>
</el-table-column>
</el-table>
@@ -122,6 +124,7 @@
import OperaCarUseBookParamWindow from '@/components/operation/OperCarUseBookParamWindow.vue'
import { timeForMat } from '@/utils/util'
import { allList } from '@/api/business/hiddenDangerParam'
+import { carUseBookRecordEx, revokeById } from '@/api/business/carUseBook'
export default {
name: 'Empower',
extends: BaseTable,
@@ -155,6 +158,27 @@
this.loadParams()
},
methods: {
+ rowRevokeClick (row) {
+ revokeById(row.id)
+ },
+ handleEx () {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ this.exLoading = true
+ carUseBookRecordEx({
+ model: this.searchForm
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.exLoading = false
+ })
+ })
+ },
changeRadio (e) {
this.searchForm.radio = e
if (e === '0') {
diff --git a/admin/src/views/task/dangetDetail.vue b/admin/src/views/task/dangetDetail.vue
index 76d3a71..7a7012b 100644
--- a/admin/src/views/task/dangetDetail.vue
+++ b/admin/src/views/task/dangetDetail.vue
@@ -34,7 +34,7 @@
<div class="label">鐜板満鎯呭喌</div>
<div class="value">
<div class="file_list">
- <template v-for="item in info.submitFileList">
+ <div class="file" v-for="item in info.submitFileList">
<img
v-if="item.type == 0"
:key="item.id"
@@ -49,7 +49,7 @@
class="img"
controls
/>
- </template>
+ </div>
</div>
</div>
</div>
@@ -458,7 +458,7 @@
}
}
},
- created() {
+ created () {
this.getMemberList()
},
methods: {
@@ -666,10 +666,14 @@
}
.file_list {
display: flex;
- .img {
- width: 200px;
+ .file {
+ width: 92px;
margin-right: 12px;
margin-bottom: 12px;
+ .img{
+ max-height: 92px;
+ max-width: 92px;
+ }
}
}
.value {
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index d4a61d0..8d1c350 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -121,7 +121,8 @@
import dayjs from 'dayjs'
import {
taskCenterHeadPC,
- taskCenterPage
+ taskCenterPage,
+ taskSignRead
} from '@/api'
export default {
components: {
@@ -201,8 +202,16 @@
this.getList()
},
handleDetail (row) {
+ if (this.filters.queryType == 3) {
+ taskSignRead({
+ noticesId: row.id,
+ signType: 0
+ }).then(res => {
+ this.getHeadData()
+ })
+ }
if (row.objType === 2) {
- this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', row)
+ this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', { ...row, id: row.objId })
return
}
if (row.objType === 1) {
@@ -260,7 +269,7 @@
})
},
getHeadData () {
- const {filters} = this
+ const { filters } = this
if (filters.selTime && filters.selTime.length > 0) {
filters.startDate = filters.selTime[0]
filters.endDate = filters.selTime[1]
diff --git a/admin/src/views/task/visSubDetail.vue b/admin/src/views/task/visSubDetail.vue
index b9595dc..d8e4b15 100644
--- a/admin/src/views/task/visSubDetail.vue
+++ b/admin/src/views/task/visSubDetail.vue
@@ -5,7 +5,7 @@
<div class="header">
<div class="left">
<div class="h1">{{ cateList[type] }}</div>
- <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
+ <div class="time">鎻愪氦鏃堕棿锛歿{ info.createTime }}</div>
</div>
<div class="right">{{ statusMap[info.status] }}</div>
</div>
@@ -68,7 +68,13 @@
label="璇佷欢绫诲瀷"
prop="idcardTypeName"
min-width="80"
- />
+ >
+ <template slot-scope="{ row }">
+ <span v-if="row.idcardType == 0">韬唤璇�</span>
+ <span v-if="row.idcardType == 1">娓境璇佷欢</span>
+ <span v-if="row.idcardType == 2">鎶ょ収</span>
+ </template>
+ </el-table-column>
<el-table-column
label="璇佷欢鍙风爜"
prop="idCardDecode"
@@ -81,7 +87,7 @@
/>
<el-table-column label="浜鸿劯鐓х墖" prop="" min-width="80">
<template slot-scope="{ row }">
- <el-image :src="row.prefix" :preview-src-list="[row.prefix]">
+ <el-image :src="row.prefix + row.faceImg" :preview-src-list="[row.prefix + row.faceImg]">
</el-image>
</template>
</el-table-column>
@@ -238,7 +244,7 @@
<!-- 鍚屾剰/鎷掔粷 -->
<el-dialog
append-to-body
- :title="apprTitle"
+ :title="param.status == 2 ? '鍚屾剰' : '鎷掔粷'"
:visible.sync="isShowAppr"
width="480px"
>
@@ -400,6 +406,9 @@
handleAppr (val) {
this.$set(this.param, 'status', val)
this.isShowAppr = true
+ this.$nextTick(() => {
+ this.$refs.ruleForm.clearValidate()
+ })
},
confirm () {
console.log('--')
diff --git a/h5/App.vue b/h5/App.vue
index 31e5e5c..0d25d8c 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -2,46 +2,7 @@
import { wxAuthorize, refreshToken } from '@/api'
export default {
onLaunch: function () {
- var that = this
- if (!that.$store.state.openid) {
- let url = window.location.href
- let code = ''
- if (url.indexOf('code=') !== -1) {
- const query = url.split('?')
- console.log('app-app', url)
- for (const q of query) {
- if (q.indexOf('code=') !== -1) {
- code = q.substring(q.indexOf('code=') + 5, q.length)
- }
- }
- wxAuthorize({
- code: code
- }).then(res => {
- console.log('app_ress', res)
- if (res.code === 200) {
- that.$store.commit('setOpenId', res.data.openid)
- if (res.data.member) {
- that.$store.commit('setMember', res.data.member)
- }
- }
- })
- } else {
- // const appID = 'wx4d7c10bdec51942b'
- // let uri = encodeURIComponent(url)
- // let authURL =
- // `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
- // window.location.href = authURL
- }
- }
- // 鍒锋柊token
- const token = uni.getStorageSync('token')
- if (token) {
- // refreshToken().then(res => {
- // if(res.code && res.code === 200){
- // this.$store.commit('setToken', res.data)
- // }
- // })
- }
+
},
onShow: function () {
console.log('App Show')
@@ -220,24 +181,42 @@
font-size: 28rpx;
color: #333333;
}
+.popupShow {
+ overflow: hidden;
+ position: fixed;
+ width: 100%;
+}
.placeholder6 {
color: #666666;
font-size: 28rpx;
}
-.primaryColor{
+.primaryColor {
color: $uni-color-primary;
+}
+.avatar {
+ width: 64rpx;
+ height: 64rpx;
+ border-radius: 50%;
+ overflow: hidden;
+ margin-right: 20rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: $uni-color-primary;
+ color: #fff;
+ font-size: 30rpx;
}
.placeholder9 {
color: #999999;
font-size: 28rpx;
}
-.fs24{
+.fs24 {
font-size: 24rpx;
}
.mr24 {
margin-right: 24rpx;
}
-.mt24{
+.mt24 {
margin-top: 24rpx;
}
@@ -247,7 +226,7 @@
.ml12 {
margin-left: 12rpx;
}
-.mt6{
+.mt6 {
margin-top: 6rpx;
}
.mr6 {
diff --git a/h5/api/meeting.js b/h5/api/meeting.js
index 29ba261..c9f6413 100644
--- a/h5/api/meeting.js
+++ b/h5/api/meeting.js
@@ -83,7 +83,15 @@
export const cancelById = (data) => {
return http({
url: 'meetingAdmin/cloudService/business/meeting/reservationCancel',
- method: 'get',
+ method: 'post',
+ data
+ })
+}
+// 浼氳瀹� 缁撴潫
+export const closeMeetignById = (data) => {
+ return http({
+ url: 'meetingAdmin/cloudService/business/meeting/reservationOver',
+ method: 'post',
data
})
}
diff --git a/h5/api/staff.js b/h5/api/staff.js
index c9688d4..d32ffdc 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -205,4 +205,12 @@
method: 'post',
data
})
-}
\ No newline at end of file
+}
+// 浠诲姟涓績 鏍囪宸茶
+export const signReadTask = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/staging/signRead',
+ method: 'get',
+ data
+ })
+}
diff --git a/h5/components/Li-Calendar/Li-Calendar.vue b/h5/components/Li-Calendar/Li-Calendar.vue
index f8f970c..8503056 100644
--- a/h5/components/Li-Calendar/Li-Calendar.vue
+++ b/h5/components/Li-Calendar/Li-Calendar.vue
@@ -858,8 +858,8 @@
/* color: #000; */
}
.calendar-today {
- /* border-radius: 6upx;
- background-color: $uni-color-primary; */
+ border-radius: 6rpx;
+ background-color: #e9f4f6;
color: $uni-color-primary;
/* -moz-box-shadow: 0px 2upx 10upx #ABABAB;
-webkit-box-shadow: 0px 2upx 10upx #ABABAB;
diff --git a/h5/main.js b/h5/main.js
index e9b21e4..4c90c6f 100644
--- a/h5/main.js
+++ b/h5/main.js
@@ -4,25 +4,18 @@
import './uni.promisify.adaptor'
import uView from "uview-ui"
import store from './store/index.js'
-
import Tabbar from '@/components/tarbar.vue'
import navigation from '@/components/Header.vue'
Vue.config.productionTip = false
+// 寮傛hook
-// Vue.prototype.$baseUrl = 'https://dmtest.ahapp.net/h5_api/';
-// Vue.prototype.$baseUrl = 'http://facepay.huasunsolar.com/web_interface/';
-// Vue.prototype.$baseUrl = 'http://218.23.218.228:8018/web_interface/'
Vue.use(uView)
Vue.component('Tabbar', Tabbar)
Vue.component('navigation', navigation)
Vue.prototype.$store = store
-Vue.prototype.$jump = (url) => {
- uni.navigateTo({
- url
- })
-}
+Vue.prototype.$jump = (url) => {uni.navigateTo({url})}
Vue.prototype.$goBack = () => { uni.navigateBack() }
Vue.prototype.$eventBus = new Vue()
Vue.prototype.$onWait = new Promise((resolve) => {
diff --git a/h5/manifest.json b/h5/manifest.json
index 6e448ff..22a90b7 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -91,8 +91,8 @@
"proxy" : {
"/admin_interface" : {
// 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
- "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
- // "target" : "http://192.168.0.135:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+ // "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+ "target" : "http://192.168.0.135:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
"changeOrigin" : true, // 鍏佽璺ㄥ煙
"pathRewrite" : {
"^/admin_interface" : "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�
diff --git a/h5/pages.json b/h5/pages.json
index 8fc4ef3..31a0fd0 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -4,6 +4,13 @@
},
"pages": [
{
+ "path": "pages/login/login",
+ "style": {
+ "navigationBarTitleText": "閫夋嫨韬唤",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "璁垮涓績",
@@ -21,8 +28,7 @@
"path": "pages/staffLogin/login",
"style": {
"navigationBarTitleText": "鐧诲綍",
- "enablePullDownRefresh": false,
- "navigationStyle": "custom"
+ "enablePullDownRefresh": false
}
},
{
diff --git a/h5/pages/answer/answer.vue b/h5/pages/answer/answer.vue
index e1cc20a..92d91bb 100644
--- a/h5/pages/answer/answer.vue
+++ b/h5/pages/answer/answer.vue
@@ -8,12 +8,12 @@
<view class="box_list_answer" v-if="list && list.length > 0">
<view v-if="status == 1 || status == 2" class="score_static">
<text class="name">鏈寰楀垎锛�</text>
- <text class="num" :class="{warry: status == 2}">{{ score }}鍒�</text>
+ <text class="num" :class="{ warry: status == 2 }">{{ score }}鍒�</text>
</view>
<!-- 鍗曢��/鍒ゆ柇 -->
<view v-for="(item, index) in list" :key="index" class="list_item">
<view class="box_list_answer_name">
- <text>{{ index + 1 }}銆亄{ item.title}}</text>
+ <text>{{ index + 1 }}銆亄{ item.title }}</text>
<text v-if="item.score"> ({{ item.score }}鍒�)</text>
<text style="color: #ed4545">*</text>
</view>
@@ -83,14 +83,18 @@
</view>
<view
class="box_list_answer_tips"
+ style="margin-bottom: 0rpx"
v-if="
item.selAnswer &&
item.answer !== item.selAnswer &&
status != '0'
"
>
- <image src="@/static/ic_wrong@2x.png" />
- <text>鍥炵瓟閿欒</text>
+ <view class="line">
+ <image src="@/static/ic_wrong@2x.png" />
+ <text>鍥炵瓟閿欒</text>
+ </view>
+ <view class="line">姝g‘绛旀锛歿{ item.answer }}</view>
</view>
<view
class="box_list_answer_tips"
@@ -100,8 +104,10 @@
status != '0'
"
>
- <image src="@/static/ic_success@2.png" />
- <text class="success">鍥炵瓟姝g‘</text>
+ <view class="line">
+ <image src="@/static/ic_success@2.png" />
+ <text class="success">鍥炵瓟姝g‘</text>
+ </view>
</view>
</template>
<template v-if="item.type == 2">
@@ -116,8 +122,7 @@
src="@/static/checkbo1x_sel@2x.png"
v-if="
(line.checked && status != '2') ||
- (item.selAnswer === item.answer &&
- line.checked)
+ (item.selAnswer === item.answer && line.checked)
"
/>
<image
@@ -135,8 +140,7 @@
<text
v-if="
(line.checked && status != '2') ||
- (item.selAnswer === item.answer &&
- line.checked)
+ (item.selAnswer === item.answer && line.checked)
"
style="color: rgba(77, 153, 168, 1)"
><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{
@@ -165,8 +169,11 @@
status != '0'
"
>
- <image src="@/static/ic_wrong@2x.png" />
- <text>鍥炵瓟閿欒</text>
+ <view class="line">
+ <image src="@/static/ic_wrong@2x.png" />
+ <text>鍥炵瓟閿欒</text>
+ </view>
+ <view class="line">姝g‘绛旀锛歿{ item.answer }}</view>
</view>
<view
class="box_list_answer_tips"
@@ -176,8 +183,10 @@
status != '0'
"
>
- <image src="@/static/ic_success@2.png" />
- <text class="success">鍥炵瓟姝g‘</text>
+ <view class="line">
+ <image src="@/static/ic_success@2.png" />
+ <text class="success">鍥炵瓟姝g‘</text>
+ </view>
</view>
</template>
</view>
@@ -237,12 +246,12 @@
score: 0
}
},
- computed:{
- answerIng(){
+ computed: {
+ answerIng() {
let count = 0
this.list.forEach(item => {
- if(item.selAnswer || item.selAnswer == 0){
- count ++
+ if (item.selAnswer || item.selAnswer == 0) {
+ count++
}
})
return count === this.list.length
@@ -295,7 +304,6 @@
item.status = '0'
item.selAnswer = null
})
- console.log(res.data)
this.list = res.data
}
// res.param.problemsDOList.forEach(item => {
@@ -307,7 +315,7 @@
},
// 鍗曢�夐�夋嫨涓鐩�
select(line, i) {
- if(this.status === '2') return
+ if (this.status != '0') return
this.list.forEach((item, index) => {
if (index === i) {
item.selAnswer = line.code
@@ -316,7 +324,7 @@
// this.problemIndex = index
},
changeBox(index, jeck) {
- if(this.status === '2') return
+ if (this.status != '0') return
this.list.forEach((item, i) => {
if (index === i) {
item.options.forEach((item2, j) => {
@@ -356,7 +364,7 @@
},
// 涓嬩竴棰�
onSubmit() {
- if(!this.answerIng) return
+ if (!this.answerIng) return
const { list } = this
// 楠岃瘉鎵�鏈夐鐩兘鏈夐�夐」
let count = 0
@@ -376,7 +384,7 @@
list.forEach(item => {
if (item.selAnswer !== item.answer) {
flag++
- }else{
+ } else {
this.score += item.score
}
})
@@ -468,9 +476,17 @@
box-sizing: border-box;
background: #f7f7f7;
border-radius: 8rpx;
- display: flex;
- align-items: center;
margin-bottom: 24rpx;
+ .line {
+ display: flex;
+ align-items: center;
+ font-size: 28rpx;
+ color: #333333;
+ margin-bottom: 20rpx;
+ &:nth-last-child(1){
+ margin-bottom: 0;
+ }
+ }
image {
width: 28rpx;
height: 28rpx;
@@ -486,18 +502,18 @@
}
}
}
- .score_static{
+ .score_static {
display: flex;
font-size: 32rpx;
margin-bottom: 40rpx;
- .name{
+ .name {
font-weight: 600;
}
- .num{
+ .num {
color: $uni-color-primary;
}
- .warry{
- color: #ED4545;
+ .warry {
+ color: #ed4545;
}
}
.list_item {
@@ -541,7 +557,7 @@
font-size: 30rpx;
color: #ffffff;
}
- .disable{
+ .disable {
background-color: #cccccc;
}
}
diff --git a/h5/pages/applicationRecord/applicationRecord.vue b/h5/pages/applicationRecord/applicationRecord.vue
index a390d45..98b1598 100644
--- a/h5/pages/applicationRecord/applicationRecord.vue
+++ b/h5/pages/applicationRecord/applicationRecord.vue
@@ -36,7 +36,7 @@
:key="index"
>
<view class="box_list_item_head">
- <text>{{ item.name }}鐨勫姵鍔″叆鍥敵璇�</text>
+ <text>{{ item.name }}鎻愪氦鐨勮瀹㈢敵璇�</text>
<text class="loading">{{ statusMap[item.status] }}</text>
</view>
<view class="box_list_item_nr">
@@ -111,7 +111,7 @@
methods: {
handleDetail(id) {
uni.navigateTo({
- url: "/pages/appointmentDetails/appointmentDetails?id=" + id
+ url: "/pages/appointmentDetails/appointmentDetails?detail=1&id=" + id
})
},
tabsClick(val) {
diff --git a/h5/pages/appointmentDetails/appointmentDetails.vue b/h5/pages/appointmentDetails/appointmentDetails.vue
index ce81109..e9a26ee 100644
--- a/h5/pages/appointmentDetails/appointmentDetails.vue
+++ b/h5/pages/appointmentDetails/appointmentDetails.vue
@@ -77,10 +77,25 @@
data() {
return {
info: {},
- show: false
+ show: false,
+ detail: ''
}
},
+ onBackPress(options) {
+ if (this.detail == 1) {
+ uni.redirectTo({
+ url: '/pages/applicationRecord/applicationRecord'
+ })
+ } else {
+ uni.redirectTo({
+ url: '/pages/index/index'
+ })
+ }
+
+ return true
+ },
onLoad(option) {
+ this.detail = option.detail || ''
this.getDetail(option.id)
// visitorSubDetail({ id: option.id })
// .then(res => {
diff --git a/h5/pages/index/index.vue b/h5/pages/index/index.vue
index cc4c1c6..3c7ac9a 100644
--- a/h5/pages/index/index.vue
+++ b/h5/pages/index/index.vue
@@ -1,162 +1,205 @@
<template>
- <view class="box">
- <view class="box_head">
- <text>瀹夋嘲鐗╂祦鏅烘収鍥尯</text>
- <text class="h2">璁垮涓撳尯</text>
- <image mode="widthFix" class="banner_bg" src="@/static/banner.jpg" />
- </view>
- <view class="main_title">涓氬姟鍔炵悊</view>
- <view class="box_list">
- <view class="box_list_item" @click="jump(1)">
- <image src="@/static/ic_laifangdengji.png" mode="widthFix" />
- </view>
- <view class="box_list_item" @click="jump(2)">
- <image src="@/static/ic_yuyuejilu.png" mode="widthFix" />
- </view>
- <view class="box_list_item" @click="jump(3)">
- <image src="@/static/ic_yuanqudaolan.png" mode="widthFix" />
- </view>
- <view class="box_list_item" @click="jump(4)">
- <image src="@/static/ic_yuyuezhinan.png" mode="widthFix" />
- </view>
- </view>
- <!-- <view class="box_btn">閫�鍑虹櫥褰�</view> -->
- <view class="copyright">
- <image src="@/static/logo_s@2x.png" mode="widthFix" />
- <text>瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃鐗堟潈鎵�鏈�</text>
- </view>
- </view>
+ <view class="box">
+ <view class="box_head">
+ <text>瀹夋嘲鐗╂祦鏅烘収鍥尯</text>
+ <text class="h2">璁垮涓撳尯</text>
+ <image mode="widthFix" class="banner_bg" src="@/static/banner.jpg" />
+ </view>
+ <view class="main_title">涓氬姟鍔炵悊</view>
+ <view class="box_list">
+ <view class="box_list_item" @click="jump(1)">
+ <image src="@/static/ic_laifangdengji.png" mode="widthFix" />
+ </view>
+ <view class="box_list_item" @click="jump(2)">
+ <image src="@/static/ic_yuyuejilu.png" mode="widthFix" />
+ </view>
+ <view class="box_list_item" @click="jump(3)">
+ <image src="@/static/ic_yuanqudaolan.png" mode="widthFix" />
+ </view>
+ <view class="box_list_item" @click="jump(4)">
+ <image src="@/static/ic_yuyuezhinan.png" mode="widthFix" />
+ </view>
+ </view>
+ <!-- <view class="box_btn">閫�鍑虹櫥褰�</view> -->
+ <view class="copyright">
+ <image src="@/static/logo_s@2x.png" mode="widthFix" />
+ <text>瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃鐗堟潈鎵�鏈�</text>
+ </view>
+ </view>
</template>
<script>
-import image from 'uview-ui/libs/config/props/image'
+import { wxAuthorize } from '@/api'
+export default {
- export default {
+ data() {
+ return {
- data() {
- return {
-
- }
- },
-
- methods: {
- jump(type) {
- switch (type) {
- case 1:
- uni.navigateTo({
- url: '/pages/notice/notice'
- })
- break
- case 2:
- uni.navigateTo({
- url: '/pages/applicationRecord/applicationRecord'
- })
- break
- case 3:
- uni.navigateTo({
- url: '/pages/guidemap/guidemap'
- })
- break
- case 4:
- uni.navigateTo({
- url: '/pages/visitorSubGuide/index'
- })
- break
- }
- }
- }
- }
+ }
+ },
+ onBackPress(options) {
+ uni.redirectTo({
+ url: '/pages/login/login'
+ })
+ return true
+ },
+ onLoad() {
+ var that = this
+ // if (!that.$store.state.openid) {
+ let url = window.location.href
+ let code = ''
+ let source = ''
+ if (url.indexOf('code=') !== -1) {
+ const query = url.split('?')
+ console.log('app-app', url)
+ for (const q of query) {
+ if (q.indexOf('code=') !== -1) {
+ code = q.substring(q.indexOf('code=') + 5, q.length)
+ }
+ // if (q.indexOf('source=') !== -1) {
+ // source = q.substring(q.indexOf('source=') + 7, q.indexOf('source=') + 8)
+ // }
+ // 鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐
+ }
+ wxAuthorize({
+ code: code,
+ source: 1
+ }).then(res => {
+ console.log('app_ress', res)
+ if (res.code === 200) {
+ that.$store.commit('setOpenId', res.data.openid)
+ if (res.data.member) {
+ that.$store.commit('setMember', res.data.member)
+ }
+ }
+ })
+ } else {
+ // const appID = 'wx4d7c10bdec51942b'
+ // let uri = encodeURIComponent(url)
+ // let authURL =
+ // `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
+ // window.location.href = authURL
+ }
+ // }
+ },
+ methods: {
+ jump(type) {
+ switch (type) {
+ case 1:
+ uni.navigateTo({
+ url: '/pages/notice/notice'
+ })
+ break
+ case 2:
+ uni.navigateTo({
+ url: '/pages/applicationRecord/applicationRecord'
+ })
+ break
+ case 3:
+ uni.navigateTo({
+ url: '/pages/guidemap/guidemap'
+ })
+ break
+ case 4:
+ uni.navigateTo({
+ url: '/pages/visitorSubGuide/index'
+ })
+ break
+ }
+ }
+ }
+}
</script>
<style lang="scss" scoped>
- .box {
- width: 100%;
- height: auto;
- padding: 30rpx;
- box-sizing: border-box;
+.box {
+ width: 100%;
+ height: auto;
+ padding: 30rpx;
+ box-sizing: border-box;
- .box_btn {
- position: fixed;
- bottom: 70rpx;
- left: 50%;
- transform: translate(-50%, 0);
- width: 208rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- border-radius: 36rpx;
- border: 1rpx solid #999999;
- font-size: 28rpx;
- font-weight: 400;
- color: #333333;
- }
+ .box_btn {
+ position: fixed;
+ bottom: 70rpx;
+ left: 50%;
+ transform: translate(-50%, 0);
+ width: 208rpx;
+ height: 72rpx;
+ line-height: 72rpx;
+ text-align: center;
+ border-radius: 36rpx;
+ border: 1rpx solid #999999;
+ font-size: 28rpx;
+ font-weight: 400;
+ color: #333333;
+ }
- .box_head {
- width: 100%;
- height: 270rpx;
- padding: 0 44rpx;
- box-sizing: border-box;
- border-radius: 8rpx;
- display: flex;
- flex-direction: column;
- position: relative;
- .banner_bg{
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- z-index: -1;
- }
- .h2 {
- font-size: 28rpx;
- font-family: SourceHanSansSC, SourceHanSansSC;
- font-weight: 400;
- color: #FFFFFF;
- margin-top: 14rpx;
- }
- text {
- &:first-child {
- font-size: 44rpx;
- font-family: SourceHanSansSC, SourceHanSansSC;
- font-weight: bold;
- color: #FFFFFF;
- margin-top: 54rpx;
- }
- }
- }
- .main_title{
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- margin: 40rpx 0 32rpx;
- }
- .box_list {
- width: 100%;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- justify-content: space-between;
- margin-top: 40rpx;
+ .box_head {
+ width: 100%;
+ height: 270rpx;
+ padding: 0 44rpx;
+ box-sizing: border-box;
+ border-radius: 8rpx;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ .banner_bg {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: -1;
+ }
+ .h2 {
+ font-size: 28rpx;
+ font-family: SourceHanSansSC, SourceHanSansSC;
+ font-weight: 400;
+ color: #ffffff;
+ margin-top: 14rpx;
+ }
+ text {
+ &:first-child {
+ font-size: 44rpx;
+ font-family: SourceHanSansSC, SourceHanSansSC;
+ font-weight: bold;
+ color: #ffffff;
+ margin-top: 54rpx;
+ }
+ }
+ }
+ .main_title {
+ font-weight: 600;
+ font-size: 32rpx;
+ color: #222222;
+ margin: 40rpx 0 32rpx;
+ }
+ .box_list {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ margin-top: 40rpx;
- .box_list_item {
- width: 100%;
- margin-bottom: 20rpx;
- image {
- width: 100%;
- }
- }
- }
- .copyright{
- display: flex;
- align-items: center;
- justify-content: center;
- margin-top: 84rpx;
- font-size: 24rpx;
- color: #666666;
- image{
- width: 40rpx;
- height: 40rpx;
- }
- }
- }
+ .box_list_item {
+ width: 100%;
+ margin-bottom: 20rpx;
+ image {
+ width: 100%;
+ }
+ }
+ }
+ .copyright {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-top: 84rpx;
+ font-size: 24rpx;
+ color: #666666;
+ image {
+ width: 40rpx;
+ height: 40rpx;
+ }
+ }
+}
</style>
\ No newline at end of file
diff --git a/h5/pages/login/login.vue b/h5/pages/login/login.vue
new file mode 100644
index 0000000..c459474
--- /dev/null
+++ b/h5/pages/login/login.vue
@@ -0,0 +1,110 @@
+<template>
+ <view class="main_app">
+ <image class="login_bg" src="@/static/login_bg@2x.png" />
+ <view class="h1">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
+ <view class="placeholder6 place">璇烽�夋嫨鎮ㄧ殑韬唤</view>
+ <view class="item" @click="jump('/pages/index/index')">
+ <image class="avatar" src="@/static/ic_visitor@2x.png" />
+ <view class="content">
+ <view class="name">鎴戞槸璁垮</view>
+ <view class="placeholder6">VISITOR</view>
+ </view>
+ <u-icon name="arrow-right" size="24" color="#979797" />
+ </view>
+ <view class="item" @click="staffLogin">
+ <image class="avatar" src="@/static/ic_staff@2x.png" />
+ <view class="content">
+ <view class="name">鎴戞槸鍛樺伐</view>
+ <view class="placeholder6">STAFF</view>
+ </view>
+ <u-icon name="arrow-right" size="24" color="#979797" />
+ </view>
+ <view class="item">
+ <image class="avatar" src="@/static/ic_driver@2x.png" />
+ <view class="content">
+ <view class="name">鎴戞槸鐗╂祦杞﹀徃鏈�</view>
+ <view class="placeholder6">DRIVER</view>
+ </view>
+ <u-icon name="arrow-right" size="24" color="#979797" />
+ </view>
+ </view>
+</template>
+
+<script>
+export default {
+ methods: {
+ jump(url) {
+ console.log(url)
+ uni.navigateTo({
+ url
+ })
+ },
+ staffLogin() {
+ const userInfo = uni.getStorageSync('userInfo') || {}
+ if (userInfo && userInfo.memberId) {
+ uni.navigateTo({
+ url: '/pages/staff/index'
+ })
+ }else{
+ uni.navigateTo({
+ url: '/pages/staffLogin/login'
+ })
+ }
+ }
+ }
+}
+</script>
+
+<style lang="scss" >
+.main_app {
+ width: 100%;
+ height: 100vh;
+ padding-top: 80rpx;
+ background: linear-gradient(
+ 180deg,
+ rgba(39, 155, 170, 0.2) 0%,
+ rgba(39, 155, 170, 0) 100%
+ );
+ .login_bg {
+ position: absolute;
+ top: 0;
+ width: 750rpx;
+ z-index: -1;
+ }
+ .h1 {
+ font-weight: 600;
+ font-size: 48rpx;
+ color: #222222;
+ line-height: 66rpx;
+ margin-bottom: 16rpx;
+ }
+ .place {
+ margin-bottom: 98rpx;
+ }
+ .item {
+ width: 690rpx;
+ height: 200rpx;
+ background: #ffffff;
+ border-radius: 8rpx;
+ display: flex;
+ align-items: center;
+ padding: 40rpx;
+ font-size: 26rpx;
+ margin-bottom: 40rpx;
+ .avatar {
+ width: 120rpx;
+ height: 120rpx;
+ margin-right: 30rpx;
+ }
+ .content {
+ flex: 1;
+ .name {
+ font-weight: 600;
+ font-size: 38rpx;
+ color: #222222;
+ margin-bottom: 20rpx;
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/h5/pages/notice/notice.vue b/h5/pages/notice/notice.vue
index 4ad99a7..f108547 100644
--- a/h5/pages/notice/notice.vue
+++ b/h5/pages/notice/notice.vue
@@ -9,7 +9,7 @@
</view>
<view class="empty"></view>
</scroll-view>
- <view class="button" :class="{disable: num > 0}" @click="toapply">
+ <view class="button" :class="{ disable: num > 0 }" @click="toapply">
宸茬煡鏅擄紝涓嬩竴姝�
<text v-if="num > 0">({{ num }}绉�)</text>
</view>
@@ -33,12 +33,6 @@
if (!this.$store.state.openId) {
this.initToken()
}
- timer = setInterval(() => {
- this.num--
- if (this.num === 0) {
- clearInterval(timer)
- }
- }, 1000)
},
methods: {
initToken() {
@@ -59,6 +53,21 @@
this.content = res.data.code
}
})
+ // 鍊掕鏃舵椂闂�
+ getSystemDictData({
+ dictCode: 'SYSTEM',
+ label: 'NOTICE_CUTNTDOWN'
+ }).then(res => {
+ if (res.code === 200) {
+ this.num = res.data.code
+ timer = setInterval(() => {
+ this.num--
+ if (this.num === 0) {
+ clearInterval(timer)
+ }
+ }, 1000)
+ }
+ })
// 鏄惁闇�瑕佺瓟棰�
getSystemDictData({
dictCode: 'SYSTEM',
@@ -70,7 +79,7 @@
})
},
toapply() {
- if(this.num > 0) return
+ if (this.num > 0) return
if (this.answer === '0') {
uni.navigateTo({
url: '/pages/userinfo/userinfo'
@@ -125,7 +134,7 @@
bottom: 30rpx;
left: 30rpx;
}
- .disable{
+ .disable {
background-color: #cccccc;
}
}
diff --git a/h5/pages/staff/index.vue b/h5/pages/staff/index.vue
index 341f9b3..5b07e1b 100644
--- a/h5/pages/staff/index.vue
+++ b/h5/pages/staff/index.vue
@@ -63,7 +63,9 @@
<image class="img" src="@/static/staff/ic_renwuzhongxin.png"></image>
<view class="h1">浠诲姟涓績</view>
<view class="h2">TASK CENTER</view>
- <view class="task_num">{{ taskNum }}</view>
+ <view class="task_num">{{
+ taskInfo.noticeWaitNum + taskInfo.noticeCopyNum
+ }}</view>
</view>
<view class="img_wrap" @click="jump('/pages/staff/meetingCalendar')">
<image class="img" src="@/static/staff/ic_wodehuiyi.png"></image>
@@ -89,22 +91,71 @@
</template>
<script>
-import { logoutPost, stagingHead } from '@/api'
+import { logoutPost, stagingHead, wxAuthorize, refreshToken } from '@/api'
export default {
data() {
return {
userInfo: uni.getStorageSync('userInfo'),
- taskNum: 0
+ taskInfo: 0
}
},
onLoad() {
- console.log('userInfo', this.userInfo)
-
- },
- onShow() {
- // if (this.userInfo && this.userInfo.name) {
- this.getTaskInfo()
+ var that = this
+ // if (!that.$store.state.openid) {
+ let url = window.location.href
+ let code = ''
+ let source = ''
+ if (url.indexOf('code=') !== -1) {
+ const query = url.split('?')
+ console.log('app-app', url)
+ for (const q of query) {
+ if (q.indexOf('code=') !== -1) {
+ code = q.substring(q.indexOf('code=') + 5, q.length)
+ }
+ // if (q.indexOf('source=') !== -1) {
+ // source = q.substring(q.indexOf('source=') + 7, q.indexOf('source=') + 8)
+ // }
+ // 鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐
+ }
+ wxAuthorize({
+ code: code,
+ source: 2
+ }).then(res => {
+ console.log('app_ress', res)
+ if (res.code === 200) {
+ that.$store.commit('setOpenId', res.data.openid)
+ if (res.data.member) {
+ that.$store.commit('setMember', res.data.member)
+ }
+ }
+ })
+ } else {
+ // const appID = 'wx4d7c10bdec51942b'
+ // let uri = encodeURIComponent(url)
+ // let authURL =
+ // `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
+ // window.location.href = authURL
+ }
// }
+ this.getTaskInfo()
+ // 鍒锋柊token
+ // const token = uni.getStorageSync('token')
+ // if (token) {
+ // refreshToken().then(res => {
+ // if (res.code && res.code === 200) {
+ // this.$store.commit('setToken', res.data)
+ // console.log('res', res.data);
+ // // setTimeout(() => {
+ // // this.getTaskInfo()
+ // // }, 1000)
+ // }
+ // })
+ // }
+ },
+ mounted() {
+ this.$eventBus.$on('taskBack', () => {
+ this.getTaskInfo()
+ })
},
methods: {
jump(path) {
@@ -121,9 +172,9 @@
},
getTaskInfo() {
stagingHead({
- isDetail: '0'
+ isDetail: '1'
}).then(res => {
- this.taskNum = res.data.taskNum
+ this.taskInfo = res.data
})
},
}
diff --git a/h5/pages/staff/meetingCalendar.vue b/h5/pages/staff/meetingCalendar.vue
index 1a6b653..64a22be 100644
--- a/h5/pages/staff/meetingCalendar.vue
+++ b/h5/pages/staff/meetingCalendar.vue
@@ -463,6 +463,10 @@
font-weight: 600;
font-size: 32rpx;
color: #222222;
+ flex: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
}
.status {
height: 38rpx;
@@ -472,6 +476,10 @@
border: 1rpx solid #999999;
font-size: 22rpx;
color: #999999;
+ margin-left: 20rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
}
.padding {
color: $uni-color-primary;
diff --git a/h5/pages/staff/meetingDetail.vue b/h5/pages/staff/meetingDetail.vue
index 0222759..fd97fcf 100644
--- a/h5/pages/staff/meetingDetail.vue
+++ b/h5/pages/staff/meetingDetail.vue
@@ -10,7 +10,7 @@
<!-- -->
<view class="empty"></view>
<view class="module_list">
- <view class="item">
+ <view class="item" v-if="detail.meetingContent">
<view class="label">浼氳鍐呭</view>
<view class="value">
<!-- <text>涓昏璁ㄨ鏅鸿兘浼氳瀹ょ郴缁熼�夊瀷锛岃澶у涓�瀹氳鎸夋椂鏉ュ紑浼氾紝鏃堕棿瀹濊吹銆傛劅璋㈠ぇ瀹讹紒</text> -->
@@ -24,7 +24,7 @@
/>
</view>
</view>
- <view class="item">
+ <view class="item" v-if="detail.userResponseList && detail.userResponseList.length > 0">
<view class="label">鍙備細浜哄憳</view>
<view class="value">
<view class="personnel">
@@ -33,13 +33,19 @@
v-for="mem in detail.userResponseList"
:key="mem.id"
>
- <image :src="mem.avatar ? mem.avatar : require('@/static/meeting/common/default_user@2x.png')" class="avatar" mode=""></image>
+ <image
+ v-if="mem.avatar"
+ :src="mem.avatar"
+ class="avatar"
+ mode=""
+ ></image>
+ <view v-else class="avatar">{{ mem.realname.slice(0, 1) }}</view>
<view class="name">{{ mem.realname }}</view>
</view>
</view>
</view>
</view>
- <view class="item">
+ <view class="item" v-if="detail.projectsResponseList && detail.projectsResponseList.length > 0">
<view class="label">鏈嶅姟椤�</view>
<view class="value">
<template v-for="(ser, serI) in detail.projectsResponseList">
@@ -54,13 +60,13 @@
</template>
</view>
</view>
- <view class="item">
+ <view class="item" v-if="detail.remark || detail.meetingRemark">
<view class="label">澶囨敞</view>
<view class="value">{{ detail.remark || detail.meetingRemark }}</view>
</view>
<view class="item">
<view class="label">棰勭害浜�</view>
- <view class="value"
+ <view class="value" v-if="detail.bookingUser"
>{{ detail.bookingUser.companyName || "" }}
{{ detail.bookingUser.realname }}
{{ detail.bookingUser.mobile }}</view
@@ -69,22 +75,72 @@
</view>
<view class="empty empty2"></view>
<view class="main_footer" v-if="detail.meetingStatus == '1'">
- <view class="btn" @click="handleCancel(detail.id)">鎾ゅ洖</view>
+ <view class="btn" @click="openCancel">鎾ゅ洖</view>
<view class="btn agree" @click="handleEdit">淇敼</view>
</view>
<view class="main_footer" v-if="detail.meetingStatus == '2'">
- <view class="btn agree" @click="handleSub('2')">缁撴潫</view>
+ <view class="btn agree" @click="openClose">缁撴潫</view>
</view>
+ <!-- 鎾ゅ洖 -->
+ <u-popup
+ catchtouchmove
+ :show="isShowCancel"
+ closeable
+ :round="12"
+ mode="bottom"
+ @close="isShowCancel = false"
+ >
+ <view class="cancel_modal">
+ <view class="title">鎾ら攢棰勭害</view>
+ <view class="line">
+ <view class="label">鎾ゅ洖璇存槑</view>
+ <textarea
+ class="textarea"
+ placeholder="璇疯緭鍏�"
+ maxlength="300"
+ v-model="cancelParam.businessRemark"
+ />
+ </view>
+ <view class="sub_btn" @click="handleCancel('0')">鎻愪氦</view>
+ </view>
+ </u-popup>
+ <!-- 缁撴潫 -->
+ <u-popup
+ catchtouchmove
+ closeable
+ :show="isShowClose"
+ :round="12"
+ mode="bottom"
+ @close="isShowClose = false"
+ >
+ <view class="cancel_modal">
+ <view class="title">缁撴潫棰勭害</view>
+ <view class="line">
+ <view class="label">缁撴潫璇存槑</view>
+ <textarea
+ class="textarea"
+ placeholder="璇疯緭鍏�"
+ maxlength="300"
+ v-model="cancelParam.businessRemark"
+ />
+ </view>
+ <view class="sub_btn" @click="handleCancel('1')">鎻愪氦</view>
+ </view>
+ </u-popup>
</view>
</template>
<script>
-import { meetingDetail, cancelById } from '@/api'
+import { meetingDetail, cancelById, closeMeetignById } from '@/api'
export default {
data() {
return {
param: {},
detail: {},
+
+ cancelParam: {},
+ isShowCancel: false,
+ isShowClose: false,
id: ''
}
},
@@ -99,30 +155,30 @@
this.detail = res.data
})
},
- handleCancel(id) {
- uni.showModal({
- title: '鎻愮ず',
- // confirmText: '纭',
- content: '纭鎾ゅ洖璇ヤ細璁悧',
- success: function (res) {
- if (res.confirm) {
- cancelById({ id }).then(res => {
- if (res.code === 200) {
- setTimeout(() => {
- uni.showToast({
- title: '鎾ゅ洖鎴愬姛',
- icon: 'success'
- })
- })
- setTimeout(() => {
- uni.navigateBack()
- })
- }
+ openCancel() {
+ this.isShowCancel = true
+ this.cancelParam = {}
+ },
+ openClose() {
+ this.isShowClose = true
+ this.cancelParam = {}
+ },
+ handleCancel(str) {
+ const { id } = this.detail
+ let fn = str == '0' ? cancelById : closeMeetignById
+ fn({ id, ...this.cancelParam }).then(res => {
+ if (res.code === 200) {
+ setTimeout(() => {
+ uni.showToast({
+ title: '鎻愪氦鎴愬姛',
+ icon: 'success'
})
- }
+ })
+ setTimeout(() => {
+ uni.navigateBack()
+ })
}
})
-
},
handleEdit() {
const { id } = this
@@ -189,10 +245,12 @@
flex-direction: column;
justify-content: center;
align-items: center;
+ justify-content: center;
margin-right: 24rpx;
.avatar {
width: 72rpx;
height: 72rpx;
+ margin: 0;
border-radius: 50%;
}
.name {
@@ -241,4 +299,31 @@
.empty2 {
height: 280rpx !important;
}
+.cancel_modal {
+ height: 440rpx;
+ padding: 30rpx;
+ .title {
+ padding: 0 30rpx 50rpx;
+ text-align: center;
+ }
+ .line {
+ .label {
+ margin-bottom: 10rpx;
+ }
+ textarea {
+ height: 120rpx;
+ }
+ }
+ .sub_btn {
+ background-color: $uni-color-primary;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: #fff;
+ border-radius: 44rpx;
+ width: 690rpx;
+ height: 88rpx;
+ margin: 20rpx auto;
+ }
+}
</style>
diff --git a/h5/pages/staff/meetingManager.vue b/h5/pages/staff/meetingManager.vue
index 8772ad0..b7c7bef 100644
--- a/h5/pages/staff/meetingManager.vue
+++ b/h5/pages/staff/meetingManager.vue
@@ -179,7 +179,6 @@
getRoomList() {
roomsListPost({}).then(res => {
this.meetingList = [[{ id: '', name: '鍏ㄩ儴浼氳瀹�' }, ...res.data]]
- console.log('meetingList', this.meetingList)
})
},
seletedStatus(e) {
@@ -355,9 +354,14 @@
font-weight: 600;
font-size: 32rpx;
color: #222222;
+ flex: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
}
.status {
height: 38rpx;
+ margin-left: 20rpx;
line-height: 38rpx;
padding: 0 16rpx;
border-radius: 4rpx;
diff --git a/h5/pages/staff/meetingSel.vue b/h5/pages/staff/meetingSel.vue
index 22ba2db..ba35cde 100644
--- a/h5/pages/staff/meetingSel.vue
+++ b/h5/pages/staff/meetingSel.vue
@@ -1,5 +1,5 @@
<template>
- <view class="main_app">
+ <view class="main_app" :class="{ popupShow: isShowSelMem }">
<view class="search_inp df_ac">
<image
class="mr12 search"
@@ -15,20 +15,18 @@
/>
</view>
<view class="member_list">
- <view v-for="item in memberList" :key="item.id" class="line">
+ <view v-for="(item, index) in memberList" :key="item.id" class="line">
<image
- :src="
- item.avatar
- ? item.prefixUrl + item.avatar
- : require('@/static/default_avatar.png')
- "
+ v-if="item.avatar"
+ :src="item.prefixUrl + item.avatar"
class="avatar"
mode=""
></image>
+ <view v-else class="avatar">{{ item.realname.slice(0, 1) }}</view>
<view class="content">
<view class="info">
<text class="name">{{ item.realname }}</text>
- <!-- <text class="tag">tag</text> -->
+ <text class="tag" v-if="item.status == '1'">鏈変細璁�</text>
</view>
<view class="depart">{{ item.departmentName }}</view>
</view>
@@ -55,7 +53,9 @@
<view class="sel_mem">
<text>宸查�夋嫨锛�</text>
<view class="members">
- <text v-for="(item, i) in selList" :key="i">{{ item.realname }}锛�</text>
+ <text v-for="(item, i) in selList" :key="i"
+ >{{ item.realname }}锛�</text
+ >
</view>
<image
@click="isShowSelMem = true"
@@ -64,38 +64,39 @@
mode=""
></image>
</view>
- <view class="btn" @click="onSubmit">纭({{ selList.length }}/20)</view>
+ <view class="btn" @click="onSubmit"
+ >纭({{ selList.length }}/{{ param.limitNum }})</view
+ >
</view>
<!-- -->
- <u-popup
+ <u-popup
+ catchtouchmove
:show="isShowSelMem"
:round="12"
mode="bottom"
- @close="isShowSelMem = false"
+ @close="closeModal"
>
<view class="modal">
<view class="modal_header">
<text class="status">宸查�夋嫨锛歿{ selList.length }}浜�</text>
- <text class="btn" @click="isShowSelMem = false">纭</text>
+ <text class="btn" @click="subSelMem">纭</text>
</view>
<view class="modal_mem_list">
<view class="line" v-for="(item, i) in selList" :key="i">
<image
- :src="
- item.faceImgFull
- ? item.faceImgFull
- : require('@/static/logo@2x.png')
- "
+ v-if="item.avatar"
+ :src="item.prefixUrl + item.avatar"
class="avatar"
mode=""
></image>
+ <view v-else class="avatar">{{ item.realname.slice(0, 1) }}</view>
<view class="content">
<view class="info">
<text class="name">{{ item.realname }}</text>
</view>
<view class="depart">{{ item.departmentName }}</view>
</view>
- <view class="btn" @click="handleRemove(item)">绉婚櫎</view>
+ <view class="btn" @click="handleRemove(i)">绉婚櫎</view>
</view>
</view>
</view>
@@ -105,12 +106,15 @@
<script>
import { userPagePost } from '@/api'
+import dayjs from 'dayjs'
export default {
data() {
return {
memberList: [],
selList: [],
- param: {},
+ param: {
+ limitNum: ''
+ },
pagination: {
page: 1,
capacity: 20
@@ -120,15 +124,42 @@
}
},
onLoad(option) {
- this.param = { ...option, keyword: '' }
+ this.param = {
+ limitNum: option.limitNum,
+ keyword: '',
+ startTime: dayjs(Number(option.startTime)).format('YYYY-MM-DD HH:mm:ss'),
+ endTime: dayjs(Number(option.endTime)).format('YYYY-MM-DD HH:mm:ss'),
+ }
this.initData()
+ },
+ mounted() {
+ this.$eventBus.$on('meetingPeoDetail', (res) => {
+ setTimeout(() => {
+ res.forEach(item => {
+ this.memberList.forEach(mem => {
+ if (item.id == mem.id) {
+ mem.checked = true
+ }
+ })
+ })
+ this.selList = this.memberList.filter(i => i.checked)
+ this.$nextTick(() => {
+ this.$forceUpdate()
+ })
+ }, 1000)
+ })
},
methods: {
onSubmit() {
- this.$eventBus.$emit('meetingPeo', this.selList)
+ this.$eventBus.$emit('meetingPeo', this.selList)
uni.navigateBack()
},
- changeMem(item, index) {
+ changeMem(item, index) {
+ const { selList, param } = this
+ if (this.selList.length == param.limitNum && !item.checked) return uni.showToast({
+ title: `璇ヤ細璁彲瀹圭撼${param.limitNum}浜篳,
+ icon: 'none'
+ })
item.checked = !item.checked
this.selList = this.memberList.filter(i => i.checked)
// const arr = e.detail.value
@@ -154,17 +185,31 @@
}).then(res => {
this.memberList = res.data.records || []
- this.memberList.map(i => {
- i.checked = false
- })
+ this.memberList.map(i => {
+ i.checked = false
+ })
})
},
- handleRemove(item) {
- this.memberList.forEach(ite => {
- if (item.id === ite.id) {
- ite.checked = false
- }
+ closeModal() {
+ this.selList = this.memberList.filter(i => i.checked)
+ this.isShowSelMem = false
+ },
+ subSelMem() {
+ const { selList, memberList } = this
+ memberList.forEach(ite => {
+ ite.checked = false
+ selList.forEach(item => {
+ if (ite.id === item.id) {
+ ite.checked = true
+ } else { }
+ })
})
+ this.isShowSelMem = false
+ this.$forceUpdate()
+ },
+ handleRemove(i) {
+ this.selList.splice(i, 1)
+
// console.log(this.memberList);
this.$forceUpdate()
},
@@ -175,10 +220,12 @@
<style lang="scss">
.modal {
padding: 40rpx 30rpx;
+ max-height: 1000rpx;
.modal_header {
display: flex;
justify-content: space-between;
align-items: center;
+ padding-bottom: 20rpx;
.status {
font-weight: 600;
}
@@ -187,6 +234,8 @@
}
}
.modal_mem_list {
+ max-height: 860rpx;
+ overflow: auto;
.line {
display: flex;
align-items: center;
@@ -198,6 +247,11 @@
border-radius: 50%;
overflow: hidden;
margin-right: 20rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: $uni-color-primary;
+ color: #fff;
}
.content {
flex: 1;
@@ -229,7 +283,7 @@
.sub_wrap {
position: fixed;
bottom: 0;
- background-color: #fff;
+ background-color: #fff;
left: 0;
width: 100%;
box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;
@@ -293,10 +347,12 @@
color: #f62710;
padding: 0rpx 6rpx;
margin-left: 8rpx;
+ display: flex;
+ align-items: center;
}
}
}
- .checked{
+ .checked {
width: 48rpx;
}
}
diff --git a/h5/pages/staff/meetingSub.vue b/h5/pages/staff/meetingSub.vue
index 34a81db..f4f8d62 100644
--- a/h5/pages/staff/meetingSub.vue
+++ b/h5/pages/staff/meetingSub.vue
@@ -57,7 +57,7 @@
<view class="">{{ item.name }}</view>
</view>
</view>
- <view class="sub" @click="onSubmit">纭棰勭害</view>
+ <view class="sub" :class="{disable: !selDatetime}" @click="onSubmit">纭棰勭害</view>
</view>
</view>
<!-- -->
@@ -134,7 +134,8 @@
this.getRoomTime()
},
onSubmit() {
- const { activeRoom } = this
+ const { activeRoom, selDatetime } = this
+ if(!selDatetime) return
const selTimeList = this.timeList.filter(i => i.checked == '1')
if (selTimeList.length == -1) {
return uni.showToast({
@@ -146,11 +147,16 @@
startTime: selTimeList[0].startTime,
endTime: selTimeList[selTimeList.length - 1].endTime,
bookingTimeList: selTimeList.map(i => i.id).join(','),
+ yudingDate: activeRoom.yudingDate,
+ roomName: activeRoom.roomName,
+ limitNum: activeRoom.limitNum,
+ roomId: activeRoom.roomId,
}
+ setTimeout(() => {
+ this.$eventBus.$emit('meetingSub', obj)
+ }, 500)
uni.navigateTo({
- url: `/pages/staff/meetingSubOrder?yudingDate=${activeRoom.yudingDate}&roomName=${activeRoom.roomName}
- &roomId=${activeRoom.roomId}&startTime=${obj.startTime}&endTime=${obj.endTime}
- &bookingTimeList=${obj.bookingTimeList}&limitNum=${activeRoom.limitNum}`
+ url: `/pages/staff/meetingSubOrder`
})
// this.$jump('/pages/staff/vehicle/apply')
},
@@ -327,12 +333,14 @@
font-size: 30rpx;
color: #ffffff;
}
+ .disable {
+ background-color: #cccccc;
+ }
}
}
.time_list {
display: flex;
- justify-content: space-between;
- padding: 30rpx;
+ padding: 30rpx 30rpx 240rpx;
flex-wrap: wrap;
.item {
width: 220rpx;
@@ -343,18 +351,22 @@
border-radius: 4rpx;
margin-bottom: 24rpx;
font-size: 30rpx;
+ margin-right: 15rpx;
+ &:nth-of-type(3n){
+ margin-right: 0;
+ }
}
.active {
background-color: $uni-color-primary;
color: #fff;
}
.disable {
- background-color: #cccccc;
- color: #999999;
+ background: #F7F7F7;
+ color: #CCCCCC;
}
.hasSub{
color: #fff;
- background-color: #2d5c65;
+ background: #CCCCCC;
}
}
.meeting_list {
diff --git a/h5/pages/staff/meetingSubOrder.vue b/h5/pages/staff/meetingSubOrder.vue
index e306e60..1d82d33 100644
--- a/h5/pages/staff/meetingSubOrder.vue
+++ b/h5/pages/staff/meetingSubOrder.vue
@@ -60,7 +60,7 @@
<view class="item">
<view class="name">
鍙備細浜哄憳
- <text class="star">*</text>
+ <text class="star"></text>
</view>
<view class="line" @click="selPeople">
<view class="label">
@@ -140,16 +140,6 @@
title: '浼氳璇︽儏'
})
this.getDetail(option.id)
- } else {
- this.param = { ...option }
- const bookingTimeList = option.bookingTimeList.split(',').map(i => {
- return {
- timeId: Number(i)
- }
- })
- this.$set(this.param, 'bookingTimeList', bookingTimeList)
- this.$set(this.param, 'activeDate', dayjs(option.yudingDate).format('YYYY骞碝鏈圖鏃�'))
- this.initOption()
}
},
mounted() {
@@ -160,6 +150,17 @@
}))
// this.$set(this.param, 'memberIds', res.map(i => i.id).join(','))
// this.$set(this.param, 'memberNames', res.map(i => i.name).join(','))
+ })
+ this.$eventBus.$on('meetingSub', (res) => {
+ this.param = { ...res }
+ this.$set(this.param, 'activeDate', dayjs(res.yudingDate).format('YYYY骞碝鏈圖鏃�'))
+ const bookingTimeList = res.bookingTimeList.split(',').map(i => {
+ return {
+ timeId: Number(i)
+ }
+ })
+ this.$set(this.param, 'bookingTimeList', bookingTimeList)
+ this.initOption()
})
},
methods: {
@@ -214,6 +215,7 @@
})
},
handleBack() {
+ if(this.param.id) return
uni.navigateBack( )
},
onSubmit() {
@@ -222,10 +224,10 @@
title: '璇疯緭鍏ヤ細璁富棰�',
icon: 'none'
})
- if (!param.sysList || param.sysList.length == 0) return uni.showToast({
- title: '璇烽�夋嫨鍙備細浜哄憳',
- icon: 'none'
- })
+ // if (!param.sysList || param.sysList.length == 0) return uni.showToast({
+ // title: '璇烽�夋嫨鍙備細浜哄憳',
+ // icon: 'none'
+ // })
reservationMeeting({
...param,
startTime: `${param.yudingDate} ${param.startTime}:00`,
@@ -248,10 +250,15 @@
},
selPeople() {
const { param } = this
- let startTime = param.yudingDate + ' ' + param.startTime
- let endTime = param.yudingDate + ' ' + param.endTime
+ let startTime = new Date(param.yudingDate + ' ' + param.startTime).getTime()
+ let endTime = new Date(param.yudingDate + ' ' + param.endTime).getTime()
+ if(this.param.sysList && this.param.sysList.length > 0){
+ setTimeout(() => {
+ this.$eventBus.$emit('meetingPeoDetail', this.param.sysList || [])
+ }, 500)
+ }
uni.navigateTo({
- url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}`
+ url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}&limitNum=${this.param.limitNum}`
})
},
serviceClick(item) {
diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue
index 8ddde02..b0677bc 100644
--- a/h5/pages/staff/snapshot.vue
+++ b/h5/pages/staff/snapshot.vue
@@ -224,7 +224,7 @@
icon: 'none'
})
if (!param.applyCheckUserId) return uni.showToast({
- title: '璇烽�夋嫨鎺ュ彈浜�',
+ title: '璇烽�夋嫨鎺ユ敹浜�',
icon: 'none'
})
if (!param.categoryName) return uni.showToast({
@@ -258,7 +258,7 @@
this.$set(this.param, 'checkUserId', item.memberIds)
this.$set(this.param, 'applyCheckUserId', item.memberIds)
this.$set(this.param, 'checkorName', item.memberNames)
- }else{
+ } else {
this.$set(this.param, 'checkUserId', '')
this.$set(this.param, 'applyCheckUserId', '')
this.$set(this.param, 'checkorName', '')
diff --git a/h5/pages/staff/task/index.vue b/h5/pages/staff/task/index.vue
index f3545ba..b0b64bb 100644
--- a/h5/pages/staff/task/index.vue
+++ b/h5/pages/staff/task/index.vue
@@ -1,5 +1,5 @@
<template>
- <view class="box">
+ <view class="box" :class="{ popupShow: showFilter }">
<scroll-view scroll-x class="box_head">
<view class="box_head_search">
<view class="box_head_search_ipt">
@@ -21,7 +21,7 @@
@click="statusClick(0)"
:class="{ active: search.queryType === 0 }"
class="box_head_item"
- >寰呭鐞� {{ headData.noticeWaitNum || '' }}</view
+ >寰呭鐞� {{ headData.noticeWaitNum || "" }}</view
>
<view
@click="statusClick(1)"
@@ -39,7 +39,7 @@
@click="statusClick(3)"
:class="{ active: search.queryType === 3 }"
class="box_head_item"
- >鎶勯�佹垜鐨� {{ headData.noticeCopyNum || '' }}</view
+ >鎶勯�佹垜鐨� {{ headData.noticeCopyNum || "" }}</view
>
</view>
</scroll-view>
@@ -60,7 +60,7 @@
/>
<text>浠呯湅鏈</text>
</view>
- <view class="right">鍏ㄩ儴鏍囪宸茶</view>
+ <view class="right" @click="handleReady">鍏ㄩ儴鏍囪宸茶</view>
</view>
<view
class="box_list_item"
@@ -115,11 +115,7 @@
<view class="box_list_item_nr_x"></view>
<view class="box_list_item_nr_text">
<text class="time">{{ item.createDate }}鎻愪氦</text>
- <text
- v-if="item.param2 == '0'"
- class="btn"
- >鍘诲鐞�</text
- >
+ <text v-if="item.param2 == '0'" class="btn">鍘诲鐞�</text>
</view>
</view>
</view>
@@ -141,17 +137,17 @@
@close="showFilter = false"
>
<view class="search">
- <view class="search_head">浠诲姟绛涢��</view>
+ <view class="search_head">绛涢��</view>
<view class="search_list">
<view class="search_list_item">
- <view class="search_list_item_label">鍒涘缓鏃ユ湡</view>
+ <view class="search_list_item_label">鍒涘缓鏃堕棿</view>
<view class="search_list_item_val">
<view
class="search_list_item_val_row"
@click="tiemShow = true"
:style="{ color: modelParam.startDate ? '#000' : '' }"
>{{
- modelParam.startDate ? modelParam.startDate : "寮�濮嬫棩鏈�"
+ modelParam.startDate ? modelParam.startDate : "寮�濮嬫椂闂�"
}}</view
>
<view class="search_list_item_val_z">-</view>
@@ -160,13 +156,13 @@
@click="tiemShow1 = true"
:style="{ color: modelParam.endDate ? '#000' : '' }"
>{{
- modelParam.endDate ? modelParam.endDate : "缁撴潫鏃ユ湡"
+ modelParam.endDate ? modelParam.endDate : "缁撴潫鏃堕棿"
}}</view
>
</view>
</view>
<view class="search_list_item">
- <view class="search_list_item_label">璁㈠崟鏉ユ簮</view>
+ <view class="search_list_item_label">浠诲姟绫诲瀷</view>
<view class="search_list_item_cates">
<view
:class="
@@ -184,23 +180,24 @@
</view>
</view>
<view class="search_footer">
- <view class="search_footer_item" @click="showFilter = false"
- >鍙栨秷</view
- >
+ <view class="search_footer_item" @click="modalReset">閲嶇疆</view>
<view class="search_footer_item t" @click="modalSub">鎻愪氦</view>
</view>
</view>
</u-popup>
<u-datetime-picker
:show="tiemShow"
- v-model="modelParam.startDate"
+ v-model="startDate"
mode="date"
@confirm="confirmLeft"
@cancel="tiemShow = false"
></u-datetime-picker>
<u-datetime-picker
:show="tiemShow1"
- v-model="modelParam.endDate"
+ :minDate="
+ modelParam.startDate ? new Date(modelParam.startDate).getTime() : null
+ "
+ v-model="startDate"
mode="date"
@confirm="confirmRight"
@cancel="tiemShow1 = false"
@@ -209,7 +206,7 @@
</template>
<script>
-import { stagingHead, stagingTaskPage } from '@/api'
+import { stagingHead, stagingTaskPage, signReadTask } from '@/api'
import dayjs from 'dayjs'
export default {
data() {
@@ -218,10 +215,7 @@
search: {
queryType: 0
},
- modelParam: {
- startDate: dayjs().format('YYYY-MM-DD'),
- endDate: dayjs().format('YYYY-MM-DD'),
- },
+ modelParam: {},
tiemShow: false,
tiemShow1: false,
@@ -237,7 +231,8 @@
{ name: '鐢ㄨ溅鐢宠', id: 2 },
{ name: '闅愭偅闅忔墜鎷�', id: 3 },
{ name: '鐗╂祦杞︾敵璇�', id: 4 },
- ]
+ ],
+ startDate: dayjs().format('YYYY-MM-DD'),
}
},
// onLoad() {
@@ -249,6 +244,12 @@
// this.pagination.page = 0
// this.dataList = []
this.getList()
+ },
+ onBackPress(options) {
+ setTimeout(()=>{
+ this.$eventBus.$emit('taskBack')
+ })
+ return false
},
onShow() {
this.pagination.page = 0
@@ -267,6 +268,13 @@
this.pagination.page = 0
this.dataList = []
this.$set(this.search, 'noRead', val)
+ this.getList()
+ },
+ modalReset() {
+ this.modelParam = {}
+ this.pagination.page = 0
+ this.dataList = []
+ this.showFilter = false
this.getList()
},
modalSub() {
@@ -296,7 +304,6 @@
i.param1 = JSON.parse(i.param1)
}
})
- console.log('dataList', this.dataList)
})
},
getHeadList() {
@@ -306,8 +313,23 @@
this.headData = res.data
})
},
+ handleReady() {
+ signReadTask({
+ signType: 1
+ }).then(res => {
+ this.getHeadList()
+ })
+ },
handleAppr(item) {
const { objType, objId } = item
+ if (this.search.queryType === 3) {
+ signReadTask({
+ noticesId: item.id,
+ signType: 0
+ }).then(res => {
+ this.getHeadList()
+ })
+ }
if (objType === 2) {
uni.navigateTo({
url: `/pages/staff/vehicle/sendACarDetail?id=${objId}&appr=1`
@@ -327,19 +349,21 @@
}
},
clickItem(index) {
- this.$set(this.modelParam, 'type', this.cateList[index].id)
+ if (this.cateList[index].id === this.modelParam.type) {
+ this.$set(this.modelParam, 'type', null)
+ } else {
+ this.$set(this.modelParam, 'type', this.cateList[index].id)
+ }
},
confirmLeft(e) {
- console.log(uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
setTimeout(() => {
- this.modelParam.startDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
+ this.$set(this.modelParam, 'startDate', uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
})
this.tiemShow = false
},
confirmRight(e) {
- // this.modelParam.endDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
setTimeout(() => {
- this.modelParam.endDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
+ this.$set(this.modelParam, 'endDate', uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
})
this.tiemShow1 = false
}
@@ -588,8 +612,9 @@
color: #ffffff !important;
}
.search_list_item_cates_row {
- padding: 0 26rpx;
+ width: 216rpx;
height: 64rpx;
+ text-align: center;
line-height: 64rpx;
background: #f7f7f7;
border-radius: 36rpx;
@@ -598,8 +623,8 @@
font-weight: 400;
color: #333333;
margin-bottom: 20rpx;
- &:last-child {
- margin: 0;
+ &:nth-of-type(3n) {
+ margin-right: 0;
}
}
}
diff --git a/h5/pages/staff/task/vDangetAppr.vue b/h5/pages/staff/task/vDangetAppr.vue
index f9df6eb..6eb1460 100644
--- a/h5/pages/staff/task/vDangetAppr.vue
+++ b/h5/pages/staff/task/vDangetAppr.vue
@@ -33,13 +33,14 @@
<image
v-if="item.type == 0"
:src="item.fileurlFull"
+ @click="priviewImage(item.fileurlFull)"
mode="widthFix"
class="img"
/>
<video
v-if="item.type == 1"
:src="item.fileurlFull"
- class="img"
+ class="video"
controls
/>
</view>
@@ -177,7 +178,15 @@
</view>
</view>
<view class="emyty"></view>
- <view v-if="info.approveDateVO!=null&& info.approveDateVO.canBeApproved!=null &&info.approveDateVO.canBeApproved ==1 && info.status == 0" class="main_footer" >
+ <view
+ v-if="
+ info.approveDateVO != null &&
+ info.approveDateVO.canBeApproved != null &&
+ info.approveDateVO.canBeApproved == 1 &&
+ info.status == 0
+ "
+ class="main_footer"
+ >
<view class="btn" @click="handleBack">閫�鍥�</view>
<view class="btn transfer" @click="handleTransfer">杞氦</view>
<view class="btn handle" @click="handleOpen">澶勭悊</view>
@@ -516,6 +525,11 @@
this.getDetail()
},
methods: {
+ priviewImage(url) {
+ uni.previewImage({
+ urls: [url]
+ })
+ },
handleOpen() {
this.isShowHandle = true
console.log('info', this.info)
@@ -593,10 +607,10 @@
},
getMemList() {
findHiddenAreaMemberList({
- model: {
+ model: {
...this.transferModel,
id: this.info.areaId
- },
+ },
...this.pagination,
}).then(res => {
this.memberList = res.data || []
@@ -1024,33 +1038,33 @@
}
}
.adduser_list_item_ipt1_upload {
- width: 120rpx;
- height: 120rpx;
- margin-right: 24rpx;
- border: 2rpx solid #e5e5e5;
- background: #f7f7f7;
- color: #666666;
- font-size: 22rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- position: relative;
- .close {
- position: absolute;
- right: -20rpx;
- top: -20rpx;
- z-index: 9999;
- }
- image {
- width: 100%;
- height: 100%;
- }
- video {
- width: 100%;
- max-height: 120rpx;
- }
+ width: 120rpx;
+ height: 120rpx;
+ margin-right: 24rpx;
+ border: 2rpx solid #e5e5e5;
+ background: #f7f7f7;
+ color: #666666;
+ font-size: 22rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ .close {
+ position: absolute;
+ right: -20rpx;
+ top: -20rpx;
+ z-index: 9999;
}
+ image {
+ width: 100%;
+ height: 100%;
+ }
+ video {
+ width: 100%;
+ max-height: 120rpx;
+ }
+ }
.module_list {
.item {
@@ -1113,13 +1127,12 @@
}
.file_list {
display: flex;
- flex-wrap: wrap;
margin-bottom: 20rpx;
+ overflow-x: auto;
.img_wrap {
margin-top: 24rpx;
- width: 120rpx;
- height: 120rpx;
- margin-right: 24rpx;
+ min-width: 160rpx;
+ height: 160rpx;
border: 2rpx solid #e5e5e5;
background: #f7f7f7;
color: #666666;
@@ -1129,10 +1142,15 @@
align-items: center;
justify-content: center;
position: relative;
+ margin-right: 16rpx;
+ flex-shrink: 0;
}
.img {
- width: 120rpx;
- max-height: 120rpx;
+ width: 100%;
+ max-height: 100%;
+ }
+ .video {
+ height: 160rpx;
}
}
.text_wrap {
diff --git a/h5/pages/staff/vehicle/applePeo.vue b/h5/pages/staff/vehicle/applePeo.vue
index a39eada..ec74350 100644
--- a/h5/pages/staff/vehicle/applePeo.vue
+++ b/h5/pages/staff/vehicle/applePeo.vue
@@ -1,5 +1,5 @@
<template>
- <view class="main_app">
+ <view class="main_app" :class="{ popupShow: isShowSelMem }">
<view class="search_inp df_ac">
<image
class="mr12 search"
@@ -17,14 +17,12 @@
<view class="member_list">
<view v-for="(item, index) in memberList" :key="item.id" class="line">
<image
- :src="
- item.faceImgFull
- ? item.faceImgFull
- : require('@/static/logo@2x.png')
- "
+ v-if="item.faceImgFull"
+ :src="item.faceImgFull"
class="avatar"
mode=""
></image>
+ <view v-else class="avatar">{{ item.name.slice(0, 1) }}</view>
<view class="content">
<view class="info">
<text class="name">{{ item.name }}</text>
@@ -65,19 +63,19 @@
mode=""
></image>
</view>
- <view class="btn" @click="onSubmit">纭({{ selList.length }}/20)</view>
+ <view class="btn" @click="onSubmit">纭</view>
</view>
<!-- -->
<u-popup
:show="isShowSelMem"
:round="12"
mode="bottom"
- @close="isShowSelMem = false"
+ @close="closeModal"
>
<view class="modal">
<view class="modal_header">
<text class="status">宸查�夋嫨锛歿{ selList.length }}浜�</text>
- <text class="btn" @click="isShowSelMem = false">纭</text>
+ <text class="btn" @click="subSelMem">纭</text>
</view>
<view class="modal_mem_list">
<view class="line" v-for="(item, i) in selList" :key="i">
@@ -96,7 +94,7 @@
</view>
<view class="depart">{{ item.componey }}</view>
</view>
- <view class="btn" @click="handleRemove(item)">绉婚櫎</view>
+ <view class="btn" @click="handleRemove(i)">绉婚櫎</view>
</view>
</view>
</view>
@@ -143,13 +141,13 @@
},
methods: {
initData() {
- const { param, pagination } = this
+ const { param } = this
findTypeMemberInfo({
// model: {
name: param.name,
// },
type: '2',
- ...pagination
+ companyType: 1,
}).then(res => {
this.memberList = res.data || []
this.memberList.forEach(i => {
@@ -165,6 +163,23 @@
this.$eventBus.$emit('applePeo', this.selList)
uni.navigateBack()
},
+ closeModal() {
+ this.selList = this.memberList.filter(i => i.checked)
+ this.isShowSelMem = false
+ },
+ subSelMem() {
+ const { selList, memberList } = this
+ memberList.forEach(ite => {
+ ite.checked = false
+ selList.forEach(item => {
+ if (ite.id === item.id) {
+ ite.checked = true
+ } else { }
+ })
+ })
+ this.isShowSelMem = false
+ this.$forceUpdate()
+ },
changeMem(item, index) {
// this.memberList.forEach(mem => {
// if(item.id === mem.id){
@@ -175,13 +190,8 @@
this.selList = this.memberList.filter(i => i.checked)
this.$forceUpdate()
},
- handleRemove(item) {
- this.memberList.forEach(ite => {
- if (item.id === ite.id) {
- ite.checked = false
- }
- })
- // console.log(this.memberList);
+ handleRemove(i) {
+ this.selList.splice(i, 1)
this.$forceUpdate()
},
}
@@ -191,10 +201,12 @@
<style lang="scss">
.modal {
padding: 40rpx 30rpx;
+ max-height: 1000rpx;
.modal_header {
display: flex;
justify-content: space-between;
align-items: center;
+ padding-bottom: 20rpx;
.status {
font-weight: 600;
}
@@ -203,6 +215,8 @@
}
}
.modal_mem_list {
+ max-height: 860rpx;
+ overflow: auto;
.line {
display: flex;
align-items: center;
diff --git a/h5/pages/staff/vehicle/apply.vue b/h5/pages/staff/vehicle/apply.vue
index c2e224f..87d9c52 100644
--- a/h5/pages/staff/vehicle/apply.vue
+++ b/h5/pages/staff/vehicle/apply.vue
@@ -91,13 +91,15 @@
}"
>
<text v-if="param.memberNames">
- <text v-for="mem,i in param.memberList" :key="mem.id">
- <template v-if="i < 2">
- <text>{{ mem.name }}</text>
- <text v-if="i < 1 && param.memberList.length > 1">,</text>
- </template>
- </text>
- <text v-if="param.memberList.length > 2">绛墈{ param.memberList.length }}浜�</text>
+ <text v-for="(mem, i) in param.memberList" :key="mem.id">
+ <template v-if="i < 2">
+ <text>{{ mem.name }}</text>
+ <text v-if="i < 1 && param.memberList.length > 1">,</text>
+ </template>
+ </text>
+ <text v-if="param.memberList.length > 2"
+ >绛墈{ param.memberList.length }}浜�</text
+ >
</text>
<text v-else>璇烽�夋嫨</text>
</text>
@@ -135,11 +137,13 @@
</view>
<view class="sub_btn" @click="handleSub">鎻愪氦</view>
<!-- -->
+ <!-- :minDate="new Date(param.startTime).getTime()"
+ :maxDate="new Date(param.endTime).getTime()" -->
<u-datetime-picker
:show="isShowDatetime"
+ @confirm="confirmDate"
:minDate="new Date(param.startTime).getTime()"
:maxDate="new Date(param.endTime).getTime()"
- @confirm="confirmDate"
@cancel="isShowDatetime = false"
mode="datetime"
></u-datetime-picker>
@@ -207,7 +211,7 @@
})
},
selPeople() {
- if(this.param.memberList && this.param.memberList.length > 0){
+ if (this.param.memberList && this.param.memberList.length > 0) {
setTimeout(() => {
this.$eventBus.$emit('applePeoDetail', this.param.memberList || [])
}, 500)
diff --git a/h5/pages/staff/vehicle/index.vue b/h5/pages/staff/vehicle/index.vue
index f38ca36..60124ef 100644
--- a/h5/pages/staff/vehicle/index.vue
+++ b/h5/pages/staff/vehicle/index.vue
@@ -1,7 +1,7 @@
<template>
<view class="main_app">
<image
- src="../../../static/staff/yongche_bg.png"
+ src="@/static/staff/yongche_bg.png"
class="banner"
mode="widthFix"
></image>
@@ -10,20 +10,34 @@
<view class="title">閫夋嫨鐩殑鍦扮被鍒�</view>
<view class="item" @click="$jump('/pages/staff/vehicle/shinei')">
<image
- src="../../../static/bg_shineiyongche@2x.png"
+ src="@/static/bg_shineiyongche@2x.png"
class="img"
mode="widthFix"
></image>
- <view class="h1">甯傚唴鐢ㄨ溅</view>
+ <view class="h1">
+ <text>甯傚唴鐢ㄨ溅</text>
+ <image
+ src="@/static/ic_enter_shinei@2x.png"
+ class="icon"
+ mode="widthFix"
+ ></image>
+ </view>
<view class="h2">URBAN AREA</view>
</view>
<view class="item" @click="$jump('/pages/staff/vehicle/shiwai')">
<image
- src="../../../static/bg_shiwaiyongche@2x.png"
+ src="@/static/bg_shiwaiyongche@2x.png"
class="img"
mode="widthFix"
></image>
- <view class="h1">甯傚鐢ㄨ溅</view>
+ <view class="h1">
+ <text>甯傚鐢ㄨ溅</text>
+ <image
+ src="@/static/ic_enter_shiwai@2x.png"
+ class="icon"
+ mode="widthFix"
+ ></image>
+ </view>
<view class="h2">SUBURB AREA</view>
</view>
</view>
@@ -70,6 +84,12 @@
color: #222222;
line-height: 48rpx;
margin-bottom: 10rpx;
+ display: flex;
+ align-items: center;
+ .icon{
+ width: 32rpx;
+ margin-left: 10rpx;
+ }
}
.h2 {
font-size: 22rpx;
@@ -91,7 +111,7 @@
font-size: 34rpx;
color: #222222;
line-height: 48rpx;
- text-align: center;
+ text-align: center;
}
}
.banner {
diff --git a/h5/pages/staff/vehicle/sendACarDetail.vue b/h5/pages/staff/vehicle/sendACarDetail.vue
index 60ae8bb..01c8c2e 100644
--- a/h5/pages/staff/vehicle/sendACarDetail.vue
+++ b/h5/pages/staff/vehicle/sendACarDetail.vue
@@ -118,7 +118,14 @@
</view>
</view>
<view class="emyty"></view>
- <view class="main_footer">
+ <view
+ class="main_footer"
+ v-if="
+ info.approveDateVO != null &&
+ info.approveDateVO.canBeApproved != null &&
+ info.approveDateVO.canBeApproved == 1
+ "
+ >
<template v-if="appr == '1'">
<view class="btn" @click="handleSub(3)">鎷掔粷</view>
<view class="btn agree" @click="handleSub(2)">鍚屾剰</view>
diff --git a/h5/pages/staff/vehicle/shinei.vue b/h5/pages/staff/vehicle/shinei.vue
index 9acf2f2..5413edf 100644
--- a/h5/pages/staff/vehicle/shinei.vue
+++ b/h5/pages/staff/vehicle/shinei.vue
@@ -16,7 +16,11 @@
<view class="time_list">
<view
class="item"
- :class="{ disable: item.isUse == 1, active: item.checked == '1' }"
+ :class="{
+ disable: item.isUse == 1,
+ active: item.checked == '1',
+ hasSub: item.carUseBookId,
+ }"
@click="datetimeClick(item, i)"
v-for="(item, i) in timeList"
:key="i"
@@ -56,18 +60,63 @@
@cancel="isShowDate = false"
mode="date"
></u-datetime-picker>
+ <!-- 璇︽儏 -->
+ <u-popup
+ :show="isShowDetail"
+ :round="12"
+ mode="bottom"
+ @close="isShowDetail = false"
+ >
+ <view class="detail_modal">
+ <view class="title">杞﹁締棰勭害鎯呭喌</view>
+ <view class="h1">{{ activeInfo.carCode }}</view>
+ <view class="line">
+ <view class="label">棰勮鐢ㄨ溅鏃舵</view>
+ <view class="value" v-if="activeInfo.startTime"
+ >{{ activeInfo.startTime.slice(5, 16) }} -
+ {{ activeInfo.endTime.slice(5, 16) }}</view
+ >
+ </view>
+ <view class="line">
+ <view class="label">鐩殑鍦�</view>
+ <view class="value">{{ activeInfo.addr }}</view>
+ </view>
+ <view class="line">
+ <view class="label">涔樿溅浜烘暟</view>
+ <view class="value" v-if="activeInfo.memberIds"
+ >{{ activeInfo.memberIds.split(",").length }}浜�</view
+ >
+ </view>
+ <view class="line">
+ <view class="label">鐢ㄨ溅浜嬬敱</view>
+ <view class="value">{{ activeInfo.content || "" }}</view>
+ </view>
+ <view class="line">
+ <view class="label">鐢宠浜�</view>
+ <view class="value"
+ >{{ activeInfo.memberName }}
+ <text class="primaryColor ml12">{{
+ activeInfo.memberPhone
+ }}</text></view
+ >
+ </view>
+ <view class="btn" @click="isShowDetail = false">鍏抽棴</view>
+ </view>
+ </u-popup>
</view>
</template>
<script>
import dayjs from 'dayjs'
-import { getCarsList, carCanReservationDate } from '@/api'
+import { getCarsList, carCanReservationDate, carUseBookDetail } from '@/api'
export default {
data() {
return {
isShowCar: false,
isShowDate: false,
param: {},
+ isShowDetail: false,
+ activeInfo: {},
minDate: '',
carsList: [[{ name: 'aa', value: '11' }]],
@@ -87,7 +136,7 @@
},
methods: {
onSubmit() {
- const { param } = this
+ const { param } = this
const selTimeList = this.timeList.filter(i => i.checked == '1')
if (selTimeList.length == 0) {
return uni.showToast({
@@ -95,21 +144,25 @@
icon: 'none'
})
}
- const obj = {
- carCode: param.carCode,
- carId: param.carId ,
- startTime: selTimeList[0].startTime,
- endTime: selTimeList[selTimeList.length - 1].endTime,
- dateDay: param.queryDate,
+ const obj = {
+ carCode: param.carCode,
+ carId: param.carId,
+ startTime: selTimeList[0].startTime,
+ endTime: selTimeList[selTimeList.length - 1].endTime,
+ dateDay: param.queryDate,
type: '0'
- }
- uni.navigateTo({
- url: `/pages/staff/vehicle/apply?carCode=${obj.carCode}&carId=${obj.carId}&startTime=${obj.startTime}&endTime=${obj.endTime}&dateDay=${obj.dateDay}&type=${obj.type}`
- })
+ }
+ uni.navigateTo({
+ url: `/pages/staff/vehicle/apply?carCode=${obj.carCode}&carId=${obj.carId}&startTime=${obj.startTime}&endTime=${obj.endTime}&dateDay=${obj.dateDay}&type=${obj.type}`
+ })
// this.$jump('/pages/staff/vehicle/apply')
},
datetimeClick(item, index) {
- if(item.isUse == '1') return
+ if (item.carUseBookId) {
+ this.getDetail(item.carUseBookId)
+ return
+ }
+ if (item.isUse == '1') return
const { timeList } = this
const selTimeList = timeList.filter(i => i.checked == '1')
if (selTimeList.length === 0) {
@@ -156,16 +209,24 @@
this.selDatetime = this.param.queryDate.slice(5) + ' ' + selTimeLists[0].startHours + '-' + selTimeLists[selTimeLists.length - 1].endHours
}
},
+ getDetail(id) {
+ carUseBookDetail(
+ id
+ ).then(res => {
+ this.activeInfo = res.data
+ this.isShowDetail = true
+ })
+ },
confirmDate(e) {
this.param.queryDate = dayjs(e.value).format('YYYY-MM-DD')
this.isShowDate = false
- if(this.param.carId && this.param.queryDate){
- this.gettimes()
- }
+ if (this.param.carId && this.param.queryDate) {
+ this.gettimes()
+ }
},
initData() {
getCarsList({
- type: 1
+ type: 1
}).then(res => {
this.carsList = [res.data]
})
@@ -181,6 +242,13 @@
this.timeList.forEach((i, j) => {
i.checked = '0',
i.index = j
+ if (dayjs().format('YYYY-MM-DD') == param.queryDate) {
+ let endTime = new Date(i.endTime).getTime()
+ let nowTime = new Date().getTime()
+ if (endTime < nowTime) {
+ i.isUse = 1
+ }
+ }
})
}
})
@@ -189,9 +257,9 @@
const item = e.value[0]
this.$set(this.param, 'carCode', item.code)
this.$set(this.param, 'carId', item.id)
- if(this.param.carId && this.param.queryDate){
- this.gettimes()
- }
+ if (this.param.carId && this.param.queryDate) {
+ this.gettimes()
+ }
this.isShowCar = false
}
}
@@ -260,8 +328,7 @@
}
.time_list {
display: flex;
- justify-content: space-between;
- padding: 30rpx 0;
+ padding: 30rpx 0 240rpx;
flex-wrap: wrap;
.item {
width: 220rpx;
@@ -272,15 +339,60 @@
border-radius: 4rpx;
margin-bottom: 24rpx;
font-size: 30rpx;
+ margin-right: 15rpx;
+ &:nth-of-type(3n) {
+ margin-right: 0;
+ }
}
.active {
background-color: $uni-color-primary;
color: #fff;
}
.disable {
- background-color: #cccccc;
- color: #999999;
+ background: #f7f7f7;
+ color: #cccccc;
}
+ .hasSub {
+ color: #fff;
+ background: #cccccc;
+ }
+ }
+}
+.detail_modal {
+ padding: 40rpx 30rpx;
+ .title {
+ text-align: center;
+ font-weight: 600;
+ font-size: 32rpx;
+ margin-bottom: 40rpx;
+ }
+ .h1 {
+ font-weight: 600;
+ font-size: 32rpx;
+ margin-bottom: 30rpx;
+ }
+ .line {
+ display: flex;
+ margin-bottom: 20rpx;
+ .label {
+ width: 180rpx;
+ color: #888888;
+ }
+ .value {
+ color: #333333;
+ }
+ }
+ .btn {
+ margin-top: 230rpx;
+ width: 690rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ text-align: center;
+ background: $uni-color-primary;
+ border-radius: 44rpx;
+ font-weight: 600;
+ font-size: 32rpx;
+ color: #ffffff;
}
}
</style>
diff --git a/h5/pages/staff/vehicle/shiwai.vue b/h5/pages/staff/vehicle/shiwai.vue
index 6f7b9e9..ff51cda 100644
--- a/h5/pages/staff/vehicle/shiwai.vue
+++ b/h5/pages/staff/vehicle/shiwai.vue
@@ -125,7 +125,8 @@
}
},
onLoad() {
- this.minDate = new Date(dayjs().format('YYYY-MM-DD HH:') + '00:00').getTime()
+ this.minDate = new Date(dayjs().format('YYYY-MM-DD HH:mm') + ':00').getTime()
+ console.log('minDate', this.minDate);
this.initData()
},
methods: {
diff --git a/h5/pages/staffLogin/login.vue b/h5/pages/staffLogin/login.vue
index 572006f..d4a0c8b 100644
--- a/h5/pages/staffLogin/login.vue
+++ b/h5/pages/staffLogin/login.vue
@@ -84,7 +84,12 @@
onLoad() {
this.initCaptcha()
},
-
+ onBackPress(options) {
+ uni.redirectTo({
+ url: '/pages/login/login'
+ })
+ return true
+ },
methods: {
...mapMutations(["setToken", "setUserInfo"]),
changeFalg() {
@@ -122,10 +127,10 @@
title: '瀵嗙爜涓嶈兘涓虹┖',
icon: 'none'
})
- // if (!form.code) return uni.showToast({
- // title: '楠岃瘉鐮佷笉鑳戒负绌�',
- // icon: 'none'
- // })
+ if (!form.code) return uni.showToast({
+ title: '楠岃瘉鐮佷笉鑳戒负绌�',
+ icon: 'none'
+ })
loginPost({
...form,
uuid: this.captcha.uuid,
@@ -151,7 +156,7 @@
width: 100%;
height: 100vh;
display: flex;
- padding-top: 160rpx;
+ padding-top: 130rpx;
box-sizing: border-box;
align-items: center;
flex-direction: column;
@@ -218,7 +223,6 @@
margin-top: 60rpx;
.for_psd {
color: $uni-color-primary;
- margin-top: 40rpx;
width: 140rpx;
text-align: center;
margin: 40rpx auto;
@@ -242,7 +246,7 @@
width: 100%;
left: 0;
text-align: center;
- bottom: 108rpx;
+ bottom: 88rpx;
display: flex;
justify-content: center;
align-items: center;
diff --git a/h5/pages/visitorApplication/visitorApplication.vue b/h5/pages/visitorApplication/visitorApplication.vue
index 439734d..b309a87 100644
--- a/h5/pages/visitorApplication/visitorApplication.vue
+++ b/h5/pages/visitorApplication/visitorApplication.vue
@@ -119,6 +119,7 @@
v-if="form1.starttime"
:show="show5"
:minDate="formatTimeStamp(form1.starttime)"
+ :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')"
mode="datetime"
@cancel="show5 = false"
@confirm="setendtime"
@@ -775,7 +776,7 @@
this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
// this.maxTime = getDaysAfterDate(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM'), this.day)
this.maxTime = this.form1.starttime
- console.log(this.form1.starttime)
+ console.log(this.form1.starttime.slice(0,10))
this.show4 = false
},
setendtime(e) {
diff --git a/h5/static/ic_driver@2x.png b/h5/static/ic_driver@2x.png
new file mode 100644
index 0000000..0997cdf
--- /dev/null
+++ b/h5/static/ic_driver@2x.png
Binary files differ
diff --git a/h5/static/ic_enter_shinei@2x.png b/h5/static/ic_enter_shinei@2x.png
new file mode 100644
index 0000000..9fec9a7
--- /dev/null
+++ b/h5/static/ic_enter_shinei@2x.png
Binary files differ
diff --git a/h5/static/ic_enter_shiwai@2x.png b/h5/static/ic_enter_shiwai@2x.png
new file mode 100644
index 0000000..9683583
--- /dev/null
+++ b/h5/static/ic_enter_shiwai@2x.png
Binary files differ
diff --git a/h5/static/ic_staff@2x.png b/h5/static/ic_staff@2x.png
new file mode 100644
index 0000000..8006cfd
--- /dev/null
+++ b/h5/static/ic_staff@2x.png
Binary files differ
diff --git a/h5/static/ic_visitor@2x.png b/h5/static/ic_visitor@2x.png
new file mode 100644
index 0000000..fe007c8
--- /dev/null
+++ b/h5/static/ic_visitor@2x.png
Binary files differ
diff --git a/h5/store/index.js b/h5/store/index.js
index 884b032..44fb682 100644
--- a/h5/store/index.js
+++ b/h5/store/index.js
@@ -71,7 +71,7 @@
state.sessionKey = val
uni.setStorageSync('sessionKey', val)
},
- // 娓呯┖鎵�鏈夌紦瀛�
+ // 娓呯┖鐧诲綍缂撳瓨
empty(state) {
state.token = ''
state.userInfo = {}
diff --git a/h5/utils/service.js b/h5/utils/service.js
index 4131187..fee9e39 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -36,8 +36,9 @@
})
}
if (data.code === 5112) {
+ uni.clearStorageSync()
uni.navigateTo({
- url: '/pages/staffLogin/login'
+ url: '/pages/login/login'
})
}
resolve(data)
--
Gitblit v1.9.3