From bb837829b4a0805a1f2a4fe93a944e8257c79e32 Mon Sep 17 00:00:00 2001
From: rain <1679827795@qq.com>
Date: Sat, 19 Apr 2025 15:14:01 +0800
Subject: [PATCH] 增加按钮loading状态
---
src/views/tickets/ticket.vue | 54 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 42 insertions(+), 12 deletions(-)
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index 6f19245..1f1db67 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -145,8 +145,8 @@
</el-form>
<template #footer>
<div class="dialog-footer">
- <el-button type="danger" @click="submitForm">发布</el-button>
- <el-button type="infoprimary" plain @click="saveDraft">存草稿</el-button>
+ <el-button type="danger" :loading="submitLoading" @click="submitForm">发布</el-button>
+ <el-button type="infoprimary" plain :loading="draftLoading" @click="saveDraft">存草稿</el-button>
<el-button @click="dialogVisible = false">取 消</el-button>
</div>
</template>
@@ -347,23 +347,23 @@
<div class="dialog-footer">
<template v-if="currentDetail.status === 2">
<!-- 待审核 -->
- <el-button v-if="hasReviewBtnPermission()" type="primary" @click="approveTicket">通过</el-button>
- <el-button v-if="hasReviewBtnPermission()" type="danger" @click="rejectTicket">不通过</el-button>
+ <el-button v-if="hasReviewBtnPermission()" type="primary" :loading="approveLoading" @click="approveTicket">通过</el-button>
+ <el-button v-if="hasReviewBtnPermission()" type="danger" :loading="rejectLoading" @click="rejectTicket">不通过</el-button>
<el-button @click="detailVisible = false">取消</el-button>
</template>
<template v-else-if="currentDetail.status === 0">
- <el-button v-if="hasProcessingBtnPermission()" type="primary" @click="approveAndDispatch">通过并派发</el-button>
- <el-button v-if="hasProcessingBtnPermission()" type="danger" @click="rejectTicket">不通过</el-button>
+ <el-button v-if="hasProcessingBtnPermission()" type="primary" :loading="dispatchLoading" @click="approveAndDispatch">通过并派发</el-button>
+ <el-button v-if="hasProcessingBtnPermission()" type="danger" :loading="rejectLoading" @click="rejectTicket">不通过</el-button>
<el-button @click="detailVisible = false">取消</el-button>
</template>
<template v-if="currentDetail.status === 3">
<!-- 处理中 -->
- <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" @click="completeTicket">完成工单</el-button>
+ <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="completeLoading" @click="completeTicket">完成工单</el-button>
<el-button @click="detailVisible = false">取消</el-button>
</template>
<template v-else-if="currentDetail.status === 4">
<!-- 已完成 -->
- <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" @click="finalizeTicket">完结工单</el-button>
+ <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="finalizeLoading" @click="finalizeTicket">完结工单</el-button>
<el-button @click="detailVisible = false">取消</el-button>
</template>
<template v-else-if="currentDetail.status === 5">
@@ -390,7 +390,7 @@
</el-form>
<template #footer>
<el-button @click="dispatchDialogVisible = false">取消</el-button>
- <el-button type="primary" @click="submitDispatch">确认派发</el-button>
+ <el-button type="primary" :loading="dispatchLoading" @click="submitDispatch">确认派发</el-button>
</template>
</el-dialog>
@@ -453,6 +453,12 @@
data() {
return {
submitLoading: false, // 新增loading状态
+ draftLoading: false,
+ approveLoading: false,
+ rejectLoading: false,
+ dispatchLoading: false,
+ completeLoading: false,
+ finalizeLoading: false,
activeTab: "all",
// tabs 只保留静态结构,不做权限判断
tabs: [
@@ -1043,8 +1049,8 @@
},
async saveDraft() {
- if (this.submitLoading) return; // 防止重复提交
- this.submitLoading = true;
+ if (this.draftLoading) return; // 防止重复提交
+ this.draftLoading = true;
try {
let handlerValue = this.form.handler;
if (!handlerValue || handlerValue === '未分配') {
@@ -1093,7 +1099,7 @@
this.$message.error(error.message || '保存草稿失败,请稍后重试');
}
finally {
- this.submitLoading = false;
+ this.draftLoading = false;
}
},
@@ -1483,6 +1489,8 @@
},
async approveTicket() {
+ if (this.approveLoading) return;
+ this.approveLoading = true;
try {
const data = {
id: this.currentDetail.id,
@@ -1507,9 +1515,13 @@
}
} catch (error) {
this.$message.error(error.message || '操作失败,请稍后重试');
+ } finally {
+ this.approveLoading = false;
}
},
async rejectTicket() {
+ if (this.rejectLoading) return;
+ this.rejectLoading = true;
try {
const data = {
id: this.currentDetail.id,
@@ -1527,6 +1539,8 @@
}
} catch (error) {
this.$message.error(error.message || '操作失败,请稍后重试');
+ } finally {
+ this.rejectLoading = false;
}
},
async submitProcessing() {
@@ -1563,6 +1577,8 @@
this.$message.success("工单已标记为完成");
},
async completeTicket() {
+ if (this.completeLoading) return;
+ this.completeLoading = true;
try {
if (!this.currentDetail.processingDetail) {
this.$message.warning('请先填写事件处理详情');
@@ -1591,9 +1607,13 @@
} catch (error) {
console.error('完成工单失败:', error);
this.$message.error(error.message || '操作失败,请稍后重试');
+ } finally {
+ this.completeLoading = false;
}
},
async approveAndDispatch() {
+ if (this.dispatchLoading) return;
+ this.dispatchLoading = true;
this.dispatchDialogVisible = true; // 打开派发对话框
},
hasProcessingBtnPermission() {
@@ -1612,6 +1632,8 @@
return this.permission && this.permission.tickets_review_btn === true;
},
async submitDispatch() {
+ if (this.dispatchLoading) return;
+ this.dispatchLoading = true;
this.$refs.dispatchForm.validate(async (valid) => {
if (valid) {
try {
@@ -1641,11 +1663,17 @@
} catch (error) {
console.error('派发失败:', error);
this.$message.error(error.message || '派发失败,请稍后重试');
+ } finally {
+ this.dispatchLoading = false;
}
+ } else {
+ this.dispatchLoading = false;
}
});
},
async finalizeTicket() {
+ if (this.finalizeLoading) return;
+ this.finalizeLoading = true;
try {
// 检查是否上传了图片
if (!this.currentDetail.photos || !this.currentDetail.photos.length) {
@@ -1673,6 +1701,8 @@
} catch (error) {
console.error('完结工单失败:', error);
this.$message.error(error.message || '操作失败,请稍后重试');
+ } finally {
+ this.finalizeLoading = false;
}
},
--
Gitblit v1.9.3