|
|
@@ -3,19 +3,50 @@
|
|
|
<header>
|
|
|
<div class="table-search">
|
|
|
<section class="select-box">
|
|
|
+ <SelectableInput ref="selectableInputRef" :options="VISITOR_TABLE_SEARCH_OPTIONS" />
|
|
|
<div class="select-box--item">
|
|
|
- <span>地点:</span>
|
|
|
- <el-input v-model="searchData.captureLocation" placeholder="请输入地点" clearable> </el-input>
|
|
|
+ <span>是否外籍:</span>
|
|
|
+ <el-select
|
|
|
+ style="width: 100px"
|
|
|
+ v-model="searchData.isForeigner"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="select-box--select"
|
|
|
+ clearable
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in IS_FOREIGNER_TYPE_OPTIONS"
|
|
|
+ :key="item.value"
|
|
|
+ :value="item.label"
|
|
|
+ :label="item.label"
|
|
|
+ :disabled="item.disabled"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <span>时间:</span>
|
|
|
- <el-date-picker
|
|
|
- v-model="searchTime"
|
|
|
- type="datetimerange"
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始时间"
|
|
|
- end-placeholder="结束时间"
|
|
|
- />
|
|
|
+ <div class="select-box--item">
|
|
|
+ <span>访问状态:</span>
|
|
|
+ <el-select
|
|
|
+ style="width: 100px"
|
|
|
+ v-model="searchData.visitState"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="select-box--select"
|
|
|
+ clearable
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in VISIT_STATE_TYPE_OPTIONS"
|
|
|
+ :key="item.value"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :disabled="item.disabled"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="select-box--item">
|
|
|
+ <span>到达时间:</span>
|
|
|
+ <el-date-picker v-model="searchData.startTime" type="datetime" />
|
|
|
+ </div>
|
|
|
+ <div class="select-box--item">
|
|
|
+ <span>离开时间:</span>
|
|
|
+ <el-date-picker v-model="searchData.endTime" type="datetime" />
|
|
|
</div>
|
|
|
</section>
|
|
|
<section class="search-btn">
|
|
|
@@ -40,13 +71,17 @@
|
|
|
<script setup lang="ts">
|
|
|
import BasicTable from '@/components/BasicTable.vue';
|
|
|
import useTableConfig from '@/hooks/useTableConfigHook';
|
|
|
+ import SelectableInput from '@/components/formItems/selectableInput/SelectableInput.vue';
|
|
|
import { onMounted, reactive, ref } from 'vue';
|
|
|
import { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';
|
|
|
import { VisitorTableData, VisitorTableQuery } from '../types';
|
|
|
import { OUTER_PERSON_VISITOR_TABEL_COLUMNS, TABLE_OPTIONS } from '../configs/table';
|
|
|
+ import { VISITOR_TABLE_SEARCH_OPTIONS, IS_FOREIGNER_TYPE_OPTIONS, VISIT_STATE_TYPE_OPTIONS } from '../constants';
|
|
|
+ import { exportVisitorList, getVisitorList } from '@/api/security-confidentiality-person/outer-person';
|
|
|
+ import { ElMessage } from 'element-plus';
|
|
|
+ import { downloadFile } from '@/views/disaster/utils';
|
|
|
|
|
|
- const searchData = reactive<any>({});
|
|
|
- const searchTime = ref<string[]>([]);
|
|
|
+ const searchData = reactive<VisitorTableQuery>({});
|
|
|
|
|
|
const { tableConfig, pagination } = useTableConfig(OUTER_PERSON_VISITOR_TABEL_COLUMNS, TABLE_OPTIONS);
|
|
|
|
|
|
@@ -58,34 +93,13 @@
|
|
|
queryParam: {},
|
|
|
});
|
|
|
function getQuery() {
|
|
|
- const query = {
|
|
|
+ tableQuery.queryParam = {
|
|
|
...searchData,
|
|
|
- startTime: searchTime.value[0],
|
|
|
- endTime: searchTime.value[1],
|
|
|
};
|
|
|
}
|
|
|
async function getTableData() {
|
|
|
tableConfig.loading = true;
|
|
|
- const res = await new Promise<QueryPageResponse<VisitorTableData>>((resolve) => {
|
|
|
- resolve({
|
|
|
- totalRow: 1,
|
|
|
- records: [
|
|
|
- {
|
|
|
- todoxinming: 'string',
|
|
|
- todoshenfenxinxi: 'string',
|
|
|
- todoshoujihaoma: 'string',
|
|
|
- todoshifouwailian: 0,
|
|
|
- tododanwei: 'string',
|
|
|
- todolaifangshiyou: 'string',
|
|
|
- todobeifangren: 'string',
|
|
|
- todobeifangrengonghao: 'string',
|
|
|
- todofangwenzhuangtai: 0,
|
|
|
- tododaofangshijian: 'string',
|
|
|
- todolikaishijian: 'string',
|
|
|
- },
|
|
|
- ],
|
|
|
- });
|
|
|
- });
|
|
|
+ const res = await getVisitorList(tableQuery);
|
|
|
tableData.value = res.records;
|
|
|
pagination.total = res.totalRow;
|
|
|
tableConfig.loading = false;
|
|
|
@@ -118,16 +132,16 @@
|
|
|
|
|
|
async function handleDownload() {
|
|
|
getQuery();
|
|
|
- // try {
|
|
|
- // const res = await exportActViolation(tableQuery.queryParam);
|
|
|
- // if (res.size === 0) return;
|
|
|
- // const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
|
|
- // const url = window.URL.createObjectURL(blob);
|
|
|
- // downloadFile(url, '违规行为记录.xlsx');
|
|
|
- // } catch (e) {
|
|
|
- // ElMessage.error('下载失败');
|
|
|
- // console.log(e);
|
|
|
- // }
|
|
|
+ try {
|
|
|
+ const res = await exportVisitorList(tableQuery.queryParam);
|
|
|
+ if (res.size === 0) return;
|
|
|
+ const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
|
|
+ const url = window.URL.createObjectURL(blob);
|
|
|
+ downloadFile(url, '访客记录.xlsx');
|
|
|
+ } catch (e) {
|
|
|
+ ElMessage.error('下载失败');
|
|
|
+ console.log(e);
|
|
|
+ }
|
|
|
}
|
|
|
onMounted(() => {
|
|
|
getTableData();
|
|
|
@@ -135,13 +149,9 @@
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
- // @use '@/styles/page-details-layout.scss' as *;
|
|
|
- // @use '@/styles/page-main-layout.scss' as *;
|
|
|
- // @use '@/styles/basic-table-action.scss' as *;
|
|
|
-
|
|
|
.table-search {
|
|
|
display: flex;
|
|
|
- align-items: center;
|
|
|
+ align-items: flex-end;
|
|
|
justify-content: space-between;
|
|
|
width: 100%;
|
|
|
}
|
|
|
@@ -149,7 +159,7 @@
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
flex-wrap: wrap;
|
|
|
- gap: 32px;
|
|
|
+ gap: 20px;
|
|
|
&--item {
|
|
|
@include flex-center;
|
|
|
white-space: nowrap;
|