jiangping
2024-05-27 2e6f381d09669635473faf5dd4a3f01b5797d97e
Merge remote-tracking branch 'origin/master'
已添加2个文件
已修改23个文件
1066 ■■■■ 文件已修改
h5/api/index.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/visitor.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/answer/answer.vue 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/applicationRecord/applicationRecord.vue 353 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/notice/notice.vue 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/shiwai.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/userinfo/userinfo.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorApplication/visitorApplication.vue 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerLogCloudController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/HiddenDangerLogJoinMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerLog.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CheckVisitedDTO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/index.js
@@ -1,5 +1,6 @@
import { http } from '@/utils/service.js'
export * from '@/utils/config.js'
export * from './visitor'
// æŸ¥è¯¢å­—典值数据
export const getSystemDictData = (data) => {
@@ -9,15 +10,10 @@
  })
}
// èŽ·å–é¢˜ç›®æ•°æ®
export const getProblemsVO = () => {
export const getProblemsVO = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/problem/getProblemsVO'
  })
}
// è®¿å®¢é¢„约详情
export const visitorSubDetail = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/detail',
    url: 'visitsAdmin/cloudService/web/problem/getProblemsVO',
    method: 'get',
    data
  })
}
h5/api/visitor.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
import { http } from '@/utils/service.js'
import { methods } from 'uview-ui/libs/mixin/mixin'
// è®¿å®¢é¢„约详情
export const visitorSubDetail = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/detail',
    data
  })
}
// æäº¤è®¿å®¢ä¿¡æ¯
export const createFk = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/createFk',
    method: 'post',
    data
  })
}
// æŸ¥è¯¢è¢«è®¿äººåˆ—表
export const getVisitedMember = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/getVisitedMember',
    method: 'post',
    data
  })
}
// æŸ¥è¯¢æ¥è®¿äº‹ç”±
export const getVisitedVisitReason = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/visitReason',
    method: 'post',
    data
  })
}
// è®¿å®¢è®°å½•
export const getVisitedRecord = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/visitPage',
    method: 'post',
    data
  })
}
h5/pages.json
@@ -6,8 +6,7 @@
            "path": "pages/notice/notice",
            "style": {
                "navigationBarTitleText": "入园须知",
                "enablePullDownRefresh": false,
                "navigationStyle": "custom"
                "enablePullDownRefresh": false
            }
        },
        {
@@ -321,38 +320,38 @@
        }
        ,{
            "path" : "pages/driver/queueUpRecord",
            "style" :
            {
                "navigationBarTitleText": "作业中车辆",
                "enablePullDownRefresh": false
            }
            "style" :
            {
                "navigationBarTitleText": "作业中车辆",
                "enablePullDownRefresh": false
            }
            
        }
        ,{
            "path" : "pages/driver/taskDetail",
            "style" :
            {
                "navigationBarTitleText": "任务详情",
                "enablePullDownRefresh": false
            }
            "style" :
            {
                "navigationBarTitleText": "任务详情",
                "enablePullDownRefresh": false
            }
            
        }
        ,{
            "path" : "pages/driver/reservedDetail",
            "style" :
            {
                "navigationBarTitleText": "访客审批",
                "enablePullDownRefresh": false
            }
            "style" :
            {
                "navigationBarTitleText": "访客审批",
                "enablePullDownRefresh": false
            }
            
        }
        ,{
            "path" : "pages/driver/taskConfirm",
            "style" :
            {
                "navigationBarTitleText": "确认任务",
                "enablePullDownRefresh": false
            }
            "style" :
            {
                "navigationBarTitleText": "确认任务",
                "enablePullDownRefresh": false
            }
            
        }
    ],
@@ -455,4 +454,4 @@
        "backgroundColor": "#ffffff"
    },
    "uniIdRouter": {}
}
}
h5/pages/answer/answer.vue
@@ -1,8 +1,8 @@
<template>
    <view class="box">
        <view class="box_bgimage" :style="{backgroundImage: 'url(' + bg + ')'}">
            <text class="box_bgimage_a">访客问卷小调研</text>
            <text class="box_bgimage_b">答题分值需要达到30分才能申请访问哦~</text>
            <text class="box_bgimage_a">{{ title }}</text>
            <text class="box_bgimage_b">{{ content }}</text>
        </view>
        <view class="box_list">
            <view class="box_list_answer" v-if="list && list.length > 0">
@@ -19,21 +19,27 @@
                </template> -->
                <!--    å•选   -->
                <view v-for="(item,index) in list"  :key="index" class="list_item">
                    <view class="box_list_answer_name">
                        {{index + 1}}、{{item.title}}
                    <template v-if="item.type == 1">
                        <view class="box_list_answer_name">
                        {{index + 1}}、{{item.title}}<text style="color:#ED4545;">*</text>
                    </view>
                    <view class="box_list_answer_item" v-for="(line, lIndex) in item.options" :key="lIndex" @click="select(index)">
                        <image src="@/static/video_error@2x.png"  />
                        <image src="@/static/video@2x.png"  />
                        <image src="@/static/video_sel@2x.png"  />
                        <text style="color: rgba(237, 69, 69, 1)" >{{line.code}} {{line.value}}</text>
                        <text >{{line.code}} {{line.value}}</text>
                        <text style="color: rgba(2, 94, 239, 1)" >{{line.code}} {{line.value}}</text>
                    <view class="box_list_answer_item" v-for="(line, lIndex) in item.options" :key="lIndex" @click="select(line, index)">
                        <image  src="@/static/video@2x.png" v-if="!item.selAnswer || item.selAnswer !== line.code" />
                        <image src="@/static/video_sel@2x.png" v-if="item.selAnswer && item.selAnswer == line.code && item.answer === item.selAnswer" />
                        <image src="@/static/video_error@2x.png" v-if="item.selAnswer && item.selAnswer == line.code && item.answer !== item.selAnswer" />
                        <text v-if="!item.selAnswer"><text class="mr24">{{line.code}}</text> {{line.value}}</text>
                        <text v-if="item.selAnswer && item.answer === item.selAnswer" style="color: rgba(2, 94, 239, 1)" ><text class="mr24" style="color: rgba(2, 94, 239, 1)">{{line.code}}</text> {{line.value}}</text>
                        <text v-if="item.selAnswer && item.answer !== item.selAnswer" style="color: rgba(237, 69, 69, 1)" ><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{line.code}}</text> {{line.value}}</text>
                    </view>
                    <view class="box_list_answer_tips" v-if="success">
                    <view class="box_list_answer_tips" v-if="item.selAnswer && item.answer !== item.selAnswer">
                        <image src="@/static/ic_wrong@2x.png" />
                        <text>回答错误</text>
                    </view>
                    <view class="box_list_answer_tips" v-if="item.selAnswer && item.answer === item.selAnswer">
                        <image src="@/static/meeting/icon/ic_choose_sel@2x.png" />
                        <text>回答正确</text>
                    </view>
                    </template>
                </view>
                <view class="empty"></view>
                <view class="box_list_answer_btn" @click="next()">提交</view>
