skyline 1 сар өмнө
parent
commit
dffeeeccab

+ 2 - 2
haha-mp/src/pages/orderDetail/orderDetail.vue

@@ -50,8 +50,8 @@
         <!-- 操作按钮 -->
         <view class="card-footer-actions">
           <button v-if="canRefund(order)" class="action-btn-outline" @click="applyRefund">申请退款</button>
-          <button class="action-btn-primary" @click="printOrder">打印订单</button>
-          <button class="action-btn-primary" @click="exportImage">导出图片</button>
+<!--          <button class="action-btn-primary" @click="printOrder">打印订单</button>-->
+<!--          <button class="action-btn-primary" @click="exportImage">导出图片</button>-->
         </view>
       </view>
 

+ 66 - 1
haha-mp/src/pages/refund/refund.vue

@@ -77,6 +77,18 @@
           <text class="radio-label">{{ reason.label }}</text>
         </label>
       </radio-group>
+      
+      <!-- 其他原因的文本输入框 -->
+      <view v-if="selectedReason === '4'" class="remark-input-wrapper">
+        <textarea 
+          v-model="refundRemark" 
+          class="remark-textarea"
+          placeholder="请详细描述您的问题或投诉内容"
+          maxlength="100"
+          :show-confirm-bar="false"
+        />
+        <text class="remark-count">{{ refundRemark.length }}/100</text>
+      </view>
     </view>
     
     <!-- 退款信息 -->
@@ -160,6 +172,7 @@ const refundAmount = computed(() => {
 });
 
 const selectedReason = ref('');
+const refundRemark = ref('');
 
 const refundReasons = [
   { label: '订单扣款错误', value: '1' },
@@ -170,6 +183,10 @@ const refundReasons = [
 
 const handleReasonChange = (e: any) => {
   selectedReason.value = e.detail.value;
+  // 如果切换到非"其他"原因,清空备注内容
+  if (selectedReason.value !== '4') {
+    refundRemark.value = '';
+  }
 };
 
 /**
@@ -318,6 +335,15 @@ const submitRefund = async () => {
     return;
   }
 
+  // 如果选择"其他"原因,校验备注内容
+  if (selectedReason.value === '4' && !refundRemark.value.trim()) {
+    uni.showToast({
+      title: '请填写投诉内容',
+      icon: 'none'
+    });
+    return;
+  }
+
   // 映射前端退款原因到后端描述
   const reasonMap: Record<string, string> = {
     '1': '订单扣款错误',
@@ -326,7 +352,12 @@ const submitRefund = async () => {
     '4': '其他'
   };
 
-  const reasonText = reasonMap[selectedReason.value] || '用户申请退款';
+  let reasonText = reasonMap[selectedReason.value] || '用户申请退款';
+  
+  // 如果是"其他"原因,将备注内容附加到原因后面
+  if (selectedReason.value === '4' && refundRemark.value.trim()) {
+    reasonText = `其他:${refundRemark.value.trim()}`;
+  }
 
   // 构建选中的商品信息(包含退款数量)
   const selectedProductIds = selectedProducts.value.map(index => {
@@ -693,6 +724,40 @@ radio-group {
   line-height: 1.5;
 }
 
+/* 备注输入框 */
+.remark-input-wrapper {
+  margin-top: 24rpx;
+  padding: 20rpx;
+  background-color: #f9f9f9;
+  border-radius: 12rpx;
+  border: 2rpx solid #e8e8e8;
+}
+
+.remark-textarea {
+  width: 100%;
+  min-height: 160rpx;
+  padding: 20rpx;
+  background-color: #ffffff;
+  border-radius: 8rpx;
+  border: 2rpx solid #e0e0e0;
+  font-size: 28rpx;
+  color: #333333;
+  line-height: 1.6;
+  box-sizing: border-box;
+}
+
+.remark-textarea:focus {
+  border-color: #1890ff;
+}
+
+.remark-count {
+  display: block;
+  text-align: right;
+  font-size: 24rpx;
+  color: #999999;
+  margin-top: 12rpx;
+}
+
 /* 信息区域 */
 .info-section {
   padding-bottom: 20rpx;