jiangping
2024-05-28 d154966cc9492a30c47809aa2824ba61d18e6fef
Merge remote-tracking branch 'origin/master'
已修改10个文件
已重命名1个文件
249 ■■■■ 文件已修改
h5/api/visitor.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/applicationRecord/applicationRecord.vue 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/appointmentDetails/appointmentDetails.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login/login.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/notice/notice.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorApplication/visitorApplication.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/redirect.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/store/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/visitor.js
@@ -40,3 +40,11 @@
    data
  })
}
// è®¿å®¢è®°å½•详情
export const getVisitedDetail = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/detail',
    method: 'get',
    data
  })
}
h5/pages/applicationRecord/applicationRecord.vue
@@ -2,41 +2,66 @@
  <view class="box">
    <scroll-view scroll-x class="box_head">
      <view class="box_head_list">
        <view class="box_head_item active">全部</view>
        <view class="box_head_item">待审核</view>
        <view class="box_head_item">审核通过</view>
        <view class="box_head_item">审核驳回</view>
        <view
          class="box_head_item"
          :class="{ active: status == '' }"
          @click="tabsClick('')"
          >全部</view
        >
        <view
          class="box_head_item"
          @click="tabsClick('0')"
          :class="{ active: status == '0' }"
          >待审核</view
        >
        <view
          class="box_head_item"
          @click="tabsClick('2')"
          :class="{ active: status == '2' }"
          >审核通过</view
        >
        <view
          class="box_head_item"
          @click="tabsClick('3')"
          :class="{ active: status == '3' }"
          >审核驳回</view
        >
      </view>
    </scroll-view>
    <view class="box_list">
      <view class="box_list_item" v-for="(item, index) in 3" :key="index">
      <view
        @click="handleDetail(item.id)"
        class="box_list_item"
        v-for="(item, index) in list"
        :key="index"
      >
        <view class="box_list_item_head">
          <text>丁恩凯的劳务入厂申请</text>
          <text class="loading">待审核</text>
          <text>{{ item.name }}的劳务入厂申请</text>
          <text class="loading">{{ statusMap[item.status] }}</text>
        </view>
        <view class="box_list_item_nr">
          <view class="box_list_item_nr_item">
            <text>被访问人:</text>
            <text>人事部-王亚蓝</text>
            <text
              >{{ item.receptMemberDepartment }}-{{
                item.receptMemberName
              }}</text
            >
          </view>
          <view class="box_list_item_nr_item">
            <text>进厂时间:</text>
            <text>12-12 09:00</text>
            <text>{{ item.starttime }}</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>离厂时间:</text>
            <text>12-12 12:00</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>入厂人数:</text>
            <text>10</text>
            <text>{{ item.endtime }}</text>
          </view>
          <view class="box_list_item_nr_item">
            <text>来访事由:</text>
            <text>业务来往</text>
            <text>{{ item.reason }}</text>
          </view>
          <view class="box_list_item_nr_x"></view>
          <view class="box_list_item_nr_text"> 2023-12-12 09:00提交 </view>
          <view class="box_list_item_nr_text">{{ item.createDate }} æäº¤</view>
        </view>
      </view>
    </view>
