ll
liukangdong
2024-12-06 86baa8ff948d2e79588e0dd7efa16f6b8ac3b157
ll
已添加2个文件
已修改45个文件
1021 ■■■■■ 文件已修改
admin/.env.development 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/CommonHeader.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprConfig.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/statistics/platformRecord.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/App.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/index.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/index.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/manifest.json 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/auth/auth.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/login.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/queueUpRecord.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/reserved.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/reservedDetail.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/taskDetail.vue 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/guidemap/guidemap.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/index/index.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login/login.vue 331 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingCalendar.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingDetail.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingSel.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingSub.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingSubOrder.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/memberSel.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/signin.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/snapshot.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/sendACarDetail.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/shinei.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/shiwai.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/visitorReport.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/forgetPsd.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/login.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/userinfo/userinfo.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorApplication/visitorApplication.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorSubGuide/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/redirect.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/redirect2.html 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/store/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/config.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/service.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/FireFighting.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsCenter.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsEfficiency.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/SecurityControl.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -1,8 +1,8 @@
# å¼€å‘环境配置
NODE_ENV = 'development'
#VUE_APP_API_URL  = 'http://localhost:10010'
# VUE_APP_API_URL  = 'http://192.168.0.113:10010'
VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
# VUE_APP_API_URL  = 'http://192.168.0.101:10010'
# VUE_APP_API_URL  = 'http://192.168.0.173/gateway_interface'
 VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
#  VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
admin/src/components/common/CommonHeader.vue
@@ -115,11 +115,11 @@
  },
  mounted() {
    // needChangePwd 0 : é»˜è®¤å¯†ç éœ€è¦ä¿®æ”¹ï¼Œ1 ä¸éœ€è¦
    if (userInfo && (!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0')) {
    if (this.userInfo && (!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0')) {
      this.visible.changePwd = true
    }
  },
  filters: {
  filters: {
    // å±•示名称
    displayName(userInfo) {
      if (userInfo == null) {
admin/src/views/operation/serviceCar/apprConfig.vue
@@ -153,7 +153,7 @@
              type="primary">保存配置项</el-button>
            <el-button v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1" type="danger" plain
              @click="handleDel">删除节点</el-button>
          </div>3
          </div>
        </div>
      </div>
    </template>
admin/src/views/statistics/platformRecord.vue
@@ -116,7 +116,14 @@
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
          // item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
          if(item.param3 > 3600){
            item.workTime = Math.ceil(item.param3 / 3600) + '时' + Math.ceil(Math.ceil(item.param3 % 3600) / 60) + '分' + item.param3 % 60 + '秒'
          }else if(item.param3 > 60){
            item.workTime = Math.ceil(item.param3 / 60) + '分' + item.param3 % 60 + '秒'
          }else{
            item.workTime = item.param3 + '秒'
          }
        })
        this.pagination.total = res.total || 0
      }, () => {
h5/App.vue
@@ -16,7 +16,11 @@
<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
html, body {
    height: auto;
    min-height: 100%;
    overflow: visible;
}
.flex-cb {
  display: flex;
  justify-content: space-between;
@@ -191,7 +195,7 @@
}
.main_app {
  padding: 0 30rpx 30rpx;
  padding: 10rpx 30rpx 30rpx;
  font-size: 28rpx;
  color: #333333;
}
h5/api/index.js
@@ -15,10 +15,9 @@
  })
}
// æŽˆæƒ
export const wxAuthorize = (data) => {
export const wxAuthorizea = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/wxAuthorize',
    method: 'get',
    data
  })
}
h5/index.html
@@ -2,6 +2,7 @@
<html lang="en">
  <head>
    <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <script>
      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
        CSS.supports('top: constant(a)'))
@@ -9,6 +10,7 @@
        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
    </script>
        <script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"/>
    <title></title>
    <!--preload-links-->
    <!--app-context-->
h5/manifest.json
@@ -125,15 +125,15 @@
            "historyApiFallback" : true,
            "disableHostCheck" : true,
            "proxy" : {
                "/gateway_interface" : {
                "/zhyq_interface" : {
                    // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    // "target" : "http://172.20.10.7:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.0.100:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–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.106:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://10.50.250.253:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "https://atwl.ahzyssl.com/zhyq_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin" : true, // å…è®¸è·¨åŸŸ 
                    "pathRewrite" : {
                        "^/gateway_interface" : ""
                        "^/zhyq_interface" : ""
                    }
                }
            },
@@ -147,6 +147,7 @@
                    "serviceHost" : ""
                }
            }
        }
        },
        "title" : "h5"
    }
}
h5/pages.json
@@ -9,6 +9,13 @@
                "navigationBarTitleText": "选择身份",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/auth/auth",
            "style": {
                "navigationBarTitleText": "微信授权",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/index/index",
@@ -364,13 +371,6 @@
            }
        },
        {
            "path": "pages/auth/auth",
            "style": {
                "navigationBarTitleText": "微信授权",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/staffLogin/forgetPsd",
            "style": {
                "navigationBarTitleText": "找回密码",
@@ -453,6 +453,13 @@
            "style" : 
            {
                "navigationBarTitleText" : "运单查询"
            }
        },
        {
            "path" : "pages/staff/signin",
            "style" :
            {
                "navigationBarTitleText" : "我的考勤"
            }
        }
    ],
@@ -552,8 +559,8 @@
        }
    ],
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "",
        "navigationBarTextStyle": "black",
        "navigationStyle": "custom",
        "navigationBarBackgroundColor": "#ffffff",
        "backgroundColor": "#ffffff"
    },
