This commit is contained in:
2025-12-09 18:00:50 +08:00
parent 50cdcee3f8
commit 64a61d173b
9 changed files with 2125 additions and 1995 deletions

23
package-lock.json generated
View File

@ -22,6 +22,7 @@
"dayjs": "^1.11.18", "dayjs": "^1.11.18",
"decimal.js": "^10.6.0", "decimal.js": "^10.6.0",
"echarts": "^6.0.0", "echarts": "^6.0.0",
"el-table-infinite-scroll": "^3.0.8",
"electron-store": "8.1.0", "electron-store": "8.1.0",
"electron-updater": "^6.3.9", "electron-updater": "^6.3.9",
"element-plus": "^2.10.4", "element-plus": "^2.10.4",
@ -5500,6 +5501,17 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/core-js": {
"version": "3.47.0",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.47.0.tgz",
"integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-util-is": { "node_modules/core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz",
@ -6337,6 +6349,17 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/el-table-infinite-scroll": {
"version": "3.0.8",
"resolved": "https://registry.npmmirror.com/el-table-infinite-scroll/-/el-table-infinite-scroll-3.0.8.tgz",
"integrity": "sha512-zveIGMsYfRFLuknOjfrCMRtyX0yFcb6BQsZS7E4A1AQYFiuBXHcU8Ag/hSKsdYvN1P28Ot/Bs0TUxwckOHt+JQ==",
"license": "MIT",
"dependencies": {
"core-js": "^3.x",
"element-plus": "^2.x",
"vue": "^3.x"
}
},
"node_modules/electron": { "node_modules/electron": {
"version": "37.2.4", "version": "37.2.4",
"resolved": "https://registry.npmmirror.com/electron/-/electron-37.2.4.tgz", "resolved": "https://registry.npmmirror.com/electron/-/electron-37.2.4.tgz",

View File

@ -34,6 +34,7 @@
"dayjs": "^1.11.18", "dayjs": "^1.11.18",
"decimal.js": "^10.6.0", "decimal.js": "^10.6.0",
"echarts": "^6.0.0", "echarts": "^6.0.0",
"el-table-infinite-scroll": "^3.0.8",
"electron-store": "8.1.0", "electron-store": "8.1.0",
"electron-updater": "^6.3.9", "electron-updater": "^6.3.9",
"element-plus": "^2.10.4", "element-plus": "^2.10.4",

View File

@ -30,6 +30,7 @@ import theme from "@/utils/theme";
import { handleInputLimit } from '@/utils/index' import { handleInputLimit } from '@/utils/index'
import Pagination from './components/Pagination/index.vue' import Pagination from './components/Pagination/index.vue'
import dispatchEventStorage from '@/utils/watchLocalStorage' import dispatchEventStorage from '@/utils/watchLocalStorage'
import elTableInfiniteScroll from 'el-table-infinite-scroll';
// process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true"; // process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";
@ -101,6 +102,7 @@ setupStore(setApp)
setupSvgIcon(setApp) setupSvgIcon(setApp)
setApp.use(EventBusPlugin) setApp.use(EventBusPlugin)
setApp.use(router) setApp.use(router)
setApp.use(elTableInfiniteScroll)
setApp.use(ElementPlus, { setApp.use(ElementPlus, {
locale: zhCn locale: zhCn
}) })

View File

@ -92,12 +92,15 @@
<el-col :span="18"> <el-col :span="18">
<el-card shadow="hover"> <el-card shadow="hover">
<el-table <el-table
:data="modelList" :data="currModelList"
:header-cell-style="{ 'text-align': 'center' }" :header-cell-style="{ 'text-align': 'center' }"
border border
style="width: 100%" style="width: 100%"
ref="tableRef" ref="tableRef"
@header-dragend="handleHeaderDragend" @header-dragend="handleHeaderDragend"
v-el-table-infinite-scroll="loadMoreData"
:infinite-scroll-distance="10"
:infinite-scroll-disabled="disabledScroll"
> >
<el-table-column type="index" label="序号" width="60" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="militaryName" label="名称" width="139" /> <el-table-column prop="militaryName" label="名称" width="139" />
@ -209,6 +212,24 @@ const contextMenu = reactive({
}) })
const treeRef = ref() const treeRef = ref()
//滚动加载
const disabledScroll = ref(false)
var currModelList: any = ref([])
let page = 1
const loadMoreData = () => {
// 模拟加载更多数据
setTimeout(() => {
const start = (page - 1) * 8
const end = start + 8
currModelList.value = modelList.value.slice(0, end)
page++
// 检查是否还有更多数据
if (page > modelList.value.length) {
disabledScroll.value = true
}
}, 1000)
}
// @ts-ignore // @ts-ignore
var sortableInstance: any = reactive(null) var sortableInstance: any = reactive(null)
@ -595,6 +616,9 @@ const getModelListByType = (id) => {
formData.append('name', photoName.value) formData.append('name', photoName.value)
GraphApi.showModelByType(formData).then((res) => { GraphApi.showModelByType(formData).then((res) => {
modelList.value = res.data modelList.value = res.data
currModelList.value = []
page = 1
loadMoreData()
}) })
} }
const divContextMenu = (event: MouseEvent) => { const divContextMenu = (event: MouseEvent) => {

View File

@ -94,11 +94,14 @@
<el-card shadow="hover"> <el-card shadow="hover">
<el-table <el-table
ref="tableRef" ref="tableRef"
:data="modelList" :data="currModelList"
:header-cell-style="{ 'text-align': 'center' }" :header-cell-style="{ 'text-align': 'center' }"
border border
style="width: 100%" style="width: 100%"
@header-dragend="handleHeaderDragend" @header-dragend="handleHeaderDragend"
v-el-table-infinite-scroll="loadMoreData"
:infinite-scroll-distance="10"
:infinite-scroll-disabled="disabledScroll"
> >
<el-table-column type="index" label="序号" width="60" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="modelName" label="模型名称" width="139" /> <el-table-column prop="modelName" label="模型名称" width="139" />
@ -240,6 +243,24 @@ const handleHeaderDragend = (newWidth, oldWidth, column, event) => {
}) })
} }
//滚动加载
const disabledScroll = ref(false)
var currModelList: any = ref([])
let page = 1
const loadMoreData = () => {
// 模拟加载更多数据
setTimeout(() => {
const start = (page - 1) * 8
const end = start + 8
currModelList.value = modelList.value.slice(0, end)
page++
// 检查是否还有更多数据
if (page > modelList.value.length) {
disabledScroll.value = true
}
}, 1000)
}
// @ts-ignore // @ts-ignore
var sortableInstance: any = reactive(null) var sortableInstance: any = reactive(null)
@ -662,6 +683,9 @@ const getModelListByType = (id) => {
formData.append('name', photoName.value) formData.append('name', photoName.value)
ModelApi.showModelByType(formData).then((res) => { ModelApi.showModelByType(formData).then((res) => {
modelList.value = res.data modelList.value = res.data
currModelList.value = []
page = 1
loadMoreData()
}) })
} }
const divContextMenu = (event: MouseEvent) => { const divContextMenu = (event: MouseEvent) => {

View File

@ -100,12 +100,15 @@
<el-col :span="18"> <el-col :span="18">
<el-card shadow="hover"> <el-card shadow="hover">
<el-table <el-table
:data="modelList" :data="currModelList"
:header-cell-style="{ 'text-align': 'center' }" :header-cell-style="{ 'text-align': 'center' }"
border border
style="width: 100%" style="width: 100%"
ref="tableRef" ref="tableRef"
@header-dragend="handleHeaderDragend" @header-dragend="handleHeaderDragend"
v-el-table-infinite-scroll="loadMoreData"
:infinite-scroll-distance="10"
:infinite-scroll-disabled="disabledScroll"
> >
<el-table-column type="index" label="序号" width="60" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="iconName" label="名称" width="139" /> <el-table-column prop="iconName" label="名称" width="139" />
@ -311,6 +314,24 @@ const reviewPhoto = (index) => {
const seeBigPhoto = (index) => { const seeBigPhoto = (index) => {
currentIndex.value = index currentIndex.value = index
} }
//滚动加载
const disabledScroll = ref(false)
var currModelList: any = ref([])
let page = 1
const loadMoreData = () => {
// 模拟加载更多数据
setTimeout(() => {
const start = (page - 1) * 8
const end = start + 8
currModelList.value = modelList.value.slice(0, end)
page++
// 检查是否还有更多数据
if (page > modelList.value.length) {
disabledScroll.value = true
}
}, 1000)
}
// @ts-ignore // @ts-ignore
var sortableInstance: any = reactive(null) var sortableInstance: any = reactive(null)
@ -683,6 +704,9 @@ const getModelListByType = async (id) => {
formData.append('name', photoName.value) formData.append('name', photoName.value)
PhotoApi.showModelByType(formData).then((res) => { PhotoApi.showModelByType(formData).then((res) => {
modelList.value = res.data modelList.value = res.data
currModelList.value = []
page = 1
loadMoreData()
}) })
} }
} }

