MrShi
2024-03-07 2ae60f81bbef5b2de4a9cc3e90bbedf19e8e4446
mrshi
已添加2个文件
已修改9个文件
433 ■■■■ 文件已修改
admin/src/components/business/OperaDeviceRoleWindow.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/cardOpeningRecord.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deletePersonnel.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceRole.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/interfaceLog.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalCompany.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/parkBook.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitEvent.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitorSources.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/vue.config.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaDeviceRoleWindow.vue
@@ -2,6 +2,7 @@
    <GlobalWindow
        :title="title"
        :visible.sync="visible"
        width="50%"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
@@ -23,9 +24,15 @@
                    <el-radio :label="0">全部门禁</el-radio>
                    <el-radio :label="1">部分门禁</el-radio>
                </el-radio-group>
                <el-checkbox-group v-model="form.doorIds" v-if="form.radio === 1">
                    <el-checkbox :label="item.id" v-for="(item, index) in device" :key="index">{{item.name}}</el-checkbox>
                </el-checkbox-group>
                <el-transfer
                    v-if="form.radio === 1"
                    style="margin-top: 15px;"
                    :titles="['未选门禁组', '已选门禁组']"
                    filterable
                    filter-placeholder="请输入门禁组名称"
                    v-model="form.doorIds"
                    :data="device">
                </el-transfer>
            </el-form-item>
        </el-form>
    </GlobalWindow>
@@ -148,7 +155,13 @@
    getLists () {
      getList({})
        .then(res => {
          this.device = res
          this.device = res.map(item => {
            return {
              label: item.name,
              key: item.id
            }
          })
          console.log(this.device)
        })
    },
    changeRadio (e) {
@@ -176,3 +189,9 @@
  }
}
</script>
<style>
    .el-transfer-panel {
        width: 350px;
    }
</style>
admin/src/components/business/cardOpeningRecord.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
<template>
    <GlobalWindow
        :title="title"
        width="70%"
        :visible.sync="visible"
        :withFooter="false"
    >
        <ul style="width: 100%; display: flex; align-items: center; margin-bottom: 20px;">
            <li style="margin-right: 10px;"><el-button type="primary" @click="batchLossReporting">挂失</el-button></li>
            <li><el-button type="primary" @click="batchDecoupling">解挂</el-button></li>
        </ul>
        <el-table
            v-loading="loading"
            :data="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 prop="cardTypeName" label="卡类型" min-width="100px"></el-table-column>
            <el-table-column label="状态" min-width="100px">
                <template slot-scope="{row}">
                    <span v-if="row.status === 0">禁用</span>
                    <span v-if="row.status === 1">启用</span>
                    <span v-if="row.status === 2">退卡</span>
                    <span v-if="row.status === 3">挂失</span>
                </template>
            </el-table-column>
            <el-table-column label="用户类型" min-width="100px">
                <template slot-scope="{row}">
                    <span v-if="row.memberType === 0">劳务访客</span>
                    <span v-if="row.memberType === 2">内部人员</span>
                </template>
            </el-table-column>
            <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="createDate" label="开卡时间" min-width="100px"></el-table-column>
            <el-table-column prop="editDate" label="更新时间" min-width="100px"></el-table-column>
            <el-table-column
                label="操作"
                min-width="120"
                fixed="right"
            >
                <template slot-scope="{row}">
                    <el-button type="text" v-if="row.status === 3" @click="jiegua(row.id)">解挂</el-button>
                    <el-button type="text" v-if="row.status !== 3 && row.status !== 2" @click="tui(row.id)">退卡</el-button>
                    <el-button type="text" v-if="row.status !== 3 && row.status !== 2" @click="guashi(row.id)">挂失</el-button>
                </template>
            </el-table-column>
        </el-table>
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import { refundCard, batchLoss, batchUnLoss, fetchList } from '@/api/business/memberCard'
  export default {
    name: 'cardOpeningRecord',
    extends: BaseOpera,
    components: { GlobalWindow },
    data () {
      return {
        list: [],
        tableData: {
          selectedRows: []
        },
        loading: false
      }
    },
    created () {
      this.config({
        api: '/business/memberCard',
        'field.id': 'id'
      })
    },
    methods: {
      open (title, memberId) {
        this.title = title
        this.visible = true
        this.list = []
        this.memberId = memberId
        this.search()
      },
      handleSelectionChange (e) {
        this.tableData.selectedRows = e
      },
      search() {
        fetchList({
          capacity: 9999,
          page: 1,
          model: {
            memberId: this.memberId
          }
        }).then(res => {
          this.list = res.records
        })
      },
      // æ‰¹é‡è§£æŒ‚
      batchDecoupling () {
        let arr = []
        this.tableData.selectedRows.forEach(item => {
          arr.push({ id: item.id, status: 1 })
        })
        batchUnLoss(arr)
          .then(res => {
            this.$message.success('操作成功')
            this.search()
          })
      },
      // æ‰¹é‡æŒ‚失
      batchLossReporting() {
        let arr = []
        this.tableData.selectedRows.forEach(item => {
          arr.push({ id: item.id, status: 3 })
        })
        batchLoss(arr)
          .then(res => {
            this.$message.success('操作成功')
            this.search()
          })
      },
      // é€€å¡
      tui(id) {
        refundCard({ id, status: 2 })
          .then(res => {
            this.$message.success('操作成功')
            this.search()
          })
      },
      // æŒ‚失
      guashi(id) {
        batchLoss([{ id, status: 3 }])
          .then(res => {
            this.$message.success('操作成功')
            this.search()
          })
      },
      // è§£æŒ‚
      jiegua(id) {
        batchUnLoss([{ id, status: 1 }])
          .then(res => {
            this.$message.success('操作成功')
            this.search()
          })
      }
    }
  }
