jiangping
2024-05-27 23a5c0be948801efa0e04f6e656c126969d17612
最新版本
已添加6个文件
已删除1个文件
已修改13个文件
1671 ■■■■■ 文件已修改
admin/src/api/business/hiddenDanger.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/hiddenDangerParam.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/visitReason.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/style/style.scss 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerParamWindow.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerWindow.vue 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaVisitreasonWindow.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitOrigin.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/areaSet.vue 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/record.vue 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/typeSet.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/authorizationRecord.vue 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/parkBook.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Date.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerParamCloudController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/hiddenDanger.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/page', data, {
    trim: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/updateById', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/hiddenDanger/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/visitsAdmin/cloudService/business/hiddenDanger/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/api/business/hiddenDangerParam.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/page', data, {
    trim: true
  })
}
export function allList (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/list', data, {
    trim: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/updateById', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/hiddenDangerParam/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/visitsAdmin/cloudService/business/hiddenDangerParam/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/api/business/visitReason.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/visitsAdmin/cloudService/business/visitReason/page', data, {
    trim: true
  })
}
export function allList (data) {
  return request.post('/visitsAdmin/cloudService/business/visitReason/list', data, {
    trim: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/visitReason/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/visitReason/updateById', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/visitReason/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/visitsAdmin/cloudService/business/visitReason/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/assets/style/style.scss
@@ -114,10 +114,20 @@
    font-weight: bold;
  }
}
.status-blue{
  color: #3C77DA;
}
.status-green{
  color:green;
}
.status-red{
  color:red;
}
.tip-warn {
  margin: 4px 0 25px 0;
  font-size: 12px;
  color: #999;
  line-height: 25px;
  i {
    color: orange;
    margin-right: 4px;
admin/src/components/business/OperaHiddenDangerParamWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
<template>
    <GlobalWindow
        :title="title"
        width="500px"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
      <el-form :model="form" ref="form" :rules="rules">
          <el-form-item label="名称" prop="name">
            <el-input v-model="form.name" placeholder="请输入名称" v-trim/>
          </el-form-item>
          <el-form-item label="排序码(升序)" prop="sortnum">
            <el-input v-model="form.sortnum" type="number"  placeholder="请输入排序码" v-trim/>
          </el-form-item>
          <el-form-item v-if="form.type==0" label="选择安全员:" prop="memberIdList">
            <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="请选择">
              <el-option
                  v-for="item in memberList"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { allList } from '@/api/business/member'
export default {
  name: 'OperaHiddenDangerParamWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      memberList: [],
      form: {
        id: null,
        name: null,
        memberIdList: null,
        type: null,
        sortnum: null
      },
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入名称' }
        ]
      }
    }
  },
  created () {
    this.config({
      api: '/business/hiddenDangerParam',
      'field.id': 'id'
    })
  },
  methods: {
    open (title, target,type) {
      this.title = title
      this.visible = true
      this.form.type=type
      this.loadMember()
      // æ–°å»ºç»„织
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
          this.form.type=type
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
          this.form.type=type
          if (this.type ==0 && target.memberIds != null && target.memberIds != '') {
            let t = target.memberIds.split(',')
            this.form.memberIdList =[]
            t.forEach(item =>{
              this.form.memberIdList.push(parseInt(item))
            });
          }
        }
      })
    },
    loadMember () {
      allList({
        type: 2
      })
        .then(res => {
          this.memberList = res
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking = false
        })
    }
  }
}
</script>
admin/src/components/business/OperaHiddenDangerWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,401 @@
<template>
  <GlobalWindow
    :title="title"
    :visible.sync="visable"
    @confirm="confirm"
    @close="reject"
  >
    <div class="modal_wrap">
      <div class="modal_content">
        <div class="header">
          <div class="left">
            <div class="h1">隐患随手拍</div>
            <div class="time">提报时间:{{model.createDate}}</div>
          </div>
          <div class="right" v-if="model.status==0">待审核</div>
          <div class="right" v-if="model.status==1">已处理</div>
          <div class="right" v-if="model.status==2">已撤销</div>
        </div>
        <div class="info">
          <div class="title">隐患随手拍详情</div>
          <div class="list">
            <div class="item">
              <div class="label">提报人</div>
              <div class="value">{{model.memberName || ''}} {{model.memberPhone || ''}}</div>
            </div>
            <div class="item">
              <div class="label">隐患区域</div>
              <div class="value">{{model.areaName || ''}}</div>
            </div>
            <div class="item">
              <div class="label">隐患类型</div>
              <div class="value">{{model.categoryName || ''}}</div>
            </div>
            <div class="item">
              <div class="label">隐患描述</div>
              <div class="value">{{model.content || ''}}</div>
            </div>
            <div class="item">
              <div class="label">现场情况</div>
              <div class="value" v-if="model.submitFileList ==null || !model.submitFileList.length">无</div>
              <div class="value" v-if="model.submitFileList !=null && model.submitFileList.length">
                <span v-for="item in model.submitFileList" :key="item.id">{{item.fileurlFull}}</span>
              </div>
            </div>
            <div class="item" v-if="model.status==1">
              <div class="label">处理前</div>
              <div class="value"></div>
            </div>
            <div class="item" v-if="model.status==1">
              <div class="label">处理后</div>
              <div class="value"></div>
            </div>
            <div class="item" v-if="model.status==1 || model.status==2">
              <div class="label">处理说明</div>
              <div class="value">{{model.checkInfo}}</div>
            </div>
          </div>
        </div>
      </div>
      <div class="side">
        <div class="side_title">审批流程</div>
        <div class="list">
          <div class="item">
            <div class="separate"></div>
            <div class="info">
              <i class="el-icon-success icon"></i>
              <img src="" class="avatar" alt="" />
              <div class="content">
                <div class="line">
                  <div class="name">刘某刘某</div>
                  <div class="time">2020-02-02 12:20</div>
                </div>
                <div class="line">
                  <div class="company">中国移动有限公司</div>
                </div>
              </div>
            </div>
          </div>
          <div class="item">
            <!-- <div v-if="" class="separate"></div> -->
            <div class="info">
              <i class="el-icon-success icon"></i>
              <img src="" class="avatar" alt="" />
              <div class="content">
                <div class="line">
                  <div class="name">刘某刘某</div>
                  <div class="time">2020-02-02 12:20</div>
                </div>
                <div class="line">
                  <div class="company">
                    ä¸­å›½ç§»åŠ¨æœ‰é™å…¬å¸( <span class="status">已同意</span> )
                  </div>
                </div>
              </div>
            </div>
            <div class="remark">提交约好的</div>
          </div>
        </div>
      </div>
    </div>
    <!--  -->
    <template #btns>
      <el-button type="primary" plain @click="handleTransfer">转交</el-button>
    </template>
    <!--  åŒæ„/拒绝 -->
    <el-dialog
      append-to-body
      :title="apprTitle"
      :visible.sync="isShowAppr"
      width="480px"
    >
      <el-input
        type="textarea"
        :placeholder="apprTitle + '说明,非必填'"
        :rows="4"
        v-model="param.explain"
      />
      <span slot="footer" class="dialog-footer">
        <el-button @click="isShowAppr = false">取消</el-button>
        <el-button type="primary" @click="isShowAppr = false">确定</el-button>
      </span>
    </el-dialog>
    <!-- é𐿂£ -->
    <el-dialog
      append-to-body
      title="隐患"
      :visible.sync="isShowProblem"
      width="480px"
    >
      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
        <el-form-item label="退回时间">
          <el-date-picker
            class="w300"
            value-format="yyyy-MM-dd"
            type="date"
            placeholder="选择日期"
            v-model="param.date"
          />
        </el-form-item>
        <el-form-item label="整改前">
          <div class="df_ac">
            <img src="@/assets/avatar/man.png" />
            <el-upload
              class="avatar-uploader"
              action="https://jsonplaceholder.typicode.com/posts/"
              :show-file-list="false"
              :on-success="handleAvatarSuccess"
              :before-upload="beforeAvatarUpload"
            >
              <img v-if="param.url" :src="param.url" class="avatar" />
              <div v-else class="upload_box">
                <el-icon class="el-icon-plus icon" />
                <div class="text">图片/视频</div>
              </div>
            </el-upload>
          </div>
        </el-form-item>
        <el-form-item label="退回说明">
          <el-input
            type="textarea"
            placeholder="请填写说明"
            :rows="4"
            v-model="param.explain"
          />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="isShowProblem = false">取消</el-button>
        <el-button type="primary" @click="isShowProblem = false"
          >确定</el-button
        >
      </span>
    </el-dialog>
  </GlobalWindow>
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
export default {
  components: { GlobalWindow },
  data() {
    return {
      title: '访客预约详情',
      visable: false,
      model: { },
      isShowAppr: false,
      apprTitle: '同意',
      param: {},
      isShowProblem: false,
      rules: {}
    }
  },
  methods: {
    open(title,target){
      this.title =title
      this.visable=true
      this.model = target
    },
    confirm() {
      console.log('--')
    },
    handleTransfer() {
      this.isShowProblem = true
    },
    reject() { },
    handleAvatarSuccess() { },
    beforeAvatarUpload() { }
  }
}
</script>
<style lang="scss" scoped>
.upload_box {
  width: 84px;
  height: 84px;
  border-radius: 4px;
  background-color: #f7f7f7;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  color: #999999;
  border: 1px solid #e4e4e4;
  .icon {
    font-size: 24px;
  }
  .text {
    font-size: 12px;
  }
}
.modal_wrap {
  display: flex;
  height: 100%;
  .modal_content {
    flex: 1;
    padding: 0px 30px;
    border-radius: 8px;
    overflow: hidden;
    height: 100%;
    .title {
      font-weight: 600;
      font-size: 18px;
      color: #333333;
      margin-bottom: 20px;
      margin-top: 30px;
    }
    .info {
      .list {
        display: flex;
        flex-wrap: wrap;
        .item {
          display: flex;
          width: 40%;
          margin-bottom: 20px;
          &:nth-of-type(2n) {
            width: 60%;
          }
          .label {
            color: #888888;
            width: 68px;
          }
          .value {
            color: #111111;
          }
        }
      }
    }
    .header {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 20px 30px;
      margin: 0 -30px;
      border-radius: 8px 8px 0 0;
      background: linear-gradient(to right, #f2f6fe, #cadffa);
      .h1 {
        font-weight: 600;
        font-size: 22px;
        color: #111111;
        margin-bottom: 8px;
      }
      .time {
        font-size: 14px;
        color: #999999;
      }
      .right {
        height: 40px;
        font-size: 16px;
        color: #ffffff;
        line-height: 40px;
        padding: 0 20px;
        background: #207ff7;
        box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
        border-radius: 16px 0px 16px 0px;
      }
    }
    .table_info {
      .name_wrap {
        display: flex;
        align-items: center;
        .avatar {
          width: 40px;
          height: 40px;
          border-radius: 50%;
          margin-right: 12px;
        }
        .content {
          .line {
            display: flex;
          }
          .tag {
            color: #b2cbf9;
            border: 1px solid #b2cbf9;
            padding: 0px 4px;
            border-radius: 4px;
            margin-left: 6px;
          }
        }
      }
    }
  }
  .side {
    height: 100%;
    width: 420px;
    background: #ffffff;
    border-left: 20px solid #f7f7f7;
    .list {
      .item {
        padding: 8px 0;
        position: relative;
        .separate {
          position: absolute;
          border-left: 2px dashed #cccccc;
          left: 51px;
          height: calc(100% - 24px);
          top: 46px;
        }
        .info {
          display: flex;
          align-items: center;
          margin-left: 40px;
          .icon {
            position: relative;
            z-index: 11;
            color: #53b76f;
            font-size: 24px;
          }
          .avatar {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            margin: 0 12px 0 16px;
            border: 1px solid;
          }
          .content {
            flex: 1;
            .line {
              display: flex;
              justify-content: space-between;
              align-content: center;
              margin-bottom: 6px;
              .name {
                font-weight: 600;
                font-size: 16px;
                color: #111111;
              }
              .time {
                color: #888888;
              }
              .company {
                font-size: 13px;
                color: #888888;
                .status {
                  color: #00ba67;
                }
              }
            }
          }
        }
        .remark {
          background: #f7f7f7;
          border-radius: 4px;
          padding: 13px 15px;
          color: #666666;
          margin-left: 120px;
        }
      }
    }
  }
}
</style>
admin/src/components/business/OperaVisitreasonWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
<template>
    <GlobalWindow
        :title="title"
        width="500px"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
      <el-form :model="form" ref="form" :rules="rules">
          <el-form-item label="事由" prop="title">
            <el-input v-model="form.title" placeholder="请输入名称" v-trim/>
          </el-form-item>
          <el-form-item label="排序码(升序)" prop="sortnum">
            <el-input v-model="form.sortnum" type="number" placeholder="请输入排序码" v-trim/>
          </el-form-item>
        </el-form>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
export default {
  name: 'OperaVisitreasonWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      memberList: [],
      form: {
        id: null,
        title: null,
        sortnum: null
      },
      // éªŒè¯è§„则
      rules: {
        title: [
          { required: true, message: '请输入事由' }
        ]
      }
    }
  },
  created () {
    this.config({
      api: '/business/visitReason',
      'field.id': 'id'
    })
  },
  methods: {
    open (title, target) {
      this.title = title
      this.visible = true
      // æ–°å»ºç»„织
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
      })
    }
  }
}
</script>
admin/src/views/business/internalMember.vue
@@ -31,16 +31,13 @@
                    <el-option label="同步失败" value="2"></el-option>
                </el-select>
            </el-form-item>
          <el-form-item label=""  >
              <el-checkbox style="font-size: 12px"  label="1" v-model="searchForm.includeChild" key="1"  >是否包含下级组织</el-checkbox>
          </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <template v-slot:menu>
            <div style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">企业组织架构</div>
            <div style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">企业组织架构</div>areaSet
            <div style="width: 100%; height: calc(100vh - 170px); overflow-y: scroll;">
                <Tree :list="companyTree" :defaultProps="{name: 'name', status: 'fsStatus', children: 'childList', id: 'id'}" @callback="callback" />
            </div>
