jiangping
2024-10-15 00f774f72e2f607b4da23d7183ff4db3bc8c6cb3
Merge remote-tracking branch 'origin/master'
已修改23个文件
1052 ■■■■ 文件已修改
admin/.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/visits.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarsWindow.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPlatformApproveTemplWindow.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/approvalConfiguration.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/approvalReport.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/carEvent.vue 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceEvent.vue 181 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/retention.vue 127 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visits.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/index.vue 304 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/components/OperaBookingsWindow.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprConfig.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/leaveAuth.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/subscribe.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/queueUp.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/dangetDetail.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/driverDetail.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/index.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/visReportDetail.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/visSubDetail.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/cars.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/manager.vue 146 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -2,7 +2,7 @@
NODE_ENV = 'development'
VUE_APP_API_URL  = 'http://localhost:10010'
# VUE_APP_API_URL  = 'http://192.168.0.139:10010'
# VUE_APP_API_URL  = 'http://192.168.0.107:10010'
VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
# VUE_APP_API_URL  = 'https://dmtest.ahapp.net/antai_admin_interface/'
admin/src/api/business/visits.js
@@ -21,6 +21,10 @@
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/visits/create', data)
}
// 离场
export function level (id) {
  return request.get('/visitsAdmin/cloudService/business/staging/level?visitId=' +id)
}
// 修改
export function updateById (data) {
admin/src/components/business/OperaCarsWindow.vue
@@ -1,10 +1,11 @@
<template>
  <GlobalWindow :title="title" width="500px" @close="close" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
  <GlobalWindow :title="title" width="500px" @close="close" :visible.sync="visible" :confirm-working="isWorking"
    @confirm="confirm">
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="车牌号" prop="code">
        <el-input v-model="form.code" placeholder="请输入车牌号" v-trim />
      </el-form-item>
      <el-form-item label="车辆类型" prop="type">
      <el-form-item label="业务类型" prop="type">
        <el-radio-group v-model="form.type">
          <el-radio :label="0">安泰公务车</el-radio>
          <el-radio :label="1">安泰物流车</el-radio>
@@ -66,7 +67,7 @@
        code: [{ required: true, message: '请输入车牌号' }],
        groupId: [{ required: true, message: '请选择组织' }],
        type: [
          { required: true, message: '请选择车辆类型' }
          { required: true, message: '请选择业务类型' }
        ]
      }
    }