</script>
admin/src/views/business/deletePersonnel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
<template>
    <TableLayout :permissions="['business:member:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="姓名" prop="name">
                <el-input v-model="searchForm.name" 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>
            <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:member:create', 'business:member:delete']">-->
            <!--                <li><el-button type="primary" v-permissions="['business:member:create']" @click="thaws">离场</el-button></li>-->
            <!--            </ul>-->
            <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="name" label="姓名" min-width="100px"></el-table-column>
                <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
                <el-table-column prop="companyName" label="公司" min-width="100px"></el-table-column>
                <el-table-column 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>
                    </template>
                </el-table-column>
                <el-table-column prop="inDate" label="入场时间" min-width="100px"></el-table-column>
                <el-table-column prop="outDate" label="授权到期时间" min-width="100px"></el-table-column>
                <el-table-column label="超时时长" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.outStatus === 1">{{row.timeOut.toString().replace('-', '')}}分钟</span>
                        <span v-else>-</span>
                    </template>
                </el-table-column>
                <el-table-column label="状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.outStatus === 0">未超时</span>
                        <span style="color: red;" v-else-if="row.outStatus === 1">已超时</span>
                        <span v-else-if="row.outStatus === 2">即将超时</span>
                    </template>
                </el-table-column>
                <el-table-column
                        v-if="containPermissions(['business:member:update', 'business:member:delete'])"
                        label="操作"
                        min-width="120"
                        fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']" @click="departure(row.id)">离厂</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                    @size-change="handleSizeChange"
                    @current-change="handlePageChange"
                    :pagination="tableData.pagination"
            >
            </pagination>
        </template>
    </TableLayout>
