From 8a709ba6db50831048f9c3e2452ea6dc6c3de36f Mon Sep 17 00:00:00 2001 From: Bang Hu <hu_bang@hotmail.com> Date: 星期五, 12 九月 2025 15:45:33 +0800 Subject: [PATCH] bug修改代码提交 --- src/views/tradeManage/detail/index.vue | 416 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 345 insertions(+), 71 deletions(-) diff --git a/src/views/tradeManage/detail/index.vue b/src/views/tradeManage/detail/index.vue index 0189854..9e0589f 100644 --- a/src/views/tradeManage/detail/index.vue +++ b/src/views/tradeManage/detail/index.vue @@ -2,78 +2,103 @@ <div class="default-main"> <!-- 璁㈠崟淇℃伅 + 鐢宠浜轰俊鎭� + 浜ゆ槗鍐呭锛堝悎骞朵负鍚屼竴鍗$墖锛� --> <el-card shadow="never"> - <el-descriptions - :column="2" - border - class="mt10 order-desc fixed-label" - label-width="180px" - :label-style="labelStyle" - :content-style="contentStyle" - > - <el-descriptions-item :span="2" class="section-header"> - <template #label> - <el-icon class="section-icon"><Document /></el-icon> - <span>璁㈠崟淇℃伅</span> - </template> - <template #default></template> - </el-descriptions-item> - <el-descriptions-item label="璁㈠崟缂栧彿">{{ detail.orderNo }}</el-descriptions-item> - <el-descriptions-item label="浜ゆ槗璧勬簮绫诲瀷">{{ detail.resourceTypeName }}</el-descriptions-item> - <el-descriptions-item label="鐢宠鏃堕棿">{{ detail.applyTime }}</el-descriptions-item> - <el-descriptions-item label="浜ゆ槗鐘舵��"> - <el-tag :type="getStatusType(detail.status)" size="small">{{ detail.statusName }}</el-tag> - </el-descriptions-item> - </el-descriptions> + <!-- 璁㈠崟淇℃伅 - 浣跨敤鑷畾涔夎〃鏍煎竷灞� --> + <div class="order-info-section"> + <div class="section-header"> + <el-icon class="section-icon"><Document /></el-icon> + <span>璁㈠崟淇℃伅</span> + </div> + <div class="order-info-grid"> + <div class="order-info-item"> + <div class="order-label">璁㈠崟缂栧彿</div> + <div class="order-content">{{ detail.orderNo }}</div> + </div> + <div class="order-info-item"> + <div class="order-label">浜ゆ槗璧勬簮绫诲瀷</div> + <div class="order-content">{{ detail.resourceTypeName }}</div> + </div> + <div class="order-info-item"> + <div class="order-label">鐢宠鏃堕棿</div> + <div class="order-content">{{ detail.applyTime }}</div> + </div> + <div class="order-info-item"> + <div class="order-label">浜ゆ槗鐘舵��</div> + <div class="order-content"> + <el-tag :type="getStatusType(detail.status)" size="small">{{ detail.statusName }}</el-tag> + </div> + </div> + </div> + </div> - <!-- 鐢宠浜轰俊鎭紙涓庤鍗曚俊鎭悓鍗$墖锛屽鐢ㄥ垎闅旀爣棰樻牱寮忥級 --> - <el-descriptions - :column="2" - border - class="mt15 order-desc fixed-label" - label-width="180px" - :label-style="labelStyle" - :content-style="contentStyle" - > - <el-descriptions-item :span="2" class="section-header"> - <template #label> - <el-icon class="section-icon"><User /></el-icon> - <span>鐢宠浜轰俊鎭�</span> - </template> - <template #default></template> - </el-descriptions-item> - <el-descriptions-item label="濮撳悕">{{ detail.userName || '-' }}</el-descriptions-item> - <el-descriptions-item label="鍗曚綅">{{ detail.unitName || '-' }}</el-descriptions-item> - <el-descriptions-item label="閮ㄩ棬">{{ detail.userDept || '-' }}</el-descriptions-item> - <el-descriptions-item label="鐢ㄦ埛鍚�">{{ detail.userAccount || '-' }}</el-descriptions-item> - </el-descriptions> + <!-- 鐢宠浜轰俊鎭� - 浣跨敤鑷畾涔夎〃鏍煎竷灞� --> + <div class="applicant-info-section"> + <div class="section-header"> + <el-icon class="section-icon"><User /></el-icon> + <span>鐢宠浜轰俊鎭�</span> + </div> + <div class="applicant-info-grid"> + <div class="applicant-info-item"> + <div class="applicant-label">濮撳悕</div> + <div class="applicant-content">{{ detail.userName || '-' }}</div> + </div> + <div class="applicant-info-item"> + <div class="applicant-label">鍗曚綅</div> + <div class="applicant-content">{{ detail.unitName || '-' }}</div> + </div> + <div class="applicant-info-item"> + <div class="applicant-label">閮ㄩ棬</div> + <div class="applicant-content">{{ detail.userDept || '-' }}</div> + </div> + <div class="applicant-info-item"> + <div class="applicant-label">鐢ㄦ埛鍚�</div> + <div class="applicant-content">{{ detail.userAccount || '-' }}</div> + </div> + </div> + </div> - <!-- 浜ゆ槗鍐呭锛堢揣闅忕敵璇蜂汉淇℃伅锛屽悓鍗$墖锛屽鐢ㄥ垎闅旀爣棰樻牱寮忥級 --> - <el-descriptions - :column="2" - border - class="mt15 order-desc fixed-label" - label-width="180px" - :label-style="labelStyle" - :content-style="contentStyle" - > - <el-descriptions-item :span="2" class="section-header"> - <template #label> - <el-icon class="section-icon"><Goods /></el-icon> - <span>浜ゆ槗鍐呭</span> - </template> - <template #default></template> - </el-descriptions-item> - <el-descriptions-item label="浜у搧鍚嶇О"> - <el-link type="primary" :underline="false">{{ detail.productName }}</el-link> - </el-descriptions-item> - <el-descriptions-item label="鎻愪緵鑰�">{{ detail.supplier }}</el-descriptions-item> - <el-descriptions-item label="琛屼笟棰嗗煙">{{ detail.industry }}</el-descriptions-item> - <el-descriptions-item label="鍗曚綅宸ョ▼">{{ detail.projectUnit }}</el-descriptions-item> - <el-descriptions-item label="浜у搧绫诲瀷">{{ detail.productType || '-' }}</el-descriptions-item> - <el-descriptions-item label="浜у搧绠�浠�"> - <div class="desc-wrap">{{ detail.productDesc }}</div> - </el-descriptions-item> - </el-descriptions> + <!-- 浜ゆ槗鍐呭 - 浣跨敤鑷畾涔夎〃鏍煎竷灞� --> + <div class="transaction-content-section"> + <div class="section-header"> + <el-icon class="section-icon"><Goods /></el-icon> + <span>浜ゆ槗鍐呭</span> + </div> + <div class="transaction-content-grid"> + <div class="transaction-content-item"> + <div class="transaction-label">浜у搧鍚嶇О</div> + <div class="transaction-content"> + <el-link type="primary" :underline="false">{{ detail.productName }}</el-link> + </div> + </div> + <div class="transaction-content-item"> + <div class="transaction-label">鎻愪緵鑰�</div> + <div class="transaction-content">{{ detail.supplier }}</div> + </div> + <div class="transaction-content-item"> + <div class="transaction-label">琛屼笟棰嗗煙</div> + <div class="transaction-content">{{ detail.industry }}</div> + </div> + <div class="transaction-content-item"> + <div class="transaction-label">鍗曚綅宸ョ▼</div> + <div class="transaction-content"> + <el-tooltip effect="dark" :content="detail.projectUnit || '-'" placement="top" :disabled="!(detail.projectUnit && String(detail.projectUnit).trim())" popper-class="tooltip-wrap"> + <div class="ellipsis-1">{{ detail.projectUnit || '-' }}</div> + </el-tooltip> + </div> + </div> + <div class="transaction-content-item"> + <div class="transaction-label">浜у搧绫诲瀷</div> + <div class="transaction-content">{{ detail.productType || '-' }}</div> + </div> + <div class="transaction-content-item"> + <div class="transaction-label">浜у搧绠�浠�</div> + <div class="transaction-content"> + <el-tooltip effect="dark" :content="detail.productDesc || '-'" placement="top" :disabled="!(detail.productDesc && String(detail.productDesc).trim())" popper-class="tooltip-wrap" trigger="click"> + <div class="desc-wrap ellipsis-3">{{ detail.productDesc || '-' }}</div> + </el-tooltip> + </div> + </div> + </div> + </div> <!-- 璁㈠崟璇︽儏锛堢Щ鍔ㄥ埌浜ゆ槗鍐呭涓嬮潰锛屽悓涓�鍗$墖鍐咃級 --> <div ref="orderTableWrapRef"> @@ -287,6 +312,53 @@ </div> </el-card> + + <!-- 浜ゆ槗璇勪环锛堝綋宸茶瘎浠锋椂鏄剧ず锛� --> + <el-card class="mt15" shadow="never" v-if="showEvaluation"> + <div class="title">浜ゆ槗璇勪环</div> + <div class="evaluation-content"> + <div class="evaluation-form"> + <div class="rating-section"> + <div class="rating-items"> + <div class="rating-row"> + <div class="rating-item"> + <label class="required">缁煎悎璇勫垎:</label> + <el-rate :model-value="evaluation.overallRating" :max="5" disabled :colors="['#99A9BF', '#F7BA2A', '#FF9900']" /> + </div> + <div class="rating-item"> + <label class="required">鏈嶅姟璇勫垎:</label> + <el-rate :model-value="evaluation.serviceRating" :max="5" disabled :colors="['#99A9BF', '#F7BA2A', '#FF9900']" /> + </div> + </div> + <div class="rating-row"> + <div class="rating-item"> + <label class="required">璐ㄩ噺璇勫垎:</label> + <el-rate :model-value="evaluation.qualityRating" :max="5" disabled :colors="['#99A9BF', '#F7BA2A', '#FF9900']" /> + </div> + <div class="rating-item"> + <label class="required">閫熷害璇勫垎:</label> + <el-rate :model-value="evaluation.speedRating" :max="5" disabled :colors="['#99A9BF', '#F7BA2A', '#FF9900']" /> + </div> + </div> + </div> + </div> + + <div class="form-item"> + <label class="required">璇勪环鍐呭:</label> + <div class="eval-text">{{ evaluation.content || '-' }}</div> + </div> + + <div class="form-item"> + <label>鍏朵粬淇℃伅:</label> + <div class="eval-meta"> + <span>鏄惁鍖垮悕锛歿{ evaluation.isAnonymous ? '鏄�' : '鍚�' }}</span> + <span class="split">|</span> + <span>璇勪环鏃堕棿锛歿{ evaluation.evaluateTime || '-' }}</span> + </div> + </div> + </div> + </div> + </el-card> <!-- 杩斿洖鎸夐挳 --> <div class="action-buttons"> <el-button @click="goBack">杩斿洖</el-button> @@ -309,6 +381,15 @@ const route = useRoute() const router = useRouter() const detail = reactive<any>({ items: [], records: [], nodes: [] }) +const evaluation = reactive<any>({ + content: '', + overallRating: 0, + serviceRating: 0, + qualityRating: 0, + speedRating: 0, + isAnonymous: false, + evaluateTime: '' +}) const orderTableWrapRef = ref<HTMLElement | null>(null) const activeTab = ref('records') const userStore = useUserInfo() @@ -320,6 +401,7 @@ }) const labelStyle = { width: '180px', maxWidth: '180px' } const contentStyle = { width: 'calc(50% - 180px)' } + // 鏂囦欢鐩稿叧 const fileList = ref<any[]>([]) @@ -334,6 +416,11 @@ const statusOrder = ['WAIT_UPLOAD', 'WAIT_AUTHORIZE', 'WAIT_CONFIRM', 'COMPLETED', 'EVALUATED'] const currentStatus = statusServerToUi[statusName] return currentStatus && statusOrder.indexOf(currentStatus) >= statusOrder.indexOf('WAIT_CONFIRM') +}) + +// 鏄惁鏄剧ず璇勪环鍗$墖锛堝凡璇勪环鏃舵樉绀猴級 +const showEvaluation = computed(() => { + return (detail.isEvaluate === '宸茶瘎浠�') }) // 璁$畻琛ㄦ牸鏁版嵁锛屾坊鍔犳眹鎬昏 @@ -446,6 +533,7 @@ projectUnit: data.projectUnit || '-', productType: data.productType || '-', productDesc: data.productDesc || '-', + isEvaluate: data.isEvaluate || '鏈瘎浠�' } // 鏄庣粏椤规槧灏� @@ -481,6 +569,18 @@ nodes: [], workflowId: data.workflowId || data.processinstId || '' }) + + // 鏄犲皠浜ゆ槗璇勪环淇℃伅锛堝鏋滃瓨鍦級 + if (data.evaluation) { + evaluation.content = data.evaluation.content || '' + evaluation.overallRating = Number(data.evaluation.rating || data.evaluation.overallRating || 0) + evaluation.serviceRating = Number(data.evaluation.serviceRating || 0) + evaluation.qualityRating = Number(data.evaluation.qualityRating || 0) + // 鍚庣涓� deliveryRating锛屽榻愬墠绔� speedRating 鍛藉悕 + evaluation.speedRating = Number(data.evaluation.deliveryRating || data.evaluation.speedRating || 0) + evaluation.isAnonymous = Boolean(data.evaluation.isAnonymous) + evaluation.evaluateTime = formatDateTime((data.evaluation.replyTime || data.evaluation.createdAt || data.evaluation.createTime) as any) + } // 鍒濆鍖栦氦鏄撲俊鎭娉ㄦ暟鎹� remarkItems.value = (detail.items || []).map((item: any, index: number) => { @@ -693,7 +793,8 @@ // 妫�鏌ュ搷搴旀牸寮� const responseData = previewResponse as any if (responseData && responseData.code === 200 && responseData.data) { - previewUrl = responseData.data + previewUrl = responseData.data.replaceAll("http://192.168.20.52:9000", import.meta.env.VITE_FILE_PREVIEW_URL) + // previewUrl = responseData.data console.log('浣跨敤棰勮URL:', previewUrl) } else { console.log('棰勮URL鑾峰彇澶辫触锛屼娇鐢ㄤ笅杞芥柟寮�') @@ -1005,11 +1106,184 @@ width: calc(50% - 180px) !important; } +/* 璁㈠崟淇℃伅鑷畾涔夊竷灞�鏍峰紡 */ +.order-info-section { + border: 1px solid #e4e7ed; + border-radius: 4px; + margin-top: 10px; + overflow: hidden; +} + +.order-info-section .section-header { + background: #f3f6fb; + padding: 12px 16px; + border-bottom: 1px solid #e4e7ed; + font-weight: 600; + display: flex; + align-items: center; +} + +.order-info-section .section-icon { + margin-right: 6px; + color: #409eff; +} + +.order-info-grid { + display: grid; + grid-template-columns: 15% 30% 15% 40%; + width: 100%; +} + +.order-info-item { + display: contents; +} + +.order-info-item .order-label { + padding: 12px 16px; + background: #fafafa; + border: 1px solid #e4e7ed; + font-size: 14px; + color: #606266; + display: flex; + align-items: center; +} + +.order-info-item .order-content { + padding: 12px 16px; + border: 1px solid #e4e7ed; + font-size: 14px; + color: #303133; + display: flex; + align-items: center; +} + +/* 鐢宠浜轰俊鎭嚜瀹氫箟甯冨眬鏍峰紡 */ +.applicant-info-section { + border: 1px solid #e4e7ed; + border-radius: 4px; + margin-top: 15px; + overflow: hidden; +} + +.applicant-info-section .section-header { + background: #f3f6fb; + padding: 12px 16px; + border-bottom: 1px solid #e4e7ed; + font-weight: 600; + display: flex; + align-items: center; +} + +.applicant-info-section .section-icon { + margin-right: 6px; + color: #409eff; +} + +.applicant-info-grid { + display: grid; + grid-template-columns: 15% 30% 15% 40%; + width: 100%; +} + +.applicant-info-item { + display: contents; +} + +.applicant-info-item .applicant-label { + padding: 12px 16px; + background: #fafafa; + border: 1px solid #e4e7ed; + font-size: 14px; + color: #606266; + display: flex; + align-items: center; +} + +.applicant-info-item .applicant-content { + padding: 12px 16px; + border: 1px solid #e4e7ed; + font-size: 14px; + color: #303133; + display: flex; + align-items: center; +} + +/* 浜ゆ槗鍐呭鑷畾涔夊竷灞�鏍峰紡 */ +.transaction-content-section { + border: 1px solid #e4e7ed; + border-radius: 4px; + margin-top: 15px; + overflow: hidden; +} + +.transaction-content-section .section-header { + background: #f3f6fb; + padding: 12px 16px; + border-bottom: 1px solid #e4e7ed; + font-weight: 600; + display: flex; + align-items: center; +} + +.transaction-content-section .section-icon { + margin-right: 6px; + color: #409eff; +} + +.transaction-content-grid { + display: grid; + grid-template-columns: 15% 30% 15% 40%; + width: 100%; +} + +.transaction-content-item { + display: contents; +} + +.transaction-content-item .transaction-label { + padding: 12px 16px; + background: #fafafa; + border: 1px solid #e4e7ed; + font-size: 14px; + color: #606266; + display: flex; + align-items: center; +} + +.transaction-content-item .transaction-content { + padding: 12px 16px; + border: 1px solid #e4e7ed; + font-size: 14px; + color: #303133; + display: flex; + align-items: center; +} + + .desc-wrap { white-space: pre-wrap; line-height: 22px; } +/* 鍗曡鐪佺暐锛堢敤浜庘�滃崟浣嶅伐绋嬧�濓級 */ +.ellipsis-1 { + max-height: 22px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* 澶氳鐪佺暐锛堢敤浜庘�滀骇鍝佺畝浠嬧�濓紝鍥哄畾涓�3琛岋紝鍙寜闇�璋冩暣锛� */ +.ellipsis-3 { + display: -webkit-box; + line-clamp: 3; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + + + /* 瀹℃壒杩借釜鏍囩椤垫牱寮� */ .approval-tabs { margin-top: 15px; -- Gitblit v1.8.0