h5/pages/auth/auth.vue
@@ -11,15 +11,7 @@
                
            };
        },
        onLoad() {
            const appID = 'wx4d7c10bdec51942b'
      const AppSecret = '922c93596d134fedf5bd22a9354b3bfe'
      // const scope = 'snsapi_userinfo'
      let uri = encodeURIComponent('https://xiaopiqiu2.natapp1.cc')
      let authURL =
        `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
      window.location.href = authURL
        }
    }
</script>
h5/pages/driver/index.vue
@@ -16,7 +16,7 @@
                <swiper-item v-for="item in taskList" :key="item.id" @click="taskClick(item)">
                    <view class="item">
                        <view class="head">
                            <view class="name">运输单{{ item.billCode }}</view>
                            <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>
@@ -25,8 +25,10 @@
                                <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 class="time" v-if="item.finishTimeStr && item.status == 5">预计完成时间:{{ item.finishTimeStr }}</view>
                            </view>
                        </view>
                        <view class="content">
@@ -41,7 +43,7 @@
                                </view>
                            </view>
                            <view class="sub">
                                <view class="time" v-if="item.arriveDate && item.type == 4">{{ item.arriveDate.slice(5) }}</view>
                                <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>
@@ -164,6 +166,7 @@
    justify-content: space-between;
    align-items: center;
    margin-bottom: 24rpx;
    padding-top: 10rpx;
    .name {
        font-weight: 600;
        font-size: 34rpx;
h5/pages/driver/login.vue
@@ -1,18 +1,19 @@
<template>
  <view class="login">
    <image class="login_bg" src="@/static/login_bg@2x.png" />
    <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>
    <view class="login_title">物流车司机登录</view>
    <view class="login_list">
      <view class="login_list_item">
        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
        <input v-model="form.username" maxlength="18" placeholder="手机号" />
        <input v-model="form.username"  @focus="showKeyboard = true" @blur="showKeyboard = false" maxlength="18" placeholder="手机号" />
      </view>
      <view class="login_list_item">
        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
        <input
          v-model="form.password"
                    @focus="showKeyboard = true" @blur="showKeyboard = false"
          type="password"
          placeholder="密码"
        />
@@ -22,7 +23,7 @@
      <view class="login_btn_n" @click="onLogin">立即登录</view>
    </view>
    <!--  -->
        <view class="btns">
        <view class="btns" v-if="!showKeyboard">
            <view class="btn" @click="handleRegister">立即注册</view>
            <view class="btn separate"> | </view>
            <view class="btn" @click="handleSetPsd">忘记密码</view>
@@ -37,10 +38,11 @@
  data() {
    return {
      form: {
                username: '18056814089',
                password: '123456'
                username: '',
                password: ''
      },
      isShowProtocol: false,
            showKeyboard: false,
      countDown: 0
    }
  },
@@ -82,6 +84,7 @@
      driverLogin({
        ...form,
                uuid: this.captcha.uuid,
                openid: this.$store.state.openId,
                code: '1'
      }).then(res => {
        if (res.code === 200) {
@@ -121,9 +124,11 @@
        margin-bottom: 40rpx;
  }
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      z-index: -1;
  }
  .login_title {
    font-size: 44rpx;
h5/pages/driver/queueUpRecord.vue
@@ -49,6 +49,9 @@
        this.type = option.type;
        this.platformId = option.platformId;
        this.getData(option.jobId || '');
        uni.setNavigationBarTitle({
          title: this.type == 0 ? '已签到车辆' : '作业中车辆'
        })
    },
    methods: {
        getData(jobId) {
h5/pages/driver/reserved.vue
@@ -98,7 +98,6 @@
                </view>
            </view>
            <view class="copy" @click="copy">复制车前牌照号</view>
            <view class="perch"></view>
            <view class="handle_sub" @click="onSubmit">
                æäº¤
            </view>
@@ -377,12 +376,12 @@
    }
}
.main_app {
    // padding-top: 10rpx;
    padding-top: 10rpx;
    .handle_sub{
        position: fixed;
        bottom: 64rpx;
        // position: fixed;
        // bottom: 64rpx;
        width: 690rpx;
        left: 30rpx;
        margin-top: 80rpx;
        background-color: #4d99a8;
        height: 88rpx;
        line-height: 88rpx;
h5/pages/driver/reservedDetail.vue
@@ -91,7 +91,7 @@
            <view class="name_wrap">
              <text>{{item.memberName}}<text v-if="item.statusInfo" class="status">({{item.statusInfo}})</text></text>
            </view>
                    <view v-if="item.approveType == 1" class="carbon">
                    <view v-if="item.approveType == 1 || item.approveType == 0" class="carbon">
                      <view class="carbon_item" v-for="child in item.approveList"
                :key="child.id">
                        <image :src="
@@ -295,6 +295,7 @@
              width: 60rpx;
              height: 60rpx;
              margin: 0 auto;
                            border-radius: 50%;
            }
            view {
              font-size: 26rpx;
h5/pages/driver/taskDetail.vue
@@ -181,10 +181,10 @@
                    status: '0'
                },
                jobId: '',
                // lat: '',
                // lnt: '',
                lat: '31.783205',
                lnt: '117.262635',
                lat: '',
                lnt: '',
                // lat: '31.783205',
                // lnt: '117.262635',
                nowTime: '',
                wmsInfo: {},
                signDistance: uni.getStorageSync('driverGuide').signDistance,
@@ -193,12 +193,23 @@
        },
        onLoad(option) {
            this.jobId = option.id
            // if(option.status && option.status == '1'){
            //     this.getLocation()
            // }else{
            //     this.getDetail()
            // }
            this.getDetail()
            if (option.status && option.status == '1') {
                // wx.config({
                //     debug: false, // å¼€å¯è°ƒè¯•模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                //     appId: 'wx173e6caf5abc718a', // å¿…填,公众号的唯一标识
                //     timestamp: timeStamp, // å¿…填,生成签名的时间戳
                //     nonceStr: nonceStr, // å¿…填,生成签名的随机串
                //     signature: Sign, // å¿…填,签名
                //     jsApiList: [
                //         'getLocation',
                //         'openLocation'
                //     ] // å¿…填,需要使用的JS接口列表
                // })
                this.getLocation()
            } else {
                this.getDetail()
            }
            // this.getDetail()
            setInterval(() => {
                this.nowTime = dayjs().format('HH:mm:ss')
            })
@@ -254,6 +265,22 @@
                const {
                    jobId
                } = this
                // wx.ready(() => {
                //     wx.getLocation({
                //         type: "gcj02", // gcj02(火星坐标),wgs84(GPS坐标)
                //         success: (res) => {
                //             this.lat = res.latitude
                //             this.lnt = res.longitude
                //             this.getDetail()
                //         },
                //         fail: (err) => {
                //             console.error("获取定位失败:", err);
                //         },
                //         cancel: () => {
                //             console.warn("用户拒绝授权获取地理位置");
                //         },
                //     });
                // });
                uni.getLocation({
                    type: 'wgs84',
                    success: (res) => {
@@ -262,7 +289,7 @@
                        this.getDetail()
                    },
                    fail: (err) => {
                        this.showToast('获取定位失败')
                        this.showToast('获取定位失败', err)
                    }
                })
            },
@@ -438,11 +465,12 @@
        }
    }
.detail_modal {
        height: calc( 100vh - 88rpx );
    .detail_modal {
        height: calc(100vh - 88rpx);
        padding: 36rpx 30rpx;
        border-radius: 12rpx;
        box-shadow: 0 0 6rpx rgba(0, 0, 0, 0.5);
        .modal_title {
            font-weight: 600;
            font-size: 32rpx;
@@ -451,37 +479,46 @@
            text-align: center;
            margin-bottom: 36rpx;
        }
        .contract_wrap{
            height: calc( 100% - 400rpx );
        .contract_wrap {
            height: calc(100% - 400rpx);
            overflow-y: auto;
        }
        .contract_list {
            border-top: 1rpx solid #E5E5E5;
            margin-bottom: 30rpx;
            padding-top: 30rpx;
            &:nth-last-child(1){
            &:nth-last-child(1) {
                margin-bottom: 0;
            }
            .list {
                background: #f7f7f7;
                border-radius: 8rpx;
                padding: 20rpx;
                .item{
                .item {
                    border-bottom: 1rpx solid #e5e5e5;
                    padding-bottom: 20rpx;
                    margin-bottom: 20rpx;
                    &:nth-last-child(1){
                    &:nth-last-child(1) {
                        border: none;
                        padding-bottom: 0;
                        margin-bottom: 0;
                    }
                }
                .line {
                    display: flex;
                    margin-bottom: 20rpx;
                    &:nth-last-child(1){
                    &:nth-last-child(1) {
                        margin-bottom: 0rpx;
                    }
                    .label {
                        color: #666666;
                        width: 92rpx;
h5/pages/guidemap/guidemap.vue
@@ -1,6 +1,7 @@
<template>
  <view class="box">
    <view v-html="info"></view>
    <!-- <view v-html="info"></view> -->
        <mp-html :content="info" />
  </view>
</template>
<script>
h5/pages/index/index.vue
@@ -44,43 +44,7 @@
    return true
  },
  onLoad() {
    var that = this
    // if (!that.$store.state.openid) {
      let url = window.location.href
      let code = ''
      let source = ''
      if (url.indexOf('code=') !== -1) {
        const query = url.split('?')
        console.log('app-app', url)
        for (const q of query) {
          if (q.indexOf('code=') !== -1) {
            code = q.substring(q.indexOf('code=') + 5, q.length)
          }
          // if (q.indexOf('source=') !== -1) {
          //   source = q.substring(q.indexOf('source=') + 7, q.indexOf('source=') + 8)
          // }
          // æ¥æº:0=司机;1=访客;2=内部员工
        }
        wxAuthorize({
          code: code,
          source: 1
        }).then(res => {
          console.log('app_ress', res)
          if (res.code === 200) {
            that.$store.commit('setOpenId', res.data.openid)
            if (res.data.member) {
              that.$store.commit('setMember', res.data.member)
            }
          }
        })
      } else {
        // const appID = 'wx4d7c10bdec51942b'
        // let uri = encodeURIComponent(url)
        // let authURL =
        //   `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
        // window.location.href = authURL
      }
    // }
  },
  methods: {
    jump(type) {
h5/pages/login/login.vue
@@ -1,122 +1,211 @@
<template>
  <view class="main_app">
    <image class="login_bg" src="@/static/login_bg@2x.png" />
    <view class="h1">安泰物流智慧园区</view>
    <view class="placeholder6 place">请选择您的身份</view>
    <view class="item" @click="jump('/pages/index/index')">
      <image class="avatar" src="@/static/ic_visitor@2x.png" />
      <view class="content">
        <view class="name">我是访客</view>
        <view class="placeholder6">VISITOR</view>
      </view>
      <u-icon name="arrow-right" size="24" color="#979797" />
    </view>
    <view class="item" @click="staffLogin">
      <image class="avatar" src="@/static/ic_staff@2x.png" />
      <view class="content">
        <view class="name">我是员工</view>
        <view class="placeholder6">STAFF</view>
      </view>
      <u-icon name="arrow-right" size="24" color="#979797" />
    </view>
    <view class="item" @click="driverLogin">
      <image class="avatar" src="@/static/ic_driver@2x.png" />
      <view class="content">
        <view class="name">我是物流车司机</view>
        <view class="placeholder6">DRIVER</view>
      </view>
      <u-icon name="arrow-right" size="24" color="#979797" />
    </view>
  </view>
</template>
<script>
export default {
  methods: {
    jump(url) {
      console.log(url)
      uni.navigateTo({
        url
      })
    },
        driverLogin() {
            const driverInfo = uni.getStorageSync('driverInfo') || {}
            if (driverInfo && driverInfo.memberId) {
              uni.navigateTo({
                url: '/pages/driver/index'
              })
            }else{
              uni.navigateTo({
                url: '/pages/driver/login'
              })
            }
        },
    staffLogin() {
      const userInfo = uni.getStorageSync('userInfo') || {}
      if (userInfo && userInfo.memberId) {
        uni.navigateTo({
          url: '/pages/staff/index'
        })
      }else{
        uni.navigateTo({
          url: '/pages/staffLogin/login'
        })
      }
    }
  }
}
</script>
<style lang="scss" >
.main_app {
  width: 100%;
  height: 100vh;
  padding-top: 80rpx;
  background: linear-gradient(
    180deg,
    rgba(39, 155, 170, 0.2) 0%,
    rgba(39, 155, 170, 0) 100%
  );
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
    z-index: -1;
  }
  .h1 {
    font-weight: 600;
    font-size: 48rpx;
    color: #222222;
    line-height: 66rpx;
    margin-bottom: 16rpx;
  }
  .place {
    margin-bottom: 98rpx;
  }
  .item {
    width: 690rpx;
    height: 200rpx;
    background: #ffffff;
    border-radius: 8rpx;
    display: flex;
    align-items: center;
    padding: 40rpx;
    font-size: 26rpx;
    margin-bottom: 40rpx;
    .avatar {
      width: 120rpx;
      height: 120rpx;
      margin-right: 30rpx;
    }
    .content {
      flex: 1;
      .name {
        font-weight: 600;
        font-size: 38rpx;
        color: #222222;
        margin-bottom: 20rpx;
      }
    }
  }
}
<template>
    <view class="main_app">
        <image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />
        <view class="h1">安泰物流智慧园区</view>
        <view class="placeholder6 place">请选择您的身份</view>
        <view class="item" @click="userAuth(1)">
            <image class="avatar" src="@/static/ic_visitor@2x.png" />
            <view class="content">
                <view class="name">我是访客</view>
                <view class="placeholder6">VISITOR</view>
            </view>
            <u-icon name="arrow-right" size="24" color="#979797" />
        </view>
        <view class="item" @click="userAuth(2)">
            <image class="avatar" src="@/static/ic_staff@2x.png" />
            <view class="content">
                <view class="name">我是员工</view>
                <view class="placeholder6">STAFF</view>
            </view>
            <u-icon name="arrow-right" size="24" color="#979797" />
        </view>
        <view class="item" @click="userAuth(0)">
            <image class="avatar" src="@/static/ic_driver@2x.png" />
            <view class="content">
                <view class="name">我是物流车司机</view>
                <view class="placeholder6">DRIVER</view>
            </view>
            <u-icon name="arrow-right" size="24" color="#979797" />
        </view>
    </view>
</template>
<script>
    import {
        wxAuthorizea,
        getUserInfo
    } from '@/api'
    import {
        baseUrl
    } from "@/utils/config.js"
    export default {
        data() {
            return {
                code: '091RVIkl2SZXDe4WySll2pAL8D1RVIkb'
            }
        },
        onLoad() {
            var that = this
            let url = window.location.href
            let code = ''
            if (url.indexOf('code=') !== -1) {
            } else {
                return
                let url = window.location.href
                const appID = 'wx173e6caf5abc718a'
                let uri = encodeURIComponent(url)
                let authURL =
                    `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
                window.location.href = authURL
            }
        },
        methods: {
            jump(url) {
                console.log(url)
                uni.navigateTo({
                    url
                })
            },
            driverLogin(flag) {
                // const driverInfo = uni.getStorageSync('driverInfo') || {}
                if (flag) {
                    uni.navigateTo({
                        url: '/pages/driver/index'
                    })
                } else {
                    uni.navigateTo({
                        url: '/pages/driver/login'
                    })
                }
            },
            staffLogin(flag) {
                // const userInfo = uni.getStorageSync('userInfo') || {}
                if (flag) {
                    uni.navigateTo({
                        url: '/pages/staff/index'
                    })
                } else {
                    uni.navigateTo({
                        url: '/pages/staffLogin/login'
                    })
                }
            },
            // source    æ¥æº:0=司机;1=访客;2=内部员工
            userAuth(source) {
                var that = this
                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)
                    //     }
                    // }
                    wxAuthorizea({
                        code: code || this.code,
                        source: source
                    }).then(res => {
                        if (res.code === 200) {
                            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')
                                }
                            }, 300)
                        }
                    })
                }
                // }
                // åˆ·æ–°token
                // setTimeout(() => {
                //     refreshToken().then(res => {
                //         if (res.code && res.code === 200) {
                //             this.$store.commit('setToken', res.data)
                //         }
                //     })
                // }, 3000)
            }
        }
    }
</script>
<style lang="scss">
    .main_app {
        width: 100vw;
        box-sizing: border-box;
        overflow: hidden;
        margin: 0;
        height: 100vh;
        padding-top: 80rpx;
        background: linear-gradient(180deg,
                rgba(39, 155, 170, 0.2) 0%,
                rgba(39, 155, 170, 0) 100%);
        .login_bg {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            z-index: -1;
        }
        .h1 {
            font-weight: 600;
            font-size: 48rpx;
            color: #222222;
            line-height: 66rpx;
            margin-bottom: 16rpx;
        }
        .place {
            margin-bottom: 98rpx;
        }
        .item {
            width: 690rpx;
            height: 200rpx;
            background: #ffffff;
            border-radius: 8rpx;
            display: flex;
            align-items: center;
            padding: 40rpx;
            font-size: 26rpx;
            margin-bottom: 40rpx;
            .avatar {
                width: 120rpx;
                height: 120rpx;
                margin-right: 30rpx;
            }
            .content {
                flex: 1;
                .name {
                    font-weight: 600;
                    font-size: 38rpx;
                    color: #222222;
                    margin-bottom: 20rpx;
                }
            }
        }
    }
</style>
h5/pages/staff/index.vue
@@ -121,7 +121,7 @@
                { 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: '', img: require('@/static/home/ic_kaoqin@3x.png'),auth: 'weixin:menu:attendance' },
                { 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' },
@@ -133,52 +133,16 @@
    }
  },
  onLoad() {
    var that = this
    // if (!that.$store.state.openid) {
    let url = window.location.href
    let code = ''
    let source = ''
    if (url.indexOf('code=') !== -1) {
      const query = url.split('?')
      console.log('app-app', url)
      for (const q of query) {
        if (q.indexOf('code=') !== -1) {
          code = q.substring(q.indexOf('code=') + 5, q.length)
        }
        // if (q.indexOf('source=') !== -1) {
        //   source = q.substring(q.indexOf('source=') + 7, q.indexOf('source=') + 8)
        // }
        // æ¥æº:0=司机;1=访客;2=内部员工
      }
      wxAuthorize({
        code: code,
        source: 2
      }).then(res => {
        console.log('app_ress', res)
        if (res.code === 200) {
          that.$store.commit('setOpenId', res.data.openid)
          if (res.data.member) {
            that.$store.commit('setMember', res.data.member)
          }
        }
      })
    } else {
      // const appID = 'wx4d7c10bdec51942b'
      // let uri = encodeURIComponent(url)
      // let authURL =
      //   `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
      // window.location.href = authURL
    }
    // }
    this.getTaskInfo()
    // åˆ·æ–°token
    setTimeout(() => {
      refreshToken().then(res => {
        if (res.code && res.code === 200) {
          this.$store.commit('setToken', res.data)
        }
      })
    }, 3000)
    // setTimeout(() => {
    //   refreshToken().then(res => {
    //     if (res.code && res.code === 200) {
    //       this.$store.commit('setToken', res.data)
    //     }
    //   })
    // }, 3000)
  },
  mounted() {
    this.$eventBus.$on('taskBack', () => {
@@ -224,6 +188,7 @@
  justify-content: space-between;
  align-items: center;
  margin-bottom: 24rpx;
    padding-top: 10rpx;
  .name {
    font-weight: 600;
    font-size: 34rpx;
@@ -317,7 +282,7 @@
    position: fixed;
    width: 100%;
    left: 0;
    bottom: 88rpx;
    bottom: 48rpx;
  image {
    width: 40rpx;
    height: 40rpx;
h5/pages/staff/meetingCalendar.vue
@@ -131,7 +131,11 @@
              <view class="status" v-if="item.meetingStatus == '5'"
                >已撤销</view
              >
            </view>
            </view>
                        <view class="line">
                          <view class="label">会议日期:</view>
                          <view class="value">{{ item.meetingDate }}</view>
                        </view>
            <view class="line">
              <view class="label">会议时间:</view>
              <view class="value">{{ item.meetingTime }}</view>
@@ -144,10 +148,10 @@
              <view class="label">预约人:</view>
              <view class="value">{{ item.bookingUser }}</view>
            </view>
            <view class="line">
<!--            <view class="line">
              <view class="label">备注:</view>
              <view class="value">{{ item.remark || item.meetingRemark }}</view>
            </view>
            </view> -->
          </view>
          <view v-if="recordList.length === 0" style="text-align: center">
            <image
@@ -204,7 +208,8 @@
  data() {
    return {
      activeTab: '0',
      recordList: [],
      recordList: [],
            total: 0,
      recordPage: 1,
      myPage: 1,
      myMeetingList: [],
@@ -225,18 +230,23 @@
  onLoad() {
    this.currentDate = dayja().format('YYYY-MM-DD')
    this.initData()
    this.getRoomList()
    this.getRoomList()
        this.tabClick('0')
  },
  onShow() {
    // this.tabClick('0')
        this.getRecordList()
  },
  onReachBottom() {
    const { activeTab } = this
    if (activeTab == '0') {
    const { activeTab, total, myMeetingList, recordList } = this
        console.log(total);
        console.log(recordList);
    if (activeTab == '0') {
            // if(total <= myMeetingList.length) return this.showToast('暂无更多数据')
      this.myPage = this.myPage + 1
      this.getDayMeeting()
    } else {
    } else {
            // if(total <= recordList.length) return this.showToast('暂无更多数据')
      this.recordPage = this.recordPage + 1
      this.getRecordList()
    }
@@ -336,7 +346,8 @@
          queryType: 2
        }
      }).then(res => {
        this.recordList = [...this.recordList, ...res.data.records]
        this.recordList = [...this.recordList, ...res.data.records]
        this.total = res.data.total
      })
    },
    getDayMeeting() {
@@ -351,7 +362,8 @@
        page: myPage,
        capacity: 10
      }).then(res => {
        this.myMeetingList = [...this.myMeetingList, ...res.data.records]
        this.myMeetingList = [...this.myMeetingList, ...res.data.records]
                this.total = res.data.total
      })
    },
  }
h5/pages/staff/meetingDetail.vue
@@ -15,6 +15,7 @@
        <view class="value">
          <!-- <text>主要讨论智能会议室系统选型,请大家一定要按时来开会,时间宝贵。感谢大家!</text> -->
          <u-textarea
                    autoHeight
            border="none"
            v-model="detail.meetingContent"
            disabled
@@ -255,8 +256,8 @@
      }
      .personnel {
        display: flex;
                flex-wrap: wrap;
        width: 100%;
        overflow-x: auto;
        .per_item {
          flex-shrink: 0;
          display: flex;
@@ -264,12 +265,18 @@
          justify-content: center;
          align-items: center;
          justify-content: center;
          margin-right: 24rpx;
          margin-right: 16rpx;
                    width: 85rpx;
                    margin-bottom: 22rpx;
                    &:nth-of-type(7n){
                        margin-right: 0;
                    }
          .avatar {
            width: 72rpx;
            height: 72rpx;
            margin: 0;
            border-radius: 50%;
                        margin-bottom: 8rpx;
          }
          .name {
            font-size: 26rpx;
h5/pages/staff/meetingSel.vue
@@ -21,8 +21,9 @@
                <image @click="changeMem(item, index)" v-if="!item.checked" src="@/static/meeting/icon/ic_choose@2x.png"
                    mode="widthFix" class="checked"></image>
                <text></text>
            </view>
            <view v-if="memberList.length == 0" class="empty">
            </view>
            <view class="" style="height: 220rpx;"></view>
            <view v-if="memberList.length == 0" class="empty_wrap">
                <image src="@/static/empty.png" mode=""></image>
                <text>暂无数据</text>
            </view>
@@ -80,7 +81,7 @@
                },
                pagination: {
                    page: 1,
                    capacity: 20
                    capacity: 40
                },
                isShowSelMem: false
@@ -269,7 +270,7 @@
        left: 0;
        width: 100%;
        box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;
        padding: 30rpx 30rpx 64rpx;
        padding: 30rpx 30rpx 42rpx;
        .sel_mem {
            display: flex;
@@ -308,7 +309,7 @@
            align-items: center;
            border-bottom: 1rpx solid #e5e5e5;
            padding: 30rpx 0;
            .avatar {
                width: 64rpx;
                height: 64rpx;
h5/pages/staff/meetingSub.vue
@@ -299,7 +299,7 @@
  left: 0;
  bottom: 0;
  background-color: #fff;
  padding: 20rpx 30rpx 84rpx;
  padding: 20rpx 30rpx 52rpx;
  box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
  .sel_time {
    color: $uni-color-primary;
@@ -405,6 +405,8 @@
  display: flex;
  justify-content: center;
  align-items: center;
    height: 100rpx;
    padding-top: 10rpx;
  .date {
    margin: 0 24rpx;
    font-weight: 600;
h5/pages/staff/meetingSubOrder.vue
@@ -40,7 +40,7 @@
                    <text>会议内容</text>
                </view>
                <view class="line">
                    <u-textarea border="none" v-model="param.content" count :maxlength="300" placeholder="请输入会议内容"
                    <u-textarea border="none" autoHeight v-model="param.content" count :maxlength="300" placeholder="请输入会议内容"
                        placeholder-class="placeholder9" class="label" />
                </view>
            </view>
@@ -88,7 +88,7 @@
                    <text>备注</text>
                </view>
                <view class="line">
                    <textarea v-model="param.remark" :maxlength="-1" placeholder="请输入" placeholder-class="placeholder9"
                    <u-textarea  border="none" autoHeight v-model="param.remark" :maxlength="-1" placeholder="请输入" placeholder-class="placeholder9"
                        class="label" />
                </view>
            </view>
@@ -306,13 +306,12 @@
            .line {
                display: flex;
                .label {
                    flex: 1;
                    display: flex;
                    flex-wrap: wrap;
                    align-items: center;
                    .service_item {
                        height: 64rpx;
                        line-height: 64rpx;
@@ -330,8 +329,6 @@
                }
            }
        }
        padding-bottom: 100rpx;
    }
    .empty {
@@ -351,7 +348,7 @@
        border-radius: 36rpx;
        font-size: 30rpx;
        color: #ffffff;
        margin-top: 20rpx;
        margin-top: 40rpx;
    }
    .star {
h5/pages/staff/memberSel.vue
@@ -130,6 +130,9 @@
</script>
<style lang="scss">
    .main_app{
        padding-top: 30rpx;
    }
.modal {
  padding: 40rpx 30rpx;
  .modal_header {
h5/pages/staff/signin.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<template>
    <view>
        <web-view style="width: 100vw;height: 100vh;" src="https://atwl.ahzyssl.com/dps/web/wxAuth/loginV2?oaId=atwl&redirectId=index"></web-view>
        <!-- <web-view src="https://www.baidu.com/"></web-view> -->
    </view>
</template>
<script>
    export default {
        data() {
            return {
            };
        }
    }
</script>
<style lang="scss">
</style>
h5/pages/staff/snapshot.vue
@@ -376,7 +376,6 @@
<style lang="scss">
    .main_wrap {
        padding-bottom: 200rpx;
        .line {
            display: flex;
@@ -471,12 +470,13 @@
    .footer {
        width: 100%;
        padding: 0 30rpx;
        padding: 0 30rpx;
        margin-top: 80rpx;
        padding-bottom: env(safe-area-inset-bottom);
        box-sizing: border-box;
        position: fixed;
        left: 0;
        bottom: 68rpx;
        // position: fixed;
        // left: 0;
        // bottom: 68rpx;
        .footer_btn {
            width: 100%;
h5/pages/staff/vehicle/sendACarDetail.vue
@@ -126,10 +126,10 @@
        <u-popup :show="showApprModal" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="showApprModal = false">
            <view class="appr_modal">
                <view class="title">{{ param.status == 2 ? "同意" : "拒绝" }}</view>
                <view v-if="param.status == 2" class="line" @click="isShowDrive = true">
                    <text v-if="param.driverName">{{ param.driverName }}</text>
                <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 v-else class="placeholder9">派车司机</text>
                    <u-icon class="ml12" name="arrow-right" color="#999999" />
                    <u-icon v-if="info.approveDateVO.driverParam == 1" class="ml12" name="arrow-right" color="#999999" />
                </view>
                <textarea v-model="param.checkInfo" :placeholder="
            param.status == 2 ? '同意说明,非必填' : '拒绝说明,必填'
@@ -207,6 +207,11 @@
                        })
                    }
                })
            },
            openModal() {
                if(this.info.approveDateVO.driverParam == 0) return
                this.isShowDrive = true
            },
            onSubBack() {
                carUseBookBack({
h5/pages/staff/vehicle/shinei.vue
@@ -289,8 +289,8 @@
        .app_header {
            display: flex;
            align-items: center;
            margin: 0 -15rpx;
            margin: 0 -15rpx;
            padding-top: 10rpx;
            .item {
                width: 330rpx;
                height: 72rpx;
@@ -306,11 +306,11 @@
        }
        .main_footer {
            position: absolute;
            position: fixed;
            width: 100%;
            left: 0;
            bottom: 0;
            padding: 20rpx 30rpx 84rpx;
            padding: 20rpx 30rpx 52rpx;
            box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
            .sel_time {
h5/pages/staff/vehicle/shiwai.vue
@@ -343,7 +343,7 @@
  left: 0;
  background-color: #fff;
  bottom: 0;
  padding: 20rpx 30rpx 84rpx;
  padding: 20rpx 30rpx 62rpx;
  box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
  
    .df_sb{
h5/pages/staff/visitorReport.vue
@@ -682,10 +682,7 @@
    padding: 0 30rpx;
    padding-bottom: env(safe-area-inset-bottom);
    box-sizing: border-box;
    position: fixed;
    left: 0;
    bottom: 68rpx;
        margin-top: 80rpx;
    .footer_btn {
      width: 100%;
      height: 88rpx;
h5/pages/staffLogin/forgetPsd.vue
@@ -1,6 +1,6 @@
<template>
  <view class="login">
    <image class="login_bg" src="@/static/login_bg@2x.png" />
    <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>
    <view class="login_list">
@@ -121,7 +121,6 @@
<style lang="scss" scoped>
.login {
  width: 100%;
  height: 100vh;
  display: flex;
  padding-top: 130rpx;
  box-sizing: border-box;
@@ -137,9 +136,11 @@
    height: 180rpx;
  }
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      z-index: -1;
  }
  .login_title {
    font-size: 44rpx;
h5/pages/staffLogin/login.vue
@@ -1,20 +1,20 @@
<template>
  <view class="login">
    <image class="login_bg" src="@/static/login_bg@2x.png" />
    <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>
    <view class="login_list">
      <view class="login_list_item">
        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
        <input v-model="form.username" maxlength="18" placeholder="账号" />
        <input v-model="form.username" maxlength="18" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder="账号" />
      </view>
      <view class="login_list_item">
        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
        <input v-model="form.password" type="password" placeholder="密码" />
        <input v-model="form.password" @focus="showKeyboard = true" @blur="showKeyboard = false" type="password" placeholder="密码" />
      </view>
      <view class="login_list_item">
        <image src="@/static/ic_captcha.png" mode="widthFix"></image>
        <input v-model="form.code" placeholder="验证码" type="text" />
        <input v-model="form.code" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder="验证码" type="text" />
        <image
          @click="initCaptcha"
          :src="captcha.image"
@@ -30,7 +30,7 @@
      >
    </view>
    <view class="deal_wrap">
    <view class="deal_wrap" v-show="!showKeyboard">
      <image
        @click="changeFalg"
        v-if="ProtocolFlag"
@@ -56,7 +56,8 @@
      mode="center"
    >
      <view class="modal">
        <view v-html="htmlText"></view>
        <!-- <view v-html="htmlText"></view> -->
                <mp-html :content="htmlText" />
      </view>
    </u-popup>
  </view>
@@ -76,6 +77,7 @@
        password: '',
                code: ''
      },
            showKeyboard: false,
      isShowProtocol: false,
      ProtocolFlag: false,
      captcha: {},
@@ -136,7 +138,7 @@
      loginPost({
        ...form,
        uuid: this.captcha.uuid,
        openId: this.$store.state.openId
        openid: this.$store.state.openId
      }).then(res => {
        if (res.code === 200) {
          this.setToken(res.data)
@@ -156,7 +158,6 @@
<style lang="scss" scoped>
.login {
  width: 100%;
  height: 100vh;
  display: flex;
  padding-top: 130rpx;
  box-sizing: border-box;
@@ -172,9 +173,11 @@
    height: 180rpx;
  }
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      z-index: -1;
  }
  .login_title {
    font-size: 44rpx;
@@ -244,11 +247,11 @@
    }
  }
  .deal_wrap {
    position: absolute;
    position: fixed;
    width: 100%;
    left: 0;
    text-align: center;
    bottom: 88rpx;
    bottom: 48rpx;
    display: flex;
    justify-content: center;
    align-items: center;
@@ -263,9 +266,10 @@
}
.modal {
  width: 690rpx;
  min-height: 920rpx;
  min-height: 820rpx;
  max-height: 720px;
  border-radius: 24rpx;
  padding: 32rpx;
    overflow: auto;
}
</style>
h5/pages/userinfo/userinfo.vue
@@ -4,13 +4,13 @@
            <view class="cell">
                <view class="title"><b>*</b>姓名</view>
                <view class="content">
                    <input class="input" placeholder-style="color: #999999;" maxlength="30" v-model="visitorData.name" placeholder="请输入您的真实姓名" />
                    <input class="input" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder-style="color: #999999;" maxlength="30" v-model="visitorData.name" placeholder="请输入您的真实姓名" />
                </view>
            </view>
            <view class="cell">
                <view class="title"><b>*</b>手机号</view>
                <view class="content">
                    <input type="number" class="input" maxlength="11" placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="请输入您的手机号" />
                    <input type="number" @focus="showKeyboard = true" @blur="showKeyboard = false" class="input" maxlength="11" placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="请输入您的手机号" />
                </view>
            </view>
            <view class="cell">
@@ -23,14 +23,14 @@
            <view class="cell">
                <view class="title"><b>*</b>证件号码</view>
                <view class="content">
                    <input class="input" maxlength="18" placeholder-style="color: #999999;" v-model="visitorData.idcardNo" placeholder="请输入您的证件号码" />
                    <input class="input" maxlength="18" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder-style="color: #999999;" v-model="visitorData.idcardNo" placeholder="请输入您的证件号码" />
                </view>
            </view>
            <view class="empty"></view>
            <view class="cell">
                <view class="title"><b>*</b>公司名称</view>
                <view class="content">
                    <input class="input" maxlength="50" placeholder-style="color: #999999;" v-model="visitorData.companyName" placeholder="请输入您的公司名称" />
                    <input class="input" maxlength="50" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder-style="color: #999999;" v-model="visitorData.companyName" placeholder="请输入您的公司名称" />
                </view>
            </view>
            <view class="cell">
@@ -61,7 +61,7 @@
                </view>
            </view> -->
        </view>
        <view class="footer-box">
        <view v-if="!showKeyboard" class="footer-box">
            <view class="submit-button" @click="submit">下一步</view>
        </view>
        <!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
@@ -81,6 +81,7 @@
            return {
                photoSrc: "",
                show: false,
                showKeyboard: false,
                visit: '',
                type: '',
                columns: [[{name: '身份证', id: 0}, {name: '港澳证件', id: 1},{name: '护照', id: 2}]],
h5/pages/visitorApplication/visitorApplication.vue
@@ -102,7 +102,6 @@
        </view>
      </view>
    </view>
    <view class="zw"></view>
    <view class="footer">
      <view class="footer_btn" @click="onSubmit">提交</view>
    </view>
@@ -1388,9 +1387,10 @@
    padding: 0 30rpx;
    padding-bottom: env(safe-area-inset-bottom);
    box-sizing: border-box;
    position: fixed;
    left: 0;
    bottom: 30rpx;
        margin-top: 80rpx;
    // position: fixed;
    // left: 0;
    // bottom: 30rpx;
    .footer_btn {
      width: 100%;
h5/pages/visitorSubGuide/index.vue
@@ -1,6 +1,7 @@
<template>
  <view class="box">
    <view v-html="info"></view>
    <!-- <view v-html="info"></view> -->
        <mp-html :content="info" />
  </view>
</template>
<script>
h5/static/redirect.html
@@ -4,6 +4,7 @@
  <meta charset="UTF-8">
  <title>重定向</title>
  <script>
        // wxac2a80c2144c4ee0
    var p = location.href.split("?")
    // window.location.href = 'http://192.168.0.173/h5/#/pages/notice/notice?' + 'code=123123'
      window.location.href = 'http://192.168.0.173/h5/#/pages/notice/notice?' + p[1]
h5/static/redirect2.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>重定向</title>
  <script>
        // wxac2a80c2144c4ee0
    var p = location.href.split("?")
    // window.location.href = 'http://192.168.0.173/h5/#/pages/notice/notice?' + 'code=123123'
      // window.location.href = 'http://192.168.0.173/h5/#/pages/notice/notice?' + p[1]
      // window.location.href = 'http://192.168.0.173/h5/#/pages/staff/meetingDetail?' + p[1]
      window.location.href = 'http://192.168.0.173/h5/#/pages/login/login?' + p[1]
  </script>
</head>
<body>
</body>
</html>
h5/store/index.js
@@ -19,8 +19,8 @@
const store = new Vuex.Store({
    state: {
        // openId: openId || '061kuG0006hxcS13TT200w9VIp4kuG09',
        openId: openId || '123123',
        openId: openId || '',
        // openId: openId || '123123',
        member: member || null,
        statusbarHeight: statusbarHeight || '0',
        navHeight: navHeight || '0',
h5/utils/config.js
@@ -1,7 +1,8 @@
export const baseUrl = 'gateway_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 uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
h5/utils/service.js
@@ -18,7 +18,7 @@
                method: options.method || 'GET',
                header: options.header || {
                    // æ ¹æ®å®žé™…接口设计 key å– token æˆ–者 authorization
                    dm_user_token: token,
                    dm_user_token: token || '',
                    "content-type": 'application/json'
                },
                success: (res) => {
screen/src/views/FireFighting.vue
@@ -708,12 +708,6 @@
}
const dataList1 = ref([])
// const getData1 = () => {
//   getFightingDeAlarm().then(res => {
//     dataList1.value = res.data
//     loopFn1()
//   })
// }
const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
const dataList2 = ref([])
const getData2 = () => {
@@ -751,7 +745,6 @@
  const data3 = dataList3.value.map(i => i.liftNum)
  const data4 = dataList3.value.map(i => i.errNum)
  const months = dataList3.value.map(i => {
    console.log('i.startDate', i.startDate.substring(5, 7))
    return i.startDate.substring(5, 7) + '月'
  }
  )
@@ -901,7 +894,6 @@
  getFightingcenterData().then(res => {
    dataList4.value = res.data || {}
    dataList1.value = res.data.deviceTypeList
    loopFn1()
  })
}
const dataList5 = ref({}) // ç»´ä¿
@@ -918,7 +910,6 @@
}
const dataList7 = ref([])
const getData7 = () => {
  getFighalarmDataList().then(res => {
    dataList7.value = res.data || []
    dataList7.value = dataList7.value.map(item => {
@@ -926,18 +917,6 @@
      return item
    })
  })
  // dataList7.value = [
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  //   { name: '消防告警', addr: '厂区门口', time: '2022-02-02' },
  // ]
  loopFn2()
}
const autoplayFlag = (list = [], leng = 4, time = 2000) => {
@@ -987,20 +966,14 @@
  }, 60 * 60 * 1000)
  initWatergage()
  initLiquidlevel()
  // setInterval(() => {
  //   getData4()
  // }, 1000 * 60)
  // setInterval(() => {
  //   getData1()
  //   getData2()
  //   getData3()
  //   getData5()
  //   getData6()
  // }, 1000 * 60 * 60)
  setTimeout(() => {
    loopFn1()
    loopFn2()
  }, 12000)
})
screen/src/views/LogisticsCenter.vue
@@ -754,7 +754,6 @@
      item.taskDate = item.taskDate.slice(5, 16)
      return item
    })
    loopFn1()
  })
}
@@ -1273,9 +1272,9 @@
  initEchart3()
  // initEchart4()
  // initEchart5()
  window.addEventListener('click', () => {
  })
  setTimeout(() => {
    loopFn1()
  }, 12000)
})
screen/src/views/LogisticsEfficiency.vue
@@ -827,7 +827,6 @@
  wlplatformJobList().then(res => {
    const result = res.data
    dataList3.value = result
    loopFn1()
  })
}
const data4 = ref({})
@@ -862,7 +861,6 @@
  wlstockList().then(res => {
    const result = res.data
    dataList6.value = result
    loopFn2()
  })
}
@@ -900,6 +898,11 @@
  getData6()
  initMap()
  setTimeout(() => {
    loopFn1()
    loopFn2()
  }, 12000)
})
screen/src/views/SecurityControl.vue
@@ -659,23 +659,24 @@
    }]),
    new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
      offset: 0,
      color: '#4370f2'
    }, {
      offset: 1,
      color: '#61d3f9'
    }]),
    new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
      offset: 0,
      color: '#4679f6'
    }, {
      offset: 1,
      color: '#4674f6'
    }]),
    new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
      offset: 0,
      color: '#4370f2'
    }, {
      offset: 1,
      color: '#61d3f9'
    }])]
  ]
  const data = []
  data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: data4.value.waitVisitNum / data4.value.total })
  data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: data4.value.registerVisitNum / data4.value.total })
  data.push({ name: '已离开', value: data4.value.levelNum, rate: data4.value.levelNum / data4.value.total })
  data.push({ name: '滞留', value: data4.value.retentionNum, rate: data4.value.retentionNum / data4.value.total })
  data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: (data4.value.waitVisitNum / data4.value.total).toFixed(1) })
  data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: (data4.value.registerVisitNum / data4.value.total).toFixed(1) })
  data.push({ name: '已离开', value: data4.value.levelNum, rate: (data4.value.levelNum / data4.value.total).toFixed(1) })
  data.push({ name: '滞留', value: data4.value.retentionNum, rate: (data4.value.retentionNum / data4.value.total).toFixed(1) })
  const option = {
    color: colors,
    tooltip: {
@@ -739,12 +740,16 @@
        label: {
          show: true,
          position: 'outside',
          formatter: '{a|{b}}  {a|{d}%}',
          formatter: (params) => {
            const index = params.dataIndex;
            return `{color${index}|${params.data.name} ${params.data.rate}%}`
            // return `<div>${params.data.name}</div>`
          },
          rich: {
            a: {
              color: '#869CC9',
              fontSize: 13
            },
            color0: { color: 'orange', fontSize: 14 },
            color1: { color: '#869CC9', fontSize: 13 },
            color2: { color: '#869CC9', fontSize: 13 },
            color3: { color: '#869CC9', fontSize: 13 }
          }
        },
        labelLine: {
@@ -823,7 +828,6 @@
      dataListT2.value = temp
    }
    initEchart2()
    loopFn2()
  })
}
@@ -851,36 +855,8 @@
      return i
    })
    initEchart3()
    loopFn3()
  })
  // getVisitRetentionData().then(res => {
  //   const result = res.data || []
  //   dataList3.value = result.map(i => {
  //     if (i.timeOutMinute) {
  //       i.timeOutMinute = Math.abs(i.timeOutMinute)
  //     }
  //     if (i.timeOutMinute > 60 * 24) {
  //       i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('D天H时m分')
  //     } else if (i.timeOutMinute > 60) {
  //       i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('H时m分')
  //     } else {
  //       i.timeOutMinuteT = item.timeOutMinuteT + '分'
  //     }
  //     return i
  //   })
  //   loopFn3()
  // })
}
// const data4 = ref({})
// const getData4 = () => {
//   afgetVisitData().then(res => {
//     const result = res.data || {}
//     data4.value = result
//     initEchart3()
//   })
// }
const warningTab = ref('0')
const warningNum = ref(0)
@@ -898,7 +874,6 @@
    warningList.value.forEach((item, i) => {
      // console.log(i);
      if (i == 0 || i % 2 == 0) {
        console.log(i)
        temp.push(item)
      } else {
        temp[temp.length - 1].addr0 = item.addr
@@ -910,7 +885,6 @@
    })
    warningList.value = temp
    // console.log('temp', warningList.value);
    loopFn1()
  })
}
const tasClick = (val) => {
@@ -994,7 +968,7 @@
  getData3()
  getData5()
  getWarning()
  setInterval(() => {
    getData1()
    getData2()
@@ -1005,6 +979,12 @@
  setInterval(() => {
    getData5()
  }, 1000 * 60 * 60)
  setTimeout(() => {
    loopFn1()
    loopFn2()
    loopFn3()
  }, 12000)
})
@@ -1286,7 +1266,7 @@
          .menu_wrap {
            margin-top: 15px;
            max-height: 440px;
            overflow: hidden;
            overflow: auto;
            .menu {
              .menu_name {
screen/src/views/TaskEfficiency.vue
@@ -546,18 +546,19 @@
    }]),
    new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
      offset: 0,
      color: '#4370f2'
    }, {
      offset: 1,
      color: '#61d3f9'
    }]),
    new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
      offset: 0,
      color: '#4679f6'
    }, {
      offset: 1,
      color: '#4674f6'
    }]),
    new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
      offset: 0,
      color: '#4370f2'
    }, {
      offset: 1,
      color: '#61d3f9'
    }])]
  ]
  const temp = []
  temp.push({ name: '签到数', value: data4.value?.signedNum || 0, rate: data4.value?.signedNum ? '100.0' : 0 })
  temp.push({ name: '已叫号', value: data4.value?.calledNum || 0, rate: data4.value?.signedNum ? (data4.value.calledNum / data4.value?.signedNum * 100).toFixed(1) : 0 })
