修改
This commit is contained in:
1
ai-management-dify
Submodule
1
ai-management-dify
Submodule
Submodule ai-management-dify added at aa57f8551a
1
jitsi-meet
Submodule
1
jitsi-meet
Submodule
Submodule jitsi-meet added at 6549d47233
@@ -4,6 +4,11 @@
|
||||
import {loadShare} from "@module-federation/runtime";
|
||||
const importMap = {
|
||||
|
||||
"axios": async () => {
|
||||
let pkg = await import("__mf__virtual/workcase__prebuild__axios__prebuild__.js");
|
||||
return pkg;
|
||||
}
|
||||
,
|
||||
"element-plus": async () => {
|
||||
let pkg = await import("__mf__virtual/workcase__prebuild__element_mf_2_plus__prebuild__.js");
|
||||
return pkg;
|
||||
@@ -22,6 +27,36 @@
|
||||
}
|
||||
const usedShared = {
|
||||
|
||||
"axios": {
|
||||
name: "axios",
|
||||
version: "1.13.2",
|
||||
scope: ["default"],
|
||||
loaded: false,
|
||||
from: "workcase",
|
||||
async get () {
|
||||
if (false) {
|
||||
throw new Error(`Shared module '${"axios"}' must be provided by host`);
|
||||
}
|
||||
usedShared["axios"].loaded = true
|
||||
const {"axios": pkgDynamicImport} = importMap
|
||||
const res = await pkgDynamicImport()
|
||||
const exportModule = {...res}
|
||||
// All npm packages pre-built by vite will be converted to esm
|
||||
Object.defineProperty(exportModule, "__esModule", {
|
||||
value: true,
|
||||
enumerable: false
|
||||
})
|
||||
return function () {
|
||||
return exportModule
|
||||
}
|
||||
},
|
||||
shareConfig: {
|
||||
singleton: false,
|
||||
requiredVersion: "^1.13.2",
|
||||
|
||||
}
|
||||
}
|
||||
,
|
||||
"element-plus": {
|
||||
name: "element-plus",
|
||||
version: "2.12.0",
|
||||
|
||||
1
urbanLifelineWeb/packages/workcase/src/api/index.ts
Normal file
1
urbanLifelineWeb/packages/workcase/src/api/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from './workcase'
|
||||
1
urbanLifelineWeb/packages/workcase/src/types/index.ts
Normal file
1
urbanLifelineWeb/packages/workcase/src/types/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from './workcase'
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
<!-- 工单列表 -->
|
||||
<el-card>
|
||||
<el-table :data="filteredTickets" style="width: 100%">
|
||||
<el-table :data="filteredTickets" style="width: 100%" v-loading="loading">
|
||||
<el-table-column prop="optsn" label="工单号" width="140">
|
||||
<template #default="{ row }">
|
||||
<span class="ticket-no">{{ row.optsn }}</span>
|
||||
@@ -140,7 +140,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="故障描述">
|
||||
<el-input v-model="formData.remark" type="textarea" :rows="4" placeholder="请输入故障描述" />
|
||||
<el-input v-model="formData.description" type="textarea" :rows="4" placeholder="请输入故障描述" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
@@ -156,9 +156,9 @@ import { ref, computed, onMounted } from 'vue'
|
||||
import AdminLayout from '@/views/admin/AdminLayout.vue'
|
||||
import { Plus, Search } from 'lucide-vue-next'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { workcaseAPI } from 'shared/api'
|
||||
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO } from 'shared/types'
|
||||
import type { PageParam } from 'shared/types'
|
||||
import { workcaseAPI } from '@/api/workcase'
|
||||
import type { TbWorkcaseDTO, TbWorkcaseProcessDTO } from '@/types/workcase'
|
||||
import type { PageRequest, PageParam, ResultDomain } from 'shared/types'
|
||||
|
||||
const statusFilter = ref('all')
|
||||
const typeFilter = ref('')
|
||||
@@ -171,12 +171,14 @@ const showCreateDialog = ref(false)
|
||||
const loading = ref(false)
|
||||
|
||||
const formData = ref<TbWorkcaseDTO>({
|
||||
roomId: '',
|
||||
deviceNamePlateImg: '',
|
||||
username: '',
|
||||
phone: '',
|
||||
device: '',
|
||||
type: '',
|
||||
emergency: 'normal',
|
||||
remark: ''
|
||||
description: ''
|
||||
})
|
||||
|
||||
const workcaseList = ref<TbWorkcaseDTO[]>([])
|
||||
@@ -187,7 +189,10 @@ const workcaseList = ref<TbWorkcaseDTO[]>([])
|
||||
*/
|
||||
const loadWorkcases = async () => {
|
||||
loading.value = true
|
||||
const filter: TbWorkcaseDTO = {}
|
||||
const filter: TbWorkcaseDTO = {
|
||||
roomId: '',
|
||||
deviceNamePlateImg: '',
|
||||
}
|
||||
if (statusFilter.value !== 'all') {
|
||||
filter.status = statusFilter.value as TbWorkcaseDTO['status']
|
||||
}
|
||||
@@ -203,10 +208,14 @@ const loadWorkcases = async () => {
|
||||
pageSize: pageSize.value
|
||||
}
|
||||
|
||||
const res = await workcaseAPI.getWorkcasePage({ filter, pageParam })
|
||||
if (res.success && res.data) {
|
||||
workcaseList.value = res.data.list || []
|
||||
total.value = res.data.pageParam?.total || 0
|
||||
const pageRequest: PageRequest<TbWorkcaseDTO> = {
|
||||
filter,
|
||||
pageParam
|
||||
}
|
||||
const res = await workcaseAPI.getWorkcasePage(pageRequest)
|
||||
if (res.success) {
|
||||
workcaseList.value = res.dataList || res.pageDomain?.dataList || []
|
||||
total.value = res.pageParam?.totalElements || 0
|
||||
} else {
|
||||
ElMessage.error(res.message || '加载失败')
|
||||
}
|
||||
@@ -226,7 +235,7 @@ const createWorkcaseAPI = async () => {
|
||||
if (res.success) {
|
||||
ElMessage.success('工单创建成功')
|
||||
showCreateDialog.value = false
|
||||
formData.value = { username: '', phone: '', device: '', type: '', emergency: 'normal', remark: '' }
|
||||
formData.value = { roomId: '', deviceNamePlateImg: '', username: '', phone: '', device: '', type: '', emergency: 'normal', description: '' }
|
||||
loadWorkcases()
|
||||
} else {
|
||||
ElMessage.error(res.message || '创建失败')
|
||||
@@ -288,13 +297,7 @@ const mockTickets = [
|
||||
{ workcaseId: 'WC005', optsn: 'TK005', username: '孙七', phone: '13800138004', type: 'install', device: 'G-100S', emergency: 'emergency' as const, status: 'processing' as const, processor: '李四', createTime: '2024-12-13 08:45' }
|
||||
]
|
||||
|
||||
/**
|
||||
* 加载Mock数据
|
||||
*/
|
||||
const loadMockData = () => {
|
||||
workcaseList.value = mockTickets as TbWorkcaseDTO[]
|
||||
total.value = mockTickets.length
|
||||
}
|
||||
|
||||
|
||||
// ========================= 字段映射 =========================
|
||||
const typeMap: Record<string, string> = {
|
||||
@@ -333,7 +336,8 @@ const filteredTickets = computed(() => {
|
||||
if (searchKeyword.value) {
|
||||
const keyword = searchKeyword.value.toLowerCase()
|
||||
result = result.filter((t: TbWorkcaseDTO) =>
|
||||
(t.optsn || '').toLowerCase().includes(keyword) ||
|
||||
(t.roomId || '').toLowerCase().includes(keyword) ||
|
||||
(t.deviceNamePlateImg || '').toLowerCase().includes(keyword) ||
|
||||
(t.username || '').toLowerCase().includes(keyword) ||
|
||||
(t.device || '').toLowerCase().includes(keyword)
|
||||
)
|
||||
@@ -352,46 +356,37 @@ const getStatusType = (status: string) => {
|
||||
|
||||
const handleFilterChange = () => {
|
||||
currentPage.value = 1
|
||||
// loadWorkcases() // API调用:取消注释启用
|
||||
loadWorkcases() // API调用:取消注释启用
|
||||
}
|
||||
|
||||
const handlePageChange = (page: number) => {
|
||||
currentPage.value = page
|
||||
// loadWorkcases() // API调用:取消注释启用
|
||||
loadWorkcases() // API调用:取消注释启用
|
||||
}
|
||||
|
||||
const viewDetail = (row: TbWorkcaseDTO) => {
|
||||
ElMessage.info(`查看工单详情: ${row.optsn}`)
|
||||
ElMessage.info(`查看工单详情: ${row.workcaseId}`)
|
||||
// TODO: 跳转到工单详情页面
|
||||
}
|
||||
|
||||
const assignTicket = (row: TbWorkcaseDTO) => {
|
||||
// assignWorkcaseAPI(row) // API调用:取消注释启用
|
||||
ElMessage.info(`指派工单: ${row.optsn}`)
|
||||
assignWorkcaseAPI(row) // API调用:取消注释启用
|
||||
// ElMessage.info(`指派工单: ${row.optsn}`)
|
||||
}
|
||||
|
||||
const completeTicket = (row: TbWorkcaseDTO) => {
|
||||
// completeWorkcaseAPI(row) // API调用:取消注释启用
|
||||
ElMessage.success(`完成工单: ${row.optsn}`)
|
||||
completeWorkcaseAPI(row) // API调用:取消注释启用
|
||||
// ElMessage.success(`完成工单: ${row.optsn}`)
|
||||
}
|
||||
|
||||
const createTicket = () => {
|
||||
// createWorkcaseAPI() // API调用:取消注释启用
|
||||
|
||||
// Mock模式下的处理
|
||||
if (!formData.value.username || !formData.value.phone || !formData.value.device || !formData.value.type) {
|
||||
ElMessage.error('请填写必填项')
|
||||
return
|
||||
}
|
||||
ElMessage.success('工单创建成功')
|
||||
showCreateDialog.value = false
|
||||
formData.value = { username: '', phone: '', device: '', type: '', emergency: 'normal', remark: '' }
|
||||
createWorkcaseAPI() // API调用:取消注释启用
|
||||
}
|
||||
|
||||
// ========================= 生命周期 =========================
|
||||
onMounted(() => {
|
||||
// loadWorkcases() // API调用:取消注释启用
|
||||
loadMockData() // Mock模式:注释此行以使用API
|
||||
loadWorkcases() // API调用:取消注释启用
|
||||
// loadMockData() // Mock模式:注释此行以使用API
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -84,51 +84,15 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
import type { TbWorkcaseDTO } from '@/types/workcase'
|
||||
import { workcaseAPI } from '@/api/workcase/workcase'
|
||||
|
||||
// 响应式数据
|
||||
const headerPaddingTop = ref<number>(44)
|
||||
const headerTotalHeight = ref<number>(88)
|
||||
const activeTab = ref<string>('all')
|
||||
|
||||
// 模拟工单数据
|
||||
const orders = ref<TbWorkcaseDTO[]>([
|
||||
{
|
||||
workcaseId: 'TH20241217001',
|
||||
userId: '1',
|
||||
username: '李经理',
|
||||
phone: '13800138001',
|
||||
type: '控制系统故障',
|
||||
device: 'TH-500GF',
|
||||
deviceCode: 'TH20230501001',
|
||||
emergency: 'emergency',
|
||||
status: 'processing',
|
||||
createTime: '2024-12-17 15:30:00'
|
||||
},
|
||||
{
|
||||
workcaseId: 'TH20241217002',
|
||||
userId: '2',
|
||||
username: '王工',
|
||||
phone: '13800138002',
|
||||
type: '发动机故障',
|
||||
device: 'TH-300GF',
|
||||
deviceCode: 'TH20230502001',
|
||||
emergency: 'normal',
|
||||
status: 'pending',
|
||||
createTime: '2024-12-17 14:20:00'
|
||||
},
|
||||
{
|
||||
workcaseId: 'TH20241216001',
|
||||
userId: '3',
|
||||
username: '张总',
|
||||
phone: '13800138003',
|
||||
type: '电气系统故障',
|
||||
device: 'TH-800GF',
|
||||
deviceCode: 'TH20230503001',
|
||||
emergency: 'normal',
|
||||
status: 'done',
|
||||
createTime: '2024-12-16 09:15:00'
|
||||
}
|
||||
])
|
||||
const orders = ref<TbWorkcaseDTO[]>([])
|
||||
const loading = ref<boolean>(false)
|
||||
const error = ref<string>('')
|
||||
|
||||
// 计算属性:根据tab筛选工单
|
||||
const filteredOrders = computed(() => {
|
||||
@@ -158,19 +122,44 @@ onMounted(() => {
|
||||
headerTotalHeight.value = statusBarHeight + 44
|
||||
// #endif
|
||||
|
||||
// TODO: 实际调用API获取工单列表
|
||||
// 调用API获取工单列表
|
||||
loadWorkcaseList()
|
||||
})
|
||||
|
||||
// 加载工单列表
|
||||
function loadWorkcaseList() {
|
||||
// TODO: 调用 workcaseAPI.getWorkcaseList() 获取数据
|
||||
console.log('加载工单列表')
|
||||
async function loadWorkcaseList() {
|
||||
loading.value = true
|
||||
error.value = ''
|
||||
try {
|
||||
const filter: TbWorkcaseDTO = {}
|
||||
if (activeTab.value !== 'all') {
|
||||
filter.status = activeTab.value as TbWorkcaseDTO['status']
|
||||
}
|
||||
const res = await workcaseAPI.getWorkcaseList(filter)
|
||||
if (res.success && res.dataList) {
|
||||
orders.value = res.dataList || []
|
||||
} else {
|
||||
error.value = res.message || '加载失败'
|
||||
uni.showToast({
|
||||
title: res.message || '加载失败',
|
||||
icon: 'error'
|
||||
})
|
||||
}
|
||||
} catch (e) {
|
||||
error.value = '网络错误,请稍后重试'
|
||||
uni.showToast({
|
||||
title: '网络错误,请稍后重试',
|
||||
icon: 'error'
|
||||
})
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 切换Tab
|
||||
function changeTab(tab: string) {
|
||||
activeTab.value = tab
|
||||
loadWorkcaseList()
|
||||
}
|
||||
|
||||
// 获取状态样式类
|
||||
|
||||
Reference in New Issue
Block a user