| | |
| | | data |
| | | }) |
| | | } |
| | | // 会议室 h5详情 |
| | | export const getAppRoomDetail = (id) => { |
| | | return http({ |
| | | url: 'meetingAdmin/cloudService/business/bookings/'+id, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | // 会议室 管理 |
| | | export const myMeetingPage = (data) => { |
| | | return http({ |
| | |
| | | data |
| | | }) |
| | | } |
| | | // 会议室 当月 |
| | | export const monthMeetingPage = (data) => { |
| | | return http({ |
| | | url: 'meetingAdmin/cloudService/web/meeting/monthMeeting', |
| | | method: 'get', |
| | | data |
| | | }) |
| | | } |
| | | // 会议室 修改 |
| | | export const updateById = (data) => { |
| | | return http({ |
| | | url: 'meetingAdmin/cloudService/business/rooms/updateById', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 会议室 撤回 |
| | | export const cancelById = (data) => { |
| | | return http({ |
| | | url: 'meetingAdmin/cloudService/business/meeting/reservationCancel', |
| | | method: 'get', |
| | | data |
| | | }) |
| | | } |
| | |
| | | url: 'visitsAdmin/cloudService/business/carUseBook/'+id, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | // 查询车辆 派车记录 审批 |
| | | export const carUseBookAppr = (data) => { |
| | | return http({ |
| | | url: 'visitsAdmin/cloudService/business/approve/approved', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 查询车辆 派车记录 撤销申请 |
| | | export const carUseBookBack = (data) => { |
| | | return http({ |
| | | url: 'visitsAdmin/cloudService/business/carUseBook/revoke', |
| | | method: 'get', |
| | | data |
| | | }) |
| | | } |
| | | // 查询车辆 司机列表 |
| | | export const driveListPost = (data) => { |
| | | return http({ |
| | | url: 'visitsAdmin/cloudService/business/member/driveList', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | |
| | | <template>
|
| | | <view class="main_app">
|
| | | <view class="tabs">
|
| | | <view class="tab" :class="{ active: activeTab === '0' }" @click="tabClick('0')">
|
| | | <text class="name">会议日历</text>
|
| | | <view class="line"></view>
|
| | | </view>
|
| | | <view class="tab" :class="{ active: activeTab === '1' }" @click="tabClick('1')">
|
| | | <text class="name">预约记录</text>
|
| | | <view class="line"></view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- -->
|
| | | <template v-if="activeTab == '0'">
|
| | | <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
|
| | | <!-- 日历 -->
|
| | | <view class="container_b">
|
| | | <Calendar
|
| | | ref="Calendar"
|
| | | :currentTime="currentTime1"
|
| | | :mark="mark"
|
| | | :showLunar="false"
|
| | | @dayChange="dayChange"
|
| | | @monthChange="monthChange"
|
| | | :rangeMode="false"
|
| | | :maskColor="'#ffffff'"
|
| | | :dateStart="dateStart"
|
| | | :dateEnd="dateEnd"
|
| | | :canDrag="false"
|
| | | ></Calendar>
|
| | | </view>
|
| | | <!-- -->
|
| | | <view class="card_list">
|
| | | <view class="card_title">
|
| | | <view class="name">
|
| | | <view class="icon"></view>
|
| | | <view class="text">今日会议</view>
|
| | | </view>
|
| | | <view class="meeting">
|
| | | <view class="text mr24">全部会议室</view>
|
| | | <u-icon name="arrow-down" size="12" color="#999999" />
|
| | | </view>
|
| | | </view>
|
| | | <view class="list">
|
| | | <view class="item">
|
| | | <view class="head">
|
| | | <view class="name">aaaaa选型</view>
|
| | | <view class="status">即将开始</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议时间:</view>
|
| | | <view class="value">12:00-12</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议室:</view>
|
| | | <view class="value">202会议室</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">预约人:</view>
|
| | | <view class="value">杨某某</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">备注:</view>
|
| | | <view class="value">--</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | | <!-- -->
|
| | | <template v-if="activeTab === '1'">
|
| | | <view class="card_list">
|
| | | <view class="list">
|
| | | <view class="item" v-for="item in recordList" :key="item.id" @click="handleDetail(item.id)">
|
| | | <view class="head">
|
| | | <view class="name">{{ item.meetingName }}</view>
|
| | | <view class="status" v-if="item.meetingStatus == '1'">未开始</view>
|
| | | <view class="status red" v-if="item.meetingStatus == '2'">进行中</view>
|
| | | <view class="status" v-if="item.meetingStatus == '3'">已结束</view>
|
| | | <view class="status padding" v-if="item.meetingStatus == '4'">即将开始</view>
|
| | | <view class="status" v-if="item.meetingStatus == '5'">已撤销</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议时间:</view>
|
| | | <view class="value">{{ item.meetingTime }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议室:</view>
|
| | | <view class="value">{{ item.roomName }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">预约人:</view>
|
| | | <view class="value">{{ item.bookingUser }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">备注:</view>
|
| | | <view class="value">{{ item.remark }}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | | </view>
|
| | | <view class="main_app">
|
| | | <view class="tabs">
|
| | | <view
|
| | | class="tab"
|
| | | :class="{ active: activeTab === '0' }"
|
| | | @click="tabClick('0')"
|
| | | >
|
| | | <text class="name">会议日历</text>
|
| | | <view class="line"></view>
|
| | | </view>
|
| | | <view
|
| | | class="tab"
|
| | | :class="{ active: activeTab === '1' }"
|
| | | @click="tabClick('1')"
|
| | | >
|
| | | <text class="name">预约记录</text>
|
| | | <view class="line"></view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- -->
|
| | | <template v-if="activeTab == '0'">
|
| | | <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
|
| | | <!-- 日历 -->
|
| | | <view class="container_b">
|
| | | <Calendar
|
| | | ref="Calendar"
|
| | | :currentTime="currentDate"
|
| | | :mark="monthMark"
|
| | | :showLunar="false"
|
| | | @dayChange="dayChange"
|
| | | @monthChange="monthChange"
|
| | | :rangeMode="false"
|
| | | :maskColor="'#ffffff'"
|
| | | :dateStart="dateStart"
|
| | | :dateEnd="dateEnd"
|
| | | :canDrag="false"
|
| | | ></Calendar>
|
| | | </view>
|
| | | <!-- -->
|
| | | <view class="card_list">
|
| | | <view class="card_title">
|
| | | <view class="name">
|
| | | <view class="icon"></view>
|
| | | <view class="text">今日会议</view>
|
| | | </view>
|
| | | <view class="meeting">
|
| | | <view class="text mr24" @click="isShowStatus = true">{{
|
| | | activeRoom.name
|
| | | }}</view>
|
| | | <u-icon name="arrow-down" size="12" color="#999999" />
|
| | | </view>
|
| | | </view>
|
| | | <view class="list">
|
| | | <view
|
| | | @click="handleDetail(item.id)"
|
| | | class="item"
|
| | | v-for="item in myMeetingList"
|
| | | :key="item.id"
|
| | | >
|
| | | <view class="head">
|
| | | <view class="name">{{ item.meetingName }}</view>
|
| | | <view class="status" v-if="item.meetingStatus == '1'"
|
| | | >未开始</view
|
| | | >
|
| | | <view class="status red" v-if="item.meetingStatus == '2'"
|
| | | >进行中</view
|
| | | >
|
| | | <view class="status" v-if="item.meetingStatus == '3'"
|
| | | >已结束</view
|
| | | >
|
| | | <view class="status padding" v-if="item.meetingStatus == '4'"
|
| | | >即将开始</view
|
| | | >
|
| | | <view class="status" v-if="item.meetingStatus == '5'"
|
| | | >已撤销</view
|
| | | >
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议时间:</view>
|
| | | <view class="value">{{ item.meetingTime }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议室:</view>
|
| | | <view class="value">{{ item.roomName }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">预约人:</view>
|
| | | <view class="value">{{ item.bookingUser }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">备注:</view>
|
| | | <view class="value">{{ item.remark || item.meetingRemark }}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | | <!-- -->
|
| | | <template v-if="activeTab === '1'">
|
| | | <view class="card_list">
|
| | | <view class="list">
|
| | | <view
|
| | | class="item"
|
| | | v-for="item in recordList"
|
| | | :key="item.id"
|
| | | @click="handleDetail(item.id)"
|
| | | >
|
| | | <view class="head">
|
| | | <view class="name">{{ item.meetingName }}</view>
|
| | | <view class="status" v-if="item.meetingStatus == '1'"
|
| | | >未开始</view
|
| | | >
|
| | | <view class="status red" v-if="item.meetingStatus == '2'"
|
| | | >进行中</view
|
| | | >
|
| | | <view class="status" v-if="item.meetingStatus == '3'"
|
| | | >已结束</view
|
| | | >
|
| | | <view class="status padding" v-if="item.meetingStatus == '4'"
|
| | | >即将开始</view
|
| | | >
|
| | | <view class="status" v-if="item.meetingStatus == '5'"
|
| | | >已撤销</view
|
| | | >
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议时间:</view>
|
| | | <view class="value">{{ item.meetingTime }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议室:</view>
|
| | | <view class="value">{{ item.roomName }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">预约人:</view>
|
| | | <view class="value">{{ item.bookingUser }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">备注:</view>
|
| | | <view class="value">{{ item.remark || item.meetingRemark }}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <u-picker
|
| | | keyName="name"
|
| | | :show="isShowStatus"
|
| | | :columns="meetingList"
|
| | | @confirm="seletedStatus"
|
| | | @cancel="isShowStatus = false"
|
| | | ></u-picker>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import Calendar from '@/components/Li-Calendar/Li-Calendar.vue';
|
| | | import { getDay } from '@/utils/utils.js';
|
| | | import { myMeetingPage } from '@/api'
|
| | | import Calendar from '@/components/Li-Calendar/Li-Calendar.vue'
|
| | | import dayja from 'dayjs'
|
| | | import { myMeetingPage, monthMeetingPage, roomsListPost } from '@/api'
|
| | | function getDate(date, AddDayCount = 0) {
|
| | | if (!date) {
|
| | | date = new Date();
|
| | | }
|
| | | if (typeof date !== 'object') {
|
| | | date = date.replace(/-/g, '/');
|
| | | }
|
| | | const dd = new Date(date);
|
| | | if (!date) {
|
| | | date = new Date()
|
| | | }
|
| | | if (typeof date !== 'object') {
|
| | | date = date.replace(/-/g, '/')
|
| | | }
|
| | | const dd = new Date(date)
|
| | |
|
| | | dd.setDate(dd.getDate() + AddDayCount); // 获取AddDayCount天后的日期
|
| | | dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
|
| | |
|
| | | const y = dd.getFullYear();
|
| | | const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1; // 获取当前月份的日期,不足10补0
|
| | | const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate(); // 获取当前几号,不足10补0
|
| | | return {
|
| | | fullDate: y + '-' + m + '-' + d,
|
| | | year: y,
|
| | | month: m,
|
| | | date: d,
|
| | | day: dd.getDay()
|
| | | };
|
| | | const y = dd.getFullYear()
|
| | | const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
|
| | | const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
|
| | | return {
|
| | | fullDate: y + '-' + m + '-' + d,
|
| | | year: y,
|
| | | month: m,
|
| | | date: d,
|
| | | day: dd.getDay()
|
| | | }
|
| | | }
|
| | | export default {
|
| | | components: {
|
| | | Calendar
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | activeTab: '0',
|
| | | recordList: [],
|
| | | recordPage: 1,
|
| | | currentTime1: '',
|
| | | dateStart: '1999-05-01',
|
| | | dateEnd: '2999-06-15',
|
| | | mark: [],
|
| | | selected: [
|
| | | {
|
| | | date: getDate(new Date(), -3).fullDate
|
| | | // info: '打卡'
|
| | | },
|
| | | {
|
| | | date: getDate(new Date(), -2).fullDate,
|
| | | // info: '签到',
|
| | | data: {
|
| | | custom: '自定义信息',
|
| | | name: '自定义消息头'
|
| | | }
|
| | | },
|
| | | {
|
| | | date: getDate(new Date(), -1).fullDate,
|
| | | info: '已打卡'
|
| | | }
|
| | | ],
|
| | | components: {
|
| | | Calendar
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | activeTab: '0',
|
| | | recordList: [],
|
| | | recordPage: 1,
|
| | | myPage: 1,
|
| | | myMeetingList: [],
|
| | | currentDate: '',
|
| | | dateStart: '1999-05-01',
|
| | | dateEnd: '2999-06-15',
|
| | | monthMark: [],
|
| | |
|
| | | };
|
| | | isShowStatus: false,
|
| | | activeRoom: {
|
| | | name: '全部会议室',
|
| | | id: ''
|
| | | },
|
| | | meetingList: [],
|
| | |
|
| | | }
|
| | | },
|
| | | onLoad() {
|
| | | this.currentDate = dayja().format('YYYY-MM-DD')
|
| | | this.initData()
|
| | | this.getRoomList()
|
| | | },
|
| | | onShow() {
|
| | | this.tabClick('0')
|
| | | },
|
| | | methods: {
|
| | | tabClick(val) {
|
| | | this.activeTab = val;
|
| | | if(val === '1'){
|
| | | this.getRecordList()
|
| | | }else{
|
| | | this.getList()
|
| | | }
|
| | | },
|
| | | handleDetail(id) {
|
| | | uni.navigateTo({
|
| | | url: `/pages/staff/meetingDetail?id=${id}`,
|
| | | // url: `/pages/staff/meetingDetail`
|
| | | });
|
| | | },
|
| | | changeCalendar(e) {
|
| | | console.log(e);
|
| | | },
|
| | | // 点击某天
|
| | | dayChange(data) {
|
| | | console.log(data);
|
| | | let date = data.time;
|
| | | let yyyy = data.time.substring(0, 4);
|
| | | let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')));
|
| | | let dd = Number(data.time.substring(data.time.lastIndexOf('-') + 1, data.time.length));
|
| | | mm = mm < 10 ? `0${mm}` : mm;
|
| | | dd = dd < 10 ? `0${dd}` : dd;
|
| | | let riqi = `${yyyy}-${mm}-${dd}`;
|
| | | this.currentTime = riqi;
|
| | | this.list = [];
|
| | | this.next = false;
|
| | | this.page = 0;
|
| | | // this.getRoomList()
|
| | | },
|
| | | // 下一月
|
| | | monthChange(data) {
|
| | | let date = data.date.replace(/[/]/g, '-');
|
| | | let yyyy = date.substring(0, 4);
|
| | | let mm = Number(date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')));
|
| | | let dd = Number(date.substring(date.lastIndexOf('-') + 1, date.length));
|
| | | mm = mm < 10 ? `0${mm}` : mm;
|
| | | dd = dd < 10 ? `0${dd}` : dd;
|
| | | let riqi = `${yyyy}-${mm}-${dd}`;
|
| | | console.log('日期', riqi);
|
| | | this.currentTime1 = riqi;
|
| | | // this.getDateNum()
|
| | | },
|
| | | getList(){},
|
| | | getRecordList() {
|
| | | const { activeStatus } = this
|
| | | onReachBottom() {
|
| | | const { activeTab } = this
|
| | | if (activeTab == '0') {
|
| | | this.myPage = this.myPage + 1
|
| | | this.getDayMeeting()
|
| | | } else {
|
| | | this.recordPage = this.recordPage + 1
|
| | | this.getRecordList()
|
| | | }
|
| | | },
|
| | | methods: {
|
| | | initData() {
|
| | | // 当月数据
|
| | | monthMeetingPage({
|
| | | yearMonth: this.currentDate.slice(0, 7)
|
| | | }).then(res => {
|
| | | this.monthMark = res.data.filter(i => i.meetingNum > 0).map(j => {
|
| | | return {
|
| | | time: j.monthDate,
|
| | | pointText: j.meetingNum,
|
| | | pointTextColor: 'red'
|
| | | }
|
| | | })
|
| | | })
|
| | | },
|
| | | getRoomList() {
|
| | | roomsListPost({}).then(res => {
|
| | | this.meetingList = [[{ id: '', name: '全部会议室' }, ...res.data]]
|
| | | console.log('meetingList', this.meetingList);
|
| | | })
|
| | | },
|
| | | tabClick(val) {
|
| | | this.activeTab = val
|
| | | if (val === '1') {
|
| | | this.recordPage = 1
|
| | | this.getRecordList()
|
| | | } else {
|
| | | this.myMeetingList = []
|
| | | this.activeRoom = {
|
| | | name: '全部会议室',
|
| | | id: ''
|
| | | }
|
| | | this.myPage = 1
|
| | | this.getDayMeeting()
|
| | | }
|
| | | },
|
| | | seletedStatus(e) {
|
| | | this.myMeetingList = []
|
| | | this.activeRoom = { ...e.value[0] }
|
| | | this.isShowStatus = false
|
| | | this.getDayMeeting()
|
| | | },
|
| | | handleDetail(id) {
|
| | | uni.navigateTo({
|
| | | url: `/pages/staff/meetingDetail?id=${id}`,
|
| | | // url: `/pages/staff/meetingDetail`
|
| | | })
|
| | | },
|
| | | changeCalendar(e) {
|
| | | console.log(e)
|
| | | },
|
| | | // 点击某天
|
| | | dayChange(data) {
|
| | | let date = data.time
|
| | | let yyyy = data.time.substring(0, 4)
|
| | | let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')))
|
| | | let dd = Number(data.time.substring(data.time.lastIndexOf('-') + 1, data.time.length))
|
| | | mm = mm < 10 ? `0${mm}` : mm
|
| | | dd = dd < 10 ? `0${dd}` : dd
|
| | | let riqi = `${yyyy}-${mm}-${dd}`
|
| | | this.currentDate = riqi
|
| | | this.myMeetingList = []
|
| | | this.activeStatus = {
|
| | | name: '全部会议室',
|
| | | key: ''
|
| | | }
|
| | | this.myPage = 1
|
| | | this.getDayMeeting()
|
| | | },
|
| | | // 下一月
|
| | | monthChange(data) {
|
| | | let date = data.date.replace(/[/]/g, '-')
|
| | | let yyyy = date.substring(0, 4)
|
| | | let mm = Number(date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')))
|
| | | let dd = Number(date.substring(date.lastIndexOf('-') + 1, date.length))
|
| | | mm = mm < 10 ? `0${mm}` : mm
|
| | | dd = dd < 10 ? `0${dd}` : dd
|
| | | let riqi = `${yyyy}-${mm}-${dd}`
|
| | | console.log('日期', riqi)
|
| | | this.currentDate = riqi
|
| | | this.initData()
|
| | | },
|
| | | getRecordList() {
|
| | | const { activeStatus } = this
|
| | | myMeetingPage({
|
| | | capacity: 10,
|
| | | page: this.recordPage,
|
| | | model: {
|
| | | // status: activeStatus.key || null,
|
| | | // status: activeStatus.key || null,
|
| | | // roomsId: this.roomId,
|
| | | queryType: 2
|
| | | }
|
| | | }).then(res => {
|
| | | this.recordList = res.data.records
|
| | | })
|
| | | this.recordList = [...this.recordList, ...res.data.records]
|
| | | })
|
| | | },
|
| | | }
|
| | | getDayMeeting() {
|
| | | const { myPage, activeRoom, currentDate } = this
|
| | | // 当天我参与的会议
|
| | | myMeetingPage({
|
| | | model: {
|
| | | queryType: '1',
|
| | | roomsId: activeRoom.id,
|
| | | queryDate: currentDate
|
| | | },
|
| | | page: myPage,
|
| | | capacity: 10
|
| | | }).then(res => {
|
| | | this.myMeetingList = [ ...this.myMeetingList, ...res.data.records ]
|
| | | })
|
| | | },
|
| | | }
|
| | | };
|
| | | </script>
|
| | |
|
| | | <style lang="scss">
|
| | | page {
|
| | | background-color: #f7f7f7;
|
| | | background-color: #f7f7f7;
|
| | | }
|
| | | .main_app {
|
| | | padding: 0;
|
| | | background-color: #f7f7f7;
|
| | | ::v-deep .uni-calendar-item--checked {
|
| | | background-color: $uni-color-primary;
|
| | | border-radius: 8rpx;
|
| | | }
|
| | | ::v-deep .uni-calendar-item--isDay-text {
|
| | | color: $uni-color-primary;
|
| | | }
|
| | | ::v-deep .uni-calendar-item--isDay {
|
| | | background-color: $uni-color-primary;
|
| | | color: #fff;
|
| | | border-radius: 8rpx;
|
| | | }
|
| | | .tabs {
|
| | | display: flex;
|
| | | background-color: #fff;
|
| | | .tab {
|
| | | flex: 1;
|
| | | height: 88rpx;
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | font-size: 28rpx;
|
| | | color: #666666;
|
| | | position: relative;
|
| | | .line {
|
| | | width: 60rpx;
|
| | | height: 4rpx;
|
| | | background: #fff;
|
| | | border-radius: 3rpx;
|
| | | position: absolute;
|
| | | bottom: 0;
|
| | | left: 50%;
|
| | | transform: translate(-50%, 0);
|
| | | }
|
| | | }
|
| | | .active {
|
| | | font-weight: 500;
|
| | | font-size: 30rpx;
|
| | | color: #222222;
|
| | | .line {
|
| | | background-color: $uni-color-primary;
|
| | | }
|
| | | }
|
| | | }
|
| | | //
|
| | | .card_list {
|
| | | padding: 30rpx;
|
| | | .card_title {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | margin-bottom: 22rpx;
|
| | | .name {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | .icon {
|
| | | width: 6rpx;
|
| | | height: 32rpx;
|
| | | background: $uni-color-primary;
|
| | | border-radius: 4rpx;
|
| | | margin-right: 16rpx;
|
| | | }
|
| | | .text {
|
| | | font-weight: 600;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | }
|
| | | }
|
| | | .meeting {
|
| | | display: flex;
|
| | | height: 52rpx;
|
| | | line-height: 52rpx;
|
| | | background: #ffffff;
|
| | | border-radius: 26rpx;
|
| | | border: 2rpx solid #eeeeee;
|
| | | padding: 0 24rpx;
|
| | | .text {
|
| | | font-size: 24rpx;
|
| | | color: #333333;
|
| | | }
|
| | | }
|
| | | }
|
| | | .list {
|
| | | .item {
|
| | | padding: 0rpx 30rpx 30rpx;
|
| | | background: #ffffff;
|
| | | border-radius: 8rpx;
|
| | | margin-bottom: 24rpx;
|
| | | .head {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | border-bottom: 1rpx solid #e5e5e5;
|
| | | padding: 22rpx 0;
|
| | | margin-bottom: 22rpx;
|
| | | .name {
|
| | | font-weight: 600;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | }
|
| | | .status {
|
| | | height: 38rpx;
|
| | | line-height: 38rpx;
|
| | | padding: 0 16rpx;
|
| | | border-radius: 4rpx;
|
| | | border: 1rpx solid #999999;
|
| | | font-size: 22rpx;
|
| | | color: #999999;
|
| | | }
|
| | | .padding{
|
| | | color: $uni-color-primary;
|
| | | border: 1rpx solid $uni-color-primary;
|
| | | }
|
| | | .red{
|
| | | color: #e23f29;
|
| | | border: 1rpx solid #e23f29;
|
| | | }
|
| | | }
|
| | | .line {
|
| | | display: flex;
|
| | | margin-bottom: 12rpx;
|
| | | .label {
|
| | | width: 140rpx;
|
| | | color: #666666;
|
| | | }
|
| | | .value {
|
| | | flex: 1;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | padding: 0;
|
| | | background-color: #f7f7f7;
|
| | | ::v-deep .uni-calendar-item--checked {
|
| | | background-color: $uni-color-primary;
|
| | | border-radius: 8rpx;
|
| | | }
|
| | | ::v-deep .uni-calendar-item--isDay-text {
|
| | | color: $uni-color-primary;
|
| | | }
|
| | | ::v-deep .uni-calendar-item--isDay {
|
| | | background-color: $uni-color-primary;
|
| | | color: #fff;
|
| | | border-radius: 8rpx;
|
| | | }
|
| | | .tabs {
|
| | | display: flex;
|
| | | background-color: #fff;
|
| | | .tab {
|
| | | flex: 1;
|
| | | height: 88rpx;
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | font-size: 28rpx;
|
| | | color: #666666;
|
| | | position: relative;
|
| | | .line {
|
| | | width: 60rpx;
|
| | | height: 4rpx;
|
| | | background: #fff;
|
| | | border-radius: 3rpx;
|
| | | position: absolute;
|
| | | bottom: 0;
|
| | | left: 50%;
|
| | | transform: translate(-50%, 0);
|
| | | }
|
| | | }
|
| | | .active {
|
| | | font-weight: 500;
|
| | | font-size: 30rpx;
|
| | | color: #222222;
|
| | | .line {
|
| | | background-color: $uni-color-primary;
|
| | | }
|
| | | }
|
| | | }
|
| | | //
|
| | | .card_list {
|
| | | padding: 30rpx;
|
| | | .card_title {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | margin-bottom: 22rpx;
|
| | | .name {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | .icon {
|
| | | width: 6rpx;
|
| | | height: 32rpx;
|
| | | background: $uni-color-primary;
|
| | | border-radius: 4rpx;
|
| | | margin-right: 16rpx;
|
| | | }
|
| | | .text {
|
| | | font-weight: 600;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | }
|
| | | }
|
| | | .meeting {
|
| | | display: flex;
|
| | | height: 52rpx;
|
| | | line-height: 52rpx;
|
| | | background: #ffffff;
|
| | | border-radius: 26rpx;
|
| | | border: 2rpx solid #eeeeee;
|
| | | padding: 0 24rpx;
|
| | | .text {
|
| | | font-size: 24rpx;
|
| | | color: #333333;
|
| | | }
|
| | | }
|
| | | }
|
| | | .list {
|
| | | .item {
|
| | | padding: 0rpx 30rpx 30rpx;
|
| | | background: #ffffff;
|
| | | border-radius: 8rpx;
|
| | | margin-bottom: 24rpx;
|
| | | .head {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | border-bottom: 1rpx solid #e5e5e5;
|
| | | padding: 22rpx 0;
|
| | | margin-bottom: 22rpx;
|
| | | .name {
|
| | | font-weight: 600;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | }
|
| | | .status {
|
| | | height: 38rpx;
|
| | | line-height: 38rpx;
|
| | | padding: 0 16rpx;
|
| | | border-radius: 4rpx;
|
| | | border: 1rpx solid #999999;
|
| | | font-size: 22rpx;
|
| | | color: #999999;
|
| | | }
|
| | | .padding {
|
| | | color: $uni-color-primary;
|
| | | border: 1rpx solid $uni-color-primary;
|
| | | }
|
| | | .red {
|
| | | color: #e23f29;
|
| | | border: 1rpx solid #e23f29;
|
| | | }
|
| | | }
|
| | | .line {
|
| | | display: flex;
|
| | | margin-bottom: 12rpx;
|
| | | .label {
|
| | | width: 140rpx;
|
| | | color: #666666;
|
| | | }
|
| | | .value {
|
| | | flex: 1;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | .container_b {
|
| | | width: 100%;
|
| | | padding: 30rpx;
|
| | | background: #ffffff;
|
| | | padding-top: 20rpx;
|
| | | box-sizing: border-box;
|
| | | width: 100%;
|
| | | padding: 30rpx;
|
| | | background: #ffffff;
|
| | | padding-top: 20rpx;
|
| | | box-sizing: border-box;
|
| | | }
|
| | | </style>
|
| | |
| | | <template> |
| | | <view class="main_app"> |
| | | <view class="head_app"> |
| | | <view class="title">讨论智能会议室系统选型</view> |
| | | <view class="text">201会议室|2023年5月4日 10:00-12:00</view> |
| | | </view> |
| | | <!-- --> |
| | | <view class="empty"></view> |
| | | <view class="module_list"> |
| | | <view class="item"> |
| | | <view class="label">会议内容</view> |
| | | <view class="value"> |
| | | <!-- <text>主要讨论智能会议室系统选型,请大家一定要按时来开会,时间宝贵。感谢大家!</text> --> |
| | | <u-textarea border="none" v-model="param.aaa" count :maxlength="300" placeholder="请输入会议内容" placeholder-class="placeholder9" /> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">参会人员</view> |
| | | <view class="value"> |
| | | <view class="personnel"> |
| | | <view class="per_item" v-for="i in 10"> |
| | | <image src="../../static/logo@2x.png" class="avatar" mode=""></image> |
| | | <view class="name">胡八一</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">服务项</view> |
| | | <view class="value">席卡 | 投影仪 | 笔记本电脑</view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">备注</view> |
| | | <view class="value">今天人多,请按时参加</view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">预约人</view> |
| | | <view class="value">行政部 赵强 18832319899</view> |
| | | </view> |
| | | </view> |
| | | <view class="empty empty2"></view> |
| | | <view class="main_footer"> |
| | | <view class="btn" @click="handleSub('0')">撤回</view> |
| | | <view class="btn agree" @click="handleSub('1')">修改</view> |
| | | </view> |
| | | </view> |
| | | <view class="main_app"> |
| | | <view class="head_app"> |
| | | <view class="title">{{ detail.meetingName }}</view> |
| | | <view class="text" |
| | | >{{ detail.roomName }}|{{ detail.meetingDate }} |
| | | {{ detail.meetingTime }}</view |
| | | > |
| | | </view> |
| | | <!-- --> |
| | | <view class="empty"></view> |
| | | <view class="module_list"> |
| | | <view class="item"> |
| | | <view class="label">会议内容</view> |
| | | <view class="value"> |
| | | <!-- <text>主要讨论智能会议室系统选型,请大家一定要按时来开会,时间宝贵。感谢大家!</text> --> |
| | | <u-textarea |
| | | border="none" |
| | | v-model="detail.meetingContent" |
| | | disabled |
| | | :maxlength="300" |
| | | placeholder="请输入会议内容" |
| | | placeholder-class="placeholder9" |
| | | /> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">参会人员</view> |
| | | <view class="value"> |
| | | <view class="personnel"> |
| | | <view |
| | | class="per_item" |
| | | v-for="mem in detail.userResponseList" |
| | | :key="mem.id" |
| | | > |
| | | <image :src="mem.avatar" class="avatar" mode=""></image> |
| | | <view class="name">{{ mem.realname }}</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">服务项</view> |
| | | <view class="value"> |
| | | <template v-for="(ser, serI) in detail.projectsResponseList"> |
| | | <text :key="ser.id">{{ ser.name }}</text> |
| | | <text |
| | | :key="ser.id" |
| | | class="mr12 ml12" |
| | | v-if="serI != detail.projectsResponseList.length - 1" |
| | | > |
| | | | |
| | | </text> |
| | | </template> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">备注</view> |
| | | <view class="value">{{ detail.remark || detail.meetingRemark }}</view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">预约人</view> |
| | | <view class="value" |
| | | >{{ detail.bookingUser.companyName || "" }} |
| | | {{ detail.bookingUser.realname }} |
| | | {{ detail.bookingUser.mobile }}</view |
| | | > |
| | | </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 agree" @click="handleEdit">修改</view> |
| | | </view> |
| | | <view class="main_footer" v-if="detail.meetingStatus == '2'"> |
| | | <view class="btn agree" @click="handleSub('2')">结束</view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { meetingDetail } from '@/api' |
| | | export default { |
| | | data() { |
| | | return { |
| | | param: {}, |
| | | detail: {} |
| | | }; |
| | | }, |
| | | onLoad(option) { |
| | | this.id = option.id |
| | | this.getDetail() |
| | | }, |
| | | methods: { |
| | | getDetail() { |
| | | const { id } = this |
| | | meetingDetail({id}).then(res => { |
| | | this.detail = res.data |
| | | }) |
| | | }, |
| | | handleSub() { |
| | | |
| | | } |
| | | } |
| | | } |
| | | import { meetingDetail, cancelById } from '@/api' |
| | | export default { |
| | | data() { |
| | | return { |
| | | param: {}, |
| | | detail: {}, |
| | | id: '' |
| | | } |
| | | }, |
| | | onLoad(option) { |
| | | this.id = option.id |
| | | this.getDetail() |
| | | }, |
| | | methods: { |
| | | getDetail() { |
| | | const { id } = this |
| | | meetingDetail({ id }).then(res => { |
| | | 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() |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | handleEdit() { |
| | | const { id } = this |
| | | uni.navigateTo({ |
| | | url: `/pages/staff/meetingSubOrder?id=${id}` |
| | | }) |
| | | }, |
| | | handleSub() { |
| | | |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | page{ |
| | | background-color: #f7f7f7; |
| | | } |
| | | .main_app{ |
| | | padding: 0 ; |
| | | .head_app{ |
| | | padding: 30rpx; |
| | | background-color: #fff; |
| | | .title{ |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | | color: #222222; |
| | | margin-bottom: 30rpx; |
| | | } |
| | | .text{ |
| | | font-size: 28rpx; |
| | | color: #666666; |
| | | } |
| | | } |
| | | } |
| | | .module_list { |
| | | background-color: #fff; |
| | | padding: 0 30rpx; |
| | | .item { |
| | | padding: 30rpx 0; |
| | | border-bottom: 1rpx solid #E5E5E5; |
| | | |
| | | .label { |
| | | font-size: 26rpx; |
| | | color: #666666; |
| | | margin-bottom: 20rpx; |
| | | } |
| | | |
| | | .value { |
| | | font-size: 30rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | ::v-deep textarea{ |
| | | padding: 0; |
| | | background-color: #fff !important; |
| | | } |
| | | .personnel{ |
| | | display: flex; |
| | | width: 100%; |
| | | overflow-x: auto; |
| | | .per_item{ |
| | | flex-shrink: 0; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-right: 24rpx; |
| | | .avatar{ |
| | | width: 72rpx; |
| | | height: 72rpx; |
| | | border-radius: 50%; |
| | | } |
| | | .name{ |
| | | font-size: 26rpx; |
| | | color: #777777; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .main_footer { |
| | | padding-bottom: 64rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | background-color: #fff; |
| | | padding: 0 30rpx; |
| | | .btn { |
| | | width: 336rpx; |
| | | height: 88rpx; |
| | | line-height: 88rpx; |
| | | background: #FFFFFF; |
| | | border-radius: 44rpx; |
| | | border: 1rpx solid #999999; |
| | | font-size: 32rpx; |
| | | text-align: center; |
| | | margin: 16rpx 0; |
| | | } |
| | | |
| | | .agree { |
| | | background: $uni-color-primary; |
| | | color: #fff; |
| | | border: 1rpx solid $uni-color-primary; |
| | | } |
| | | } |
| | | .empty{ |
| | | width: 750rpx; |
| | | height: 20rpx; |
| | | background-color: #f7f7f7; |
| | | margin: 0 -30rpx; |
| | | page { |
| | | background-color: #f7f7f7; |
| | | } |
| | | .empty2{ |
| | | height: 280rpx !important; |
| | | .main_app { |
| | | padding: 0; |
| | | .head_app { |
| | | padding: 30rpx; |
| | | background-color: #fff; |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | | color: #222222; |
| | | margin-bottom: 30rpx; |
| | | } |
| | | .text { |
| | | font-size: 28rpx; |
| | | color: #666666; |
| | | } |
| | | } |
| | | } |
| | | .module_list { |
| | | background-color: #fff; |
| | | padding: 0 30rpx; |
| | | .item { |
| | | padding: 30rpx 0; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | | |
| | | .label { |
| | | font-size: 26rpx; |
| | | color: #666666; |
| | | margin-bottom: 20rpx; |
| | | } |
| | | |
| | | .value { |
| | | font-size: 30rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | ::v-deep textarea { |
| | | padding: 0; |
| | | background-color: #fff !important; |
| | | } |
| | | .personnel { |
| | | display: flex; |
| | | width: 100%; |
| | | overflow-x: auto; |
| | | .per_item { |
| | | flex-shrink: 0; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-right: 24rpx; |
| | | .avatar { |
| | | width: 72rpx; |
| | | height: 72rpx; |
| | | border-radius: 50%; |
| | | } |
| | | .name { |
| | | font-size: 26rpx; |
| | | color: #777777; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .main_footer { |
| | | padding-bottom: 64rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | background-color: #fff; |
| | | padding: 0 30rpx; |
| | | .btn { |
| | | flex: 1; |
| | | height: 88rpx; |
| | | line-height: 88rpx; |
| | | background: #ffffff; |
| | | border-radius: 44rpx; |
| | | border: 1rpx solid #999999; |
| | | font-size: 32rpx; |
| | | text-align: center; |
| | | margin: 16rpx 8rpx; |
| | | } |
| | | |
| | | .agree { |
| | | background: $uni-color-primary; |
| | | color: #fff; |
| | | border: 1rpx solid $uni-color-primary; |
| | | } |
| | | } |
| | | .empty { |
| | | width: 750rpx; |
| | | height: 20rpx; |
| | | background-color: #f7f7f7; |
| | | margin: 0 -30rpx; |
| | | } |
| | | .empty2 { |
| | | height: 280rpx !important; |
| | | } |
| | | </style> |
| | |
| | | <template>
|
| | | <view class="main_app">
|
| | | <!-- -->
|
| | | <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
|
| | | <!-- 日历 -->
|
| | | <view class="container_b">
|
| | | <Calendar
|
| | | ref="Calendar"
|
| | | :currentTime="currentDate"
|
| | | :mark="mark"
|
| | | :showLunar="false"
|
| | | @dayChange="dayChange"
|
| | | @monthChange="monthChange"
|
| | | :rangeMode="false"
|
| | | :maskColor="'#ffffff'"
|
| | | :dateStart="dateStart"
|
| | | :dateEnd="dateEnd"
|
| | | :canDrag="false"
|
| | | ></Calendar>
|
| | | </view>
|
| | | <!-- -->
|
| | | <view class="card_list">
|
| | | <view class="card_title">
|
| | | <view class="name">
|
| | | <view class="icon"></view>
|
| | | <view class="text">今日会议</view>
|
| | | </view>
|
| | | <view class="meeting" @click="isShowStatus = true">
|
| | | <view class="text mr24">{{ activeStatus.name }}</view>
|
| | | <u-icon name="arrow-down" size="12" color="#999999" />
|
| | | </view>
|
| | | <template>
|
| | | <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
|
| | | <!-- 日历 -->
|
| | | <view class="container_b">
|
| | | <Calendar
|
| | | ref="Calendar"
|
| | | :currentTime="currentDate"
|
| | | :mark="monthMark"
|
| | | :showLunar="false"
|
| | | @dayChange="dayChange"
|
| | | @monthChange="monthChange"
|
| | | :rangeMode="false"
|
| | | :maskColor="'#ffffff'"
|
| | | :dateStart="dateStart"
|
| | | :dateEnd="dateEnd"
|
| | | :canDrag="false"
|
| | | ></Calendar>
|
| | | </view>
|
| | | <view class="list">
|
| | | <view class="item">
|
| | | <view class="head">
|
| | | <view class="name">aaaaa选型</view>
|
| | | <view class="status">即将开始</view>
|
| | | <!-- -->
|
| | | <view class="card_list">
|
| | | <view class="card_title">
|
| | | <view class="name">
|
| | | <view class="icon"></view>
|
| | | <view class="text">今日会议</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议时间:</view>
|
| | | <view class="value">12:00-12</view>
|
| | | <view class="meeting">
|
| | | <view class="text mr24" @click="isShowStatus = true">{{
|
| | | activeRoom.name
|
| | | }}</view>
|
| | | <u-icon name="arrow-down" size="12" color="#999999" />
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议室:</view>
|
| | | <view class="value">202会议室</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">预约人:</view>
|
| | | <view class="value">杨某某</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">备注:</view>
|
| | | <view class="value">--</view>
|
| | | </view>
|
| | | <view class="list">
|
| | | <view
|
| | | @click="handleDetail(item.id)"
|
| | | class="item"
|
| | | v-for="item in myMeetingList"
|
| | | :key="item.id"
|
| | | >
|
| | | <view class="head">
|
| | | <view class="name">{{ item.meetingName }}</view>
|
| | | <view class="status" v-if="item.meetingStatus == '1'"
|
| | | >未开始</view
|
| | | >
|
| | | <view class="status red" v-if="item.meetingStatus == '2'"
|
| | | >进行中</view
|
| | | >
|
| | | <view class="status" v-if="item.meetingStatus == '3'"
|
| | | >已结束</view
|
| | | >
|
| | | <view class="status padding" v-if="item.meetingStatus == '4'"
|
| | | >即将开始</view
|
| | | >
|
| | | <view class="status" v-if="item.meetingStatus == '5'"
|
| | | >已撤销</view
|
| | | >
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议时间:</view>
|
| | | <view class="value">{{ item.meetingTime }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">会议室:</view>
|
| | | <view class="value">{{ item.roomName }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">预约人:</view>
|
| | | <view class="value">{{ item.bookingUser }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="label">备注:</view>
|
| | | <view class="value">{{ item.remark || item.meetingRemark }}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | </template>
|
| | | <!-- -->
|
| | | <u-picker
|
| | | <u-picker
|
| | | keyName="name"
|
| | | :show="isShowStatus"
|
| | | :columns="statusList"
|
| | | :columns="meetingList"
|
| | | @confirm="seletedStatus"
|
| | | @cancel="isShowStatus = false"
|
| | | ></u-picker>
|
| | |
| | |
|
| | | <script>
|
| | | import Calendar from '@/components/Li-Calendar/Li-Calendar.vue'
|
| | | import dayjs from 'dayjs'
|
| | | import { myMeetingPage } from '@/api'
|
| | | import dayja from 'dayjs'
|
| | | import { myMeetingPage, monthMeetingPage, roomsListPost } from '@/api'
|
| | | function getDate(date, AddDayCount = 0) {
|
| | | if (!date) {
|
| | | date = new Date()
|
| | | }
|
| | | if (typeof date !== 'object') {
|
| | | date = date.replace(/-/g, '/')
|
| | | }
|
| | | const dd = new Date(date)
|
| | |
|
| | | dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
|
| | |
|
| | | const y = dd.getFullYear()
|
| | | const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
|
| | | const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
|
| | | return {
|
| | | fullDate: y + '-' + m + '-' + d,
|
| | | year: y,
|
| | | month: m,
|
| | | date: d,
|
| | | day: dd.getDay()
|
| | | }
|
| | | }
|
| | | export default {
|
| | | components: {
|
| | | Calendar
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | activeTab: '0',
|
| | | recordList: [],
|
| | | recordPage: 1,
|
| | | myPage: 1,
|
| | | myMeetingList: [],
|
| | | currentDate: '',
|
| | | dateStart: '2024-01-01',
|
| | | dateStart: '1999-05-01',
|
| | | dateEnd: '2999-06-15',
|
| | | mark: [
|
| | | {
|
| | | time: '2024-05-30'
|
| | | },
|
| | | {
|
| | | time: '2024-05-22',
|
| | | pointText: 'aaa',
|
| | | pointTextColor: '#fff'
|
| | | },
|
| | | {
|
| | | time: '2024-05-28',
|
| | | text: ['111','222'],
|
| | | pointTextColor: '#fff'
|
| | | }
|
| | | ],
|
| | | activeStatus: {
|
| | | name: '全部会议室'
|
| | | },
|
| | | isShowStatus: false,
|
| | | statusList: [[
|
| | | { name: '全部会议室', key: '' },
|
| | | { name: '未开始', key: '1' },
|
| | | { name: '已结束', key: '2' },
|
| | | ]],
|
| | | dataList: [],
|
| | | page: 1
|
| | | monthMark: [],
|
| | |
|
| | | isShowStatus: false,
|
| | | activeRoom: {
|
| | | name: '全部会议室',
|
| | | id: ''
|
| | | },
|
| | | meetingList: [],
|
| | |
|
| | | }
|
| | | },
|
| | | onLoad() {
|
| | | this.currentDate = dayjs().format('YYYY-MM-DD')
|
| | | this.getList()
|
| | | this.currentDate = dayja().format('YYYY-MM-DD')
|
| | | this.initData()
|
| | | this.getRoomList()
|
| | | },
|
| | | onShow() {
|
| | | this.myPage = 1
|
| | | this.myMeetingList = []
|
| | | this.getDayMeeting()
|
| | | },
|
| | | onReachBottom() {
|
| | | this.myPage = this.myPage + 1
|
| | | this.getDayMeeting()
|
| | | },
|
| | | methods: {
|
| | | getList() {
|
| | | const { activeStatus } = this
|
| | | myMeetingPage({
|
| | | capacity: 10,
|
| | | page: this.page,
|
| | | model: {
|
| | | queryDate: this.currentDate,
|
| | | status: activeStatus.key || null,
|
| | | // roomsId: this.roomId,
|
| | | queryType: 2
|
| | | }
|
| | | initData() {
|
| | | // 当月数据
|
| | | monthMeetingPage({
|
| | | yearMonth: this.currentDate.slice(0, 7)
|
| | | }).then(res => {
|
| | | this.dataList = res.data.records
|
| | | })
|
| | | this.monthMark = res.data.filter(i => i.meetingNum > 0).map(j => {
|
| | | return {
|
| | | time: j.monthDate,
|
| | | pointText: j.meetingNum,
|
| | | pointTextColor: 'red'
|
| | | }
|
| | | })
|
| | | })
|
| | | },
|
| | | handleDetail(item) {
|
| | | getRoomList() {
|
| | | roomsListPost({}).then(res => {
|
| | | this.meetingList = [[{ id: '', name: '全部会议室' }, ...res.data]]
|
| | | console.log('meetingList', this.meetingList);
|
| | | })
|
| | | },
|
| | | seletedStatus(e) {
|
| | | this.myMeetingList = []
|
| | | this.activeRoom = { ...e.value[0] }
|
| | | this.isShowStatus = false
|
| | | this.getDayMeeting()
|
| | | },
|
| | | handleDetail(id) {
|
| | | uni.navigateTo({
|
| | | // url: `/pages/staff/meetingDetail?id=${item.id}`,
|
| | | url: `/pages/staff/meetingDetail`
|
| | | url: `/pages/staff/meetingDetail?id=${id}`,
|
| | | // url: `/pages/staff/meetingDetail`
|
| | | })
|
| | | },
|
| | | changeCalendar(e) {
|
| | |
| | | },
|
| | | // 点击某天
|
| | | dayChange(data) {
|
| | | console.log(data)
|
| | | let date = data.time
|
| | | let yyyy = data.time.substring(0, 4)
|
| | | let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')))
|
| | |
| | | mm = mm < 10 ? `0${mm}` : mm
|
| | | dd = dd < 10 ? `0${dd}` : dd
|
| | | let riqi = `${yyyy}-${mm}-${dd}`
|
| | | this.currentTime = riqi
|
| | | this.list = []
|
| | | this.next = false
|
| | | this.page = 0
|
| | | // this.getRoomList()
|
| | | this.currentDate = riqi
|
| | | this.myMeetingList = []
|
| | | this.activeStatus = {
|
| | | name: '全部会议室',
|
| | | key: ''
|
| | | }
|
| | | this.myPage = 1
|
| | | this.getDayMeeting()
|
| | | },
|
| | | // 下一月
|
| | | monthChange(data) {
|
| | |
| | | dd = dd < 10 ? `0${dd}` : dd
|
| | | let riqi = `${yyyy}-${mm}-${dd}`
|
| | | console.log('日期', riqi)
|
| | | this.currentTime1 = riqi
|
| | | // this.getDateNum()
|
| | | this.currentDate = riqi
|
| | | this.initData()
|
| | | },
|
| | | seletedStatus(e) {
|
| | | this.activeStatus = { ...e.value[0] }
|
| | | this.isShowStatus = false
|
| | | this.getList()
|
| | | },
|
| | |
|
| | | getDayMeeting() {
|
| | | const { myPage, activeRoom, currentDate } = this
|
| | | // 当天我参与的会议
|
| | | myMeetingPage({
|
| | | model: {
|
| | | queryType: '1',
|
| | | roomsId: activeRoom.id,
|
| | | queryDate: currentDate
|
| | | },
|
| | | page: myPage,
|
| | | capacity: 10
|
| | | }).then(res => {
|
| | | this.myMeetingList = [ ...this.myMeetingList, ...res.data.records ]
|
| | | })
|
| | | },
|
| | | }
|
| | | };
|
| | | </script>
|
| | |
| | | ::v-deep .uni-calendar-item--isDay-text {
|
| | | color: $uni-color-primary;
|
| | | }
|
| | | ::v-deep .calendar-point {
|
| | | /* background-color: $uni-color-primary; */
|
| | | }
|
| | | |
| | | ::v-deep .uni-calendar-item--isDay {
|
| | | background-color: $uni-color-primary;
|
| | | color: #fff;
|
| | |
| | | padding: 0rpx 30rpx 30rpx;
|
| | | background: #ffffff;
|
| | | border-radius: 8rpx;
|
| | | margin-bottom: 24rpx;
|
| | | .head {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | |
| | | font-size: 22rpx;
|
| | | color: #999999;
|
| | | }
|
| | | .padding {
|
| | | color: $uni-color-primary;
|
| | | border: 1rpx solid $uni-color-primary;
|
| | | }
|
| | | .red {
|
| | | color: #e23f29;
|
| | | border: 1rpx solid #e23f29;
|
| | | }
|
| | | }
|
| | | .line {
|
| | | display: flex;
|
| | |
| | | <view class="name">会议时间</view> |
| | | <view class="line"> |
| | | <view class="label"> |
| | | {{ param.activeDate }} {{ param.startTime }}-{{ param.endTime }} |
| | | {{ param.activeDate || param.meetingDate }} |
| | | <text class="ml12" v-if="!param.id">{{ param.startTime }}-{{ param.endTime }}</text> |
| | | <text class="ml12" v-if="param.id">{{ param.meetingTime }}</text> |
| | | </view> |
| | | <u-icon name="arrow-right" color="#999999" size="14" /> |
| | | </view> |
| | |
| | | <view class="line" @click="selPeople"> |
| | | <view class="label"> |
| | | <text v-if="param.sysList && param.sysList.length > 0"> |
| | | {{ param.sysList.map(i=>i.realname).join(',') }} |
| | | </text> |
| | | {{ param.sysList.map((i) => i.realname).join(",") }} |
| | | </text> |
| | | <text |
| | | v-else |
| | | class="placeholder9" |
| | |
| | | <view class="label"> |
| | | <view |
| | | class="service_item" |
| | | :class="{active: item.checked}" |
| | | :class="{ active: item.checked }" |
| | | v-for="(item, index) in info.projectList" |
| | | :key="index" |
| | | @click="serviceClick(item)" |
| | | @click="serviceClick(item)" |
| | | > |
| | | {{ item.projectName }} |
| | | </view> |
| | |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="sub_btn" @click="onSubmit"> 确认预约 </view> |
| | | <view v-if="param.id" class="sub_btn" @click="onUpdate">确认修改</view> |
| | | <view v-else class="sub_btn" @click="onSubmit"> 确认预约 </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | |
| | | <script> |
| | | import { |
| | | reservationMeeting, |
| | | getRoomDetail |
| | | getRoomDetail, |
| | | meetingDetail, |
| | | updateById, |
| | | getAppRoomDetail |
| | | } from '@/api' |
| | | import dayjs from 'dayjs' |
| | | export default { |
| | |
| | | return { |
| | | param: {}, |
| | | userInfo: uni.getStorageSync('userInfo'), |
| | | info: {}, |
| | | info: {}, |
| | | } |
| | | }, |
| | | onLoad(option) { |
| | | this.param = { ...option } |
| | | const bookingTimeList = option.bookingTimeList.split(',').map(i => { |
| | | return { |
| | | timeId: Number(i) |
| | | } |
| | | }) |
| | | this.$set(this.param, 'bookingTimeList', bookingTimeList) |
| | | this.$set(this.param, 'activeDate', dayjs(option.yudingDate).format('YYYY年M月D日')) |
| | | this.initOption() |
| | | if (option.id) { |
| | | uni.setNavigationBarTitle({ |
| | | title: '会议详情' |
| | | }) |
| | | this.getDetail(option.id) |
| | | } else { |
| | | this.param = { ...option } |
| | | const bookingTimeList = option.bookingTimeList.split(',').map(i => { |
| | | return { |
| | | timeId: Number(i) |
| | | } |
| | | }) |
| | | this.$set(this.param, 'bookingTimeList', bookingTimeList) |
| | | this.$set(this.param, 'activeDate', dayjs(option.yudingDate).format('YYYY年M月D日')) |
| | | this.initOption() |
| | | } |
| | | }, |
| | | mounted() { |
| | | mounted() { |
| | | this.$eventBus.$on('meetingPeo', (res) => { |
| | | this.$set(this.param, 'sysList', res.map(i=>{ |
| | | this.$set(this.param, 'sysList', res.map(i => { |
| | | i.userId = i.id |
| | | return i |
| | | })) |
| | |
| | | }) |
| | | }, |
| | | methods: { |
| | | onSubmit() { |
| | | const { param, info } = this |
| | | if (!param.name) return uni.showToast({ |
| | | getDetail(id) { |
| | | meetingDetail({ id }).then(res => { |
| | | this.param = { ...res.data,name: res.data.meetingName, content: res.data.meetingContent, sysList: res.data.userResponseList } |
| | | // this.param = { ...res.data } |
| | | if(this.param.sysList && this.param.sysList.length > 0){ |
| | | this.param.sysList.forEach(i => { |
| | | i.userId = i.id |
| | | }) |
| | | } |
| | | getRoomDetail({ roomId: res.data.roomId }).then(ress => { |
| | | this.info = ress.data |
| | | if (this.info && this.info.projectList) { |
| | | this.info.projectList.forEach(i => { |
| | | i.checked = false |
| | | if(res.data.projectsResponseList && res.data.projectsResponseList.length > 0){ |
| | | res.data.projectsResponseList.forEach(item2 => { |
| | | if(i.projectId === item2.id){ |
| | | i.checked = true |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }) |
| | | }, |
| | | onUpdate() { |
| | | const { param, info } = this |
| | | if (!param.name) return uni.showToast({ |
| | | title: '请输入会议主题', |
| | | icon: 'none' |
| | | }) |
| | | reservationMeeting({ |
| | | ...param, |
| | | startTime: `${param.yudingDate} ${param.startTime}:00`, |
| | | endTime: `${param.yudingDate} ${param.endTime}:00`, |
| | | projectList: info.projectList.filter(i => i.checked), |
| | | }).then(res => { |
| | | if(res.code === 200){ |
| | | setTimeout(() => { |
| | | uni.showToast({ |
| | | title: '预约成功', |
| | | icon:'success', |
| | | duration: 2000 |
| | | }) |
| | | }) |
| | | uni.redirectTo({ |
| | | url: '/pages/staff/index' |
| | | reservationMeeting({ |
| | | ...param, |
| | | projectList: info.projectList.filter(i => i.checked), |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | setTimeout(() => { |
| | | uni.showToast({ |
| | | title: '修改成功', |
| | | icon: 'success', |
| | | duration: 2000 |
| | | }) |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | uni.redirectTo({ |
| | | url: '/pages/staff/index' |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | onSubmit() { |
| | | const { param, info } = this |
| | | if (!param.name) return uni.showToast({ |
| | | title: '请输入会议主题', |
| | | icon: 'none' |
| | | }) |
| | | reservationMeeting({ |
| | | ...param, |
| | | startTime: `${param.yudingDate} ${param.startTime}:00`, |
| | | endTime: `${param.yudingDate} ${param.endTime}:00`, |
| | | projectList: info.projectList.filter(i => i.checked), |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | setTimeout(() => { |
| | | uni.showToast({ |
| | | title: '预约成功', |
| | | icon: 'success', |
| | | duration: 2000 |
| | | }) |
| | | }) |
| | | uni.redirectTo({ |
| | | url: '/pages/staff/index' |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | selPeople() { |
| | | const { param } = this |
| | | let startTime = param.yudingDate + ' ' + param.startTime |
| | | let endTime = param.yudingDate + ' ' + param.endTime |
| | | const { param } = this |
| | | let startTime = param.yudingDate + ' ' + param.startTime |
| | | let endTime = param.yudingDate + ' ' + param.endTime |
| | | uni.navigateTo({ |
| | | url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}` |
| | | }) |
| | | }, |
| | | serviceClick(item) { |
| | | const { info } = this |
| | | info.projectList.forEach(ite => { |
| | | if(ite.projectId === item.projectId){ |
| | | ite.checked = !ite.checked |
| | | } |
| | | }) |
| | | this.$forceUpdate() |
| | | }, |
| | | serviceClick(item) { |
| | | const { info } = this |
| | | info.projectList.forEach(ite => { |
| | | if (ite.projectId === item.projectId) { |
| | | ite.checked = !ite.checked |
| | | } |
| | | }) |
| | | this.$forceUpdate() |
| | | }, |
| | | initOption() { |
| | | const roomId = Number(this.param.roomId) |
| | | const roomId = Number(this.param.roomId) |
| | | getRoomDetail({ roomId }).then(res => { |
| | | res.data.projectList.forEach(item => { |
| | | item.active = false |
| | | }) |
| | | this.info = res.data |
| | | if(this.info && this.info.projectList){ |
| | | this.info.projectList.forEach(i => { |
| | | i.checked = false |
| | | }) |
| | | } |
| | | if (this.info && this.info.projectList) { |
| | | this.info.projectList.forEach(i => { |
| | | i.checked = false |
| | | |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | |
| | | padding: 0 24rpx; |
| | | margin-right: 20rpx; |
| | | } |
| | | .active{ |
| | | background-color: #4d99a8; |
| | | color: #fff; |
| | | } |
| | | .active { |
| | | background-color: #4d99a8; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | console.log( e.detail.value[0]); |
| | | const id = Number(e.detail.value[0]) |
| | | const item = this.memberList.find(i => i.id === id) |
| | | console.log('item', item); |
| | | uni.navigateTo({ |
| | | url: `/pages/staff/snapshot?id=${item.id}&name=${item.name}` |
| | | }) |
| | | this.$eventBus.$emit('snapshotSel', item) |
| | | uni.navigateBack() |
| | | }, |
| | | initData() { |
| | | const { param } = this |
| | |
| | | class="adduser_list_item_ipt1_upload" |
| | | v-for="(item, i) in submitFileList" |
| | | :key="i" |
| | | ><image :src="item.fileurlFull" mode="widthFix"></image |
| | | ><image |
| | | v-if="item.type == 0" |
| | | :src="item.fileurlFull" |
| | | mode="widthFix" |
| | | ></image |
| | | ><video |
| | | v-if="item.type == 1" |
| | | :src="item.fileurlFull" |
| | | ></video |
| | | ></view> |
| | | </view> |
| | | </view> |
| | | <view class="empty"></view> |
| | | <view class="upload_line" style="padding: 15px 0 0;"> |
| | | <view class="name" style="margin-bottom: 10rpx;"> |
| | | <text style="color: #e42d2d;">*</text> |
| | | <view class="upload_line" style="padding: 15px 0 0"> |
| | | <view class="name" style="margin-bottom: 10rpx"> |
| | | <text style="color: #e42d2d">*</text> |
| | | <text>情况说明</text> |
| | | </view> |
| | | <view class="value" |
| | | ><textarea |
| | | <view class="value"> |
| | | <textarea |
| | | placeholder="请详细描述现场情况,不少于10个字" |
| | | minlength="10" |
| | | v-model="param.content" |
| | | placeholder-style="color: #999999;" |
| | | /></view> |
| | | /> |
| | | </view> |
| | | </view> |
| | | <view class="empty"></view> |
| | | <view class="line"> |
| | |
| | | } |
| | | }, |
| | | onLoad(option) { |
| | | if (option && option.id) { |
| | | this.$set(this.param, 'checkUserId', option.id) |
| | | this.$set(this.param, 'applyCheckUserId', option.id) |
| | | this.$set(this.param, 'checkorName', option.name) |
| | | } |
| | | this.initConfig() |
| | | const userInfo = uni.getStorageSync('userInfo') || {} |
| | | this.$set(this.param, 'memberName', userInfo.realname) |
| | | this.$set(this.param, 'memberPhone', userInfo.mobile) |
| | | this.$set(this.param, 'memberId', userInfo.id) |
| | | this.$set(this.param, 'submitTime', dayjs().format('YYYY-MM-DD HH:mm:ss')) |
| | | }, |
| | | mounted() { |
| | | this.$eventBus.$on('snapshotSel', (option) => { |
| | | this.$set(this.param, 'checkUserId', option.id) |
| | | this.$set(this.param, 'applyCheckUserId', option.id) |
| | | this.$set(this.param, 'checkorName', option.name) |
| | | }) |
| | | }, |
| | | methods: { |
| | | onSubmit() { |
| | |
| | | uploadImage() { |
| | | this.showUpload = false |
| | | uni.chooseImage({ |
| | | count: 6, |
| | | count: 1, |
| | | success: (chooseImageRes) => { |
| | | console.log('chooseImageRes.tempFilePaths', chooseImageRes.tempFilePaths) |
| | | uni.showLoading({ title: '上传中', mask: true }) |
| | |
| | | uni.chooseVideo({ |
| | | success: (chooseImageRes) => { |
| | | uni.showLoading({ title: '上传中', mask: true }) |
| | | for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) { |
| | | uni.uploadFile({ |
| | | url: `${uploadUrl}`, |
| | | filePath: chooseImageRes.tempFilePaths[i], |
| | | name: 'file', |
| | | formData: { |
| | | folderCode: 'HIDDEN_DANGER_FILE' |
| | | }, |
| | | success: (uploadFileRes) => { |
| | | let res = JSON.parse(uploadFileRes.data) |
| | | console.log('uploadFileRes', res) |
| | | let obj = { type: '1' } |
| | | obj.fileurl = res.data.halfPath |
| | | obj.fileurlFull = res.data.addr |
| | | that.submitFileList.push(obj) |
| | | console.log(that.submitFileList) |
| | | }, |
| | | complete() { |
| | | if (i === chooseImageRes.tempFilePaths.length - 1) { |
| | | uni.hideLoading() |
| | | } |
| | | uni.uploadFile({ |
| | | url: `${uploadUrl}`, |
| | | filePath: chooseImageRes.tempFilePath, |
| | | name: 'file', |
| | | formData: { |
| | | folderCode: 'HIDDEN_DANGER_FILE' |
| | | }, |
| | | success: (uploadFileRes) => { |
| | | let res = JSON.parse(uploadFileRes.data) |
| | | console.log('res', res) |
| | | let obj = { |
| | | type: '1' |
| | | } |
| | | }) |
| | | } |
| | | obj.fileurl = res.data.halfPath |
| | | obj.fileurlFull = res.data.addr |
| | | this.submitFileList.push(obj) |
| | | }, |
| | | complete() { |
| | | uni.hideLoading() |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | } |
| | | .upload_line { |
| | | padding: 30rpx 0; |
| | | .wrap{ |
| | | .wrap { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | video { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | </view> |
| | | </view> |
| | | <view class="box_head_list"> |
| | | <view class="box_head_item active">待处理 12</view> |
| | | <view class="box_head_item">已处理</view> |
| | | <view class="box_head_item">我发起的</view> |
| | | <view class="box_head_item">抄送我的</view> |
| | | <view @click="statusClick()" class="box_head_item active">待处理</view> |
| | | <view @click="statusClick()" class="box_head_item">已处理</view> |
| | | <view @click="statusClick()" class="box_head_item">我发起的</view> |
| | | <view @click="statusClick()" class="box_head_item">抄送我的</view> |
| | | </view> |
| | | </scroll-view> |
| | | <view class="box_list"> |
| | |
| | | startTime: '', |
| | | endTime: '' |
| | | }, |
| | | pagination: {}, |
| | | pagination: { |
| | | capacity: 10, |
| | | page: 1 |
| | | }, |
| | | dataList: [], |
| | | cate: [ |
| | | { name: '访客申请', id: 1 }, |
| | |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | statusClick(val) { |
| | | this.pagination.page = 1 |
| | | this.getList() |
| | | }, |
| | | getList() { |
| | | const { pagination } = this |
| | | const { pagination, search } = this |
| | | pagination.page++ |
| | | taskCenter({ |
| | | model: {} |
| | | ...pagination, |
| | | model: { |
| | | ...search |
| | | } |
| | | }).then(res => { |
| | | this.dataList = res.data.records |
| | | this.dataList = [...this.dataList, ...res.data.records] |
| | | }) |
| | | }, |
| | | handleAppr(item) { |
| | |
| | | <!-- 日期 --> |
| | | <u-datetime-picker |
| | | mode="date" |
| | | v-model="param.queryDate" |
| | | :show="isShowDate" |
| | | :minDate="minDate" |
| | | closeOnClickOverlay |
| | | @close="isShowDate = false" |
| | | :closeOnClickOverlay="true" |
| | | @confirm="seletedDate" |
| | | @cancel="isShowDate = false" |
| | | /> |
| | |
| | | isShowDate: false, |
| | | carsList: [], |
| | | param: { |
| | | queryDate: dayjs().format('YYYY-MM-DD'), |
| | | memberId: uni.getStorageSync('userInfo').memberId |
| | | }, |
| | | minDate: '', |
| | |
| | | capacity: 10 |
| | | }, |
| | | total: 0, |
| | | dataList: [] |
| | | dataList: [], |
| | | } |
| | | }, |
| | | onLoad() { |
| | |
| | | getList() { |
| | | const { param, pagination } = this |
| | | pagination.page = pagination.page + 1 |
| | | if(param.queryDate){ |
| | | param.queryStartTime = param.queryDate + ' 00:00:00' |
| | | param.queryEndTime = param.queryDate + ' 23:59:59' |
| | | } |
| | | carUseBookPaiche({ |
| | | ...pagination, |
| | | model: { ...param } |
| | |
| | | }, |
| | | seletedCar(e) { |
| | | const item = e.value[0] |
| | | this.pagination.page = 0 |
| | | this.$set(this.param, 'carCode', item.code) |
| | | this.$set(this.param, 'carId', item.id) |
| | | this.isShowCar = false |
| | | if (this.param.carId && this.param.queryDate) { |
| | | this.pagination.page = 0 |
| | | this.getList() |
| | | } |
| | | this.getList() |
| | | }, |
| | | seletedDate(e) { |
| | | this.param.queryDate = dayjs(e.value).format('YYYY-MM-DD') |
| | | this.pagination.page = 0 |
| | | this.isShowDate = false |
| | | if (this.param.carId && this.param.queryDate) { |
| | | this.pagination.page = 0 |
| | | this.getList() |
| | | } |
| | | this.getList() |
| | | }, |
| | | endtimeClose() { |
| | | this.param.endTime = '' |
| | |
| | | <view class="module_list"> |
| | | <view class="item"> |
| | | <view class="label">预计用车时段</view> |
| | | <view class="value">{{ info.startTime.slice(0, 16) }}至{{ info.endTime.slice(0, 16) }}</view> |
| | | <view class="value" v-if="info.startTime" |
| | | >{{ info.startTime.slice(0, 16) }}至{{ |
| | | info.endTime.slice(0, 16) |
| | | }}</view |
| | | > |
| | | </view> |
| | | <view class="item"> |
| | | <view class="item"> |
| | | <view class="label">预计出发时间</view> |
| | | <view class="value">{{ info.planUseDate }}</view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="item"> |
| | | <view class="label">乘车人员</view> |
| | | <view class="value">{{ info.memberNames }}</view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">目的地</view> |
| | | <view class="value">{{ info.type == '1' ? '市外' : '室内' }}:{{ info.addr }}</view> |
| | | <view class="value" |
| | | >{{ info.type == "1" ? "市外" : "室内" }}:{{ info.addr }}</view |
| | | > |
| | | </view> |
| | | <view class="item"> |
| | | <view class="label">用车事由</view> |
| | |
| | | <!-- 流程 --> |
| | | <view class="flow_wrap"> |
| | | <view class="flow_title">流程</view> |
| | | <view class="list"> |
| | | <view class="item"> |
| | | <view |
| | | class="list" |
| | | v-if=" |
| | | info.approveDateVO != null && info.approveDateVO.approveList != null |
| | | " |
| | | > |
| | | <view |
| | | class="item" |
| | | v-for="(item, index) in info.approveDateVO.approveList" |
| | | :key="item.id" |
| | | > |
| | | <view class="separate"></view> |
| | | <view class="avatar"> |
| | | <image class="img" src="@/static/logo@2x.png" mode="widthFix" /> |
| | | <image |
| | | class="status" |
| | | src="@/static/staff/liucheng_success@2x.png" |
| | | mode="widthFix" |
| | | class="img" |
| | | :src=" |
| | | item.faceImg |
| | | ? item.faceImg |
| | | : require('@/static/meeting/common/default_user@2x.png') |
| | | " |
| | | /> |
| | | <view class="separate"></view> |
| | | </view> |
| | | <view class="content"> |
| | | <view class="head"> |
| | | <view class="event">某某提交的拜访申请</view> |
| | | <view class="time">time</view> |
| | | </view> |
| | | <view class="name_wrap"> |
| | | <text>李东(<text class="status">处理中</text>)</text> |
| | | </view> |
| | | <view class="remark">同意放行</view> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="avatar"> |
| | | <image class="img" src="@/static/logo@2x.png" mode="widthFix" /> |
| | | <image |
| | | class="status" |
| | | src="@/static/staff/liucheng_success@2x.png" |
| | |
| | | </view> |
| | | <view class="content"> |
| | | <view class="head"> |
| | | <view class="event">某某提交的拜访申请</view> |
| | | <view class="time">time</view> |
| | | <view class="event">{{ item.title }}</view> |
| | | <view class="time">{{ item.checkDate }}</view> |
| | | </view> |
| | | <view class="name_wrap"> |
| | | <text>李东(<text class="status">处理中</text>)</text> |
| | | <text |
| | | >{{ item.memberName |
| | | }}<text class="status" v-if="item.statusInfo" |
| | | >({{ item.statusInfo }})</text |
| | | ></text |
| | | > |
| | | </view> |
| | | <view class="carbon"> |
| | | <view class="carbon_item" v-for="i in 12"> |
| | | <view v-if="item.checkInfo" class="remark">{{ |
| | | item.checkInfo |
| | | }}</view> |
| | | <!-- 抄送人 --> |
| | | <view v-if="item.approveType == 1" class="children"> |
| | | <view |
| | | class="child" |
| | | v-for="child in item.approveList" |
| | | :key="child.id" |
| | | > |
| | | <image |
| | | src="../../../static/logo@2x.png" |
| | | mode="widthFix" |
| | | ></image> |
| | | <view class="text">name</view> |
| | | class="child_img" |
| | | :src=" |
| | | child.faceImg |
| | | ? child.faceImg |
| | | : require('@/static/meeting/common/default_user@2x.png') |
| | | " |
| | | /> |
| | | <view>{{ child.memberName }}</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | </view> |
| | | <view class="emyty"></view> |
| | | <view class="main_footer"> |
| | | <view class="btn" @click="handleSub('0')">拒绝</view> |
| | | <view class="btn agree" @click="handleSub('1')">同意</view> |
| | | <!-- <view class="btn" @click="handleSub(3)">拒绝</view> |
| | | <view class="btn agree" @click="handleSub(2)">同意</view> --> |
| | | <view class="btn agree" @click="isShowBack = true">撤销用车</view> |
| | | </view> |
| | | |
| | | <!-- 撤销 --> |
| | | <u-popup |
| | | :show="isShowBack" |
| | | :round="10" |
| | | :safeAreaInsetBottom="true" |
| | | mode="bottom" |
| | | @close="isShowBack = false" |
| | | > |
| | | <view class="appr_modal"> |
| | | <view class="title">撤销用车</view> |
| | | <view class="line"> 撤销说明 </view> |
| | | <textarea |
| | | v-model="backParam.info" |
| | | placeholder="非必填" |
| | | placeholder-class="placeholder9" |
| | | /> |
| | | <view class="main_footer"> |
| | | <view class="btn agree" @click="onSubBack">提交</view> |
| | | </view> |
| | | </view> |
| | | </u-popup> |
| | | <!-- --> |
| | | <u-popup |
| | | :show="showApprModal" |
| | |
| | | @close="showApprModal = false" |
| | | > |
| | | <view class="appr_modal"> |
| | | <view class="title">同意</view> |
| | | <view class="title">{{ param.status == 2 ? "同意" : "拒绝" }}</view> |
| | | <view class="line" @click="isShowDrive = true"> |
| | | <text v-if="param.driverName">{{ param.driverName }}</text> |
| | | <text v-else class="placeholder9">派车司机</text> |
| | | <u-icon class="ml12" name="arrow-right" color="#999999" /> |
| | | </view> |
| | | <textarea |
| | | placeholder="同意说明,非必填" |
| | | v-model="param.checkInfo" |
| | | :placeholder=" |
| | | param.status == 2 ? '同意说明,非必填' : '拒绝说明,非必填' |
| | | " |
| | | placeholder-class="placeholder9" |
| | | /> |
| | | <view class="main_footer"> |
| | | <view class="btn" @click="showApprModal = false">取消</view> |
| | | <view class="btn agree">提交</view> |
| | | <view class="btn agree" @click="onSubmit">提交</view> |
| | | </view> |
| | | </view> |
| | | </u-popup> |
| | | <!-- 司机 --> |
| | | <u-picker |
| | | keyName="name" |
| | | :show="isShowDrive" |
| | | @close="isShowDrive = false" |
| | | :closeOnClickOverlay="true" |
| | | :columns="driveList" |
| | | @confirm="seletedDrive" |
| | | @cancel="isShowDrive = false" |
| | | ></u-picker> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { carUseBookDetail } from '@/api' |
| | | import { carUseBookDetail, carUseBookAppr, driveListPos, carUseBookBack } from '@/api' |
| | | export default { |
| | | data() { |
| | | return { |
| | | showApprModal: false, |
| | | isShowBack: false, |
| | | backParam: {}, |
| | | isShowDrive: false, |
| | | id: '', |
| | | info: {}, |
| | | param: {}, |
| | | param: { |
| | | status: '' |
| | | }, |
| | | driveList: [] |
| | | |
| | | } |
| | | }, |
| | |
| | | this.info = { ...res.data } |
| | | }) |
| | | }, |
| | | handleSub(flag) { |
| | | onSubBack() { |
| | | carUseBookBack({ |
| | | id: this.id, |
| | | info: this.backParam.info |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | uni.showToast({ |
| | | title: '撤销成功', |
| | | icon: 'success', |
| | | duration: 2000 |
| | | }) |
| | | this.isShowBack = false |
| | | setTimeout(() => { |
| | | uni.navigateBack() |
| | | }, 1000) |
| | | } |
| | | }) |
| | | }, |
| | | onSubmit() { |
| | | const { param, info } = this |
| | | carUseBookAppr({ |
| | | status: param.status, |
| | | objType: info.type == 1 ? 4 : 3, |
| | | objId: this.id, |
| | | driverId: param.driverId, |
| | | checkInfo: param.checkInfo |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.showApprModal = false |
| | | setTimeout(() => { |
| | | uni.showToast({ |
| | | title: '操作成功', |
| | | icon: 'success' |
| | | }) |
| | | }) |
| | | uni.navigateBack() |
| | | } |
| | | }) |
| | | }, |
| | | handleSub(status) { |
| | | // this.param.flag = |
| | | if (flag === '1') { |
| | | |
| | | this.param = { |
| | | status |
| | | } |
| | | this.showApprModal = true |
| | | if (status === 2) { // 同意 |
| | | this.getDriveList() |
| | | } else { |
| | | |
| | | } |
| | | this.showApprModal = true |
| | | } |
| | | }, |
| | | getDriveList() { |
| | | driveListPost({}).then(res => { |
| | | this.driveList = [res.data] |
| | | }) |
| | | }, |
| | | seletedDrive(e) { |
| | | console.log(e.value[0]) |
| | | this.$set(this.param, 'driverId', e.value[0].id) |
| | | this.$set(this.param, 'driverName', e.value[0].name) |
| | | this.isShowDrive = false |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | |
| | | .item { |
| | | display: flex; |
| | | margin-bottom: 48rpx; |
| | | |
| | | position: relative; |
| | | .separate { |
| | | position: absolute; |
| | | width: 4rpx; |
| | | height: 100%; |
| | | background-color: #eeeeee; |
| | | left: 40rpx; |
| | | transform: translate(-50%, 0); |
| | | top: 80rpx; |
| | | } |
| | | .avatar { |
| | | width: 80rpx; |
| | | height: 80rpx; |
| | |
| | | position: absolute; |
| | | right: 0; |
| | | bottom: 0; |
| | | } |
| | | |
| | | .separate { |
| | | position: absolute; |
| | | width: 4rpx; |
| | | height: 100%; |
| | | background-color: #eeeeee; |
| | | left: 50%; |
| | | transform: translate(-50%, 0); |
| | | bottom: -80rpx; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | .status { |
| | | color: $uni-color-primary; |
| | | } |
| | | } |
| | | .children { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-top: 12rpx; |
| | | .child { |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-right: 12rpx; |
| | | .child_img { |
| | | width: 48rpx; |
| | | height: 48rpx; |
| | | border-radius: 50%; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | font-size: 26rpx; |
| | | color: #777777; |
| | | } |
| | | } |
| | | } |
| | | &:nth-last-child(1) { |
| | | .separate { |
| | | height: 0; |
| | | } |
| | | } |
| | | } |
| | |
| | | justify-content: space-between; |
| | | |
| | | .btn { |
| | | width: 336rpx; |
| | | flex: 1; |
| | | height: 88rpx; |
| | | line-height: 88rpx; |
| | | background: #ffffff; |
| | |
| | | border: 1rpx solid #999999; |
| | | font-size: 32rpx; |
| | | text-align: center; |
| | | margin: 16rpx 0; |
| | | margin: 16rpx; |
| | | } |
| | | |
| | | .agree { |
| | |
| | | |
| | | .appr_modal { |
| | | padding: 36rpx 30rpx 0; |
| | | |
| | | .line { |
| | | height: 90rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | border-bottom: 1rpx solid #e4e4e4; |
| | | margin-bottom: 20rpx; |
| | | } |
| | | .title { |
| | | font-weight: 500; |
| | | font-size: 32rpx; |