</template>
<script>
  import BaseTable from '@/components/base/BaseTable'
  import TableLayout from '@/layouts/TableLayout'
  import Pagination from '@/components/common/Pagination'
  import { level } from '@/api/business/staging'
  export default {
    name: 'deletePersonnel',
    extends: BaseTable,
    components: { TableLayout, Pagination },
    data () {
      return {
        // æœç´¢
        searchForm: {
          companyName: '',
          name: '',
          type: '2',
          isdeleted: 1
        },
        user: []
      }
    },
    created () {
      this.config({
        module: '人员信息表',
        api: '/business/strandedPersonnel',
        'field.id': 'id',
        'field.main': 'id'
      })
      this.search()
    },
    methods: {
      departure(id) {
        this.$confirm('确定离场吗, æ˜¯å¦ç»§ç»­?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          level(id)
            .then(res => {
              this.search()
            })
        }).catch(() => {
        });
      },
      // thaws () {
      //   if (this.tableData.selectedRows.length === 0) return this.$message.warning('至少选择一项内容')
      //   const ids = this.tableData.selectedRows.map(item => {
      //     return { id: item.id }
      //   })
      //   this.thaw(ids)
      // },
      // thaw (ids) {
      //   this.$confirm('确定移除此用户吗?', '提示', {
      //     confirmButtonText: '确定',
      //     cancelButtonText: '取消',
      //     type: 'warning'
      //   }).then(() => {
      //     // updateRemoveStatusById(ids)
      //     //   .then(res => {
      //     //     this.$message.success('操作成功')
      //     //     this.search()
      //     //   })
      //   }).catch(() => {
      //
      //   })
      // },
    }
  }
</script>
admin/src/views/business/deviceRole.vue
@@ -86,7 +86,7 @@
      module: '门禁角色',
      api: '/business/deviceRole',
      'field.id': 'id',
      'field.main': 'id'
      'field.main': 'name'
    })
    this.search()
  },
@@ -100,8 +100,10 @@
    edit (row) {
      if (row.doorIds) {
        row.radio = 1
        row.doorIds = row.doorIds.split(',')
        row.doorIds = row.doorIds.map(item => Number(item))
        if (typeof row.doorIds !== 'object') {
          row.doorIds = row.doorIds.split(',')
          row.doorIds = row.doorIds.map(item => Number(item))
        }
      } else {
        row.radio = 0
        row.doorIds = []
admin/src/views/business/interfaceLog.vue
@@ -6,15 +6,9 @@
                <el-input v-model="searchForm.name" placeholder="请输入接口名称" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="类型" prop="type">
                <el-select v-model="searchForm.type" placeholder="请选择">
                <el-select v-model="searchForm.type" @change="search" placeholder="请选择">
                    <el-option label="调用" value="0"></el-option>
                    <el-option label="推送接受" value="1"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="调用结果" prop="success">
                <el-select v-model="searchForm.success" placeholder="请选择">
                    <el-option label="成功" value="0"></el-option>
                    <el-option label="失败" value="1"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="起始时间" prop="startDate">
@@ -47,12 +41,6 @@
                    <template slot-scope="{row}">
                        <span v-if="row.type == 0">调用</span>
                        <span v-if="row.type == 1">推送接受</span>
                    </template>
                </el-table-column>
                <el-table-column label="调用结果" min-width="100px">
                    <template slot-scope="{row}">
                        <span style="color: green;" v-if="row.success == 0">成功</span>
                        <span style="color: red;" v-if="row.success == 1">失败</span>
                    </template>
                </el-table-column>
                <el-table-column label="平台" min-width="100px">
@@ -101,8 +89,7 @@
          name: '',
          type: '',
          endDate: '',
          startDate: '',
          success: ''
          startDate: ''
        },
        time: []
      }
admin/src/views/business/internalCompany.vue
@@ -17,7 +17,7 @@
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:company:create', 'business:company:sync']">
                <li><el-button type="primary" v-permissions="['business:company:create']" @click="$refs.OperaInternalCompanyWindow.open('新建企业')">新建</el-button></li>
<!--                <li><el-button type="primary" v-permissions="['business:company:create']" @click="$refs.OperaInternalCompanyWindow.open('新建企业')">新建</el-button></li>-->
                <li><el-button type="primary"  v-permissions="['business:company:sync']" :loading="loading" @click="synchronous()">同步</el-button></li>
            </ul>
            <el-table
@@ -32,17 +32,17 @@
<!--                <el-table-column type="selection" width="55"></el-table-column>-->
                <el-table-column prop="name" label="组织名称" min-width="100px"></el-table-column>
                <el-table-column prop="editDate" label="最后更新时间" min-width="100px"></el-table-column>
                <el-table-column
                    label="操作"
                    width="230"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('编辑企业信息', row)" icon="el-icon-edit" v-permissions="['business:company:update']">编辑</el-button>
                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('新建子级', { disable: true, parentId: row.id })" icon="el-icon-plus">新建子级</el-button>
                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:company:delete']">删除</el-button>
                    </template>
                </el-table-column>