@@ -610,14 +611,15 @@
          show: true,
          position: 'outside',
          formatter: (params) => {
            return `{a|${params.data.name} ${params.data.rate}%}`
            const index = params.dataIndex;
            return `{color${index}|${params.data.name} ${params.data.rate}%}`
            // return `<div>${params.data.name}</div>`
          },
          rich: {
            a: {
              color: '#869CC9',
              fontSize: 13
            },
            color0: { color: 'orange', fontSize: 14 },
            color1: { color: '#869CC9', fontSize: 13 },
            color2: { color: '#869CC9', fontSize: 13 },
            color3: { color: '#869CC9', fontSize: 13 }
          }
        },
        labelLine: {
@@ -689,7 +691,6 @@
      item.rate = ((item.workTotalTime / count) * 30).toFixed(0)
      return item
    })
    loopFn2()
  })
}
@@ -745,7 +746,6 @@
      i.finishTime = dayjs(i.finishTime).format('HH:mm')
      return i
    })
    loopFn5()
  })
}
@@ -765,7 +765,6 @@
      item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.createDate).getTime()).format('HH小时mm分钟')
      return item
    })
    loopFn7()
  })
}
@@ -836,9 +835,12 @@
    getData6()
    getData7()
  }, 1000 * 60)
  // initEchart1()
  // initEchart2()
  // initEchart3()
  setTimeout(() => {
    loopFn2()
    loopFn5()
    loopFn7()
  }, 12000)
})