Merge remote-tracking branch 'origin/master'
| | |
| | | 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 |
| | | }) |
| | | } |
| | |
| | | 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, { |
| | |
| | | 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}`) |
| | |
| | | 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 |
| | |
| | | } |
| | | // æäº¤è®¿å®¢ä¿¡æ¯ |
| | | 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) => { |
| | |
| | | } |
| | | // åæ¶ |
| | | 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 |
| | | }) |
| | | } |
| | | |
| | | // å é¤ |
| | |
| | | |
| | | // å é¤ |
| | | export function deleteById (id) { |
| | | return request.get(`/meetingAdmin/cloudService/rooms/delete/${id}`) |
| | | return request.get(`/meetingAdmin/cloudService/business/rooms/delete/${id}`) |
| | | } |
| | | |
| | | // æ¹éå é¤ |
| | |
| | | |
| | | .el-drawer__header { |
| | | color: #333333 !important; |
| | | } |
| | | .el-image-viewer__wrapper{ |
| | | z-index: 3000 !important; |
| | | } |
| | |
| | | padding: 30px; |
| | | margin: 0 16px; |
| | | } |
| | | .query_btns{ |
| | | border-bottom: 1px solid #eee; |
| | | padding-bottom: 10px; |
| | | } |
| | | /** åºç¡éç¨ **/ |
| | | // å¤§å° å¤è¾¹è· |
| | | .flex1{ |
| | |
| | | }, |
| | | loadMember () { |
| | | allList({ |
| | | type: 2 |
| | | type: 2, |
| | | companyType: 1 |
| | | }) |
| | | .then(res => { |
| | | this.memberList = res |
| | |
| | | <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> |
| | |
| | | </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 |
| | |
| | | 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" |
| | |
| | | type="textarea" |
| | | placeholder="请填å说æ" |
| | | :rows="4" |
| | | v-model="backForm.checkInfo" |
| | | v-model="dealForm.checkInfo" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | |
| | | 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 => { |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | 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 |
| | |
| | | this.model = res |
| | | this.dealForm.driveId = res.driveId |
| | | }) |
| | | }, |
| | | handleTransfer () { |
| | | this.isShowTransfer = true |
| | | this.loadMemberList() |
| | | }, |
| | | loadMemberList () { |
| | | driveList({}).then(res => { |
| | |
| | | </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" |
| | |
| | | }) |
| | | }, |
| | | 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 |
| | | } |
| | |
| | | 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 |
| | |
| | | </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> |
| | | |
| | |
| | | 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> |
| | |
| | | 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 { |
| | |
| | | /*, |
| | | dealBeforeFileList: [ |
| | | { required: true, message: '请ä¸ä¼ æ´æ¹åæ
åµ' } |
| | | ]*/ |
| | | ] */ |
| | | }, |
| | | memberList: [], |
| | | transForm: { |
| | |
| | | }) |
| | | }, |
| | | 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) { |
| | |
| | | :visible.sync="isShowModal" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | @close="close" |
| | | > |
| | | <el-form :model="param" ref="paramRef" :rules="rules"> |
| | | <div class="title_tip">访客é¢çº¦</div> |
| | |
| | | <el-form-item label="ææºå·" prop="phone"> |
| | | <el-input |
| | | v-model="param.phone" |
| | | maxlength="11" |
| | | placeholder="请è¾å
¥èç³»äººçææºå·" |
| | | ></el-input> |
| | | </el-form-item> |
| | |
| | | <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> |
| | |
| | | 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) => { |
| | |
| | | :visible.sync="isShowModal" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | @close="close" |
| | | > |
| | | <el-form :model="param" ref="paramRef" :rules="rules"> |
| | | <div class="title_tip">访客信æ¯</div> |
| | |
| | | <el-form-item label="è®¿å®¢ææºå·" prop="phone"> |
| | | <el-input |
| | | v-model="param.phone" |
| | | maxlength="11" |
| | | placeholder="请è¾å
¥è®¿å®¢çææºå·" |
| | | ></el-input> |
| | | </el-form-item> |
| | |
| | | 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 }" |
| | |
| | | GlobalWindow, |
| | | UploadFaceImg |
| | | }, |
| | | data() { |
| | | data () { |
| | | return { |
| | | isShowModal: false, |
| | | param: { |
| | |
| | | folder: 'member' |
| | | }, |
| | | startPickerOptions: { |
| | | disabledDate(time) { |
| | | disabledDate (time) { |
| | | return time.getTime() < Date.now() - 8.64e7 // ç¦ç¨è¶
è¿å½åæ¶é´çæ¥æ |
| | | }, |
| | | selectableRange: '00:00:00 - 23:59:59' // è¿ä¸ªå ä¸ä¹åï¼æ¶åç§ä¸é¢ææç¦æ¢éæ©åç°ï¼å¦æä¸å ï¼ä¹å¯ä»¥ç¦æ¢éæ©ï¼ä½æ¯ä¸ä¼åç° |
| | |
| | | } |
| | | } |
| | | }, |
| | | 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() |
| | |
| | | immediate: true |
| | | }, |
| | | 'param.endtime': { |
| | | handler(newValue, oldValue) { |
| | | handler (newValue, oldValue) { |
| | | if (newValue) { |
| | | const nowDate = dayjs(this.param.starttime).format('HH:mm:ss') |
| | | let st = '' |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | initData() { |
| | | close () { |
| | | this.isShowModal = false |
| | | this.$emit('close') |
| | | }, |
| | | initData () { |
| | | getVisitedVisitReason({}).then(res => { |
| | | this.VisitReason = res || [] |
| | | }) |
| | |
| | | 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({ |
| | |
| | | this.$emit('close') |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | |
| | | .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; |
| | |
| | | :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" |
| | |
| | | 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) |
| | |
| | | }, |
| | | { |
| | | text: 'è¿30天', |
| | | onClick(picker) { |
| | | onClick (picker) { |
| | | const end = new Date() |
| | | const start = new Date() |
| | | start.setTime(end.getTime() - 3600 * 1000 * 24 * 29) |
| | |
| | | }, |
| | | { |
| | | text: 'è¿60天', |
| | | onClick(picker) { |
| | | onClick (picker) { |
| | | const end = new Date() |
| | | const start = new Date() |
| | | start.setTime(end.getTime() - 3600 * 1000 * 24 * 59) |
| | |
| | | }, |
| | | { |
| | | 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 |
| | |
| | | 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') |
| | | } |
| | | } |
| | |
| | | <div> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | accept=".png,.jpg" |
| | | accept=".png,.jpg,.jpeg" |
| | | :style="customStyle" |
| | | :action="uploadImgUrl" |
| | | :data="uploadData" |
| | |
| | | tipsLabel: '', |
| | | customStyle: { |
| | | type: String, |
| | | default: 'width: 90px; height: 90px;' |
| | | default: 'width: 90px; max-height: 90px;' |
| | | }, |
| | | uploadData: Object |
| | | }, |
| | |
| | | text-align: center; |
| | | } |
| | | .avatar { |
| | | width: 100% !important; |
| | | height: auto !important; |
| | | width: 90px; |
| | | max-height: 90px; |
| | | display: block; |
| | | } |
| | | .tips-style { |
| | |
| | | console.log(res.data.data) |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | .finally(() => { |
| | | this.$refs.file.value = null |
| | |
| | | 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({ |
| | |
| | | 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; |
| | |
| | | cursor: pointer; |
| | | } |
| | | .img { |
| | | width: 140px; |
| | | max-height: 90px; |
| | | width: 92px; |
| | | max-height: 92px; |
| | | } |
| | | } |
| | | } |
| | |
| | | > |
| | | </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" |
| | |
| | | :class="{ |
| | | disable: item.isUse == 1, |
| | | active: item.checked == '1', |
| | | hasSub: item.carUseBookId, |
| | | }" |
| | | @click="datetimeClick(item, i)" |
| | | v-for="(item, i) in timeList" |
| | |
| | | :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"> |
| | |
| | | <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> |
| | |
| | | </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> |
| | | |
| | |
| | | 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, |
| | |
| | | endTime: '', |
| | | memberIds: [] |
| | | }, |
| | | activeInfo: {}, |
| | | isShowDetail: false, |
| | | carBookInfo: {}, |
| | | pickerOptions: { |
| | | disabledDate: (time) => { |
| | | if (this.form.startTime) { |
| | |
| | | }, |
| | | 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 |
| | |
| | | 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 |
| | |
| | | immediate: true |
| | | } |
| | | }, |
| | | created() { |
| | | created () { |
| | | this.initData() |
| | | }, |
| | | methods: { |
| | | open() { |
| | | open () { |
| | | this.title = 'æ°å»ºå
¬å¡è½¦ç¨è½¦ç³è¯·' |
| | | this.form = { |
| | | type: 0, |
| | |
| | | }) |
| | | this.visible = true |
| | | }, |
| | | confirm() { |
| | | confirm () { |
| | | const form = JSON.parse(JSON.stringify(this.form)) |
| | | this.$refs.formRef.validate((valid) => { |
| | | const memberList = [] |
| | |
| | | } |
| | | }) |
| | | }, |
| | | 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) { |
| | |
| | | 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') |
| | |
| | | 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 |
| | |
| | | }) |
| | | } |
| | | }, |
| | | gettimes() { |
| | | gettimes () { |
| | | const { form } = this |
| | | carCanReservationDate({ |
| | | dateDay: form.dateDay, |
| | |
| | | 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 || [] |
| | | }) |
| | |
| | | background-color: #cccccc; |
| | | color: #999999; |
| | | } |
| | | .hasSub { |
| | | color: #fff; |
| | | background: #cccccc; |
| | | } |
| | | } |
| | | .color_op { |
| | | display: flex; |
| | |
| | | color: #fff; |
| | | width: 120px; |
| | | text-align: center; |
| | | cursor: pointer; |
| | | } |
| | | .disable{ |
| | | background: #cccccc; |
| | | } |
| | | } |
| | | .have_info { |
| | |
| | | } |
| | | } |
| | | } |
| | | .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> |
| | |
| | | <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" |
| | | > |
| | |
| | | <div class="config_data_submit"> |
| | | <el-button |
| | | @click="onSubmit" |
| | | :loading="subLoading" |
| | | style="background: #435ebe" |
| | | type="primary" |
| | | >ä¿åé
置项</el-button |
| | |
| | | data () { |
| | | return { |
| | | activeType: '0', |
| | | subLoading: false, |
| | | apprList: [ |
| | | { remark: '审æ¹äºº', active: false, type: '0', objIds: [] }, |
| | | { remark: 'æé人', active: false, type: '1', objIds: [] } |
| | |
| | | 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 () { |
| | |
| | | > |
| | | <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> |
| | |
| | | </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" |
| | | > |
| | |
| | | <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" |
| | | > |
| | |
| | | <div class="config_data_submit"> |
| | | <el-button |
| | | @click="onSubmit" |
| | | :loading="subLoading" |
| | | style="background: #435ebe" |
| | | type="primary" |
| | | >ä¿åé
置项</el-button |
| | |
| | | data () { |
| | | return { |
| | | activeType: '2', |
| | | subLoading: false, |
| | | apprList: [ |
| | | { remark: '审æ¹äºº', active: false, type: '0', objIds: [] }, |
| | | { remark: 'æé人', active: false, type: '1', objIds: [] } |
| | |
| | | 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 () { |
| | |
| | | @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> |
| | |
| | | row-key="id" |
| | | default-expand-all |
| | | > |
| | | <el-table-column type="selection" width="55" align="center"></el-table-column> |
| | | <el-table-column |
| | | prop="carNos" |
| | | label="å
¥å车è¾" |
| | |
| | | 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 /> |
| | |
| | | <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" |
| | |
| | | <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" |
| | |
| | | <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="è¯·éæ©"> |
| | |
| | | <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"> |
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | > |
| | | </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> |
| | |
| | | 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 |
| | | } |
| | | } |
| | | }, |
| | |
| | | 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(() => { |
| | |
| | | }) |
| | | .catch(e => { |
| | | this.refreshCaptcha() |
| | | this.$tip.apiFailed(e) |
| | | // this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false |
| | |
| | | <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" |
| | |
| | | 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"> |
| | |
| | | </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"> |
| | |
| | | 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" |
| | |
| | | </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" |
| | |
| | | @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)">æ£å¸¸</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 ? 'æ£å¸¸' : 'åæ¶' }} --> |
| | | </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> |
| | |
| | | </pagination> |
| | | </template> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <OperaBookingsWindow ref="operaBookingsWindow" @success="handlePageChange"/> |
| | | <OperaBookingsDetailWindow ref="operaBookingsDetailWindow"/> |
| | | <OperaBookingsWindow |
| | | ref="operaBookingsWindow" |
| | | @success="handlePageChange" |
| | | /> |
| | | <OperaBookingsDetailWindow |
| | | @success="search" |
| | | ref="operaBookingsDetailWindow" |
| | | /> |
| | | |
| | | </TableLayout> |
| | | </template> |
| | | |
| | |
| | | // departmentId: [], |
| | | department: [], |
| | | realName: '', |
| | | status: '', |
| | | meetingStatus: '', |
| | | createDate: '', |
| | | editor: '', |
| | | editDate: '', |
| | |
| | | { name: 'å¼åé¨é¨', id: '0' } |
| | | ], |
| | | status: [ |
| | | { name: 'å
¨é¨', id: '' }, |
| | | { name: 'æ£å¸¸', 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 |
| | | } |
| | |
| | | this.$message.success('ä¼è®®ä¿¡æ¯å¤å¶æåï¼å»å享ç»åäºå§~') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }, |
| | | cancelMeeting (id) { |
| | |
| | | this.handlePageChange() |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }) |
| | | }, |
| | |
| | | this.$refs.operaBookingsDetailWindow.open('ä¼è®®è¯¦æ
', res) |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }, |
| | | editBookings (id) { |
| | |
| | | this.$refs.operaBookingsWindow.open('ç¼è¾ä¼è®®é¢çº¦', res) |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }, |
| | | handlePageChange (pageIndex) { |
| | |
| | | } |
| | | } |
| | | </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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | | |
| | |
| | | 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, |
| | |
| | | projectList: [], |
| | | remark: '', |
| | | roomId: '', |
| | | meetingStatus: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | times: [], |
| | |
| | | sysList: [], |
| | | projectList: [], |
| | | timelist: [], |
| | | |
| | | isShowCancel: false, |
| | | cancelParam: { |
| | | flag: '0' |
| | | }, |
| | | // éªè¯è§å |
| | | rules: { |
| | | |
| | |
| | | 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 çªå£æ é¢ |
| | |
| | | // }) |
| | | // }, |
| | | |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | |
| | | .bottom-style { |
| | | padding: 20px; |
| | | } |
| | | |
| | | </style> |
| | |
| | | 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> |
| | |
| | | <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" |
| | |
| | | </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> |
| | | |
| | |
| | | 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 { |
| | |
| | | times: [], |
| | | content: '', |
| | | sysList: [], |
| | | fileList: [], |
| | | fileList: [] |
| | | }, |
| | | activeInfo: {}, |
| | | isShowDetail: false, |
| | | isEdit: false, |
| | | // room: [], |
| | | sysList: [], |
| | |
| | | // éªè¯è§å |
| | | 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' } |
| | | // ], |
| | |
| | | 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 |
| | | }) |
| | | }, |
| | |
| | | * @title çªå£æ é¢ |
| | | * @target ç¼è¾ç对象 |
| | | */ |
| | | open (title, target) { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.timelist = [] |
| | |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | console.log(this.form.content); |
| | | debugger |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | |
| | | this.selectRoom(this.form.roomId) |
| | | }) |
| | | }, |
| | | selectRoom(objId) { |
| | | selectRoom (objId) { |
| | | this.getTimes() |
| | | findListByObjId({ |
| | | objId: objId, |
| | |
| | | this.projectList = res |
| | | }) |
| | | }, |
| | | selectDate(v) { |
| | | selectDate (v) { |
| | | // console.log(v); |
| | | this.getTimes() |
| | | }, |
| | | getTimes(isInit=false) { |
| | | getTimes (isInit = false) { |
| | | this.form.times = [] |
| | | this.timelist = [] |
| | | |
| | |
| | | }) |
| | | } |
| | | }, |
| | | 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]) |
| | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | }) |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | |
| | | 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> |
| | |
| | | this.$message.success('ä¿®æ¹æå') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | .finally(() => { |
| | | this.handlePageChange() |
| | |
| | | } |
| | | } |
| | | }, |
| | | provide() { |
| | | provide () { |
| | | return { |
| | | userList: () => this.userList |
| | | } |
| | |
| | | userList({ |
| | | page: 1, |
| | | capacity: 9999, |
| | | model: { realname: this.filterText }, |
| | | memberType: 2, |
| | | model: { realname: this.filterText } |
| | | }) |
| | | .then(res => { |
| | | this.userList = res.records |
| | |
| | | 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, |
| | |
| | | // 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> |
| | | |
| | |
| | | <!-- æç´¢è¡¨å --> |
| | | <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> |
| | |
| | | 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="ç»ææ¥æ"> |
| | |
| | | .then(() => { |
| | | this.exLoading = true |
| | | exportExcel({ |
| | | page: this.pagination.page, |
| | | capacity: 1000000, |
| | | model: this.filters |
| | | model: this.searchForm |
| | | }) |
| | | .then(response => { |
| | | this.download(response) |
| | |
| | | <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"> |
| | |
| | | <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" |
| | | > |
| | |
| | | <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 |
| | |
| | | data () { |
| | | return { |
| | | activeType: '3', |
| | | subLoading: false, |
| | | apprList: [ |
| | | { remark: '审æ¹äºº', active: false, type: '0', objIds: [] }, |
| | | { remark: 'æé人', active: false, type: '1', objIds: [] } |
| | |
| | | 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 () { |
| | |
| | | <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"> |
| | |
| | | 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="ç»ææ¥æ"> |
| | |
| | | <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" |
| | |
| | | <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> |
| | | |
| | |
| | | <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> |
| | |
| | | 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, |
| | |
| | | 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') { |
| | |
| | | <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" |
| | |
| | | class="img" |
| | | controls |
| | | /> |
| | | </template> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | created () { |
| | | this.getMemberList() |
| | | }, |
| | | methods: { |
| | |
| | | } |
| | | .file_list { |
| | | display: flex; |
| | | .img { |
| | | width: 200px; |
| | | .file { |
| | | width: 92px; |
| | | margin-right: 12px; |
| | | margin-bottom: 12px; |
| | | .img{ |
| | | max-height: 92px; |
| | | max-width: 92px; |
| | | } |
| | | } |
| | | } |
| | | .value { |
| | |
| | | import dayjs from 'dayjs' |
| | | import { |
| | | taskCenterHeadPC, |
| | | taskCenterPage |
| | | taskCenterPage, |
| | | taskSignRead |
| | | } from '@/api' |
| | | export default { |
| | | components: { |
| | |
| | | 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) { |
| | |
| | | }) |
| | | }, |
| | | getHeadData () { |
| | | const {filters} = this |
| | | const { filters } = this |
| | | if (filters.selTime && filters.selTime.length > 0) { |
| | | filters.startDate = filters.selTime[0] |
| | | filters.endDate = filters.selTime[1] |
| | |
| | | <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> |
| | |
| | | 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" |
| | |
| | | /> |
| | | <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> |
| | |
| | | <!-- åæ/æç» --> |
| | | <el-dialog |
| | | append-to-body |
| | | :title="apprTitle" |
| | | :title="param.status == 2 ? 'åæ' : 'æç»'" |
| | | :visible.sync="isShowAppr" |
| | | width="480px" |
| | | > |
| | |
| | | handleAppr (val) { |
| | | this.$set(this.param, 'status', val) |
| | | this.isShowAppr = true |
| | | this.$nextTick(() => { |
| | | this.$refs.ruleForm.clearValidate() |
| | | }) |
| | | }, |
| | | confirm () { |
| | | console.log('--') |
| | |
| | | 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') |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | .ml12 { |
| | | margin-left: 12rpx; |
| | | } |
| | | .mt6{ |
| | | .mt6 { |
| | | margin-top: 6rpx; |
| | | } |
| | | .mr6 { |
| | |
| | | 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 |
| | | }) |
| | | } |
| | |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | } |
| | | // ä»»å¡ä¸å¿ æ 记已读 |
| | | export const signReadTask = (data) => { |
| | | return http({ |
| | | url: 'visitsAdmin/cloudService/business/staging/signRead', |
| | | method: 'get', |
| | | data |
| | | }) |
| | | } |
| | |
| | | /* 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;
|
| | |
| | | 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) => { |
| | |
| | | "proxy" : { |
| | | "/admin_interface" : { |
| | | // è¿ä¸ªå段åéä¸ä½ é
ç½®çbasePrefixUrlä¸è´ï¼ç³»ç»è¯å«å°å¸¦æ/dev-api请æ±çå°åæ¶ï¼ä¼å¨å颿¼æ¥ä¸ä»£çæå¡å¨å°å |
| | | "target" : "http://192.168.0.173/admin_interface", // 代çæå¡å¨ååæIPå°å |
| | | // "target" : "http://192.168.0.135:10010", // 代çæå¡å¨ååæIPå°å |
| | | // "target" : "http://192.168.0.173/admin_interface", // 代çæå¡å¨ååæIPå°å |
| | | "target" : "http://192.168.0.135:10010", // 代çæå¡å¨ååæIPå°å |
| | | "changeOrigin" : true, // å
许跨å |
| | | "pathRewrite" : { |
| | | "^/admin_interface" : "" // éåå°åï¼å¦æå®é
æ¥å£ä¸æ¯ä¸å¸¦/dev-apiï¼éè¦å°è¿ä¸ªåç¼ç½®ç©ºï¼å 为è¿ä¸ªåç¼åªæ¯ä¸ºäºè¯å«ç¨ï¼è¯å«å®ä¹å就没ç¨äº |
| | |
| | | },
|
| | | "pages": [
|
| | | {
|
| | | "path": "pages/login/login",
|
| | | "style": {
|
| | | "navigationBarTitleText": "éæ©èº«ä»½",
|
| | | "enablePullDownRefresh": false
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/index/index",
|
| | | "style": {
|
| | | "navigationBarTitleText": "访客ä¸å¿",
|
| | |
| | | "path": "pages/staffLogin/login",
|
| | | "style": {
|
| | | "navigationBarTitleText": "ç»å½",
|
| | | "enablePullDownRefresh": false,
|
| | | "navigationStyle": "custom"
|
| | | "enablePullDownRefresh": false |
| | | }
|
| | | },
|
| | | {
|
| | |
| | | <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> |
| | |
| | | </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">æ£ç¡®çæ¡ï¼{{ item.answer }}</view> |
| | | </view> |
| | | <view |
| | | class="box_list_answer_tips" |
| | |
| | | status != '0' |
| | | " |
| | | > |
| | | <image src="@/static/ic_success@2.png" /> |
| | | <text class="success">åçæ£ç¡®</text> |
| | | <view class="line"> |
| | | <image src="@/static/ic_success@2.png" /> |
| | | <text class="success">åçæ£ç¡®</text> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | <template v-if="item.type == 2"> |
| | |
| | | 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 |
| | |
| | | <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)">{{ |
| | |
| | | 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">æ£ç¡®çæ¡ï¼{{ item.answer }}</view> |
| | | </view> |
| | | <view |
| | | class="box_list_answer_tips" |
| | |
| | | status != '0' |
| | | " |
| | | > |
| | | <image src="@/static/ic_success@2.png" /> |
| | | <text class="success">åçæ£ç¡®</text> |
| | | <view class="line"> |
| | | <image src="@/static/ic_success@2.png" /> |
| | | <text class="success">åçæ£ç¡®</text> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | </view> |
| | |
| | | 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 |
| | |
| | | item.status = '0' |
| | | item.selAnswer = null |
| | | }) |
| | | console.log(res.data) |
| | | this.list = res.data |
| | | } |
| | | // res.param.problemsDOList.forEach(item => { |
| | |
| | | }, |
| | | // åééæ©ä¸é¢ç® |
| | | 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 |
| | |
| | | // 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) => { |
| | |
| | | }, |
| | | // ä¸ä¸é¢ |
| | | onSubmit() { |
| | | if(!this.answerIng) return |
| | | if (!this.answerIng) return |
| | | const { list } = this |
| | | // éªè¯ææé¢ç®é½æé项 |
| | | let count = 0 |
| | |
| | | list.forEach(item => { |
| | | if (item.selAnswer !== item.answer) { |
| | | flag++ |
| | | }else{ |
| | | } else { |
| | | this.score += item.score |
| | | } |
| | | }) |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | .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 { |
| | |
| | | font-size: 30rpx; |
| | | color: #ffffff; |
| | | } |
| | | .disable{ |
| | | .disable { |
| | | background-color: #cccccc; |
| | | } |
| | | } |
| | |
| | | :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"> |
| | |
| | | methods: { |
| | | handleDetail(id) { |
| | | uni.navigateTo({ |
| | | url: "/pages/appointmentDetails/appointmentDetails?id=" + id |
| | | url: "/pages/appointmentDetails/appointmentDetails?detail=1&id=" + id |
| | | }) |
| | | }, |
| | | tabsClick(val) { |
| | |
| | | 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 => { |
| | |
| | | <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>å®å¾½å®æ³°ç©æµæé责任å
¬å¸çæææ</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>å®å¾½å®æ³°ç©æµæé责任å
¬å¸çæææ</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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | if (!this.$store.state.openId) { |
| | | this.initToken() |
| | | } |
| | | timer = setInterval(() => { |
| | | this.num-- |
| | | if (this.num === 0) { |
| | | clearInterval(timer) |
| | | } |
| | | }, 1000) |
| | | }, |
| | | methods: { |
| | | initToken() { |
| | |
| | | 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', |
| | |
| | | }) |
| | | }, |
| | | toapply() { |
| | | if(this.num > 0) return |
| | | if (this.num > 0) return |
| | | if (this.answer === '0') { |
| | | uni.navigateTo({ |
| | | url: '/pages/userinfo/userinfo' |
| | |
| | | bottom: 30rpx; |
| | | left: 30rpx; |
| | | } |
| | | .disable{ |
| | | .disable { |
| | | background-color: #cccccc; |
| | | } |
| | | } |
| | |
| | | <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> |
| | |
| | | </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) { |
| | |
| | | }, |
| | | getTaskInfo() { |
| | | stagingHead({ |
| | | isDetail: '0' |
| | | isDetail: '1' |
| | | }).then(res => { |
| | | this.taskNum = res.data.taskNum |
| | | this.taskInfo = res.data |
| | | }) |
| | | }, |
| | | } |
| | |
| | | font-weight: 600;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | flex: 1;
|
| | | overflow: hidden;
|
| | | white-space: nowrap;
|
| | | text-overflow: ellipsis;
|
| | | }
|
| | | .status {
|
| | | height: 38rpx;
|
| | |
| | | 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;
|
| | |
| | | <!-- --> |
| | | <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> --> |
| | |
| | | /> |
| | | </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"> |
| | |
| | | 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"> |
| | |
| | | </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 |
| | |
| | | </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: '' |
| | | } |
| | | }, |
| | |
| | | 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 |
| | |
| | | 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 { |
| | |
| | | .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> |
| | |
| | | getRoomList() {
|
| | | roomsListPost({}).then(res => {
|
| | | this.meetingList = [[{ id: '', name: 'å
¨é¨ä¼è®®å®¤' }, ...res.data]]
|
| | | console.log('meetingList', this.meetingList)
|
| | | })
|
| | | },
|
| | | seletedStatus(e) {
|
| | |
| | | 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;
|
| | |
| | | <template> |
| | | <view class="main_app"> |
| | | <view class="main_app" :class="{ popupShow: isShowSelMem }"> |
| | | <view class="search_inp df_ac"> |
| | | <image |
| | | class="mr12 search" |
| | |
| | | /> |
| | | </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> |
| | |
| | | <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" |
| | |
| | | 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> |
| | |
| | | |
| | | <script> |
| | | import { userPagePost } from '@/api' |
| | | import dayjs from 'dayjs' |
| | | export default { |
| | | data() { |
| | | return { |
| | | memberList: [], |
| | | selList: [], |
| | | param: {}, |
| | | param: { |
| | | limitNum: '' |
| | | }, |
| | | pagination: { |
| | | page: 1, |
| | | capacity: 20 |
| | |
| | | } |
| | | }, |
| | | 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 |
| | |
| | | |
| | | }).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() |
| | | }, |
| | |
| | | <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; |
| | | } |
| | |
| | | } |
| | | } |
| | | .modal_mem_list { |
| | | max-height: 860rpx; |
| | | overflow: auto; |
| | | .line { |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | 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; |
| | |
| | | .sub_wrap { |
| | | position: fixed; |
| | | bottom: 0; |
| | | background-color: #fff; |
| | | background-color: #fff; |
| | | left: 0; |
| | | width: 100%; |
| | | box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2; |
| | |
| | | color: #f62710; |
| | | padding: 0rpx 6rpx; |
| | | margin-left: 8rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | } |
| | | } |
| | | .checked{ |
| | | .checked { |
| | | width: 48rpx; |
| | | } |
| | | } |
| | |
| | | <view class="">{{ item.name }}</view> |
| | | </view> |
| | | </view> |
| | | <view class="sub" @click="onSubmit">确认é¢çº¦</view> |
| | | <view class="sub" :class="{disable: !selDatetime}" @click="onSubmit">确认é¢çº¦</view> |
| | | </view> |
| | | </view> |
| | | <!-- --> |
| | |
| | | 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({ |
| | |
| | | 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') |
| | | }, |
| | |
| | | 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; |
| | |
| | | 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 { |
| | |
| | | <view class="item"> |
| | | <view class="name"> |
| | | åä¼äººå |
| | | <text class="star">*</text> |
| | | <text class="star"></text> |
| | | </view> |
| | | <view class="line" @click="selPeople"> |
| | | <view class="label"> |
| | |
| | | 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å¹´MæDæ¥')) |
| | | this.initOption() |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | })) |
| | | // 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å¹´MæDæ¥')) |
| | | const bookingTimeList = res.bookingTimeList.split(',').map(i => { |
| | | return { |
| | | timeId: Number(i) |
| | | } |
| | | }) |
| | | this.$set(this.param, 'bookingTimeList', bookingTimeList) |
| | | this.initOption() |
| | | }) |
| | | }, |
| | | methods: { |
| | |
| | | }) |
| | | }, |
| | | handleBack() { |
| | | if(this.param.id) return |
| | | uni.navigateBack( ) |
| | | }, |
| | | onSubmit() { |
| | |
| | | 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`, |
| | |
| | | }, |
| | | 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) { |
| | |
| | | icon: 'none' |
| | | }) |
| | | if (!param.applyCheckUserId) return uni.showToast({ |
| | | title: 'è¯·éæ©æ¥å人', |
| | | title: 'è¯·éæ©æ¥æ¶äºº', |
| | | icon: 'none' |
| | | }) |
| | | if (!param.categoryName) return uni.showToast({ |
| | |
| | | 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', '') |
| | |
| | | <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"> |
| | |
| | | @click="statusClick(0)" |
| | | :class="{ active: search.queryType === 0 }" |
| | | class="box_head_item" |
| | | >å¾
å¤ç {{ headData.noticeWaitNum || '' }}</view |
| | | >å¾
å¤ç {{ headData.noticeWaitNum || "" }}</view |
| | | > |
| | | <view |
| | | @click="statusClick(1)" |
| | |
| | | @click="statusClick(3)" |
| | | :class="{ active: search.queryType === 3 }" |
| | | class="box_head_item" |
| | | >æéæç {{ headData.noticeCopyNum || '' }}</view |
| | | >æéæç {{ headData.noticeCopyNum || "" }}</view |
| | | > |
| | | </view> |
| | | </scroll-view> |
| | |
| | | /> |
| | | <text>ä»
çæªè¯»</text> |
| | | </view> |
| | | <view class="right">å
¨é¨æ 记已读</view> |
| | | <view class="right" @click="handleReady">å
¨é¨æ 记已读</view> |
| | | </view> |
| | | <view |
| | | class="box_list_item" |
| | |
| | | <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> |
| | |
| | | @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> |
| | |
| | | @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=" |
| | |
| | | </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" |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { stagingHead, stagingTaskPage } from '@/api' |
| | | import { stagingHead, stagingTaskPage, signReadTask } from '@/api' |
| | | import dayjs from 'dayjs' |
| | | export default { |
| | | data() { |
| | |
| | | search: { |
| | | queryType: 0 |
| | | }, |
| | | modelParam: { |
| | | startDate: dayjs().format('YYYY-MM-DD'), |
| | | endDate: dayjs().format('YYYY-MM-DD'), |
| | | }, |
| | | modelParam: {}, |
| | | tiemShow: false, |
| | | tiemShow1: false, |
| | | |
| | |
| | | { name: 'ç¨è½¦ç³è¯·', id: 2 }, |
| | | { name: '鿣鿿', id: 3 }, |
| | | { name: 'ç©æµè½¦ç³è¯·', id: 4 }, |
| | | ] |
| | | ], |
| | | startDate: dayjs().format('YYYY-MM-DD'), |
| | | } |
| | | }, |
| | | // onLoad() { |
| | |
| | | // this.pagination.page = 0 |
| | | // this.dataList = [] |
| | | this.getList() |
| | | }, |
| | | onBackPress(options) { |
| | | setTimeout(()=>{ |
| | | this.$eventBus.$emit('taskBack') |
| | | }) |
| | | return false |
| | | }, |
| | | onShow() { |
| | | this.pagination.page = 0 |
| | |
| | | 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() { |
| | |
| | | i.param1 = JSON.parse(i.param1) |
| | | } |
| | | }) |
| | | console.log('dataList', this.dataList) |
| | | }) |
| | | }, |
| | | getHeadList() { |
| | |
| | | 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` |
| | |
| | | } |
| | | }, |
| | | 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 |
| | | } |
| | |
| | | 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; |
| | |
| | | font-weight: 400; |
| | | color: #333333; |
| | | margin-bottom: 20rpx; |
| | | &:last-child { |
| | | margin: 0; |
| | | &:nth-of-type(3n) { |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | } |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | this.getDetail() |
| | | }, |
| | | methods: { |
| | | priviewImage(url) { |
| | | uni.previewImage({ |
| | | urls: [url] |
| | | }) |
| | | }, |
| | | handleOpen() { |
| | | this.isShowHandle = true |
| | | console.log('info', this.info) |
| | |
| | | }, |
| | | getMemList() { |
| | | findHiddenAreaMemberList({ |
| | | model: { |
| | | model: { |
| | | ...this.transferModel, |
| | | id: this.info.areaId |
| | | }, |
| | | }, |
| | | ...this.pagination, |
| | | }).then(res => { |
| | | this.memberList = res.data || [] |
| | |
| | | } |
| | | } |
| | | .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 { |
| | |
| | | } |
| | | .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; |
| | |
| | | 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 { |
| | |
| | | <template> |
| | | <view class="main_app"> |
| | | <view class="main_app" :class="{ popupShow: isShowSelMem }"> |
| | | <view class="search_inp df_ac"> |
| | | <image |
| | | class="mr12 search" |
| | |
| | | <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> |
| | |
| | | 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"> |
| | |
| | | </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> |
| | |
| | | }, |
| | | 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 => { |
| | |
| | | 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){ |
| | |
| | | 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() |
| | | }, |
| | | } |
| | |
| | | <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; |
| | | } |
| | |
| | | } |
| | | } |
| | | .modal_mem_list { |
| | | max-height: 860rpx; |
| | | overflow: auto; |
| | | .line { |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | }" |
| | | > |
| | | <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> |
| | |
| | | </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> |
| | |
| | | }) |
| | | }, |
| | | 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) |
| | |
| | | <template> |
| | | <view class="main_app"> |
| | | <image |
| | | src="../../../static/staff/yongche_bg.png" |
| | | src="@/static/staff/yongche_bg.png" |
| | | class="banner" |
| | | mode="widthFix" |
| | | ></image> |
| | |
| | | <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> |
| | |
| | | color: #222222; |
| | | line-height: 48rpx; |
| | | margin-bottom: 10rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | .icon{ |
| | | width: 32rpx; |
| | | margin-left: 10rpx; |
| | | } |
| | | } |
| | | .h2 { |
| | | font-size: 22rpx; |
| | |
| | | font-size: 34rpx; |
| | | color: #222222; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | text-align: center; |
| | | } |
| | | } |
| | | .banner { |
| | |
| | | </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> |
| | |
| | | <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" |
| | |
| | | @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' }]], |
| | |
| | | }, |
| | | methods: { |
| | | onSubmit() { |
| | | const { param } = this |
| | | const { param } = this |
| | | const selTimeList = this.timeList.filter(i => i.checked == '1') |
| | | if (selTimeList.length == 0) { |
| | | return uni.showToast({ |
| | |
| | | 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) { |
| | |
| | | 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] |
| | | }) |
| | |
| | | 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 |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | |
| | | 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 |
| | | } |
| | | } |
| | |
| | | } |
| | | .time_list { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 30rpx 0; |
| | | padding: 30rpx 0 240rpx; |
| | | flex-wrap: wrap; |
| | | .item { |
| | | width: 220rpx; |
| | |
| | | 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> |
| | |
| | | } |
| | | }, |
| | | 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: { |
| | |
| | | onLoad() { |
| | | this.initCaptcha() |
| | | }, |
| | | |
| | | onBackPress(options) { |
| | | uni.redirectTo({ |
| | | url: '/pages/login/login' |
| | | }) |
| | | return true |
| | | }, |
| | | methods: { |
| | | ...mapMutations(["setToken", "setUserInfo"]), |
| | | changeFalg() { |
| | |
| | | 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, |
| | |
| | | width: 100%; |
| | | height: 100vh; |
| | | display: flex; |
| | | padding-top: 160rpx; |
| | | padding-top: 130rpx; |
| | | box-sizing: border-box; |
| | | align-items: center; |
| | | flex-direction: column; |
| | |
| | | margin-top: 60rpx; |
| | | .for_psd { |
| | | color: $uni-color-primary; |
| | | margin-top: 40rpx; |
| | | width: 140rpx; |
| | | text-align: center; |
| | | margin: 40rpx auto; |
| | |
| | | width: 100%; |
| | | left: 0; |
| | | text-align: center; |
| | | bottom: 108rpx; |
| | | bottom: 88rpx; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | |
| | | 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" |
| | |
| | | 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) { |
| | |
| | | state.sessionKey = val |
| | | uni.setStorageSync('sessionKey', val) |
| | | }, |
| | | // æ¸
空ææç¼å |
| | | // æ¸
空ç»å½ç¼å |
| | | empty(state) { |
| | | state.token = '' |
| | | state.userInfo = {} |
| | |
| | | }) |
| | | } |
| | | if (data.code === 5112) { |
| | | uni.clearStorageSync() |
| | | uni.navigateTo({ |
| | | url: '/pages/staffLogin/login' |
| | | url: '/pages/login/login' |
| | | }) |
| | | } |
| | | resolve(data) |