<!--                <el-table-column-->
<!--                    label="操作"-->
<!--                    width="230"-->
<!--                    fixed="right"-->
<!--                >-->
<!--                    <template slot-scope="{row}">-->
<!--                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('编辑企业信息', row)" icon="el-icon-edit" v-permissions="['business:company:update']">编辑</el-button>-->
<!--                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('新建子级', { disable: true, parentId: row.id })" icon="el-icon-plus">新建子级</el-button>-->
<!--                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:company:delete']">删除</el-button>-->
<!--                    </template>-->
<!--                </el-table-column>-->
            </el-table>
        </template>
        <!-- æ–°å»º/修改 -->
admin/src/views/business/internalMember.vue
@@ -95,6 +95,7 @@
                <el-table-column fixed="right" label="人脸信息" min-width="100px">
                    <template slot-scope="{row}">
                        <el-image
                            v-if="row.faceImg"
                            style="width: 60px; height: 60px"
                            :src="row.faceImg"
                            :preview-src-list="[row.faceImg]">
@@ -103,11 +104,7 @@
                </el-table-column>
                <el-table-column fixed="right" label="卡片信息" min-width="100px">
                    <template slot-scope="{row}">
                        <el-image
                            style="width: 60px; height: 60px"
                            :src="row.faceImg"
                            :preview-src-list="[row.faceImg]">
                        </el-image>
                        <el-button @click="$refs.cardOpeningRecord.open('开卡记录', row.id)" type="text">{{row.memberCardCount || '0'}}</el-button>
                    </template>
                </el-table-column>
<!--                <el-table-column-->
@@ -128,6 +125,8 @@
                :pagination="tableData.pagination"
            >
            </pagination>
            <!--    æŸ¥çœ‹äººå‘˜å¼€å¡è®°å½•    -->
            <cardOpeningRecord ref="cardOpeningRecord" @success="handlePageChange" />
        </template>
    </TableLayout1>
