liukangdong
2024-07-01 f549372d6796835fcf12391abc8dee8375810d42
‘’
已添加10个文件
已修改21个文件
722 ■■■■■ 文件已修改
admin/src/api/business/carUseBook.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/hiddenDangerParam.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarUseBookWindow.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerParamWindow.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/operation/HiddenDangerParam.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/bookings.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/record.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprConfig.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprRecord.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/dangetDetail.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/App.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/ic_driver@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/ic_staff@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/ic_visitor@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/login_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/manifest.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/answer/answer.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/applicationRecord/applicationRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/appointmentDetails/appointmentDetails.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/index/index.vue 299 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login/login.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/apply.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/index.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/ic_driver@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/ic_enter_shinei@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/ic_enter_shiwai@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/ic_staff@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/ic_visitor@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/service.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/carUseBook.js
@@ -6,6 +6,13 @@
    trim: true
  })
}
// å¯¼å‡º
export function carUseBookRecordEx (data) {
  return request.post('/visitsAdmin/cloudService/business/carUseBook/exportExcel', data, {
    trim: true,
    download: true
  })
}
// æŸ¥è¯¢
export function findLogList (data) {
  return request.post('/visitsAdmin/cloudService/business/carUseBookLog/findList', data, {
admin/src/api/business/hiddenDangerParam.js
@@ -11,6 +11,12 @@
    trim: true
  })
}
export function exportExcel (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/exportExcel', data, {
    trim: true,
    download: true
  })
}
export function memberList (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/findHiddenAreaMemberList', data, {
    trim: true
admin/src/components/business/OperaCarUseBookWindow.vue
@@ -110,7 +110,7 @@
    </div>
    <!--  -->
    <template   v-slot:footer>
      <el-button @click="isShowProblem = true"  type="primary"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  class="status-red">同意</el-button>
      <el-button @click="agreeOpen"  type="primary"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  class="status-red">同意</el-button>
      <el-button @click="isBackProblem=true"  type="danger"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  >拒绝</el-button>
      <el-button @click="visible=false">返回</el-button>
    </template>
@@ -123,8 +123,9 @@
        width="480px"
    >
      <el-form :model="dealForm" ref="dealForm" >
        <el-form-item label="派车司机" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.drvierParam ===1">
          <el-select v-model="transForm.driverId" style="width: 300px"  filterable clearable placeholder="请选择派遣司机">
        <!-- <el-form-item label="派车司机" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> -->
        <el-form-item label="派车司机" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam == 0">
          <el-select v-model="dealForm.driverId" style="width: 300px"  filterable clearable placeholder="请选择派遣司机">
            <el-option
                v-for="item in memberList"
                :key="item.id"
@@ -138,7 +139,7 @@
              type="textarea"
              placeholder="请填写说明"
              :rows="4"
              v-model="backForm.checkInfo"
              v-model="dealForm.checkInfo"
          />
        </el-form-item>
      </el-form>
@@ -222,9 +223,9 @@
            this.dealing = true
            approveDo({
              objId: this.dataId,
              objType: this.model.type == 1?4:3,
              objType: this.model.type == 1 ? 4 : 3,
              status: 2,
              driverId: this.dealForm.driveId,
              driverId: this.dealForm.driverId,
              checkInfo: this.dealForm.checkInfo
            })
              .then(res => {
@@ -238,27 +239,31 @@
          })
      })
    },
    agreeOpen () {
      this.isShowProblem = true
      this.loadMemberList()
    },
    backDo () {
      this.$refs.backForm.validate((valid) => {
        if (!valid) {
          return
        }
        approveDo({
              objId: this.dataId,
              objType: this.model.type == 1?4:3,
              status: 3,
              checkInfo: this.dealForm.checkInfo
          }).then(res => {
              this.$tip.apiSuccess('退回成功')
              this.getDetail()
              this.isBackProblem = false
            })
            .catch(e => {
            })
            .finally(() => {
              this.dealing = false
            })
          objId: this.dataId,
          objType: this.model.type == 1 ? 4 : 3,
          status: 3,
          checkInfo: this.dealForm.checkInfo
        }).then(res => {
          this.$tip.apiSuccess('退回成功')
          this.getDetail()
          this.isBackProblem = false
        })
          .catch(e => {
          })
          .finally(() => {
            this.dealing = false
          })
      })
    },
    open (title, target) {
      this.title = title
@@ -283,10 +288,6 @@
          this.model = res
          this.dealForm.driveId = res.driveId
        })
    },
    handleTransfer () {
      this.isShowTransfer = true
      this.loadMemberList()
    },
    loadMemberList () {
      driveList({}).then(res => {
admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -61,17 +61,17 @@
    })
  },
  methods: {
    open (title, target,type) {
    open (title, target, type) {
      this.title = title
      this.visible = true
      this.form.type=type
      this.form.type = type
      this.loadMember()
      // æ–°å»ºç»„织
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
          this.form.type=type
          this.form.type = type
        })
        return
      }
