From 5808f76456ca0d40de5074f132b73a5a488e3e13 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 09 Dec 2025 09:12:03 +0800
Subject: [PATCH] Merge branch 'refs/heads/feature/v9.0/9.0.1' into test
---
src/views/tickets/ticketComponent/TicketDetailDialog.vue | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 154 insertions(+), 16 deletions(-)
diff --git a/src/views/tickets/ticketComponent/TicketDetailDialog.vue b/src/views/tickets/ticketComponent/TicketDetailDialog.vue
index af8f87a..3532696 100644
--- a/src/views/tickets/ticketComponent/TicketDetailDialog.vue
+++ b/src/views/tickets/ticketComponent/TicketDetailDialog.vue
@@ -127,6 +127,8 @@
>
<el-input
type="textarea"
+ :maxlength="200"
+ show-word-limit
v-model="currentDetail.content"
placeholder="请输入工单内容"
class="required-input"
@@ -154,7 +156,10 @@
v-model="currentDetail.processingDetail"
placeholder="请输入事件处理详情"
:rows="4"
+ :maxlength="200"
+ show-word-limit
style="width: 100%; margin-bottom: 10px"
+ :disabled="!isCurrentUserAssigned"
/>
</template>
<!-- 已完成和已完结状态显示只读文本 -->
@@ -174,6 +179,7 @@
<template v-else> 上传图片</template>
</div>
<el-upload
+ :disabled="!isCurrentUserAssigned"
v-if="hasProcessedAndOverBtnPermission()"
ref="uploadRef"
:action="'#'"
@@ -357,6 +363,7 @@
:loading="completeLoading"
@click="handleComplete"
icon="el-icon-circle-check"
+ :disabled="!isCurrentUserAssigned"
>
完成工单
</el-button>
@@ -380,11 +387,16 @@
</template>
<script setup>
+import { useStore } from 'vuex'
import { ref, computed, watch, nextTick } from 'vue';
import { flowEvent, getStepInfo } from '@/api/tickets/ticket';
import { getSmallImg, getShowImg } from '@/utils/util';
import CreateQRcode from '@/components/CreateQRcode/CreateQRcode.vue';
import { ElMessage} from 'element-plus';
+const store = useStore()
+const userInfo = computed(() => store.state.user.userInfo)
+const isLoading = ref(false);
+// console.log('userInfo',userInfo.value);
// 定义props
const props = defineProps({
modelValue: {
@@ -425,7 +437,8 @@
}
});
-// 定义emits
+// 定义emits
+
const emit = defineEmits([
'update:modelValue',
'detail-success',
@@ -460,7 +473,12 @@
const isEditMode = computed(() => {
return props.currentDetail.status === -1;
});
-
+// 是否有权限完成工单
+const isCurrentUserAssigned =computed(()=>{
+ const handleUserId = props.currentDetail?.handle_user_id;
+ const currentUserId = userInfo.value?.user_id;
+ return !!handleUserId && !!currentUserId && String(handleUserId) === String(currentUserId);
+})
const formattedDetailFields = computed(() => {
const fields = [
{ label: '工单名称', value: props.currentDetail.orderName },
@@ -510,8 +528,13 @@
() => props.currentDetail,
(newVal) => {
if (newVal && dialogVisible.value) {
- loadStepInfo();
- initMap();
+ isLoading.value = true;
+ setTimeout(() => {
+ loadStepInfo();
+ initMap();
+ isLoading.value = false;
+ }, 50);
+
}
},
{ deep: true }
@@ -565,7 +588,6 @@
const mapStatus = (status) => {
const statusTextMap = {
- '-1': '草稿',
2: '待审核',
0: '待处理',
3: '处理中',
@@ -619,7 +641,7 @@
const hasProcessedAndOverBtnPermission = () => {
return props.permission && props.permission.tickets_view_processedAndOver === true;
};
-
+// 通过不通过
const hasReviewBtnPermission = () => {
return props.permission && props.permission.tickets_review_btn === true;
};
@@ -718,10 +740,9 @@
const handleComplete = async () => {
if (completeLoading.value) return;
completeLoading.value = true;
-
- try {
if (!props.currentDetail.processingDetail) {
ElMessage.warning('请先填写事件处理详情');
+ completeLoading.value = false;
return;
}
@@ -730,18 +751,15 @@
completeLoading.value = false;
return;
}
-
+ try {
const data = {
id: props.currentDetail.id,
status: props.currentDetail.status,
processingDetails: props.currentDetail.processingDetail,
eventNum: props.currentDetail.orderNumber,
};
-
const file = props.currentDetail.photos?.[0]?.raw || null;
-
const response = await flowEvent(data, file);
-
if (response.data.code === 0) {
ElMessage.success('工单已完成');
emit('detail-success');
@@ -764,8 +782,8 @@
<style lang="scss">
.custom-dialog {
- max-height: 96vh;
- transition: max-height 0.3s ease-out;
+ height: 96vh;
+// min-height: 50vh;
.el-dialog__body {
border-top: 0.1rem solid #f0f0f0;
}
@@ -807,13 +825,14 @@
.step-timer {
position: absolute;
- right: 80%;
+ right: 92%;
top: 50%;
transform: translateY(-50%);
width: 100px;
margin-left: 4px;
color: #666;
font-size: 12px;
+ white-space: nowrap;
}
.event-total-time {
@@ -823,6 +842,9 @@
margin-bottom: 12px;
}
+.action-bar {
+ margin-bottom: 16px;
+}
.el-dialog {
.el-form-item {
@@ -850,10 +872,112 @@
margin-top: 12px;
}
+.create-ticket-form {
+ padding: 20px 10px;
+
+ .form-section {
+ background-color: #fff;
+ border-radius: 4px;
+
+ .el-row {
+ margin-bottom: 16px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ .location-wrapper {
+ width: 100%; // 修改为100%以适应父容器
+ height: auto; // 修改为auto以自适应内容
+
+ .map-button {
+ width: 100%; // 让按钮填满容器宽度
+ height: 36px; // 与其他输入框保持一致的高度
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ i {
+ margin-right: 4px;
+ }
+ }
+
+ .location-text {
+ margin-top: 8px;
+ padding: 8px 12px;
+ background-color: #f5f7fa;
+ border-radius: 4px;
+ color: #606266;
+ font-size: 13px;
+ line-height: 1.4;
+ }
+ }
+
+ .upload-wrapper {
+ .uploader {
+ :deep(.el-upload--picture-card) {
+ width: 120px;
+ height: 100px;
+ line-height: 128px;
+ }
+
+ :deep(.el-upload-list__item) {
+ width: 120px;
+ height: 120px;
+ }
+ }
+
+ .upload-tip {
+ font-size: 12px;
+ color: #909399;
+ line-height: 1.4;
+ margin-top: 8px;
+ }
+ }
+
+ .el-form-item {
+ margin-bottom: 18px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ :deep(.el-form-item__label) {
+ font-weight: 500;
+ color: #606266;
+ }
+ :deep(.el-textarea__inner) {
+ padding: 8px 12px;
+ }
+ .full-width {
+ width: 100%;
+ }
+}
+
:deep(.el-dialog__body) {
border-top: 0.1rem solid #f0f0f0;
}
+.dialog-footer-new {
+ text-align: right;
+ padding-top: 16px;
+ border-top: 1px solid #ebeef5;
+
+ .el-button + .el-button {
+ margin-left: 12px;
+ }
+
+ .el-button {
+ padding: 9px 20px;
+
+ &:last-child {
+ margin-left: 12px;
+ }
+ }
+}
.dialog-footer1-new {
position: sticky;
@@ -899,6 +1023,18 @@
}
}
+.location-info {
+ margin-top: 10px;
+ padding: 10px;
+ background-color: #f5f7fa;
+ border-radius: 4px;
+
+ p {
+ margin: 5px 0;
+ color: #606266;
+ font-size: 14px;
+ }
+}
.map-select {
display: flex;
@@ -1057,6 +1193,7 @@
max-height: 600px;
overflow-y: scroll;
overflow-x: hidden;
+
}
.media-box {
@@ -1242,7 +1379,6 @@
}
}
}
-
/* 新建工单和处理工单的上传组件样式 */
.create-upload,
.detail-upload {
@@ -1277,6 +1413,7 @@
object-fit: contain;
}
}
+
/* 必填项样式 */
.required-label {
position: relative;
@@ -1287,6 +1424,7 @@
margin-right: 4px;
}
}
+
/* 必填输入框样式 */
.required-input {
width: 100%;
--
Gitblit v1.9.3