ll
liukangdong
2024-12-10 a8c03746e6bd8ac1d46dc48c1b10bceff543664f
ll
已添加5个文件
已修改26个文件
2029 ■■■■ 文件已修改
admin/src/components/business/operaVisitsWindow.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/RichEditor.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/cars.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/App.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/staff.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/index.vue 758 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/index/index.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login/login.vue 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 583 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingCalendar.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/snapshot.vue 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/vDangetAppr.vue 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/apply.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/sendACar.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/sendACarDetail.vue 233 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/login.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/userinfo/userinfo.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/ic_cancel.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/play.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/staff/shenfen_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/store/index.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/config.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/manifest.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/SecurityControl/bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/task/bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/task/title@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/router/index.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/SecurityControl.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/operaVisitsWindow.vue
@@ -148,7 +148,8 @@
      VisitReason: [],
      memberList: [],
      uploadData: {
        folder: 'member'
        folder: 'member',
        isFace: 0
      },
      startPickerOptions: {
        disabledDate (time) {
admin/src/components/common/RichEditor.vue
@@ -1,7 +1,7 @@
<template>
  <div :style="styleEditor">
    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
    <Editor style="max-height: 300px;min-height: 100px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
    <Editor style="min-height: 80px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
            @onCreated="onCreated" @onChange="onChange" />
  </div>
</template>
admin/src/views/vehicle/cars.vue
@@ -168,9 +168,9 @@
    this.getCate()
  },
  methods: {
    handleSelectionChange(e) {
      this.searchForm.ids = e.map(i => i.id).join(',')
    },
    // handleSelectionChange(e) {
    //   this.searchForm.ids = e.map(i => i.id).join(',')
    // },
    changeSel(e) {
      console.log(e)
      if (e && e.length == 1) {
h5/App.vue
@@ -1,8 +1,13 @@
<script>
import { wxAuthorize, refreshToken } from '@/api'
import { wxAuthorize, refreshToken, app_url } from '@/api'
export default {
  onLaunch: function () {
    window.addEventListener("popstate", (event) => {
            const path = this.$route.fullPath
        if(path == '/pages/login/login' || path == '/'){
                window.location.href = app_url
            }
    })
  },
  onShow: function () {
    console.log('App Show')
h5/api/staff.js
@@ -14,6 +14,12 @@
    method: 'get'
  })
}
export const saveHkUserOpenid = () => {
  return http({
    url: 'visitsAdmin/cloudService/business/hksync/saveHkUserOpenid',
    method: 'post'
  })
}
// 刷新token
export const refreshToken = () => {
  return http({
h5/pages/driver/index.vue
@@ -1,358 +1,402 @@
<template>
    <view class="main_app">
        <view class="title_wrap">
            <view class="name">{{ driverInfo.realname }},欢迎登录~</view>
            <view class="btn" @click="loginOut">退出登录</view>
        </view>
        <!--  -->
        <view class="banner_wrap">
            <view class="h1">安泰物流智慧园区</view>
            <view class="h2">物流车专区</view>
            <image class="banner" src="../../static/driver/wuliuche_banner@2x.png" mode="widthFix"></image>
        </view>
        <!--  -->
        <view v-if="taskList && taskList.length > 0" class="task_list">
            <swiper circular class="task_swiper">
                <swiper-item v-for="item in taskList" :key="item.id" @click="taskClick(item)">
                    <view class="item">
                        <view class="head">
                            <view class="name">{{ item.contractNum ? '合同单' : '运输单' }}{{ item.billCode || item.contractNum}}</view>
                            <view class="status">
                                <view class="text" v-if="item.status == 0">请确认任务</view>
                                <view class="text" v-if="item.status == 1">请于{{item.arriveDate.slice(5,11)}}现场签到</view>
                                <view class="text" v-if="item.status == 2">前方排队:{{item.lineUpNum}}辆</view>
                                <view class="text" v-if="item.status == 3">请入园进入等待区</view>
                                <view class="text" v-if="item.status == 4">请入园停靠{{item.platformName}}作业</view>
                                <view class="text" v-if="item.status == 5">{{item.platformName}}作业中</view>
                                <view class="text" v-if="item.status == 6">作业已完成</view>
                                <view class="text" v-if="item.status == 7">转移中</view>
                                <view class="text red" v-if="item.status == 8">异常挂起</view>
                                <view class="time" v-if="item.waitTime && item.status == 2">{{ item.waitTime }}</view>
                                <view class="time" v-if="item.finishTimeStr && item.status == 5">预计完成时间:{{ item.finishTimeStr }}</view>
                            </view>
                        </view>
                        <view class="content">
                            <view class="info">
                                <view class="plate">
                                    <image src="@/static/driver/wuliu_ic_car@2x.png" class="icon" mode=""></image>
                                    <text>{{ item.carCodeFront }}</text>
                                </view>
                                <view class="plate">
                                    <image src="@/static/driver/wuliu_ic_huowu@2x.png" class="icon" mode=""></image>
                                    <text>{{ item.totalNum }}万支</text>
                                </view>
                            </view>
                            <view class="sub">
                                <view class="time" v-if="item.arriveDate && item.contractNum">{{ item.arriveDate.slice(5) }}</view>
                                <view class="time" v-if="item.type != 4 && item.platformWmsJob && item.platformWmsJob.ioCreatedate">{{ item.platformWmsJob.ioCreatedate.slice(5, 19) }}</view>
                                <view v-if="item.status == 0" class="sub_btn">确认任务</view>
                                <view v-if="item.status == 1" class="sub_btn">立即签到</view>
                                <view v-if="item.status == 2" class="sub_btn" @click.stop="handleQueue(item)">查看排队</view>
                            </view>
                        </view>
                    </view>
                </swiper-item>
            </swiper>
        </view>
        <!--  -->
        <view class="title_wrap"><view class="name">业务办理</view></view>
        <view class="container1">
            <view class="left">
                <view class="img_wrap img1" @click="$jump('/pages/driver/notice')">
                    <image src="@/static/driver/wuliu_ic_ruyuanyuyue@2x.png" class="img"></image>
                    <view class="h1">入园须知</view>
                    <view class="h2">RESERVATION</view>
                </view>
                <view class="img_wrap img2" @click="$jump('/pages/driver/reservedGuide?str=bookingTips')">
                    <image src="@/static/driver/wuliu_ic_zhinan@2x.png" class="img"></image>
                    <view class="h1">预约指南</view>
                    <view class="h2">APPOINTMENT GUIDE</view>
                </view>
            </view>
            <view class="right">
                <view class="img_wrap img2" @click="$jump('/pages/driver/reservedRecord')">
                    <image src="@/static/driver/wuliu_ic_yuyuejilu@2x.png" class="img"></image>
                    <view class="h1">预约记录</view>
                    <view class="h2">APPOINTMENT RECORD</view>
                </view>
                <view class="img_wrap img2" @click="$jump('/pages/driver/queueUp')">
                    <image src="@/static/driver/wuliu_ic_paidui@2x.png" class="img"></image>
                    <view class="h1">月台排队情况</view>
                    <view class="h2">HIDDEN DANGER</view>
                </view>
                <view class="img_wrap img2" @click="$jump('/pages/driver/reservedGuide?str=reservationMap')">
                    <image src="@/static/driver/wuliu_ic_daolan@2x.png" class="img"></image>
                    <view class="h1">园区导览图</view>
                    <view class="h2">GUIDE MAP</view>
                </view>
            </view>
        </view>
        <!--  -->
        <view class="copyright">
            <image src="@/static/logo_s@2x.png" class="mr6" mode="widthFix" />
            <text>安徽安泰物流有限责任公司版权所有</text>
        </view>
    </view>
</template>
<script>
import { logoutPost, driverHomeData } from '@/api';
export default {
    data() {
        return {
            taskList: [],
            driverInfo: uni.getStorageSync('driverInfo'),
        };
    },
    onShow() {
        this.initData();
    },
    methods: {
        initData() {
            driverHomeData().then(res => {
                if (res.code == 200) {
                    uni.setStorageSync('driverGuide', {
                        bookingTips: res.data.bookingTips,
                        reservationMap: res.data.reservationMap,
                        signDistance: res.data.signDistance
                    });
                    this.taskList = res.data.platformJobList || []
                }
            });
        },
<template>
    <view class="main_app">
        <view class="title_wrap">
            <view class="name">{{ driverInfo.realname }},欢迎登录~</view>
            <view class="btn" @click="loginOut">退出登录</view>
        </view>
        <!--  -->
        <view class="banner_wrap">
            <view class="h1">安泰物流智慧园区</view>
            <view class="h2">物流车专区</view>
            <image class="banner" src="../../static/driver/wuliuche_banner@2x.png" mode="widthFix"></image>
        </view>
        <!--  -->
        <view v-if="taskList && taskList.length > 0" class="task_list">
            <swiper circular class="task_swiper">
                <swiper-item v-for="item in taskList" :key="item.id" @click="taskClick(item)">
                    <view class="item">
                        <view class="head">
                            <view class="name">{{ item.contractNum ? '合同单' : '运输单' }}{{ item.billCode || item.contractNum }}</view>
                            <view class="status">
                                <view class="text" v-if="item.status == 0">请确认任务</view>
                                <view class="text" v-if="item.status == 1">请于{{ item.arriveDate.slice(5, 11) }}现场签到</view>
                                <view class="text" v-if="item.status == 2">前方排队:{{ item.lineUpNum }}辆</view>
                                <view class="text" v-if="item.status == 3">请入园进入等待区</view>
                                <view class="text" v-if="item.status == 4">请入园停靠{{ item.platformName }}作业</view>
                                <view class="text" v-if="item.status == 5">{{ item.platformName }}作业中</view>
                                <view class="text" v-if="item.status == 6">作业已完成</view>
                                <view class="text" v-if="item.status == 7">转移中</view>
                                <view class="text red" v-if="item.status == 8">异常挂起</view>
                                <view class="time" v-if="item.waitTime && item.status == 2">{{ item.waitTime }}</view>
                                <view class="time" v-if="item.finishTimeStr && item.status == 5">预计完成时间:{{ item.finishTimeStr }}</view>
                            </view>
                        </view>
                        <view class="content">
                            <view class="info">
                                <view class="plate">
                                    <image src="@/static/driver/wuliu_ic_car@2x.png" class="icon" mode=""></image>
                                    <text>{{ item.carCodeFront }}</text>
                                </view>
                                <view class="plate">
                                    <image src="@/static/driver/wuliu_ic_huowu@2x.png" class="icon" mode=""></image>
                                    <text>{{ item.totalNum }}万支</text>
                                </view>
                            </view>
                            <view class="sub">
                                <view class="time" v-if="item.arriveDate && item.contractNum">{{ item.arriveDate.slice(5) }}</view>
                                <view class="time" v-if="item.type != 4 && item.platformWmsJob && item.platformWmsJob.ioCreatedate">
                                    {{ item.platformWmsJob.ioCreatedate.slice(5, 19) }}</view>
                                <view v-if="item.status == 0" class="sub_btn">确认任务</view>
                                <view v-if="item.status == 1" class="sub_btn">立即签到</view>
                                <view v-if="item.status == 2" class="sub_btn" @click.stop="handleQueue(item)">查看排队</view>
                            </view>
                        </view>
                    </view>
                </swiper-item>
            </swiper>
        </view>
        <!--  -->
        <view class="title_wrap">
            <view class="name">业务办理</view>
        </view>
        <view class="container1">
            <view class="left">
                <view class="img_wrap img1" @click="jump('/pages/driver/notice')">
                    <image src="@/static/driver/wuliu_ic_ruyuanyuyue@2x.png" class="img"></image>
                    <view class="h1">入园须知</view>
                    <view class="h2">RESERVATION</view>
                </view>
                <view class="img_wrap img2" @click="jump('/pages/driver/reservedGuide?str=bookingTips')">
                    <image src="@/static/driver/wuliu_ic_zhinan@2x.png" class="img"></image>
                    <view class="h1">预约指南</view>
                    <view class="h2">APPOINTMENT GUIDE</view>
                </view>
            </view>
            <view class="right">
                <view class="img_wrap img2" @click="jump('/pages/driver/reservedRecord')">
                    <image src="@/static/driver/wuliu_ic_yuyuejilu@2x.png" class="img"></image>
                    <view class="h1">预约记录</view>
                    <view class="h2">APPOINTMENT RECORD</view>
                </view>
                <view class="img_wrap img2" @click="jump('/pages/driver/queueUp')">
                    <image src="@/static/driver/wuliu_ic_paidui@2x.png" class="img"></image>
                    <view class="h1">月台排队情况</view>
                    <view class="h2">HIDDEN DANGER</view>
                </view>
                <view class="img_wrap img2" @click="jump('/pages/driver/reservedGuide?str=reservationMap')">
                    <image src="@/static/driver/wuliu_ic_daolan@2x.png" class="img"></image>
                    <view class="h1">园区导览图</view>
                    <view class="h2">GUIDE MAP</view>
                </view>
            </view>
        </view>
        <!--  -->
        <view class="copyright">
            <image src="@/static/logo_s@2x.png" class="mr6" mode="widthFix" />
            <text>安徽安泰物流有限责任公司版权所有</text>
        </view>
    </view>
</template>
<script>
import {
    logoutPost,
    driverHomeData,
    app_url
} from '@/api'
export default {
    data() {
        return {
            taskList: [],
            driverInfo: uni.getStorageSync('driverInfo'),
        }
    },
    onShow() {
        this.initData()
    },
    methods: {
        jump(path) {
            this.$jump(path)
        },
        initData() {
            driverHomeData().then(res => {
                if (res.code == 200) {
                    uni.setStorageSync('driverGuide', {
                        bookingTips: res.data.bookingTips,
                        reservationMap: res.data.reservationMap,
                        signDistance: res.data.signDistance
                    })
                    this.taskList = res.data.platformJobList || []
                }
            })
        },
        loginOut() {
            this.$store.commit('empty');
            logoutPost();
            uni.redirectTo({
                url: '/pages/driver/login'
            });
        },
        taskClick(item) {
            const status = item.status
            console.log(item);
            if(status == 0){
                uni.navigateTo({url: '/pages/driver/taskConfirm?id=' + item.id});
            }
            // else if(status == 2){
            //     uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id})
            // }
            else{
                uni.navigateTo({url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`});
            }
        },
        handleTask(item) {
            uni.navigateTo({
                url: '/pages/driver/taskConfirm?id=' + item.id
            });
        },
        handleSign(item) {
            uni.navigateTo({
                url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
            });
        },
        handleQueue(item) {
            uni.navigateTo({
                url:'/pages/driver/queueUp?jobId=' + item.id
            })
        },
    }
};
</script>
<style lang="scss">
.title_wrap {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 24rpx;
    padding-top: 10rpx;
    .name {
        font-weight: 600;
        font-size: 34rpx;
        color: #222222;
    }
    .btn {
        width: 144rpx;
        height: 56rpx;
        border-radius: 36rpx;
        border: 1rpx solid $uni-color-primary;
        font-size: 26rpx;
        color: $uni-color-primary;
        display: flex;
        justify-content: center;
        align-items: center;
    }
}
.main_app {
    padding-top: 12rpx;
}
.banner_wrap {
    padding: 54rpx 44rpx;
    color: #fff;
    position: relative;
    width: 688rpx;
    height: 270rpx;
    margin-bottom: 28rpx;
    .h1 {
        font-weight: bold;
        line-height: 66rpx;
        font-size: 44rpx;
        margin-bottom: 14rpx;
    }
    .h2 {
        font-weight: 600;
        font-size: 28rpx;
        width: 192rpx;
        color: $uni-color-primary;
        height: 48rpx;
        line-height: 48rpx;
        text-align: center;
        background: #ffffff;
        box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(39, 155, 170, 0.31);
        border-radius: 24rpx;
    }
    .banner {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        z-index: -1;
    }
}
.container1 {
    display: flex;
    flex-wrap: wrap;
    view {
        width: 336rpx;
    }
    .left {
        margin-right: 18rpx;
    }
    .img_wrap {
        position: relative;
        padding: 24rpx 0rpx 0 28rpx;
        border-radius: 8rpx;
        overflow: hidden;
        .h1 {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            line-height: 48rpx;
            margin-bottom: 4rpx;
        }
        .h2 {
            font-size: 22rpx;
            color: #7b9da1;
            line-height: 34rpx;
        }
        .img {
            width: 100%;
            height: 100%;
            position: absolute;
            top: 0;
            left: 0;
            z-index: -1;
        }
    }
    .img1 {
        width: 336rpx;
        height: 296rpx;
        margin-bottom: 16rpx;
    }
    .img2 {
        width: 336rpx;
        height: 140rpx;
        margin-bottom: 16rpx;
    }
}
.task_list {
    margin-bottom: 0rpx;
    .task_swiper {
        padding: 12rpx 10rpx;
        height: 340rpx;
        width: 730rpx;
        margin-left: -20rpx;
        box-sizing: border-box;
    }
    .item {
        background: #ffffff;
        box-shadow: 0rpx 6rpx 24rpx 0rpx rgba(39, 155, 170, 0.32);
        border-radius: 16rpx;
        height: 280rpx;
        width: 98%;
        margin-left: 1%;
        .head {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
            padding: 0rpx 30rpx;
            height: 92rpx;
            .name {
                font-weight: 600;
                font-size: 36rpx;
                color: #222222;
            }
            .status {
                color: $uni-color-primary;
                font-weight: 600;
                text-align: right;
                .time {
                    font-size: 24rpx;
                    font-weight: 360;
                }
            }
        }
        .content {
            height: 180rpx;
            .info {
                display: flex;
                padding: 24rpx 30rpx;
                .plate {
                    flex: 1;
                    display: flex;
                    align-items: center;
                    .icon {
                        width: 26rpx;
                        height: 26rpx;
                        margin-right: 10rpx;
                    }
                }
            }
            .sub {
                display: flex;
                justify-content: space-between;
                align-items: center;
                height: 68rpx;
                padding: 0 30rpx 0;
                .time {
                    font-size: 26rpx;
                    color: #999999;
                }
                .sub_btn {
                    height: 68rpx;
                    line-height: 68rpx;
                    padding: 0 34rpx;
                    color: #ffffff;
                    background: $uni-color-primary;
                    box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(39, 155, 170, 0.4);
                    border-radius: 40rpx;
                }
            }
        }
    }
}
.copyright {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 44rpx;
    font-size: 24rpx;
    color: #666666;
    image {
        width: 40rpx;
        height: 40rpx;
    }
}
</style>
            logoutPost()
            this.$store.commit('empty')
            window.location.href = app_url
        },
        taskClick(item) {
            const status = item.status
            if (status == 0) {
                uni.navigateTo({
                    url: '/pages/driver/taskConfirm?id=' + item.id
                })
            }
            // else if(status == 2){
            //     uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id})
            // }
            else {
                uni.navigateTo({
                    url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
                })
            }
        },
        handleTask(item) {
            uni.navigateTo({
                url: '/pages/driver/taskConfirm?id=' + item.id
            })
        },
        handleSign(item) {
            uni.navigateTo({
                url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
            })
        },
        handleQueue(item) {
            uni.navigateTo({
                url: '/pages/driver/queueUp?jobId=' + item.id
            })
        },
    }
}
</script>
<style lang="scss">
.title_wrap {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 24rpx;
    padding-top: 10rpx;
    .name {
        font-weight: 600;
        font-size: 34rpx;
        color: #222222;
    }
    .btn {
        width: 144rpx;
        height: 56rpx;
        border-radius: 36rpx;
        border: 1rpx solid $uni-color-primary;
        font-size: 26rpx;
        color: $uni-color-primary;
        display: flex;
        justify-content: center;
        align-items: center;
    }
}
.main_app {
    padding-top: 12rpx;
}
.banner_wrap {
    padding: 54rpx 44rpx;
    color: #fff;
    position: relative;
    width: 688rpx;
    height: 270rpx;
    margin-bottom: 28rpx;
    .h1 {
        font-weight: bold;
        line-height: 66rpx;
        font-size: 44rpx;
        margin-bottom: 14rpx;
    }
    .h2 {
        font-weight: 600;
        font-size: 28rpx;
        width: 192rpx;
        color: $uni-color-primary;
        height: 48rpx;
        line-height: 48rpx;
        text-align: center;
        background: #ffffff;
        box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(39, 155, 170, 0.31);
        border-radius: 24rpx;
    }
    .banner {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        z-index: -1;
    }
}
.container1 {
    display: flex;
    flex-wrap: wrap;
    view {
        width: 336rpx;
    }
    .left {
        margin-right: 18rpx;
    }
    .img_wrap {
        position: relative;
        padding: 24rpx 0rpx 0 28rpx;
        border-radius: 8rpx;
        overflow: hidden;
        .h1 {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            line-height: 48rpx;
            margin-bottom: 4rpx;
        }
        .h2 {
            font-size: 22rpx;
            color: #7b9da1;
            line-height: 34rpx;
        }
        .img {
            width: 100%;
            height: 100%;
            position: absolute;
            top: 0;
            left: 0;
            z-index: -1;
        }
    }
    .img1 {
        width: 336rpx;
        height: 296rpx;
        margin-bottom: 16rpx;
    }
    .img2 {
        width: 336rpx;
        height: 140rpx;
        margin-bottom: 16rpx;
    }
}
.task_list {
    margin-bottom: 0rpx;
    .task_swiper {
        padding: 12rpx 10rpx;
        height: 340rpx;
        width: 730rpx;
        margin-left: -20rpx;
        box-sizing: border-box;
    }
    .item {
        background: #ffffff;
        box-shadow: 0rpx 6rpx 24rpx 0rpx rgba(39, 155, 170, 0.32);
        border-radius: 16rpx;
        height: 280rpx;
        width: 98%;
        margin-left: 1%;
        .head {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
            padding: 0rpx 30rpx;
            height: 92rpx;
            .name {
                font-weight: 600;
                font-size: 36rpx;
                color: #222222;
            }
            .status {
                color: $uni-color-primary;
                font-weight: 600;
                text-align: right;
                .time {
                    font-size: 24rpx;
                    font-weight: 360;
                }
            }
        }
        .content {
            height: 180rpx;
            .info {
                display: flex;
                padding: 24rpx 30rpx;
                .plate {
                    flex: 1;
                    display: flex;
                    align-items: center;
                    .icon {
                        width: 26rpx;
                        height: 26rpx;
                        margin-right: 10rpx;
                    }
                }
            }
            .sub {
                display: flex;
                justify-content: space-between;
                align-items: center;
                height: 68rpx;
                padding: 0 30rpx 0;
                .time {
                    font-size: 26rpx;
                    color: #999999;
                }
                .sub_btn {
                    height: 68rpx;
                    line-height: 68rpx;
                    padding: 0 34rpx;
                    color: #ffffff;
                    background: $uni-color-primary;
                    box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(39, 155, 170, 0.4);
                    border-radius: 40rpx;
                }
            }
        }
    }
}
.copyright {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 44rpx;
    font-size: 24rpx;
    color: #666666;
    image {
        width: 40rpx;
        height: 40rpx;
    }
}
</style>
h5/pages/index/index.vue
@@ -29,7 +29,7 @@
</template>
<script>
import { wxAuthorize } from '@/api'
import { wxAuthorize, app_url } from '@/api'
export default {
  data() {
@@ -37,14 +37,8 @@
    }
  },
  onBackPress(options) {
    uni.redirectTo({
      url: '/pages/login/login'
    })
    return true
  },
  onLoad() {
  },
  methods: {
    jump(type) {
@@ -107,6 +101,7 @@
    display: flex;
    flex-direction: column;
    position: relative;
    .banner_bg {
      position: absolute;
      top: 0;
@@ -114,6 +109,7 @@
      width: 100%;
      z-index: -1;
    }
    .h2 {
      font-size: 28rpx;
      font-family: SourceHanSansSC, SourceHanSansSC;
@@ -121,6 +117,7 @@
      color: #ffffff;
      margin-top: 14rpx;
    }
    text {
      &:first-child {
        font-size: 44rpx;
@@ -131,12 +128,14 @@
      }
    }
  }
  .main_title {
    font-weight: 600;
    font-size: 32rpx;
    color: #222222;
    margin: 40rpx 0 32rpx;
  }
  .box_list {
    width: 100%;
    display: flex;
@@ -148,11 +147,13 @@
    .box_list_item {
      width: 100%;
      margin-bottom: 20rpx;
      image {
        width: 100%;
      }
    }
  }
  .copyright {
    display: flex;
    align-items: center;
@@ -160,6 +161,7 @@
    margin-top: 84rpx;
    font-size: 24rpx;
    color: #666666;
    image {
      width: 40rpx;
      height: 40rpx;
h5/pages/login/login.vue
@@ -1,6 +1,6 @@
<template>
    <view class="main_app">
        <image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />
        <image class="login_bg" src="@/static/staff/shenfen_bg@2x.png" mode="widthFix" />
        <view class="h1">安泰物流智慧园区</view>
        <view class="placeholder6 place">请选择您的身份</view>
        <view class="item" @click="userAuth(1)">
@@ -32,7 +32,7 @@
<script>
    import {
        wxAuthorizea,
        wxAuthorizea,
        getUserInfo
    } from '@/api'
    import {
@@ -41,18 +41,17 @@
    export default {
        data() {
            return {
                code: '091RVIkl2SZXDe4WySll2pAL8D1RVIkb'
                code: ''
            }
        },
        onLoad() {
        onShow() {
            var that = this
            let url = window.location.href
            let url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
            let code = ''
            if (url.indexOf('code=') !== -1) {
            if (window.location.href.indexOf('code=') !== -1 || this.code) {
            } else {
                return
                let url = window.location.href
            } else {
                // let url = window.location.href
                const appID = 'wx173e6caf5abc718a'
                let uri = encodeURIComponent(url)
                let authURL =
@@ -98,13 +97,13 @@
                let url = window.location.href
                let code = ''
                if (url.indexOf('code=') !== -1 || this.code) {
                    // const query = url.split('?')
                    // for (const q of query) {
                    //     if (q.indexOf('code=') !== -1) {
                    //         let statusIndex = q.indexOf('&state') - 1
                    //         code = q.substring(q.indexOf('code=') + 5, statusIndex)
                    //     }
                    // }
                    const query = url.split('?')
                    for (const q of query) {
                        if (q.indexOf('code=') !== -1) {
                            let statusIndex = q.indexOf('&state')
                            code = q.substring(q.indexOf('code=') + 5, statusIndex)
                        }
                    }
                    wxAuthorizea({
                        code: code || this.code,
                        source: source
@@ -113,35 +112,32 @@
                            that.$store.commit('setOpenId', res.data.openid)
                            if (res.data.member) {
                                that.$store.commit('setMember', res.data.member)
                            }
                            if (res.data.token) {
                                that.$store.commit('setToken', res.data.token)
                                getUserInfo().then(ress => {
                                  that.$store.commit('setUserInfo', ress.data)
                                })
                            }
                            let flag = res.data.member && res.data.member.id
                            setTimeout(() => {
                                if (source == 0) {
                                    this.driverLogin(flag)
                                } else if (source == 2) {
                                    this.staffLogin(flag)
                                } else {
                                    this.jump('/pages/index/index')
                                }
                            setTimeout(() => {
                                if (source == 0) {
                                    if (res.data.token) {
                                        that.$store.commit('setToken', res.data.token)
                                        getUserInfo().then(ress => {
                                            that.$store.commit('setDriverInfo', ress.data)
                                        })
                                    }
                                    this.driverLogin(flag)
                                } else if (source == 2) {
                                    if (res.data.token) {
                                        that.$store.commit('setToken', res.data.token)
                                        getUserInfo().then(ress => {
                                            that.$store.commit('setUserInfo', ress.data)
                                        })
                                    }
                                    this.staffLogin(flag)
                                } else {
                                    this.jump('/pages/index/index')
                                }
                            }, 300)
                        }
                    })
                }
                // }
                // 刷新token
                // setTimeout(() => {
                //     refreshToken().then(res => {
                //         if (res.code && res.code === 200) {
                //             this.$store.commit('setToken', res.data)
                //         }
                //     })
                // }, 3000)
            }
        }
    }
@@ -149,9 +145,9 @@
<style lang="scss">
    .main_app {
        width: 100vw;
        box-sizing: border-box;
        overflow: hidden;
        width: 100vw;
        box-sizing: border-box;
        overflow: hidden;
        margin: 0;
        height: 100vh;
        padding-top: 80rpx;
@@ -161,7 +157,7 @@
        .login_bg {
            position: absolute;
            top: 0;
            top: 0;
            left: 0;
            width: 100%;
            z-index: -1;
h5/pages/staff/index.vue
@@ -1,291 +1,292 @@
<template>
  <view class="main_app">
    <view class="title_wrap">
      <view class="name" v-if="userInfo.realname"
        >{{ userInfo.realname || "" }},欢迎登录~</view
      >
      <view class="name" v-else>请先登录</view>
      <view class="btn" @click="loginOut">{{
        userInfo.realname ? "退出登录" : "去登录"
      }}</view>
    </view>
    <view class="banner_wrap">
      <view class="h1">安泰物流</view>
      <view class="h2">安全重于泰山 服务追求卓越</view>
      <image
        class="banner"
        src="../../static/banner.jpg"
        mode="widthFix"
      ></image>
    </view>
    <view v-if="list1.filter(i => checkAuth(i.auth)).length > 0" class="title_wrap"><view class="name">业务办理</view></view>
    <view class="container1">
            <view class="list">
                <block v-for="item in list1" :key="item.name">
                    <view v-if="checkAuth(item.auth)" class="item" @click="jump(item.url)">
                        <image :src="item.img" class="icon" />
                        <view class="name">{{item.name}}</view>
                    </view>
                </block>
            </view>
<!--      <view class="left">
        <view class="img_wrap img1" @click="jump('/pages/staff/visitorReport')">
          <image src="@/static/staff/ic_fangkebaobei.png" class="img"></image>
          <view class="h1">访客报备</view>
          <view class="h2">VISITOR REPORTING</view>
        </view>
        <view class="img_wrap img2" @click="jump('/pages/staff/meetingSub')">
          <image src="@/static/staff/ic_yuyuehuiyishi.png" class="img"></image>
          <view class="h1">预约会议室</view>
          <view class="h2">BOOK A MEETING ROOM</view>
        </view>
      </view>
      <view class="right">
        <view class="img_wrap img2" @click="jump('/pages/staff/snapshot')">
          <image src="@/static/staff/ic_yinhuansuipai.png" class="img"></image>
          <view class="h1">隐患随手拍</view>
          <view class="h2">HIDDEN DANGER</view>
        </view>
        <view class="img_wrap img2" @click="jump('/pages/staff/vehicle/index')">
          <image
            src="@/static/staff/ic_yongcheshenqing.png"
            class="img"
          ></image>
          <view class="h1">用车申请</view>
          <view class="h2">VEHICLE APPLICATION</view>
        </view>
        <view
          class="img_wrap img2"
          @click="jump('/pages/changePassword/changePassword')"
        >
          <image src="@/static/staff/ic_xiugaimima.png" class="img"></image>
          <view class="h1">修改密码</view>
          <view class="h2">CHANGE PASSWORD</view>
        </view>
      </view> -->
    </view>
    <!--  -->
    <view v-if="list2.filter(i => checkAuth(i.auth)).length > 0" class="title_wrap"><view class="name">业务查询</view></view>
    <view class="container2">
            <view class="list">
                <block v-for="item in list2" :key="item.name">
                    <view v-if="checkAuth(item.auth)" class="item" @click="jump(item.url)">
                        <image :src="item.img" class="icon" />
                        <view class="name">{{item.name}}</view>
                        <view v-if="item.name == '任务中心' && taskInfo" class="task_num">{{ taskInfo }}</view>
                    </view>
                </block>
            </view>
<!--      <view class="img_wrap" @click="jump('/pages/staff/task/index')">
        <image class="img" src="@/static/staff/ic_renwuzhongxin.png"></image>
        <view class="h1">任务中心</view>
        <view class="h2">TASK CENTER</view>
        <view class="task_num">{{
         taskInfo
        }}</view>
      </view>
      <view class="img_wrap" @click="jump('/pages/staff/meetingCalendar')">
        <image class="img" src="@/static/staff/ic_wodehuiyi.png"></image>
        <view class="h1">我的会议日历</view>
        <view class="h2">MY MEETING CALENDAR</view>
      </view>
      <view class="img_wrap" @click="jump('/pages/staff/vehicle/sendACar')">
        <image class="img" src="@/static/staff/ic_paichejilu.png"></image>
        <view class="h1">派车记录</view>
        <view class="h2">VEHICLE DISPATCH</view>
      </view>
      <view class="img_wrap" @click="jump('/pages/staff/meetingManager')">
        <image class="img" src="@/static/staff/ic_huiyishiguanli.png"></image>
        <view class="h1">会议室管理</view>
        <view class="h2">MANAGE MEETING ROOMS</view>
      </view> -->
    </view>
    <view class="copyright">
      <image src="@/static/logo_s@2x.png" mode="widthFix" />
      <text>安徽安泰物流有限责任公司版权所有</text>
    </view>
  </view>
</template>
<script>
import { logoutPost, stagingHead, wxAuthorize, refreshToken } from '@/api'
export default {
  data() {
    return {
      userInfo: uni.getStorageSync('userInfo') || {permissions: []},
      taskInfo: 0,
            list1: [
                { name: '访客报备', url: '/pages/staff/visitorReport', img: require('@/static/home/ic_fangkebaobei@3x.png'),auth: 'weixin:menu:visitcar' },
                { name: '隐患随手拍', url: '/pages/staff/snapshot', img: require('@/static/home/ic_yinhuansuishoupai@3x.png'),auth: 'weixin:menu:hiddendanger' },
                { name: '用车申请', url: '/pages/staff/vehicle/index', img: require('@/static/home/ic_yongcheshenqing@3x.png'),auth: 'weixin:menu:usecar' },
                { name: '预约会议室', url: '/pages/staff/meetingSub', img: require('@/static/home/ic_yuyuehuiyishi@3x.png'),auth: 'weixin:menu:meeting' },
                { name: '修改密码', url: '/pages/changePassword/changePassword', img: require('@/static/home/ic_xiugaimima@3x.png'),auth: 'weixin:menu:password' },
                { name: '我的考勤', url: '/pages/staff/signin', img: require('@/static/home/ic_kaoqin@3x.png'),auth: 'weixin:menu:attendance' },
            ],
            list2: [
                { name: '任务中心', url: '/pages/staff/task/index', img: require('@/static/home/ic_renwuzhongxin@3x.png'),auth: 'weixin:menu:taskcenter' },
                { name: '我的会议日历', url: '/pages/staff/meetingCalendar', img: require('@/static/home/ic_wodehuiyi@3x.png'),auth: 'weixin:menu:meetingcalendar' },
                { name: '派车记录', url: '/pages/staff/vehicle/sendACar', img: require('@/static/home/ic_paichejilu@3x.png'),auth: 'weixin:menu:usecarrecord' },
                { name: '会议室管理', url: '/pages/staff/meetingManager', img: require('@/static/home/ic_huiyishiguanli@3x.png'),auth: 'weixin:menu:meetingmanage' }
            ],
    }
  },
  onLoad() {
    this.getTaskInfo()
    // 刷新token
    // setTimeout(() => {
    //   refreshToken().then(res => {
    //     if (res.code && res.code === 200) {
    //       this.$store.commit('setToken', res.data)
    //     }
    //   })
    // }, 3000)
  },
  mounted() {
    this.$eventBus.$on('taskBack', () => {
      console.log('----');
      this.getTaskInfo()
    })
        console.log('aaa', this.userInfo.permissions.indexOf('system:user:create'));
  },
  methods: {
    jump(path) {
      uni.navigateTo({
        url: path
      })
    },
        checkAuth(str) {
            const permissions = this.userInfo.permissions
            return permissions.indexOf(str) > -1
        },
    loginOut() {
      this.$store.commit('empty')
      logoutPost()
      uni.redirectTo({
        url: '/pages/staffLogin/login'
      })
    },
    getTaskInfo() {
      stagingHead({
        isDetail: '1'
      }).then(res => {
        this.taskInfo = res.data.noticeWaitNum + res.data.noticeCopyNum
                if(this.taskInfo && this.taskInfo > 99){
                    this.taskInfo = 99
                }
      })
    },
  }
};
</script>
<style lang="scss" scoped>
.title_wrap {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 24rpx;
    padding-top: 10rpx;
  .name {
    font-weight: 600;
    font-size: 34rpx;
    color: #222222;
  }
  .btn {
    width: 144rpx;
    height: 56rpx;
    border-radius: 36rpx;
    border: 1rpx solid $uni-color-primary;
    font-size: 26rpx;
    color: $uni-color-primary;
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
.main_app {
  padding-top: 12rpx;
}
.list{
    display: flex;
    width: 100%;
    flex-wrap: wrap;
    .item{
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 25%;
        margin-bottom: 40rpx;
        font-size: 26rpx;
        position: relative;
        image{
            width: 88rpx;
            height: 88rpx;
            margin-bottom: 20rpx;
        }
        .task_num{
            position: absolute;
            top: -10rpx;
            right: 28rpx;
            font-size: 24rpx;
            width: 36rpx;
            height: 36rpx;
            background-color: red;
            color: #fff;
            border-radius: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    }
}
.banner_wrap {
  padding: 54rpx 44rpx;
  color: #fff;
  position: relative;
  width: 688rpx;
  height: 270rpx;
  margin-bottom: 40rpx;
  .h1 {
    font-weight: bold;
    line-height: 66rpx;
    font-size: 44rpx;
    margin-bottom: 14rpx;
  }
  .banner {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    z-index: -1;
  }
}
.container1 {
  display: flex;
  flex-wrap: wrap;
    padding: 10rpx 0 10rpx;
}
.container2 {
  display: flex;
  flex-wrap: wrap;
}
.copyright {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24rpx;
  color: #666666;
    position: fixed;
    width: 100%;
    left: 0;
    bottom: 48rpx;
  image {
    width: 40rpx;
    height: 40rpx;
  }
}
</style>
<template>
    <view class="main_app">
        <view class="title_wrap">
            <view class="name" v-if="userInfo.realname">{{ userInfo.realname || "" }},欢迎登录~</view>
            <view class="name" v-else>请先登录</view>
            <view class="btn" @click="loginOut">{{
                userInfo.realname ? "退出登录" : "去登录"
            }}</view>
        </view>
        <view class="banner_wrap">
            <view class="h1">安泰物流</view>
            <view class="h2">安全重于泰山 服务追求卓越</view>
            <image class="banner" src="../../static/banner.jpg" mode="widthFix"></image>
        </view>
        <view v-if="list1.filter(i => checkAuth(i.auth)).length > 0" class="title_wrap">
            <view class="name">业务办理</view>
        </view>
        <view class="container1">
            <view class="list">
                <block v-for="item in list1" :key="item.name">
                    <view v-if="checkAuth(item.auth)" class="item" @click="jump(item.url)">
                        <image :src="item.img" class="icon" />
                        <view class="name">{{ item.name }}</view>
                    </view>
                </block>
            </view>
        </view>
        <!--  -->
        <view v-if="list2.filter(i => checkAuth(i.auth)).length > 0" class="title_wrap">
            <view class="name">业务查询</view>
        </view>
        <view class="container2">
            <view class="list">
                <block v-for="item in list2" :key="item.name">
                    <view v-if="checkAuth(item.auth)" class="item" @click="jump(item.url)">
                        <image :src="item.img" class="icon" />
                        <view class="name">{{ item.name }}</view>
                        <view v-if="item.name == '任务中心' && taskInfo" class="task_num">{{ taskInfo }}</view>
                    </view>
                </block>
            </view>
        </view>
        <view class="copyright">
            <image src="@/static/logo_s@2x.png" mode="widthFix" />
            <text>安徽安泰物流有限责任公司版权所有</text>
        </view>
    </view>
</template>
<script>
import {
    logoutPost,
    stagingHead,
    wxAuthorize,
    refreshToken,
    app_url
} from '@/api'
export default {
    data() {
        return {
            userInfo: uni.getStorageSync('userInfo') || {
                permissions: []
            },
            taskInfo: 0,
            list1: [{
                name: '访客报备',
                url: '/pages/staff/visitorReport',
                img: require('@/static/home/ic_fangkebaobei@3x.png'),
                auth: 'weixin:menu:visitcar'
            },
            {
                name: '隐患随手拍',
                url: '/pages/staff/snapshot',
                img: require('@/static/home/ic_yinhuansuishoupai@3x.png'),
                auth: 'weixin:menu:hiddendanger'
            },
            {
                name: '用车申请',
                url: '/pages/staff/vehicle/index',
                img: require('@/static/home/ic_yongcheshenqing@3x.png'),
                auth: 'weixin:menu:usecar'
            },
            {
                name: '预约会议室',
                url: '/pages/staff/meetingSub',
                img: require('@/static/home/ic_yuyuehuiyishi@3x.png'),
                auth: 'weixin:menu:meeting'
            },
            {
                name: '修改密码',
                url: '/pages/changePassword/changePassword',
                img: require('@/static/home/ic_xiugaimima@3x.png'),
                auth: 'weixin:menu:password'
            },
            {
                name: '我的考勤',
                url: '/pages/staff/signin',
                img: require('@/static/home/ic_kaoqin@3x.png'),
                auth: 'weixin:menu:attendance'
            },
            ],
            list2: [{
                name: '任务中心',
                url: '/pages/staff/task/index',
                img: require('@/static/home/ic_renwuzhongxin@3x.png'),
                auth: 'weixin:menu:taskcenter'
            },
            {
                name: '我的会议日历',
                url: '/pages/staff/meetingCalendar',
                img: require('@/static/home/ic_wodehuiyi@3x.png'),
                auth: 'weixin:menu:meetingcalendar'
            },
            {
                name: '派车记录',
                url: '/pages/staff/vehicle/sendACar',
                img: require('@/static/home/ic_paichejilu@3x.png'),
                auth: 'weixin:menu:usecarrecord'
            },
            {
                name: '会议室管理',
                url: '/pages/staff/meetingManager',
                img: require('@/static/home/ic_huiyishiguanli@3x.png'),
                auth: 'weixin:menu:meetingmanage'
            }
            ],
        }
    },
    mounted() {
    },
    onShow() {
        setTimeout(() => {
            this.getTaskInfo()
        }, 300)
    },
    methods: {
        jump(path) {
            if (path == '/pages/staff/signin') {
                window.open('https://atwl.ahzyssl.com/dps/web/wxAuth/loginV2?oaId=atwl&redirectId=index')
            } else {
                uni.navigateTo({
                    url: path
                })
            }
        },
        checkAuth(str) {
            const permissions = this.userInfo.permissions
            return permissions.indexOf(str) > -1
        },
        loginOut() {
            logoutPost()
            this.$store.commit('empty')
            window.location.href = app_url
        },
        getTaskInfo() {
            stagingHead({
                isDetail: '1'
            }).then(res => {
                this.taskInfo = res.data.noticeWaitNum + res.data.noticeCopyNum
                if (this.taskInfo && this.taskInfo > 99) {
                    this.taskInfo = 99
                }
            })
        },
    }
}
</script>
<style lang="scss" scoped>
.title_wrap {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 24rpx;
    padding-top: 10rpx;
    .name {
        font-weight: 600;
        font-size: 34rpx;
        color: #222222;
    }
    .btn {
        width: 144rpx;
        height: 56rpx;
        border-radius: 36rpx;
        border: 1rpx solid $uni-color-primary;
        font-size: 26rpx;
        color: $uni-color-primary;
        display: flex;
        justify-content: center;
        align-items: center;
    }
}
.main_app {
    padding-top: 12rpx;
}
.list {
    display: flex;
    width: 100%;
    flex-wrap: wrap;
    .item {
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 25%;
        margin-bottom: 40rpx;
        font-size: 26rpx;
        position: relative;
        image {
            width: 88rpx;
            height: 88rpx;
            margin-bottom: 20rpx;
        }
        .task_num {
            position: absolute;
            top: -10rpx;
            right: 28rpx;
            font-size: 24rpx;
            width: 36rpx;
            height: 36rpx;
            background-color: red;
            color: #fff;
            border-radius: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    }
}
.banner_wrap {
    padding: 54rpx 44rpx;
    color: #fff;
    position: relative;
    width: 688rpx;
    height: 270rpx;
    margin-bottom: 40rpx;
    .h1 {
        font-weight: bold;
        line-height: 66rpx;
        font-size: 44rpx;
        margin-bottom: 14rpx;
    }
    .banner {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        z-index: -1;
    }
}
.container1 {
    display: flex;
    flex-wrap: wrap;
    padding: 10rpx 0 10rpx;
}
.container2 {
    display: flex;
    flex-wrap: wrap;
}
.copyright {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24rpx;
    color: #666666;
    position: fixed;
    width: 100%;
    left: 0;
    bottom: 48rpx;
    image {
        width: 40rpx;
        height: 40rpx;
    }
}
</style>
h5/pages/staff/meetingCalendar.vue
@@ -242,11 +242,11 @@
        console.log(total);
        console.log(recordList);
    if (activeTab == '0') {
            // if(total <= myMeetingList.length) return this.showToast('暂无更多数据')
            if(total <= myMeetingList.length) return this.showToast('暂无更多数据')
      this.myPage = this.myPage + 1
      this.getDayMeeting()
    } else {
            // if(total <= recordList.length) return this.showToast('暂无更多数据')
            if(total <= recordList.length) return this.showToast('暂无更多数据')
      this.recordPage = this.recordPage + 1
      this.getRecordList()
    }
h5/pages/staff/snapshot.vue
@@ -1,17 +1,17 @@
<template>
    <view class="main_app">
        <view class="main_wrap">
            <!--  -->
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>责任部门</text>
                </view>
                <view class="value" @click="isShowCompany = true">
                    <text class="mr6"
                        :style="{ color: param.companyName ? '#000000' : '#999999' }">{{ param.companyName ? param.companyName : "请选择" }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            <!--  -->
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>责任部门</text>
                </view>
                <view class="value" @click="isShowCompany = true">
                    <text class="mr6"
                        :style="{ color: param.companyName ? '#000000' : '#999999' }">{{ param.companyName ? param.companyName : "请选择" }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="line">
                <view class="label">
@@ -105,8 +105,8 @@
                <view class="footer_btn" @click="onSubmit">提交</view>
            </view>
        </view>
        <!--  -->
        <u-picker keyName="name" :show="isShowCompany" closeOnClickOverlay :columns="deptList" @confirm="seletedCompany"
        <!--  -->
        <u-picker keyName="name" :show="isShowCompany" closeOnClickOverlay :columns="deptList" @confirm="seletedCompany"
            @close="isShowCompany = false" @cancel="isShowCompany = false"></u-picker>
        <!-- 区域 -->
        <u-picker keyName="name" :show="isShowArea" closeOnClickOverlay :columns="areaOptions" @confirm="seletedArea"
@@ -130,7 +130,7 @@
    import {
        uploadUrl,
        DangerCreate,
        DangerConfigType,
        DangerConfigType,
        deptListPost
    } from '@/api'
    import dayjs from 'dayjs'
@@ -140,13 +140,13 @@
                param: {},
                submitFileList: [],
                isShowCompany: false,
                isShowCompany: false,
                isShowArea: false,
                isShowType: false,
                isShowTime: false,
                showUpload: false,
                deptList: [],
                deptList: [],
                areaOptions: [],
                areaType: [],
            }
@@ -171,10 +171,10 @@
                const {
                    param,
                    submitFileList
                } = this
                if (!param.companyName) return uni.showToast({
                    title: '请选择责任部门',
                    icon: 'none'
                } = this
                if (!param.companyName) return uni.showToast({
                    title: '请选择责任部门',
                    icon: 'none'
                })
                if (!param.areaName) return uni.showToast({
                    title: '请选择隐患区域',
@@ -205,20 +205,20 @@
                        this.$jump('/pages/staff/snapshotResult')
                    }
                })
            },
            seletedCompany(e) {
                const item = e.value[0]
                this.$set(this.param, 'companyId', item.id)
                this.$set(this.param, 'companyName', item.name)
                this.$set(this.param, 'areaId', '')
                this.$set(this.param, 'areaName', '')
                DangerConfigType({
                    type: '0',
                    companyId: item.id
                }).then(res => {
                    this.areaOptions = [res.data]
                })
                this.isShowCompany = false
            },
            seletedCompany(e) {
                const item = e.value[0]
                this.$set(this.param, 'companyId', item.id)
                this.$set(this.param, 'companyName', item.name)
                this.$set(this.param, 'areaId', '')
                this.$set(this.param, 'areaName', '')
                DangerConfigType({
                    type: '0',
                    companyId: item.id
                }).then(res => {
                    this.areaOptions = [res.data]
                })
                this.isShowCompany = false
            },
            seletedArea(e) {
                const item = e.value[0]
@@ -250,9 +250,9 @@
                this.$set(this.param, 'submitTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
                this.isShowTime = false
            },
            initConfig() {
                deptListPost({queryHiddenDanger: 1}).then(res => {
                    this.deptList = [res.data]
            initConfig() {
                deptListPost({queryHiddenDanger: 1}).then(res => {
                    this.deptList = [res.data]
                })
                DangerConfigType({
                    type: '1'
@@ -281,7 +281,7 @@
                this.showUpload = false
                let token = uni.getStorageSync('token') || ''
                uni.chooseImage({
                    count: 4,
                    count: 9,
                    success: (chooseImageRes) => {
                        uni.showLoading({
                            title: '上传中',
@@ -425,9 +425,9 @@
            .adduser_list_item_ipt1_upload {
                margin-top: 24rpx;
                width: 120rpx;
                height: 120rpx;
                margin-right: 24rpx;
                width: 156rpx;
                height: 156rpx;
                margin-right: 20rpx;
                border: 2rpx solid #e5e5e5;
                background: #f7f7f7;
                color: #666666;
@@ -437,7 +437,9 @@
                align-items: center;
                justify-content: center;
                position: relative;
                &:nth-of-type(4n){
                    margin-right: 0;
                }
                .close {
                    position: absolute;
                    right: -20rpx;
@@ -452,7 +454,7 @@
                video {
                    width: 100%;
                    max-height: 120rpx;
                    max-height: 156rpx;
                }
            }
        }
@@ -470,7 +472,7 @@
    .footer {
        width: 100%;
        padding: 0 30rpx;
        padding: 0 30rpx;
        margin-top: 80rpx;
        padding-bottom: env(safe-area-inset-bottom);
        box-sizing: border-box;
h5/pages/staff/task/index.vue
@@ -535,6 +535,7 @@
                  font-size: 26rpx;
                  font-weight: 400;
                    color: #999999;
                    width: 120rpx;
                }
        .loading {
          color: $uni-color-primary;
h5/pages/staff/task/vDangetAppr.vue
@@ -9,10 +9,14 @@
                class="status_img"></image>
            <view>{{ info.content }}</view>
            <view class="file_list">
                <view class="img_wrap" v-for="item in info.submitFileList" :key="item.id">
                <view class="img_wrap" v-for="item,i in info.submitFileList" :key="item.id">
                    <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="video" :controls="false" />
                    <view v-if="item.type == 1"  @click="videoClick(item, i)" class="video_wrap">
                        <video :id="'id' + i" :show-center-play-btn="false"
                            :src="item.fileurlFull" muted class="video" :controls="false" />
                        <image src="@/static/play.png" class="play" mode=""></image>
                    </view>
                </view>
            </view>
            <view class="text_wrap">
@@ -257,6 +261,11 @@
        <u-datetime-picker :minDate="new Date().getTime()" :show="isShowHandleDate" @confirm="confirmHandleDate"
            @cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
        <!--  -->
        <view v-if="videoPlay" class="video_app">
            <video controls id="myvideo" :src="videoUrl" @fullscreenchange="screenChange"></video>
        </view>
    </view>
</template>
@@ -327,7 +336,11 @@
                    page: 1,
                    capacity: 50
                },
                memberList: []
                memberList: [],
                videoPlay: false,
                videoContext: null,
                videoUrl: ''
            };
        },
        onLoad(op) {
@@ -340,6 +353,23 @@
                uni.previewImage({
                    urls: [url]
                });
            },
            screenChange(e) {
                let fullScreen = e.detail.fullScreen; // 值true为进入全屏,false为退出全屏
                if (!fullScreen) {
                    //退出全屏
                    this.videoPlay = false; // 隐藏播放盒子
                }
            },
            videoClick(item, i) {
                this.videoContext = uni.createVideoContext("myvideo", this); // this这个是实例对象 必传
                console.log(item)
                this.videoUrl = item.fileurlFull;
                this.videoContext.requestFullScreen({
                    direction: 90
                });
                this.videoContext.play();
                this.videoPlay = true;
            },
            handleOpen() {
                this.isShowHandle = true;
@@ -482,7 +512,7 @@
                this.showUploadBe = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    count: 9,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
@@ -573,7 +603,7 @@
                this.showUploadAf = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    count: 9,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
@@ -661,7 +691,7 @@
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    count: 9,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
@@ -897,9 +927,9 @@
        }
        .adduser_list_item_ipt1_upload {
            width: 120rpx;
            height: 120rpx;
            margin-right: 24rpx;
            width: 156rpx;
            height: 156rpx;
            margin-right: 20rpx;
            border: 2rpx solid #e5e5e5;
            background: #f7f7f7;
            color: #666666;
@@ -909,6 +939,10 @@
            align-items: center;
            justify-content: center;
            position: relative;
            &:nth-of-type(4n) {
                margin-right: 0;
            }
            .close {
                position: absolute;
@@ -924,7 +958,7 @@
            video {
                width: 100%;
                max-height: 120rpx;
                max-height: 156rpx;
            }
        }
@@ -999,25 +1033,44 @@
            .file_list {
                display: flex;
                margin-bottom: 20rpx;
                overflow-x: auto;
                flex-wrap: wrap;
                .img_wrap {
                    margin-top: 24rpx;
                    min-width: 160rpx;
                    height: 160rpx;
                    width: 156rpx;
                    height: 156rpx;
                    border: 2rpx solid #e5e5e5;
                    background: #f7f7f7;
                    color: #666666;
                    font-size: 22rpx;
                    display: flex;
                    display: flex;
                    border-radius: 4rpx;
                    flex-direction: column;
                    align-items: center;
                    justify-content: center;
                    position: relative;
                    margin-right: 16rpx;
                    margin-right: 20rpx;
                    flex-shrink: 0;
                }
                    &:nth-of-type(4n) {
                        margin-right: 0;
                    }
                }
                .video_wrap{
                    position: relative;
                    border: 1px solid;
                    width: 156rpx;
                    height: 156rpx;
                    border-radius: 4rpx;
                    .play{
                        width: 60rpx;
                        height: 60rpx;
                        position: absolute;
                        top: 50%;
                        left: 50%;
                        transform: translate(-50%, -50%);
                    }
                }
                .img {
                    width: 100%;
                    max-height: 100%;
@@ -1036,9 +1089,13 @@
                margin-top: 20rpx;
                .line {
                    margin-bottom: 12rpx;
                    margin-bottom: 18rpx;
                    display: flex;
                    font-size: 24rpx;
                    &:nth-last-child(1) {
                        margin-bottom: 0;
                    }
                    .label {
                        color: #999999;
@@ -1055,7 +1112,7 @@
                line-height: 60rpx;
                padding: 0 32rpx;
                border-radius: 0rpx 0rpx 0rpx 30rpx;
                background-color: #e9edff;
                background: rgba(39, 155, 170, 0.12);
                color: $uni-color-primary;
            }
@@ -1169,10 +1226,10 @@
            }
            .adduser_list_item_ipt1_upload {
                margin-top: 24rpx;
                width: 120rpx;
                height: 120rpx;
                margin-right: 24rpx;
                margin-top: 20rpx;
                width: 156rpx;
                height: 156rpx;
                margin-right: 20rpx;
                border: 2rpx solid #e5e5e5;
                background: #f7f7f7;
                color: #666666;
@@ -1183,6 +1240,10 @@
                justify-content: center;
                position: relative;
                &:nth-of-type(4n) {
                    margin-right: 0;
                }
                .close {
                    position: absolute;
                    right: -20rpx;
h5/pages/staff/vehicle/apply.vue
@@ -134,8 +134,8 @@
      <view class="line"
        >4、公司借给申请人用车,申请借车人为第一责任人,不允许转借给其他人使用,若要借给他人使用。责任人要承担全部责任。</view
      >
            <view class="sub_btn" @click="handleSub">提交</view>
    </view>
    <view class="sub_btn" @click="handleSub">提交</view>
    <!--  -->
    <!-- :minDate="new Date(param.startTime).getTime()"
      :maxDate="new Date(param.endTime).getTime()" -->
@@ -291,9 +291,10 @@
  }
}
.sub_btn {
  position: fixed;
  bottom: 84rpx;
  left: 30rpx;
  // position: fixed;
  // bottom: 84rpx;
  // left: 30rpx;
    margin-top: 60rpx;
  width: 690rpx;
  height: 88rpx;
  line-height: 88rpx;
h5/pages/staff/vehicle/sendACar.vue
@@ -90,7 +90,7 @@
      carsList: [],
      param: {
        queryDate: dayjs().format('YYYY-MM-DD'),
        memberId: uni.getStorageSync('userInfo').memberId
        // memberId: uni.getStorageSync('userInfo').memberId
      },
      minDate: '',
      pagination: {
@@ -133,7 +133,7 @@
    },
    itemDetail(item) {
      uni.navigateTo({
        url: "/pages/staff/vehicle/sendACarDetail?id=" + item.id
        url: `/pages/staff/vehicle/sendACarDetail?id=${item.id}`
      })
    },
    seletedCar(e) {
h5/pages/staff/vehicle/sendACarDetail.vue
@@ -1,20 +1,16 @@
<template>
    <view class="main_app">
        <view class="status_wrap">
          <view class="name">{{ info.createMemberName }}提交的用车申请</view>
          <view
            class="desc"
            :class="{
              gray: info.status == '2' || info.status == '3' || info.status == '4',
            }"
            >{{ infoStatus }}</view
          >
          <view v-if="info.status == '0' || info.status == '1'" class="status">{{
            statusMap[info.status]
          }}</view>
          <image v-if="info.status == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img"></image>
          <image v-if="info.status == '3' || info.status == '6'" src="@/static/ic_refused@2x.png" mode="widthFix"
            class="status_img"></image>
        <view class="status_wrap">
            <view class="name">{{ info.createMemberName || info.creatorName || info.memberName}}提交的用车申请</view>
            <view class="desc gray">{{ info.companyName }}</view>
            <view class="desc" style="margin-top: 16rpx;" v-if="info.status == 0">处理中</view>
            <view v-if="info.status == '0' || info.status == '1'" class="status">{{
            statusMap[info.status]
          }}</view>
            <image v-if="info.status == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img"></image>
            <image v-if="info.status == '4'" src="@/static/ic_cancel.png" mode="widthFix" class="status_img"></image>
            <image v-if="info.status == '3' || info.status == '6'" src="@/static/ic_refused@2x.png" mode="widthFix"
                class="status_img"></image>
        </view>
        <!--  -->
        <view class="emyty"></view>
@@ -45,52 +41,52 @@
                <view class="label">车辆信息</view>
                <view class="value">{{ info.carCode }}</view>
            </view>
            <view class="item">
            <view class="item" v-if="info.driverName">
                <view class="label">司机信息</view>
                <view class="value">{{ info.driverName }} {{ info.driverPhone }}</view>
                <view class="value">{{ info.driverName }} {{ info.driverPhone || '' }}</view>
            </view>
        </view>
        <!-- 流程 -->
        <view class="flow_wrap">
            <view class="flow_title">流程</view>
            <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 v-if="item.type == 1" class="img" src="@/static/staff/ic_chaosong@2x.png" />
                        <image v-else-if="item.approveType == 1 || item.approveType == 0" class="img"
                            src="@/static/staff/ic_shenpiren@2x.png" />
                        <image v-else-if="item.faceImg" :src="item.faceImg" class="img"></image>
                        <span v-else class="img_name">{{item.memberName && item.memberName.slice(0,1)}}</span>
                        <image v-if="item.status == 2" class="status" src="@/static/staff/liucheng_success@2x.png"
                            mode="widthFix" />
                        <image v-if="item.status == 3" class="status" src="@/static/staff/liucheng_fail@2x.png" mode="widthFix" />
                    </view>
                    <view class="content">
                        <view class="head">
                            <view class="event">{{ item.title }}</view>
                            <view class="time">{{ item.checkDate }}</view>
                        </view>
                        <view class="name_wrap">
                            <text>{{ item.memberName
                      }}<text :class="{ status: item.statusInfo == '处理中' || item.status == '1'  }"
                                    v-if="item.statusInfo">({{ item.statusInfo }})</text></text>
                        </view>
                        <view v-if="item.checkInfo" class="remark">{{
                    item.checkInfo
                  }}</view>
                        <!-- 抄送人 -->
                        <view v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="children">
                            <view class="child" v-for="child in item.approveList" :key="child.id">
                                <image v-if="child.faceImg" class="child_img" :src="child.faceImg" />
                                <view v-else class="child_name">{{ child.memberName && child.memberName.slice(0,1) }}</view>
                                <view>{{ child.memberName }}</view>
                            </view>
                        </view>
                    </view>
                </view>
            <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 v-if="item.type == 1" class="img" src="@/static/staff/ic_chaosong@2x.png" />
                        <image v-else-if="item.approveType == 1 || item.approveType == 0" class="img"
                            src="@/static/staff/ic_shenpiren@2x.png" />
                        <image v-else-if="item.faceImg" :src="item.faceImg" class="img"></image>
                        <span v-else class="img_name">{{item.memberName && item.memberName.slice(0,1)}}</span>
                        <image v-if="item.status == 2" class="status" src="@/static/staff/liucheng_success@2x.png"
                            mode="widthFix" />
                        <image v-if="item.status == 3" class="status" src="@/static/staff/liucheng_fail@2x.png" mode="widthFix" />
                    </view>
                    <view class="content">
                        <view class="head">
                            <view class="event">{{ item.title }}</view>
                            <view class="time">{{ item.checkDate }}</view>
                        </view>
                        <view class="name_wrap">
                            <text>{{ item.memberName
                      }}<text :class="{ status: item.statusInfo == '处理中' || item.status == '1'  }"
                                    v-if="item.statusInfo">({{ item.statusInfo }})</text></text>
                        </view>
                        <view v-if="item.checkInfo" class="remark">{{
                    item.checkInfo
                  }}</view>
                        <!-- 抄送人 -->
                        <view v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="children">
                            <view class="child" v-for="child in item.approveList" :key="child.id">
                                <image v-if="child.faceImg" class="child_img" :src="child.faceImg" />
                                <view v-else class="child_name">{{ child.memberName && child.memberName.slice(0,1) }}</view>
                                <view>{{ child.memberName }}</view>
                            </view>
                        </view>
                    </view>
                </view>
            </view>
        </view>
        <view class="emyty"></view>
@@ -103,13 +99,14 @@
                <view class="btn" @click="handleSub(3)">拒绝</view>
                <view class="btn agree" @click="handleSub(2)">同意</view>
            </template>
        </view>
        <template v-else>
            <view v-if="(info.approveDateVO.canBeApproved == 1 || userInfo.memberId == info.memberId) && info.status == 0" class="main_footer"  @click="isShowBack = true">
                <view class="agree btn">撤回用车</view>
            </view>
        </template>
        </view>
        <template v-else>
            <view v-if="(info.approveDateVO.canBeApproved == 1 || userInfo.memberId == info.memberId) && info.status == 0"
                class="main_footer" @click="isShowBack = true">
                <view class="agree btn">撤回用车</view>
            </view>
        </template>
        <!-- 撤销 -->
        <u-popup :show="isShowBack" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="isShowBack = false">
@@ -127,7 +124,8 @@
            <view class="appr_modal">
                <view class="title">{{ param.status == 2 ? "同意" : "拒绝" }}</view>
                <view v-if="param.status == 2" class="line" @click="openModal">
                    <text :class="{placeholder9: info.approveDateVO.driverParam == 0}" v-if="param.driverName">{{ param.driverName }}</text>
                    <text :class="{placeholder9: info.approveDateVO.driverParam == 0}"
                        v-if="param.driverName">{{ param.driverName }}</text>
                    <text v-else class="placeholder9">派车司机</text>
                    <u-icon v-if="info.approveDateVO.driverParam == 1" class="ml12" name="arrow-right" color="#999999" />
                </view>
@@ -159,7 +157,7 @@
                showApprModal: false,
                isShowBack: false,
                backParam: {},
                isShowDrive: false,
                isShowDrive: false,
                userInfo: uni.getStorageSync('userInfo') || {},
                id: '',
                appr: '',
@@ -207,11 +205,11 @@
                        })
                    }
                })
            },
            openModal() {
                if(this.info.approveDateVO.driverParam == 0) return
                this.isShowDrive = true
            },
            openModal() {
                if (this.info.approveDateVO.driverParam == 0) return
                this.isShowDrive = true
            },
            onSubBack() {
                carUseBookBack({
@@ -265,20 +263,20 @@
                    this.getDriveList()
                } else {
                }
                if(this.info.driverId && this.info.driverName){
                        this.$set(this.param, 'driverId', this.info.driverId)
                        this.$set(this.param, 'driverName', this.info.driverName)
                }
                if (this.info.driverId && this.info.driverName) {
                    this.$set(this.param, 'driverId', this.info.driverId)
                    this.$set(this.param, 'driverName', this.info.driverName)
                }
                this.showApprModal = true
            },
            getDriveList() {
                driveListPost({}).then(res => {
                driveListPost({}).then(res => {
                    const temp = res.data || []
                    this.driveList = [res.data]
                    if(this.param.driverId){
                        const item = temp.find(i=>i.id == this.param.driverId)
                        this.$set(this.param, 'driverName', item.name)
                    this.driveList = [res.data]
                    if (this.param.driverId) {
                        const item = temp.find(i => i.id == this.param.driverId)
                        this.$set(this.param, 'driverName', item.name)
                    }
                })
            },
@@ -505,45 +503,46 @@
            }
        }
 .status_wrap {
    position: relative;
    padding: 30rpx 0;
    .name {
      font-weight: 600;
      font-size: 32rpx;
      margin-bottom: 20rpx;
      color: #222222;
    }
    .desc {
      font-size: 26rpx;
      color: #ed4545;
    }
    .gray {
      color: #999999;
    }
    .status {
      position: absolute;
      right: -30rpx;
      top: 0;
      height: 60rpx;
      line-height: 60rpx;
      padding: 0 32rpx;
      border-radius: 0rpx 0rpx 0rpx 30rpx;
      background-color: #e9edff;
      color: $uni-color-primary;
    }
    .status_img {
      position: absolute;
      right: 0rpx;
      top: 20rpx;
      width: 120rpx;
    }
  }
        .status_wrap {
            position: relative;
            padding: 30rpx 0;
            .name {
                font-weight: 600;
                font-size: 32rpx;
                margin-bottom: 20rpx;
                color: #222222;
            }
            .desc {
                font-size: 26rpx;
                color: #ed4545;
            }
            .gray {
                color: #999999;
            }
            .status {
                position: absolute;
                right: -30rpx;
                top: 0;
                height: 60rpx;
                line-height: 60rpx;
                padding: 0 32rpx;
                border-radius: 0rpx 0rpx 0rpx 30rpx;
                background-color: #e9edff;
                color: $uni-color-primary;
            }
            .status_img {
                position: absolute;
                right: 0rpx;
                top: 20rpx;
                width: 120rpx;
            }
        }
        .main_footer {
            padding-bottom: 64rpx;
            display: flex;
h5/pages/staffLogin/login.vue
@@ -1,5 +1,5 @@
<template>
  <view class="login">
  <view class="login" :style="{height: windowHeight  + 'px'}">
    <image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />
    <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
    <view class="login_title">安泰物流智慧园区</view>
@@ -30,7 +30,7 @@
      >
    </view>
    <view class="deal_wrap" v-show="!showKeyboard">
    <view class="deal_wrap">
      <image
        @click="changeFalg"
        v-if="ProtocolFlag"
@@ -44,6 +44,7 @@
        src="@/static/meeting/icon/ic_choose@2x.png"
        mode="widthFix"
        class="checked"
      ></image>
      <text>登录即同意</text>
      <text class="deal" @click="showContent">《安泰物流用户协议》</text>
@@ -52,19 +53,22 @@
    <u-popup
      :show="isShowProtocol"
      @close="isShowProtocol = false"
            closeable
      :round="8"
      mode="center"
    >
      <view class="modal">
        <!-- <view v-html="htmlText"></view> -->
                <mp-html :content="htmlText" />
                <view class="content">
                    <mp-html :content="htmlText" />
                </view>
      </view>
    </u-popup>
  </view>
</template>
<script>
import { loginPost, loginCaptcha, getUserInfo, getSystemDictData } from '@/api'
import { loginPost, loginCaptcha, getUserInfo, getSystemDictData, saveHkUserOpenid } from '@/api'
import { mapState, mapMutations } from 'vuex'
export default {
  name: 'login',
@@ -81,12 +85,16 @@
      isShowProtocol: false,
      ProtocolFlag: false,
      captcha: {},
      htmlText: ''
      htmlText: '',
            windowHeight: ''
    }
  },
  onLoad() {
    this.initCaptcha()
        const result = uni.getWindowInfo()
        this.windowHeight = result.windowHeight
        console.log('result', result);
  },
  onBackPress(options) {
    uni.redirectTo({
@@ -148,6 +156,7 @@
              url: "/pages/staff/index"
            })
          })
                    saveHkUserOpenid({})
        }
      })
    }
@@ -163,6 +172,7 @@
  box-sizing: border-box;
  align-items: center;
  flex-direction: column;
    position: relative;
  background: linear-gradient(
    180deg,
    rgba(39, 155, 170, 0.2) 0%,
@@ -247,7 +257,7 @@
    }
  }
  .deal_wrap {
    position: fixed;
    position: absolute;
    width: 100%;
    left: 0;
    text-align: center;
@@ -263,13 +273,20 @@
      margin-right: 12rpx;
    }
  }
    .rela_wrap{
        position: relative;
        margin-top: 360rpx;
    }
}
.modal {
  width: 690rpx;
  min-height: 820rpx;
  max-height: 720px;
  max-height: 80vh;
  border-radius: 24rpx;
  padding: 32rpx;
  padding: 30rpx 30rpx;
    overflow: auto;
    // .content{
    //     height: 100%;
    //     overflow: auto;
    // }
}
</style>
h5/pages/userinfo/userinfo.vue
@@ -207,7 +207,8 @@
                    filePath: file.tempFilePath,
                    name: 'file',
                    formData: {
                        folderCode: 'MEMBER_IMG'
                        folderCode: 'MEMBER_IMG',
                        isFace: 0
                    },
                    success: (uploadFileRes) => {
                        let res = JSON.parse(uploadFileRes.data)
h5/static/ic_cancel.png
h5/static/play.png
h5/static/staff/shenfen_bg@2x.png
h5/store/index.js
@@ -20,7 +20,6 @@
    state: {
        openId: openId || '',
        // openId: openId || '123123',
        member: member || null,
        statusbarHeight: statusbarHeight || '0',
        navHeight: navHeight || '0',
@@ -80,12 +79,11 @@
        },
        // 清空登录缓存
        empty(state) {
            uni.clearStorageSync()
            state.token = ''
            state.openId = ''
            state.userInfo = {}
            state.driverInfo = {}
            uni.removeStorageSync('userInfo')
            uni.removeStorageSync('driverInfo')
            uni.removeStorageSync('token')
        }
    },
    actions: {
h5/utils/config.js
@@ -1,8 +1,10 @@
export const baseUrl = 'zhyq_interface/'
// export const baseUrl = 'zhyq_interface/'
// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
// export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
// export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/'
export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/'
export const app_url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
h5_meeting/manifest.json
@@ -96,9 +96,9 @@
            "disableHostCheck" : true,
            "proxy" : {
                "/gateway_interface" : {
                    // "target" : "http://10.50.250.253:8088/gateway_interface", // 代理服务器域名或IP地址
                    "target" : "http://10.50.250.253:8088/gateway_interface", // 代理服务器域名或IP地址
                    // "target" : "http://192.168.0.173/gateway_interface", // 代理服务器域名或IP地址
                    "target" : "http://192.168.0.173/gateway_interface", // 代理服务器域名或IP地址
                    // "target" : "http://192.168.0.173/gateway_interface", // 代理服务器域名或IP地址
                    "changeOrigin" : true, // 允许跨域 
                    "pathRewrite" : {
                        "^/gateway_interface" : ""
h5_meeting/utils/config.js
@@ -1,6 +1,6 @@
// export const baseUrl = 'gateway_interface/'/
export const baseUrl = 'http://192.168.5.13/gateway_interface/'
export const baseUrl = 'gateway_interface/'
// export const baseUrl = 'http://192.168.5.13/gateway_interface/'
// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
export const statusMap = {
screen/src/assets/images/SecurityControl/bg@2x.png

screen/src/assets/images/task/bg@2x.png
screen/src/assets/images/task/title@2x.png
screen/src/router/index.js
@@ -10,6 +10,9 @@
    {
      path: '/PlatformCall', // 月台叫号大屏
      name: 'PlatformCall',
      meta: {
        title: '安泰物流月台叫号大屏'
      },
      component: () => import('../views/PlatformCall.vue')
    },
    {
@@ -65,7 +68,7 @@
router.beforeEach((to, from, next) => {
    window.document.title = to.meta.title
  window.document.title = to.meta.title
  next()
})
screen/src/views/SecurityControl.vue
@@ -19,7 +19,7 @@
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>实时园区车辆</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="second_title">
              <div class="title">
@@ -196,7 +196,7 @@
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>在园人员分析</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="second_title">
              <div class="title">
@@ -287,7 +287,7 @@
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>当前车辆滞留预警</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
          </div>
          <div class="table">
            <div class="line header">
@@ -322,7 +322,7 @@
              <div class="separate"></div>
              <div class="tab" :class="{ active: warningTab == '2' }" @click="tasClick('2')">行为告警</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
          </div>
          <div class="one_swiper_wrap">
            <div class="list one-swiper">
@@ -382,7 +382,7 @@
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>园区安防设备</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
          </div>
          <div class="monitoring" @click="showJk = !showJk">
            <img src="@/assets/images/SecurityControl/ic_jiankong@2x.png" class="icon" alt="">
@@ -445,7 +445,7 @@
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>今日访客滞留情况</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
          </div>
          <div class="table">
            <div class="line header">
@@ -741,7 +741,7 @@
          show: true,
          position: 'outside',
          formatter: (params) => {
            const index = params.dataIndex;
            const index = params.dataIndex
            return `{color${index}|${params.data.name} ${params.data.rate}%}`
            // return `<div>${params.data.name}</div>`
          },
@@ -1013,6 +1013,8 @@
      margin-bottom: 20px;
      font-size: 14px;
      color: #D2E0FF;
      background: rgba(0, 86, 255, 0.05);
      backdrop-filter: blur(5px);
      .second_title {
        margin-top: 24px;
@@ -1361,6 +1363,8 @@
    .right_box_one {
      margin-bottom: 20px;
      background: rgba(0, 86, 255, 0.05);
      backdrop-filter: blur(5px);
      .second_title {
        margin-top: 20px;
@@ -1443,9 +1447,15 @@
      }
    }
    .right_box_two {}
    .right_box_two {
      background: rgba(0, 86, 255, 0.05);
      backdrop-filter: blur(5px);
    }
    .right_box_three {}
    .right_box_three {
      background: rgba(0, 86, 255, 0.05);
      backdrop-filter: blur(5px);
    }
  }
}
@@ -1571,6 +1581,8 @@
    .one_swiper_wrap {
      height: 140px;
      overflow: hidden;
      background: rgba(0, 86, 255, 0.05);
      backdrop-filter: blur(5px);
    }
    .list {
@@ -1659,6 +1671,8 @@
    flex: 1;
    margin-right: 20px;
    position: relative;
    background: rgba(0, 86, 255, 0.05);
    backdrop-filter: blur(5px);
    .content {
      display: flex;
@@ -1803,6 +1817,8 @@
  .visitor_warning {
    width: 360px;
    background: rgba(0, 86, 255, 0.05);
    backdrop-filter: blur(5px);
    .table {
      .list {
@@ -1838,13 +1854,6 @@
    align-items: center;
    font-weight: bold;
    font-size: 16px;
    background-image: -webkit-linear-gradient(top,
        #ffffff 0%,
        #c8ddff 66%,
        #85b4ff 72%,
        #74a9ff 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    .icon {
      width: 16px;
screen/src/views/TaskEfficiency.vue
@@ -1,7 +1,7 @@
<template>
  <v-scale-screen width="1920" height="960">
    <div class="main_app">
      <img src="@/assets/images/FireFighting/bg@2x.png" class="main_bg" alt="" />
      <img src="@/assets/images/task/bg@2x.png" class="main_bg" alt="" />
      <div class="main_header">
        <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" />
        <div class="title">安泰智慧物流园区-作业效能统筹</div>
@@ -19,7 +19,7 @@
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>今日月台完成订单统计</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="car_static">
              <div class="echart_wrap">
@@ -60,7 +60,7 @@
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>今日月台工作时长趋势</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="list one-swiper">
              <div class="swiper-wrapper">
@@ -86,7 +86,7 @@
                <div class="separate"></div>
                <div class="tab" :class="{ active: activeTab3 == 0 }" @click="tabClick3(0)">入库</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="echart_wrap">
              <div class="echart2" id="echart2"></div>
@@ -201,7 +201,7 @@
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>今日车辆作业情况</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="static_wrap">
              <div class="item">
@@ -249,7 +249,7 @@
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>实时告警</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
              <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
            </div>
            <div class="list three-swiper">
              <div class="swiper-wrapper">