@@ -66,42 +72,7 @@
        data() {
            return {
                i: 0,
                problemIndex: 0,
                multiple: null,
                success: true,
                list: [
                    {
                        type: '1',
                        title: '第一题',
                        options: [
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                        ]
                    },
                    {
                        type: '1',
                        title: '第一题',
                        options: [
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                        ]
                    },
                    {
                        type: '1',
                        title: '第一题',
                        options: [
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                            { code: '年刊', value: '111111' },
                        ]
                    }
                ],
                list: [],
                bg: require("@/static/banner_dati.jpg"),
                title: '',
                content: ''
@@ -109,7 +80,7 @@
        },
        
        onLoad() {
            // this.getProblems()
            this.getProblems()
            this.getInfo()
        },
@@ -147,9 +118,11 @@
                                if (item.type === 1 || item.type === 2) {
                                    item.options = JSON.parse(item.options)
                                }
                                item.status = '0'
                                item.selAnswer = null
                            })
                            console.log('options', res.data);
                            this.list = res.data
                            console.log(this.list)
                        }
                        // res.param.problemsDOList.forEach(item => {
                        //     item.options = JSON.parse(item.options)
@@ -159,9 +132,13 @@
                    })
            },
            // å•选选择中题目
            select(index) {
                console.log(index)
                this.problemIndex = index
            select(line, i) {
                this.list.forEach((item,index)=>{
                    if(index === i){
                        item.selAnswer = line.code
                    }
                })
                // this.problemIndex = index
            },
            sort(arr) {
                arr.sort(function(a, b) {
h5/pages/applicationRecord/applicationRecord.vue
@@ -1,177 +1,194 @@
<template>
    <view class="box">
        <scroll-view scroll-x class="box_head">
            <view class="box_head_list">
                <view class="box_head_item active">全部</view>
                <view class="box_head_item">待审核</view>
                <view class="box_head_item">审核通过</view>
                <view class="box_head_item">审核驳回</view>
            </view>
        </scroll-view>
        <view class="box_list">
            <view class="box_list_item" v-for="(item, index) in 3" :key="index">
                <view class="box_list_item_head">
                    <text>丁恩凯的劳务入厂申请</text>
                    <text class="loading">待审核</text>
                </view>
                <view class="box_list_item_nr">
                    <view class="box_list_item_nr_item">
                        <text>被访问人:</text>
                        <text>人事部-王亚蓝</text>
                    </view>
                    <view class="box_list_item_nr_item">
                        <text>进厂时间:</text>
                        <text>12-12 09:00</text>
                    </view>
                    <view class="box_list_item_nr_item">
                        <text>离厂时间:</text>
                        <text>12-12 12:00</text>
                    </view>
                    <view class="box_list_item_nr_item">
                        <text>入厂人数:</text>
                        <text>10</text>
                    </view>
                    <view class="box_list_item_nr_item">
                        <text>来访事由:</text>
                        <text>业务来往</text>
                    </view>
                    <view class="box_list_item_nr_x"></view>
                    <view class="box_list_item_nr_text">
                        2023-12-12 09:00提交
                    </view>
                </view>
            </view>
        </view>
    </view>
  <view class="box">
    <scroll-view scroll-x class="box_head">
      <view class="box_head_list">
        <view class="box_head_item active">全部</view>
        <view class="box_head_item">待审核</view>
        <view class="box_head_item">审核通过</view>
        <view class="box_head_item">审核驳回</view>
      </view>
    </scroll-view>
    <view class="box_list">
      <view class="box_list_item" v-for="(item, index) in 3" :key="index">
        <view class="box_list_item_head">
          <text>丁恩凯的劳务入厂申请</text>
          <text class="loading">待审核</text>
        </view>
        <view class="box_list_item_nr">
          <view class="box_list_item_nr_item">
            <text>被访问人:</text>
            <text>人事部-王亚蓝</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>进厂时间:</text>
            <text>12-12 09:00</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>离厂时间:</text>
            <text>12-12 12:00</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>入厂人数:</text>
            <text>10</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>来访事由:</text>
            <text>业务来往</text>
          </view>
          <view class="box_list_item_nr_x"></view>
          <view class="box_list_item_nr_text"> 2023-12-12 09:00提交 </view>
        </view>
      </view>
    </view>
  </view>
</template>
<script>
    export default {
        data() {
            return {
            };
        }
    }
import { getVisitedRecord } from '@/api'
export default {
  data() {
    return {
      pagination: {
        page: 1,
        capacity: 10
      },
      list: []
    }
  },
  onLoad() {
    this.getList()
  },
  methods: {
    getList() {
      const { pagination } = this
      getVisitedRecord({
        pageWrap: { ...pagination }
      }).then(res => {
        this.list = res.data
      })
    }
  }
}
</script>
<style>
    page {
        background-color: #F7F7F7 !important;
    }
page {
  background-color: #f7f7f7 !important;
}
</style>
<style lang="scss" scoped>
    .box {
        width: 100%;
        .box_head {
            width: 100%;
            height: 108rpx;
            padding: 0 30rpx;
            box-sizing: border-box;
            background: #FFFFFF;
            position: sticky;
            top: 0;
            left: 0;
            .box_head_list {
                width: 100%;
                height: 100%;
                display: flex;
                align-items: center;
                .active {
                    border: 1rpx solid #279BAA !important;
                    color: #279BAA !important;
                }
                .box_head_item {
                    padding: 0 30rpx;
                    height: 60rpx;
                    line-height: 60rpx;
                    box-sizing: border-box;
                    border-radius: 30rpx;
                    border: 1rpx solid #999999;
                    font-size: 26rpx;
                    font-weight: 400;
                    color: #333333;
                    margin-right: 20rpx;
                }
            }
        }
        .box_list {
            width: 100%;
            padding: 30rpx;
            box-sizing: border-box;
            .box_list_item {
                width: 100%;
                margin-bottom: 20rpx;
                &:last-child {
                    margin: 0 !important;
                }
                .box_list_item_head {
                    width: 100%;
                    height: 100rpx;
                    padding: 0 30rpx;
                    box-sizing: border-box;
                    background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
                    border-radius: 8rpx 8rpx 0rpx 0rpx;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    .loading {
                        color: #279BAA;
                    }
                    .success {
                        color: #03C68F;
                    }
                    .error {
                        color: #E0312A;
                    }
                    text {
                        &:nth-child(1) {
                            font-size: 32rpx;
                            font-weight: 500;
                            color: #222222;
                        }
                        &:nth-child(2) {
                            font-size: 26rpx;
                            font-weight: 400;
                        }
                    }
                }
                .box_list_item_nr {
                    padding: 30rpx;
                    width: 100%;
                    box-sizing: border-box;
                    background-color: #FFFFFF;
                    .box_list_item_nr_x {
                        width: 100%;
                        height: 1rpx;
                        background-color: #E5E5E5;
                    }
                    .box_list_item_nr_text {
                        width: 100%;
                        font-size: 26rpx;
                        font-weight: 400;
                        color: #999999;
                        margin-top: 32rpx;
                    }
                    .box_list_item_nr_item {
                        width: 100%;
                        display: flex;
                        align-items: center;
                        margin-bottom: 20rpx;
                        text {
                            &:nth-child(1) {
                                font-size: 26rpx;
                                font-weight: 400;
                                color: #666666;
                            }
                            &:nth-child(2) {
                                font-size: 26rpx;
                                font-weight: 400;
                                color: #333333;
                            }
                        }
                    }
                }
            }
        }
    }
.box {
  width: 100%;
  .box_head {
    width: 100%;
    height: 108rpx;
    padding: 0 30rpx;
    box-sizing: border-box;
    background: #ffffff;
    position: sticky;
    top: 0;
    left: 0;
    .box_head_list {
      width: 100%;
      height: 100%;
      display: flex;
      align-items: center;
      .active {
        border: 1rpx solid #279baa !important;
        color: #279baa !important;
      }
      .box_head_item {
        padding: 0 30rpx;
        height: 60rpx;
        line-height: 60rpx;
        box-sizing: border-box;
        border-radius: 30rpx;
        border: 1rpx solid #999999;
        font-size: 26rpx;
        font-weight: 400;
        color: #333333;
        margin-right: 20rpx;
      }
    }
  }
  .box_list {
    width: 100%;
    padding: 30rpx;
    box-sizing: border-box;
    .box_list_item {
      width: 100%;
      margin-bottom: 20rpx;
      &:last-child {
        margin: 0 !important;
      }
      .box_list_item_head {
        width: 100%;
        height: 100rpx;
        padding: 0 30rpx;
        box-sizing: border-box;
        background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
        border-radius: 8rpx 8rpx 0rpx 0rpx;
        display: flex;
        align-items: center;
        justify-content: space-between;
        .loading {
          color: #279baa;
        }
        .success {
          color: #03c68f;
        }
        .error {
          color: #e0312a;
        }
        text {
          &:nth-child(1) {
            font-size: 32rpx;
            font-weight: 500;
            color: #222222;
          }
          &:nth-child(2) {
            font-size: 26rpx;
            font-weight: 400;
          }
        }
      }
      .box_list_item_nr {
        padding: 30rpx;
        width: 100%;
        box-sizing: border-box;
        background-color: #ffffff;
        .box_list_item_nr_x {
          width: 100%;
          height: 1rpx;
          background-color: #e5e5e5;
        }
        .box_list_item_nr_text {
          width: 100%;
          font-size: 26rpx;
          font-weight: 400;
          color: #999999;
          margin-top: 32rpx;
        }
        .box_list_item_nr_item {
          width: 100%;
          display: flex;
          align-items: center;
          margin-bottom: 20rpx;
          text {
            &:nth-child(1) {
              font-size: 26rpx;
              font-weight: 400;
              color: #666666;
            }
            &:nth-child(2) {
              font-size: 26rpx;
              font-weight: 400;
              color: #333333;
            }
          }
        }
      }
    }
  }
}
</style>
h5/pages/notice/notice.vue
@@ -1,146 +1,106 @@
<template>
    <div class="container">
        <video src="https://vdept3.bdstatic.com/mda-nj7gwfue9kdnbtsh/sc/cae_h264/1665488517815949255/mda-nj7gwfue9kdnbtsh.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1715141591-0-0-6dfdf4d4c3d94b60b9adeb53368a72f3&bcevod_channel=searchbox_feed&pd=1&cr=2&cd=0&pt=3&logid=0791905773&vid=13790089500387859718&klogid=0791905773&abtest="></video>
        <scroll-view scroll-y class="content">
            <div class="title">安泰物流厂外来人员安全告知</div>
            <div class="text">
                <div>{{ content }}</div>
            </div>
            <div class="empty"></div>
        </scroll-view>
        <div class="button" @click="toapply">确认了解</div>
    </div>
  <div class="container">
    <!-- <video
      src="https://vdept3.bdstatic.com/mda-nj7gwfue9kdnbtsh/sc/cae_h264/1665488517815949255/mda-nj7gwfue9kdnbtsh.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1715141591-0-0-6dfdf4d4c3d94b60b9adeb53368a72f3&bcevod_channel=searchbox_feed&pd=1&cr=2&cd=0&pt=3&logid=0791905773&vid=13790089500387859718&klogid=0791905773&abtest="
    ></video> -->
    <scroll-view scroll-y class="content">
      <div>
        <div v-html="content"></div>
      </div>
      <div class="empty"></div>
    </scroll-view>
    <div class="button" @click="toapply">确认了解</div>
  </div>
</template>
<script>
    export default {
        name: 'Index',
        data() {
            return {
                content: `
                1确认了解确认了解确认了解确认了解确认了解确认了解
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£ç¡®è®¤äº†è§£
                `,
                answer: ''
            }
        },
        onLoad() {
            // this.getInfo()
        },
        methods: {
            getInfo() {
                // å…¥åœºé¡»çŸ¥è¯¦æƒ…
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'VISIT_NOTICE'
                }).then(res => {
                    if (res.code === 200) {
                        this.content = res.data.code
                    }
                })
                // æ˜¯å¦éœ€è¦ç­”题
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'PROBLEM_VISIT_REQUIRED'
                }).then(res => {
                    if (res.code === 200) {
                        this.answer = res.data.code
                    }
                })
            },
            toapply() {
                if (this.answer === '0') {
                    uni.navigateTo({
                        url: '/pages/userinfo/userinfo'
                    })
                } else {
                    uni.navigateTo({
                        url: '/pages/answer/answer'
                    })
                }
            }
        }
    }
