Răsfoiți Sursa

Merge branch 'master' into 260902_redesign_fix

shish 2 zile în urmă
părinte
comite
36a46b9b18

+ 1 - 0
ghs/src/service/purchase-order/index.js

@@ -9,6 +9,7 @@ export class PurchaseOrderService extends BaseService {
 		});		
 	}
 
+	/** 采购入库列表:searchTime 筛开单时间 entryTime;sendSearchTime 筛发货时间 sendTime */
 	getOrderList(data){
 		return this.request({
 			url: '/list',

+ 71 - 11
ghs/src/views/in/list.vue

@@ -1,3 +1,7 @@
+<!--
+  供货商 PC 采购入库列表。
+  时间筛选:入库时间对应入库日 entryTime,发货时间对应 sendTime;导出区间与当前类型一致。
+-->
 <template>
   <div class="app-list-content">
     <x-crud class="liu-crud-wrap order-list-wrap" @load="onLoad">
@@ -71,7 +75,12 @@
       </template>
       <template #table-column-entryTime="{scope}">
         <div>
-          {{ scope.row.entryTime?scope.row.entryTime.substr(5,11):'' }}
+          {{ scope.row.entryTime && scope.row.entryTime.indexOf('0000-00-00') < 0 ? scope.row.entryTime.substr(5,11) : '' }}
+        </div>
+      </template>
+      <template #table-column-sendTime="{scope}">
+        <div>
+          {{ scope.row.sendTime && scope.row.sendTime.indexOf('0000-00-00') < 0 ? scope.row.sendTime.substr(5,11) : '-' }}
         </div>
       </template>
 
@@ -133,7 +142,7 @@
 			</template>
 
 			<template #slot-export-order>
-				<el-button type="primary" size="mini" style="margin-left:60px;" @click="exportData()">导出数据</el-button>
+				<el-button type="primary" size="mini" style="margin-left:60px;" @click="exportData()">导出{{ searchTimeTypeName }}</el-button>
 			</template>
 
       <template #slot-search-option="{scope}">
@@ -143,7 +152,10 @@
 					<el-option v-for="item in staffList" :key="item.id" :label="item.name" :value="item.id"></el-option>
 				</el-select>
 
-        <span style="font-size:22px;margin-left:20px;">入库时间:</span>
+        <el-button-group style="margin-left:20px;margin-right:8px;">
+          <el-button size="medium" :type="searchTimeType === 0 ? 'primary' : 'default'" @click="changeSearchTimeType(0)">入库时间</el-button>
+          <el-button size="medium" :type="searchTimeType === 2 ? 'primary' : 'default'" @click="changeSearchTimeType(2)">发货时间</el-button>
+        </el-button-group>
         <el-date-picker v-model="currentDateList" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" @change="getSearchDate" value-format="yyyy-MM-dd"
                 end-placeholder="结束日期" :picker-options="pickerOptions" size="medium">
         </el-date-picker>
@@ -205,6 +217,8 @@ export default {
       startTime:'',
       endTime:'',
       searchTime:'',
+      /** 时间筛选类型:0 开单 entryTime(原入库时间),2 发货 sendTime */
+      searchTimeType: 0,
       name:'',
       currentDateList:[],
       staffList:[],
@@ -239,6 +253,12 @@ export default {
       }
     };
   },
+  computed: {
+    /** 当前筛选时间类型文案,导出按钮和提示共用 */
+    searchTimeTypeName() {
+      return this.searchTimeType === 2 ? '发货时间' : '入库时间'
+    }
+  },
   created() {
     this.init();
   },
@@ -265,6 +285,36 @@ export default {
 
 	},
   methods: {
+    /**
+     * 组装采购列表查询参数。
+     * 开单筛 entryTime(searchTime);发货筛 sendTime(sendSearchTime);日期控件共用 start/end。
+     */
+    getListSearchParams(extra = {}) {
+      const params = {
+        status: this.tabIndex,
+        search: this.searchContent,
+        cgStaffId: this.currentCgStaffId,
+        searchTimeType: this.searchTimeType
+      }
+      if (this.searchTimeType === 2) {
+        params.sendSearchTime = this.searchTime
+        params.sendStartTime = this.startTime
+        params.sendEndTime = this.endTime
+      } else {
+        params.searchTime = this.searchTime
+        params.startTime = this.startTime
+        params.endTime = this.endTime
+      }
+      return Object.assign(params, extra)
+    },
+    /** 切换开单 / 发货时间筛选 */
+    changeSearchTimeType(type) {
+      if (this.searchTimeType === type) {
+        return
+      }
+      this.searchTimeType = type
+      this.app.refresh(this.getListSearchParams())
+    },
     doMore(cmd,data){
       if(cmd == 'cancelCurrentOrder'){
         this.cancelOrder(data)
@@ -291,7 +341,7 @@ export default {
     },
 		getCgStaff(e){
 			this.currentCgStaffId = e
-			this.app.refresh({ status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,cgStaffId:this.currentCgStaffId})
+			this.app.refresh(this.getListSearchParams())
 		},
 		changeSearch(){
       let that = this
@@ -299,11 +349,15 @@ export default {
         clearTimeout(this.T)
       }
       this.T = setTimeout(function(){
-        that.app.refresh({ status: that.tabIndex,searchTime:that.searchTime,startTime:that.startTime,endTime:that.endTime,search:that.searchContent,cgStaffId:that.currentCgStaffId})
+        that.app.refresh(that.getListSearchParams())
       },650)			
 		},
 		exportData(){
-			this.$service.purchaseOrder.getOrderList({status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,export:1,pageSize:9999999}).then(res => {
+			if (!this.searchTime) {
+				this.$message.warning('请选 ' + this.searchTimeTypeName + ' 和时间段')
+				return
+			}
+			this.$service.purchaseOrder.getOrderList(this.getListSearchParams({export:1,pageSize:9999999})).then(res => {
 				if(res.file){
 					window.location.href = res.file
 				}
@@ -313,7 +367,7 @@ export default {
 			this.$prompt('请输入货位号','提示',{confirmButtonText:'确定',cancelButtonText:'取消'}).then(({value}) => {
 				this.$service.purchaseOrder.modifySeatSn({ seatSn: value,id:info.id}).then(data => {
 					this.$notify({ title: '成功', message: '操作成功', type: 'success'})
-					this.app.refresh({ status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,cgStaffId:this.currentCgStaffId})
+					this.app.refresh(this.getListSearchParams())
 				})
 			})
 		},
@@ -400,7 +454,7 @@ export default {
 			this.$confirm('确认取消?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
         this.$service.purchaseOrder.cancelOrder({id:item.id}).then(data => {
           this.$notify({ title: '已取消', message: '操作成功', type: 'success'})
-          this.app.refresh({ status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,cgStaffId:this.currentCgStaffId})
+          this.app.refresh(this.getListSearchParams())
         })
 			})
     },
@@ -411,7 +465,7 @@ export default {
       })
     },
     changeTab(tab, e) {
-      this.app.refresh({ status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,cgStaffId:this.currentCgStaffId});
+      this.app.refresh(this.getListSearchParams());
     },
     getSearchDate(){
       if (this.$util.isEmpty(this.currentDateList)) {
@@ -423,7 +477,7 @@ export default {
         this.startTime = this.currentDateList[0]
         this.endTime = this.currentDateList[1]
       }
-      this.app.refresh({ status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,cgStaffId:this.currentCgStaffId})
+      this.app.refresh(this.getListSearchParams())
     },
     onLoad({ ctx, app }) {
       this.app = app;
@@ -534,6 +588,12 @@ export default {
                 width: 80,
                 emptyText: '-'
               },
+              {
+                prop: 'sendTime',
+                label: '发货时间',
+                align: 'center',
+                width: 120
+              },
               {
                 prop: 'entryTime',
                 label: '入库时间',
@@ -581,7 +641,7 @@ export default {
             let  asset  = await next(params)
           })
           .done();
-          app.refresh({ status: this.tabIndex,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,search:this.searchContent,cgStaffId:this.currentCgStaffId})
+          app.refresh(this.getListSearchParams())
     }
   }
 };

+ 276 - 5
ghsApp/src/admin/billing/forwardResult.vue

@@ -4,6 +4,7 @@
     1) 无原单退款、线下原单售后成功后:选手选「已线下转账」或「返充到客户余额」
     2) 已返充余额、挂账原路:绘制带小程序码的退款凭证海报
     3) 其它原路退回:说明退到哪里、怎么退
+    4) 退货并退款:海报/成功区下方展示花材,可报损、减库存、选售后原因(对齐 refundSuccess)
   谁用:freeRefundConfirm、refund.vue 售后、售后详情/列表补发。
 -->
 <template>
@@ -67,6 +68,75 @@
       </button>
     </appResult>
 
+    <!-- 退货并退款:海报/成功区后面展示花材,可报损、减库存(当天/跨天一致) -->
+    <view v-if="showWasteSection" class="waste-section">
+      <view class="waste-section__title">退回花材</view>
+      <block v-for="(item, index) in itemList" :key="index">
+        <view class="waste-item">
+          <text class="waste-item__name" @click="pageTo({url:'/admin/item/detail?id='+item.productId})">
+            {{item.name}} <text class="waste-item__back">已退回{{item.xhNum}}{{item.xhUnitName}}</text>
+          </text>
+          <view class="waste-item__stat" v-if="Number(item.xhWasteNum)>0">
+            <text class="waste-item__stat-text">已报损{{item.xhWasteNum}}{{item.xhUnitName}}</text>
+          </view>
+          <view class="waste-item__stat" v-if="Number(item.xhReduceNum)>0">
+            <text class="waste-item__stat-text">已减库存{{item.xhReduceNum}}{{item.xhUnitName}}</text>
+          </view>
+          <view class="waste-item__option" v-if="item.refundOptionId!=0">{{ item.refundOptionName }}</view>
+          <view class="waste-item__actions">
+            <button class="admin-button-com middle waste-btn" @click="selOption(item)">售后原因</button>
+            <button class="admin-button-com middle waste-btn" @click="beginWastage(item)" v-if="item.xhUnitType == 0">报损</button>
+            <button class="admin-button-com middle waste-btn" @click="pageTo({url:'/admin/item/detail?id='+item.productId})" v-else>去损报</button>
+            <button class="admin-button-com middle default waste-btn" @click="beginReduce(item)">减库存</button>
+          </view>
+        </view>
+      </block>
+    </view>
+
+    <modal-module :show="wastageShow" @click="confirmWastage" :maskClosable="true" title="报损数量" padding="30rpx 30rpx" >
+      <template v-slot:content>
+        <div class="app-modal-input-wrap">
+          <div class="inp-list-line">
+            <div class="line-input">
+              <input type="number" style="width:61.8%;text-align:center;" v-model="wastageNum" :adjust-position="false" class="inp-input" @focus="wastageNum=''" />
+            </div>
+          </div>
+        </div>
+      </template>
+    </modal-module>
+
+    <modal-module :show="reduceShow" @click="confirmReduce" :maskClosable="true" title="减少数量" padding="30rpx 30rpx" >
+      <template v-slot:content>
+        <div class="app-modal-input-wrap">
+          <div class="inp-list-line">
+            <div class="line-input">
+              <input type="number" style="width:61.8%;text-align:center;" v-model="reduceNum" :adjust-position="false" class="inp-input" @focus="reduceNum=''" />
+            </div>
+          </div>
+        </div>
+      </template>
+    </modal-module>
+
+    <uni-popup ref="optionRef" background-color="#fff" type="center" :animation="false" class="class-popup-style">
+      <view class="option-popup">
+        <view class="option-popup__title">请选择:</view>
+        <view class="option-popup__list">
+          <view v-for="(item, index) in refundOption" :key="index" class="option-popup__item">
+            <button
+              class="admin-button-com staff-btn"
+              @click.stop="getOption(item)"
+              :class="{'selected': currentInfo.refundOptionId === item.id}"
+            >
+              {{ item.name }}
+            </button>
+          </view>
+        </view>
+        <view class="option-popup__cancel">
+          <button class="admin-button-com big blue" style="width:210upx;" @click="cancelOption()">取消选择</button>
+        </view>
+      </view>
+    </uni-popup>
+
     <!-- 离屏 canvas,用于绘制凭证海报 -->
     <canvas
       canvas-id="forwardPosterCanvas"
@@ -79,9 +149,10 @@
 <script>
 import dayjs from 'dayjs'
 import appResult from '@/components/app-result'
+import ModalModule from '@/components/plugin/modal'
 import { getGatheringMiniCode } from '@/api/custom'
 import { getUserDet } from '@/api/member'
-import { markHasReturn, returnBalance } from '@/api/refund'
+import { markHasReturn, returnBalance, refundDetail, refundWaste, refundReduce, changeRefundOption } from '@/api/refund'
 
 /** 本地缓存键:跳转本页前写入,onLoad 与 URL 参数合并 */
 const STORAGE_KEY = 'forwardResultPayload'
@@ -89,7 +160,8 @@ const STORAGE_KEY = 'forwardResultPayload'
 export default {
   name: 'forwardResult',
   components: {
-    appResult
+    appResult,
+    ModalModule
   },
   data() {
     return {
@@ -114,7 +186,17 @@ export default {
       canvasW: 360,
       canvasH: 640,
       // 当天=1 / 跨天=0,挂账海报文案区分减欠款 vs 加余额
-      sameDay: 1
+      sameDay: 1,
+      // 1=退货并退款,需展示报损花材区
+      refundType: 0,
+      itemList: [],
+      refundOption: [],
+      currentInfo: {},
+      wastageShow: false,
+      wastageNum: 0,
+      refundItemId: 0,
+      reduceShow: false,
+      reduceNum: 0
     }
   },
   computed: {
@@ -134,6 +216,10 @@ export default {
     showPoster() {
       return Number(this.returnBalance) === 1 || this.isBalanceOrDebtOriginReturn
     },
+    /** 退货并退款且有花材明细时,在海报/成功区后展示报损操作 */
+    showWasteSection() {
+      return Number(this.refundType) === 1 && !this.$util.isEmpty(this.itemList)
+    },
     posterPageTitle() {
       if (this.isBalanceOrDebtOriginReturn) return '原路退回成功'
       return '退款成功'
@@ -259,11 +345,14 @@ export default {
         this.needFundAction = 1
       }
       this.sameDay = payload.sameDay != null ? Number(payload.sameDay) : 1
+      this.refundType = payload.refundType != null ? Number(payload.refundType) : 0
 
       // 返充或挂账原路:生成带小程序码的凭证海报
       if (this.showPoster && this.customId > 0) {
         this.generatePoster()
       }
+      // 有售后单 id 则拉详情:确认退货并退款后展示报损花材
+      this.loadWasteItems()
     },
 
     /** 同步缓存,避免返回再进丢状态 */
@@ -283,7 +372,104 @@ export default {
         couldReturn: this.couldReturn,
         returnBalance: this.returnBalance,
         needFundAction: this.needFundAction,
-        sameDay: this.sameDay
+        sameDay: this.sameDay,
+        refundType: this.refundType
+      })
+    },
+
+    /**
+     * 拉取售后明细:退货并退款时填充花材列表,供报损/减库存
+     */
+    loadWasteItems() {
+      if (!this.forwardId) {
+        return
+      }
+      refundDetail({ id: this.forwardId }).then(res => {
+        if (res.code != 1 || !res.data) {
+          return
+        }
+        const info = res.data.info || {}
+        // 以详情为准,避免入口漏传 refundType
+        if (info.refundType != null) {
+          this.refundType = Number(info.refundType)
+        }
+        if (Number(this.refundType) === 1) {
+          this.itemList = res.data.itemList || []
+          this.refundOption = res.data.itemRefundOption || []
+        } else {
+          this.itemList = []
+        }
+        this.persistPayload()
+      })
+    },
+
+    beginWastage(item) {
+      this.wastageShow = true
+      this.wastageNum = item.xhNum
+      this.refundItemId = item.id
+    },
+    hideWaste() {
+      this.wastageShow = false
+      this.wastageNum = 0
+    },
+    confirmWastage(val) {
+      if (val.index === 0) {
+        this.hideWaste()
+        return false
+      }
+      refundWaste({
+        wasteNum: this.wastageNum,
+        remark: '退货时报损',
+        refundItemId: this.refundItemId
+      }).then(res => {
+        if (res.code == 1) {
+          this.hideWaste()
+          this.loadWasteItems()
+        }
+      })
+    },
+    beginReduce(item) {
+      this.reduceShow = true
+      this.reduceNum = item.xhNum
+      this.refundItemId = item.id
+    },
+    hideReduce() {
+      this.reduceShow = false
+      this.reduceNum = 0
+    },
+    confirmReduce(val) {
+      if (val.index === 0) {
+        this.hideReduce()
+        return false
+      }
+      refundReduce({
+        reduceNum: this.reduceNum,
+        refundItemId: this.refundItemId
+      }).then(res => {
+        if (res.code == 1) {
+          this.hideReduce()
+          this.loadWasteItems()
+        }
+      })
+    },
+    selOption(info) {
+      this.currentInfo = info
+      this.$refs.optionRef.open('center')
+    },
+    cancelOption() {
+      this.$refs.optionRef.close()
+    },
+    getOption(item) {
+      changeRefundOption({
+        id: this.forwardId,
+        sonId: this.currentInfo.id,
+        optionId: item.id
+      }).then(res => {
+        if (res.code == 1) {
+          this.$msg('修改成功')
+          this.loadWasteItems()
+          this.$refs.optionRef.close()
+        }
       })
     },
 
@@ -617,7 +803,7 @@ export default {
 }
 
 .poster-img {
-  width: 480upx;
+  width: 450upx;
   max-width: 100%;
   border-radius: 12upx;
   box-shadow: 0 8upx 24upx rgba(0, 0, 0, 0.12);
@@ -665,4 +851,89 @@ export default {
   top: -9999px;
   z-index: -1;
 }
+
+.waste-section {
+  margin: 20upx 24upx 40upx;
+  padding: 24upx 20upx 10upx;
+  background: #fff;
+  border-radius: 16upx;
+}
+.waste-section__title {
+  margin-bottom: 20upx;
+  font-size: 30upx;
+  font-weight: bold;
+  color: #333;
+  text-align: center;
+}
+.waste-item {
+  margin-bottom: 28upx;
+  padding-bottom: 20upx;
+  border-bottom: 1upx solid #f0f0f0;
+  text-align: center;
+}
+.waste-item:last-child {
+  border-bottom: 0;
+}
+.waste-item__name {
+  font-size: 32upx;
+  color: #333;
+}
+.waste-item__back {
+  margin-left: 8upx;
+  color: #3385ff;
+}
+.waste-item__stat {
+  margin-top: 10upx;
+}
+.waste-item__stat-text {
+  margin-left: 12upx;
+  color: red;
+  font-size: 30upx;
+  font-weight: bold;
+}
+.waste-item__option {
+  margin-top: 10upx;
+  color: #ad760d;
+  font-size: 30upx;
+}
+.waste-item__actions {
+  width: 100%;
+  margin-top: 16upx;
+}
+.waste-btn {
+  width: 150upx;
+  margin-left: 20upx;
+  margin-bottom: 12upx;
+}
+.waste-btn:first-child {
+  margin-left: 0;
+  width: 160upx;
+}
+.option-popup {
+  max-height: 90vh;
+  overflow: scroll;
+}
+.option-popup__title {
+  margin-left: 30upx;
+  margin-top: 19upx;
+  font-size: 27upx;
+  font-weight: bold;
+}
+.option-popup__list {
+  display: flex;
+  padding: 20upx;
+  justify-content: flex-start;
+  align-items: center;
+  flex-wrap: wrap;
+  max-height: 100vh;
+  overflow: auto;
+}
+.option-popup__item {
+  margin-bottom: 20upx;
+  margin-left: 3upx;
+}
+.option-popup__cancel {
+  text-align: center;
+  padding: 10upx 0;
+}
 </style>

+ 26 - 1
ghsApp/src/pagesArrears/details.vue

@@ -56,6 +56,7 @@
 	<!-- App 端 overflow 滚动层会盖住嵌在顶栏里的日历,筛选弹层必须放在滚动容器外 -->
 	<view class="date-select-layer" :class="{ 'is-open': dateOverlayVisible }">
 		<view class="date-select-pair">
+			<text class="date-reset-text" @click="resetDateFilters">重置</text>
 			<DateSelect
 				ref="sendDateSelect"
 				class="bar"
@@ -237,6 +238,23 @@ export default {
 				uni.stopPullDownRefresh()
 			})
 		},
+		// 清空发货/开单两套时间筛选,列表回到未按时段过滤的状态
+		resetDateFilters() {
+			this.searchTime = ''
+			this.startTime = ''
+			this.endTime = ''
+			this.sendSearchTime = ''
+			this.sendStartTime = ''
+			this.sendEndTime = ''
+			if (this.$refs.billDateSelect && this.$refs.billDateSelect.reset) {
+				this.$refs.billDateSelect.reset()
+			}
+			if (this.$refs.sendDateSelect && this.$refs.sendDateSelect.reset) {
+				this.$refs.sendDateSelect.reset()
+			}
+			this.resetDebtListPage()
+			this.initData()
+		},
 		reloadDebtListPage() {
 			return this.initData()
 		},
@@ -366,7 +384,7 @@ export default {
 				color: #999999;
 			}
 			.date-select-hold {
-				min-width: 360upx;
+				min-width: 440upx;
 				height: 40upx;
 			}
 			.info-item {
@@ -528,4 +546,11 @@ export default {
 .date-select-gap {
 	margin-left: 48upx;
 }
+.date-reset-text {
+	margin-right: 16upx;
+	font-size: 26upx;
+	color: #3385FF;
+	flex-shrink: 0;
+	pointer-events: auto;
+}
 </style>

+ 28 - 5
ghsApp/src/pagesGys/details.vue

@@ -4,15 +4,15 @@
 		<view class="top-view">
 			<view class="top-row">
 				<view class="info-item">
-					<image class="logo" :src="ghsInfo.avatar"/>
 					<text class="name">
 						{{ ghsInfo.name}}
 					</text>
 				</view>
-				<!-- 发货时间在左、开单时间在右;不改顶栏结构,只并排放两个筛选 -->
+				<!-- 重置靠发货时间左边;发货时间在左、入库时间在右 -->
 				<view class="date-filter">
-					<DateSelect class="bar" top="0" @selectDateFn="selectSendDateFn" defaultShowName="发货时间" />
-					<DateSelect class="bar date-filter-gap" top="0" @selectDateFn="selectDateFn" defaultShowName="开单时间" />
+					<text class="date-reset-text" @click="resetDateFilters">重置</text>
+					<DateSelect ref="sendDateSelect" class="bar" top="0" @selectDateFn="selectSendDateFn" defaultShowName="发货时间" />
+					<DateSelect ref="billDateSelect" class="bar date-filter-gap" top="0" @selectDateFn="selectDateFn" defaultShowName="入库时间" />
 				</view>
 			</view>
 		</view>
@@ -203,7 +203,7 @@ export default {
 				uni.stopPullDownRefresh()
 			})
 		},
-		// 发货时间筛 sendTime,可与开单时间(entryTime)同时生效
+		// 发货时间筛 sendTime,可与入库时间(entryTime)同时生效
 		selectSendDateFn(val){
 			this.sendSearchTime = val.searchTime
 			this.sendStartTime = val.startTime
@@ -213,6 +213,23 @@ export default {
 				uni.stopPullDownRefresh()
 			})
 		},
+		// 清空发货/开单两套时间筛选,列表回到未按时段过滤的状态
+		resetDateFilters() {
+			this.searchTime = ''
+			this.startTime = ''
+			this.endTime = ''
+			this.sendSearchTime = ''
+			this.sendStartTime = ''
+			this.sendEndTime = ''
+			if (this.$refs.billDateSelect && this.$refs.billDateSelect.reset) {
+				this.$refs.billDateSelect.reset()
+			}
+			if (this.$refs.sendDateSelect && this.$refs.sendDateSelect.reset) {
+				this.$refs.sendDateSelect.reset()
+			}
+			this.resetDebtListPage()
+			this.initData()
+		},
 		clearSelectedOrder(){
 			if (this.$util.isEmpty(this.selectList)) {
 				this.$msg("请选择订单");
@@ -389,6 +406,12 @@ export default {
 			.date-filter-gap {
 				margin-left: 24upx;
 			}
+			.date-reset-text {
+				margin-right: 16upx;
+				font-size: 26upx;
+				color: #3385FF;
+				flex-shrink: 0;
+			}
 		}
 	}
 	.shop-list {

+ 21 - 13
ghsApp/src/pagesOrder/detail.vue

@@ -308,16 +308,12 @@
 							<view class="item-info">
 								<view class="info-line">
 									<text class="item-name" @click="pageTo({url:'/admin/item/detail?id='+s.productId})">{{ s.name }}</text>
-									<text class="item-price">
-										<text class="unit"></text>
-										<text class="price">
-											<text v-if="detailInfo.stockChange == 1">
-												<text style="font-size:34upx;margin-right:6upx;">{{parseFloat(s.xhNum)}}{{s.xhUnitName}}</text>* ¥{{parseFloat(s.xhUnitPrice)}}
-											</text>
-											<text v-else>-</text>
-											<text></text>
-										</text>
+									<!-- 扎数与单价同一行展示,避免右侧栏过窄时挤成两行 -->
+									<text class="item-price" v-if="detailInfo.stockChange == 1">
+										<text class="item-qty">{{parseFloat(s.xhNum)}}{{s.xhUnitName}}</text>
+										<text class="item-unit-price">x ¥{{parseFloat(s.xhUnitPrice)}}</text>
 									</text>
+									<text class="item-price" v-else>-</text>
 								</view>
 								<view class="info-line">
 									<text class="item-type"></text>
@@ -2139,22 +2135,33 @@ export default {
 						margin-bottom: 20upx;
 						display: flex;
 						justify-content: space-between;
-						align-items: flex-end;
+						align-items: center;
 						.item-name {
+							flex: 1;
+							min-width: 0;
+							margin-right: 16upx;
 							color: black;
 							font-size:32upx;
 							font-weight: 700;
 							overflow: hidden;
 							white-space: nowrap;
 							text-overflow: ellipsis;
-							width:360upx;
 						}
 						.item-price {
+							flex-shrink: 0;
+							max-width: 46%;
 							color:black;
 							font-weight:bold;
 							font-size: 28upx;
-							.price {
-								font-size: 27upx;
+							white-space: nowrap;
+							text-align: right;
+							.item-qty {
+								font-size: 34upx;
+								margin-right: 4upx;
+							}
+							.item-unit-price {
+								font-size: 26upx;
+								font-weight: 600;
 							}
 						}
 						.item-type {
@@ -2162,6 +2169,7 @@ export default {
 							font-size: 24upx;
 						}
 						.item-count {
+							flex-shrink: 0;
 							color: #666;
 							font-size: 28upx;
 							color:black;

+ 3 - 1
ghsApp/src/pagesOrder/refund.vue

@@ -436,7 +436,9 @@ export default {
 							couldReturn: data.couldReturn != null ? data.couldReturn : 1,
 							returnBalance: data.returnBalance || 0,
 							needFundAction: needFund ? 1 : 0,
-							sameDay: data.sameDay != null ? data.sameDay : (refundParams.sameDay != null ? refundParams.sameDay : 1)
+							sameDay: data.sameDay != null ? data.sameDay : (refundParams.sameDay != null ? refundParams.sameDay : 1),
+							// 退货并退款:结果页海报后展示报损/减库存花材
+							refundType: data.refundType != null ? data.refundType : that.refundType
 						}
 						uni.setStorageSync('forwardResultPayload', payload)
 						that.$util.pageTo({

+ 2 - 0
ghsApp/src/pagesOrder/refundDetail.vue

@@ -422,6 +422,8 @@ export default {
 				returnBalance: info.returnBalance || 0,
 				needFundAction: this.canFundAction ? 1 : 0,
 				sameDay: info.sameDay != null ? info.sameDay : 1,
+				// 退货并退款时结果页可继续报损/减库存
+				refundType: info.refundType != null ? info.refundType : this.refundType,
 				mode: mode || ''
 			}
 		},