feat:人员管理
This commit is contained in:
1 parent
609f53e60c
commit
145f2c9b88
6 files changed
+568
-19
No files matched your search
@@ -39,3 +39,42 @@ export function putObj(obj?: Object) {
|
||||
})
|
||||
}
|
||||
|
||||
/* ************************************* start 人员出入次数统计 start ************************************* */
|
||||
|
||||
export function doorTimesPage(obj: any) {
|
||||
return request({
|
||||
url: '/admin/door/doorTimes/page',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function doorTimesExport(obj: any) {
|
||||
return request({
|
||||
url: '/admin/door/doorTimes/export',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
/* ************************************* end 人员出入次数统计 end ************************************* */
|
||||
|
||||
/* ************************************* start 预警记录 start ************************************* */
|
||||
|
||||
export function doorAlarmPage(obj: any) {
|
||||
return request({
|
||||
url: '/admin/door/doorAlarm/page',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function doorAlarmExport(obj: any) {
|
||||
return request({
|
||||
url: '/admin/door/doorAlarm/export',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
/* ************************************* end 预警记录 end ************************************* */
|
||||
@@ -18,8 +18,9 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle" @sort-change="sortChangeHandle">
|
||||
<el-table :data="state.dataList" v-loading="state.loading" height="50vh" border
|
||||
:cell-style="tableStyle.cellStyle" :header-cell-style="tableStyle.headerCellStyle"
|
||||
@sort-change="sortChangeHandle">
|
||||
<el-table-column type="selection" width="40" align="center" />
|
||||
<el-table-column type="index" label="#" width="80" />
|
||||
<el-table-column v-if="false" label="车辆信息">
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
<!-- 预警记录 -->
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<el-row shadow="hover" v-show="showSearch" class="ml10">
|
||||
<el-form-item style="width: 250px;" label="人员姓名" prop="personName">
|
||||
<el-input v-model="state.queryForm.personName" placeholder="请输入人员姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 250px;" label="进出门类型" prop="enterOrExit">
|
||||
<dict-select v-model="state.queryForm.enterOrExit" :options="dh_enter_or_exit"
|
||||
placeholder="请选择进出门类型" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 250px;" label="开门类型" prop="openType">
|
||||
<dict-select v-model="state.queryForm.openType" :options="dh_door_open_type"
|
||||
placeholder="请选择进开门类型" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 350px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-date-picker v-model="state.queryForm.swingTimeList" value-format="YYYY-MM-DD"
|
||||
type="daterange" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="getDataList">
|
||||
{{ $t('common.queryBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">{{ $t('common.resetBtn') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
|
||||
@sort-change="sortChangeHandle">
|
||||
<el-table-column type="selection" width="40" align="center" />
|
||||
<el-table-column type="index" label="#" width="80" />
|
||||
|
||||
<el-table-column min-width="200" label="报警类型">
|
||||
<template #default="{ row }">
|
||||
<div class="flex flex-wrap gap-1">
|
||||
<el-tag v-for="(v, i) in row.alarmList" key="v" type="danger">
|
||||
<el-tooltip class="box-item" placement="top">
|
||||
{{ getDictByValue(v, "door_alarm_type") }}
|
||||
<template #content>
|
||||
<div v-if="v == 3">
|
||||
在{{ parseTime(row.swingTime, "{y}-{m}-{d}") }}一共出入{{ row.repeatCount }}次
|
||||
</div>
|
||||
<div v-else>{{ getDictByValue(v, 'door_alarm_type') }}</div>
|
||||
</template>
|
||||
</el-tooltip>
|
||||
</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column min-width="100" label="人员">
|
||||
<el-table-column prop="personCode" min-width="100" label="人员编号">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personCode">{{ row.personCode }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="personName" min-width="100" label="姓名">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personName">{{ row.personName }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="paperNumber" min-width="100" label="证件号码" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.paperNumber">{{ row.paperNumber }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deptName" min-width="100" label="部门名称">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.deptName">{{ row.deptName }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column min-width="100" label="卡">
|
||||
<el-table-column prop="cardType" min-width="100" label="卡类型">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_card_type" :value="row.cardType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="cardStatus" label="卡状态">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_card_status" :value="row.cardStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="enterOrExit" min-width="100" label="进出门类型">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_enter_or_exit" :value="row.enterOrExit" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="openResult" min-width="100" label="开门结果">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.openResult == 1" type="success">成功</el-tag>
|
||||
<el-tag v-if="row.openResult == 0" type="danger">失败</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="openType" label="开门类型" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_door_open_type" :value="row.openType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="抓图图片" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<preview-image width="50px" height="50px" v-if="row.parseRecordImage"
|
||||
:src="row.parseRecordImage" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="开门失败原因" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="swingTime" label="刷卡时间" min-width="180" />
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
|
||||
v-bind="state.pagination" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="doorAlarm">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { useDict } from '/@/hooks/dict';
|
||||
import { parseTime } from "/@/utils/formatTime"
|
||||
|
||||
import * as DoorRecordApi from "/@/api/door/doorRecord";
|
||||
|
||||
// 定义查询字典
|
||||
const { dh_card_status, dh_card_type, dh_enter_or_exit, door_alarm_type, dh_door_open_type } = useDict("dh_card_status", "dh_card_type", "dh_enter_or_exit", "door_alarm_type", "dh_door_open_type")
|
||||
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref()
|
||||
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: DoorRecordApi.doorAlarmPage
|
||||
})
|
||||
|
||||
// table hook
|
||||
const {
|
||||
getDataList,
|
||||
currentChangeHandle,
|
||||
sizeChangeHandle,
|
||||
sortChangeHandle,
|
||||
downBlobFile,
|
||||
tableStyle
|
||||
} = useTable(state)
|
||||
|
||||
// 清空搜索条件
|
||||
const resetQuery = () => {
|
||||
// 清空搜索条件
|
||||
queryRef.value?.resetFields()
|
||||
// 清空多选
|
||||
selectObjs.value = []
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/door/doorRecord/export', Object.assign(state.queryForm, { ids: selectObjs }), 'doorRecord.xlsx')
|
||||
}
|
||||
|
||||
// 多选事件
|
||||
const selectionChangHandle = (objs: { id: string }[]) => {
|
||||
selectObjs.value = objs.map(({ id }) => id);
|
||||
multiple.value = !objs.length;
|
||||
};
|
||||
|
||||
function getDictByValue(value: any, tag: any) {
|
||||
if (tag === 'door_alarm_type') {
|
||||
const target = door_alarm_type.value.find((v: any) => v.value === value);
|
||||
if (!target) return "Unknown"
|
||||
return target.label
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
@@ -25,14 +25,6 @@
|
||||
</el-row>
|
||||
<el-row>
|
||||
<div class="mb8" style="width: 100%">
|
||||
<el-button icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
|
||||
v-auth="'door_doorRecord_add'">
|
||||
新 增
|
||||
</el-button>
|
||||
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'door_doorRecord_del'"
|
||||
@click="handleDelete(selectObjs)">
|
||||
删除
|
||||
</el-button>
|
||||
<right-toolbar v-model:showSearch="showSearch" :export="'door_doorRecord_export'" @exportExcel="exportExcel"
|
||||
class="ml10 mr20" style="float: right;" @queryTable="getDataList"></right-toolbar>
|
||||
</div>
|
||||
@@ -43,15 +35,30 @@
|
||||
<el-table-column type="selection" width="40" align="center" />
|
||||
<el-table-column type="index" label="#" width="80" />
|
||||
<el-table-column min-width="100" label="人员">
|
||||
<el-table-column prop="imageType" min-width="100" label="人员类型">
|
||||
<el-table-column prop="personCode" min-width="100" label="人员编号">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_image_type" :value="row.imageType" />
|
||||
<span v-if="row.personCode">{{ row.personCode }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="personName" min-width="100" label="姓名">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personName">{{ row.personName }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="paperNumber" min-width="100" label="证件号码" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.paperNumber">{{ row.paperNumber }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deptName" min-width="100" label="部门名称">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.deptName">{{ row.deptName }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="personCode" min-width="100" label="人员编号" />
|
||||
<el-table-column prop="paperNumber" min-width="100" label="证件号码" />
|
||||
<el-table-column prop="personName" min-width="100" label="姓名" />
|
||||
<el-table-column prop="deptName" min-width="100" label="部门名称" />
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column min-width="100" label="卡">
|
||||
@@ -78,14 +85,14 @@
|
||||
<el-tag v-if="row.openResult == 0" type="danger">失败</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="openType" label="开门类型" min-width="100">
|
||||
<el-table-column prop="openType" label="开门类型" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_door_open_type" :value="row.openType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="recordImage" label="抓图图片" min-width="100">
|
||||
<el-table-column label="抓图图片" min-width="100">
|
||||
<template #default="{ row }">
|
||||
{{ row.recordImage }}
|
||||
<preview-image width="50px" height="50px" v-if="row.parseRecordImage" :src="row.parseRecordImage" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="开门失败原因" min-width="200" show-overflow-tooltip />
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
<!-- 人员出入次数统计详情 -->
|
||||
<template>
|
||||
<el-dialog title="车辆进去详情" v-model="visible" width="70%" :close-on-click-modal="false" draggable>
|
||||
<el-row shadow="hover" class="ml10">
|
||||
<el-form-item style="width: 250px;" label="进出门类型" prop="enterOrExit">
|
||||
<dict-select v-model="state.queryForm.enterOrExit" :options="dh_enter_or_exit" placeholder="请选择进出门类型" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 250px;" label="开门类型" prop="openType">
|
||||
<dict-select v-model="state.queryForm.openType" :options="dh_door_open_type" placeholder="请选择进开门类型" />
|
||||
</el-form-item>
|
||||
<el-form :model="state.queryForm" ref="queryRef" :inline="true" @keyup.enter="getDataList">
|
||||
<el-form-item style="width: 350px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-date-picker v-model="state.queryForm.swingTimeList" value-format="YYYY-MM-DD"
|
||||
type="daterange" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="getDataList">
|
||||
{{ $t('common.queryBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">{{ $t('common.resetBtn') }}</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-table :data="state.dataList" v-loading="state.loading" height="50vh" border
|
||||
:cell-style="tableStyle.cellStyle" :header-cell-style="tableStyle.headerCellStyle"
|
||||
@sort-change="sortChangeHandle">
|
||||
|
||||
<el-table-column min-width="100" label="人员">
|
||||
<el-table-column prop="personCode" min-width="100" label="人员编号">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personCode">{{ row.personCode }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="personName" min-width="100" label="姓名">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personName">{{ row.personName }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="paperNumber" min-width="100" label="证件号码" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.paperNumber">{{ row.paperNumber }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deptName" min-width="100" label="部门名称">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.deptName">{{ row.deptName }}</span>
|
||||
<span v-else class="color-danger">未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column min-width="100" label="卡">
|
||||
<el-table-column prop="cardType" min-width="100" label="卡类型">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_card_type" :value="row.cardType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="cardStatus" label="卡状态">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_card_status" :value="row.cardStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="enterOrExit" min-width="100" label="进出门类型">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_enter_or_exit" :value="row.enterOrExit" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="openResult" min-width="100" label="开门结果">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.openResult == 1" type="success">成功</el-tag>
|
||||
<el-tag v-if="row.openResult == 0" type="danger">失败</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="openType" label="开门类型" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<dict-tag :options="dh_door_open_type" :value="row.openType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="抓图图片" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<preview-image width="50px" height="50px" v-if="row.parseRecordImage"
|
||||
:src="row.parseRecordImage" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="开门失败原因" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="swingTime" label="刷卡时间" min-width="180" />
|
||||
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
|
||||
v-bind="state.pagination" />
|
||||
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="doorTimesTableDialog">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { useDict } from '/@/hooks/dict';
|
||||
|
||||
import * as DoorRecordApi from "/@/api/door/doorRecord";
|
||||
|
||||
const { dh_enter_Mode } = useDict("dh_enter_Mode")
|
||||
|
||||
defineExpose({
|
||||
openDialog
|
||||
});
|
||||
|
||||
// 定义查询字典
|
||||
const { dh_card_status, dh_card_type, dh_enter_or_exit, dh_image_type, dh_door_open_type } = useDict("dh_card_status", "dh_card_type", "dh_enter_or_exit", "dh_image_type", "dh_door_open_type")
|
||||
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
|
||||
// 定义变量内容
|
||||
const visible = ref(false)
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
createdIsNeed: false,
|
||||
pagination: {
|
||||
size: 10,
|
||||
},
|
||||
queryForm: {
|
||||
},
|
||||
pageList: DoorRecordApi.fetchList
|
||||
})
|
||||
|
||||
// table hook
|
||||
const {
|
||||
getDataList,
|
||||
currentChangeHandle,
|
||||
sizeChangeHandle,
|
||||
sortChangeHandle,
|
||||
downBlobFile,
|
||||
tableStyle
|
||||
} = useTable(state)
|
||||
|
||||
// 清空搜索条件
|
||||
const resetQuery = () => {
|
||||
// 清空搜索条件
|
||||
queryRef.value?.resetFields()
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 打开弹窗
|
||||
function openDialog(row: any) {
|
||||
state.queryForm.personCode = row.personCode
|
||||
visible.value = true
|
||||
getDataList();
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,157 @@
|
||||
<!-- 人员出入次数统计 -->
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<el-row shadow="hover" v-show="showSearch" class="ml10">
|
||||
<el-form :model="state.queryForm" ref="queryRef" :inline="true" @keyup.enter="getDataList">
|
||||
<el-form-item style="width: 250px;" label="人员姓名" prop="personName">
|
||||
<el-input v-model="state.queryForm.personName" placeholder="请输入人员姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 250px;" label="进出门类型" prop="enterOrExit">
|
||||
<dict-select v-model="state.queryForm.enterOrExit" :options="dh_enter_or_exit"
|
||||
placeholder="请选择进出门类型" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 250px;" label="开门类型" prop="openType">
|
||||
<dict-select v-model="state.queryForm.openType" :options="dh_door_open_type"
|
||||
placeholder="请选择进开门类型" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="getDataList">
|
||||
{{ $t('common.queryBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">{{ $t('common.resetBtn') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
|
||||
@sort-change="sortChangeHandle" show-summary :summary-method="getSummaries">
|
||||
<el-table-column type="index" label="#" width="80" align="center" />
|
||||
<el-table-column min-width="100" label="人员">
|
||||
<el-table-column prop="personCode" min-width="100" label="人员编号">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personCode">{{ row.personCode }}</span>
|
||||
<span class="color-danger" v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="paperNumber" min-width="100" label="证件号码" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.paperNumber">{{ row.paperNumber }}</span>
|
||||
<span class="color-danger" v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="personName" min-width="100" label="姓名">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.personName">{{ row.personName }}</span>
|
||||
<span class="color-danger" v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deptName" min-width="100" label="部门名称">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.deptName">{{ row.deptName }}</span>
|
||||
<span class="color-danger" v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column prop="enterCount" align="center" min-width="200" label="进门总次数">
|
||||
<template #default="{ row }">
|
||||
<span class="color-success">{{ row.enterCount }}次</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="exitCount" align="center" min-width="200" label="出门总次数">
|
||||
<template #default="{ row }">
|
||||
<span class="color-danger">{{ row.exitCount }}次</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="exitOrExitCount" align="center" min-width="200" label="进/出门总次数">
|
||||
<template #default="{ row }">
|
||||
<span class="color-primary">{{ row.exitOrExitCount }}次</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button icon="InfoFilled" text type="primary"
|
||||
@click="doorTimesTableDialogRef.openDialog(row)">详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
|
||||
v-bind="state.pagination" />
|
||||
</div>
|
||||
|
||||
<door-times-table-dialog ref="doorTimesTableDialogRef" />
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="doorTimes">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { useDict } from '/@/hooks/dict';
|
||||
|
||||
import * as DoorRecordApi from "/@/api/door/doorRecord";
|
||||
|
||||
// 引入组件
|
||||
const DoorTimesTableDialog = defineAsyncComponent(() => import("./doorTimesTableDialog.vue"));
|
||||
|
||||
const doorTimesTableDialogRef = ref<any>(null)
|
||||
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
|
||||
const { dh_enter_or_exit, dh_door_open_type, dh_image_type } = useDict("dh_enter_or_exit", "dh_door_open_type", "dh_image_type")
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: DoorRecordApi.doorTimesPage
|
||||
})
|
||||
|
||||
// table hook
|
||||
const {
|
||||
getDataList,
|
||||
currentChangeHandle,
|
||||
sizeChangeHandle,
|
||||
sortChangeHandle,
|
||||
downBlobFile,
|
||||
tableStyle
|
||||
} = useTable(state)
|
||||
|
||||
// 清空搜索条件
|
||||
const resetQuery = () => {
|
||||
// 清空搜索条件
|
||||
queryRef.value?.resetFields()
|
||||
// 清空多选
|
||||
selectObjs.value = []
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 多选事件
|
||||
const selectionChangHandle = (objs: { id: string }[]) => {
|
||||
selectObjs.value = objs.map(({ id }) => id);
|
||||
multiple.value = !objs.length;
|
||||
};
|
||||
|
||||
const getSummaries = (param: any) => {
|
||||
const { columns, data } = param
|
||||
const totalColumns = ["enterCount", "exitCount", "exitOrExitCount"]
|
||||
const totalRow = Array.from({ length: columns.length })
|
||||
totalRow[0] = "合计"
|
||||
columns.forEach((i: any, index: number) => {
|
||||
if (totalColumns.includes(i.property)) {
|
||||
const total = data
|
||||
.filter((v: any) => v[i.property] != null)
|
||||
.map((v: any) => Number(v[i.property]))
|
||||
.reduce((pren: number, next: number) => pren + next, 0)
|
||||
totalRow[index] = `${total}次`
|
||||
}
|
||||
})
|
||||
return totalRow
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
Reference in new issue
Block a user