import { getSystemDictData } from "@/api"
export default {
  name: 'Index',
  data() {
    return {
      content: ``,
      answer: ''
    }
  },
  onLoad() {
    this.getInfo()
  },
  methods: {
    getInfo() {
      // å…¥åœºé¡»çŸ¥è¯¦æƒ…
      getSystemDictData({
        dictCode: 'SYSTEM',
        label: 'VISIT_NOTICE'
      }).then(res => {
        if (res.code === 200) {
          this.content = res.data.code
        }
      })
      // æ˜¯å¦éœ€è¦ç­”题
      getSystemDictData({
        dictCode: 'SYSTEM',
        label: 'PROBLEM_VISIT_REQUIRED'
      }).then(res => {
        if (res.code === 200) {
          this.answer = res.data.code
        }
      })
    },
    toapply() {
      if (this.answer === '0') {
        uni.navigateTo({
          url: '/pages/userinfo/userinfo'
        })
      } else {
        uni.navigateTo({
          url: '/pages/answer/answer'
        })
      }
    }
  }
}
</script>
<style lang="scss" scoped>
    .container {
        width: 100%;
        height: 100vh;
        padding: 10rpx 30rpx 0;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        video{
            width: 690rpx;
            height: 388rpx;
            margin-bottom: 10rpx;
        }
        .content {
            height: calc( 100% - 400rpx );
            .title{
                color: #333333;
                font-weight: 500;
                margin-bottom: 16rpx;
            }
            .text{
                font-weight: 350;
            }
            .empty{
                height: 160rpx;
            }
        }
        .button {
            width: 690rpx;
            height: 88rpx;
            line-height: 88rpx;
            text-align: center;
            background: #4d99a8;
            border-radius: 44rpx;
            font-size: 32rpx;
            color: #FFFFFF;
            position: absolute;
            bottom: 42rpx;
            left: 30rpx;
        }
    }