</template>
@@ -136,13 +135,14 @@
import BaseTable from '@/components/base/BaseTable'
import TableLayout1 from '@/layouts/TableLayout1'
import Pagination from '@/components/common/Pagination'
import cardOpeningRecord from '@/components/business/cardOpeningRecord'
import Tree from '@/components/common/Tree'
import { fetchList } from '@/api/business/company'
import { memberSync } from '@/api/business/member'
export default {
  name: 'internalMember',
  extends: BaseTable,
  components: { TableLayout1, Pagination, Tree },
  components: { TableLayout1, Pagination, Tree, cardOpeningRecord },
  data () {
    return {
      TreeList: [],
@@ -203,7 +203,6 @@
        .catch(() => {})
    },
    callback (row) {
      console.log(row)
      this.searchForm.erpOrgId = row.erpId
      this.searchForm.companyId = row.id
      this.search()
admin/src/views/business/parkBook.vue
@@ -68,20 +68,20 @@
                </template>
              </el-table-column>
                <el-table-column prop="createDate" label="创建时间" min-width="100px"></el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:member:update', 'business:member:delete'])"
                    label="操作"
                    min-width="120"
                    fixed="right"
                >
                    <template slot-scope="{row}">
<!--                        <el-button type="text" @click="$refs.operaCarsWindow.open('编辑车辆信息表', row)" icon="el-icon-edit" v-permissions="['business:member:update']">编辑</el-button>-->
                        <el-button type="text" @click="deleteById(row)" v-if="row.isdeleted !=1" icon="el-icon-delete" v-permissions="['business:parkbook:delete']">删除</el-button>
<!--
                        <el-button type="text" @click="reUpdate(row)" v-if="row.isdeleted !=1 && row.hkStatus ==0" icon="el-icon-edit" v-permissions="['business:parkbook:update']">立刻下发</el-button>
-->
                    </template>
                </el-table-column>
<!--                <el-table-column-->
<!--                    v-if="containPermissions(['business:member:update', 'business:member:delete'])"-->
<!--                    label="操作"-->
<!--                    min-width="120"-->
<!--                    fixed="right"-->
<!--                >-->
<!--                    <template slot-scope="{row}">-->
<!--&lt;!&ndash;                        <el-button type="text" @click="$refs.operaCarsWindow.open('编辑车辆信息表', row)" icon="el-icon-edit" v-permissions="['business:member:update']">编辑</el-button>&ndash;&gt;-->
<!--                        <el-button type="text" @click="deleteById(row)" v-if="row.isdeleted !=1" icon="el-icon-delete" v-permissions="['business:parkbook:delete']">删除</el-button>-->
<!--&lt;!&ndash;-->
<!--                        <el-button type="text" @click="reUpdate(row)" v-if="row.isdeleted !=1 && row.hkStatus ==0" icon="el-icon-edit" v-permissions="['business:parkbook:update']">立刻下发</el-button>-->
<!--&ndash;&gt;-->
<!--                    </template>-->
<!--                </el-table-column>-->
            </el-table>
            <pagination
                @size-change="handleSizeChange"
admin/src/views/business/visitEvent.vue
@@ -57,7 +57,7 @@
                <el-table-column prop="beVisitedPersonName" label="被访人" min-width="100px"></el-table-column>
                <el-table-column prop="beVisitedPersonOrg" label="被访人组织" min-width="100px"></el-table-column>
                <el-table-column prop="eventTypeName" label="事件类型" min-width="100px"></el-table-column>
                <el-table-column label="抓拍图uri" min-width="100px">
                <el-table-column label="抓拍图" min-width="100px">
                    <template slot-scope="{row}">
                        <el-image v-if="row.captureUrlFull!=null"
                            style="width: 80px; height: 80px"
admin/src/views/business/visitorSources.vue
@@ -19,6 +19,15 @@
                    <el-radio :label="1">是</el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="允许自选门禁组:" prop="doorsVisitRequired">
                <el-switch
                    v-model="form.doorsVisitRequired"
                    active-color="#13ce66"
                    inactive-color="#ff4949"
                    :active-value="1"
                    :inactive-value="0">
                </el-switch>
            </el-form-item>
            <el-form-item label="访客是否答题:" prop="isAnswer">
                <el-switch
                    v-model="form.isAnswer"
@@ -82,6 +91,7 @@
        reservationWay: 0,
        healthCard: 0,
        isAnswer: 0,
        doorsVisitRequired: '',
        theme: '',
        description: '',
        visitNotice: ''
@@ -135,6 +145,7 @@
          this.form.isAnswer = res.isAnswer
          this.form.reservationWay = res.reservationWay
          this.form.theme = res.theme
          this.form.doorsVisitRequired = res.doorsVisitRequired
          this.form.visitNotice = res.visitNotice
        })
    },
@@ -146,7 +157,8 @@
        reservationWay: this.form.reservationWay,
        description: this.form.description,
        theme: this.form.theme,
        visitNotice: this.form.visitNotice
        visitNotice: this.form.visitNotice,
        doorsVisitRequired: this.form.doorsVisitRequired
      }).then(res => {
        this.$message.success('保存成功')
        this.getData()
admin/vue.config.js
@@ -14,10 +14,11 @@
        // http://192.168.0.110:10013   ç£Šç£Š
        // http://192.168.0.132:10013   å¸…å“¥
        // http://192.168.0.126:10033   èå§
        // http://192.168.0.129:10028   ä»»åº·
        // http://192.168.0.186:10028   ä»»åº·
        // https://dmtest.ahapp.net/admin_api   æµ‹è¯•服
        // http://10.10.99.63/admin_interface/  æœ€æ–°æµ‹è¯•服
        target: 'http://192.168.0.186:10028',
        // http://10.10.99.63/admin_interface/  æœ€æ–°æµ‹è¯•服(内网)
        // http://218.23.218.228:8018/admin_interface   æœ€æ–°æµ‹è¯•服(外网)
        target: 'http://218.23.218.228:8018/admin_interface',
        changeOrigin: true,
        pathRewrite: {
          [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''