优化搜索

This commit is contained in:
MoYi 2023-11-17 23:18:39 +08:00
parent 7226a58392
commit ac6ad4e712
6 changed files with 88 additions and 60 deletions

2
.gitignore vendored
View File

@ -23,3 +23,5 @@ dist-ssr
*.njsproj
*.sln
*.sw?
keys/

22
package-lock.json generated
View File

@ -9,9 +9,11 @@
"version": "0.0.0",
"dependencies": {
"element-plus": "^2.4.2",
"fs": "^0.0.1-security",
"vue": "^3.3.4"
},
"devDependencies": {
"@types/node": "^20.9.1",
"@vitejs/plugin-vue": "^4.2.3",
"typescript": "^5.0.2",
"vite": "^4.4.5",
@ -447,6 +449,15 @@
"@types/lodash": "*"
}
},
"node_modules/@types/node": {
"version": "20.9.1",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.9.1.tgz",
"integrity": "sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
@ -816,6 +827,11 @@
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"node_modules/fs": {
"version": "0.0.1-security",
"resolved": "https://registry.npmmirror.com/fs/-/fs-0.0.1-security.tgz",
"integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w=="
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@ -1020,6 +1036,12 @@
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
"node_modules/vite": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz",

View File

@ -10,9 +10,11 @@
},
"dependencies": {
"element-plus": "^2.4.2",
"fs": "^0.0.1-security",
"vue": "^3.3.4"
},
"devDependencies": {
"@types/node": "^20.9.1",
"@vitejs/plugin-vue": "^4.2.3",
"typescript": "^5.0.2",
"vite": "^4.4.5",

View File

@ -18,7 +18,6 @@
</el-col>
</el-row>
<!-- 主页左右布局 -->
<el-row>
<el-col :span="leftColumnSpan" class="Left">
<!-- 文件列表表格 -->
@ -32,12 +31,14 @@
<template #default="scope">
<!-- 下载按钮 -->
<el-button link type="primary" size="small" @click="handleDownload(scope.row)">下载</el-button>
<!-- 详细信息 -->
<el-button link type="info" size="small" @click="handleAbout(scope.row)">详细</el-button>
<!-- 删除按钮 -->
<el-button link type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
<!-- TODO: 管理员权限 -->
<!-- <el-button link type="danger" size="small" @click="handleDelete(scope.row)" >删除</el-button> -->
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="LeftAndRightContainer">
<el-pagination
@ -59,6 +60,7 @@
<script setup lang="ts">
import {ref, onMounted, watch, computed} from 'vue';
import {useWindowSize} from '@vueuse/core';
import {Table} from "element-plus";
//
const leftColumnSpan = ref(18);
@ -67,58 +69,25 @@ const rightColumnSpan = ref(6);
const {width} = useWindowSize();
const searchInput = ref('');
//
const originalTableData = [
{'id': 1, 'fileName': '文件名称Test_1', 'format': 'ttf', 'fileSize': '10001kb', 'uploader': 'MoYiJiangNan'},
{'id': 2, 'fileName': '文件名称Test_2', 'format': 'ttf', 'fileSize': '10002kb', 'uploader': 'MoYiJiangNan'},
{'id': 3, 'fileName': '文件名称Test_3', 'format': 'ttf', 'fileSize': '10003kb', 'uploader': 'MoYiJiangNan'},
{'id': 4, 'fileName': '文件名称Test_4', 'format': 'ttf', 'fileSize': '10004kb', 'uploader': 'MoYiJiangNan'},
{'id': 5, 'fileName': '文件名称Test_5', 'format': 'ttf', 'fileSize': '10005kb', 'uploader': 'MoYiJiangNan'},
{'id': 6, 'fileName': '文件名称Test_6', 'format': 'ttf', 'fileSize': '10006kb', 'uploader': 'MoYiJiangNan'},
{'id': 7, 'fileName': '文件名称Test_7', 'format': 'ttf', 'fileSize': '10007kb', 'uploader': 'MoYiJiangNan'},
{'id': 8, 'fileName': '文件名称Test_8', 'format': 'ttf', 'fileSize': '10008kb', 'uploader': 'MoYiJiangNan'},
{'id': 9, 'fileName': '文件名称Test_9', 'format': 'ttf', 'fileSize': '10009kb', 'uploader': 'MoYiJiangNan'},
{'id': 10, 'fileName': '文件名称Test_10', 'format': 'ttf', 'fileSize': '10010kb', 'uploader': 'MoYiJiangNan'},
{'id': 11, 'fileName': '文件名称Test_11', 'format': 'ttf', 'fileSize': '10011kb', 'uploader': 'MoYiJiangNan'},
{'id': 12, 'fileName': '文件名称Test_12', 'format': 'ttf', 'fileSize': '10012kb', 'uploader': 'MoYiJiangNan'},
{'id': 13, 'fileName': '文件名称Test_13', 'format': 'ttf', 'fileSize': '10013kb', 'uploader': 'MoYiJiangNan'},
{'id': 14, 'fileName': '文件名称Test_14', 'format': 'ttf', 'fileSize': '10014kb', 'uploader': 'MoYiJiangNan'},
{'id': 15, 'fileName': '文件名称Test_15', 'format': 'ttf', 'fileSize': '10015kb', 'uploader': 'MoYiJiangNan'},
{'id': 16, 'fileName': '文件名称Test_16', 'format': 'ttf', 'fileSize': '10016kb', 'uploader': 'MoYiJiangNan'},
{'id': 17, 'fileName': '文件名称Test_17', 'format': 'ttf', 'fileSize': '10017kb', 'uploader': 'MoYiJiangNan'},
{'id': 18, 'fileName': '文件名称Test_18', 'format': 'ttf', 'fileSize': '10018kb', 'uploader': 'MoYiJiangNan'},
{'id': 19, 'fileName': '文件名称Test_19', 'format': 'ttf', 'fileSize': '10019kb', 'uploader': 'MoYiJiangNan'},
{'id': 20, 'fileName': '文件名称Test_20', 'format': 'ttf', 'fileSize': '10020kb', 'uploader': 'MoYiJiangNan'},
{'id': 21, 'fileName': '文件名称Test_1', 'format': 'ttf', 'fileSize': '10001kb', 'uploader': 'MoYiJiangNan'},
{'id': 22, 'fileName': '文件名称Test_2', 'format': 'ttf', 'fileSize': '10002kb', 'uploader': 'MoYiJiangNan'},
{'id': 23, 'fileName': '文件名称Test_3', 'format': 'ttf', 'fileSize': '10003kb', 'uploader': 'MoYiJiangNan'},
{'id': 24, 'fileName': '文件名称Test_4', 'format': 'ttf', 'fileSize': '10004kb', 'uploader': 'MoYiJiangNan'},
{'id': 25, 'fileName': '文件名称Test_5', 'format': 'ttf', 'fileSize': '10005kb', 'uploader': 'MoYiJiangNan'},
{'id': 26, 'fileName': '文件名称Test_6', 'format': 'ttf', 'fileSize': '10006kb', 'uploader': 'MoYiJiangNan'},
{'id': 27, 'fileName': '文件名称Test_7', 'format': 'ttf', 'fileSize': '10007kb', 'uploader': 'MoYiJiangNan'},
{'id': 28, 'fileName': '文件名称Test_8', 'format': 'ttf', 'fileSize': '10008kb', 'uploader': 'MoYiJiangNan'},
{'id': 29, 'fileName': '文件名称Test_9', 'format': 'ttf', 'fileSize': '10009kb', 'uploader': 'MoYiJiangNan'},
{'id': 30, 'fileName': '文件名称Test_10', 'format': 'ttf', 'fileSize': '10010kb', 'uploader': 'MoYiJiangNan'},
{'id': 31, 'fileName': '文件名称Test_11', 'format': 'ttf', 'fileSize': '10011kb', 'uploader': 'MoYiJiangNan'},
{'id': 32, 'fileName': '文件名称Test_12', 'format': 'ttf', 'fileSize': '10012kb', 'uploader': 'MoYiJiangNan'},
{'id': 33, 'fileName': '文件名称Test_13', 'format': 'ttf', 'fileSize': '10013kb', 'uploader': 'MoYiJiangNan'},
{'id': 34, 'fileName': '文件名称Test_14', 'format': 'ttf', 'fileSize': '10014kb', 'uploader': 'MoYiJiangNan'},
{'id': 35, 'fileName': '文件名称Test_15', 'format': 'ttf', 'fileSize': '10015kb', 'uploader': 'MoYiJiangNan'},
{'id': 36, 'fileName': '文件名称Test_16', 'format': 'ttf', 'fileSize': '10016kb', 'uploader': 'MoYiJiangNan'},
{'id': 37, 'fileName': '文件名称Test_17', 'format': 'ttf', 'fileSize': '10017kb', 'uploader': 'MoYiJiangNan'},
{'id': 38, 'fileName': '文件名称Test_18', 'format': 'ttf', 'fileSize': '10018kb', 'uploader': 'MoYiJiangNan'},
{'id': 39, 'fileName': '文件名称Test_19', 'format': 'ttf', 'fileSize': '10019kb', 'uploader': 'MoYiJiangNan'},
{'id': 40, 'fileName': '文件名称Test_20', 'format': 'ttf', 'fileSize': '10020kb', 'uploader': 'MoYiJiangNan'},
// ...
];
const originalTableData: TableRow[] = [];
const randomDataRowCount = 1000;
const userName = "MoYiJiangNan";
for (let i = 1; i < randomDataRowCount; i++) {
originalTableData.push({
id: i,
fileName: "测试文件" + i,
format: 'ttf',
fileSize: (Math.random() * 1023).toFixed(0) + "kb",
uploader: "MoYiJiangNan"
});
}
//
const tableData = ref(originalTableData);
//
const pageSize = ref(15);
const pagerCount = ref(6);
const pagerCount = ref(7);
const totalItems = ref(tableData.value.length);
const currentPage = ref(1);
//
const pagedTableData = computed(() => {
const startIndex = (currentPage.value - 1) * pageSize.value;
@ -130,7 +99,6 @@ const pagedTableData = computed(() => {
const handlePageChange = (page: number) => {
currentPage.value = page;
};
//
const handleSearch = () => {
const query = searchInput.value.trim().toLowerCase();
@ -146,7 +114,6 @@ const handleSearch = () => {
currentPage.value = 1; //
totalItems.value = tableData.value.length; // totalItems
};
//
const updateLeftColumnSpan = () => {
if (width.value <= 768) {
@ -160,15 +127,32 @@ const updateLeftColumnSpan = () => {
onMounted(updateLeftColumnSpan);
watch(width, updateLeftColumnSpan);
// row
interface TableRow {
id: number;
fileName: string;
format: string;
fileSize: string;
uploader: string;
}
//
const handleDownload = () => {
console.log('点击下载按钮');
const handleDownload = (row: TableRow) => {
console.log('点击下载按钮', row);
alert('下载功能暂未实现' + row.id);
};
//
const handleAbout = (row: TableRow) => {
console.log('点击详细信息按钮', row);
alert('详细信息功能暂未实现' + row.id);
};
//
const handleDelete = () => {
console.log('点击删除按钮');
};
// const handleDelete = (row: TableRow) => {
// console.log('', row);
// alert('' + row.id);
// };
</script>
<style scoped>
@ -225,8 +209,4 @@ const handleDelete = () => {
margin: 0 0 0 5px;
width: 80%;
}
.el-table .el-table__body tr {
height: 10px; /* 修改行高为40px根据需求调整 */
}
</style>

View File

@ -0,0 +1,13 @@
.el-table .cell {
box-sizing: border-box;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
word-break: break-all;
/* 行高 */
line-height: 23px;
padding: 0 0;
/* 字体大小 */
font-size: 13px;
margin-left: 15px;
}

View File

@ -1,7 +1,16 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import fs from "fs"
// https://vitejs.dev/config/
export default defineConfig({
server: {
host: "0.0.0.0",
port: 5173,
https: {
key: fs.readFileSync("./keys/agent2-key.pem"),
cert: fs.readFileSync("./keys/agent2-cert.pem"),
},
},
plugins: [vue()],
})