@@ -79,13 +79,13 @@
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
          this.form.type=type
          if (this.type ==0 && target.memberIds != null && target.memberIds != '') {
            let t = target.memberIds.split(',')
            this.form.memberIdList =[]
            t.forEach(item =>{
          this.form.type = type
          if (this.form.type == 0 && target.memberIds != null && target.memberIds != '') {
            const t = target.memberIds.split(',')
            this.form.memberIdList = []
            t.forEach(item => {
              this.form.memberIdList.push(parseInt(item))
            });
            })
          }
        }
      })
admin/src/components/operation/HiddenDangerParam.vue
@@ -158,6 +158,8 @@
      const memberNames = item.memberNames.split(',')
      if (memberIds && memberIds.length === 1) {
        this.$set(this.param, 'checkUserId', memberIds[0])
      } else {
        this.$set(this.param, 'checkUserId', '')
      }
      memberIds.forEach((mem, i) => {
        arr.push({
@@ -255,10 +257,15 @@
  display: flex;
  flex-wrap: wrap;
  .item {
    width: 140px;
    max-height: 140px;
    width: 92px;
    max-height: 92px;
    margin-left: 10px;
    position: relative;
    border: 1px dashed #d9d9d9;
    border-radius: 4px;
    display: flex;
    align-items: center;
    justify-content: center;
    .close{
      font-size: 20px;
      position: absolute;
@@ -269,8 +276,8 @@
      cursor: pointer;
    }
    .img {
      width: 140px;
      max-height: 90px;
      width: 92px;
      max-height: 92px;
    }
  }
}
admin/src/views/meeting/bookings.vue
@@ -52,6 +52,7 @@
          type="datetimerange"
          range-separator="至"
          value-format="yyyy-MM-dd HH:mm:ss"
          :default-time="['00:00:00', '23:59:59']"
          start-placeholder="开始时间"
          end-placeholder="结束时间"
          @change="selectDate"
admin/src/views/operation/danger/record.vue
@@ -3,7 +3,7 @@
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="提报人" prop="memberName">
        <el-input v-model="searchForm.memberName" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
        <el-input v-model="searchForm.memberName" placeholder="请输入姓名" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="提报人组织" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入" clearable @keypress.enter.native="search"></el-input>
@@ -43,6 +43,7 @@
            type="datetimerange"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
            :default-time="['00:00:00', '23:59:59']"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
@@ -155,9 +156,7 @@
        .then(() => {
          this.exLoading = true
          exportExcel({
            page: this.pagination.page,
            capacity: 1000000,
            model: this.filters
            model: this.searchForm
          })
            .then(response => {
              this.download(response)
admin/src/views/operation/serviceCar/apprConfig.vue
@@ -2,8 +2,8 @@
  <TableLayout>
    <template v-slot:table-wrap>
      <el-tabs v-model="activeType" @tab-click="handleClick">
        <el-tab-pane label="室内用车" name="3"></el-tab-pane>
        <el-tab-pane label="室外用车" name="4"></el-tab-pane>
        <el-tab-pane label="市内用车" name="3"></el-tab-pane>
        <el-tab-pane label="市外用车" name="4"></el-tab-pane>
      </el-tabs>
      <div class="config">
        <div class="config_list">
admin/src/views/operation/serviceCar/apprRecord.vue
@@ -34,6 +34,7 @@
            type="datetimerange"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
            :default-time="['00:00:00', '23:59:59']"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
@@ -53,7 +54,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:carusebook:create','business:carusebook:exportExcel']">
        <li><el-button type="primary" @click="handleEdit" icon="el-icon-plus" v-permissions="['business:carusebook:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:carusebook:exportExcel']">导出</el-button></li>
        <li><el-button type="primary" @click="handleEx" v-permissions="['business:carusebook:exportExcel']">导出</el-button></li>
      </ul>
      <el-table
          v-loading="isWorking.search"
@@ -122,6 +123,7 @@
import OperaCarUseBookParamWindow from '@/components/operation/OperCarUseBookParamWindow.vue'
import { timeForMat } from '@/utils/util'
import { allList } from '@/api/business/hiddenDangerParam'
import { carUseBookRecordEx } from '@/api/business/carUseBook'
export default {
  name: 'Empower',
  extends: BaseTable,
@@ -155,6 +157,24 @@
    this.loadParams()
  },
  methods: {
    handleEx () {
      this.$dialog.exportConfirm('确认导出吗?')
        .then(() => {
          this.exLoading = true
          carUseBookRecordEx({
            model: this.searchForm
          })
            .then(response => {
              this.download(response)
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.exLoading = false
            })
        })
    },
    changeRadio (e) {
      this.searchForm.radio = e
      if (e === '0') {
admin/src/views/task/dangetDetail.vue
@@ -34,7 +34,7 @@
              <div class="label">现场情况</div>
              <div class="value">
                <div class="file_list">
                  <template v-for="item in info.submitFileList">
                  <div class="file" v-for="item in info.submitFileList">
                    <img
                      v-if="item.type == 0"
                      :key="item.id"
@@ -49,7 +49,7 @@
                      class="img"
                      controls
                    />
                  </template>
                  </div>
                </div>
              </div>
            </div>
@@ -458,7 +458,7 @@
      }
    }
  },
  created() {
  created () {
    this.getMemberList()
  },
  methods: {
@@ -666,10 +666,14 @@
          }
          .file_list {
            display: flex;
            .img {
              width: 200px;
            .file {
              width: 92px;
              margin-right: 12px;
              margin-bottom: 12px;
              .img{
                max-height: 92px;
                max-width: 92px;
              }
            }
          }
          .value {
h5/App.vue
@@ -35,13 +35,13 @@
    }
    // åˆ·æ–°token
    const token = uni.getStorageSync('token')
    if (token) {
      //  refreshToken().then(res => {
      //      if(res.code && res.code === 200){
      //         this.$store.commit('setToken', res.data)
      //     }
      // })
    }
    // if (token) {
    //    refreshToken().then(res => {
    //        if(res.code && res.code === 200){
    //           this.$store.commit('setToken', res.data)
    //       }
    //   })
    // }
  },
  onShow: function () {
    console.log('App Show')
h5/ic_driver@2x.png
h5/ic_staff@2x.png
h5/ic_visitor@2x.png
h5/login_bg@2x.png
h5/manifest.json
@@ -91,8 +91,8 @@
            "proxy" : {
                "/admin_interface" : {
                    // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    "target" : "http://192.168.0.173/admin_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.0.135:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.0.173/admin_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "http://192.168.0.135:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin" : true, // å…è®¸è·¨åŸŸ 
                    "pathRewrite" : {
                        "^/admin_interface" : "" // é‡å†™åœ°å€ï¼Œå¦‚果实际接口中是不带/dev-api,需要将这个前缀置空,因为这个前缀只是为了识别用,识别完之后就没用了
h5/pages.json
@@ -4,6 +4,13 @@
    },
    "pages": [
        {
            "path": "pages/login/login",
            "style": {
                "navigationBarTitleText": "选择身份",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "访客中心",
h5/pages/answer/answer.vue
@@ -8,12 +8,12 @@
      <view class="box_list_answer" v-if="list && list.length > 0">
        <view v-if="status == 1 || status == 2" class="score_static">
          <text class="name">本次得分:</text>
          <text class="num" :class="{warry: status == 2}">{{ score }}分</text>
          <text class="num" :class="{ warry: status == 2 }">{{ score }}分</text>
        </view>
        <!--    å•选/判断   -->
        <view v-for="(item, index) in list" :key="index" class="list_item">
          <view class="box_list_answer_name">
            <text>{{ index + 1 }}、{{ item.title}}</text>
            <text>{{ index + 1 }}、{{ item.title }}</text>
            <text v-if="item.score"> ({{ item.score }}分)</text>
            <text style="color: #ed4545">*</text>
          </view>
@@ -83,14 +83,18 @@
            </view>
            <view
              class="box_list_answer_tips"
              style="margin-bottom: 0rpx"
              v-if="
                item.selAnswer &&
                item.answer !== item.selAnswer &&
                status != '0'
              "
            >
              <image src="@/static/ic_wrong@2x.png" />
              <text>回答错误</text>
              <view class="line">
                <image src="@/static/ic_wrong@2x.png" />
                <text>回答错误</text>
              </view>
              <view class="line">正确答案:{{ item.answer }}</view>
            </view>
            <view
              class="box_list_answer_tips"
@@ -100,8 +104,10 @@
                status != '0'
              "
            >
              <image src="@/static/ic_success@2.png" />
              <text class="success">回答正确</text>
              <view class="line">
                <image src="@/static/ic_success@2.png" />
                <text class="success">回答正确</text>
              </view>
            </view>
          </template>
          <template v-if="item.type == 2">
@@ -116,8 +122,7 @@
                src="@/static/checkbo1x_sel@2x.png"
                v-if="
                  (line.checked && status != '2') ||
                  (item.selAnswer === item.answer &&
                    line.checked)
                  (item.selAnswer === item.answer && line.checked)
                "
              />
              <image
@@ -135,8 +140,7 @@
              <text
                v-if="
                  (line.checked && status != '2') ||
                  (item.selAnswer === item.answer &&
                    line.checked)
                  (item.selAnswer === item.answer && line.checked)
                "
                style="color: rgba(77, 153, 168, 1)"
                ><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{
@@ -165,8 +169,11 @@
                status != '0'
              "
            >
              <image src="@/static/ic_wrong@2x.png" />
              <text>回答错误</text>
              <view class="line">
                <image src="@/static/ic_wrong@2x.png" />
                <text>回答错误</text>
              </view>
              <view class="line">正确答案:{{ item.answer }}</view>
            </view>
            <view
              class="box_list_answer_tips"
@@ -176,8 +183,10 @@
                status != '0'
              "
            >
              <image src="@/static/ic_success@2.png" />
              <text class="success">回答正确</text>
              <view class="line">
                <image src="@/static/ic_success@2.png" />
                <text class="success">回答正确</text>
              </view>
            </view>
          </template>
        </view>
@@ -237,12 +246,12 @@
      score: 0
    }
  },
  computed:{
    answerIng(){
  computed: {
    answerIng() {
      let count = 0
      this.list.forEach(item => {
        if(item.selAnswer || item.selAnswer == 0){
          count ++
        if (item.selAnswer || item.selAnswer == 0) {
          count++
        }
      })
      return count === this.list.length
@@ -307,7 +316,7 @@
    },
    // å•选选择中题目
    select(line, i) {
      if(this.status === '2') return
      if (this.status === '2') return
      this.list.forEach((item, index) => {
        if (index === i) {
          item.selAnswer = line.code
@@ -316,7 +325,7 @@
      // this.problemIndex = index
    },
    changeBox(index, jeck) {
      if(this.status === '2') return
      if (this.status === '2') return
      this.list.forEach((item, i) => {
        if (index === i) {
          item.options.forEach((item2, j) => {
@@ -356,7 +365,7 @@
    },
    // ä¸‹ä¸€é¢˜
    onSubmit() {
      if(!this.answerIng) return
      if (!this.answerIng) return
      const { list } = this
      // éªŒè¯æ‰€æœ‰é¢˜ç›®éƒ½æœ‰é€‰é¡¹
      let count = 0
@@ -376,7 +385,7 @@
      list.forEach(item => {
        if (item.selAnswer !== item.answer) {
          flag++
        }else{
        } else {
          this.score += item.score
        }
      })
@@ -468,9 +477,17 @@
        box-sizing: border-box;
        background: #f7f7f7;
        border-radius: 8rpx;
        display: flex;
        align-items: center;
        margin-bottom: 24rpx;
        .line {
          display: flex;
          align-items: center;
          font-size: 28rpx;
          color: #333333;
          margin-bottom: 20rpx;
          &:nth-last-child(1){
            margin-bottom: 0;
          }
        }
        image {
          width: 28rpx;
          height: 28rpx;
@@ -486,18 +503,18 @@
        }
      }
    }
    .score_static{
    .score_static {
      display: flex;
      font-size: 32rpx;
      margin-bottom: 40rpx;
      .name{
      .name {
        font-weight: 600;
      }
      .num{
      .num {
        color: $uni-color-primary;
      }
      .warry{
        color: #ED4545;
      .warry {
        color: #ed4545;
      }
    }
    .list_item {
@@ -541,7 +558,7 @@
      font-size: 30rpx;
      color: #ffffff;
    }
    .disable{
    .disable {
      background-color: #cccccc;
    }
  }
h5/pages/applicationRecord/applicationRecord.vue
@@ -111,7 +111,7 @@
  methods: {
    handleDetail(id) {
      uni.navigateTo({
        url: "/pages/appointmentDetails/appointmentDetails?id=" + id
        url: "/pages/appointmentDetails/appointmentDetails?detail=1&id=" + id
      })
    },
    tabsClick(val) {
h5/pages/appointmentDetails/appointmentDetails.vue
@@ -77,10 +77,25 @@
  data() {
    return {
      info: {},
      show: false
      show: false,
      detail: ''
    }
  },
  onBackPress(options) {
    if (this.detail == 1) {
      uni.redirectTo({
        url: '/pages/applicationRecord/applicationRecord'
      })
    } else {
      uni.redirectTo({
        url: '/pages/index/index'
      })
    }
    return true
  },
  onLoad(option) {
    this.detail = option.detail || ''
    this.getDetail(option.id)
    // visitorSubDetail({ id: option.id })
    //     .then(res => {
h5/pages/index/index.vue
@@ -1,162 +1,167 @@
<template>
    <view class="box">
        <view class="box_head">
            <text>安泰物流智慧园区</text>
            <text class="h2">访客专区</text>
            <image mode="widthFix" class="banner_bg" src="@/static/banner.jpg" />
        </view>
        <view class="main_title">业务办理</view>
        <view class="box_list">
            <view class="box_list_item" @click="jump(1)">
                <image src="@/static/ic_laifangdengji.png" mode="widthFix" />
            </view>
            <view class="box_list_item" @click="jump(2)">
                <image src="@/static/ic_yuyuejilu.png" mode="widthFix" />
            </view>
            <view class="box_list_item" @click="jump(3)">
                <image src="@/static/ic_yuanqudaolan.png" mode="widthFix" />
            </view>
            <view class="box_list_item" @click="jump(4)">
                <image src="@/static/ic_yuyuezhinan.png" mode="widthFix" />
            </view>
        </view>
        <!-- <view class="box_btn">退出登录</view> -->
        <view class="copyright">
            <image src="@/static/logo_s@2x.png" mode="widthFix" />
            <text>安徽安泰物流有限责任公司版权所有</text>
        </view>
    </view>
  <view class="box">
    <view class="box_head">
      <text>安泰物流智慧园区</text>
      <text class="h2">访客专区</text>
      <image mode="widthFix" class="banner_bg" src="@/static/banner.jpg" />
    </view>
    <view class="main_title">业务办理</view>
    <view class="box_list">
      <view class="box_list_item" @click="jump(1)">
        <image src="@/static/ic_laifangdengji.png" mode="widthFix" />
      </view>
      <view class="box_list_item" @click="jump(2)">
        <image src="@/static/ic_yuyuejilu.png" mode="widthFix" />
      </view>
      <view class="box_list_item" @click="jump(3)">
        <image src="@/static/ic_yuanqudaolan.png" mode="widthFix" />
      </view>
      <view class="box_list_item" @click="jump(4)">
        <image src="@/static/ic_yuyuezhinan.png" mode="widthFix" />
      </view>
    </view>
    <!-- <view class="box_btn">退出登录</view> -->
    <view class="copyright">
      <image src="@/static/logo_s@2x.png" mode="widthFix" />
      <text>安徽安泰物流有限责任公司版权所有</text>
    </view>
  </view>
</template>
<script>
import image from 'uview-ui/libs/config/props/image'
    export default {
export default {
        data() {
            return {
  data() {
    return {
            }
        },
        methods: {
            jump(type) {
                switch (type) {
                    case 1:
                        uni.navigateTo({
                            url: '/pages/notice/notice'
                        })
                        break
                    case 2:
                        uni.navigateTo({
                            url: '/pages/applicationRecord/applicationRecord'
                        })
                        break
                    case 3:
                        uni.navigateTo({
                            url: '/pages/guidemap/guidemap'
                        })
                        break
                    case 4:
                        uni.navigateTo({
                            url: '/pages/visitorSubGuide/index'
                        })
                        break
                }
            }
        }
    }
    }
  },
  onBackPress(options) {
    uni.redirectTo({
      url: '/pages/login/login'
    })
    return true
  },
  methods: {
    jump(type) {
      switch (type) {
        case 1:
          uni.navigateTo({
            url: '/pages/notice/notice'
          })
          break
        case 2:
          uni.navigateTo({
            url: '/pages/applicationRecord/applicationRecord'
          })
          break
        case 3:
          uni.navigateTo({
            url: '/pages/guidemap/guidemap'
          })
          break
        case 4:
          uni.navigateTo({
            url: '/pages/visitorSubGuide/index'
          })
          break
      }
    }
  }
}
</script>
<style lang="scss" scoped>
    .box {
        width: 100%;
        height: auto;
        padding: 30rpx;
        box-sizing: border-box;
.box {
  width: 100%;
  height: auto;
  padding: 30rpx;
  box-sizing: border-box;
        .box_btn {
            position: fixed;
            bottom: 70rpx;
            left: 50%;
            transform: translate(-50%, 0);
            width: 208rpx;
            height: 72rpx;
            line-height: 72rpx;
            text-align: center;
            border-radius: 36rpx;
            border: 1rpx solid #999999;
            font-size: 28rpx;
            font-weight: 400;
            color: #333333;
        }
  .box_btn {
    position: fixed;
    bottom: 70rpx;
    left: 50%;
    transform: translate(-50%, 0);
    width: 208rpx;
    height: 72rpx;
    line-height: 72rpx;
    text-align: center;
    border-radius: 36rpx;
    border: 1rpx solid #999999;
    font-size: 28rpx;
    font-weight: 400;
    color: #333333;
  }
        .box_head {
            width: 100%;
            height: 270rpx;
            padding: 0 44rpx;
            box-sizing: border-box;
            border-radius: 8rpx;
            display: flex;
            flex-direction: column;
            position: relative;
            .banner_bg{
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                z-index: -1;
            }
            .h2 {
                font-size: 28rpx;
                font-family: SourceHanSansSC, SourceHanSansSC;
                font-weight: 400;
                color: #FFFFFF;
                margin-top: 14rpx;
            }
            text {
                &:first-child {
                    font-size: 44rpx;
                    font-family: SourceHanSansSC, SourceHanSansSC;
                    font-weight: bold;
                    color: #FFFFFF;
                    margin-top: 54rpx;
                }
            }
        }
        .main_title{
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            margin: 40rpx 0 32rpx;
        }
        .box_list {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            justify-content: space-between;
            margin-top: 40rpx;
  .box_head {
    width: 100%;
    height: 270rpx;
    padding: 0 44rpx;
    box-sizing: border-box;
    border-radius: 8rpx;
    display: flex;
    flex-direction: column;
    position: relative;
    .banner_bg {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      z-index: -1;
    }
    .h2 {
      font-size: 28rpx;
      font-family: SourceHanSansSC, SourceHanSansSC;
      font-weight: 400;
      color: #ffffff;
      margin-top: 14rpx;
    }
    text {
      &:first-child {
        font-size: 44rpx;
        font-family: SourceHanSansSC, SourceHanSansSC;
        font-weight: bold;
        color: #ffffff;
        margin-top: 54rpx;
      }
    }
  }
  .main_title {
    font-weight: 600;
    font-size: 32rpx;
    color: #222222;
    margin: 40rpx 0 32rpx;
  }
  .box_list {
    width: 100%;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    justify-content: space-between;
    margin-top: 40rpx;
            .box_list_item {
                width: 100%;
                margin-bottom: 20rpx;
                image {
                    width: 100%;
                }
            }
        }
        .copyright{
            display: flex;
            align-items: center;
            justify-content: center;
            margin-top: 84rpx;
            font-size: 24rpx;
            color: #666666;
            image{
                width: 40rpx;
                height: 40rpx;
            }
        }
    }
    .box_list_item {
      width: 100%;
      margin-bottom: 20rpx;
      image {
        width: 100%;
      }
    }
  }
  .copyright {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 84rpx;
    font-size: 24rpx;
    color: #666666;
    image {
      width: 40rpx;
      height: 40rpx;
    }
  }
}
</style>
h5/pages/login/login.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
<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="jump('/pages/staffLogin/login')">
      <image class="avatar" src="@/static/ic_staff@2x.png" />
      <view class="content">
        <view class="name">我是员工</view>
        <view class="placeholder6">STAFF</view>
      </view>
      <u-icon name="arrow-right" size="24" color="#979797" />
    </view>
    <view class="item">
      <image class="avatar" src="@/static/ic_driver@2x.png" />
      <view class="content">
        <view class="name">我是物流车司机</view>
        <view class="placeholder6">DRIVER</view>
      </view>
      <u-icon name="arrow-right" size="24" color="#979797" />
    </view>
  </view>
</template>
<script>
export default {
  methods: {
    jump(url) {
      console.log(url);
      uni.navigateTo({
        url
      })
    }
  }
}
</script>
<style lang="scss" >
.main_app {
  width: 100%;
  height: 100vh;
  padding-top: 80rpx;
  background: linear-gradient(
    180deg,
    rgba(39, 155, 170, 0.2) 0%,
    rgba(39, 155, 170, 0) 100%
  );
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
    z-index: -1;
  }
  .h1 {
    font-weight: 600;
    font-size: 48rpx;
    color: #222222;
    line-height: 66rpx;
    margin-bottom: 16rpx;
  }
  .place{
    margin-bottom: 98rpx;
  }
  .item {
    width: 690rpx;
    height: 200rpx;
    background: #ffffff;
    border-radius: 8rpx;
    display: flex;
    align-items: center;
    padding: 40rpx;
    font-size: 26rpx;
    margin-bottom: 40rpx;
    .avatar {
      width: 120rpx;
      height: 120rpx;
      margin-right: 30rpx;
    }
    .content {
      flex: 1;
      .name {
        font-weight: 600;
        font-size: 38rpx;
        color: #222222;
        margin-bottom: 20rpx;
      }
    }
  }
}
</style>
h5/pages/staff/index.vue
@@ -99,12 +99,11 @@
  },
  onLoad() {
    console.log('userInfo', this.userInfo)
  },
  onShow() {
    // if (this.userInfo && this.userInfo.name) {
    if (this.userInfo && this.userInfo.memberId) {
      this.getTaskInfo()
    // }
    }
  },
  methods: {
    jump(path) {
h5/pages/staff/vehicle/apply.vue
@@ -91,13 +91,15 @@
            }"
          >
            <text v-if="param.memberNames">
              <text v-for="mem,i in param.memberList" :key="mem.id">
                                <template v-if="i < 2">
                                    <text>{{ mem.name }}</text>
                                    <text v-if="i < 1 && param.memberList.length > 1">,</text>
                                </template>
                            </text>
                            <text v-if="param.memberList.length > 2">等{{ param.memberList.length }}人</text>
              <text v-for="(mem, i) in param.memberList" :key="mem.id">
                <template v-if="i < 2">
                  <text>{{ mem.name }}</text>
                  <text v-if="i < 1 && param.memberList.length > 1">,</text>
                </template>
              </text>
              <text v-if="param.memberList.length > 2"
                >等{{ param.memberList.length }}人</text
              >
            </text>
            <text v-else>请选择</text>
          </text>
@@ -135,10 +137,10 @@
    </view>
    <view class="sub_btn" @click="handleSub">提交</view>
    <!--  -->
    <!-- :minDate="new Date(param.startTime).getTime()"
      :maxDate="new Date(param.endTime).getTime()" -->
    <u-datetime-picker
      :show="isShowDatetime"
      :minDate="new Date(param.startTime).getTime()"
      :maxDate="new Date(param.endTime).getTime()"
      @confirm="confirmDate"
      @cancel="isShowDatetime = false"
      mode="datetime"
@@ -207,7 +209,7 @@
      })
    },
    selPeople() {
      if(this.param.memberList && this.param.memberList.length > 0){
      if (this.param.memberList && this.param.memberList.length > 0) {
        setTimeout(() => {
          this.$eventBus.$emit('applePeoDetail', this.param.memberList || [])
        }, 500)
h5/pages/staff/vehicle/index.vue
@@ -1,7 +1,7 @@
<template>
  <view class="main_app">
    <image
      src="../../../static/staff/yongche_bg.png"
      src="@/static/staff/yongche_bg.png"
      class="banner"
      mode="widthFix"
    ></image>
@@ -10,20 +10,34 @@
      <view class="title">选择目的地类别</view>
      <view class="item" @click="$jump('/pages/staff/vehicle/shinei')">
        <image
          src="../../../static/bg_shineiyongche@2x.png"
          src="@/static/bg_shineiyongche@2x.png"
          class="img"
          mode="widthFix"
        ></image>
        <view class="h1">市内用车</view>
        <view class="h1">
          <text>市内用车</text>
          <image
            src="@/static/ic_enter_shinei@2x.png"
            class="icon"
            mode="widthFix"
          ></image>
        </view>
        <view class="h2">URBAN AREA</view>
      </view>
      <view class="item" @click="$jump('/pages/staff/vehicle/shiwai')">
        <image
          src="../../../static/bg_shiwaiyongche@2x.png"
          src="@/static/bg_shiwaiyongche@2x.png"
          class="img"
          mode="widthFix"
        ></image>
        <view class="h1">市外用车</view>
        <view class="h1">
          <text>市外用车</text>
          <image
            src="@/static/ic_enter_shiwai@2x.png"
            class="icon"
            mode="widthFix"
          ></image>
        </view>
        <view class="h2">SUBURB AREA</view>
      </view>
    </view>
@@ -70,6 +84,12 @@
        color: #222222;
        line-height: 48rpx;
        margin-bottom: 10rpx;
        display: flex;
        align-items: center;
        .icon{
          width: 32rpx;
          margin-left: 10rpx;
        }
      }
      .h2 {
        font-size: 22rpx;
@@ -91,7 +111,7 @@
      font-size: 34rpx;
      color: #222222;
      line-height: 48rpx;
            text-align: center;
      text-align: center;
    }
  }
  .banner {
h5/static/ic_driver@2x.png
h5/static/ic_enter_shinei@2x.png
h5/static/ic_enter_shiwai@2x.png
h5/static/ic_staff@2x.png
h5/static/ic_visitor@2x.png
h5/utils/service.js
@@ -37,7 +37,7 @@
                    }
                    if (data.code === 5112) {
                        uni.navigateTo({
                            url: '/pages/staffLogin/login'
                            url: '/pages/login/login'
                        })
                    }
                    resolve(data)