jiangping
2025-03-17 a6d047e106c00a32603ed9c037a1e27b7f75ee6b
Merge remote-tracking branch 'origin/master'
已添加3个文件
已修改17个文件
7090 ■■■■■ 文件已修改
admin/src/components/common/QueryForm/queryForm.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/dangerStatic.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/bookings.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/queueUp.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/App.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorApplication/visitorApplication.vue 3121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/wdata/detail.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/package-lock.json 3661 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/task/ic_close@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/task/ic_yuetai@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/task/jiankong_bg2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ProblemLog.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProblemLogVo.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/QueryForm/queryForm.vue
@@ -35,11 +35,11 @@
          <el-date-picker v-model="searchForm[item.filed1]" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
            class="w200"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.label" @change="changeForm(item.filed)" />
            placeholder="开始时间" @change="changeForm(item.filed)" />
          <el-date-picker v-model="searchForm[item.filed2]" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
            class="w200"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.label" @change="changeForm(item.filed)" />
            placeholder="结束时间" @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange"
admin/src/views/business/dangerStatic.vue
@@ -112,6 +112,13 @@
      })
      let colors = ['#d75a44', '#e39f4d', '#f0d05f', '#7ac7f6', '#4469ee', '#698af0','#86a2f1','#a1b4f6','#a0b5f5', '#9fb5f4', '#b6c7f7', '#c8d5f8']
      let option = {
        grid: {
          left: '0%',
          // right: '4%',
          // bottom: '3%',
          top: '0%',
          containLabel: true
        },
        title: [
          {
            text: '隐患总数',
admin/src/views/meeting/bookings.vue
@@ -76,17 +76,21 @@
            <span class="long-title-style">{{ row.name }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="roomName" label="会议室" align="center" min-width="120px" show-overflow-tooltip>
        <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="160px"></el-table-column>
        <!-- <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="120px"></el-table-column> -->
        <!-- <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="120px"></el-table-column> -->
        <!-- <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="120px"></el-table-column> -->
        <!-- <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="400px"></el-table-column> -->
        <el-table-column prop="managerInfo" label="预约人" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="操作时间" align="center" min-width="150px"></el-table-column>
        <el-table-column prop="roomName" label="会议室名称" align="center" min-width="120px" show-overflow-tooltip>
          <template slot-scope="{ row }">
            <span class="long-title-style">{{ row.roomName }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="120px"></el-table-column>
        <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="120px"></el-table-column>
        <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="120px"></el-table-column>
        <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="400px"></el-table-column>
        <el-table-column prop="meetingTime" label="会议时间" align="center" min-width="300px"></el-table-column>
        <el-table-column prop="managerInfo" label="预约人" align="center" min-width="100px"></el-table-column>
        <el-table-column label="会议状态" align="center" min-width="60px">
          <template slot-scope="{ row }">
            <span v-if="row.meetingStatus == 1">未开始</span>
@@ -97,7 +101,6 @@
            <!-- {{ row.status==0 ? '正常' : '取消' }} -->
          </template>
        </el-table-column>
        <el-table-column prop="createDate" label="创建时间" align="center" min-width="150px"></el-table-column>
        <!-- <el-table-column prop="content" label="会议内容" min-width="100px"></el-table-column> -->
        <el-table-column v-if="
          containPermissions([
admin/src/views/platform/index.vue
@@ -1,5 +1,5 @@
<template>
  <div class="main_app" style="overflow: auto;height: calc(100% - 100px);">
  <div class="main_app" style="overflow-y: auto;height: calc(100% - 100px);">
    <div class="mb20 main_header">
      <div class="platgroup_tabs">
        <div class="tab" :class="{ active: activeGroup.id === item.id }" @click="platgroupClick(item)"
admin/src/views/platform/queueUp.vue
@@ -1,7 +1,7 @@
<template>
  <div class="main_app">
    <div class="mb20 main_header">
      <div class="platgroup_tabs">
    <div class="main_header">
      <div class="platgroup_tabs pt20">
        <div class="tab" :class="{ active: activeGroup.id === item.id }" @click="platgroupClick(item)"
          v-for="(item, i) in PlatGroupList" :key="i">
          {{ item.name }}
@@ -11,9 +11,11 @@
    <div class="df_sb">
      <QueryForm v-model="filters" :query-form-config="queryQueueUpConfig" @handleQuery="getList(1)" @clear="clear">
      </QueryForm>
      <el-button @click="openSign" type="primary" style="align-self: flex-start;">车辆签到</el-button>
      <div>
        <el-button @click="openSign" type="primary" style="align-self: flex-start;">车辆签到</el-button>
      </div>
    </div>
    <div class="main_content">
    <div class="common-header">
      <div class="static_wrap">
        <span>等待:<span class="num">{{ staticParam.waitNum }}</span></span>
        <span class="mr30">{{ }}</span>
@@ -255,14 +257,24 @@
<style lang="scss" scoped>
@import "@/assets/style/variables.scss";
.main_content {
  background-color: #fff;
  position: relative;
  z-index: 999;
  top: -10;
  margin: -20px;
.main_app {
  padding: 0 20px;
  .doumee-filter {
    padding-top: 20px;
    border: 0;
  }
}
.common-header {
  background-color: #fff;
  /* position: relative; */
  /* z-index: 999; */
  /* top: -10; */
  /* margin: -20px; */
  padding: 0 20px;
  /* border: 1px solid red; */
  .static_wrap {
    height: 50px;
    line-height: 50px;
@@ -271,7 +283,7 @@
    padding: 0 20px;
    background: #F4FAFB;
    border-radius: 2px 2px 0px 0px;
    margin-bottom: 36px;
    /* margin-bottom: 36px; */
    .num {
      color: #111111;
h5/App.vue
@@ -15,6 +15,7 @@
                window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
            }
    })
        uni.setStorageSync('transportList', [])
        console.log('onLaunch')
  },
  onShow: function () {
h5/pages/visitorApplication/visitorApplication.vue
@@ -1,72 +1,72 @@
<template>
    <view class="visit">
        <!-- <view class="head">拜访信息</view> -->
        <view class="list">
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>被访人</text>
                </view>
                <view class="list_item_content" @click="selName">
                    <text :style="{ color: form1.receptMemberName ? '#000000' : '' }">{{
            form1.receptMemberName ? form1.receptMemberName : "请选择"
          }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>入园时间</text>
                </view>
                <view class="list_item_content" @click="show4 = true">
                    <text :style="{ color: form1.starttime ? '#000000' : '' }">{{
            form1.starttime ? form1.starttime : "请选择"
          }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>离园时间</text>
                </view>
                <view class="list_item_content" @click="openLC">
                    <text :style="{ color: form1.endtime ? '#000000' : '' }">{{
            form1.endtime ? form1.endtime : "请选择"
          }}</text>
                    <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_label">
                    <text>访问门禁</text>
                    <text>*</text>
                </view>
                <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> -->
            <div class="empty"></div>
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>拜访事由</text>
                </view>
                <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">
                <view class="list_item_label">
                    <text></text>
                    <text>是否施工作业</text>
                </view>
                <view class="list_item_content">
<template>
    <view class="visit">
        <!-- <view class="head">拜访信息</view> -->
        <view class="list">
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>被访人</text>
                </view>
                <view class="list_item_content" @click="selName">
                    <text :style="{ color: form1.receptMemberName ? '#000000' : '' }">{{
            form1.receptMemberName ? form1.receptMemberName : "请选择"
          }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>入园时间</text>
                </view>
                <view class="list_item_content" @click="show4 = true">
                    <text :style="{ color: form1.starttime ? '#000000' : '' }">{{
            form1.starttime ? form1.starttime : "请选择"
          }}</text>
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>离园时间</text>
                </view>
                <view class="list_item_content" @click="openLC">
                    <text :style="{ color: form1.endtime ? '#000000' : '' }">{{
            form1.endtime ? form1.endtime : "请选择"
          }}</text>
                    <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_label">
                    <text>访问门禁</text>
                    <text>*</text>
                </view>
                <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> -->
            <div class="empty"></div>
            <view class="list_item">
                <view class="list_item_label">
                    <text>*</text>
                    <text>拜访事由</text>
                </view>
                <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">
                <view class="list_item_label">
                    <text></text>
                    <text>是否施工作业</text>
                </view>
                <view class="list_item_content">
                    <!-- <switch color="#4e99a9" style="transform: scale(0.8)" @change="constructionChange" /> -->
<!--                     <u-radio-group v-model="form1.type">
                        <u-radio label="是" :name="1" activeColor="#4d99a8" class="mr24" />
@@ -84,1238 +84,1583 @@
                            <image v-else src="@/static/checkbox_disable@3x.png" mode=""></image>
                        </view>
                        
                    </view>
                </view>
            </view>
            <view v-if="form1.type == '1'" class="list_item">
                <view class="list_item_label">
                    <text></text>
                    <text>施工内容</text>
                    <!-- <text>*</text> -->
                </view>
                <view class="list_item_content">
                    <input type="text" v-model="form1.constructionReason" placeholder="请输入施工内容"
                        placeholder-style="color: #999999;" />
                </view>
            </view>
            <view class="list_item">
                <view class="list_item_label">
                    <text></text>
                    <text>随行车辆</text>
                </view>
                <view class="list_item_content" @click="openInput(1)">
                    <text :style="{ color: form1.carNos ? '#000000' : '' }">{{
            form1.carNos ? form1.carNos : "请输入车牌号码"
          }}</text>
                    <!-- <input type="text" placeholder="请输入车牌号" v-model="form1.carNos" maxlength="8" placeholder-style="color: #999999;" /> -->
                </view>
            </view>
        </view>
        <view class="footer">
            <view class="footer_btn" @click="onSubmit">提交</view>
        </view>
        <!-- å…¥å›­æ—¶é—´ -->
        <u-datetime-picker :show="show4" :minDate="new Date().getTime()" mode="datetime" :formatter="formatter"
            @cancel="show4 = false" @confirm="setstarttime"></u-datetime-picker>
        <!-- ç¦»å›­æ—¶é—´ -->
        <u-datetime-picker v-if="form1.starttime" :show="show5" :formatter="formatter"
            :minDate="formatTimeStamp(form1.starttime)" :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')"
            mode="datetime" @cancel="show5 = false" @confirm="setendtime"></u-datetime-picker>
        <!-- é—¨ç¦ -->
        <u-popup :show="show" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="closeMJ">
            <view class="menjin">
                <view class="respondent-title"> é€‰æ‹©é—¨ç¦ </view>
                <scroll-view scroll-y class="list">
                    <view class="list_item" v-for="(item, index) in columns" :key="index" @click="seleMJ(index)">
                        <text>{{ item.name }}</text>
                        <image src="@/static/checkbox@2x.png" mode="widthFix" v-show="!item.active"></image>
                        <image src="@/static/checkbo1x_sel@2x.png" mode="widthFix" v-show="item.active"></image>
                    </view>
                </scroll-view>
                <view class="menjin_footer">
                    <view class="menjin_footer_item" @click="closeMJ">取消</view>
                    <view class="menjin_footer_item" @click="submitMJ">确认</view>
                </view>
            </view>
        </u-popup>
        <!-- é€‰æ‹©éšè¡Œäººå‘˜ -->
        <u-popup :show="show1" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom"
            @close="show1 = false">
            <view class="popup-content">
                <view class="respondent-title"> é€‰æ‹©éšè¡Œäººå‘˜ </view>
                <view class="search-box">
                    <view class="search-box-top">
                        <view class="search-box-top-ipt">
                            <image src="@/static/ic_search@2x.png" mode="widthFix"></image>
                            <input type="text" placeholder="搜索姓名/手机号" />
                        </view>
                        <text @click="
                show1 = false;
                show3 = true;
              ">新增</text>
                    </view>
                    <view class="search-box-total">共0条数据</view>
                </view>
                <scroll-view scroll-y class="list">
                    <view class="item" v-for="(item, index) in 8" :key="index">
                        <view class="item_a">
                            <!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
                            <image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
                        </view>
                        <view class="item_b">
                            <image src="@/static/ic_mima@2x.png" mode="widthFix" />
                        </view>
                        <view class="item_c">
                            <text>用户名</text>
                            <text>已拉黑</text>
                        </view>
                    </view>
                </scroll-view>
                <view class="footer1">
                    <view class="footer_left">
                        <text class="footer_left_a">已选择:0人</text>
                        <text class="footer_left_b">李伟;</text>
                    </view>
                    <view class="footer_btn">确认 0/0</view>
                </view>
            </view>
        </u-popup>
        <!-- è½¦è¾† -->
        <u-popup :show="show2" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom"
            @close="show2 = false">
            <view class="addcar">
                <view class="addcar_head">添加车辆</view>
                <view class="addcar_ipt">
                    <input type="text" v-model="carName" placeholder="请输入车牌号" />
                </view>
                <view class="addcar_footer">
                    <view class="addcar_footer_item" @click="show2 = false">取消</view>
                    <view class="addcar_footer_item t" @click="submitCart">提交</view>
                </view>
            </view>
        </u-popup>
        <!-- æ·»åŠ éšè¡Œäººå‘˜ -->
        <u-popup :show="show3" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom"
            @close="show3 = false">
            <view class="adduser">
                <view class="adduser_head">随行人员</view>
                <view class="adduser_list">
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>姓名</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="text" v-model="withUserList.name" placeholder-style="color: #999999;font-size: 28rpx;"
                                placeholder="请输入真实姓名" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>手机号</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="number" v-model="withUserList.phone" maxlength="11"
                                placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入手机号" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>证件类型</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt" @click="show6 = true">
                            <text :style="{ color: withUserList.idcardTypeName ? '#000000' : '' }">{{
                  withUserList.idcardTypeName
                    ? withUserList.idcardTypeName
                    : "请选择"
                }}</text>
                            <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>证件号码</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="text" v-model="withUserList.idcardNo" maxlength="18"
                                placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入证件号码" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>*</text>
                            <text>公司</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="text" v-model="withUserList.companyName" placeholder-style="color: #999999;font-size: 28rpx;"
                                placeholder="请输入公司名称" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text></text>
                            <text>随行车辆</text>
                        </view>
                        <view class="adduser_list_item_ipt" @click="openInput(2)">
                            <text :style="{ color: withUserList.carNos ? '#000000' : '' }">{{
                withUserList.carNos ? withUserList.carNos : "请输入车牌号码"
              }}</text>
                            <!-- <input type="text" v-model="withUserList.carNos" disabled placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入车牌号" /> -->
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label1">
                            <text class="cc">人脸照片<b>*</b></text>
                            <text class="aa">1、请提供五官清晰,人脸居中的正面人脸免冠照片;</text>
                            <text class="aa">2、照片无逆光、无PS、无过度美颜处理;</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-if="!withUserList.faceImgUrl">
                                <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                            </view>
                            <view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-else>
                                <image :src="withUserList.faceImgUrl" mode="widthFix"></image>
                            </view>
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>健康证照片</text>
                            <text v-if="visit === '1'">*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-if="!withUserList.imgurlUrl">
                                <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                            </view>
                            <view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-else>
                                <image :src="withUserList.imgurlUrl" mode="widthFix"></image>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="adduser_footer">
                    <view class="adduser_footer_item" @click="show3 = false">取消</view>
                    <view class="adduser_footer_item t" @click="submitUser">提交</view>
                </view>
            </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="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>
    </view>
</template>
<script>
    import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue"
    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 {
                photoSrc: '',
                type: '',
                inputType: '',
                showName: false,
                show: false,
                show1: false,
                show2: false,
                show3: false,
                show4: false,
                show5: false,
                show6: false,
                show7: false,
                showReason: false,
                fileList: [],
                columns1: [
                    [{
                        name: '身份证',
                        id: 0
                    }, {
                        name: '港澳证件',
                        id: 1
                    }, {
                        name: '护照',
                        id: 2
                    }],
                ],
                VisitReason: [],
                VisitPoeple: [],
                columns: [],
                cars: [],
                day: null,
                maxTime: '',
                carName: '',
                personnel: [],
                userAnswerId: '',
                form1: {
                    phone1: '',
                    receptMemberId: '',
                    receptMemberName: '',
                    starttime: '',
                    endtime: '',
                    doors: '',
                    doorSelectName: '',
                    reason: '',
                    carNos: '',
                    type: 0
                },
                withUserList: {
                    name: '',
                    phone: '',
                    idcardType: '',
                    idcardTypeName: '',
                    companyName: '',
                    idcardNo: '',
                    faceImg: '',
                    faceImgUrl: '',
                    imgurl: '',
                    imgurlUrl: ''
                },
                visit: '',
                form: {},
                accessControl: '',
                verify: ''
            }
        },
        components: {
            tlyPictureCut,
            keyboardInput,
            QfImageCropper
        },
        onLoad(options) {
            if (options.data) {
                this.form = JSON.parse(options.data)
            }
            // this.getvisit()
            // this.getVisit1()
            // this.getUserValid()
            this.getUser()
        },
        mounted() {
            this.$eventBus.$on('svisitorAppSel', (option) => {
                // this.$set(this.param, 'checkUserId', option.id)
                // this.$set(this.param, 'applyCheckUserId', option.id)
                // this.$set(this.param, 'checkorName', option.name)
                this.form1.receptMemberName = option.name
                this.form1.receptMemberId = option.id
                this.form1.receptMemberDepartment = option.companyName
            })
        },
        methods: {
            formatter(type, value) {
                if (type === 'year') {
                    return `${value}å¹´`
                }
                if (type === 'month') {
                    return `${value}月`
                }
                if (type === 'day') {
                    return `${value}日`
                    </view>
                </view>
            </view>
            <view v-if="form1.type == '1'" class="list_item">
                <view class="list_item_label">
                    <text></text>
                    <text>施工内容</text>
                    <!-- <text>*</text> -->
                </view>
                <view class="list_item_content">
                    <input type="text" v-model="form1.constructionReason" placeholder="请输入施工内容"
                        placeholder-style="color: #999999;" />
                </view>
            </view>
            <view class="list_item">
                <view class="list_item_label">
                    <text></text>
                    <text>随行车辆</text>
                </view>
                <view class="list_item_content" @click="openInput(1)">
                    <text :style="{ color: form1.carNos ? '#000000' : '' }">{{
            form1.carNos ? form1.carNos : "请输入车牌号码"
          }}</text>
                    <!-- <input type="text" placeholder="请输入车牌号" v-model="form1.carNos" maxlength="8" placeholder-style="color: #999999;" /> -->
                </view>
            </view>
        </view>
        <view class="footer">
            <view class="footer_btn" @click="onSubmit">提交</view>
        </view>
        <!-- å…¥å›­æ—¶é—´ -->
        <u-datetime-picker :show="show4" :minDate="new Date().getTime()" mode="datetime" :formatter="formatter"
            @cancel="show4 = false" @confirm="setstarttime"></u-datetime-picker>
        <!-- ç¦»å›­æ—¶é—´ -->
        <u-datetime-picker v-if="form1.starttime" :show="show5" :formatter="formatter"
            :minDate="formatTimeStamp(form1.starttime)" :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')"
            mode="datetime" @cancel="show5 = false" @confirm="setendtime"></u-datetime-picker>
        <!-- é—¨ç¦ -->
        <u-popup :show="show" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="closeMJ">
            <view class="menjin">
                <view class="respondent-title"> é€‰æ‹©é—¨ç¦ </view>
                <scroll-view scroll-y class="list">
                    <view class="list_item" v-for="(item, index) in columns" :key="index" @click="seleMJ(index)">
                        <text>{{ item.name }}</text>
                        <image src="@/static/checkbox@2x.png" mode="widthFix" v-show="!item.active"></image>
                        <image src="@/static/checkbo1x_sel@2x.png" mode="widthFix" v-show="item.active"></image>
                    </view>
                </scroll-view>
                <view class="menjin_footer">
                    <view class="menjin_footer_item" @click="closeMJ">取消</view>
                    <view class="menjin_footer_item" @click="submitMJ">确认</view>
                </view>
            </view>
        </u-popup>
        <!-- é€‰æ‹©éšè¡Œäººå‘˜ -->
        <u-popup :show="show1" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom"
            @close="show1 = false">
            <view class="popup-content">
                <view class="respondent-title"> é€‰æ‹©éšè¡Œäººå‘˜ </view>
                <view class="search-box">
                    <view class="search-box-top">
                        <view class="search-box-top-ipt">
                            <image src="@/static/ic_search@2x.png" mode="widthFix"></image>
                            <input type="text" placeholder="搜索姓名/手机号" />
                        </view>
                        <text @click="
                show1 = false;
                show3 = true;
              ">新增</text>
                    </view>
                    <view class="search-box-total">共0条数据</view>
                </view>
                <scroll-view scroll-y class="list">
                    <view class="item" v-for="(item, index) in 8" :key="index">
                        <view class="item_a">
                            <!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
                            <image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
                        </view>
                        <view class="item_b">
                            <image src="@/static/ic_mima@2x.png" mode="widthFix" />
                        </view>
                        <view class="item_c">
                            <text>用户名</text>
                            <text>已拉黑</text>
                        </view>
                    </view>
                </scroll-view>
                <view class="footer1">
                    <view class="footer_left">
                        <text class="footer_left_a">已选择:0人</text>
                        <text class="footer_left_b">李伟;</text>
                    </view>
                    <view class="footer_btn">确认 0/0</view>
                </view>
            </view>
        </u-popup>
        <!-- è½¦è¾† -->
        <u-popup :show="show2" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom"
            @close="show2 = false">
            <view class="addcar">
                <view class="addcar_head">添加车辆</view>
                <view class="addcar_ipt">
                    <input type="text" v-model="carName" placeholder="请输入车牌号" />
                </view>
                <view class="addcar_footer">
                    <view class="addcar_footer_item" @click="show2 = false">取消</view>
                    <view class="addcar_footer_item t" @click="submitCart">提交</view>
                </view>
            </view>
        </u-popup>
        <!-- æ·»åŠ éšè¡Œäººå‘˜ -->
        <u-popup :show="show3" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom"
            @close="show3 = false">
            <view class="adduser">
                <view class="adduser_head">随行人员</view>
                <view class="adduser_list">
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>姓名</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="text" v-model="withUserList.name" placeholder-style="color: #999999;font-size: 28rpx;"
                                placeholder="请输入真实姓名" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>手机号</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="number" v-model="withUserList.phone" maxlength="11"
                                placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入手机号" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>证件类型</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt" @click="show6 = true">
                            <text :style="{ color: withUserList.idcardTypeName ? '#000000' : '' }">{{
                  withUserList.idcardTypeName
                    ? withUserList.idcardTypeName
                    : "请选择"
                }}</text>
                            <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>证件号码</text>
                            <text>*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="text" v-model="withUserList.idcardNo" maxlength="18"
                                placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入证件号码" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>*</text>
                            <text>公司</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <input type="text" v-model="withUserList.companyName" placeholder-style="color: #999999;font-size: 28rpx;"
                                placeholder="请输入公司名称" />
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text></text>
                            <text>随行车辆</text>
                        </view>
                        <view class="adduser_list_item_ipt" @click="openInput(2)">
                            <text :style="{ color: withUserList.carNos ? '#000000' : '' }">{{
                withUserList.carNos ? withUserList.carNos : "请输入车牌号码"
              }}</text>
                            <!-- <input type="text" v-model="withUserList.carNos" disabled placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入车牌号" /> -->
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label1">
                            <text class="cc">人脸照片<b>*</b></text>
                            <text class="aa">1、请提供五官清晰,人脸居中的正面人脸免冠照片;</text>
                            <text class="aa">2、照片无逆光、无PS、无过度美颜处理;</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-if="!withUserList.faceImgUrl">
                                <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                            </view>
                            <view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-else>
                                <image :src="withUserList.faceImgUrl" mode="widthFix"></image>
                            </view>
                        </view>
                    </view>
                    <view class="adduser_list_item">
                        <view class="adduser_list_item_label">
                            <text>健康证照片</text>
                            <text v-if="visit === '1'">*</text>
                        </view>
                        <view class="adduser_list_item_ipt">
                            <view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-if="!withUserList.imgurlUrl">
                                <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                            </view>
                            <view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-else>
                                <image :src="withUserList.imgurlUrl" mode="widthFix"></image>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="adduser_footer">
                    <view class="adduser_footer_item" @click="show3 = false">取消</view>
                    <view class="adduser_footer_item t" @click="submitUser">提交</view>
                </view>
            </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="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>
    </view>
</template>
<script>
    import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue"
    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 {
                photoSrc: '',
                type: '',
                inputType: '',
                showName: false,
                show: false,
                show1: false,
                show2: false,
                show3: false,
                show4: false,
                show5: false,
                show6: false,
                show7: false,
                showReason: false,
                fileList: [],
                columns1: [
                    [{
                        name: '身份证',
                        id: 0
                    }, {
                        name: '港澳证件',
                        id: 1
                    }, {
                        name: '护照',
                        id: 2
                    }],
                ],
                VisitReason: [],
                VisitPoeple: [],
                columns: [],
                cars: [],
                day: null,
                maxTime: '',
                carName: '',
                personnel: [],
                userAnswerId: '',
                form1: {
                    phone1: '',
                    receptMemberId: '',
                    receptMemberName: '',
                    starttime: '',
                    endtime: '',
                    doors: '',
                    doorSelectName: '',
                    reason: '',
                    carNos: '',
                    type: 0
                },
                withUserList: {
                    name: '',
                    phone: '',
                    idcardType: '',
                    idcardTypeName: '',
                    companyName: '',
                    idcardNo: '',
                    faceImg: '',
                    faceImgUrl: '',
                    imgurl: '',
                    imgurlUrl: ''
                },
                visit: '',
                form: {},
                accessControl: '',
                verify: ''
            }
        },
        components: {
            tlyPictureCut,
            keyboardInput,
            QfImageCropper
        },
        onLoad(options) {
            if (options.data) {
                this.form = JSON.parse(options.data)
            }
            // this.getvisit()
            // this.getVisit1()
            // this.getUserValid()
            this.getUser()
        },
        mounted() {
            this.$eventBus.$on('svisitorAppSel', (option) => {
                // this.$set(this.param, 'checkUserId', option.id)
                // this.$set(this.param, 'applyCheckUserId', option.id)
                // this.$set(this.param, 'checkorName', option.name)
                this.form1.receptMemberName = option.name
                this.form1.receptMemberId = option.id
                this.form1.receptMemberDepartment = option.companyName
            })
        },
        methods: {
            formatter(type, value) {
                if (type === 'year') {
                    return `${value}å¹´`
                }
                if (type === 'month') {
                    return `${value}月`
                }
                if (type === 'day') {
                    return `${value}日`
                }
<<<<<<< HEAD
                this.$forceUpdate()
                this.closeInput()
            },
            closeInput() {
                this.$refs.keyboard.close()
            },
            uploadImg(file) {
                this.$refs.cropper.close()
                uni.showLoading({ title: '上传中', mask: true });
                uni.uploadFile({
                    url: `${this.$baseUrl}public/api/uploadFtp.do`,
                    filePath: file.tempFilePath,
                    name: 'file',
                    formData: {
                        folderCode: 'MEMBER_IMG'
                    },
                    success: (uploadFileRes) => {
                        let res = JSON.parse(uploadFileRes.data)
                        this.withUserList.faceImg = res.data.halfPath
                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                    },
                    complete() {
                        uni.hideLoading();
                    }
                });
            },
            closeMJ() {
                this.show = false
                this.columns.forEach(item => {
                    item.active = false
                })
            },
            submit() {
                if (!this.form1.receptMemberId) return uni.showToast({
                    title: '请填写有效的访问人',
                    icon: 'none'
                })
                if (!this.form1.starttime) return uni.showToast({
                    title: '入场时间不能为空',
                    icon: 'none'
                })
                if (!this.form1.endtime) return uni.showToast({
                    title: '离场时间不能为空',
                    icon: 'none'
                })
                if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
                    title: '访问门禁不能为空',
                    icon: 'none'
                })
                if (!this.form1.reason) return uni.showToast({
                    title: '拜访事由不能为空',
                    icon: 'none'
                })
                // this.form1.starttime = this.form1.starttime + ':00'
                // this.form1.endtime = this.form1.endtime + ':00'
                let data = JSON.parse(JSON.stringify(this.form1))
                data.starttime = data.starttime + ':00'
                data.endtime = data.endtime + ':00'
                this.$u.api.createFk({
                    ...this.form,
                    ...data,
                    openid: this.$store.state.openId,
                    withUserList: this.personnel
                }).then(res => {
                    if (res.code === 200) {
                        uni.reLaunch({
                            url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
                        })
                    }
                })
            },
            deleUser(i) {
                this.personnel.splice(i, 1)
            },
            getVisit1() {
                // æ˜¯å¦éœ€è¦ç­”题
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'HEALTH_CARD'
                }).then(res => {
                    if (res.code === 200) {
                        this.visit = res.data.code
                    }
                })
                // èµ·å§‹æ—¶é—´æ—¶é•¿
                this.$u.api.getSystemDictData({
                    dictCode: 'VISIT_CONFIG',
                    label: 'VALIDATE_VISIT'
                }).then(res => {
                    if (res.code === 200) {
                        this.day = Number(res.data.code)
                        console.log(this.day)
                        // console.log(nextDay('after', true, this.day))
                    }
                })
            },
            submitUser() {
                if (!this.withUserList.name) return uni.showToast({
                    title: '姓名不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.phone) return uni.showToast({
                    title: '手机号不能为空',
                    icon: 'none'
                })
                const regExp = /^1[3456789]\d{9}$/;
                if (!regExp.test(this.withUserList.phone)) return uni.showToast({
                    title: '手机号格式错误',
                    icon: 'none'
                })
                if (!String(this.withUserList.idcardType)) return uni.showToast({
                    title: '证件类型不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.idcardNo) return uni.showToast({
                    title: '证件号码不能为空',
                    icon: 'none'
                })
                if (this.withUserList.idcardType === 0) {
                    const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/;
                    if (!regex.test(this.withUserList.idcardNo)) return uni.showToast({
                        title: '证件号码格式错误',
                        icon: 'none'
                    })
=======
                if (type === 'hour') {
                    return `${value}时`
>>>>>>> f0f08cc1ff84d45de32d8bff4a40e6a7d0d7a9e6
                }
                if (type === 'minute') {
                    return `${value}分`
                }
                return value
            },
            selName() {
                uni.navigateTo({
                    url: '/pages/visitorApplication/memberSel'
                })
            },
            openInput(type) {
                this.inputType = type
                this.$refs.keyboard.open()
            },
            setPlate(e) {
                if (this.inputType === 1) {
                    this.form1.carNos = e
                } else if (this.inputType === 2) {
                    this.withUserList.carNos = e
                }
                this.$forceUpdate()
                this.closeInput()
            },
            closeInput() {
                this.$refs.keyboard.close()
            },
            constructionChange(value) {
                this.form1.type = value
            },
            uploadImg(file) {
                this.$refs.cropper.close()
                uni.showLoading({
                    title: '上传中',
                    mask: true
                })
                uni.uploadFile({
                    url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
                    filePath: file.tempFilePath,
                    name: 'file',
                    formData: {
                        folderCode: 'MEMBER_IMG'
                    },
                    success: (uploadFileRes) => {
                        let res = JSON.parse(uploadFileRes.data)
                        this.withUserList.faceImg = res.data.halfPath
                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                    },
                    complete() {
                        uni.hideLoading()
                    }
                })
            },
            closeMJ() {
                this.show = false
                this.columns.forEach(item => {
                    item.active = false
                })
            },
            onSubmit() {
                if (!this.form1.receptMemberId) return uni.showToast({
                    title: '请填写有效的访问人',
                    icon: 'none'
                })
                if (!this.form1.starttime) return uni.showToast({
                    title: '入园时间不能为空',
                    icon: 'none'
                })
                if (!this.form1.endtime) return uni.showToast({
                    title: '离园时间不能为空',
                    icon: 'none'
                })
                if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
                    title: '访问门禁不能为空',
                    icon: 'none'
                })
                if (!this.form1.reason) return uni.showToast({
                    title: '拜访事由不能为空',
                    icon: 'none'
                })
                // this.form1.starttime = this.form1.starttime + ':00'
                // this.form1.endtime = this.form1.endtime + ':00'
                let data = JSON.parse(JSON.stringify(this.form1))
                data.starttime = data.starttime + ':00'
                data.endtime = data.endtime + ':00'
                createFk({
                    ...this.form,
                    ...data,
                    openid: this.$store.state.openId,
                    withUserList: this.personnel
                }).then(res => {
                    if (res.code === 200) {
                        uni.navigateTo({
                            url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
                        })
                    }
                })
            },
            deleUser(i) {
                this.personnel.splice(i, 1)
            },
            getVisit1() {
                // æ˜¯å¦éœ€è¦ç­”题
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'HEALTH_CARD'
                }).then(res => {
                    if (res.code === 200) {
                        this.visit = res.data.code
                    }
                })
                // èµ·å§‹æ—¶é—´æ—¶é•¿
                getSystemDictData({
                    dictCode: 'VISIT_CONFIG',
                    label: 'VALIDATE_VISIT'
                }).then(res => {
                    if (res.code === 200) {
                        this.day = Number(res.data.code)
                        // console.log(nextDay('after', true, this.day))
                    }
                })
            },
            submitUser() {
                if (!this.withUserList.name) return uni.showToast({
                    title: '姓名不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.phone) return uni.showToast({
                    title: '手机号不能为空',
                    icon: 'none'
                })
                const regExp = /^1[3456789]\d{9}$/
                if (!regExp.test(this.withUserList.phone)) return uni.showToast({
                    title: '手机号格式错误',
                    icon: 'none'
                })
                if (!String(this.withUserList.idcardType)) return uni.showToast({
                    title: '证件类型不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.idcardNo) return uni.showToast({
                    title: '证件号码不能为空',
                    icon: 'none'
                })
                if (this.withUserList.idcardType === 0) {
                    const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/
                    if (!regex.test(this.withUserList.idcardNo)) return uni.showToast({
                        title: '证件号码格式错误',
                        icon: 'none'
                    })
                }
                if (!this.withUserList.companyName) return uni.showToast({
                    title: '公司不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.faceImg) return uni.showToast({
                    title: '人脸照片不能为空',
                    icon: 'none'
                })
                if (this.visit === '1') {
                    if (!this.withUserList.imgurl) return uni.showToast({
                        title: '人脸照片不能为空',
                        icon: 'none'
                    })
                }
                let arr = JSON.parse(JSON.stringify(this.withUserList))
                this.personnel.push(arr)
                this.show3 = false
                this.withUserList.name = ''
                this.withUserList.phone = ''
                this.withUserList.idcardType = ''
                this.withUserList.idcardTypeName = ''
                this.withUserList.companyName = ''
                this.withUserList.idcardNo = ''
                this.withUserList.faceImg = ''
                this.withUserList.faceImgUrl = ''
                this.withUserList.imgurl = ''
                this.withUserList.imgurlUrl = ''
            },
            upload(type) {
                this.type = type
                if (type === 'faceImg') {
                    this.$refs.cropper.open()
                    return
                }
                uni.chooseImage({
                    success: (chooseImageRes) => {
                        uni.showLoading({
                            title: '上传中',
                            mask: true
                        })
                        for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
                            uni.uploadFile({
                                url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
                                filePath: chooseImageRes.tempFilePaths[i],
                                name: 'file',
                                formData: {
                                    folderCode: 'MEMBER_IMG'
                                },
                                success: (uploadFileRes) => {
                                    let res = JSON.parse(uploadFileRes.data)
                                    if (type === 'faceImg') {
                                        this.withUserList.faceImg = res.data.halfPath
                                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    } else {
                                        this.withUserList.imgurl = res.data.halfPath
                                        this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    }
                                },
                                complete() {
                                    if (i === chooseImageRes.tempFilePaths.length - 1) {
                                        uni.hideLoading()
                                    }
                                }
                            })
                        }
                    }
                })
            },
            seleIdcard(e) {
                this.withUserList.idcardType = e.value[0].id
                this.withUserList.idcardTypeName = e.value[0].name
                this.show6 = false
            },
            selectedName(e) {
                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({
                    title: '请输入车牌号码',
                    icon: 'none'
                })
                this.cars.push(this.carName)
                this.form1.carNos = this.cars.join(',')
                this.carName = ''
                this.show2 = false
            },
            deleCars(i) {
                this.cars.splice(i, 1)
                this.form1.carNos = this.cars.join(',')
            },
            submitMJ() {
                let arr = []
                let names = []
                this.columns.forEach(item => {
                    if (item.active) {
                        arr.push(item.id)
                        names.push(item.name)
                    }
                })
                if (arr.length === 0) return uni.showToast({
                    title: '请选择门禁',
                    icon: 'none'
                })
                this.form1.doorSelectName = names.join(',')
                this.form1.doors = arr.join(',')
                this.show = false
            },
            seleMJ(i) {
                this.columns.forEach((item, index) => {
                    if (index === i) {
                        item.active = !item.active
                    }
                })
            },
            openLC() {
                if (!this.form1.starttime) return uni.showToast({
                    title: '请先选择入园时间',
                    icon: 'none'
                })
                this.show5 = true
            },
            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.slice(0, 10))
                this.show4 = false
            },
            setendtime(e) {
                this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
                this.show5 = false
            },
            formatTimeStamp(date) {
                return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`))
            },
            // æŸ¥è¯¢ç”¨æˆ·
            getUser() {
                getVisitedMember().then(res => {
                    this.VisitPoeple = [res.data || []]
                })
                getVisitedVisitReason({}).then(res => {
                    this.VisitReason = [res.data || []]
                })
            },
            // è¢«æ‹œè®¿äººä¿¡æ¯æ ¡éªŒæ–¹å¼ï¼ˆ0手机号单独校验 1手机号和姓名组合校验)
            getUserValid() {
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'BEVISITED_USER_VALID'
                }).then(res => {
                    if (res.code === 200) {
                        this.verify = res.data.code
                    }
                })
            },
            // èŽ·å–æ˜¯å¦éœ€è¦é€‰æ‹©é—¨ç¦/门禁列表
            getvisit() {
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'SELECT_DOORS_VISIT_REQUIRED'
                }).then(res => {
                    if (res.code === 200) {
                        this.accessControl = res.data.code
                        if (res.data.code === '1') {
                            this.$u.api.deviceRoleList({
                                    type: 1
                                })
                                .then(device => {
                                    if (device.code === 200) {
                                        if (device.data.length > 0) {
                                            device.data.forEach(item => {
                                                item.active = false
                                            })
                                            this.columns = device.data
                                        }
                                    }
                                })
                        }
                    }
                })
            },
            confirm(e) {
                this.show = false
            }
        }
    }
</script>
<style>
    page {
        background-color: #f7f7f7 !important;
    }
    .u-upload__button {
        margin: 0 !important;
    }
</style>
<style lang="scss" scoped>
    .visit {
        width: 100%;
        .menjin {
            width: 100%;
            .respondent-title {
                width: 100%;
                height: 100rpx;
                line-height: 100rpx;
                text-align: center;
                font-size: 32rpx;
                font-weight: 600;
                color: #222222;
            }
            .list {
                width: 100%;
                height: 400rpx;
                display: flex;
                flex-direction: column;
                .list_item {
                    width: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    text {
                        font-size: 28rpx;
                        color: #000000;
                    }
                    image {
                        width: 30rpx;
                        height: 30rpx;
                    }
                }
            }
            .menjin_footer {
                width: 100%;
                padding: 30rpx;
                box-sizing: border-box;
                display: flex;
                align-items: center;
                justify-content: space-between;
                .menjin_footer_item {
                    flex: 1;
                    height: 80rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    border-radius: 10rpx;
                    background-color: $uni-color-primary;
                    color: #ffffff;
                    font-size: 26rpx;
                    margin-left: 30rpx;
                    &:first-child {
                        margin-left: 0 !important;
                    }
                }
            }
        }
        .adduser {
            padding: 30rpx;
            width: 100%;
            box-sizing: border-box;
            .adduser_head {
                width: 100%;
                text-align: center;
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .adduser_list {
                width: 100%;
                margin-top: 40rpx;
                .adduser_list_item {
                    width: 100%;
                    padding: 24rpx 0;
                    box-sizing: border-box;
                    border-bottom: 1rpx solid #e5e5e5;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    .adduser_list_item_label1 {
                        flex: 1;
                        display: flex;
                        flex-direction: column;
                        .cc {
                            font-size: 30rpx;
                            font-family: PingFangSC, PingFang SC;
                            font-weight: 400;
                            color: #222222;
                            margin-bottom: 20rpx;
                            b {
                                font-size: 30rpx;
                                font-family: PingFangSC, PingFang SC;
                                font-weight: 400;
                                color: #e0312a;
                            }
                        }
                        .aa {
                            font-size: 24rpx;
                            font-weight: 400;
                            color: #999999;
                        }
                    }
                    .adduser_list_item_label {
                        flex-shrink: 0;
                        display: flex;
                        align-items: center;
                        font-family: PingFangSC, PingFang SC;
                        font-size: 30rpx;
                        text {
                            &:nth-child(1) {
                                color: #e0312a;
                            }
                            &:nth-child(2) {
                                color: #222222;
                            }
                        }
                    }
                    .adduser_list_item_ipt {
                        flex-shrink: 0;
                        text-align: right;
                        font-size: 28rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                        margin-left: 30rpx;
                        display: flex;
                        align-items: center;
                        justify-content: flex-end;
                        .adduser_list_item_ipt1_upload {
                            width: 120rpx;
                            height: 120rpx;
                            background-color: #ececec;
                            display: flex;
                            align-items: center;
                            justify-content: center;
                            overflow: hidden;
                            image {
                                width: 100%;
                                height: 100%;
                            }
                        }
                        text {
                            font-size: 28rpx;
                            font-family: PingFangSC, PingFang SC;
                            font-weight: 400;
                            color: #999999;
                        }
                    }
                }
            }
            .adduser_footer {
                width: 100%;
                margin-top: 60rpx;
                display: flex;
                align-items: center;
                justify-content: space-between;
                .t {
                    background: #4d99a9 !important;
                    color: #ffffff !important;
                }
                .adduser_footer_item {
                    width: 336rpx;
                    height: 88rpx;
                    line-height: 88rpx;
                    text-align: center;
                    border-radius: 44rpx;
                    border: 1rpx solid #4d99a9;
                    font-size: 32rpx;
                    font-family: PingFangSC, PingFang SC;
                    font-weight: 400;
                    color: #4d99a9;
                    margin-right: 18rpx;
                    &:last-child {
                        margin: 0 !important;
                    }
                }
            }
        }
        .addcar {
            padding: 30rpx;
            width: 100%;
            box-sizing: border-box;
            .addcar_head {
                text-align: center;
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .addcar_ipt {
                width: 100%;
                height: 100rpx;
                line-height: 100rpx;
                text-align: center;
                background: #f7f7f7;
                border-radius: 50rpx;
                margin-top: 60rpx;
                input {
                    width: 100%;
                    height: 100%;
                    font-size: 28rpx;
                    font-weight: 400;
                    color: #000000;
                    text-align: center;
                }
            }
            .addcar_footer {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-top: 60rpx;
                .t {
                    background: #4d99a9 !important;
                    color: #ffffff !important;
                }
                .addcar_footer_item {
                    flex: 1;
                    height: 88rpx;
                    line-height: 88rpx;
                    font-size: 32rpx;
                    font-weight: 400;
                    color: #025eef;
                    text-align: center;
                    border-radius: 44rpx;
                    border: 1rpx solid #025eef;
                    margin-right: 18rpx;
                    &:last-child {
                        margin-right: 0 !important;
                    }
                }
            }
        }
        .popup-content {
            padding: 30rpx 30rpx 0 30rpx;
            overflow: hidden;
            display: flex;
            flex-flow: column;
            .respondent-title {
                width: 100%;
                text-align: center;
                font-size: 32rpx;
                font-weight: 600;
                color: #222222;
            }
            .search-box {
                width: 100%;
                margin-top: 40rpx;
                .search-box-top {
                    width: 100%;
                    height: 68rpx;
                    display: flex;
                    align-items: center;
                    .search-box-top-ipt {
                        flex: 1;
                        height: 100%;
                        padding: 0 30rpx;
                        box-sizing: border-box;
                        background: #f7f7f7;
                        border-radius: 4rpx;
                        display: flex;
                        align-items: center;
                        image {
                            width: 36rpx;
                            height: 36rpx;
                            flex-shrink: 0;
                            margin-right: 22rpx;
                        }
                        input {
                            flex: 1;
                            height: 100%;
                            font-size: 26rpx;
                            font-weight: 400;
                            color: #b2b2b2;
                        }
                    }
                    text {
                        flex-shrink: 0;
                        margin-left: 30rpx;
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #025eef;
                    }
                }
                .search-box-total {
                    font-size: 26rpx;
                    font-weight: 400;
                    color: #666666;
                    margin-top: 24rpx;
                }
            }
            .list {
                width: 100%;
                height: 800rpx;
                margin-top: 30rpx;
                padding: 0 !important;
                .item {
                    width: 100%;
                    height: 102rpx;
                    display: flex;
                    align-items: center;
                    border-bottom: 1rpx solid #e5e5e5;
                    .item_a {
                        flex-shrink: 0;
                        width: 36rpx;
                        height: 36rpx;
                        margin-right: 24rpx;
                        image {
                            width: 100%;
                            height: 100%;
                        }
                    }
                    .item_b {
                        flex-shrink: 0;
                        width: 80rpx;
                        height: 80rpx;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        overflow: hidden;
                        margin-right: 24rpx;
                        image {
                            width: 100%;
                            height: 100%;
                        }
                    }
                    .item_c {
                        flex: 1;
                        display: flex;
                        align-items: center;
                        text {
                            &:nth-child(1) {
                                font-size: 30rpx;
                                font-family: PingFangSC, PingFang SC;
                                font-weight: 400;
                                color: #222222;
                            }
                            &:nth-child(2) {
                                font-size: 20rpx;
                                font-family: PingFangSC, PingFang SC;
                                font-weight: 400;
                                color: #999999;
                                padding: 1rpx 4rpx;
                                box-sizing: border-box;
                                background-color: #eeeeee;
                                margin-left: 12rpx;
                            }
                        }
                    }
                }
            }
            .footer1 {
                width: 100%;
                height: 100rpx;
                display: flex;
                align-items: center;
                justify-content: space-between;
                padding: 14rpx 0 0 0;
                box-sizing: border-box;
                .footer_left {
                    flex: 1;
                    display: flex;
                    flex-direction: column;
                    .footer_left_a {
                        font-size: 26rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                    }
                    .footer_left_b {
                        font-size: 24rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #999999;
                    }
                }
                .footer_btn {
                    flex-shrink: 0;
                    width: 216rpx;
                    height: 72rpx;
                    line-height: 72rpx;
                    text-align: center;
                    background: #025eef;
                    border-radius: 8rpx;
                    font-size: 28rpx;
                    font-weight: 600;
                    color: #ffffff;
                }
            }
        }
        .head {
            width: 100%;
            padding: 20rpx 30rpx;
            box-sizing: border-box;
            font-size: 28rpx;
            font-weight: 400;
            color: #666666;
        }
        .list {
            width: 100%;
            padding: 0 30rpx;
            box-sizing: border-box;
            background-color: #ffffff;
            .empty {
                width: 750rpx;
                height: 20rpx;
                background-color: #f7f7f7;
                margin: 0 -30rpx;
            }
            .list_item {
                width: 100%;
                // min-height: 98rpx;
                padding: 30rpx 0;
                box-sizing: border-box;
                display: flex;
                align-items: center;
                justify-content: space-between;
                border-bottom: 1rpx solid #e5e5e5;
                .list_item_label {
                    flex-shrink: 0;
                    display: flex;
                    align-items: center;
                    text {
                        &:nth-child(1) {
                            font-size: 30rpx;
                            font-weight: 400;
                            color: #e42d2d;
                        }
                        &:nth-child(2) {
                            font-size: 30rpx;
                            font-weight: 400;
                            color: #222222;
                        }
                    }
                }
                .list_item_content {
                    flex: 1;
                    height: 100%;
                    margin-left: 30rpx;
                    display: flex;
                    align-items: center;
                    justify-content: flex-end;
                    text {
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #999999;
                        margin-right: 6rpx;
                    }
                    input {
                        width: 100%;
                        height: 100%;
                        text-align: right;
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #222222;
                    }
                }
                return value
            },
            selName() {
                uni.navigateTo({
                    url: '/pages/visitorApplication/memberSel'
                })
            },
            openInput(type) {
                this.inputType = type
                this.$refs.keyboard.open()
            },
            setPlate(e) {
                if (this.inputType === 1) {
                    this.form1.carNos = e
                } else if (this.inputType === 2) {
                    this.withUserList.carNos = e
                }
                this.$forceUpdate()
                this.closeInput()
            },
            closeInput() {
                this.$refs.keyboard.close()
            },
            constructionChange(value) {
                this.form1.type = value
            },
            uploadImg(file) {
                this.$refs.cropper.close()
                uni.showLoading({
                    title: '上传中',
                    mask: true
                })
                uni.uploadFile({
                    url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
                    filePath: file.tempFilePath,
                    name: 'file',
                    formData: {
                        folderCode: 'MEMBER_IMG'
                    },
                    success: (uploadFileRes) => {
                        let res = JSON.parse(uploadFileRes.data)
                        this.withUserList.faceImg = res.data.halfPath
                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                    },
                    complete() {
                        uni.hideLoading()
                    }
                })
            },
            closeMJ() {
                this.show = false
                this.columns.forEach(item => {
                    item.active = false
                })
            },
            onSubmit() {
                if (!this.form1.receptMemberId) return uni.showToast({
                    title: '请填写有效的访问人',
                    icon: 'none'
                })
                if (!this.form1.starttime) return uni.showToast({
                    title: '入园时间不能为空',
                    icon: 'none'
                })
                if (!this.form1.endtime) return uni.showToast({
                    title: '离园时间不能为空',
                    icon: 'none'
                })
                if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
                    title: '访问门禁不能为空',
                    icon: 'none'
                })
                if (!this.form1.reason) return uni.showToast({
                    title: '拜访事由不能为空',
                    icon: 'none'
                })
                // this.form1.starttime = this.form1.starttime + ':00'
                // this.form1.endtime = this.form1.endtime + ':00'
                let data = JSON.parse(JSON.stringify(this.form1))
                data.starttime = data.starttime + ':00'
                data.endtime = data.endtime + ':00'
                createFk({
                    ...this.form,
                    ...data,
                    openid: this.$store.state.openId,
                    withUserList: this.personnel
                }).then(res => {
                    if (res.code === 200) {
                        uni.navigateTo({
                            url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
                        })
                    }
                })
            },
            deleUser(i) {
                this.personnel.splice(i, 1)
            },
            getVisit1() {
                // æ˜¯å¦éœ€è¦ç­”题
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'HEALTH_CARD'
                }).then(res => {
                    if (res.code === 200) {
                        this.visit = res.data.code
                    }
                })
                // èµ·å§‹æ—¶é—´æ—¶é•¿
                getSystemDictData({
                    dictCode: 'VISIT_CONFIG',
                    label: 'VALIDATE_VISIT'
                }).then(res => {
                    if (res.code === 200) {
                        this.day = Number(res.data.code)
                        // console.log(nextDay('after', true, this.day))
                    }
                })
            },
            submitUser() {
                if (!this.withUserList.name) return uni.showToast({
                    title: '姓名不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.phone) return uni.showToast({
                    title: '手机号不能为空',
                    icon: 'none'
                })
                const regExp = /^1[3456789]\d{9}$/
                if (!regExp.test(this.withUserList.phone)) return uni.showToast({
                    title: '手机号格式错误',
                    icon: 'none'
                })
                if (!String(this.withUserList.idcardType)) return uni.showToast({
                    title: '证件类型不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.idcardNo) return uni.showToast({
                    title: '证件号码不能为空',
                    icon: 'none'
                })
                if (this.withUserList.idcardType === 0) {
                    const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/
                    if (!regex.test(this.withUserList.idcardNo)) return uni.showToast({
                        title: '证件号码格式错误',
                        icon: 'none'
                    })
                }
                if (!this.withUserList.companyName) return uni.showToast({
                    title: '公司不能为空',
                    icon: 'none'
                })
                if (!this.withUserList.faceImg) return uni.showToast({
                    title: '人脸照片不能为空',
                    icon: 'none'
                })
                if (this.visit === '1') {
                    if (!this.withUserList.imgurl) return uni.showToast({
                        title: '人脸照片不能为空',
                        icon: 'none'
                    })
                }
                let arr = JSON.parse(JSON.stringify(this.withUserList))
                this.personnel.push(arr)
                this.show3 = false
                this.withUserList.name = ''
                this.withUserList.phone = ''
                this.withUserList.idcardType = ''
                this.withUserList.idcardTypeName = ''
                this.withUserList.companyName = ''
                this.withUserList.idcardNo = ''
                this.withUserList.faceImg = ''
                this.withUserList.faceImgUrl = ''
                this.withUserList.imgurl = ''
                this.withUserList.imgurlUrl = ''
            },
            upload(type) {
                this.type = type
                if (type === 'faceImg') {
                    this.$refs.cropper.open()
                    return
                }
                uni.chooseImage({
                    success: (chooseImageRes) => {
                        uni.showLoading({
                            title: '上传中',
                            mask: true
                        })
                        for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
                            uni.uploadFile({
                                url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
                                filePath: chooseImageRes.tempFilePaths[i],
                                name: 'file',
                                formData: {
                                    folderCode: 'MEMBER_IMG'
                                },
                                success: (uploadFileRes) => {
                                    let res = JSON.parse(uploadFileRes.data)
                                    if (type === 'faceImg') {
                                        this.withUserList.faceImg = res.data.halfPath
                                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    } else {
                                        this.withUserList.imgurl = res.data.halfPath
                                        this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    }
                                },
                                complete() {
                                    if (i === chooseImageRes.tempFilePaths.length - 1) {
                                        uni.hideLoading()
                                    }
                                }
                            })
                        }
                    }
                })
            },
            seleIdcard(e) {
                this.withUserList.idcardType = e.value[0].id
                this.withUserList.idcardTypeName = e.value[0].name
                this.show6 = false
            },
            selectedName(e) {
                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({
                    title: '请输入车牌号码',
                    icon: 'none'
                })
                this.cars.push(this.carName)
                this.form1.carNos = this.cars.join(',')
                this.carName = ''
                this.show2 = false
            },
            deleCars(i) {
                this.cars.splice(i, 1)
                this.form1.carNos = this.cars.join(',')
            },
            submitMJ() {
                let arr = []
                let names = []
                this.columns.forEach(item => {
                    if (item.active) {
                        arr.push(item.id)
                        names.push(item.name)
                    }
                })
                if (arr.length === 0) return uni.showToast({
                    title: '请选择门禁',
                    icon: 'none'
                })
                this.form1.doorSelectName = names.join(',')
                this.form1.doors = arr.join(',')
                this.show = false
            },
            seleMJ(i) {
                this.columns.forEach((item, index) => {
                    if (index === i) {
                        item.active = !item.active
                    }
                })
            },
            openLC() {
                if (!this.form1.starttime) return uni.showToast({
                    title: '请先选择入园时间',
                    icon: 'none'
                })
                this.show5 = true
            },
            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.slice(0, 10))
                this.show4 = false
            },
            setendtime(e) {
                this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
                this.show5 = false
            },
            formatTimeStamp(date) {
                return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`))
            },
            // æŸ¥è¯¢ç”¨æˆ·
            getUser() {
                getVisitedMember().then(res => {
                    this.VisitPoeple = [res.data || []]
                })
                getVisitedVisitReason({}).then(res => {
                    this.VisitReason = [res.data || []]
                })
            },
            // è¢«æ‹œè®¿äººä¿¡æ¯æ ¡éªŒæ–¹å¼ï¼ˆ0手机号单独校验 1手机号和姓名组合校验)
            getUserValid() {
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'BEVISITED_USER_VALID'
                }).then(res => {
                    if (res.code === 200) {
                        this.verify = res.data.code
                    }
                })
            },
            // èŽ·å–æ˜¯å¦éœ€è¦é€‰æ‹©é—¨ç¦/门禁列表
            getvisit() {
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'SELECT_DOORS_VISIT_REQUIRED'
                }).then(res => {
                    if (res.code === 200) {
                        this.accessControl = res.data.code
                        if (res.data.code === '1') {
                            this.$u.api.deviceRoleList({
                                    type: 1
                                })
                                .then(device => {
                                    if (device.code === 200) {
                                        if (device.data.length > 0) {
                                            device.data.forEach(item => {
                                                item.active = false
                                            })
                                            this.columns = device.data
                                        }
                                    }
                                })
                        }
                    }
                })
            },
            confirm(e) {
                this.show = false
            }
        }
    }
