| | |
| | | # 开发环境配置 |
| | | NODE_ENV = 'development' |
| | | |
| | | VUE_APP_API_URL = 'http://192.168.0.173/admin_interface' |
| | | VUE_APP_API_URL = 'http://192.168.0.135:10010' |
| | |
| | | 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 |
| | | }) |
| | | } |
| | |
| | | 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}`) |
| | |
| | | } |
| | | // 提交访客信息 |
| | | 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{ |
| | |
| | | <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> |
| | |
| | | > |
| | | <el-form :model="dealForm" ref="dealForm" > |
| | | <!-- <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 == 0"> |
| | | <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" |
| | |
| | | </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" |
| | |
| | | </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 |
| | |
| | | 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 |
| | |
| | | > |
| | | </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 => { |
| | |
| | | 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" |
| | | > |
| | |
| | | @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 |
| | |
| | | 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"> |
| | |
| | | </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.status == 0" style="color: rgb(127, 178, 53)" |
| | | >正常</span |
| | | > |
| | | <span v-else style="color: rgb(234, 54, 38)">取消</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="100px" |
| | | ></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.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> |
| | | <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> |
| | | |
| | |
| | | name: 'Bookings', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaBookingsWindow, OperaBookingsDetailWindow }, |
| | | data () { |
| | | data() { |
| | | return { |
| | | date: [], |
| | | // 搜索 |
| | |
| | | link: 'https://dmtest.ahapp.net/meeting_h5/' // H5_LINK_ADDR |
| | | } |
| | | }, |
| | | provide () { |
| | | provide() { |
| | | return { |
| | | rooms: () => this.rooms |
| | | } |
| | | }, |
| | | created () { |
| | | created() { |
| | | this.config({ |
| | | module: '会议室预定信息表', |
| | | api: '/meeting/bookings', |
| | |
| | | this.changeRadio('0') |
| | | }, |
| | | methods: { |
| | | changeRadio (e) { |
| | | changeRadio(e) { |
| | | if (e === '0') { |
| | | this.searchForm.startTime = timeForMat(0)[0] |
| | | this.searchForm.endTime = timeForMat(0)[1] |
| | |
| | | } |
| | | this.search() |
| | | }, |
| | | newTree (tree) { |
| | | newTree(tree) { |
| | | if (tree == null) { |
| | | return [] |
| | | } |
| | |
| | | return newItem |
| | | }) |
| | | }, |
| | | selectDate (v) { |
| | | selectDate(v) { |
| | | this.searchForm.endTime = v[1] + ' 23:59:59' |
| | | this.searchForm.startTime = v[0] + ' 00:00:00' |
| | | this.searchForm.radio = null |
| | | }, |
| | | reset () { |
| | | reset() { |
| | | this.$refs.searchForm.resetFields() |
| | | this.date = [] |
| | | this.searchForm.radio = '0' |
| | |
| | | this.searchForm.endTime = '' |
| | | this.changeRadio('0') |
| | | }, |
| | | copy (row) { |
| | | copy(row) { |
| | | const text = `${row.realName} 邀请您加入会议\n会议主题:${row.name}\n会议室:${row.roomName}\n会议时间:${row.meetingTime}\n点击链接直接加入会议:\n${this.link}?id=${row.id}` |
| | | this.$copyText(text) |
| | | .then(() => { |
| | | this.$message.success('会议信息复制成功,去分享给同事吧~') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }, |
| | | cancelMeeting (id) { |
| | | cancelMeeting(id) { |
| | | this.$dialog.messageWaring('取消会议', '是否取消当前会议?') |
| | | .then(() => { |
| | | cancelById({ id }) |
| | |
| | | this.handlePageChange() |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }) |
| | | }, |
| | | showDetail (id) { |
| | | showDetail(id) { |
| | | bookingsDetail(id) |
| | | .then(res => { |
| | | this.$refs.operaBookingsDetailWindow.open('会议详情', res) |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }, |
| | | editBookings (id) { |
| | | editBookings(id) { |
| | | bookingsDetail(id) |
| | | .then(res => { |
| | | this.$refs.operaBookingsWindow.open('编辑会议预约', res) |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error(e) |
| | | }) |
| | | }, |
| | | handlePageChange (pageIndex) { |
| | | handlePageChange(pageIndex) { |
| | | this.__checkApi() |
| | | this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex |
| | | this.isWorking.search = true |
| | |
| | | } |
| | | } |
| | | </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 } |
| | | }) |
| | | .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 }, |
| | | 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> |
| | | |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | <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 } from '@/api/business/carUseBook' |
| | | 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(() => { |
| | |
| | | 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) |
| | | return |
| | |
| | | }) |
| | | }, |
| | | 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> |
| | |
| | | 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) |
| | |
| | | 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 ) |
| | | } |
| | | } |
| | | wxAuthorize({ |
| | | code: code |
| | | code: code, |
| | | source |
| | | }).then(res => { |
| | | console.log('app_ress', res) |
| | | if (res.code === 200) { |
| | |
| | | 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;
|
| | |
| | | "path": "pages/staffLogin/login",
|
| | | "style": {
|
| | | "navigationBarTitleText": "登录",
|
| | | "enablePullDownRefresh": false,
|
| | | "navigationStyle": "custom"
|
| | | "enablePullDownRefresh": false |
| | | }
|
| | | },
|
| | | {
|
| | |
| | | :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"> |
| | |
| | | </view> |
| | | <u-icon name="arrow-right" size="24" color="#979797" /> |
| | | </view> |
| | | <view class="item" @click="jump('/pages/staffLogin/login')"> |
| | | <view class="item" @click="staffLogin"> |
| | | <image class="avatar" src="@/static/ic_staff@2x.png" /> |
| | | <view class="content"> |
| | | <view class="name">我是员工</view> |
| | |
| | | export default { |
| | | methods: { |
| | | jump(url) { |
| | | console.log(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' |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | line-height: 66rpx; |
| | | margin-bottom: 16rpx; |
| | | } |
| | | .place{ |
| | | .place { |
| | | margin-bottom: 98rpx; |
| | | } |
| | | .item { |
| | |
| | | <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> |
| | |
| | | data() { |
| | | return { |
| | | userInfo: uni.getStorageSync('userInfo'), |
| | | taskNum: 0 |
| | | taskInfo: 0 |
| | | } |
| | | }, |
| | | onLoad() { |
| | | console.log('userInfo', this.userInfo) |
| | | }, |
| | | onShow() { |
| | | if (this.userInfo && this.userInfo.memberId) { |
| | |
| | | }, |
| | | 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;
|
| | |
| | | color: #f62710; |
| | | padding: 0rpx 6rpx; |
| | | margin-left: 8rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | } |
| | | } |
| | |
| | | <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({ |
| | |
| | | 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; |
| | |
| | | <view class="item"> |
| | | <view class="name"> |
| | | 参会人员 |
| | | <text class="star">*</text> |
| | | <text class="star"></text> |
| | | </view> |
| | | <view class="line" @click="selPeople"> |
| | | <view class="label"> |
| | |
| | | }) |
| | | }, |
| | | 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`, |
| | |
| | | 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.$set(this.search, 'noRead', val) |
| | | this.getList() |
| | | }, |
| | | modalReset() { |
| | | this.modelParam = {} |
| | | this.pagination.page = 0 |
| | | this.dataList = [] |
| | | this.showFilter = false |
| | | this.getList() |
| | | }, |
| | | modalSub() { |
| | |
| | | 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 { |
| | |
| | | <u-datetime-picker |
| | | :show="isShowDatetime" |
| | | @confirm="confirmDate" |
| | | :minDate="new Date(param.startTime).getTime()" |
| | | :maxDate="new Date(param.endTime).getTime()" |
| | | @cancel="isShowDatetime = false" |
| | | mode="datetime" |
| | | ></u-datetime-picker> |
| | |
| | | </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; |
| | |
| | | }) |
| | | } |
| | | if (data.code === 5112) { |
| | | uni.clearStorageSync() |
| | | uni.navigateTo({ |
| | | url: '/pages/login/login' |
| | | }) |