@@ -49,22 +74,62 @@
  data() {
    return {
      pagination: {
        page: 1,
        page: 0,
        capacity: 10
      },
      list: []
      list: [],
      total: 0,
      status: '',
      statusMap: {
        0: '待审核',
        1: '已提交',
        2: '审核通过',
        3: '审核不通过',
        4: '取消',
        5: '下发成功',
        6: '下发失败',
      }
    }
  },
  onLoad() {
    this.getList()
  },
  onReachBottom() {
    if (this.total > 10) {
      this.getList()
    }
  },
  methods: {
    handleDetail(id) {
      uni.navigateTo({
        url: "/pages/appointmentDetails/appointmentDetails?id=" + id
      })
    },
    tabsClick(val) {
      this.pagination.page = 0
      this.status = val
      this.getList()
    },
    getList() {
      const { pagination } = this
      const { pagination, status, list } = this
      pagination.page = pagination.page + 1
      getVisitedRecord({
        pageWrap: { ...pagination }
        ...pagination,
        model: {
          openid: this.$store.state.openId,
          status
        },
      }).then(res => {
        this.list = res.data
        if (res.data.records.length > 0) {
          if(pagination.page === 1){
            this.list = res.data.records
          }else{
            this.list = [...list, ...res.data.records]
          }
          this.total = res.data.total
        }
      })
    }
h5/pages/appointmentDetails/appointmentDetails.vue
@@ -1,14 +1,16 @@
<template>
    <view class="box">
        <view class="head_wrap head_success" v-if="info.status == 1">
    <view class="head_wrap head_success" v-if="info.status == 2">
            <view class="h1">访客预约审核通过</view>
            <view class="h2">您的来访申请已审核通过,请在访客机签到入厂。如遇特殊情况,可联系被访人或安保人员</view>
      <view class="h2"
        >您的来访申请已审核通过,请在访客机签到入厂。如遇特殊情况,可联系被访人或安保人员</view
      >
        </view>
        <view class="qr_wrap" v-if="info.status == 1">
    <view class="qr_wrap" v-if="info.status == 2">
            <canvas class="box_head_qrcode" canvas-id="img"></canvas>
            <view class="text">使用访客机扫码签到</view>
        </view>
        <view class="head_wrap head_padding" v-if="info.status == 2">
    <view class="head_wrap head_padding" v-if="info.status == 0">
            <view class="h1">访客预约待审核</view>
            <view class="h2">您的预约单已提交审核,请等待被访人审核</view>
        </view>
@@ -18,10 +20,15 @@
        </view>
        <view class="box_list">
            <view class="box_list_label">拜访信息</view>
            <view class="box_list_tips" v-if="info.status === 2">请注意查看出入门禁下发情况,如若下发失败需重新申请</view>
      <view class="box_list_tips" v-if="info.status == 6 || info.status == 3"
        >请注意查看出入门禁下发情况,如若下发失败需重新申请</view
      >
            <view class="box_list_item">
                <view class="box_list_item_label">被访人员:</view>
                <view class="box_list_item_val">{{info.visitUserName}}</view>
        <view class="box_list_item_val"
          >{{ info.visitUserCompany
          }}{{ info.visitUserName ? "-" + info.visitUserName : "" }}</view
        >
            </view>
            <!-- <view class="box_list_item">
                <view class="box_list_item_label">车牌号:</view>
@@ -36,23 +43,20 @@
                <view class="box_list_item_val">{{info.visitTime}}</view>
            </view>
            <view class="box_list_item">
                <view class="box_list_item_label">访问门禁:</view>
                <view class="box_list_item_val" v-if="info.doorGroupName && info.doorGroupName.length > 0">{{info.doorGroupName.join('、')}}</view>
        <view class="box_list_item_label">访客信息:</view>
        <view class="box_list_item_val">{{ info.name }} {{ info.phone }}</view>
            </view>
            <view class="box_list_item">
                <view class="box_list_item_label">主访客:</view>
                <view class="box_list_item_val">
                    {{info.name}} {{info.phone}}
        <view class="box_list_item_label">施工人员:</view>
        <view class="box_list_item_val">{{ info.type == 0 ? '否' : '是'}}</view>
                </view>
            <view class="box_list_item" v-if="info.type == '1'">
        <view class="box_list_item_label">施工内容:</view>
        <view class="box_list_item_val">{{ info.constructionReason}}</view>
            </view>
            <view class="box_list_item" v-for="(item, index) in info.withVisitsList" :key="index">
                <view class="box_list_item_label">随访人员{{index + 1}}:</view>
                <view class="box_list_item_val">
                    {{item.name}} {{item.phone}}
                    <view class="box_list_item_val_btn" v-if="[2,5,7,8,9].includes(item.status)">
                        <u-button text="查看二维码" size="mini" @click="seeQrCode(item)" type="primary"></u-button>
                    </view>
                </view>
      <view class="box_list_item">
        <view class="box_list_item_label">随行车辆:</view>
        <view class="box_list_item_val">{{ info.carNos }}</view>
            </view>
        </view>
        <u-popup :show="show" mode="center" @close="close">
@@ -65,19 +69,17 @@
<script>
    import wxcode from 'uniapp-qrcode'
    import { visitorSubDetail } from '@/api'
import { getVisitedDetail } from '@/api'
    export default {
        data() {
            return {
                info: {
                    status: 1
                },
      info: {},
                show: false
            };
    }
        },
        onLoad(option) {
            // this.$u.api.detail({ id: option.id })
    this.getDetail(option.id)
            // visitorSubDetail({ id: option.id })
            //     .then(res => {
            //         if (res.code === 200) {
@@ -89,10 +91,21 @@
            //             }
            //         }
            //     })
        },
        methods: {
            close() {
                this.show = false
    },
    getDetail(id) {
      getVisitedDetail({ id }).then(res => {
        this.info = res.data
        if (res.data.qrcode) {
          this.$nextTick(() => {
            wxcode.qrcode('img', res.data.qrcode, 320, 320)
          })
        }
      })
            },
            seeQrCode(code) {
                if (code.qrcode) {
@@ -132,10 +145,11 @@
            .box_head_qrcode {
                width: 320rpx;
                height: 320rpx;
            margin: 20rpx auto;
            }
            .text{
                font-size: 30rpx;
                color: #279BAA;
      color: #279baa;
                padding: 20rpx 0 30rpx;
            }
        }
@@ -153,27 +167,27 @@
            }
        }    
        .head_padding{
            background: #279BAA;
    background: #279baa;
            .h1{
                color: #FFFFFF;
      color: #ffffff;
            }
            .h2{
                color: #FFFFFF;
      color: #ffffff;
            }
        }
        .head_error{
            background: #FDEDED;
    background: #fdeded;
            .h1{
                color: #ED4545;
      color: #ed4545;
            }
            .h2{
                color: #333333;
            }
        }
        .head_success{
            background: #E8F4F6;
    background: #e8f4f6;
            .h1{
                color: #279BAA;
      color: #279baa;
            }
            .h2{
                color: #333333;
@@ -194,7 +208,7 @@
                background-color: rgba(224, 49, 42, 0.06);
                font-weight: 400;
                font-size: 24rpx;
                color: #E0312A;
      color: #e0312a;
                border-radius: 4rpx;
                margin: 30rpx 0;
            }
h5/pages/login/login.vue
@@ -62,14 +62,10 @@
        title: '密码不能为空',
        icon: 'none'
      })
      const appID = 'wx4d7c10bdec51942b'
      const AppSecret = '922c93596d134fedf5bd22a9354b3bfe'
      // const scope = 'snsapi_userinfo'
      let uri = encodeURIComponent('https://xiaopiqiu2.natapp1.cc')
      let authURL =
        `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
      window.location.href = authURL
      loginPost(form).then(res => {
      loginPost({
        ...form,
        openId: this.$store.state.openId
      }).then(res => {
        console.log('res', res);
      })
    }
h5/pages/notice/notice.vue
@@ -25,8 +25,20 @@
  },
  onLoad() {
    this.getInfo()
    if(!this.$store.state.openId){
      this.initToken()
    }
  },
  methods: {
    initToken() {
      const appID = 'wxac2a80c2144c4ee0'
      // const AppSecret = '922c93596d134fedf5bd22a9354b3bfe'
      let uri = encodeURIComponent('http://xiaopiqiu2.natapp1.cc/static/redirect.html')
      let authURL =
        `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
      window.location.href = authURL
    },
    getInfo() {
      // å…¥åœºé¡»çŸ¥è¯¦æƒ…
      getSystemDictData({
h5/pages/visitorApplication/visitorApplication.vue
@@ -83,7 +83,7 @@
            <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;" />
h5/static/redirect.html
ÎļþÃû´Ó h5/redirect.html ÐÞ¸Ä
@@ -6,7 +6,7 @@
  <script>
    var p = location.href.split("?")
    // window.location.href = 'https://dmtest.ahapp.net/hsvisit_h5/#/pages/notice/notice?' + p[1]
    window.location.href = 'https://xiaopiqiu2.natapp1.cc/#/pages/notice/notice?' + p[1]
    window.location.href = 'http://xiaopiqiu2.natapp1.cc/#/pages/notice/notice?' + p[1]
  </script>
</head>
<body>
h5/store/index.js
@@ -18,7 +18,7 @@
const store = new Vuex.Store({
    state: {
        openId: openId || '',
        openId: openId || '061kuG0006hxcS13TT200w9VIp4kuG09',
        member: member || null,
        statusbarHeight: statusbarHeight || '0',
        navHeight: navHeight || '0',
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
@@ -67,8 +67,13 @@
    @ApiModelProperty(value = "访客二维码")
    private String qrcode;
    @ApiModelProperty(value = "类型 0非施工人员访客申请 1施工人员访客申请 2访客报备", example = "1")
    private Integer type;
    @ApiModelProperty(value = "施工事由")
    private String constructionReason;
    @ApiModelProperty(value = "审批信息数据")
    @TableField(exist = false)
    private ApproveDataVO approveDateVO;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -309,8 +309,10 @@
        if (!model.getCheckUserId().equals(hiddenDanger.getEditor())) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"处理人非当前人员!");
        }
        if(!(hiddenDanger.getStatus().equals(Constants.ONE)||hiddenDanger.getStatus().equals(Constants.TWO))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态错误!");
        }
        //整改前文件
        if(hiddenDanger.getStatus().equals(Constants.ONE)){
            List<Multifile> beforList = hiddenDanger.getDealBeforeFileList();
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(beforList)){
                for (int i = 0; i < beforList.size(); i++) {
@@ -324,7 +326,7 @@
                    multifileMapper.insert(multifile);
                }
            }
        }
        if(hiddenDanger.getStatus().equals(Constants.ONE)){
        List<Multifile> afterList = hiddenDanger.getDealAfterFileList();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(afterList)){
            for (int i = 0; i < afterList.size(); i++) {
@@ -338,6 +340,7 @@
                multifileMapper.insert(multifile);
            }
        }
        }
        hiddenDanger.setEditor(hiddenDanger.getLoginUserInfo().getId());
        hiddenDanger.setEditDate(new Date());
        hiddenDangerMapper.updateById(hiddenDanger);
@@ -347,7 +350,7 @@
        hiddenDangerLog.setCreateDate(new Date());
        hiddenDangerLog.setCreator(hiddenDanger.getCreator());
        hiddenDangerLog.setHiddenDangerId(hiddenDanger.getId());
        hiddenDangerLog.setTitle(hiddenDanger.getStatus().equals(Constants.ONE)?"隐患处理":"隐患转交");
        hiddenDangerLog.setTitle(hiddenDanger.getStatus().equals(Constants.ONE)?"隐患处理":"隐患退回");
        hiddenDangerLog.setObjType(hiddenDanger.getStatus().equals(Constants.ONE)?Constants.FOUR:Constants.TWO);
        hiddenDangerLogMapper.insert(hiddenDangerLog);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -238,7 +238,7 @@
                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
        }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
            visits.setStatus(Constants.VisitStatus.pass);
            visits.setStatus(Constants.VisitStatus.waitCheck);
            visitsMapper.updateById(visits);
            approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
        }else{
@@ -1143,6 +1143,8 @@
        queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(pageWrap.getModel().getType()!=null,Visits::getType,pageWrap.getModel().getType());
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Visits::getType,pageWrap.getModel().getType());
        queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getOpenid()),Visits::getOpenid,pageWrap.getModel().getOpenid());
        queryWrapper.eq(StringUtils.isBlank(pageWrap.getModel().getOpenid()),"1","2");
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Visits::getName,pageWrap.getModel().getName())
                .or().like(Visits::getPhone,pageWrap.getModel().getName()))
                .eq(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Visits::getIdcardNo,DESUtil.encrypt(Constants.EDS_PWD, pageWrap.getModel().getIdcardNo()))
@@ -1240,6 +1242,8 @@
        visitDetailVO.setName(visits.getName());
        visitDetailVO.setCompanyName(visits.getCompanyName());
        visitDetailVO.setFaceImg(visits.getFaceImg());
        visitDetailVO.setType(visits.getType());
        visitDetailVO.setConstructionReason(visits.getConstructionReason());
        visitDetailVO.setImgUrl(visits.getImgurl());
        visitDetailVO.setIdCardDecode(visits.getIdcardDecode());
        visitDetailVO.setPrefix(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +