dbsd_sfhy_vue/src/views/student/tGkPicinfo/TGkPicinfoList.vue

322 lines
10 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<!--查询区域-->
<div class="jeecg-basic-table-form-container">
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="8">
<a-form-item label="考生号" name="ksh">
<j-input placeholder="请输入考生号" v-model:value="queryParam.ksh"></j-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="姓名" name="xm">
<j-input placeholder="请输入姓名" v-model:value="queryParam.xm"></j-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="身份证号" name="sfzh">
<j-input placeholder="请输入身份证号" v-model:value="queryParam.sfzh"></j-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="学院名称" name="xymc">
<j-input placeholder="请输入学院名称" v-model:value="queryParam.xymc"></j-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="专业名称" name="zymc">
<j-input placeholder="请输入专业名称" v-model:value="queryParam.zymc"></j-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="年级" name="nj">
<j-input placeholder="请输入年级" v-model:value="queryParam.nj"></j-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
</a-col>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!--引用表格-->
<BasicTable @register="registerTable" >
<!--插槽:table标题-->
<template #tableTitle>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="calcAllFaceDataFn('sfz-gk')">身份证-高考照片对比</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="calcAllFaceDataFn('xj-gk')">高考照片-学籍照片对比</a-button> -->
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="calcAllFaceDataFn('xj-sfz')">学籍照片-身份证</a-button> -->
<!-- <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> TODO 高考照片 学籍照片 身份证 都添加年级字段</a-button>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 批量上传 选择多个图片查询对应学生存储到对应数据里</a-button> -->
<a-button type="primary" @click="purificationAllPicFn" preIcon="ant-design:plus-outlined">高考照片清洗</a-button>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> -->
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #imgSlot="{text}">
<div class="imgClass">
<img v-if="text" :src="getFileAccessHttpUrl(text)" @click="handlePreview(text)" style="z-index: 999;width:30px;height: 30px;">
<span v-else>无</span>
</div>
</template>
<!--省市区字段回显插槽-->
<template #pcaSlot="{text}">
<!-- {{ getAreaTextByCode(text) }} -->
{{ text }}
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel" style="width:800px;">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
<!-- 表单区域 -->
<TGkPicinfoModal ref="registerModal" @success="handleSuccess"></TGkPicinfoModal>
</div>
</template>
<script lang="ts" name="tGkPicinfo-tGkPicinfo" setup>
import { ref, reactive } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns } from './TGkPicinfo.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './TGkPicinfo.api';
import { purificationAllPic } from '/@/views/student/tGkPicinfo/TGkPicinfo.api';
import { calcAllFaceData } from '/@/views/student/tCompareInfo/TCompareInfo.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import TGkPicinfoModal from './components/TGkPicinfoModal.vue'
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import {JInput } from '/@/components/Form';
import { getCurrentSchoolYear } from '/@/views/student/common/commonConfig';
import { useMessage } from '/@/hooks/web/useMessage';
const formRef = ref();
const queryParam = reactive<any>({});
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref();
//注册table数据
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: 't_gk_picinfo',
api: list,
columns,
canResize:false,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: 'right',
},
beforeFetch: (params) => {
params.column = '',params.order = '';//新生成的默认不带排序
return Object.assign(params, queryParam);
},
},
exportConfig: {
name: "t_gk_picinfo",
url: getExportUrl,
params: queryParam,
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
});
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
const labelCol = reactive({
xs: { span: 24 },
sm: { span: 7 },
});
const wrapperCol = reactive({
xs: { span: 24 },
sm: { span: 16 },
});
//预览图
const previewImage = ref<string | undefined>('');
//预览框状态
const previewVisible = ref<boolean>(false);
function handleCancel() {
previewVisible.value = false;
}
function handlePreview(file) {
previewImage.value = getFileAccessHttpUrl(file);
previewVisible.value = true;
}
/**
* 新增事件
*/
function handleAdd() {
registerModal.value.disableSubmit = false;
registerModal.value.add();
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
registerModal.value.disableSubmit = false;
registerModal.value.edit(record);
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
registerModal.value.disableSubmit = true;
registerModal.value.edit(record);
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
}
/**
* 批量对比事件
*/
async function calcAllFaceDataFn(type) {
let paramDate = await getCurrentSchoolYear();
let year = paramDate?.paramValue;
await calcAllFaceData({ year, type });
}
function purificationAllPicFn() {
getCurrentSchoolYear().then(res => {
let year = res?.paramValue;
if(year){
purificationAllPic({ year }).then(res => {
console.log(res);
});
}else{
useMessage().createMessage.info('未设置当前学期');
}
})
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record) {
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
}
/**
* 下拉操作栏
*/
function getDropDownAction(record) {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
/**
* 查询
*/
function searchQuery() {
reload();
}
/**
* 重置
*/
function searchReset() {
formRef.value.resetFields();
selectedRowKeys.value = [];
//刷新数据
reload();
}
</script>
<style lang="less" scoped>
.jeecg-basic-table-form-container {
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
.query-group-cust{
width: calc(50% - 15px);
min-width: 100px !important;
}
.query-group-split-cust{
width: 30px;
display: inline-block;
text-align: center
}
}
.imgClass{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>