@@ -108,9 +109,9 @@
    confirm() {
      console.log('form', this.form.cateId)
      const { form } = this
      if(form.cateId && form.cateId.length == 2){
      if (form.cateId && form.cateId.length == 2) {
      }else{
      } else {
        return Message.error('请选择二级分类')
      }
      this.$refs['form'].validate((valid) => {
admin/src/components/business/OperaPlatformApproveTemplWindow.vue
@@ -207,7 +207,7 @@
      activeType: '6',
      subLoading: false,
      apprList: [
        { remark: '审批人', active: false, memberType: 1, type: '1', objIds: [] },
        { remark: '审批人', active: false,approveType: 0, memberType: 1, type: '1', objIds: [] },
        { remark: '抄送人', active: false, type: '1', objIds: [] }
      ],
      activeIndex: 0,
@@ -230,7 +230,7 @@
      this.getfindCompanyTreePage()
      this.apprList = [
        { remark: '审批人', active: false, type: '0', memberType: 1, objIds: [] },
        { remark: '抄送人', active: false, type: '1', objIds: [] }
        { remark: '抄送人', active: false,approveType: 0, type: '1', objIds: [] }
      ]
      this.param = {}
      this.searchForm = {}
@@ -313,7 +313,7 @@
      this.activeIndex = 0
    },
    handleAddAppr() {
      this.apprList.splice(this.apprList.length - 1, 0, { remark: '审批人', active: false, memberType: 1, type: 0, objIds: [] })
      this.apprList.splice(this.apprList.length - 1, 0, { remark: '审批人',approveType: 0, active: false, memberType: 1, type: 0, objIds: [] })
      // this.apprList.push({ remark: '审批人', active: false, type: '0' })
    },
    // 获取组织树
admin/src/views/business/approvalConfiguration.vue
@@ -384,7 +384,7 @@
      this.activeIndex = 0
    },
    handleAddAppr () {
      this.apprList.splice(this.apprList.length - 1, 0, { remark: '审批人', active: false, type: 0, objIds: [] })
      this.apprList.splice(this.apprList.length - 1, 0, { remark: '审批人',approveType: 0, active: false, type: 0, objIds: [] })
      // this.apprList.push({ remark: '审批人', active: false, type: '0' })
    },
admin/src/views/business/approvalReport.vue
@@ -370,7 +370,7 @@
      this.activeIndex = 0
    },
    handleAddAppr () {
      this.apprList.splice(this.apprList.length - 2, 0, { remark: '审批人', active: false, type: 0, objIds: [] })
      this.apprList.splice(this.apprList.length - 2, 0, { remark: '审批人',approveType: 0, active: false, type: 0, objIds: [] })
      // this.apprList.push({ remark: '审批人', active: false, type: '0' })
    },
admin/src/views/business/carEvent.vue
@@ -1,39 +1,21 @@
<template>
  <TableLayout :permissions="['business:carevent:query']">
    <!-- 搜索表单 -->
    <el-form
      ref="searchForm"
      slot="search-form"
      :model="searchForm"
      label-width="100px"
      inline
    >
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="车牌号" prop="plateNos">
        <el-input
          v-model="searchForm.plateNos"
          placeholder="请输入车牌号"
          @keypress.enter.native="search"
        ></el-input>
        <el-input v-model="searchForm.plateNos" placeholder="请输入车牌号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="姓名/手机号" prop="keyWords">
        <el-input
          v-model="searchForm.keyWords"
          placeholder="请输入姓名/手机号"
          @keypress.enter.native="search"
        ></el-input>
        <el-input v-model="searchForm.keyWords" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="组织" prop="companyName">
        <el-input
          v-model="searchForm.companyName"
          placeholder="请输入组织名称"
          @keypress.enter.native="search"
        ></el-input>
        <el-input v-model="searchForm.companyName" placeholder="请输入组织名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="人员类型" prop="memberType">
        <el-select v-model="searchForm.memberType" placeholder="请选择">
          <el-option label="劳务访客" value="0"></el-option>
          <el-option label="普通访客" value="1"></el-option>
          <el-option label="内部人员" value="2"></el-option>
        <el-select v-model="searchForm.queryUserType" placeholder="请选择">
          <el-option label="访客" value="0"></el-option>
          <el-option label="相关方组织" value="1"></el-option>
          <el-option label="内部员工" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="事件类型" prop="eventType">
@@ -45,23 +27,11 @@
        </el-select>
      </el-form-item>
      <el-form-item label="起始时间" prop="eventType">
        <el-date-picker
          @change="seleTime"
          v-model="time"
          type="datetimerange"
          format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        >
        <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
      <el-radio-group
        v-model="searchForm.radio"
        size="small"
        @input="changeRadio"
      >
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
        <el-radio-button label="0">当天</el-radio-button>
        <el-radio-button label="1">近7天</el-radio-button>
        <el-radio-button label="2">近30天</el-radio-button>
@@ -75,80 +45,39 @@
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:carevent:exportExcel']">
        <li>
          <el-button
            type="primary"
            v-permissions="['business:carevent:sync']"
            @click="$refs.OperaCarEventHkWindow.open('同步过车记录')"
            >同步</el-button
          >
          <el-button type="primary" v-permissions="['business:carevent:sync']"
            @click="$refs.OperaCarEventHkWindow.open('同步过车记录')">同步</el-button>
        </li>
        <li>
          <el-button
            type="primary"
            :loading="isWorking.export"
            v-permissions="['business:carevent:exportExcel']"
            @click="exportExcel"
            >导出</el-button
          >
          <el-button type="primary" :loading="isWorking.export" v-permissions="['business:carevent:exportExcel']"
            @click="exportExcel">导出</el-button>
        </li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
        <el-table-column
          prop="plateNos"
          label="车牌号"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="parkName"
          label="停车库名称"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="gateName"
          label="出入口名称"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="eventTypeName"
          label="事件类型"
          min-width="100px"
        ></el-table-column>
        <el-table-column prop="plateNos" label="车牌号" min-width="100px"></el-table-column>
        <el-table-column prop="parkName" label="停车库名称" min-width="100px"></el-table-column>
        <el-table-column prop="gateName" label="出入口名称" min-width="100px"></el-table-column>
        <el-table-column prop="eventTypeName" label="事件类型" min-width="100px"></el-table-column>
        <el-table-column label="出入类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.inoutType === 0">进场</span>
            <span v-if="row.inoutType === 1">离园</span>
          </template>
        </el-table-column>
        <el-table-column label="归属用户类型" min-width="100px">
        <el-table-column label="人员类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.personType == 0">劳务访客</span>
            <span v-if="row.personType == 1">普通访客</span>
            <span v-if="row.personType == 2">内部人员</span>
            <span v-if="row.companyType == 0">相关方组织</span>
            <span v-else-if="row.companyType == 1">内部员工</span>
            <span v-else>访客</span>
          </template>
        </el-table-column>
        <el-table-column
          prop="personName"
          label="姓名"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="personPhone"
          label="手机号"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="personCompanyName"
          label="组织"
          min-width="100px"
        ></el-table-column>
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
        <el-table-column label="车牌抓拍图" min-width="100px">
          <template slot-scope="{ row }">
            <div v-if="row.platePicUrl != null">
              <el-image
                style="width: 80px; height: 80px"
                :src="row.platePicUrl"
                :preview-src-list="[row.platePicUrl]"
              >
              <el-image style="width: 80px; height: 80px" :src="row.platePicUrl" :preview-src-list="[row.platePicUrl]">
              </el-image>
            </div>
          </template>
@@ -156,26 +85,15 @@
        <el-table-column label="抓拍图片" min-width="100px">
          <template slot-scope="{ row }">
            <div v-if="row.vehiclePicUrl != null">
              <el-image
                style="width: 80px; height: 80px"
                :src="row.vehiclePicUrl"
                :preview-src-list="[row.vehiclePicUrl]"
              >
              <el-image style="width: 80px; height: 80px" :src="row.vehiclePicUrl"
                :preview-src-list="[row.vehiclePicUrl]">
              </el-image>
            </div>
          </template>
        </el-table-column>
        <el-table-column
          prop="happenTime"
          label="事件时间"
          min-width="100px"
        ></el-table-column>
        <el-table-column prop="happenTime" label="事件时间" min-width="100px"></el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      </pagination>
      <OperaCarEventHkWindow ref="OperaCarEventHkWindow" @success="search()" />
admin/src/views/business/deviceEvent.vue
@@ -1,101 +1,98 @@
<template>
    <TableLayout :permissions="['business:deviceevent:query']">
        <!-- 搜索表单 -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="姓名/手机号" prop="keyWords">
                <el-input v-model="searchForm.keyWords" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="组织" prop="companyName">
                <el-input v-model="searchForm.companyName" placeholder="请输入组织名称" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="人员类型" prop="personType">
                <el-select v-model="searchForm.personType" placeholder="请选择">
                    <el-option label="外来访客" value="1"></el-option>
                    <el-option label="内部人员" value="2"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="事件类型" prop="eventType">
                <el-select v-model="searchForm.eventType" placeholder="请选择">
                    <el-option label="人脸认证失败" value="197163"></el-option>
                    <el-option label="人脸认证通过" value="196893"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="起止时间" prop="eventType">
                <el-date-picker
                    @change="seleTime"
                    v-model="time"
                    type="datetimerange"
                    format="yyyy-MM-dd HH:mm:ss"
                    value-format="yyyy-MM-dd HH:mm:ss"
                    range-separator="至"
                    start-placeholder="开始时间"
                    end-placeholder="结束时间">
                </el-date-picker>
            </el-form-item>
            <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
                <el-radio-button label="0">当天</el-radio-button>
                <el-radio-button label="1">近7天</el-radio-button>
                <el-radio-button label="2">近30天</el-radio-button>
            </el-radio-group>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- 表格和分页 -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:deviceevent:exportExcel']">
<!--
  <TableLayout :permissions="['business:deviceevent:query']">
    <!-- 搜索表单 -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="姓名/手机号" prop="keyWords">
        <el-input v-model="searchForm.keyWords" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="组织" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入组织名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <!-- <el-form-item label="人员类型" prop="personType">
        <el-select v-model="searchForm.personType" placeholder="请选择">
          <el-option label="外来访客" value="1"></el-option>
          <el-option label="内部人员" value="2"></el-option>
        </el-select>
      </el-form-item> -->
      <el-form-item label="人员类型" prop="memberType">
        <el-select v-model="searchForm.queryUserType" placeholder="请选择">
          <el-option label="访客" value="0"></el-option>
          <el-option label="相关方组织" value="1"></el-option>
          <el-option label="内部员工" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="事件类型" prop="eventType">
        <el-select v-model="searchForm.eventType" placeholder="请选择">
          <el-option label="人脸认证失败" value="197163"></el-option>
          <el-option label="人脸认证通过" value="196893"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="起止时间" prop="eventType">
        <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间">
        </el-date-picker>
      </el-form-item>
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
        <el-radio-button label="0">当天</el-radio-button>
        <el-radio-button label="1">近7天</el-radio-button>
        <el-radio-button label="2">近30天</el-radio-button>
      </el-radio-group>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- 表格和分页 -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:deviceevent:exportExcel']">
        <!--
                <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:deviceevent:exportExcel']" @click="exportExcel">导出</el-button></li>
-->
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column prop="userType" label="人员类型" min-width="100px">
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
        <!-- <el-table-column prop="userType" label="人员类型" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.personType == 0">劳务访客</span>
                        <span v-if="row.personType == 1">普通访客</span>
                        <span v-if="row.personType == 2">内部人员</span>
                        <span v-if="row.personType == null">外来访客</span>
                    </template>
                </el-table-column>
              <el-table-column prop="happenTime" label="事件时间" min-width="100px"></el-table-column>
                <el-table-column prop="devName" label="门禁名称" min-width="100px"></el-table-column>
                <el-table-column prop="srcName" label="门禁点" min-width="100px"></el-table-column>
                <el-table-column prop="eventTypeName" label="事件类型" min-width="100px"></el-table-column>
                <el-table-column label="出入类型" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.extEventInOut === 1">进</span>
                        <span v-if="row.extEventInOut != 1">出</span>
                    </template>
                </el-table-column>
                <el-table-column label="抓拍照片" min-width="100px">
                    <template slot-scope="{row}">
                        <el-image
                            style="width: 80px; height: 80px"
                            :src="row.extEventPictureURL"
                            :preview-src-list="[row.extEventPictureURL]">
                        </el-image>
                    </template>
                </el-table-column>
</el-table-column> -->
        <el-table-column label="人员类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.companyType == 0">相关方组织</span>
            <span v-else-if="row.companyType == 1">内部员工</span>
            <span v-else>访客</span>
          </template>
        </el-table-column>
        <el-table-column prop="happenTime" label="事件时间" min-width="100px"></el-table-column>
        <el-table-column prop="devName" label="门禁名称" min-width="100px"></el-table-column>
        <el-table-column prop="srcName" label="门禁点" min-width="100px"></el-table-column>
        <el-table-column prop="eventTypeName" label="事件类型" min-width="100px"></el-table-column>
        <el-table-column label="出入类型" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.extEventInOut === 1">进</span>
            <span v-if="row.extEventInOut != 1">出</span>
          </template>
        </el-table-column>
        <el-table-column label="抓拍照片" min-width="100px">
          <template slot-scope="{row}">
            <el-image style="width: 80px; height: 80px" :src="row.extEventPictureURL"
              :preview-src-list="[row.extEventPictureURL]">
            </el-image>
          </template>
        </el-table-column>
              <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
              <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
              <el-table-column prop="personIdcardDecode" label="证件号" min-width="100px"></el-table-column>
              <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="personIdcardDecode" label="证件号" min-width="100px"></el-table-column>
        <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
    </TableLayout>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      </pagination>
    </template>
  </TableLayout>
</template>
<script>
@@ -107,7 +104,7 @@
  name: 'DeviceEvent',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  data () {
  data() {
    return {
      // 搜索
      searchForm: {
@@ -122,7 +119,7 @@
      time: []
    }
  },
  created () {
  created() {
    this.config({
      module: '门禁事件推送记录表',
      api: '/business/deviceEvent',
@@ -132,7 +129,7 @@
    this.changeRadio('0')
  },
  methods: {
    changeRadio (e) {
    changeRadio(e) {
      if (e === '0') {
        this.searchForm.startTime = timeForMat(0)[0]
        this.searchForm.endTime = timeForMat(0)[1]
@@ -148,13 +145,13 @@
      }
      this.search()
    },
    seleTime (e) {
    seleTime(e) {
      this.searchForm.startTime = e[0]
      this.searchForm.endTime = e[1]
      this.searchForm.radio = null
      this.search()
    },
    reset () {
    reset() {
      this.$refs.searchForm.resetFields()
      this.time = []
      this.searchForm.radio = '0'
admin/src/views/business/retention.vue
@@ -1,52 +1,26 @@
<template>
  <TableLayout :permissions="['business:retention:query']">
    <!-- 搜索表单 -->
    <el-form
      ref="searchForm"
      slot="search-form"
      :model="searchForm"
      label-width="100px"
      inline
    >
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="姓名/手机号" prop="keyWords">
        <el-input
          v-model="searchForm.keyWords"
          placeholder="请输入姓名/手机号"
          @keypress.enter.native="search"
        ></el-input>
        <el-input v-model="searchForm.keyWords" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="组织" prop="companyName">
        <el-input
          v-model="searchForm.companyName"
          placeholder="请输入组织名称"
          @keypress.enter.native="search"
        ></el-input>
        <el-input v-model="searchForm.companyName" placeholder="请输入组织名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="人员类型" prop="type">
        <el-select v-model="searchForm.type" placeholder="请选择">
          <el-option label="劳务访客" value="0"></el-option>
          <el-option label="普通访客" value="1"></el-option>
      <el-form-item label="人员类型" prop="queryUserType">
        <el-select v-model="searchForm.queryUserType" placeholder="请选择">
          <el-option label="访客" value="0"></el-option>
          <el-option label="相关方组织" value="1"></el-option>
          <el-option label="内部员工" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="起止时间" prop="startTime">
        <el-date-picker
          @change="seleTime"
          v-model="time"
          type="datetimerange"
          format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss"
          range-separator="至"
          start-placeholder="开始时间"
          end-placeholder="结束时间"
        >
        <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间">
        </el-date-picker>
      </el-form-item>
      <el-radio-group
        v-model="searchForm.radio"
        size="small"
        @input="changeRadio"
      >
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
        <el-radio-button label="0">当天</el-radio-button>
        <el-radio-button label="1">近7天</el-radio-button>
        <el-radio-button label="2">近30天</el-radio-button>
@@ -60,91 +34,52 @@
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:retention:exportExcel']">
        <li>
          <el-button
            type="primary"
            :loading="isWorking.export"
            v-permissions="['business:retention:exportExcel']"
            @click="exportExcel"
            >导出</el-button
          >
          <el-button type="primary" :loading="isWorking.export" v-permissions="['business:retention:exportExcel']"
            @click="exportExcel">导出</el-button>
        </li>
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        @selection-change="handleSelectionChange"
      >
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="companyName" label="组织" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.type === 2 || row.type === 0">{{
              row.companyName
            }}</span>
              }}</span>
            <span v-else>{{ row.visitCompanyName }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="type" label="人员类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.type === 0">劳务访客</span>
            <span v-if="row.type === 1">普通访客</span>
            <span v-if="row.type === 2">内部员工</span>
            <span v-if="row.companyType == 0">相关方组织</span>
            <span v-else-if="row.companyType == 1">内部员工</span>
            <span v-else>访客</span>
          </template>
        </el-table-column>
        <el-table-column
          prop="name"
          label="姓名"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="phone"
          label="手机号"
          min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="idcardDecode"
          label="身份证号"
          min-width="130px"
        ></el-table-column>
        <el-table-column prop="name" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="idcardDecode" label="身份证号" min-width="130px"></el-table-column>
        <el-table-column label="进场门禁" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.type === 1">-</span>
            <span v-else>{{ row.deviceName }}</span>
          </template>
        </el-table-column>
        <el-table-column
          prop="eventDate"
          label="进场时间"
          min-width="100px"
        ></el-table-column>
        <el-table-column prop="eventDate" label="进场时间" min-width="100px"></el-table-column>
        <el-table-column label="人脸照片" min-width="100px">
          <template slot-scope="{ row }">
            <el-image
              v-if="row.faceImgFull != null"
              style="width: 80px; height: 80px"
              :src="row.faceImgFull"
              :preview-src-list="[row.faceImgFull]"
            >
            <el-image v-if="row.faceImgFull != null" style="width: 80px; height: 80px" :src="row.faceImgFull"
              :preview-src-list="[row.faceImgFull]">
            </el-image>
          </template>
        </el-table-column>
        <el-table-column label="操作" min-width="120" fixed="right">
          <template slot-scope="{ row }">
            <el-button
              type="text"
              @click="deleteById(row)"
              icon="el-icon-delete"
              v-permissions="['business:retention:delete']"
              >标记离场</el-button
            >
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
              v-permissions="['business:retention:delete']">标记离场</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      </pagination>
    </template>
  </TableLayout>
@@ -159,7 +94,7 @@
  name: 'Retention',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  data () {
  data() {
    return {
      // 搜索
      searchForm: {
@@ -173,7 +108,7 @@
      time: []
    }
  },
  created () {
  created() {
    this.config({
      module: '在园人员信息 表(滞留)',
      api: '/business/retention',
@@ -183,7 +118,7 @@
    this.changeRadio('0')
  },
  methods: {
    changeRadio (e) {
    changeRadio(e) {
      if (e === '0') {
        this.searchForm.startTime = timeForMat(0)[0]
        this.searchForm.endTime = timeForMat(0)[1]
@@ -199,7 +134,7 @@
      }
      this.search()
    },
    reset () {
    reset() {
      this.$refs.searchForm.resetFields()
      this.searchForm.startTime = ''
      this.searchForm.radio = '0'
@@ -207,7 +142,7 @@
      this.time = []
      this.search()
    },
    seleTime (e) {
    seleTime(e) {
      this.searchForm.startTime = e[0]
      this.searchForm.endTime = e[1]
      this.searchForm.radio = null
admin/src/views/business/visits.vue
@@ -89,8 +89,7 @@
        <el-table-column v-if="containPermissions(['business:visits:update', 'business:visits:delete'])" label="操作"
          min-width="200" fixed="right">
          <template slot-scope="{row}">
            <el-button type="text" @click="departure(row.id)" v-permissions="['business:visits:level']"
              icon="el-icon-delete" style="color: red" v-if="row.status == 7">离厂</el-button>
            <el-button type="text" @click="departure(row.id)" icon="el-icon-delete" style="color: red" v-if="row.status == 7">离厂</el-button>
            <el-button type="text" @click="cancel(row.id)" v-permissions="['business:visits:cancel']"
              icon="el-icon-delete" style="color: red" v-if="row.status == 5">取消预约</el-button>
            <el-button type="text" @click="resend(row.id)" v-permissions="['business:visits:update']"
admin/src/views/index.vue
@@ -13,52 +13,52 @@
            <div class="header">
              <div class="left">
                <div class="fs15">今日在园人数(人)</div>
                <div class="num">300</div>
                <div class="num">{{ headerData.todayInParkUserNum }}</div>
              </div>
              <img src="@/assets/icons/home_icon1.png" alt="" />
            </div>
            <div class="content">
              <div>入园人次(人):600</div>
              <div>出园人次(人):300</div>
              <div>入园人次(人):{{ headerData.todayInUserNum }}</div>
              <div>出园人次(人):{{ headerData.todayOutUserNum }}</div>
            </div>
          </div>
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">在园访客数(人)</div>
                <div class="num">300</div>
                <div class="num">{{ headerData.inParkVisitUserNum }}</div>
              </div>
              <img src="@/assets/icons/home_icon2.png" alt="" />
            </div>
            <div class="content">
              <div>访客人次(人):200</div>
              <div>签离人次(人):300</div>
              <div>访客人次(人):{{ headerData.visitUserNum }}</div>
              <div>签离人次(人):{{ headerData.signLevelNum }}</div>
            </div>
          </div>
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">在园长期相关方数(人)</div>
                <div class="num">300</div>
                <div class="num">{{ headerData.inParkLwUserNum }}</div>
              </div>
              <img src="@/assets/icons/home_icon3.png" alt="" />
            </div>
            <div class="content">
              <div>入园人次(人):600</div>
              <div>出园人次(人):300</div>
              <div>入园人次(人):{{ headerData.lwUserInNum }}</div>
              <div>出园人次(人):{{ headerData.lwUserOutNum }}</div>
            </div>
          </div>
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">在园长期相关方数(人)</div>
                <div class="num">300</div>
                <div class="fs15">今日在园车辆(辆)</div>
                <div class="num">{{ headerData.todayInParkCarNum }}</div>
              </div>
              <img src="@/assets/icons/home_icon4.png" alt="" />
            </div>
            <div class="content">
              <div>入园车次(辆):600</div>
              <div>出园车次(辆):300</div>
              <div>入园车次(辆):{{ headerData.todayInCarNum }}</div>
              <div>出园车次(辆):{{ headerData.todayOutCarNum }}</div>
            </div>
          </div>
        </div>
@@ -76,15 +76,15 @@
            <div class="wrap static1">
              <div class="header">
                <div class="home_title">在场人员占比</div>
                <div class="df_ac more">
                <!-- <div class="df_ac more">
                  更多<i class="el-icon-arrow-right"></i>
                </div>
                </div> -->
              </div>
              <div class="content">
                <div class="echart_wrap">
                  <div class="pie_text">
                    <div class="fs13">总数</div>
                    <div class="fs15"><strong>300</strong></div>
                    <div class="fs15"><strong>{{ headerData.todayInParkUserNum }}</strong></div>
                  </div>
                  <div class="echart" id="echart1"></div>
                </div>
@@ -92,17 +92,18 @@
                  <div class="item">
                    <div class="icon"></div>
                    <div class="text">访客</div>
                    <div class="num">100</div>
                    <div class="num">{{ headerData.inParkVisitUserNum }}</div>
                  </div>
                  <div class="item">
                    <div :style="{ background: colors[0] }" class="icon"></div>
                    <div class="text">访客</div>
                    <div class="num">100</div>
                    <div class="text">内部员工</div>
                    <div class="num">{{ headerData.todayInParkUserNum - headerData.inParkLwUserNum -
                      headerData.inParkVisitUserNum }}</div>
                  </div>
                  <div class="item">
                    <div :style="{ background: colors[1] }" class="icon"></div>
                    <div class="text">访客</div>
                    <div class="num">100</div>
                    <div class="text">长期相关方</div>
                    <div class="num">{{ headerData.inParkLwUserNum }}</div>
                  </div>
                </div>
              </div>
@@ -110,9 +111,9 @@
            <div class="wrap static2">
              <div class="header">
                <div class="home_title">长期相关方分布</div>
                <div class="df_ac more">
                <!-- <div class="df_ac more">
                  更多<i class="el-icon-arrow-right"></i>
                </div>
                </div> -->
              </div>
              <div class="echart" id="echart2"></div>
            </div>
@@ -121,18 +122,18 @@
            <div class="wrap static3">
              <div class="header">
                <div class="home_title">7日访客统计</div>
                <div class="df_ac more">
                <!-- <div class="df_ac more">
                  更多<i class="el-icon-arrow-right"></i>
                </div>
                </div> -->
              </div>
              <div class="echart" id="echart3"></div>
            </div>
            <div class="wrap static4">
              <div class="header">
                <div class="home_title">7日车辆统计</div>
                <div class="df_ac more">
                <!-- <div class="df_ac more">
                  更多<i class="el-icon-arrow-right"></i>
                </div>
                </div> -->
              </div>
              <div class="echart" id="echart4"></div>
            </div>
@@ -144,26 +145,22 @@
          <div class="header df_sb">
            <div class="home_title df">
              <span>待办事项</span>
              <span class="num">10</span>
              <span class="num" v-if="taskTotal">{{ taskTotal }}</span>
            </div>
            <div class="df_ac more">
            <div class="df_ac more" @click="jumpPage('/task/index')">
              更多<i class="el-icon-arrow-right"></i>
            </div>
          </div>
          <div class="list">
            <div class="item">
            <div class="item" v-for="item in taskList" :key="item.id">
              <div class="content">
                <div class="title">点点滴滴</div>
                <div class="time">time</div>
                <div class="title">{{ item.title }}</div>
                <div class="time">{{ item.createDate }}</div>
              </div>
              <div class="btn">处理</div>
              <div class="btn" v-permissions="['business:staging:query']" @click="handleDetail(item)">处理</div>
            </div>
            <div class="item">
              <div class="content">
                <div class="title">点点滴滴</div>
                <div class="time">time</div>
              </div>
              <div class="btn">处理</div>
            <div v-if="taskList.length == 0" class="empty">
              <img src="@/assets/images/default_nodata.png" alt="">
            </div>
          </div>
        </div>
@@ -171,53 +168,44 @@
          <div class="header df_sb">
            <div class="home_title df">
              <span>超时预警</span>
              <span class="num">10</span>
              <span class="num" v-if="warningTotal">{{ warningTotal }}</span>
            </div>
            <div class="df_ac more">
            <div class="df_ac more" @click="jumpPage('/business/strandedPersonnel')">
              更多<i class="el-icon-arrow-right"></i>
            </div>
          </div>
          <div class="list">
            <div class="item">
            <div class="item" v-for="item in warningList" :key="item.id">
              <div class="name_wrap df_sb">
                <div class="name">袁隆平</div>
                <div class="identity">普通访客</div>
                <div class="name">{{ item.name }}</div>
                <div class="identity" v-if="item.memberType == 0">劳务访客</div>
                <div class="identity" v-if="item.memberType == 1">普通访客</div>
                <div class="identity" v-if="item.memberType == 2">内部人员</div>
              </div>
              <div class="line">联系电话:1888</div>
              <div class="line">访客公司:安徽豆米</div>
              <div class="line">联系电话:{{ item.phone }}</div>
              <div class="line">访客公司:{{ item.companyName }}</div>
              <div class="auth df_sb">
                <div class="time">授权期限:</div>
                <div class="btn">离场</div>
                <div class="time">授权期限:{{ item.endtime }}</div>
                <div class="btn" @click="departure(item.id)">离场</div>
              </div>
            </div>
            <div class="item">
              <div class="name_wrap df_sb">
                <div class="name">袁隆平</div>
                <div class="identity">普通访客</div>
              </div>
              <div class="line">联系电话:1888</div>
              <div class="line">访客公司:安徽豆米</div>
              <div class="auth df_sb">
                <div class="time">授权期限:</div>
                <div class="btn">离场</div>
              </div>
            </div>
            <div class="item">
              <div class="name_wrap df_sb">
                <div class="name">袁隆平</div>
                <div class="identity">普通访客</div>
              </div>
              <div class="line">联系电话:1888</div>
              <div class="line">访客公司:安徽豆米</div>
              <div class="auth df_sb">
                <div class="time">授权期限:</div>
                <div class="btn">离场</div>
              </div>
            </div>
          </div>
          <div v-if="warningList.length == 0" class="empty">
            <img src="@/assets/images/default_nodata.png" alt="">
          </div>
        </div>
      </div>
    </div>
    <TaskDetail v-if="isShowDetail" ref="DetailRef" @success="SubSuccess('isShowDetail')" />
    <VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" @success="SubSuccess('isShowReport')" />
    <DangetDetail v-if="isShowDanger" ref="DangetDetailRef" @success="SubSuccess('isShowDanger')" />
    <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" @success="SubSuccess('isShowDriver')" />
    <!-- 用车申请 -->
    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="getTaskList" />
    <!-- 隐患 -->
    <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="getTaskList" />
    <!-- 预约详情 -->
    <OperaVisitsDesWindow ref="OperaVisitsDesWindow" />
  </div>
</template>
@@ -229,19 +217,46 @@
  getWorkbenchData,
  getAppHeaderNav
} from '@/api'
import { level } from '@/api/business/visits'
import TaskDetail from '@/views/task/visSubDetail.vue'
import VisReportDetail from '@/views/task/visReportDetail.vue'
import DangetDetail from '@/views/task/dangetDetail.vue'
import DriverDetail from '@/views/task/driverDetail.vue'
import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow'
import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
const colors = ['#52a4f7', '#7678f7', '#5fc6d5']
export default {
  components: {
    TaskDetail,
    VisReportDetail,
    DangetDetail,
    DriverDetail,
    OperaCarUseBookWindow,
    OperaHiddenDangerWindow,
    OperaVisitsDesWindow
  },
  data() {
    return {
      colors,
      nowDate: '',
      nowWeek: '',
      headerData: {},
      staticData: {},
      taskList: [],
      taskTotal: 0,
      warningList: [],
      warningTotal: 0,
      funcList: [
        { name: '访客报备', path: '', url: require('@/assets/icons/home_func1.png'), path: '/business/reportRecord' },
        { name: '隐患随手拍', path: '', url: require('@/assets/icons/home_func2.png'), path: '/operation/danger/record' },
        { name: '预约会议室', path: '', url: require('@/assets/icons/home_func3.png'), path: '/meeting/bookings' },
        { name: '考勤工作台', path: '', url: require('@/assets/icons/home_func4.png') }
      ]
      ],
      isShowDetail: false,
      isShowReport: false,
      isShowDanger: false,
      isShowDriver: false,
    }
  },
  computed: {
@@ -259,6 +274,10 @@
    this.initData()
  },
  methods: {
    SubSuccess(str) {
      this[str] = false
      this.getTaskList()
    },
    funcClick(item) {
      if (item.name == '考勤工作台') {
        getAppHeaderNav(4).then(res => {
@@ -273,22 +292,99 @@
      this.nowWeek = weeks[new Date().getDay()]
    },
    initData() {
      this.getWorkBody() //主体数据
      this.getWorkHead() //主体数据
      this.initEchart1()
      this.initEchart2()
      this.initEchart3()
      this.initEchart4()
      this.getWorkHead()
      this.getWorkBody()
      this.getTaskList()
      this.getWarningList()
    },
    getWarningList() {
      getWorkbenchData({ queryType: 4 }).then(res => {
        this.warningList = res.timeOutVisitList || []
        this.warningTotal = res.timeOutVisitNum || 0
      })
    },
    getTaskList() {
      getWorkbenchData({ queryType: 3 }).then(res => {
        this.taskList = res.noticesList || []
        this.taskTotal = res.noticesNum || 0
      })
    },
    getWorkBody() {
      getWorkbenchData({queryType: 2})
      getWorkbenchData({ queryType: 2 }).then(res => {
        this.staticData = res || {}
        this.initEchart2()
        this.initEchart3()
        this.initEchart4()
      })
    },
    getWorkHead() {
      getWorkbenchData({queryType: 1})
      getWorkbenchData({ queryType: 1 }).then(res => {
        this.headerData = res || {}
        this.initEchart1()
      })
    },
    jumpPage(page) {
      this.$router.push(page)
    },
    departure(id) {
      this.$confirm('确定离厂吗, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        level(id)
          .then(res => {
            this.getWarningList()
          })
      }).catch(() => {
      })
    },
    handleDetail (row) {
      if (row.objType === 2) {
        this.$refs.OperaDetailsWindow.open('公务车申请详情', { ...row, id: row.objId })
        return
      }
      if (row.objType === 1) {
        this.isShowReport = true
        this.$nextTick(() => {
          this.$refs.VisReportDetailRef.id = row.objId
          this.$refs.VisReportDetailRef.type = row.objType
          this.$refs.VisReportDetailRef.getDetail()
          this.$refs.VisReportDetailRef.isShowModal = true
        })
        return
      }
      if (row.objType === 3) {
        const obj = { ...row, id: row.objId }
        this.$refs.OperaHiddenDangerWindow.open('隐患随手拍详情', obj)
        return
      }
      if (row.objType === 6) {
        const obj = { ...row, id: row.objId }
        this.isShowDriver = true
        this.$nextTick(() => {
          this.$refs.DriverDetailRef.id = row.objId
          this.$refs.DriverDetailRef.type = row.objType
          this.$refs.DriverDetailRef.getDetail()
          this.$refs.DriverDetailRef.isShowModal = true
        })
        return
      }
      if (row.objType === 0) {
        this.isShowDetail = true
        this.$nextTick(() => {
          this.$refs.DetailRef.id = row.objId
          this.$refs.DetailRef.type = row.objType
          this.$refs.DetailRef.getDetail()
          this.$refs.DetailRef.isShowModal = true
        })
      }
    },
    initEchart1() {
      const myChart = echarts.init(document.getElementById('echart1'))
      let that = this
      const option = {
        series: [
          {
@@ -303,9 +399,9 @@
              show: false
            },
            data: [
              { value: 1048, name: 'Search Engine' },
              { value: 735, name: 'Direct' },
              { value: 580, name: 'Email' }
              { value: that.headerData.inParkVisitUserNum, name: '访客' },
              { value: that.headerData.todayInParkUserNum - that.headerData.inParkVisitUserNum - that.headerData.inParkLwUserNum, name: '内部员工' },
              { value: that.headerData.inParkLwUserNum, name: '长期相关方' }
            ]
          }
        ]
@@ -317,6 +413,7 @@
    },
    initEchart2() {
      const myChart = echarts.init(document.getElementById('echart2'))
      let that = this
      myChart.setOption({
        grid: {
          top: '4%',
@@ -344,11 +441,11 @@
        },
        yAxis: {
          type: 'category',
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
          data: that.staticData.lwList.map(i => i.name)
        },
        series: [
          {
            data: [120, 200, 150, 80, 70, 110, 130],
            data: that.staticData.lwList.map(i => i.num),
            type: 'bar',
            barWidth: 10,
            itemStyle: {
@@ -360,7 +457,7 @@
                    { offset: 1, color: '#407ff0' }
                  ]
                ),
                barBorderRadius: [0, 10, 10, 0]
                // barBorderRadius: [0, 10, 10, 0]
              }
            }
          }
@@ -372,6 +469,7 @@
    },
    initEchart3() {
      const myChart = echarts.init(document.getElementById('echart3'))
      let that = this
      myChart.setOption({
        tooltip: {
          trigger: 'axis',
@@ -394,7 +492,7 @@
        xAxis: {
          type: 'category',
          boundaryGap: false,
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
          data: that.staticData.weekVisitList.map(i => i.name)
        },
        yAxis: {
          type: 'value',
@@ -413,13 +511,13 @@
        grid: {
          top: '16%',
          left: '2%',
          right: '2%',
          bottom: '4%',
          right: '8%',
          bottom: '2%',
          containLabel: true
        },
        series: [
          {
            data: [150, 230, 224, 218, 135, 147, 260],
            data: that.staticData.weekVisitList.map(i => i.num),
            type: 'line',
            areaStyle: {
              normal: {
@@ -471,6 +569,7 @@
    },
    initEchart4() {
      const myChart = echarts.init(document.getElementById('echart4'))
      let that = this
      myChart.setOption({
        tooltip: {
          trigger: 'axis',
@@ -493,7 +592,7 @@
        xAxis: {
          type: 'category',
          boundaryGap: false,
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
          data: that.staticData.weekCarList.map(i => i.name)
        },
        yAxis: {
          type: 'value',
@@ -512,13 +611,13 @@
        grid: {
          top: '16%',
          left: '2%',
          right: '2%',
          right: '8%',
          bottom: '4%',
          containLabel: true
        },
        series: [
          {
            data: [150, 230, 224, 218, 135, 147, 260],
            data: that.staticData.weekCarList.map(i => i.num),
            type: 'line',
            areaStyle: {
              normal: {
@@ -741,6 +840,7 @@
            border: 1px solid #207ff7;
            font-size: 13px;
            color: #207ff7;
            cursor: pointer;
          }
        }
      }
@@ -817,6 +917,7 @@
              width: 58px;
              text-align: center;
              height: 30px;
              cursor: pointer;
              line-height: 30px;
              background: #ffffff;
              border-radius: 2px;
@@ -828,6 +929,19 @@
        }
      }
    }
    .more{
      cursor: pointer;
    }
    .empty {
        height: 300px;
        display: flex;
        justify-content: center;
        align-items: center;
        img {
          width: 140px;
        }
      }
  }
  .static_wrap {
admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -4,6 +4,7 @@
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
    width="840px"
  >
    <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix=":">
      <el-form-item label="关联会议室" prop="roomId">
@@ -465,25 +466,30 @@
    margin-bottom: 8px;
    border: #111 solid 1px;
    font-size: 14px;
    font-weight: 500;
    line-height: 14px;
    padding: 5px;
    width: 124px;
    height: 36px;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 5px;
    color: #111;
  }
  .time-item-sel {
    border-color: $primary-color;
    background-color: $primary-color;
    color: #fff;
    background-color: #f6f9fe;
    color: $primary-color;
  }
  .time-item-disable {
    color: #e4e4e4;
    border-color: #999;
    background-color: #999;
    color: #fff;
    border-color: #cccccc;
    background-color: #cccccc;
  }
  .disable{
    border-color: #999;
    background-color: #999;
    color: #111;
    border-color: #bed6f9;
    background-color: #bed6f9;
    color: #fff;
  }
}
.detail_modal {
admin/src/views/operation/serviceCar/apprConfig.vue
@@ -389,7 +389,7 @@
      this.activeIndex = 0
    },
    handleAddAppr () {
      this.apprList.splice(this.apprList.length - 1, 0, { remark: '审批人', active: false, type: 0, objIds: [] })
      this.apprList.splice(this.apprList.length - 1, 0, { remark: '审批人',approveType: 0, active: false, type: 0, objIds: [] })
      // this.apprList.push({ remark: '审批人', active: false, type: '0' })
    },
admin/src/views/platform/LogisticsRecord/leaveAuth.vue
@@ -53,7 +53,7 @@
        <template v-slot="scope">
          <el-button v-if="scope.row.status == 6" type="text" v-permissions="['business:platformbooks:detail']"
            @click="handleAuth(scope.row)">离园授权</el-button>
            <span v-else>-</span>
          <span v-else>-</span>
        </template>
      </el-table-column>
    </el-table>
@@ -168,9 +168,10 @@
        model: {
          ...filters,
          queryStatus: '6,9,10,2,3,4',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
          beginDoneDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginDoneDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'DONE_DATE' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -97,7 +97,7 @@
      </el-form>
    </GlobalWindow>
    <!--  -->
    <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" />
    <DriverDetail v-if="isShowDriver" @success="getList" @close="isShowDriver = false" ref="DriverDetailRef" />
  </div>
</template>
admin/src/views/platform/queueUp.vue
@@ -40,7 +40,7 @@
      </el-table-column>
      <el-table-column prop="contractNum" label="运输单号/合同号" min-width="120">
        <template v-slot="scope">
          <span>{{ scope.row.billCode || scope.row.carrierName || '-' }}</span>
          <span>{{ scope.row.billCode || scope.row.contractNum || '-' }}</span>
        </template>
      </el-table-column>
      <el-table-column prop="totalNum" label="总运输量(万支)" min-width="110">
admin/src/views/task/dangetDetail.vue
@@ -1,5 +1,5 @@
<template>
  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
  <GlobalWindow :title="title" :visible.sync="isShowModal" @close="close" @confirm="confirm">
    <div class="modal_wrap">
      <div class="modal_content">
        <div class="header">
@@ -191,7 +191,7 @@
        >转交</el-button
      >
      <el-button @click="isShowBack = true" type="danger" plain>退回</el-button>
      <el-button @click="isShowModal = false">返回</el-button>
      <el-button @click="close">返回</el-button>
    </template>
    <!--  同意/拒绝 -->
    <el-dialog
@@ -481,6 +481,8 @@
            this.subLoading = false
            this.$tip.apiSuccess('处理成功')
            this.getDetail()
            this.$emit('success')
            this.$emit('close')
            this.isShowProblem = false
          })
          .finally(() => {
@@ -488,6 +490,10 @@
          })
      })
    },
    close(){
      this.isShowModal = false
      this.$emit('close')
    },
    onSubBack () {
      this.$refs.backForm.validate((valid) => {
        if (!valid) {
admin/src/views/task/driverDetail.vue
@@ -1,5 +1,5 @@
<template>
  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
  <GlobalWindow :title="title" :visible.sync="isShowModal" @close="close" @confirm="confirm">
    <div class="modal_wrap">
      <div class="modal_content">
        <div class="header">
@@ -103,7 +103,7 @@
        info.approveDateVO.canBeApproved != null &&
        info.approveDateVO.canBeApproved == 1
      ">拒绝</el-button>
      <el-button @click="isShowModal = false">返回</el-button>
      <el-button @click="close">返回</el-button>
    </template>
    <!--  同意/拒绝 -->
    <el-dialog append-to-body :title="apprTitle" :visible.sync="isShowAppr" width="480px">
@@ -183,6 +183,8 @@
                this.subLoading = false
                this.$tip.apiSuccess('处理成功')
                this.getDetail()
                this.$emit('success')
                this.$emit('close')
                this.isShowAppr = false
              })
              .finally(() => {
@@ -208,6 +210,10 @@
        }
      })
    },
    close(){
      this.isShowModal = false
      this.$emit('close')
    },
    handleAppr(val) {
      this.$set(this.param, 'status', val)
      this.apprTitle = val == 2 ? '同意' : '拒绝'
admin/src/views/task/index.vue
@@ -62,10 +62,11 @@
      class="mb20"
      default-expand-all
    >
      <el-table-column label="处理事项" min-width="200">
      <el-table-column label="处理事项" min-width="160">
        <template slot-scope="{ row }"> {{ row.title}}
        </template>
      </el-table-column>
      <el-table-column prop="info" label="当前阶段" min-width="100"></el-table-column>
      <el-table-column prop="createDate" label="提交时间" min-width="100">
      </el-table-column>
      <el-table-column label="操作" width="230" fixed="right">
@@ -73,7 +74,6 @@
          <el-button
            type="text"
            @click="handleDetail(row)"
            v-permissions="['business:company:update']"
            >查看详情</el-button
          >
        </template>
@@ -84,10 +84,10 @@
      @current-change="getList"
      :pagination="pagination"
    />
    <TaskDetail v-if="isShowDetail" ref="DetailRef" />
    <VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" />
    <DangetDetail v-if="isShowDanger" ref="DangetDetailRef" />
    <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" />
    <TaskDetail v-if="isShowDetail" ref="DetailRef" @close="isShowDetail = false" @success="SubSuccess('isShowDetail')" />
    <VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" @close="isShowReport = false" @success="SubSuccess('isShowReport')" />
    <DangetDetail v-if="isShowDanger" ref="DangetDetailRef" @close="isShowDanger = false" @success="SubSuccess('isShowDanger')" />
    <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" @close="isShowDriver = false" @success="SubSuccess('isShowDriver')" />
    <!-- 用车申请 -->
    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="getList" />
    <!-- 隐患 -->
@@ -133,7 +133,7 @@
      isShowDriver: false,
      filters: {
        queryType: '0',
        fastdate: 0
        // fastdate: 0
      },
      queryFormConfig: {
        formItems: [
@@ -183,7 +183,7 @@
  },
  created () {
    // this.getHeadData()
    this.changeRadio('0')
    // this.changeRadio('0')
    this.getList()
  },
  methods: {
@@ -191,6 +191,10 @@
      const arr = [dayjs().subtract(day, 'day').format('YYYY-MM-DD') + ' 00:00:00', dayjs().format('YYYY-MM-DD') + ' 23:59:59']
      this.$set(this.filters, 'selTime', arr)
      this.getList()
    },
    SubSuccess(str) {
      this[str] = false
      this.getTaskList()
    },
    handleDetail (row) {
      if (this.filters.queryType == 3) {
@@ -250,7 +254,7 @@
    getList (page) {
      this.getHeadData()
      const { filters, pagination } = this
      if (filters.selTime && filters.selTime.length > 0 && filters.queryType != 0) {
      if (filters.selTime && filters.selTime.length > 0) {
        filters.startDate = filters.selTime[0]
        filters.endDate = filters.selTime[1]
      } else {
@@ -285,7 +289,6 @@
    clear () {
      this.filters = {
        queryType: '0',
        fastdate: 0
      }
      this.getList(0)
    },
admin/src/views/task/visReportDetail.vue
@@ -1,5 +1,5 @@
<template>
  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
  <GlobalWindow :title="title" :visible.sync="isShowModal" @close="close" @confirm="confirm">
    <div class="modal_wrap">
      <div class="modal_content">
        <div class="header">
@@ -120,7 +120,7 @@
        info.approveDateVO.canBeApproved != null &&
        info.approveDateVO.canBeApproved == 1
      ">拒绝</el-button>
      <el-button @click="isShowModal = false">返回</el-button>
      <el-button @click="close">返回</el-button>
    </template>
    <!--  同意/拒绝 -->
    <el-dialog append-to-body :title="apprTitle" :visible.sync="isShowAppr" width="480px">
@@ -228,6 +228,8 @@
                this.subLoading = false
                this.$tip.apiSuccess('处理成功')
                this.getDetail()
                this.$emit('success')
                this.$emit('close')
                this.isShowAppr = false
              })
              .finally(() => {
@@ -236,6 +238,10 @@
          })
      })
    },
    close(){
      this.isShowModal = false
      this.$emit('close')
    },
    getDetail() {
      const { id } = this
      getVisitedReDetail({ id }).then(res => {
admin/src/views/task/visSubDetail.vue
@@ -1,5 +1,5 @@
<template>
  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
  <GlobalWindow :title="title" :visible.sync="isShowModal" @close="close" @confirm="confirm">
    <div class="modal_wrap">
      <div class="modal_content">
        <div class="header">
@@ -78,7 +78,7 @@
            <el-table-column label="公司名称" prop="companyName" min-width="120" />
            <el-table-column label="人脸照片" prop="" min-width="80">
              <template slot-scope="{ row }">
                <el-image :src="row.prefix + row.faceImg" :preview-src-list="[row.prefix + row.faceImg]">
                <el-image v-if="row.prefix && row.faceImg" :src="row.prefix + row.faceImg" :preview-src-list="[row.prefix + row.faceImg]">
                </el-image>
              </template>
            </el-table-column>
@@ -154,7 +154,7 @@
        info.approveDateVO.canBeApproved != null &&
        info.approveDateVO.canBeApproved == 1
      ">拒绝</el-button>
      <el-button @click="isShowModal = false">返回</el-button>
      <el-button @click="close">返回</el-button>
    </template>
    <!--  同意/拒绝 -->
    <el-dialog append-to-body :title="param.status == 2 ? '同意' : '拒绝'" :visible.sync="isShowAppr" width="480px">
@@ -260,6 +260,8 @@
                this.subLoading = false
                this.$tip.apiSuccess('处理成功')
                this.getDetail()
                this.$emit('success')
                this.$emit('close')
                this.isShowAppr = false
              })
              .finally(() => {
@@ -268,6 +270,10 @@
          })
      })
    },
    close(){
      this.isShowModal = false
      this.$emit('close')
    },
    getDetail() {
      const { id, type } = this
      console.log(id, type)
admin/src/views/vehicle/cars.vue
@@ -23,8 +23,8 @@
          <el-option label="未授权" value="0"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="" prop="type" title="车辆类型">
        <el-select v-model="searchForm.type" @change="search" clearable placeholder="车辆类型">
      <el-form-item label="" prop="type" title="业务类型">
        <el-select v-model="searchForm.type" @change="search" clearable placeholder="业务类型">
          <el-option label="安泰公务车" value="0"></el-option>
          <el-option label="安泰自有物流车" value="1"></el-option>
          <el-option label="其他" value="2"></el-option>
@@ -46,7 +46,7 @@
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="code" label="车牌号" min-width="100px"></el-table-column>
        <el-table-column label="车辆类型" min-width="120px">
        <el-table-column label="业务类型" min-width="120px">
          <template slot-scope="{row}">
            <span v-if="row.type == 0">安泰公务车</span>
            <span v-if="row.type == 1">安泰自有物流车</span>
@@ -68,8 +68,10 @@
            <div v-if="row.parkBookList && row.parkBookList.length">
              <span v-for="item in row.parkBookList" :key="item.id" style="display: block">
                <span
                  :style="(item.hkStatus == 0 ? 'color:#2080f7' : (item.hkStatus == 1 ? 'color:green' : (item.hkStatus == 2 ? 'color:red' : '')))">【{{ item.hkStatus ==
                    0 ? '等待下发' : (item.hkStatus == 1 ? '下发成功' : (item.hkStatus == 2?'下发失败':''))}}】 </span>{{ item.parksName }}
                  :style="(item.hkStatus == 0 ? 'color:#2080f7' : (item.hkStatus == 1 ? 'color:green' : (item.hkStatus == 2 ? 'color:red' : '')))">【{{
                    item.hkStatus ==
                      0 ? '等待下发' : (item.hkStatus == 1 ? '下发成功' : (item.hkStatus == 2 ?'下发失败':''))}}】 </span>{{
                    item.parksName }}
              </span>
            </div>
            <span v-if="row.parkBookList == null || row.parkBookList.length == 0">-</span>
@@ -152,9 +154,9 @@
      this.$nextTick(() => {
        this.$refs.operaCarsWindow.open(str, row)
        if (row && row.id) {
          let form = { ...row, cateId: []}
          if(row.catePId){ form.cateId.push(row.catePId) }
          if(row.cateId){ form.cateId.push(row.cateId) }
          let form = { ...row, cateId: [] }
          if (row.catePId) { form.cateId.push(row.catePId) }
          if (row.cateId) { form.cateId.push(row.cateId) }
          this.$refs.operaCarsWindow.form = form
          this.$refs.operaCarsWindow.loadMember()
        }
admin/src/views/vehicle/manager.vue
@@ -1,107 +1,40 @@
<template>
  <div class="main_app">
    <QueryForm
      v-model="filters"
      :query-form-config="queryFormConfig"
      @handleQuery="getList(1)"
      @clear="clear"
    />
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="table_btns">
      <el-button icon="el-icon-plus" @click="handleEdit()" type="primary"
        >新建</el-button
      >
      <el-button icon="el-icon-plus" @click="handleEdit()" type="primary">新建</el-button>
      <el-button @click="handleAppr" type="primary">下发授权</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column
        prop="name"
        label="车牌照"
        min-width="100"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="车辆类型"
        min-width="80"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="授权停车场"
        min-width="100"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="车主姓名"
        min-width="80"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="申请有效期"
        min-width="110"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="停车场下发"
        min-width="100"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="操作人"
        min-width="80"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="操作时间"
        min-width="110"
        show-overflow-tooltip
      />
      <el-table-column prop="name" label="车牌照" min-width="100" show-overflow-tooltip />
      <el-table-column prop="name" label="业务类型" min-width="80" show-overflow-tooltip />
      <el-table-column prop="name" label="授权停车场" min-width="100" show-overflow-tooltip />
      <el-table-column prop="name" label="车主姓名" min-width="80" show-overflow-tooltip />
      <el-table-column prop="name" label="申请有效期" min-width="110" show-overflow-tooltip />
      <el-table-column prop="name" label="停车场下发" min-width="100" show-overflow-tooltip />
      <el-table-column prop="name" label="操作人" min-width="80" show-overflow-tooltip />
      <el-table-column prop="name" label="操作时间" min-width="110" show-overflow-tooltip />
      <el-table-column label="操作" width="230" fixed="right">
        <!-- v-permissions="['business:company:update']" -->
        <template slot-scope="{ row }">
          <el-button type="text" icon="el-icon-edit" @click="handleEdit(row)"
            >编辑</el-button
          >
          <el-button
            type="text"
            icon="el-icon-delete"
            @click="handleDel(row)"
            class="red"
            >删除</el-button
          >
          <el-button type="text" icon="el-icon-edit" @click="handleEdit(row)">编辑</el-button>
          <el-button type="text" icon="el-icon-delete" @click="handleDel(row)" class="red">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <pagination
      @size-change="handleSizeChange"
      @current-change="getList"
      :pagination="pagination"
    />
    <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    <!--  -->
    <el-dialog
      :title="param.id ? '编辑车辆' : '新增车辆'"
      :visible.sync="isShowEdit"
      width="600px"
    >
    <el-dialog :title="param.id ? '编辑车辆' : '新增车辆'" :visible.sync="isShowEdit" width="600px">
      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
        <el-form-item label="车牌照">
          <el-input type="text" placeholder="请输入" v-model="param.explain" />
        </el-form-item>
        <el-form-item label="车辆类型">
        <el-form-item label="业务类型">
          <el-radio v-model="param.aa" label="1">员工车辆</el-radio>
        </el-form-item>
        <el-form-item label="车主姓名">
          <el-select
            v-model="param.b"
            filterable
            placeholder="请选择,单选,支持搜索"
          >
          <el-select v-model="param.b" filterable placeholder="请选择,单选,支持搜索">
            <el-option></el-option>
          </el-select>
        </el-form-item>
@@ -113,33 +46,17 @@
    </el-dialog>
    <!--  -->
    <el-dialog title="停车场授权" :visible.sync="isShowAuthor" width="600px">
      <el-form
        :model="authorization"
        :rules="rules"
        ref="authorForm"
        label-width="100px"
      >
      <el-form :model="authorization" :rules="rules" ref="authorForm" label-width="100px">
        <el-form-item label="授权停车场">
          <el-select
            v-model="authorization.b"
            filterable
            placeholder="请选择,多选"
          >
          <el-select v-model="authorization.b" filterable placeholder="请选择,多选">
            <el-option></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="申请有效期">
          <el-radio v-model="authorization.aa" label="1">长期有效</el-radio>
          <div class="mt10">
            <el-date-picker
              v-model="authorization.ac"
              type="daterange"
              range-separator="至"
              start-placeholder="开始日期"
              format="yyyy-MM-dd HH:mm:ss"
              value-format="yyyy-MM-dd HH:mm:ss"
              end-placeholder="结束日期"
            >
            <el-date-picker v-model="authorization.ac" type="daterange" range-separator="至" start-placeholder="开始日期"
              format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" end-placeholder="结束日期">
            </el-date-picker>
          </div>
        </el-form-item>
@@ -160,7 +77,7 @@
    Pagination,
    QueryForm
  },
  data () {
  data() {
    return {
      filters: {},
      loading: false,
@@ -174,7 +91,7 @@
          {
            filed: 'name',
            type: 'select',
            label: '车辆类型',
            label: '业务类型',
            options: []
          },
          {
@@ -201,21 +118,21 @@
    }
  },
  methods: {
    handleSub () {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    authorSub () {},
    handleEdit (row) {
    authorSub() { },
    handleEdit(row) {
      this.isShowEdit = true
    },
    handleAppr () {
    handleAppr() {
      this.isShowAuthor = true
    },
    handleDel (row) {
    handleDel(row) {
      this.$confirm('确认删除该车辆', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
@@ -224,14 +141,13 @@
      })
    },
    getList (page) { },
    clear () { },
    handleSizeChange (capacity) {
    getList(page) { },
    clear() { },
    handleSizeChange(capacity) {
      this.pagination.capacity = capacity
    }
  }
}
</script>
<style>
</style>
<style></style>