feat(admin): 工单管理 UI 优化与回复模板、文件管理增强
Build and Deploy Vue3 / build (push) Failing after 48s
Build and Deploy Vue3 / deploy (push) Has been skipped

工单列表与详情 UI/交互优化及新工单提醒;新增回复模板与工单类型管理;文件管理增加管理员筛选并优化详情展示。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shiran
2026-06-02 17:28:11 +08:00
co-authored by Cursor
parent 928d14aada
commit c18622226e
12 changed files with 2478 additions and 475 deletions
+23 -15
View File
@@ -1153,7 +1153,7 @@
</template>
<script setup>
import { ref, reactive, computed, onMounted, onBeforeUnmount, onActivated, nextTick } from 'vue'
import { ref, reactive, computed, watch, onMounted, onBeforeUnmount, onActivated, nextTick } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
import { ArrowLeft, Refresh, ArrowDown, Monitor, WarningFilled, View, Hide, CopyDocument, Edit, Delete } from '@element-plus/icons-vue'
@@ -2612,23 +2612,31 @@ const disposeCharts = () => {
trafficHourlyChart?.dispose(); trafficHourlyChart = null
}
const reloadWithNewId = (newId) => {
if (!newId || newId === userGoodsId.value) return
userGoodsId.value = newId
userGoods.value = null
vm.value = null
vmNetworks.value = []
vmVolumes.value = []
inPortGroup.value = null
outPortGroup.value = null
isVmGoods.value = false
metricsData.value = null
disposeCharts()
loadDetail()
}
watch(() => route.query.id, (newVal) => {
if (route.path === '/user-goods/vm-detail') {
reloadWithNewId(parseInt(newVal) || 0)
}
})
onMounted(() => { loadDetail() })
onActivated(() => {
const newId = parseInt(route.query.id) || 0
if (newId && newId !== userGoodsId.value) {
userGoodsId.value = newId
userGoods.value = null
vm.value = null
vmNetworks.value = []
vmVolumes.value = []
inPortGroup.value = null
outPortGroup.value = null
isVmGoods.value = false
metricsData.value = null
disposeCharts()
loadDetail()
}
reloadWithNewId(parseInt(route.query.id) || 0)
})
onBeforeUnmount(() => { disposeCharts() })