@@ -55,6 +52,9 @@
              <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('人员导入',searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">人员导入</el-button></li>
                <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li>
                <li><el-button type="primary" v-permissions="['business:empower:create']"  @click="startEmpowerBatch()"  icon="el-icon-plus">下发授权</el-button></li>
             <li style="float: right">
                <el-checkbox style="font-size: 12px"  label="1" v-model="searchForm.includeChild" key="1"  @change="search" >是否包含下级组织</el-checkbox>
             </li>
            </ul>
            <el-table
                v-loading="isWorking.search"
admin/src/views/business/visitOrigin.vue
@@ -1,114 +1,82 @@
<template>
  <div class="main_app">
    <div class="table_btns">
      <el-button icon="el-icon-plus" @click="handleEdit()" type="primary"
        >新建</el-button
  <TableLayout :permissions="['business:member:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="120px" inline>
      <el-form-item label="拜访事由" prop="name">
        <el-input v-model="searchForm.title" clearable placeholder="请输入拜访事由" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <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:visitreason:create','business:visitreason:delete']">
        <li><el-button type="primary" @click="$refs.OperaVisitreasonWindow.open('新建拜访事由',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:visitreason:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:visitreason:delete']">批量删除</el-button></li>
      </ul>
      <el-table
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
          @selection-change="handleSelectionChange"
      >
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column
        prop="name"
        label="拜访事由"
        min-width="100"
      ></el-table-column>
      <el-table-column
        prop="name"
        label="排序码"
        min-width="80"
      ></el-table-column>
      <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
          >
        </template>
      </el-table-column>
    </el-table>
    <pagination
      @size-change="handleSizeChange"
      @current-change="getList"
      :pagination="pagination"
    />
    <!--  -->
    <el-dialog title="拜访事由" :visible.sync="isShowEdit" width="480px">
      <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-input
            type="text"
            placeholder="请输入"
            oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)"
            v-model="param.sortNum"
          />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="isShowEdit = false">取消</el-button>
        <el-button type="primary" @click="handleSub">确定</el-button>
      </span>
    </el-dialog>
  </div>
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="title" label="拜访事由" min-width="200px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码"  min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="200px"></el-table-column>
        <el-table-column
            v-if="containPermissions(['business:visitreason:update', 'business:visitreason:delete' ])"
            label="操作"
            min-width="250"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaVisitreasonWindow.open('编辑拜访事由',row,searchForm.type)" v-permissions="['business:visitreason:update']">编辑</el-button>
            <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:visitreason:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaVisitreasonWindow ref="OperaVisitreasonWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaVisitreasonWindow from '@/components/business/OperaVisitreasonWindow'