.container {
  width: 100%;
  height: 100vh;
  padding: 10rpx 30rpx 0;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  video {
    width: 690rpx;
    height: 388rpx;
    margin-bottom: 10rpx;
  }
  .content {
    height: calc(100% - 170rpx);
    .title {
      color: #333333;
      font-weight: 500;
      margin-bottom: 16rpx;
    }
    .text {
      font-weight: 350;
    }
    .empty {
      height: 160rpx;
    }
  }
  .button {
    width: 690rpx;
    height: 88rpx;
    line-height: 88rpx;
    text-align: center;
    background: #4d99a8;
    border-radius: 44rpx;
    font-size: 32rpx;
    color: #ffffff;
    position: absolute;
    bottom: 42rpx;
    left: 30rpx;
  }
}
</style>
h5/pages/staff/vehicle/shiwai.vue
@@ -75,13 +75,7 @@
            @confirm="seletedDate"
            @cancel="isShowDate = false"
        />
        <uni-datetime-picker
                        v-model="datetimerange"
                        type="datetimerange"
                        start="2021-3-20 12:00:00"
                        end="2021-6-20 20:00:00"
                        rangeSeparator="至"
                    />
    </view>
</template>
h5/pages/userinfo/userinfo.vue
@@ -10,7 +10,7 @@
            <view class="cell">
                <view class="title"><b>*</b>手机号</view>
                <view class="content">
                    <input class="input" maxlength="11" placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="请输入您的手机号" />
                    <input type="number" class="input" maxlength="11" placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="请输入您的手机号" />
                </view>
            </view>
            <view class="cell">
@@ -75,6 +75,7 @@
    import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
    import { mapState } from 'vuex'
    import { uploadUrl } from "@/utils/config"
    import { getSystemDictData, visitorSub } from '@/api'
    export default {
        data() {
            return {
@@ -130,7 +131,7 @@
                }
            }
            this.visitorData.userAnswerId = option.userAnswerId
            this.getVisit()
            // this.getVisit()
            // uni.$on('update', (data) => {
            //     this.uploadImg(data.tempFilePath)
            // })
@@ -138,9 +139,7 @@
        methods: {
            submit() {
                uni.navigateTo({
                    url: `/pages/visitorApplication/visitorApplication?data=${JSON.stringify(this.visitorData)}`
                });
                const { visitorData } = this
                if (!this.visitorData.name) return uni.showToast({
                    title: '姓名不能为空',
                    icon: 'none'
@@ -177,19 +176,19 @@
                    title: '人脸照片不能为空',
                    icon: 'none'
                })
                if (this.visit === '1') {
                    if (!this.visitorData.imgurl) return uni.showToast({
                        title: '健康证不能为空',
                        icon: 'none'
                    })
                }
                // if (this.visit === '1') {
                //     if (!this.visitorData.imgurl) return uni.showToast({
                //         title: '健康证不能为空',
                //         icon: 'none'
                //     })
                // }
                uni.navigateTo({
                    url: `/pages/visitorApplication/visitorApplication?data=${JSON.stringify(this.visitorData)}`
                });
            },
            getVisit() {
                // æ˜¯å¦éœ€è¦ç­”题
                this.$u.api.getSystemDictData({
                // æ˜¯å¦éœ€è¦ å¥åº·è¯
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'HEALTH_CARD'
                }).then(res => {
h5/pages/visitorApplication/visitorApplication.vue
@@ -26,7 +26,7 @@
                    <text>*</text>
                </view>
                <view class="list_item_content" @click="showName = true">
                    <text :style="{color: form1.name ? '#000000' : ''}">{{form1.name ? form1.name : '请选择'}}</text>
                    <text :style="{color: form1.receptMemberName ? '#000000' : ''}">{{form1.receptMemberName ? form1.receptMemberName : '请选择'}}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
@@ -50,25 +50,25 @@
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item" v-if="accessControl === '1'" @click="show = true">
            <!-- <view class="list_item" v-if="accessControl === '1'" @click="show = true">
                <view class="list_item_label">
                    <text>访问门禁</text>
                    <text>*</text>
                </view>
                 <!-- @click="show6 = true" -->
                <view class="list_item_content">
                    <text :style="{color: form1.doorSelectName ? '#000000' : ''}">{{form1.doorSelectName ? form1.doorSelectName : '请选择'}}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            </view> -->
            <div class="empty"></div>
            <view class="list_item">
                <view class="list_item_label">
                    <text>拜访事由</text>
                    <text>*</text>
                </view>
                <view class="list_item_content">
                    <input type="text" v-model="form1.reason" placeholder="请输入来访事由" placeholder-style="color: #999999;" />
                <view class="list_item_content" @click="showReason = true">
                    <text :style="{color: form1.reason ? '#000000' : ''}">{{form1.reason ? form1.reason : '请选择拜访事由'}}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item">
@@ -80,13 +80,13 @@
                    <switch color="#4e99a9" style="transform:scale(0.8)" @change="constructionChange" />
                </view>
            </view>
            <view class="list_item">
            <view v-if="form1.type == '1'" class="list_item">
                <view class="list_item_label">
                    <text>施工内容</text>
                    <text>*</text>
                </view>
                <view class="list_item_content">
                    <input type="text" v-model="form1.ss" placeholder="请输入施工内容" placeholder-style="color: #999999;" />
                    <input type="text" v-model="form1.constructionReason" placeholder="请输入施工内容" placeholder-style="color: #999999;" />
                </view>
            </view>
            <view class="list_item">
@@ -100,29 +100,9 @@
                </view>
            </view>
        </view>
        <!-- <view class="cate">
            <view class="cate_head">车辆信息</view>
            <view class="cate_list">
                <view class="cate_list_item" v-for="(item, index) in cars" :key="index">
                    <text>{{item}}</text>
                    <u-icon name="close" color="#999999" size="20" @click="deleCars(index)"></u-icon>
                </view>
            </view>
            <view class="cate_add" @click="show2 = true">+添加车辆</view>
        </view> -->
        <view class="cate">
            <view class="cate_head">随访人员信息</view>
            <view class="cate_list">
                <view class="cate_list_item" v-for="(item,index) in personnel" :key="index">
                    <text>{{item.name}}</text>
                    <u-icon name="close" color="#999999" size="20" @click="deleUser(index)"></u-icon>
                </view>
            </view>
            <view class="cate_add" @click="show3 = true">+添加随访人员</view>
        </view>
        <view class="zw"></view>
        <view class="footer">
            <view class="footer_btn" @click="submit">提交</view>
            <view class="footer_btn" @click="onSubmit">提交</view>
        </view>
        <!-- å…¥åœºæ—¶é—´ -->
        <u-datetime-picker
@@ -130,7 +110,7 @@
            :minDate="new Date().getTime()"
            mode="datetime"
            @cancel="show4 = false"
            @confirm="setinDate"
            @confirm="setstarttime"
        ></u-datetime-picker>
        <!-- ç¦»åœºæ—¶é—´ -->
        <u-datetime-picker
@@ -139,7 +119,7 @@
            :minDate="formatTimeStamp(form1.starttime)"
            mode="datetime"
            @cancel="show5 = false"
            @confirm="setoutDate"
            @confirm="setendtime"
        ></u-datetime-picker>
        <!-- é—¨ç¦ -->
        <u-popup :show="show" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="closeMJ">
@@ -311,7 +291,8 @@
            </view>
        </u-popup>
        <u-picker keyName="name" :show="show6" :columns="columns1" @confirm="seleIdcard" @cancel="show6 = false"></u-picker>
        <u-picker keyName="name" :show="showName" :columns="columnsNames" @confirm="selectedName" @cancel="showName = false"></u-picker>
        <u-picker keyName="name" :show="showName" :columns="VisitPoeple" @confirm="selectedName" @cancel="showName = false"></u-picker>
        <u-picker keyName="title" :show="showReason" :columns="VisitReason" @confirm="selectedReason" @cancel="showReason = false"></u-picker>
        <!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
        <keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
        <qf-image-cropper ref="cropper" :width="280" :height="280" :radius="30" @crop="uploadImg"></qf-image-cropper>
@@ -323,6 +304,12 @@
    import keyboardInput from "@/components/keyboard-input/keyboard-input.vue";
    import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
    import { getDaysAfterDate } from '@/utils/utils.js'
    import {
        getVisitedMember,
        getSystemDictData,
        getVisitedVisitReason,
        createFk
 } from '@/api'
    export default {
        data() {
            return {
@@ -338,13 +325,13 @@
                show5: false,
                show6: false,
                show7: false,
                showReason: false,
                fileList: [],
                columns1: [
                    [{name: '身份证', id: 0}, {name: '港澳证件', id: 1},{name: '护照', id: 2}],
                ],
                columnsNames: [
                    [{name: '张三', id: 0},{name: '张三', id: 1},{name: '张三', id: 2},]
                ],
                VisitReason: [],
                VisitPoeple: [],
                columns: [],
                cars: [],
                day: null,
@@ -361,7 +348,8 @@
                    doors: '',
                    doorSelectName: '',
                    reason: '',
                    carNos: ''
                    carNos: '',
                    type: 0
                },
                withUserList: {
                    name: '',
@@ -386,9 +374,11 @@
            if (options.data) {
                this.form = JSON.parse(options.data)
            }
            console.log('this.form', this.form);
            // this.getvisit()
            // this.getVisit1()
            // this.getUserValid()
            this.getUser()
        },
        methods: {
            openInput(type) {
@@ -409,6 +399,8 @@
            },
            constructionChange(e) {
                console.log(e.detail.value);
                this.form1.type = Number(e.detail.value)
                console.log(this.form1.type);
            },
            uploadImg(file) {
                this.$refs.cropper.close()
@@ -436,7 +428,7 @@
                    item.active = false
                })
            },
            submit() {
            onSubmit() {
                if (!this.form1.receptMemberId) return uni.showToast({
                    title: '请填写有效的访问人',
                    icon: 'none'
@@ -462,7 +454,7 @@
                let data = JSON.parse(JSON.stringify(this.form1))
                data.starttime = data.starttime + ':00'
                data.endtime = data.endtime + ':00'
                this.$u.api.createFk({
                createFk({
                    ...this.form,
                    ...data,
                    openid: this.$store.state.openId,
@@ -489,7 +481,7 @@
                    }
                })
                // èµ·å§‹æ—¶é—´æ—¶é•¿
                this.$u.api.getSystemDictData({
                getSystemDictData({
                    dictCode: 'VISIT_CONFIG',
                    label: 'VALIDATE_VISIT'
                }).then(res => {
@@ -599,9 +591,15 @@
                this.show6 = false
            },
            selectedName(e) {
                this.form1.name = e.value[0].name
                this.form1.id = e.value[0].id
                this.form1.receptMemberName = e.value[0].name
                this.form1.receptMemberId = e.value[0].id
                this.form1.receptMemberDepartment = e.value[0].companyId
                this.showName = false
            },
            selectedReason(e) {
                this.form1.reason = e.value[0].title
                console.log(e.value[0].title);
                this.showReason = false
            },
            submitCart() {
                if (!this.carName) return uni.showToast({
@@ -648,14 +646,14 @@
                })
                this.show5 = true
            },
            setinDate(e) {
            setstarttime(e) {
                this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
                // this.maxTime = getDaysAfterDate(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM'), this.day)
                this.maxTime = this.form1.starttime
                console.log(this.form1.starttime);
                this.show4 = false
            },
            setoutDate(e) {
            setendtime(e) {
                this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
                this.show5 = false
            },
@@ -664,34 +662,16 @@
            },
            // æŸ¥è¯¢ç”¨æˆ·
            getUser() {
                if (this.verify === '0') {
                    if (this.form1.phone1) {
                        this.$u.api.getVisitedMember({
                            mobile: this.form1.phone1
                        }).then(res => {
                            if (res.code === 200) {
                                this.form1.receptMemberId = res.data.id
                                this.form1.receptMemberName = res.data.name
                            }
                        })
                    }
                } else {
                    if (this.form1.phone1 && this.form1.receptMemberName) {
                        this.$u.api.getVisitedMember({
                            mobile: this.form1.phone1,
                            name: this.form1.receptMemberName
                        }).then(res => {
                            if (res.code === 200) {
                                this.form1.receptMemberId = res.data.id
                                this.form1.receptMemberName = res.data.name
                            }
                        })
                    }
                }
                getVisitedMember().then(res => {
                    this.VisitPoeple = [res.data || []]
                })
                getVisitedVisitReason({}).then(res => {
                    this.VisitReason = [res.data || []]
                })
            },
            // è¢«æ‹œè®¿äººä¿¡æ¯æ ¡éªŒæ–¹å¼ï¼ˆ0手机号单独校验 1手机号和姓名组合校验)
            getUserValid() {
                this.$u.api.getSystemDictData({
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'BEVISITED_USER_VALID'
                }).then(res => {
@@ -702,7 +682,7 @@
            },
            // èŽ·å–æ˜¯å¦éœ€è¦é€‰æ‹©é—¨ç¦/门禁列表
            getvisit() {
                this.$u.api.getSystemDictData({
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'SELECT_DOORS_VISIT_REQUIRED'
                }).then(res => {
server/system_gateway/src/main/resources/bootstrap.yml
@@ -14,7 +14,7 @@
      password: nacos
      discovery:
        server-addr: http://175.27.187.84:8848 #配置Nacos地址
        namespace: dmvisit
        namespace: dev_renkang
        username: nacos
        password: nacos
    gateway:
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerLogCloudController.java
@@ -16,6 +16,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @since 2024/04/28 16:06
@@ -67,6 +69,13 @@
        return ApiResponse.success(hiddenDangerLogService.findPage(pageWrap));
    }
    @ApiOperation("列表查询")
    @PostMapping("/findList")
    @CloudRequiredPermission("business:hiddendangerlog:query")
    public ApiResponse<List<HiddenDangerLog>> findList (@RequestBody HiddenDangerLog hiddenDangerLog,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(hiddenDangerLogService.findList(hiddenDangerLog));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:hiddendangerlog:exportExcel")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
@@ -8,12 +8,15 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.VisitReason;
import com.doumee.dao.business.model.Visits;
import com.doumee.dao.web.reqeust.CheckVisitedDTO;
import com.doumee.dao.web.response.MemberVO;
import com.doumee.dao.web.response.VisitDetailVO;
import com.doumee.dao.web.response.VisitRecordVO;
import com.doumee.dao.web.response.WxAuthorizeVO;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.VisitReasonService;
import com.doumee.service.business.VisitsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -25,6 +28,7 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
@@ -47,6 +51,8 @@
    @Autowired
    private VisitsService visitsService;
    @Autowired
    private VisitReasonService visitReasonService;
    @ApiOperation(value = "访客微信授权", notes = "访客微信授权获取openId")
    @GetMapping("/wxAuthorize")
@@ -61,7 +67,7 @@
    @ApiOperation(value = "查询被访问人信息", notes = "查询被访问人信息")
    @PostMapping("/getVisitedMember")
    public ApiResponse<MemberVO> getVisitedMember(@Valid @RequestBody CheckVisitedDTO checkVisitedDTO) {
    public ApiResponse<List<MemberVO>> getVisitedMember(@Valid @RequestBody CheckVisitedDTO checkVisitedDTO) {
        return ApiResponse.success("查询成功", memberService.getVisitedMember(checkVisitedDTO));
    }
@@ -74,10 +80,18 @@
    }
    @ApiOperation(value = "来访事由", notes = "来访事由")
    @PostMapping("/visitReason")
    public ApiResponse<List<VisitReason>> visitReason() {
        return ApiResponse.success("查询成功", visitReasonService.findList(null));
    }
    @ApiOperation(value = "访客记录详情", notes = "访客记录详情")
    @GetMapping("/detail")
    public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success("查询成功", visitsService.getVisitDetail(id,getLoginUser(token).getMemberId()));
    public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id) {
        return ApiResponse.success("查询成功", visitsService.getVisitDetail(id,null));
    }
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -31,7 +31,7 @@
#        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://175.27.187.84:8848 #配置Nacos地址
        namespace: dmvisit
        namespace: dev_renkang
        username: nacos
        password: nacos
# swagger配置
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/HiddenDangerLogJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.doumee.dao.business.join;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.HiddenDangerLog;
import com.github.yulichang.base.mapper.MPJJoinMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @since 2024/04/28 16:06
 */
public interface HiddenDangerLogJoinMapper extends MPJJoinMapper<HiddenDangerLog> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
@@ -52,8 +52,8 @@
    @ExcelColumn(name="备注")
    private String remark;
    @ApiModelProperty(value = "名称 0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约", example = "1")
    @ExcelColumn(name="名称 0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约")
    @ApiModelProperty(value = "名称 0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约", example = "1")
    @ExcelColumn(name="名称 0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约")
    private Integer type;
    @ApiModelProperty(value = "名称")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerLog.java
@@ -78,4 +78,12 @@
    @ExcelColumn(name="操作后内容")
    private String afterContent;
    @ApiModelProperty(value = "操作人")
    private String createUserName;
    @ApiModelProperty(value = "操作人头像")
    private String avatar;
    @ApiModelProperty(value = "操作组织信息")
    private String companyName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -230,6 +230,10 @@
    @ApiModelProperty(value = "来源类型:0=本系统;1=ERP", example = "1")
    private Integer sourceType;
    @ApiModelProperty(value = "施工事由")
    @ExcelColumn(name="施工事由")
    private String constructionReason;
    @ApiModelProperty(value = "普通访客申请随访人员")
    @TableField(exist = false)
    private List<Visits> withUserList;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CheckVisitedDTO.java
@@ -15,7 +15,6 @@
@Data
public class CheckVisitedDTO {
    @NotBlank(message = "手机号未录入")
    @ApiModelProperty(value = "手机号")
    private String mobile;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -177,7 +177,7 @@
    MemberVO getVisitedMember(CheckVisitedDTO checkVisitedDTO);
    List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO);
    /**
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -227,7 +227,7 @@
    /**
     * åˆ›å»ºå®¡æ‰¹æµç¨‹
     * @param tempType æ¨¡æ¿ç±»åž‹  0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约
     * @param tempType æ¨¡æ¿ç±»åž‹  0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约
     * @param businessId ä¸šåС䏻键 æ ¹æ® tempType
     * @param createMemberId æäº¤æµç¨‹äººå‘˜
     */
@@ -241,7 +241,7 @@
                .last(" limit 1 ")
        );
        if(Objects.isNull(approveTempl)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到配置模板");
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到审批流配置模板");
        }
        //查询配置流程
        List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>()
@@ -305,6 +305,7 @@
                approve.setIsEndCheck((i+1) == approveParamList.size()?Constants.ONE:Constants.ZERO);
                approve.setObjId(businessId);
                approve.setLevel(i+1);
                approve.setObjType(approveTempl.getType());
                approve.setApproveType(approveParam.getApproveType());
                approve.setDriverParam(approveParam.getDriverParam());
                approve.setAddrParam(approveParam.getAddrParam());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java
@@ -2,19 +2,28 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.HiddenDangerLogMapper;
import com.doumee.dao.business.join.HiddenDangerLogJoinMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.HiddenDanger;
import com.doumee.dao.business.model.HiddenDangerLog;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.HiddenDangerLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Objects;
/**
 * ç†è³ æ“ä½œåŽ†å²è¡¨Service实现
@@ -26,6 +35,9 @@
    @Autowired
    private HiddenDangerLogMapper hiddenDangerLogMapper;
    @Autowired
    private HiddenDangerLogJoinMapper hiddenDangerLogJoinMapper;
    @Override
    public Integer create(HiddenDangerLog hiddenDangerLog) {
@@ -80,8 +92,20 @@
    @Override
    public List<HiddenDangerLog> findList(HiddenDangerLog hiddenDangerLog) {
        QueryWrapper<HiddenDangerLog> wrapper = new QueryWrapper<>(hiddenDangerLog);
        return hiddenDangerLogMapper.selectList(wrapper);
        List<HiddenDangerLog> hiddenDangerLogList = hiddenDangerLogJoinMapper.selectJoinList(HiddenDangerLog.class,
                new MPJLambdaWrapper<HiddenDangerLog>()
                        .selectAll(HiddenDangerLog.class)
                        .selectAs(SystemUser::getRealname,HiddenDangerLog::getCreateUserName)
                        .selectAs(SystemUser::getAvatar,HiddenDangerLog::getAvatar)
                        .selectAs(Company::getName,HiddenDangerLog::getCompanyName)
                        .leftJoin(SystemUser.class,SystemUser::getId,HiddenDangerLog::getCreator)
                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                        .eq(Objects.nonNull(hiddenDangerLog.getHiddenDangerId()),HiddenDangerLog::getHiddenDangerId,hiddenDangerLog.getHiddenDangerId())
                        .eq(Objects.isNull(hiddenDangerLog.getHiddenDangerId()),"1",2)
                        .eq(HiddenDangerLog::getIsdeleted, Constants.ZERO)
                        .orderByAsc(HiddenDangerLog::getCreateDate)
        );
        return hiddenDangerLogList;
    }
  
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -162,6 +162,9 @@
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        initFiles(model);
        return model;
    }
    private void initFiles(HiddenDanger unionChange) {
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1624,30 +1624,24 @@
    @Override
    public MemberVO getVisitedMember(CheckVisitedDTO checkVisitedDTO){
        Integer validType = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.BEVISITED_USER_VALID).getCode());
        if(Objects.isNull(checkVisitedDTO)||StringUtils.isBlank(checkVisitedDTO.getMobile())||(validType.equals(Constants.ONE)&&StringUtils.isBlank(checkVisitedDTO.getName()))){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                .eq(Member::getPhone,checkVisitedDTO.getMobile())
                .eq(validType.equals(Constants.ONE),Member::getName,checkVisitedDTO.getName())
    public List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO){
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(StringUtils.isNotBlank(checkVisitedDTO.getMobile()),Member::getPhone,checkVisitedDTO.getMobile())
                .eq(StringUtils.isNotBlank(checkVisitedDTO.getName()),Member::getName,checkVisitedDTO.getName())
                .eq(Member::getIsdeleted,Constants.ZERO)
//                .eq(Member::getStatus,Constants.ZERO)
                .eq(Member::getStatus,Constants.ZERO)
                .eq(Member::getCanVisit,Constants.ONE)
                .eq(Member::getType,Constants.memberType.internal)
                .last(" limit 1 ")
                .eq(Member::getType,Constants.memberType.internal)
        );
        MemberVO memberVO = new MemberVO();
        if(!Objects.isNull(member)){
            if(!member.getStatus().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"被访人账号异常,请确认后再试");
        List<MemberVO> memberVOList = new ArrayList<>();
        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)) {
            for (Member member:memberList) {
                MemberVO memberVO = new MemberVO();
                BeanUtils.copyProperties(member,memberVO);
                memberVOList.add(memberVO);
            }
            BeanUtils.copyProperties(member,memberVO);
        }else{
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"请核实被访人信息!");
        }
        return memberVO;
        return memberVOList;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
@@ -98,6 +98,7 @@
    @Override
    public List<VisitReason> findList(VisitReason visitReason) {
        QueryWrapper<VisitReason> wrapper = new QueryWrapper<>(visitReason);
        wrapper.eq("isdeleted",Constants.ZERO);
        return visitReasonMapper.selectList(wrapper);
    }
  
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -202,7 +202,7 @@
        //检查是否必须答题,并且符合答题要求
        ProblemLog problemLog = isValidProblemLog(visits);
        //获取申请的海康访问门禁组信息
        getHkDeviceRoles(visits,isERP);
//        getHkDeviceRoles(visits,isERP);
        //检验拜访人是否合法
        Member visitMember = isValideVisitedUser(visits.getReceptMemberId());
        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&visits.getIdcardNo().length()!=18
@@ -616,13 +616,15 @@
        }
        //访客报备
        if(visits.getType().equals(Constants.TWO)
         && (StringUtils.isBlank( visits.getName())
            && (StringUtils.isBlank( visits.getName())
                ||  StringUtils.isBlank( visits.getPhone())
                ||  StringUtils.isBlank( visits.getCompanyName()))
                ||  StringUtils.isBlank( visits.getCarNos())
                ||  Objects.isNull( visits.getMemberNum())
        ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,信息填写不正确!");
        }else if(visits.getType().equals(Constants.ONE) && StringUtils.isBlank(visits.getConstructionReason())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未填写施工事由!");
        }
        if(visits.getEndtime().getTime() < System.currentTimeMillis()){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,入厂时间必须大于当前时间!");//