View File

@ -137,12 +137,12 @@
</el-tree> </el-tree>
</div> </div>
<div class="model-gallery" ref="galleryRef"> <div class="model-gallery" ref="galleryRef" @scroll="handleScroll">
<div class="model-section" v-if="categories.length != 0"> <div class="model-section" v-if="categories.length != 0">
<!-- <h2 class="section-title">{{ categories[Number(currentTypeId)].name }}</h2> --> <!-- <h2 class="section-title">{{ categories[Number(currentTypeId)].name }}</h2> -->
<div class="model-grid"> <div class="model-grid">
<div <div
v-for="(model, mIndex) in categories" v-for="(model, mIndex) in currModelList"
:key="mIndex" :key="mIndex"
class="model-item" class="model-item"
@click="modelClick(mIndex, model)" @click="modelClick(mIndex, model)"
@ -271,23 +271,31 @@ const initObserver = () => {
}) })
} }
//滚动加载
var currModelList: any = ref([])
let page = 1
// 模拟加载更多数据 // 模拟加载更多数据
const loadMoreData = () => { const loadMoreData = () => {
if (loading.value) return // if (loading.value) return
loading.value = true // loading.value = true
setTimeout(() => { setTimeout(() => {
categories.value.push({ const start = (page - 1) * 24
id: `${categories.value.length + 1}`, const end = start + 24
name: `新增分类_${categories.value.length}`, currModelList.value = categories.value.slice(0, end)
models: Array(10) page++
.fill(0) // categories.value.push({
.map((_, i) => ({ // id: `${categories.value.length + 1}`,
id: `n${i}`, // name: `新增分类_${categories.value.length}`,
name: `新增军标_${i}`, // models: Array(10)
thumbnail: `https://picsum.photos/300/200?random=${i + 100}` // .fill(0)
})) // .map((_, i) => ({
}) // id: `n${i}`,
loading.value = false // name: `新增军标_${i}`,
// thumbnail: `https://picsum.photos/300/200?random=${i + 100}`
// }))
// })
// loading.value = false
}, 1000) }, 1000)
} }
@ -418,7 +426,7 @@ const renderModel = async (model) => {
cusAddNodes(window.treeObj, DbOption.parentId, [DbOption]) cusAddNodes(window.treeObj, DbOption.parentId, [DbOption])
if (GroundSvg.options.id) { if (GroundSvg.options.id) {
(window as any)._entityMap.set(GroundSvg.options.id, GroundSvg) ;(window as any)._entityMap.set(GroundSvg.options.id, GroundSvg)
} }
}) })
}) })
@ -429,6 +437,10 @@ const getModelListByType = (id) => {
formData.append('militaryTypeId', id) formData.append('militaryTypeId', id)
GraphApi.showModelByType(formData).then((res) => { GraphApi.showModelByType(formData).then((res) => {
categories.value = res.data categories.value = res.data
currModelList.value = []
page = 1
loadMoreData()
}) })
} }
@ -511,8 +523,11 @@ defineExpose({
// width: 40vw; // width: 40vw;
// height: 50vh; // height: 50vh;
:deep(.el-dialog) { :deep(.el-dialog) {
background: background: linear-gradient(
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%), 180deg,
rgba(var(--color-base1), 0.2) 0%,
rgba(var(--color-base1), 0) 100%
),
rgba(0, 0, 0, 0.6); rgba(0, 0, 0, 0.6);
border: 1px solid var(--color-border1); border: 1px solid var(--color-border1);
padding-left: 0 !important; padding-left: 0 !important;

View File

@ -137,12 +137,12 @@
</el-tree> </el-tree>
</div> </div>
<div class="model-gallery" ref="galleryRef"> <div class="model-gallery" ref="galleryRef" @scroll="handleScroll">
<div class="model-section" v-if="categories.length != 0"> <div class="model-section" v-if="categories.length != 0">
<!-- <h2 class="section-title">{{ categories[Number(currentTypeId)].name }}</h2> --> <!-- <h2 class="section-title">{{ categories[Number(currentTypeId)].name }}</h2> -->
<div class="model-grid"> <div class="model-grid">
<div <div
v-for="(model, mIndex) in categories" v-for="(model, mIndex) in currModelList"
:key="mIndex" :key="mIndex"
class="model-item" class="model-item"
@click="modelClick(mIndex, model)" @click="modelClick(mIndex, model)"
@ -365,24 +365,32 @@ const initObserver = () => {
observer?.observe(section) observer?.observe(section)
}) })
} }
//滚动加载
var currModelList: any = ref([])
let page = 1
// 模拟加载更多数据 // 模拟加载更多数据
const loadMoreData = () => { const loadMoreData = () => {
if (loading.value) return // if (loading.value) return
loading.value = true // loading.value = true
setTimeout(() => { setTimeout(() => {
categories.value.push({ const start = (page - 1) * 24
id: `${categories.value.length + 1}`, const end = start + 24
name: `新增分类_${categories.value.length}`, currModelList.value = categories.value.slice(0, end)
models: Array(10) page++
.fill(0)
.map((_, i) => ({ // categories.value.push({
id: `n${i}`, // id: `${categories.value.length + 1}`,
name: `新增模型_${i}`, // name: `新增分类_${categories.value.length}`,
thumbnail: `https://picsum.photos/300/200?random=${i + 100}` // models: Array(10)
})) // .fill(0)
}) // .map((_, i) => ({
loading.value = false // id: `n${i}`,
// name: `新增模型_${i}`,
// thumbnail: `https://picsum.photos/300/200?random=${i + 100}`
// }))
// })
// loading.value = false
}, 1000) }, 1000)
} }
@ -391,14 +399,18 @@ const handleScroll = () => {
if (!galleryRef.value) return if (!galleryRef.value) return
const scrollPosition = galleryRef.value.scrollTop + 100 const scrollPosition = galleryRef.value.scrollTop + 100
const sections = Array.from(document.querySelectorAll('.model-section')) // const sections = Array.from(document.querySelectorAll('.model-section'))
sections.forEach((section, index) => { // sections.forEach((section, index) => {
const rect = section.getBoundingClientRect() // const rect = section.getBoundingClientRect()
if (rect.top <= 450 && rect.bottom >= 450) { // if (rect.top <= 450 && rect.bottom >= 450) {
activeTab.value = index.toString() // console.log('indexxxxxx', index)
// activeTab.value = index.toString()
// }
// })
if (galleryRef.value.scrollTop + galleryRef.value.clientHeight >= galleryRef.value.scrollHeight) {
loadMoreData()
} }
})
} }
//-----------tree----------- //-----------tree-----------
@ -566,6 +578,10 @@ const getModelListByType = (id) => {
formData.append('name', modelName.value) formData.append('name', modelName.value)
ModelApi.showModelByType(formData).then((res) => { ModelApi.showModelByType(formData).then((res) => {
categories.value = res.data categories.value = res.data
currModelList.value = []
page = 1
loadMoreData()
}) })
} }
@ -668,8 +684,11 @@ defineExpose({
// height: 50vh; // height: 50vh;
:deep(.el-dialog) { :deep(.el-dialog) {
background: background: linear-gradient(
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%), 180deg,
rgba(var(--color-base1), 0.2) 0%,
rgba(var(--color-base1), 0) 100%
),
rgba(0, 0, 0, 0.6); rgba(0, 0, 0, 0.6);
border: 1px solid var(--color-border1); border: 1px solid var(--color-border1);
padding-left: 0 !important; padding-left: 0 !important;

3852
yarn.lock

File diff suppressed because it is too large Load Diff