</script>
<style>
    page {
        background-color: #f7f7f7 !important;
    }
    .u-upload__button {
        margin: 0 !important;
    }
</style>
<style lang="scss" scoped>
    .visit {
        width: 100%;
        .menjin {
            width: 100%;
            .respondent-title {
                width: 100%;
                height: 100rpx;
                line-height: 100rpx;
                text-align: center;
                font-size: 32rpx;
                font-weight: 600;
                color: #222222;
            }
            .list {
                width: 100%;
                height: 400rpx;
                display: flex;
                flex-direction: column;
                .list_item {
                    width: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    text {
                        font-size: 28rpx;
                        color: #000000;
                    }
                    image {
                        width: 30rpx;
                        height: 30rpx;
                    }
                }
            }
            .menjin_footer {
                width: 100%;
                padding: 30rpx;
                box-sizing: border-box;
                display: flex;
                align-items: center;
                justify-content: space-between;
                .menjin_footer_item {
                    flex: 1;
                    height: 80rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    border-radius: 10rpx;
                    background-color: $uni-color-primary;
                    color: #ffffff;
                    font-size: 26rpx;
                    margin-left: 30rpx;
                    &:first-child {
                        margin-left: 0 !important;
                    }
                }
            }
        }
        .adduser {
            padding: 30rpx;
            width: 100%;
            box-sizing: border-box;
            .adduser_head {
                width: 100%;
                text-align: center;
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .adduser_list {
                width: 100%;
                margin-top: 40rpx;
                .adduser_list_item {
                    width: 100%;
                    padding: 24rpx 0;
                    box-sizing: border-box;
                    border-bottom: 1rpx solid #e5e5e5;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    .adduser_list_item_label1 {
                        flex: 1;
                        display: flex;
                        flex-direction: column;
                        .cc {
                            font-size: 30rpx;
                            font-family: PingFangSC, PingFang SC;
                            font-weight: 400;
                            color: #222222;
                            margin-bottom: 20rpx;
                            b {
                                font-size: 30rpx;
                                font-family: PingFangSC, PingFang SC;
                                font-weight: 400;
                                color: #e0312a;
                            }
                        }
                        .aa {
                            font-size: 24rpx;
                            font-weight: 400;
                            color: #999999;
                        }
                    }
                    .adduser_list_item_label {
                        flex-shrink: 0;
                        display: flex;
                        align-items: center;
                        font-family: PingFangSC, PingFang SC;
                        font-size: 30rpx;
                        text {
                            &:nth-child(1) {
                                color: #e0312a;
                            }
                            &:nth-child(2) {
                                color: #222222;
                            }
                        }
                    }
                    .adduser_list_item_ipt {
                        flex-shrink: 0;
                        text-align: right;
                        font-size: 28rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                        margin-left: 30rpx;
                        display: flex;
                        align-items: center;
                        justify-content: flex-end;
                        .adduser_list_item_ipt1_upload {
                            width: 120rpx;
                            height: 120rpx;
                            background-color: #ececec;
                            display: flex;
                            align-items: center;
                            justify-content: center;
                            overflow: hidden;
                            image {
                                width: 100%;
                                height: 100%;
                            }
                        }
                        text {
                            font-size: 28rpx;
                            font-family: PingFangSC, PingFang SC;
                            font-weight: 400;
                            color: #999999;
                        }
                    }
                }
            }
            .adduser_footer {
                width: 100%;
                margin-top: 60rpx;
                display: flex;
                align-items: center;
                justify-content: space-between;
                .t {
                    background: #4d99a9 !important;
                    color: #ffffff !important;
                }
                .adduser_footer_item {
                    width: 336rpx;
                    height: 88rpx;
                    line-height: 88rpx;
                    text-align: center;
                    border-radius: 44rpx;
                    border: 1rpx solid #4d99a9;
                    font-size: 32rpx;
                    font-family: PingFangSC, PingFang SC;
                    font-weight: 400;
                    color: #4d99a9;
                    margin-right: 18rpx;
                    &:last-child {
                        margin: 0 !important;
                    }
                }
            }
        }
        .addcar {
            padding: 30rpx;
            width: 100%;
            box-sizing: border-box;
            .addcar_head {
                text-align: center;
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .addcar_ipt {
                width: 100%;
                height: 100rpx;
                line-height: 100rpx;
                text-align: center;
                background: #f7f7f7;
                border-radius: 50rpx;
                margin-top: 60rpx;
                input {
                    width: 100%;
                    height: 100%;
                    font-size: 28rpx;
                    font-weight: 400;
                    color: #000000;
                    text-align: center;
                }
            }
            .addcar_footer {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-top: 60rpx;
                .t {
                    background: #4d99a9 !important;
                    color: #ffffff !important;
                }
                .addcar_footer_item {
                    flex: 1;
                    height: 88rpx;
                    line-height: 88rpx;
                    font-size: 32rpx;
                    font-weight: 400;
                    color: #025eef;
                    text-align: center;
                    border-radius: 44rpx;
                    border: 1rpx solid #025eef;
                    margin-right: 18rpx;
                    &:last-child {
                        margin-right: 0 !important;
                    }
                }
            }
        }
        .popup-content {
            padding: 30rpx 30rpx 0 30rpx;
            overflow: hidden;
            display: flex;
            flex-flow: column;
            .respondent-title {
                width: 100%;
                text-align: center;
                font-size: 32rpx;
                font-weight: 600;
                color: #222222;
            }
            .search-box {
                width: 100%;
                margin-top: 40rpx;
                .search-box-top {
                    width: 100%;
                    height: 68rpx;
                    display: flex;
                    align-items: center;
                    .search-box-top-ipt {
                        flex: 1;
                        height: 100%;
                        padding: 0 30rpx;
                        box-sizing: border-box;
                        background: #f7f7f7;
                        border-radius: 4rpx;
                        display: flex;
                        align-items: center;
                        image {
                            width: 36rpx;
                            height: 36rpx;
                            flex-shrink: 0;
                            margin-right: 22rpx;
                        }
                        input {
                            flex: 1;
                            height: 100%;
                            font-size: 26rpx;
                            font-weight: 400;
                            color: #b2b2b2;
                        }
                    }
                    text {
                        flex-shrink: 0;
                        margin-left: 30rpx;
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #025eef;
                    }
                }
                .search-box-total {
                    font-size: 26rpx;
                    font-weight: 400;
                    color: #666666;
                    margin-top: 24rpx;
                }
            }
            .list {
                width: 100%;
                height: 800rpx;
                margin-top: 30rpx;
                padding: 0 !important;
                .item {
                    width: 100%;
                    height: 102rpx;
                    display: flex;
                    align-items: center;
                    border-bottom: 1rpx solid #e5e5e5;
                    .item_a {
                        flex-shrink: 0;
                        width: 36rpx;
                        height: 36rpx;
                        margin-right: 24rpx;
                        image {
                            width: 100%;
                            height: 100%;
                        }
                    }
                    .item_b {
                        flex-shrink: 0;
                        width: 80rpx;
                        height: 80rpx;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        overflow: hidden;
                        margin-right: 24rpx;
                        image {
                            width: 100%;
                            height: 100%;
                        }
                    }
                    .item_c {
                        flex: 1;
                        display: flex;
                        align-items: center;
                        text {
                            &:nth-child(1) {
                                font-size: 30rpx;
                                font-family: PingFangSC, PingFang SC;
                                font-weight: 400;
                                color: #222222;
                            }
                            &:nth-child(2) {
                                font-size: 20rpx;
                                font-family: PingFangSC, PingFang SC;
                                font-weight: 400;
                                color: #999999;
                                padding: 1rpx 4rpx;
                                box-sizing: border-box;
                                background-color: #eeeeee;
                                margin-left: 12rpx;
                            }
                        }
                    }
                }
            }
            .footer1 {
                width: 100%;
                height: 100rpx;
                display: flex;
                align-items: center;
                justify-content: space-between;
                padding: 14rpx 0 0 0;
                box-sizing: border-box;
                .footer_left {
                    flex: 1;
                    display: flex;
                    flex-direction: column;
                    .footer_left_a {
                        font-size: 26rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                    }
                    .footer_left_b {
                        font-size: 24rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #999999;
                    }
                }
                .footer_btn {
                    flex-shrink: 0;
                    width: 216rpx;
                    height: 72rpx;
                    line-height: 72rpx;
                    text-align: center;
                    background: #025eef;
                    border-radius: 8rpx;
                    font-size: 28rpx;
                    font-weight: 600;
                    color: #ffffff;
                }
            }
        }
        .head {
            width: 100%;
            padding: 20rpx 30rpx;
            box-sizing: border-box;
            font-size: 28rpx;
            font-weight: 400;
            color: #666666;
        }
        .list {
            width: 100%;
            padding: 0 30rpx;
            box-sizing: border-box;
            background-color: #ffffff;
            .empty {
                width: 750rpx;
                height: 20rpx;
                background-color: #f7f7f7;
                margin: 0 -30rpx;
            }
            .list_item {
                width: 100%;
                // min-height: 98rpx;
                padding: 30rpx 0;
                box-sizing: border-box;
                display: flex;
                align-items: center;
                justify-content: space-between;
                border-bottom: 1rpx solid #e5e5e5;
                .list_item_label {
                    flex-shrink: 0;
                    display: flex;
                    align-items: center;
                    text {
                        &:nth-child(1) {
                            font-size: 30rpx;
                            font-weight: 400;
                            color: #e42d2d;
                        }
                        &:nth-child(2) {
                            font-size: 30rpx;
                            font-weight: 400;
                            color: #222222;
                        }
                    }
                }
                .list_item_content {
                    flex: 1;
                    height: 100%;
                    margin-left: 30rpx;
                    display: flex;
                    align-items: center;
                    justify-content: flex-end;
                    text {
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #999999;
                        margin-right: 6rpx;
                    }
                    input {
                        width: 100%;
                        height: 100%;
                        text-align: right;
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #222222;
                    }
                }
<<<<<<< HEAD
                let arr = JSON.parse(JSON.stringify(this.withUserList))
                this.personnel.push(arr)
                this.show3 = false
                this.withUserList.name = ''
                this.withUserList.phone = ''
                this.withUserList.idcardType = ''
                this.withUserList.idcardTypeName = ''
                this.withUserList.companyName = ''
                this.withUserList.idcardNo = ''
                this.withUserList.faceImg = ''
                this.withUserList.faceImgUrl = ''
                this.withUserList.imgurl = ''
                this.withUserList.imgurlUrl = ''
            },
            upload(type) {
                this.type = type
                if (type === 'faceImg') {
                    this.$refs.cropper.open()
                    return
                }
                uni.chooseImage({
                    success: (chooseImageRes) => {
                        // if (type === 'faceImg') {
                        //     this.photoSrc = chooseImageRes.tempFilePaths[0];
                        //     this.$refs.tlyPictureCut.showPop();
                        //     return
                        // }
                        uni.showLoading({ title: '上传中', mask: true });
                        for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
                            uni.uploadFile({
                                url: `${this.$baseUrl}public/api/uploadFtp.do`,
                                filePath: chooseImageRes.tempFilePaths[i],
                                name: 'file',
                                formData: {
                                    folderCode: 'MEMBER_IMG'
                                },
                                success: (uploadFileRes) => {
                                    let res = JSON.parse(uploadFileRes.data)
                                    if (type === 'faceImg') {
                                        this.withUserList.faceImg = res.data.halfPath
                                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    } else {
                                        this.withUserList.imgurl = res.data.halfPath
                                        this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    }
                                },
                                complete() {
                                    if (i === chooseImageRes.tempFilePaths.length - 1) {
                                        uni.hideLoading();
                                    }
                                }
                            });
                        }
                    }
                });
            },
            seleIdcard(e) {
                this.withUserList.idcardType = e.value[0].id
                this.withUserList.idcardTypeName = e.value[0].name
                this.show6 = false
            },
            submitCart() {
                if (!this.carName) return uni.showToast({
                    title: '请输入车牌号码',
                    icon: 'none'
                })
                this.cars.push(this.carName)
                this.form1.carNos = this.cars.join(',')
                this.carName = ''
                this.show2 = false
            },
            deleCars(i) {
                this.cars.splice(i, 1)
                this.form1.carNos = this.cars.join(',')
            },
            submitMJ() {
                let arr = []
                let names = []
                this.columns.forEach(item => {
                    if (item.active) {
                        arr.push(item.id)
                        names.push(item.name)
                    }
                })
                if (arr.length === 0) return uni.showToast({
                    title: '请选择门禁',
                    icon: 'none'
                })
                this.form1.doorSelectName = names.join(',')
                this.form1.doors = arr.join(',')
                this.show = false
            },
            seleMJ(i) {
                this.columns.forEach((item,index) => {
                    if (index === i) {
                        item.active = !item.active
                    }
                })
            },
            openLC() {
                if (!this.form1.starttime) return uni.showToast({
                    title: '请先选择入厂时间',
                    icon: 'none'
                })
                this.show5 = true
            },
            setinDate(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'), this.day - 1)
                this.show4 = false
            },
            setoutDate(e) {
                this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
                this.show5 = false
            },
            formatTimeStamp(date) {
                return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g,'/')}`))
            },
            // æŸ¥è¯¢ç”¨æˆ·
            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
                            }
                        })
                    }
                }
            },
            // è¢«æ‹œè®¿äººä¿¡æ¯æ ¡éªŒæ–¹å¼ï¼ˆ0手机号单独校验 1手机号和姓名组合校验)
            getUserValid() {
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'BEVISITED_USER_VALID'
                }).then(res => {
                    if (res.code === 200) {
                        this.verify = res.data.code
                    }
                })
            },
            // èŽ·å–æ˜¯å¦éœ€è¦é€‰æ‹©é—¨ç¦/门禁列表
            getvisit() {
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'SELECT_DOORS_VISIT_REQUIRED'
                }).then(res => {
                    if (res.code === 200) {
                        this.accessControl = res.data.code
                        if (res.data.code === '1') {
                            this.$u.api.deviceRoleList({ type: 1 })
                                .then(device => {
                                    if (device.code === 200) {
                                        if (device.data.length > 0) {
                                            device.data.forEach(item => {
                                                item.active = false
                                            })
                                            this.columns = device.data
                                        }
                                    }
                                })
                        }
                    }
                })
            },
            confirm(e) {
                this.show = false
            }
        }
    }
</script>
<style>
    page {
        background-color: #F7F7F7 !important;
    }
    .u-upload__button {
        margin: 0 !important;
    }
</style>
<style lang="scss" scoped>
    .visit {
        width: 100%;
        .menjin {
            width: 100%;
            .respondent-title {
                width: 100%;
                height: 100rpx;
                line-height: 100rpx;
                text-align: center;
                font-size: 32rpx;
                font-weight: 500;
                color: #222222;
            }
            .list {
                width: 100%;
                height: 400rpx;
                display: flex;
                flex-direction: column;
                .list_item {
                    width: 100%;
=======
                .checkbox_wrap{
>>>>>>> f0f08cc1ff84d45de32d8bff4a40e6a7d0d7a9e6
                    display: flex;
                    align-items: center;
                    .check_item{
@@ -1328,99 +1673,99 @@
                        height: 42rpx;
                        margin-left: 10rpx;
                    }
                }
            }
        }
        .cate {
            width: 100%;
            padding: 30rpx;
            box-sizing: border-box;
            background-color: #ffffff;
            .cate_head {
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .cate_list {
                width: 100%;
                display: flex;
                align-items: center;
                flex-wrap: wrap;
                margin-top: 30rpx;
                .cate_list_item {
                    height: 64rpx;
                    padding: 0 20rpx;
                    box-sizing: border-box;
                    background-color: #eeeeee;
                    border-radius: 4rpx;
                    margin-right: 20rpx;
                    margin-bottom: 20rpx;
                    display: flex;
                    align-items: center;
                    &:last-child {
                        margin-right: 0 !important;
                    }
                    text {
                        font-size: 26rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                        margin-right: 30rpx;
                    }
                }
            }
            .cate_add {
                width: 200rpx;
                height: 50rpx;
                display: flex;
                align-items: center;
                justify-content: center;
                background: rgba(2, 94, 239, 0);
                border-radius: 25rpx;
                border: 1rpx solid #4c99a8;
                font-size: 22rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 400;
                margin-top: 20rpx;
                color: #4c99a8;
                margin: 0 auto;
            }
        }
        .zw {
            width: 100%;
            height: calc(env(safe-area-inset-bottom) + 118rpx);
        }
        .footer {
            width: 100%;
            padding: 0 30rpx;
            padding-bottom: env(safe-area-inset-bottom);
            box-sizing: border-box;
            margin-top: 80rpx;
            // position: fixed;
            // left: 0;
            // bottom: 30rpx;
            .footer_btn {
                width: 100%;
                height: 88rpx;
                line-height: 88rpx;
                text-align: center;
                background: #4c99a8;
                border-radius: 44rpx;
                font-size: 32rpx;
                font-weight: 600;
                color: #ffffff;
            }
        }
    }
                }
            }
        }
        .cate {
            width: 100%;
            padding: 30rpx;
            box-sizing: border-box;
            background-color: #ffffff;
            .cate_head {
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .cate_list {
                width: 100%;
                display: flex;
                align-items: center;
                flex-wrap: wrap;
                margin-top: 30rpx;
                .cate_list_item {
                    height: 64rpx;
                    padding: 0 20rpx;
                    box-sizing: border-box;
                    background-color: #eeeeee;
                    border-radius: 4rpx;
                    margin-right: 20rpx;
                    margin-bottom: 20rpx;
                    display: flex;
                    align-items: center;
                    &:last-child {
                        margin-right: 0 !important;
                    }
                    text {
                        font-size: 26rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                        margin-right: 30rpx;
                    }
                }
            }
            .cate_add {
                width: 200rpx;
                height: 50rpx;
                display: flex;
                align-items: center;
                justify-content: center;
                background: rgba(2, 94, 239, 0);
                border-radius: 25rpx;
                border: 1rpx solid #4c99a8;
                font-size: 22rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 400;
                margin-top: 20rpx;
                color: #4c99a8;
                margin: 0 auto;
            }
        }
        .zw {
            width: 100%;
            height: calc(env(safe-area-inset-bottom) + 118rpx);
        }
        .footer {
            width: 100%;
            padding: 0 30rpx;
            padding-bottom: env(safe-area-inset-bottom);
            box-sizing: border-box;
            margin-top: 80rpx;
            // position: fixed;
            // left: 0;
            // bottom: 30rpx;
            .footer_btn {
                width: 100%;
                height: 88rpx;
                line-height: 88rpx;
                text-align: center;
                background: #4c99a8;
                border-radius: 44rpx;
                font-size: 32rpx;
                font-weight: 600;
                color: #ffffff;
            }
        }
    }
</style>
h5/pages/wdata/detail.vue
@@ -102,6 +102,14 @@
            </view>
        </view>
        <view v-if="info.logisticsStatus == 0" @click="startTrans" class="start_btn">启运</view>
        <!--  -->
        <view v-if="showTip" class="tip_wrap">
            <view class="title">提示</view>
            <view class="text">车辆刚启运,暂无法进行到</view>
            <view class="text">货操作,请5分钟后再试</view>
            <view class="btn" @click="showTip = false">我知道了</view>
        </view>
        <view  v-if="showTip" class="shade"></view>
    </view>
</template>
@@ -110,7 +118,6 @@
        putTaskDetail,
        putDriverArrival,
        putDriverStart,
    } from '@/api'
    export default {
        data() {
@@ -118,7 +125,8 @@
                info: {
                    productDetails: [],
                    transportStop: []
                }
                },
                showTip: false
            };
        },
        onLoad(options) {
@@ -143,7 +151,10 @@
                                id: this.id,
                                optType: 0
                            }).then((ress) => {
                                if (ress.code == 200) {
                                if (ress.code == 200) {
                                    const transportList = uni.getStorageSync('transportList') || []
                                    transportList.push({ id: this.id, time: new Date().getTime() })
                                    uni.setStorageSync('transportList', transportList)
                                    this.showToast('启运成功')
                                    this.getDetail()
                                }
@@ -157,7 +168,16 @@
                    title: '提示',
                    content: '确认到货么?',
                    success: (res) => {
                        if (res.confirm) {
                        if (res.confirm) {
                            const transportList = uni.getStorageSync('transportList') || []
                            const item = transportList.find(i => i.id == this.id)
                            if(item && item.id){
                                const timeN = new Date().getTime() - item.time
                                if(timeN < 5 * 60 * 1000){
                                    this.showTip = true
                                    return
                                }
                            }
                            putDriverArrival({
                                stopNumber,
                                optType: 1,
@@ -179,8 +199,52 @@
<style lang="scss">
    page {
        background-color: #f7f7f7;
    }
    .shade{
        width: 100vw;
        height: 100vh;
        background: #000000;
        opacity: 0.4;
        position: fixed;
        left: 0;
        top: 0;
        z-index: 99;
    }
    .tip_wrap{
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        margin: auto;
        width: 560rpx;
        height: 328rpx;
        background: #FFFFFF;
        border-radius: 24rpx;
        text-align: center;
        z-index: 999;
        .title{
            font-weight: 500;
            font-size: 32rpx;
            color: #111111;
            margin: 40rpx 0 30rpx;
        }
        .text{
            font-weight: 400;
            font-size: 28rpx;
            color: #333333;
        }
        .btn{
            margin-top: 32rpx;
            height: 100rpx;
            display: flex;
            justify-content: center;
            align-items: center;
            border-top: 1rpx solid #E5E5E5;
            color: #279BAA;
            font-size: 32rpx;
        }
    }
    .head_bg {
        width: 750rpx;
        height: 240rpx;
h5/utils/config.js
@@ -1,8 +1,8 @@
// export const baseUrl = 'zhyq_interface/'
export const baseUrl = 'zhyq_interface/'
// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
// export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/'
// export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/'
export const app_url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
screen/package-lock.json
ÎļþÌ«´ó
screen/src/assets/images/task/ic_close@2x.png
screen/src/assets/images/task/ic_yuetai@2x.png
screen/src/assets/images/task/jiankong_bg2@2x.png
screen/src/views/TaskEfficiency.vue
@@ -150,7 +150,7 @@
              <div class="line">
                <div class="dian"></div>
                <div class="la">作业类型:</div>
                <div class="val">{{ workModalParam.workType == 0 ? '卸货' : '装货' }}</div>
                <div class="val">{{ workModalParam.workType == 0 ? '卸货' : workModalParam.workType == 1 ? '装货' : ''}}</div>
              </div>
              <div class="line">
                <div class="dian"></div>
@@ -162,8 +162,29 @@
                <div class="la">预计完成:</div>
                <div class="val">{{ workModalParam.finishTimeStr }}</div>
              </div>
              <div class="priview" @click="videoPri">查看实时画面</div>
            </div>
            <div class="modal_bg" v-if="showWorkModal" @click="closeModal"></div>
            <div v-show="showJk" class="camera_wrap">
              <img class="bg" src="@/assets/images/task/jiankong_bg2@2x.png" alt="">
              <div class="head">
                <div class="left">
                  <img class="icon" src="@/assets/images/task/ic_yuetai@2x.png" alt="">
                  <div class="name">{{ workModalParam.platformName }}</div>
                  <span v-if="workModalParam.carNo">{{ workModalParam.carNo }} | {{ workModalParam.workType == 0 ? '卸货'
                    : workModalParam.workType == 1 ? '装货' : '' }}</span>
                </div>
                <div class="right">
                  <span>{{ workModalParam.statusTemp }} <span v-if="workModalParam.status == 0"> | é¢„计完成时间:{{
                    workModalParam.finishTimeStr }}</span></span>
                  <img @click="closeVideo" class="icon" src="@/assets/images/task/ic_close@2x.png" alt="">
                </div>
              </div>
              <div class="content">
                <Video v-if="showJk && videoParam && videoParam.deviceId" :href="videoParam.videoPluginUrl"
                  :indexCode="videoParam.deviceId" />
              </div>
            </div>
          </div>
          <div class="center_box_two">
            <!-- <div v-if="data4.videoIndexCodes && data4.videoIndexCodes.length > 0" class="videos">
@@ -297,7 +318,7 @@
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ref, onMounted, nextTick } from 'vue'
import VScaleScreen from 'v-scale-screen'
import Percent from '@/components/percent.vue'
import dayjs from 'dayjs'
@@ -309,6 +330,7 @@
import 'swiper/css/swiper.min.css'
import Swiper from 'swiper'
import Videos from './videoUrl/Videos.vue'
import Video from './videoUrl/Video.vue'
import {
  cnplatformGroupFinish,
  cnplatformDuration,
@@ -791,7 +813,9 @@
}
const showWorkModal = ref(false)
const showJk = ref(false)
const workModalParam = ref({})
const videoParam = ref({})
// point_icon
const pointList = [
  { left: 230, top: 190, left2: 290, top2: 190, name: '出库月台3' },
@@ -806,8 +830,22 @@
  { left: 590, top: 75, left2: 650, top2: 190, name: '1095整托盘入库' },
  { left: 600, top: 80, left2: 660, top2: 190, name: '1099整托盘入库' },
  { left: 850, top: 60, left2: 520, top2: 190, name: '市公司月台' },
  { left: 540, top: 136, left2: 600, top2: 136, name: '老库入库' },
  { left: 560, top: 132, left2: 620, top2: 132, name: '老库出库' },
]
const videoPri = () => {
  showJk.value = true
  nextTick(() => {
    videoParam.value = { ...workModalParam.value }
    // console.log('workModalParam', videoParam.value)
  })
}
const closeVideo = () => {
  workModalParam.value = {}
  videoParam.value = {}
  showJk.value = false
}
const platformClick = (val) => {
  const index = pointList.findIndex(i => i.name == val.platformName)
@@ -1130,6 +1168,75 @@
      align-items: center;
      position: relative;
      .camera_wrap {
        position: absolute;
        top: 0;
        left: 50%;
        transform: translate(-50%, 0);
        width: 672px;
        height: 568px;
        z-index: 999;
        font-size: 14px;
        color: #D2E0FF;
        display: flex;
        flex-direction: column;
        .content {
          flex: 1;
          /* height: calc( 100% - 30px ); */
          padding: 16px 20px 32px 20px;
          .video {
            width: 100%;
            height: 100%;
          }
        }
        .head {
          height: 56px;
          display: flex;
          align-items: center;
          justify-content: space-between;
          padding: 0 30px;
          .right {
            display: flex;
            align-items: center;
            .icon {
              width: 24px;
              margin-left: 20px;
              cursor: pointer;
            }
          }
          .left {
            display: flex;
            align-items: center;
            .name {
              font-weight: bold;
              font-size: 16px;
              color: #01D9FE;
              margin-right: 20px;
            }
            .icon {
              width: 16px;
              margin-right: 8px;
            }
          }
        }
        .bg {
          position: absolute;
          left: 0;
          top: 0;
          width: 100%;
          height: 100%;
        }
      }
      .point_icon {
        position: absolute;
        left: 850px;
@@ -1158,6 +1265,15 @@
        left: 850px;
        top: 60px;
        z-index: 99999999;
        .priview {
          position: absolute;
          bottom: 24px;
          right: 40px;
          font-size: 12px;
          color: #01D9FE;
          cursor: pointer;
        }
        .head {
          display: flex;
@@ -1221,8 +1337,8 @@
        position: fixed;
        left: 0;
        top: 0;
        width: 100vw;
        height: 100vh;
        width: 100%;
        height: 100%;
        /* background-color: rgba(0,0,0,.1); */
      }
    }
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -649,7 +649,7 @@
            //查询是否有权限
            s.setHasRole(getHasRoleByParam(s,userInfo,adminList));
          /*  //服务项
            /*  //服务项
            MPJLambdaWrapper<ProjectRel> prquery = new MPJLambdaWrapper<>();
            prquery.selectAll(ProjectRel.class);
            prquery.eq(ProjectRel::getIsdeleted, MeetConstants.ZERO);
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ProblemLog.java
@@ -35,7 +35,7 @@
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @ExcelColumn(name="答题时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
@@ -99,5 +99,4 @@
    @ApiModelProperty(value = "openid")
    @ExcelColumn(name="openid")
    private String openid;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProblemLogVo.java
@@ -15,25 +15,26 @@
public class ProblemLogVo {
    @ApiModelProperty(value = "答题人姓名")
    @ExcelColumn(name="答题人姓名")
    @ExcelColumn(name="答题人",width = 16)
    private String name;
    @ApiModelProperty(value = "答题人手机后")
    @ExcelColumn(name="答题人手机后")
    @ExcelColumn(name="联系电话",width = 16)
    private String phone;
    @ApiModelProperty(value = "组织名称")
    @ExcelColumn(name="组织名称")
    @ExcelColumn(name="组织名称",width = 16)
    private String companyName;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客  2内部人员")
    @ExcelColumn(name="类型")
    @ExcelColumn(name="用户类型",width = 10)
    private String typeName;
    @ApiModelProperty(value = "答题分数")
    @ExcelColumn(name="答题分数")
    @ExcelColumn(name="得分",width = 10)
    private BigDecimal score;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间",dateFormat="yyyy-MM-dd HH:mm")
    @ExcelColumn(name="答题时间",dateFormat="yyyy-MM-dd HH:mm",width = 16)
    private Date createDate;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java
@@ -44,4 +44,9 @@
    @ApiModelProperty(value = "月台状态:0=作业中;1=空闲中;2=作业超时;3=叫号中")
    private Integer status;
    @ApiModelProperty(value = "监控视频设备id")
    private String  deviceId;
    @ApiModelProperty(value = "监控视频播放插件地址")
    private String  videoPluginUrl;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
@@ -27,6 +27,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -139,7 +140,7 @@
            for (ProblemLog obj:problemLogIPage.getRecords()) {
                ProblemLogVo vo = new ProblemLogVo();
                vo.setName(obj.getName());
                vo.setScore(obj.getScore());
                vo.setScore(Objects.isNull(obj.getScore())?new BigDecimal("100"):obj.getScore());
                vo.setPhone(obj.getPhone());
                vo.setCompanyName(obj.getCompanyName());
                if(null != obj.getType()) {
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -91,6 +91,8 @@
    private PlatformGroupMapper platformGroupMapper;
    @Autowired
    private TmsService tmsService;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Value("${debug_model}")
    private Boolean isDebug;
@@ -1908,6 +1910,10 @@
                    .orderByDesc(PlatformJob::getStatus )
                    .orderByAsc(PlatformJob::getId )
            );
            List<PlatformDevice> platformDevices = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda().eq(PlatformDevice::getType,Constants.ONE)
                    .eq(PlatformDevice::getIsdeleted,Constants.ZERO).isNotNull(PlatformDevice::getDeviceId));
            String videoUrl = getVideoUrl();
            //月台状态:0=作业中;1=空闲中;2=作业超时;3=叫号
            for(Platform model : platformList){
                PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO();
@@ -1915,6 +1921,13 @@
                platformDurationVO.setPlatformId(model.getId());
                platformDurationVO.setPlatformCode(model.getCode());
                platformDurationVO.setPlatformSort(model.getSortnum());
                if(CollectionUtils.isNotEmpty(platformDevices)){
                    List<PlatformDevice> deviceList = platformDevices.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),model.getId())).collect(Collectors.toList());
                    if (CollectionUtils.isNotEmpty(deviceList)) {
                        platformDurationVO.setDeviceId(deviceList.get(Constants.ZERO).getDeviceId());
                        platformDurationVO.setVideoPluginUrl(videoUrl);
                    }
                }
                PlatformJob job = getJobFromListById(model.getId(),jobList);
                if(job != null){
                    if(Constants.equalsInteger(job.getType(),Constants.ONE) || Constants.equalsInteger(job.getType(),Constants.THREE)){