export default {
  components: {
    Pagination
  },
  name: 'areaSet',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaVisitreasonWindow },
  data () {
    return {
      loading: false,
      pagination: {
        capacity: 10,
        page: 1
      },
      list: [{}],
      total: 0,
      isShowEdit: false,
      param: {},
      rules: {}
      // æœç´¢
      searchForm: {
        title: ''
      }
    }
  },
  created () {
    this.config({
      module: '拜访事由配置',
      api: '/business/visitReason',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    handleSub () {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEdit (row) {
      this.isShowEdit = true
    },
    handleDel (row) {
      this.$confirm('确认删除拜访事由', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
      })
    },
    getList (page) { },
    clear () { },
    handleSizeChange (capacity) {
      this.pagination.capacity = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/operation/danger/areaSet.vue
@@ -1,116 +1,84 @@
<template>
  <div class="main_app">
    <div class="mb20">
      <el-button type="primary" @click="handleEdit()">新增</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="100"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="安全员"
        min-width="100"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="操作"
        min-width="80"
        align="center"
        show-overflow-tooltip
  <TableLayout :permissions="['business:member:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="120px" inline>
      <el-form-item label="隐患区域" prop="name">
        <el-input v-model="searchForm.name" clearable placeholder="请输入隐患区域" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <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:hiddendangerparam:create','business:hiddendangerparam:delete']">
        <li><el-button type="primary" @click="$refs.OperaHiddenDangerParamWindow.open('新建隐患区域',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:hiddendangerparam:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:hiddendangerparam:delete']">批量删除</el-button></li>
      </ul>
      <el-table
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
          @selection-change="handleSelectionChange"
      >
        <template v-slot="scope">
          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
          <el-button type="text" class="red" @click="handleDel(scope.row)"
            >删除</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <pagination
      @size-change="handleSizeChange"
      @current-change="getList"
      :pagination="pagination"
    />
    <el-dialog
      :title="param.id ? '编辑隐患区域' : '新增隐患区域'"
      :visible.sync="isShowEdit"
      width="480px"
    >
      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
        <el-form-item label="隐患区域" prop="name">
          <el-input v-model="param.aaa"></el-input>
        </el-form-item>
        <el-form-item label="排序码(升序)" prop="name">
          <el-input
            v-model="param.ccc"
            oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 7)"
          />
        </el-form-item>
        <el-form-item label="安全员" prop="name">
          <el-select placeholder="请选择,多选" multiple filterable>
            <el-option></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="isShowEdit = false">取消</el-button>
        <el-button type="primary" @click="handleSub">确定</el-button>
      </span>
    </el-dialog>
  </div>
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="隐患区域" min-width="200px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码"  min-width="100px"></el-table-column>
        <el-table-column prop="memberNames" label="安全员" min-width="200px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="200px"></el-table-column>
        <el-table-column
            v-if="containPermissions(['business:hiddendangerparam:update', 'business:hiddendangerparam:delete' ])"
            label="操作"
            min-width="250"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaHiddenDangerParamWindow.open('编辑隐患区域',row,searchForm.type)" v-permissions="['business:hiddendangerparam:update']">编辑</el-button>
            <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:hiddendangerparam:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaHiddenDangerParamWindow ref="OperaHiddenDangerParamWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaHiddenDangerParamWindow from '@/components/business/OperaHiddenDangerParamWindow'
export default {
  components: {
    Pagination
  },
  name: 'areaSet',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaHiddenDangerParamWindow },
  data () {
    return {
      loading: false,
      pagination: {
        capacity: 10,
        page: 1
      },
      list: [],
      total: 0,
      isShowEdit: false,
      param: {},
      rules: {}
      // æœç´¢
      searchForm: {
        name: '',
        type:0
      }
    }
  },
  created () {
    this.config({
      module: '隐患随手拍配置',
      api: '/business/hiddenDangerParam',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    handleSub () {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    getList (page) { },
    clear () { },
    handleEdit (row) {
      this.isShowEdit = true
    },
    handleDel () { },
    handleSizeChange (capacity) {
      this.pagination.capacity = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/operation/danger/record.vue
@@ -1,113 +1,191 @@
<template>
  <div class="main_app">
    <QueryForm
      v-model="filters"
      :query-form-config="queryFormConfig"
      @handleQuery="getList(1)"
      @clear="clear"
    />
    <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="100"
        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
  <TableLayout :permissions="['business:empower:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="提报人" prop="memberName">
        <el-input v-model="searchForm.memberName" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
      </el-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="areaId">
        <el-select v-model="searchForm.areaId" placeholder="请选择隐患区域" @keypress.enter.native="search">
          <el-option
              v-for="item in areaList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="隐患类型" prop="typeId">
        <el-select v-model="searchForm.cateId" placeholder="请选择隐患类型" @keypress.enter.native="search">
          <el-option
              v-for="item in cateList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="提报时间" prop="startTime">
        <el-date-picker
            @change="seleTime"
            v-model="time"
            @keypress.enter.native="search"
            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:empower:create', 'business:empower:delete']">
        <!--<li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">导出</el-button></li> -->
      </ul>
      <el-table
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
          @selection-change="handleSelectionChange"
      >
        <template v-slot="scope">
          <el-button type="text" @click="handleDetail(scope.row)">查看详情</el-button>
        </template>
      </el-table-column>
    </el-table>
    <pagination
      @size-change="handleSizeChange"
      @current-change="getList"
      :pagination="pagination"
    />
  </div>
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="areaName" label="隐患区域" min-width="150px"></el-table-column>
        <el-table-column prop="categoryName" label="隐患类型" min-width="150px"></el-table-column>
        <el-table-column prop="memberName" label="提报人" min-width="80px"></el-table-column>
        <el-table-column prop="companyName" label="所属组织" min-width="150px"></el-table-column>
        <el-table-column prop="createDate" label="提报时间" min-width="150px"></el-table-column>
        <el-table-column label="处理结果" min-width="100px">
          <template slot-scope="{row}">
            <span class="status-blue"  v-if="row.status === 0">待处理</span>
            <span class="status-green"   v-if="row.status === 1">已处理</span>
            <span class="status-red"   v-if="row.status === 2">已撤销</span>
          </template>
        </el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="150px"></el-table-column>
        <el-table-column
            label="操作"
            min-width="100"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaHiddenDangerWindow.open('隐患随手拍详情',row)" >查看详情</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
import { timeForMat } from '@/utils/util'
import { allList } from '@/api/business/hiddenDangerParam'
export default {
  components: {
    Pagination,
    QueryForm
  },
  name: 'Empower',
  extends: BaseTable,
  components: { TableLayout, Pagination ,OperaHiddenDangerWindow},
  data () {
    return {
      filters: {},
      loading: false,
      queryFormConfig: {
        formItems: [
          {
            filed: 'name',
            type: 'select',
            label: '隐患区域',
            options: []
          },
          {
            filed: 'name',
            type: 'select',
            label: '隐患类型',
            options: []
          },
          {
            filed: 'selDate',
            type: 'daterange',
            label: '隐患提报日期'
          }
        ],
        online: true
      // æœç´¢
      searchForm: {
        memberName: '',
        companyName: '',
        queryStartTime: '',
        queryEndTime: '',
        areaId: null,
        cateId: null
      },
      pagination: {
        capacity: 10,
        page: 1
      },
      list: [],
      total: 0
      cateList: [],
      areaList: [],
      time: []
    }
  },
  created () {
    this.config({
      module: '隐患随手拍管理',
      api: '/business/hiddenDanger',
      'field.id': 'id',
      'field.main': 'id'
    })
    // this.search()
    this.changeRadio('0')
    this.loadParams()
  },
  methods: {
    handleDetail () {},
    getList (page) { },
    clear () { },
    handleSizeChange (capacity) {
      this.pagination.capacity = capacity
    changeRadio (e) {
      this.searchForm.radio = e
      if (e === '0') {
        this.searchForm.queryStartTime = timeForMat(0)[0]
        this.searchForm.queryEndTime = timeForMat(0)[1]
        this.time = timeForMat(0)
      } else if (e === '1') {
        this.searchForm.queryStartTime = timeForMat(6)[0]
        this.searchForm.queryEndTime = timeForMat(6)[1]
        this.time = timeForMat(6)
      } else if (e === '2') {
        this.searchForm.queryStartTime = timeForMat(29)[0]
        this.searchForm.queryEndTime = timeForMat(29)[1]
        this.time = timeForMat(29)
      }
      this.search()
    },
    loadParams () {
      allList({
      })
        .then(res => {
          if (res != null && res.length) {
            res.forEach(item => {
              if (item && item.type != null && item.type === 0) {
                this.areaList.push(item)
              }
              if (item && item.type != null && item.type === 1) {
                this.cateList.push(item)
              }
            })
          }
        })
        .catch(e => {
          // this.$tip.apiFailed(e)
        })
        .finally(() => {
        })
    },
    seleTime (e) {
      this.searchForm.queryStartTime = e[0]
      this.searchForm.queryEndTime = e[1]
      this.searchForm.radio = null
      this.search()
    },
    reset () {
      this.$refs.searchForm.resetFields()
      this.searchForm.radio = '0'
      this.changeRadio('0')
      // this.search()
    }
  }
}
</script>
<style>
</style>
admin/src/views/operation/danger/typeSet.vue
@@ -1,104 +1,83 @@
<template>
  <div class="main_app">
    <div class="mb20">
      <el-button type="primary" @click="handleEdit()">新增</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="100"
        show-overflow-tooltip
      />
      <el-table-column
        prop="name"
        label="操作"
        min-width="80"
        align="center"
        show-overflow-tooltip
  <TableLayout :permissions="['business:member:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="120px" inline>
      <el-form-item label="隐患类型" prop="name">
        <el-input v-model="searchForm.name" clearable placeholder="请输入隐患类型" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <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:hiddendangerparam:create','business:hiddendangerparam:delete']">
        <li><el-button type="primary" @click="$refs.OperaHiddenDangerParamWindow.open('新建隐患类型',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:hiddendangerparam:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:hiddendangerparam:delete']">批量删除</el-button></li>
      </ul>
      <el-table
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
          @selection-change="handleSelectionChange"
      >
        <template v-slot="scope">
          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
          <el-button type="text" class="red" @click="handleDel(scope.row)"
            >删除</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <pagination
      @size-change="handleSizeChange"
      @current-change="getList"
      :pagination="pagination"
    />
    <el-dialog
      :title="param.id ? '编辑隐患类型' : '新增隐患类型'"
      :visible.sync="isShowEdit"
      width="480px"
    >
      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
        <el-form-item label="隐患类型" prop="name">
          <el-input v-model="param.aaa"></el-input>
        </el-form-item>
        <el-form-item label="排序码(升序)" prop="name">
          <el-input
            oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 7)"
          />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="isShowEdit = false">取消</el-button>
        <el-button type="primary" @click="handleSub">确定</el-button>
      </span>
    </el-dialog>
  </div>
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="隐患类型" min-width="200px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码"  min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="200px"></el-table-column>
        <el-table-column
            v-if="containPermissions(['business:hiddendangerparam:update', 'business:hiddendangerparam:delete' ])"
            label="操作"
            min-width="250"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaHiddenDangerParamWindow.open('编辑隐患类型',row,searchForm.type)" v-permissions="['business:hiddendangerparam:update']">编辑</el-button>
            <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:hiddendangerparam:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaHiddenDangerParamWindow ref="OperaHiddenDangerParamWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaHiddenDangerParamWindow from '@/components/business/OperaHiddenDangerParamWindow'
export default {
  components: {
    Pagination
  },
  name: 'areaSet',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaHiddenDangerParamWindow },
  data () {
    return {
      loading: false,
      pagination: {
        capacity: 10,
        page: 1
      },
      list: [],
      total: 0,
      isShowEdit: false,
      param: {},
      rules: {}
      // æœç´¢
      searchForm: {
        name: '',
        type:1
      }
    }
  },
  created () {
    this.config({
      module: '隐患随手拍配置类型',
      api: '/business/hiddenDangerParam',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    handleSub () {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    getList (page) { },
    clear () { },
    handleEdit (row) {
      this.isShowEdit = true
    },
    handleDel () { },
    handleSizeChange (capacity) {
      this.pagination.capacity = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/vehicle/authorizationRecord.vue
ÎļþÒÑɾ³ý
admin/src/views/vehicle/parkBook.vue
@@ -45,7 +45,7 @@
                <el-table-column prop="memberName" label="姓名" min-width="100px"></el-table-column>
                <el-table-column prop="memberPhone" label="手机号" min-width="100px"></el-table-column>
                <el-table-column prop="companyName" label="组织" min-width="100px"></el-table-column>
                <el-table-column prop="startTime" label="有效期" min-width="100px">
                <el-table-column prop="startTime" label="有效期" min-width="130px">
                    <template slot-scope="{row}">
                        <span>{{validity(row.startTime, row.endTime)}}</span>
<!--                        <span v-if="!row.startTime || !row.endTime">长期</span>-->
server/system_service/src/main/java/com/doumee/core/utils/Date.java
@@ -16,6 +16,9 @@
     * @return java.util.Date
     */
    public java.util.Date getStart (java.util.Date date) {
        if(date ==null){
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
@@ -42,6 +45,9 @@
     * @return java.util.Date
     */
    public java.util.Date getEnd (java.util.Date date) {
        if(date ==null){
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerParamCloudController.java
@@ -16,6 +16,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @since 2024/04/28 16:06
@@ -62,6 +64,12 @@
        return ApiResponse.success(null);
    }
    @ApiOperation("查询全部")
    @PostMapping("/list")
    @CloudRequiredPermission("business:hiddendangerparam:query")
    public ApiResponse<List<HiddenDangerParam>> findPage (@RequestBody HiddenDangerParam pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(hiddenDangerParamService.findList(pageWrap));
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:hiddendangerparam:query")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
@@ -10,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * é𐿂£åŒºåŸŸé…ç½®ç±»åž‹ä¿¡æ¯è¡¨
@@ -32,7 +34,6 @@
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
@@ -41,7 +42,6 @@
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
@@ -79,5 +79,8 @@
    @ApiModelProperty(value = "类型 0隐患区域 1隐患类型", example = "1")
    @ExcelColumn(name="类型 0隐患区域 1隐患类型")
    private Integer type;
    @ApiModelProperty(value = "用户编码集合", example = "1")
    @TableField(exist = false)
    private List<Integer> memberIdList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
@@ -10,6 +10,7 @@
import com.doumee.dao.business.HiddenDangerParamMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.CarDriver;
import com.doumee.dao.business.model.HiddenDanger;
import com.doumee.dao.business.model.HiddenDangerParam;
import com.doumee.dao.business.model.Member;
import com.doumee.service.business.HiddenDangerParamService;
@@ -47,18 +48,19 @@
        }
        if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
            //如果是区域配置
            List<Integer> ids = Constants.getIntegerListByStrs(model.getMemberIds());
            List<Integer> ids = model.getMemberIdList();
            if(ids==null || ids.size() ==0){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,安全员信息不正确,请按要求填写内容!");
            }
           List<Member>  memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getType,Constants.TWO)
                    .in(Member::getId,ids)
                    .eq(Member::getIsdeleted,Constants.ZERO));
            if(memberList == null || memberList.size() == 0 || memberList.size() != ids.size() ){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择正确的安全员信息!");
            }
            String names = null;
            String idss = null;
            String names = "";
            String idss = "";
            for(Member member : memberList){
                if(StringUtils.isNotBlank(names)){
                    names += ",";
@@ -67,7 +69,7 @@
                    idss += ",";
                }
                names += member.getName();
                names += member.getId();
                idss += member.getId();
            }
            model.setMemberNames(names);
            model.setMemberIds(idss);
@@ -121,18 +123,19 @@
        }
        if(Constants.equalsInteger(hiddenDangerParam.getType(),Constants.ZERO)){
            //如果是区域配置,校验安全员信息是否正确
            List<Integer> ids = Constants.getIntegerListByStrs(model.getMemberIds());
            List<Integer> ids =model.getMemberIdList();
            if(ids==null || ids.size() ==0){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,安全员信息不正确,请按要求填写内容!");
            }
            List<Member>  memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getType,Constants.TWO)
                    .in(Member::getId,ids)
                    .eq(Member::getIsdeleted,Constants.ZERO));
            if(memberList == null || memberList.size() == 0 || memberList.size() != ids.size() ){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择正确的安全员信息!");
            }
            String names = null;
            String idss = null;
            String names = "";
            String idss = "";
            for(Member member : memberList){
                if(StringUtils.isNotBlank(names)){
                    names += ",";
@@ -141,7 +144,7 @@
                    idss += ",";
                }
                names += member.getName();
                names += member.getId();
                idss += member.getId();
            }
            model.setMemberNames(names);
            model.setMemberIds(idss);
@@ -176,7 +179,10 @@
    @Override
    public List<HiddenDangerParam> findList(HiddenDangerParam hiddenDangerParam) {
        hiddenDangerParam.setIsdeleted(Constants.ZERO);
        QueryWrapper<HiddenDangerParam> wrapper = new QueryWrapper<>(hiddenDangerParam);
        wrapper.lambda().orderByAsc(HiddenDangerParam::getSortnum);
        return hiddenDangerParamMapper.selectList(wrapper);
    }
  
@@ -189,13 +195,9 @@
        queryWrapper.lambda()
                .eq(pageWrap.getModel().getId() != null, HiddenDangerParam::getId, pageWrap.getModel().getId())
                .eq(pageWrap.getModel().getCreator() != null, HiddenDangerParam::getCreator, pageWrap.getModel().getCreator())
                .ge(pageWrap.getModel().getCreateDate() != null, HiddenDangerParam::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
                .le(pageWrap.getModel().getCreateDate() != null, HiddenDangerParam::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()))
                .eq(pageWrap.getModel().getEditor() != null, HiddenDangerParam::getEditor, pageWrap.getModel().getEditor())
                .ge(pageWrap.getModel().getEditDate() != null, HiddenDangerParam::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()))
                .le(pageWrap.getModel().getEditDate() != null, HiddenDangerParam::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
                .eq(pageWrap.getModel().getIsdeleted() != null, HiddenDangerParam::getIsdeleted, pageWrap.getModel().getIsdeleted())
                .eq(pageWrap.getModel().getName() != null, HiddenDangerParam::getName, pageWrap.getModel().getName())
                .like(pageWrap.getModel().getName() != null, HiddenDangerParam::getName, pageWrap.getModel().getName())
                .eq(pageWrap.getModel().getRemark() != null, HiddenDangerParam::getRemark, pageWrap.getModel().getRemark())
                .eq(pageWrap.getModel().getStatus() != null, HiddenDangerParam::getStatus, pageWrap.getModel().getStatus())
                .eq(pageWrap.getModel().getSortnum() != null, HiddenDangerParam::getSortnum, pageWrap.getModel().getSortnum())
@@ -203,6 +205,7 @@
                .eq(pageWrap.getModel().getMemberIds() != null, HiddenDangerParam::getMemberIds, pageWrap.getModel().getMemberIds())
                .eq(pageWrap.getModel().getMemberNames() != null, HiddenDangerParam::getMemberNames, pageWrap.getModel().getMemberNames())
                .eq(pageWrap.getModel().getType() != null, HiddenDangerParam::getType, pageWrap.getModel().getType())
                .orderByAsc(HiddenDangerParam::getSortnum)
                .orderByDesc(HiddenDangerParam::getCreateDate)
                .eq( HiddenDangerParam::getIsdeleted, Constants.ZERO)
        ;
@@ -213,7 +216,9 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(hiddenDangerParamMapper.selectPage(page, queryWrapper));
        PageData<HiddenDangerParam> result = PageData.from(hiddenDangerParamMapper.selectPage(page, queryWrapper));
        return result;
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -225,12 +225,12 @@
                .select("t1.name", HiddenDanger::getMemberName)
                .select("t1.phone",HiddenDanger::getMemberPhone)
                .select("t2.name",HiddenDanger::getCheckorName)
                .select("t3.phone",HiddenDanger::getCheckorPhone)
                .select("t2.phone",HiddenDanger::getCheckorPhone)
                .select("t4.company_name_path",HiddenDanger::getCompanyName);
        queryWrapper.leftJoin(Member.class,Member::getId,HiddenDanger::getMemberId)
                .leftJoin("company t4 on t1.company_id=t4.id")
                .leftJoin(Member.class,Member::getId,HiddenDanger::getCheckUserId)
                .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getCateId);
                .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getCateId)
                .leftJoin("company t4 on t1.company_id=t4.id");
        queryWrapper
                .eq(pageWrap.getModel().getId() != null, HiddenDanger::getId, pageWrap.getModel().getId())
                .eq(pageWrap.getModel().getCreator() != null, HiddenDanger::getCreator, pageWrap.getModel().getCreator())
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
@@ -117,10 +117,10 @@
                .le(pageWrap.getModel().getEditDate() != null, VisitReason::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
                .eq(pageWrap.getModel().getIsdeleted() != null, VisitReason::getIsdeleted, pageWrap.getModel().getIsdeleted())
                .eq(pageWrap.getModel().getRemark() != null, VisitReason::getRemark, pageWrap.getModel().getRemark())
                .eq(pageWrap.getModel().getTitle() != null, VisitReason::getTitle, pageWrap.getModel().getTitle())
                .like(pageWrap.getModel().getTitle() != null, VisitReason::getTitle, pageWrap.getModel().getTitle())
                .eq(pageWrap.getModel().getSortnum() != null, VisitReason::getSortnum, pageWrap.getModel().getSortnum())
                .eq(pageWrap.getModel().getType() != null, VisitReason::getType, pageWrap.getModel().getType())
                .orderByDesc(VisitReason::getSortnum)
                .orderByAsc(VisitReason::getSortnum)
        ;
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {