|
|
@@ -92,13 +92,190 @@
|
|
|
</div>
|
|
|
</el-row>
|
|
|
|
|
|
- <el-table v-loading="loading" :data="list" style="margin-top: 20px;">
|
|
|
+ <el-table v-loading="loading" :data="list" style="margin-top: 20px;" @row-click="handleRowClick">
|
|
|
<el-table-column label="序号" type="index" width="50" align="center" />
|
|
|
<el-table-column label="姓名" prop="fullName" align="center" />
|
|
|
<el-table-column label="证件号码" prop="idNumber" align="center" />
|
|
|
<el-table-column label="出入境次数" prop="count" align="center" />
|
|
|
</el-table>
|
|
|
|
|
|
+ <!-- 出入境记录列表对话框 -->
|
|
|
+ <el-dialog :title="recordListTitle" v-model="recordListOpen" width="1200px" append-to-body>
|
|
|
+ <el-table :data="recordList" v-loading="recordListLoading" @row-click="handleRecordRowClick">
|
|
|
+ <el-table-column label="姓名" align="center" prop="fullName" width="300"/>
|
|
|
+ <el-table-column label="性别" align="center" prop="genderCn"/>
|
|
|
+ <el-table-column label="出生日期" align="center" prop="birthDate" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ parseTime(scope.row.birthDate, '{y}-{m}-{d}') }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="国家/地区" align="center" prop="countryName"/>
|
|
|
+ <el-table-column label="民族" align="center" prop="ethnicityName"/>
|
|
|
+ <el-table-column label="出入标识" align="center" prop="inOutFlag"/>
|
|
|
+ <el-table-column label="出入时间" align="center" prop="inOutTime" width="180">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ parseTime(scope.row.inOutTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="出入口岸" align="center" prop="portCode">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ scope.row.portCode}}-{{scope.row.portName}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="前往地/出发地" align="center" prop="destinationName"/>
|
|
|
+ <el-table-column label="导入时间" align="center" prop="createTime" width="150">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 出入境记录明细对话框 -->
|
|
|
+ <el-dialog :title="detailTitle" v-model="recordDetailOpen" width="900px" append-to-body>
|
|
|
+ <el-form :model="detailForm" label-width="120px" disabled>
|
|
|
+ <!-- 个人信息 -->
|
|
|
+ <div style="font-weight: bold; margin: 10px 0 15px 0; border-left: 4px solid #409eff; padding-left: 8px; color: #409eff;">个人信息</div>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="人员类别:">
|
|
|
+ <span>{{ detailForm.personnelCategoryName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="姓名:">
|
|
|
+ <span>{{ detailForm.fullName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="性别:">
|
|
|
+ <span>{{ detailForm.genderCn }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="出生日期:">
|
|
|
+ <span>{{ parseTime(detailForm.birthDate, '{y}-{m}-{d}') }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="国家/地区:">
|
|
|
+ <span>{{ detailForm.countryCode }}-{{ detailForm.countryName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="民族:">
|
|
|
+ <span>{{ detailForm.ethnicityName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 证件信息 -->
|
|
|
+ <div style="font-weight: bold; margin: 10px 0 15px 0; border-left: 4px solid #409eff; padding-left: 8px; color: #409eff;">证件信息</div>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="证件类别:">
|
|
|
+ <span>{{ detailForm.idTypeName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="证件号码:">
|
|
|
+ <span>{{ detailForm.idNumber }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="签证类型:">
|
|
|
+ <span>{{ detailForm.visaTypeName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="签证号码:">
|
|
|
+ <span>{{ detailForm.visaNumber }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="停留期:">
|
|
|
+ <span>{{ detailForm.stayDuration }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 出入境信息 -->
|
|
|
+ <div style="font-weight: bold; margin: 10px 0 15px 0; border-left: 4px solid #409eff; padding-left: 8px; color: #409eff;">出入境信息</div>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="出入标识:">
|
|
|
+ <span>{{ detailForm.inOutFlag }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="出入时间:">
|
|
|
+ <span>{{ parseTime(detailForm.inOutTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="出入口岸:">
|
|
|
+ <span>{{ detailForm.portCode }}-{{ detailForm.portName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="交通方式:">
|
|
|
+ <span>{{ detailForm.transportMode }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="交通工具:">
|
|
|
+ <span>{{ detailForm.transportVehicle }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="前往地/出发地:">
|
|
|
+ <span>{{ detailForm.destinationCode }}-{{ detailForm.destinationName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="出入境事由:">
|
|
|
+ <span>{{ detailForm.reasonName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="发证机关:">
|
|
|
+ <span>{{ detailForm.issuingAuthorityCode }}-{{ detailForm.issuingAuthorityName }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 其他信息 -->
|
|
|
+ <div style="font-weight: bold; margin: 10px 0 15px 0; border-left: 4px solid #409eff; padding-left: 8px; color: #409eff;">其他信息</div>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="自助通道标记:">
|
|
|
+ <span>{{ detailForm.selfServiceFlag }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="后台补录标记:">
|
|
|
+ <span>{{ detailForm.backfillFlag }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="创建时间:">
|
|
|
+ <span>{{ parseTime(detailForm.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="疑难字说明:">
|
|
|
+ <span>{{ detailForm.remark }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button @click="recordDetailOpen = false">关 闭</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
<pagination
|
|
|
v-show="total>0"
|
|
|
:total="total"
|
|
|
@@ -111,7 +288,7 @@
|
|
|
|
|
|
<script setup name="High">
|
|
|
import * as echarts from 'echarts'
|
|
|
-import { listHighFrequencyInOut, getInOutStats } from "@/api/biz/anal";
|
|
|
+import { listHighFrequencyInOut, getInOutStats, getRecords } from "@/api/biz/anal";
|
|
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
|
|
|
@@ -130,6 +307,19 @@ const statistics = ref({
|
|
|
maxFrequency: 0
|
|
|
});
|
|
|
|
|
|
+// 出入境记录明细相关
|
|
|
+const recordDetailOpen = ref(false);
|
|
|
+const recordDetailLoading = ref(false);
|
|
|
+const recordDetailList = ref([]);
|
|
|
+const detailTitle = ref("详细信息");
|
|
|
+const detailForm = ref({});
|
|
|
+
|
|
|
+// 出入境记录列表相关
|
|
|
+const recordListOpen = ref(false);
|
|
|
+const recordListLoading = ref(false);
|
|
|
+const recordListTitle = ref("出入境记录列表");
|
|
|
+const recordList = ref([]);
|
|
|
+
|
|
|
const data = reactive({
|
|
|
queryParams: {
|
|
|
pageNum: 1,
|
|
|
@@ -802,6 +992,48 @@ function resetQuery() {
|
|
|
handleQuery();
|
|
|
}
|
|
|
|
|
|
+/** 处理表格行点击事件 */
|
|
|
+function handleRowClick(row) {
|
|
|
+ // 根据证件号码查询出入境记录列表
|
|
|
+ recordListLoading.value = true;
|
|
|
+ recordListOpen.value = true;
|
|
|
+
|
|
|
+ // 准备查询参数,使用当前页面的日期范围参数
|
|
|
+ const params = {};
|
|
|
+ if (queryParams.value.queryType === 'year') {
|
|
|
+ params.year = queryParams.value.year;
|
|
|
+ } else if (queryParams.value.queryType === 'month') {
|
|
|
+ params.month = queryParams.value.month;
|
|
|
+ } else if (queryParams.value.queryType === 'range') {
|
|
|
+ if (queryParams.value.dateRange && queryParams.value.dateRange.length === 2) {
|
|
|
+ params.startDate = queryParams.value.dateRange[0];
|
|
|
+ params.endDate = queryParams.value.dateRange[1];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加证件号码参数
|
|
|
+ params.idNumber = row.idNumber;
|
|
|
+
|
|
|
+ getRecords(params).then(response => {
|
|
|
+ const records = response.rows || response.data || [];
|
|
|
+ recordList.value = records;
|
|
|
+ recordListTitle.value = `${row.fullName}的出入境记录列表 (${records.length}条记录)`;
|
|
|
+ }).catch(error => {
|
|
|
+ console.error('获取出入境记录失败:', error);
|
|
|
+ recordList.value = [];
|
|
|
+ recordListTitle.value = `${row.fullName}的出入境记录列表 (0条记录)`;
|
|
|
+ }).finally(() => {
|
|
|
+ recordListLoading.value = false;
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+/** 处理记录列表行点击事件 */
|
|
|
+function handleRecordRowClick(recordRow) {
|
|
|
+ detailForm.value = { ...recordRow };
|
|
|
+ detailTitle.value = `详细信息 - ${recordRow.fullName}`;
|
|
|
+ recordDetailOpen.value = true;
|
|
|
+}
|
|
|
+
|
|
|
// 页面加载时获取数据
|
|
|
onMounted(() => {
|
|
|
// 初始化时直接查询,使用reactive中设置的默认值
|