index.vue 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918
  1. <template>
  2. <div class="app-container">
  3. <el-page-header @back="goBack" content="订单详情"></el-page-header>
  4. <div class="order-main">
  5. <el-row style="padding: 15px 15px 10px">
  6. <el-col :span="24">
  7. <div class="order-main-title">
  8. <span>订单编号:{{ orderDetail.orderId }}</span>
  9. <span>下单时间:{{ orderDetail.createTime }}</span>
  10. <span>商户:{{ orderDetail.companyWechatName || '无' }}</span>
  11. <!-- <span>网点:{{ orderDetail.websitName || '无' }}</span> -->
  12. <el-tag v-if="orderDetail.isOld == 'YES'">以旧换新</el-tag>
  13. <div class="fr">
  14. <el-link type="primary" :underline="false" @click="showDialog('remark')">订单备注</el-link>
  15. </div>
  16. </div>
  17. </el-col>
  18. </el-row>
  19. <div style="width: 100%; padding: 10px 15px 15px 15px">
  20. <el-row>
  21. <el-col :span="10">
  22. <div style="display: flex">
  23. <div>
  24. <div class="order-main-status">
  25. <span>{{ orderDetail.orderStatus | ORDER_CURRENT_STATUS_FILTER }}</span>
  26. </div>
  27. <div class="order-main-opt-btn">
  28. <template v-if="orderDetail.orderStatus === 'NOPAY'">
  29. <el-popconfirm title="确定收款吗?" @confirm="confirmOrder">
  30. <el-button slot="reference" size="small">确认收款</el-button>
  31. </el-popconfirm>
  32. <el-button size="small" @click="showDialog('price')" style="margin-left: 10px">修改价格</el-button>
  33. <el-popconfirm title="确定取消订单吗?" @confirm="cancelOrder" style="margin-left: 10px">
  34. <el-button slot="reference" size="small" type="danger">取消订单</el-button>
  35. </el-popconfirm>
  36. </template>
  37. <template v-if="orderDetail.orderStatus === 'DFH'">
  38. <el-button size="small" type="primary" @click="showDialog('send')">发货</el-button>
  39. <el-popconfirm title="确定取消订单吗?" @confirm="cancelOrder" style="margin-left: 10px">
  40. <el-button slot="reference" size="small" type="danger">取消订单</el-button>
  41. </el-popconfirm>
  42. </template>
  43. <template v-if="orderDetail.orderStatus === 'YFH' || orderDetail.orderStatus === 'OVER'">
  44. <el-button size="small" @click="showDialog('query')">查看物流</el-button>
  45. </template>
  46. </div>
  47. </div>
  48. <el-table
  49. class="specTable"
  50. style="margin-left: 30px"
  51. height="120px"
  52. :data="printList"
  53. element-loading-text="Loading"
  54. border
  55. highlight-current-row
  56. stripe
  57. >
  58. <el-table-column
  59. align="center"
  60. label="打印人"
  61. prop="createBy"
  62. min-width="120"
  63. show-overflow-tooltip
  64. ></el-table-column>
  65. <el-table-column align="center" label="打印时间" prop="createTime" width="160"></el-table-column>
  66. </el-table>
  67. </div>
  68. </el-col>
  69. <el-col :span="14" style="padding-top: 10px">
  70. <el-steps :active="orderDetail.orderStatus != 'CLOSE' ? curOrderStatus : -1" align-center>
  71. <el-step title="买家下单" :description="orderDetail.createTime"></el-step>
  72. <el-step title="审核通过" :description="orderDetail.payTime ? orderDetail.payTime : ''"></el-step>
  73. <el-step title="商家发货" :description="orderDetail.deliverTime ? orderDetail.deliverTime : ''"></el-step>
  74. <el-step title="交易成功" :description="orderDetail.overTime ? orderDetail.overTime : ''"></el-step>
  75. </el-steps>
  76. </el-col>
  77. </el-row>
  78. </div>
  79. </div>
  80. <div class="order-receive-info">
  81. <el-row :gutter="30">
  82. <el-col :xs="24" :sm="12" :lg="12">
  83. <div class="main-detail">
  84. <h3>订单信息</h3>
  85. <div class="item">
  86. <div class="label">收货人信息:</div>
  87. <div class="value">{{ orderDetail.receUserName }} ({{ orderDetail.recePhone }})</div>
  88. </div>
  89. <div class="item">
  90. <div class="label">收货人地址:</div>
  91. <div class="value">
  92. {{
  93. orderDetail.province +
  94. orderDetail.city +
  95. orderDetail.area +
  96. orderDetail.street +
  97. orderDetail.receAddress +
  98. (orderDetail.houseNo || '')
  99. }}
  100. </div>
  101. </div>
  102. <div class="item">
  103. <div class="label">销售员信息:</div>
  104. <div class="value">{{ orderDetail.workerName }} ({{ orderDetail.workerPhone }})</div>
  105. </div>
  106. <div class="item">
  107. <div class="label">业务员信息:</div>
  108. <div class="value">{{ orderDetail.saleName }} ({{ orderDetail.saleMobile }})</div>
  109. </div>
  110. <div class="item">
  111. <div class="label">下单渠道:</div>
  112. <div class="value">{{ orderDetail.source }}</div>
  113. </div>
  114. <div class="item">
  115. <div class="label">支付方式:</div>
  116. <div class="value">
  117. {{ orderDetail.payType }}--{{
  118. { NO_PAID: '待收款', PART_PAID: '部分收款', PAID: '完成收款' }[orderDetail.payStatus]
  119. }}
  120. </div>
  121. </div>
  122. <div class="item">
  123. <div class="label">是否开票:</div>
  124. <div class="value">{{ orderDetail.tax ? '是' : '否' }}</div>
  125. </div>
  126. <div class="item" v-if="orderDetail.dispatchType">
  127. <div class="label">工单派单方式:</div>
  128. <div class="value">{{ orderDetail.dispatchType }}</div>
  129. </div>
  130. </div>
  131. </el-col>
  132. <el-col
  133. :xs="24"
  134. :sm="12"
  135. :lg="12"
  136. v-if="orderDetail.orderStatus === 'YFH' || orderDetail.orderStatus === 'OVER'"
  137. >
  138. <div class="main-detail">
  139. <h3>物流信息</h3>
  140. <div class="item">
  141. <div class="label">快递单号:</div>
  142. <div class="value">{{ orderDetail.logisticsNo }}</div>
  143. </div>
  144. <div class="item">
  145. <div class="label">快递公司:</div>
  146. <div class="value">{{ orderDetail.companyName }}</div>
  147. </div>
  148. <div class="item">
  149. <div class="label">货件仓储:</div>
  150. <div class="value">{{ orderDetail.storageName }}</div>
  151. </div>
  152. </div>
  153. </el-col>
  154. </el-row>
  155. </div>
  156. <div
  157. v-if="orderDetail.orderOldProductDTOList && orderDetail.orderOldProductDTOList.length > 0"
  158. style="margin-bottom: 30px"
  159. >
  160. <h3>旧机信息</h3>
  161. <div class="order-detail">
  162. <!-- 回收 -->
  163. <el-table :data="orderDetail.orderOldProductDTOList" style="width: 100%" size="small" border>
  164. <el-table-column prop="mainName" label="大类" align="center"></el-table-column>
  165. <el-table-column prop="smallName" label="小类" align="center"></el-table-column>
  166. <el-table-column prop="specName" label="型号" align="center"></el-table-column>
  167. <el-table-column prop="itemList" label="属性" align="center">
  168. <template slot-scope="scope">
  169. {{ scope.row.itemList.map(o => o.dictName).join('、') }}
  170. </template>
  171. </el-table-column>
  172. <el-table-column prop="unit" label="单位" align="center">
  173. <template>台</template>
  174. </el-table-column>
  175. <el-table-column prop="num" label="数量" align="center"></el-table-column>
  176. <el-table-column prop="payAmount" label="旧机金额" align="center"></el-table-column>
  177. <el-table-column prop="yjhxDkFlag" label="支付方式" align="center">
  178. <template slot-scope="scope">
  179. {{ { 1: '线上支付抵扣订单货款', 2: '仅线上展示旧机价值' }[scope.row.yjhxDkFlag] }}
  180. </template>
  181. </el-table-column>
  182. </el-table>
  183. </div>
  184. </div>
  185. <div v-if="compensateList.length > 0" style="margin-bottom: 30px">
  186. <h3>理赔信息</h3>
  187. <div class="order-detail">
  188. <!-- 理赔表格 -->
  189. <el-table :data="compensateList" style="width: 100%" size="small" border>
  190. <el-table-column prop="goodsName" label="理赔商品" align="center"></el-table-column>
  191. <el-table-column prop="num" label="理赔数量" align="center"></el-table-column>
  192. <el-table-column prop="createTime" label="理赔时间" align="center"></el-table-column>
  193. <el-table-column prop="refundAmount" label="理赔金额" align="center"></el-table-column>
  194. <el-table-column prop="operatorUser" label="操作人" align="center"></el-table-column>
  195. <el-table-column prop="remark" label="备注" align="center"></el-table-column>
  196. </el-table>
  197. </div>
  198. </div>
  199. <h3>商品信息</h3>
  200. <div class="order-detail" style="margin-bottom: 30px">
  201. <!-- 订单表格 -->
  202. <el-table :data="orderDetail.orderDetails" style="width: 100%" border>
  203. <el-table-column label="商品信息" min-width="200">
  204. <template slot-scope="scope">
  205. <el-row>
  206. <el-col :span="6">
  207. <el-image style="width: 40px; height: 40px" :src="$showImgUrl(scope.row.imgUrl)">
  208. <div slot="error" class="image-slot">
  209. <i class="el-icon-picture-outline"></i>
  210. </div>
  211. </el-image>
  212. </el-col>
  213. <el-col :span="18">
  214. <div>
  215. <el-tag
  216. type="danger"
  217. effect="plain"
  218. size="mini"
  219. style="margin-right: 4px"
  220. v-if="scope.row.promotionFullPieceId"
  221. >满件打折</el-tag
  222. >{{ scope.row.goodsName }}
  223. </div>
  224. </el-col>
  225. </el-row>
  226. </template>
  227. </el-table-column>
  228. <el-table-column prop="goodsSpecValue" label="规格" align="center">
  229. <template slot-scope="scope"> {{ scope.row.goodsSpecName }}{{ scope.row.goodsSpecValue }} </template>
  230. </el-table-column>
  231. <el-table-column prop="price" label="单价" align="center"></el-table-column>
  232. <el-table-column prop="num" label="数量" align="center"></el-table-column>
  233. <el-table-column prop="sendStockNum" label="已发货数量" min-width="100" align="center"></el-table-column>
  234. <el-table-column prop="shareAmount" label="分销金额" align="center">
  235. <template slot-scope="scope">
  236. {{ orderDetail.workerId || orderDetail.promotionGroupUserId ? scope.row.shareAmount : '0' }}
  237. </template>
  238. </el-table-column>
  239. <el-table-column prop="discountAmount" label="优惠金额" align="center"></el-table-column>
  240. <!-- <el-table-column prop="zkAmount" label="折扣优惠" align="center"></el-table-column> -->
  241. <el-table-column prop="applyAmount" label="优惠价格申请" align="center" min-width="110"></el-table-column>
  242. <el-table-column prop="profitAmount" label="实际销售金额" align="center" min-width="110">
  243. <template slot-scope="scope">
  244. {{
  245. orderDetail.workerId || orderDetail.promotionGroupUserId ? scope.row.profitAmount : scope.row.payAmount
  246. }}
  247. </template>
  248. </el-table-column>
  249. <el-table-column prop="payAmount" label="商品总金额" align="center" min-width="100"></el-table-column>
  250. <el-table-column prop="freight" label="运费" align="center"></el-table-column>
  251. <el-table-column prop="userRefundNum" label="用户维权数量" align="center" min-width="110"></el-table-column>
  252. <el-table-column prop="userRefundAmount" label="用户维权金额" align="center" min-width="110"></el-table-column>
  253. <el-table-column prop="refundNum" label="退款数量" align="center"></el-table-column>
  254. <el-table-column prop="refundAmount" label="退款金额" align="center"></el-table-column>
  255. <el-table-column prop="refundBy" label="退款人" align="center"></el-table-column>
  256. <el-table-column prop="refundTime" label="退款时间" align="center" min-width="160"></el-table-column>
  257. <el-table-column
  258. label="操作"
  259. align="center"
  260. width="160"
  261. v-if="orderDetail.orderStatus != 'CLOSE' && orderDetail.payTypeId == 'WECHAT'"
  262. >
  263. <template slot-scope="scope">
  264. <!-- <el-button v-if="!~['TIMEOUT', 'CLOSE'].indexOf(orderDetail.orderStatus)" size="mini" type="primary"
  265. @click="handleRefund(scope.row)"
  266. :disabled="!orderDetail.refundAble || scope.row.refundNum >= scope.row.num">退款</el-button> -->
  267. <!-- <el-button v-if="!~['TIMEOUT'].indexOf(orderDetail.orderStatus)" size="mini"
  268. @click="handleCompensate(scope.row)">理赔</el-button> -->
  269. </template>
  270. </el-table-column>
  271. </el-table>
  272. </div>
  273. <div v-if="deliverList.length > 0" style="margin-bottom: 30px">
  274. <h3>发货记录</h3>
  275. <div class="order-detail">
  276. <!-- 发货记录 -->
  277. <el-table :data="deliverList" style="width: 100%" size="small" border>
  278. <el-table-column prop="deliveryId" align="center" label="发货单号" width="160"></el-table-column>
  279. <el-table-column prop="status" align="center" label="状态">
  280. <template slot-scope="scope">
  281. {{
  282. { SEND: '已发货', REFUND: '已退货', PART_REFUND: '部分退货', REFUND_PRICE: '仅退款' }[scope.row.status]
  283. }}
  284. </template>
  285. </el-table-column>
  286. <el-table-column prop="sendNum" align="center" label="发货数量"></el-table-column>
  287. <el-table-column prop="refundNum" align="center" label="退货数量"></el-table-column>
  288. <el-table-column prop="num" align="center" label="订单数量"></el-table-column>
  289. <el-table-column prop="sendInsideCodeQty" align="center" label="内机数量"></el-table-column>
  290. <el-table-column prop="sendOutCodeQty" align="center" label="外机数量"></el-table-column>
  291. <el-table-column prop="sendPartsCodeQty" align="center" label="配件数量"></el-table-column>
  292. <el-table-column prop="storageStockName" align="center" label="发货仓库" width="100"></el-table-column>
  293. <el-table-column prop="pickType" align="center" label="发货方式">
  294. <template slot-scope="scope">
  295. {{ scope.row.pickType == 'YES' ? '自提' : '快递物流' }}
  296. </template>
  297. </el-table-column>
  298. <el-table-column prop="logisticsNo" align="center" label="快递单号" width="100"></el-table-column>
  299. <el-table-column prop="companyName" align="center" label="物流公司" width="100"></el-table-column>
  300. <el-table-column prop="pickName" align="center" label="提货人"></el-table-column>
  301. <el-table-column prop="pickPhone" align="center" label="提货人电话" width="110"></el-table-column>
  302. <el-table-column align="center" prop="deliverTime" label="发货时间" min-width="160"></el-table-column>
  303. <el-table-column prop="createBy" align="center" label="操作人" width="140"></el-table-column>
  304. <el-table-column prop="createTime" align="center" label="操作时间" width="160"></el-table-column>
  305. <el-table-column align="center" label="操作" fixed="right">
  306. <template slot-scope="scope">
  307. <!-- <el-button v-if="!~['TIMEOUT', 'CLOSE'].indexOf(orderDetail.orderStatus)" size="mini" type="text"
  308. @click="handleRefund(scope.row)" :disabled="!orderDetail.refundAble || scope.row.refundNum >= scope.row.num">退款
  309. </el-button> -->
  310. <el-button type="text" size="small" @click="toDeliverDetail(scope.row.deliveryId)">详情</el-button>
  311. <el-button
  312. type="text"
  313. size="small"
  314. @click="returnOrder(scope.row.deliveryId)"
  315. v-if="!~['TIMEOUT', 'CLOSE'].indexOf(orderDetail.orderStatus) && scope.row.status == 'SEND'"
  316. >发起退货</el-button
  317. >
  318. </template>
  319. </el-table-column>
  320. </el-table>
  321. </div>
  322. </div>
  323. <div class="order-detail">
  324. <div class="order-amount-info">
  325. <el-row>
  326. <el-col :span="19">
  327. <div style="width: 1px; height: 1px"></div>
  328. </el-col>
  329. <el-col :span="5">
  330. <div style="padding-bottom: 10px">商品总价:¥ {{ orderDetail.totalAmount }}</div>
  331. <div style="padding-bottom: 10px">运费:¥ {{ orderDetail.freight }}</div>
  332. <div style="padding-bottom: 10px" v-if="orderDetail.discountAmount">
  333. 优惠:¥ {{ orderDetail.discountAmount }}
  334. <span v-if="orderDetail.exchangeCode">(优惠码:{{ orderDetail.exchangeCode }})</span>
  335. <span v-if="orderDetail.promotionDiscountRate">({{ orderDetail.promotionDiscountRate * 10 }}折)</span>
  336. <span v-if="orderDetail.promotionFullPieceId">({{ orderDetail.promotionFullPieceRemark }})</span>
  337. </div>
  338. <div style="font-size: 14px">
  339. <span style="padding-right: 15px">实际收款</span
  340. ><span style="color: red; font-size: 18px">¥ {{ orderDetail.payAmount }}</span>
  341. </div>
  342. </el-col>
  343. </el-row>
  344. </div>
  345. </div>
  346. <div class="order-evaluate-info" v-if="evaluateDetail">
  347. <div class="title">
  348. <div class="left">
  349. 评价信息<span>{{ evaluateDetail.createTime }}</span>
  350. </div>
  351. <div class="right">
  352. <span>是否客户端展示</span>
  353. <el-switch v-model="evaluateDetail.isShow" @change="changeShow"></el-switch>
  354. </div>
  355. </div>
  356. <div class="main">
  357. <div class="rate-list">
  358. <div style="display: flex; align-items: center; margin-bottom: 5px">
  359. 商品质量:<el-rate :value="evaluateDetail.commentGoods" disabled disabled-void-color="#DDDDDD"></el-rate>
  360. </div>
  361. <div style="display: flex; align-items: center; margin-bottom: 5px">
  362. 服务质量:<el-rate :value="evaluateDetail.commentService" disabled disabled-void-color="#DDDDDD"></el-rate>
  363. </div>
  364. <div style="display: flex; align-items: center">
  365. 配送质量:<el-rate :value="evaluateDetail.commentExpress" disabled disabled-void-color="#DDDDDD"></el-rate>
  366. </div>
  367. </div>
  368. <div class="tag-list" v-if="orderDetail.orderCommentTags && orderDetail.orderCommentTags.length > 0">
  369. <el-tag v-for="(item, index) in orderDetail.orderCommentTags" :key="index">{{ item }}</el-tag>
  370. </div>
  371. </div>
  372. <div class="content">{{ evaluateDetail.content }}</div>
  373. <div class="img-list" v-if="orderDetail.orderCommentImgs && orderDetail.orderCommentImgs.length > 0">
  374. <el-image
  375. v-for="(item, index) in orderDetail.orderCommentImgs"
  376. :key="index"
  377. :src="$showImgUrl(item)"
  378. :preview-src-list="orderDetail.orderCommentImgs.map(u => $showImgUrl(u))"
  379. fit="cover"
  380. ></el-image>
  381. </div>
  382. </div>
  383. <!-- 收款记录 -->
  384. <div style="margin-top: 20px">
  385. <!-- 列表 -->
  386. <div style="margin-bottom: 20px">
  387. <el-table :data="orderPaymentRecordListData" style="width: 100%" border>
  388. <el-table-column prop="payStatus" label="收款标志" align="center"></el-table-column>
  389. <el-table-column prop="paidBy" label="收款人" align="center"></el-table-column>
  390. <el-table-column prop="paidTime" label="收款时间" align="center"></el-table-column>
  391. <el-table-column prop="paidAmount" label="收款金额" align="center"></el-table-column>
  392. <el-table-column prop="fileUrl" label="收款凭证" align="center">
  393. <template slot-scope="scope">
  394. <div>
  395. <el-image
  396. v-for="(url, index) in (scope.row.fileUrl || '').split(',').filter(url => !!url)"
  397. :key="index"
  398. style="width: 100px; height: 100px"
  399. :src="url"
  400. :preview-src-list="[url]"
  401. ></el-image>
  402. </div>
  403. </template>
  404. </el-table-column>
  405. </el-table>
  406. </div>
  407. <!-- 表单 -->
  408. <el-card class="box-card" v-if="pageType === 'shoukuan' && orderDetail.payStatus !== 'PAID'">
  409. <div>
  410. <el-form size="mini" :model="ruleForm" :inline="true" :rules="rules" ref="ruleForm" label-width="120px">
  411. <el-row :gutter="20">
  412. <el-col :span="8">
  413. <el-form-item label="*收款人" prop="paidBy">
  414. <el-input style="width: 100%" v-model="ruleForm.paidBy"></el-input>
  415. </el-form-item>
  416. </el-col>
  417. <el-col :span="8">
  418. <el-form-item label="*收款金额" prop="paidAmount">
  419. <el-input style="width: 100%" type="number" v-model="ruleForm.paidAmount"></el-input>
  420. </el-form-item>
  421. </el-col>
  422. <el-col :span="8">
  423. <el-form-item label="*收款时间" prop="paidTime">
  424. <el-date-picker
  425. style="width: 100%"
  426. v-model="ruleForm.paidTime"
  427. type="datetime"
  428. placeholder="选择日期时间"
  429. value-format="yyyy-MM-dd HH:mm:ss"
  430. >
  431. </el-date-picker>
  432. </el-form-item>
  433. </el-col>
  434. <el-col :span="24">
  435. <el-form-item label="*凭证" prop="fileUrls">
  436. <ImageUpload :fileList="ruleForm.fileUrls" :limit="100" :isEdit="true" />
  437. </el-form-item>
  438. </el-col>
  439. </el-row>
  440. </el-form>
  441. </div>
  442. <!-- 操作按钮 -->
  443. <div style="text-align: right">
  444. <el-button size="mini" type="primary" @click="shoukuanhs('PART_PAID')">部分收款</el-button>
  445. <el-button size="mini" type="primary" @click="shoukuanhs('PAID')">完成收款</el-button>
  446. </div>
  447. </el-card>
  448. </div>
  449. <!-- -------------------------------------------------------------------------------------------- -->
  450. <el-dialog
  451. :title="dialogTitle"
  452. :visible.sync="remarkVisible"
  453. :show-close="false"
  454. :width="dialogWidth"
  455. :close-on-click-modal="false"
  456. >
  457. <el-form
  458. :model="orderForm"
  459. :rules="orderFormRules"
  460. ref="orderForm"
  461. v-if="curOpenDialogType !== 'query'"
  462. label-width="100px"
  463. label-position="left"
  464. >
  465. <el-form-item prop="remark" v-if="curOpenDialogType === 'remark'">
  466. <el-input
  467. type="textarea"
  468. :autosize="{ minRows: 8, maxRows: 16 }"
  469. placeholder="请输入备注内容"
  470. v-model="remark"
  471. maxlength="100"
  472. show-word-limit
  473. >
  474. </el-input>
  475. </el-form-item>
  476. <el-form-item prop="payAmount" v-if="curOpenDialogType === 'price'">
  477. <el-input v-model="orderForm.payAmount" autocomplete="off" placeholder="请输入价格"></el-input>
  478. </el-form-item>
  479. <el-form-item label="收货人" prop="receUserName" v-if="curOpenDialogType === 'info'">
  480. <el-input v-model="orderForm.receUserName" autocomplete="off" placeholder="请输入收货人"></el-input>
  481. </el-form-item>
  482. <el-form-item label="收货电话" prop="recePhone" v-if="curOpenDialogType === 'info'">
  483. <el-input v-model="orderForm.recePhone" autocomplete="off" placeholder="请输入收货电话"></el-input>
  484. </el-form-item>
  485. <el-form-item label="收货地址" prop="receAddress" v-if="curOpenDialogType === 'info'">
  486. <el-input v-model="orderForm.receAddress" autocomplete="off" placeholder="请输入收货地址"></el-input>
  487. </el-form-item>
  488. <template v-if="curOpenDialogType === 'send'">
  489. <el-row :gutter="20">
  490. <el-col :span="6">
  491. <el-form-item label="发货方式" prop="pickType">
  492. <el-radio-group v-model="orderForm.pickType">
  493. <el-radio label="YES">自提/自送</el-radio>
  494. <el-radio label="NO">快递物流</el-radio>
  495. </el-radio-group>
  496. </el-form-item>
  497. </el-col>
  498. <el-col :span="6">
  499. <el-form-item
  500. v-if="orderForm.pickType == 'YES'"
  501. label="提货人"
  502. prop="pickName"
  503. :rules="[{ required: true, message: '提货人不能为空', trigger: 'blur' }]"
  504. >
  505. <el-input v-model="orderForm.pickName" placeholder="请输入提货人"></el-input>
  506. </el-form-item>
  507. </el-col>
  508. <el-col :span="6">
  509. <el-form-item
  510. v-if="orderForm.pickType == 'YES'"
  511. label="提货人电话"
  512. prop="pickPhone"
  513. :rules="[
  514. { required: true, message: '提货人电话不能为空', trigger: 'blur' },
  515. { pattern: /^((1[3456789]\d{9}))$/, message: '电话号码格式不正确', trigger: 'blur' }
  516. ]"
  517. >
  518. <el-input v-model="orderForm.pickPhone" placeholder="请输入提货人电话"></el-input>
  519. </el-form-item>
  520. </el-col>
  521. <el-col :span="6">
  522. <el-form-item v-if="orderForm.pickType == 'NO'" label="快递单号" prop="logisticsNo">
  523. <el-input v-model="orderForm.logisticsNo" autocomplete="off" placeholder="请输入快递单号"></el-input>
  524. </el-form-item>
  525. </el-col>
  526. <el-col :span="6">
  527. <el-form-item v-if="orderForm.pickType == 'NO'" label="物流公司" prop="companyCode">
  528. <el-select v-model="orderForm.companyCode" placeholder="请选择物流公司" style="width: 100%">
  529. <el-option
  530. :label="item.name"
  531. :value="item.code"
  532. v-for="(item, index) in companyList"
  533. :key="index"
  534. ></el-option>
  535. </el-select>
  536. </el-form-item>
  537. </el-col>
  538. <el-col :span="6">
  539. <el-form-item label="仓储" prop="storageId">
  540. <el-select
  541. v-model="orderForm.storageId"
  542. placeholder="请选择仓储"
  543. @change="
  544. e => {
  545. storageName = storageList.find(item => item.storageId == e).storageName
  546. getDetail()
  547. }
  548. "
  549. style="width: 100%"
  550. >
  551. <el-option
  552. :label="item.storageName"
  553. :value="item.storageId"
  554. v-for="(item, index) in storageList"
  555. :key="index"
  556. ></el-option>
  557. </el-select>
  558. </el-form-item>
  559. </el-col>
  560. <el-col :span="6">
  561. <el-form-item label="是否派单" prop="workOrder">
  562. <el-radio-group v-model="orderForm.workOrder">
  563. <el-radio :label="true">是</el-radio>
  564. <el-radio :label="false">否</el-radio>
  565. </el-radio-group>
  566. </el-form-item>
  567. </el-col>
  568. <el-col :span="24">
  569. <el-card class="box-card">
  570. <el-tabs v-model="typeIndex">
  571. <el-tab-pane
  572. v-if="orderDetail.orderStatus != 'YFH' && orderDetail.orderStatus != 'OVER'"
  573. label="发货数量"
  574. name="1"
  575. ></el-tab-pane>
  576. <el-tab-pane v-if="joinCode == 'CODE'" label="发货条码" name="2"></el-tab-pane>
  577. </el-tabs>
  578. <br />
  579. <el-button size="small" v-show="typeIndex == 2 && joinCode == 'CODE'" type="primary" @click="addCode()"
  580. >新增</el-button
  581. >
  582. <el-button
  583. size="small"
  584. v-show="typeIndex == 1 && joinCode == 'CODE'"
  585. type="primary"
  586. @click="handleDownload('导入条码模板')"
  587. >导入条码模板下载</el-button
  588. >
  589. <div class="table">
  590. <!-- 发货数量 -->
  591. <el-form
  592. v-show="typeIndex == 1"
  593. ref="formData1"
  594. :model="formData1"
  595. label-width="0"
  596. size="small"
  597. label-position="left"
  598. >
  599. <el-table
  600. :data="formData1.list"
  601. element-loading-text="Loading"
  602. border
  603. fit
  604. highlight-current-row
  605. stripe
  606. @selection-change="deliverSelectionChange"
  607. >
  608. <el-table-column type="selection" width="40"></el-table-column>
  609. <el-table-column prop="brandName" align="center" label="品牌"></el-table-column>
  610. <el-table-column prop="mainName" align="center" label="大类"></el-table-column>
  611. <el-table-column prop="smallName" align="center" label="小类"></el-table-column>
  612. <el-table-column prop="goodsName" align="center" label="商品名称"></el-table-column>
  613. <el-table-column prop="goodsMaterialName" align="center" label="物料名称"></el-table-column>
  614. <el-table-column prop="goodsMaterialSpecsName" align="center" label="规格型号"></el-table-column>
  615. <el-table-column prop="goodsMaterialUnit" align="center" label="单位">
  616. <template slot-scope="scope">
  617. {{
  618. scope.row.goodsMaterialUnit == 'C'
  619. ? '整套'
  620. : scope.row.goodsMaterialUnit == 'I'
  621. ? '单个'
  622. : ''
  623. }}
  624. </template>
  625. </el-table-column>
  626. <el-table-column prop="num" align="center" label="订单数量">
  627. <template slot-scope="scope">
  628. <el-input v-model="scope.row.num" placeholder="请输入" type="number"></el-input>
  629. </template>
  630. </el-table-column>
  631. <el-table-column prop="sendStockNum" align="center" label="发货数量"></el-table-column>
  632. <el-table-column v-if="joinCode != 'NO'" prop="" align="center" label="发货仓库">
  633. <template slot-scope="scope">
  634. {{ storageName }}
  635. </template>
  636. </el-table-column>
  637. <el-table-column
  638. v-if="joinCode != 'NO'"
  639. prop="stockOnQty"
  640. align="center"
  641. label="发货仓库库存"
  642. width="100"
  643. ></el-table-column>
  644. <el-table-column
  645. v-if="joinCode != 'NO'"
  646. prop="allStockQty"
  647. align="center"
  648. label="库存总数量"
  649. width="100"
  650. ></el-table-column>
  651. <el-table-column prop="insideNum" align="center" label="内机数量"></el-table-column>
  652. <el-table-column prop="outNum" align="center" label="外机数量"></el-table-column>
  653. <el-table-column prop="partNum" align="center" label="配件数量"></el-table-column>
  654. <el-table-column
  655. prop="insideCodeQty"
  656. align="center"
  657. label="导入内机条码数量"
  658. width="140"
  659. ></el-table-column>
  660. <el-table-column
  661. prop="outCodeQty"
  662. align="center"
  663. label="导入外机条码数量"
  664. width="140"
  665. ></el-table-column>
  666. <el-table-column
  667. prop="partsCodeQty"
  668. align="center"
  669. label="导入配件条码数量"
  670. width="140"
  671. ></el-table-column>
  672. <el-table-column label="操作" align="center" width="140" fixed="right">
  673. <template slot-scope="scope" v-if="joinCode == 'CODE'">
  674. <el-upload action="_" :show-file-list="false" :http-request="importCode">
  675. <el-button @click="orderDetailId = scope.row.orderDetailId" size="mini" type="text"
  676. >导入条码</el-button
  677. >
  678. </el-upload>
  679. </template>
  680. </el-table-column>
  681. </el-table>
  682. </el-form>
  683. <!-- 发货条码 -->
  684. <el-form ref="formData2" :model="formData2">
  685. <el-table
  686. v-show="typeIndex == 2"
  687. :data="formData2.list"
  688. element-loading-text="Loading"
  689. border
  690. fit
  691. highlight-current-row
  692. stripe
  693. >
  694. <el-table-column label="品牌" align="center">
  695. <template slot-scope="scope">
  696. <el-form-item>
  697. <el-input
  698. type="text"
  699. v-model="scope.row.brandName"
  700. :disabled="true"
  701. placeholder="请输入"
  702. ></el-input>
  703. </el-form-item>
  704. </template>
  705. </el-table-column>
  706. <el-table-column label="商品大类" align="center">
  707. <template slot-scope="scope">
  708. <el-form-item>
  709. <el-input
  710. type="text"
  711. v-model="scope.row.mainName"
  712. :disabled="true"
  713. placeholder="请输入"
  714. ></el-input>
  715. </el-form-item>
  716. </template>
  717. </el-table-column>
  718. <el-table-column label="商品小类" align="center">
  719. <template slot-scope="scope">
  720. <el-form-item>
  721. <el-input
  722. type="text"
  723. v-model="scope.row.smallName"
  724. :disabled="true"
  725. placeholder="请输入"
  726. ></el-input>
  727. </el-form-item>
  728. </template>
  729. </el-table-column>
  730. <el-table-column prop="" align="center" label="商品名称">
  731. <template slot-scope="scope">
  732. <el-form-item>
  733. <el-input
  734. type="text"
  735. v-model="scope.row.goodsMaterialName"
  736. :disabled="true"
  737. placeholder="请输入"
  738. ></el-input>
  739. </el-form-item>
  740. </template>
  741. </el-table-column>
  742. <el-table-column label="规格型号" align="center">
  743. <template slot-scope="scope">
  744. <el-form-item
  745. :prop="'list.' + scope.$index + '.specs'"
  746. :rules="[{ required: true, message: `请选择规格型号`, trigger: 'blur' }]"
  747. >
  748. <el-select
  749. v-model="scope.row.specs"
  750. @change="
  751. e => {
  752. changeSpecs(e, scope.row)
  753. }
  754. "
  755. value-key="orderDetailId"
  756. :disabled="isEdit2 != scope.$index"
  757. placeholder="请选择"
  758. style="width: 100%"
  759. >
  760. <el-option
  761. v-for="(item, ind) in formData1.list"
  762. :key="ind"
  763. :label="item.goodsMaterialSpecsName"
  764. :value="item"
  765. >
  766. </el-option>
  767. </el-select>
  768. </el-form-item>
  769. </template>
  770. </el-table-column>
  771. <el-table-column label="物料类型" align="center">
  772. <template slot-scope="scope">
  773. <el-form-item
  774. :prop="'list.' + scope.$index + '.goodsMaterialItemType'"
  775. :rules="[{ required: true, message: `请选择物料类型`, trigger: 'blur' }]"
  776. >
  777. <el-select
  778. v-model="scope.row.goodsMaterialItemType"
  779. @change="
  780. e => {
  781. changeMaterial(e, scope.row)
  782. }
  783. "
  784. :disabled="isEdit2 != scope.$index"
  785. placeholder="请选择"
  786. style="width: 100%"
  787. >
  788. <el-option
  789. v-for="(item, ind) in [
  790. { name: '内机', id: 'INSIDE' },
  791. { name: '外机', id: 'OUT' },
  792. { name: '配件', id: 'PARTS' }
  793. ]"
  794. :key="ind"
  795. :label="item.name"
  796. :value="item.id"
  797. >
  798. </el-option>
  799. </el-select>
  800. </el-form-item>
  801. </template>
  802. </el-table-column>
  803. <el-table-column label="物料名称" align="center">
  804. <template slot-scope="scope">
  805. <el-form-item
  806. :prop="'list.' + scope.$index + '.material'"
  807. :rules="[{ required: true, message: `请选择物料名称`, trigger: 'blur' }]"
  808. >
  809. <el-select
  810. v-model="scope.row.material"
  811. @focus="
  812. e => {
  813. if (!scope.row.goodsMaterialItemType) {
  814. return $message.warning('请先选择物料类型!')
  815. }
  816. }
  817. "
  818. @change="
  819. e => {
  820. scope.row.materialName = e.name
  821. scope.row.stockQty = e.uniqueCode == 'YES' ? 1 : null
  822. scope.row.uniqueCode = e.uniqueCode
  823. scope.row.goodsMaterialItemId = e.itemId
  824. }
  825. "
  826. value-key="name"
  827. :disabled="isEdit2 != scope.$index"
  828. placeholder="请选择"
  829. style="width: 100%"
  830. >
  831. <el-option
  832. v-for="(item, ind) in scope.row.materialList"
  833. :key="ind"
  834. :label="item.name"
  835. :value="item"
  836. >
  837. </el-option>
  838. </el-select>
  839. </el-form-item>
  840. </template>
  841. </el-table-column>
  842. <el-table-column prop="" align="center" label="是否一物一码">
  843. <template slot-scope="scope">
  844. <el-form-item>
  845. {{ scope.row.uniqueCode == 'YES' ? '是' : scope.row.uniqueCode == 'NO' ? '否' : '' }}
  846. </el-form-item>
  847. </template>
  848. </el-table-column>
  849. <el-table-column prop="" align="center" label="条码">
  850. <template slot-scope="scope">
  851. <el-form-item
  852. :prop="'list.' + scope.$index + '.materialCode'"
  853. :rules="[{ required: true, message: `请输入条码`, trigger: 'blur' }]"
  854. >
  855. <el-input
  856. type="text"
  857. v-model="scope.row.materialCode"
  858. :disabled="isEdit2 != scope.$index"
  859. placeholder="请输入"
  860. ></el-input>
  861. </el-form-item>
  862. </template>
  863. </el-table-column>
  864. <el-table-column prop="" align="center" label="数量">
  865. <template slot-scope="scope">
  866. <el-form-item
  867. :prop="'list.' + scope.$index + '.stockQty'"
  868. :rules="[{ required: true, message: `请输入数量`, trigger: 'blur' }]"
  869. >
  870. <el-input
  871. type="number"
  872. v-model="scope.row.stockQty"
  873. :disabled="isEdit2 != scope.$index || scope.row.uniqueCode == 'YES'"
  874. placeholder="请输入"
  875. ></el-input>
  876. </el-form-item>
  877. </template>
  878. </el-table-column>
  879. <el-table-column label="操作" align="right" width="140" fixed="right">
  880. <template slot-scope="scope">
  881. <el-button
  882. size="mini"
  883. type="primary"
  884. v-if="scope.$index == isEdit2"
  885. @click="saveCode(scope.row)"
  886. >保存</el-button
  887. >
  888. <el-button
  889. size="mini"
  890. type="primary"
  891. v-if="scope.$index != isEdit2"
  892. @click="isEdit2 = scope.$index"
  893. >编辑</el-button
  894. >
  895. <el-popconfirm
  896. title="确定删除吗?"
  897. @confirm="delCode(scope.row.orderDetailCodeId, scope.$index)"
  898. >
  899. <el-button slot="reference" size="mini" type="danger">删除</el-button>
  900. </el-popconfirm>
  901. </template>
  902. </el-table-column>
  903. </el-table>
  904. </el-form>
  905. </div>
  906. </el-card>
  907. </el-col>
  908. </el-row>
  909. </template>
  910. </el-form>
  911. <el-table
  912. v-loading="logisticsLoading"
  913. :data="logistics"
  914. style="width: 100%"
  915. size="mini"
  916. v-if="curOpenDialogType === 'query'"
  917. >
  918. <el-table-column prop="comName" label="物流公司" align="center"></el-table-column>
  919. <el-table-column prop="areaName" label="地区名称" align="center"></el-table-column>
  920. <el-table-column prop="time" label="物流时间" align="center"></el-table-column>
  921. <el-table-column prop="state" label="物流状态" align="center">
  922. <template slot-scope="scope">
  923. {{ scope.row.state | EXPRESS_CURRENT_STATE_FILTER }}
  924. </template>
  925. </el-table-column>
  926. <el-table-column prop="context" label="物流详情" align="center"></el-table-column>
  927. </el-table>
  928. <div slot="footer" class="dialog-footer">
  929. <el-button type="primary" @click="saveForm" v-if="curOpenDialogType !== 'query' && curOpenDialogType !== 'send'"
  930. >保 存</el-button
  931. >
  932. <el-button type="primary" @click="deliverGoods" v-if="curOpenDialogType == 'send'">发 货</el-button>
  933. <el-button @click="cancelForm">{{ curOpenDialogType === 'query' ? '关 闭' : '取 消' }}</el-button>
  934. </div>
  935. </el-dialog>
  936. <el-dialog title="理赔" :visible.sync="compensateFormVisible" width="30%" :close-on-click-modal="false">
  937. <el-form ref="compensateForm" :model="compensateForm" :rules="compensateFormRules" label-position="left">
  938. <el-form-item label="理赔数量" prop="num">
  939. <el-input v-model="compensateForm.num" autocomplete="off"></el-input>
  940. </el-form-item>
  941. <el-form-item label="理赔金额" prop="amount">
  942. <el-input v-model="compensateForm.amount" autocomplete="off"></el-input>
  943. </el-form-item>
  944. <el-form-item label="备注" prop="remark">
  945. <el-input v-model="compensateForm.remark" autocomplete="off" type="textarea" :rows="3"></el-input>
  946. </el-form-item>
  947. </el-form>
  948. <div slot="footer" class="dialog-footer">
  949. <el-button @click="cancelCompensateForm">取 消</el-button>
  950. <el-button type="primary" @click="submitCompensateForm">确 定</el-button>
  951. </div>
  952. </el-dialog>
  953. </div>
  954. </template>
  955. <script>
  956. import ImageUpload from '@/components/file-upload'
  957. import {
  958. cancelOrder,
  959. changePrice,
  960. changeReceiveInfo,
  961. confirmOrder,
  962. getOrderDetail,
  963. orderDeliver,
  964. saveRemark,
  965. orderRefund,
  966. orderCompensate,
  967. getCompensateList,
  968. changeShow,
  969. getCodeDetail,
  970. getMaterialList,
  971. listImport,
  972. saveCode,
  973. delCode,
  974. getPrintList,
  975. getDeliverList,
  976. orderPaymentRecordList,
  977. orderPaymentRecordAdd
  978. } from '@/api/order'
  979. import { getExpress, getCompanyList } from '@/api/common'
  980. import { commonTemplateDownload } from '@/api/common.js'
  981. import * as Storage from '@/api/storage'
  982. import { mapGetters } from 'vuex'
  983. export default {
  984. components: { ImageUpload },
  985. name: 'detail',
  986. data() {
  987. return {
  988. orderId: '',
  989. orderDetail: {},
  990. evaluateDetail: null,
  991. dialogTitle: '',
  992. remarkVisible: false,
  993. remark: '',
  994. price: 0,
  995. orderForm: {
  996. orderId: '',
  997. payAmount: '',
  998. receAddress: '',
  999. receUserName: '',
  1000. recePhone: '',
  1001. logisticsNo: '',
  1002. companyCode: '',
  1003. workOrder: true,
  1004. pickType: 'YES',
  1005. pickName: '',
  1006. pickPhone: ''
  1007. },
  1008. orderFormRules: {
  1009. payAmount: [
  1010. {
  1011. validator: (rule, value, callback) => {
  1012. if (this.curOpenDialogType !== 'price') {
  1013. callback()
  1014. } else {
  1015. if (!value) {
  1016. callback(new Error('请输入价格'))
  1017. } else {
  1018. if (!this.isNumber(value)) {
  1019. callback(new Error('请输入数字值'))
  1020. } else {
  1021. callback()
  1022. }
  1023. }
  1024. }
  1025. },
  1026. trigger: 'blur'
  1027. }
  1028. ],
  1029. receUserName: [{ require: true, message: '请输入收货人', trigger: 'blur' }],
  1030. recePhone: [{ require: true, message: '请输入收货电话', trigger: 'blur' }],
  1031. receAddress: [{ require: true, message: '请输入收货地址', trigger: 'blur' }],
  1032. logisticsNo: [
  1033. {
  1034. validator: (rule, value, callback) => {
  1035. if (this.curOpenDialogType !== 'send') {
  1036. callback()
  1037. } else {
  1038. if (!value) {
  1039. callback(new Error('请输入快递单号'))
  1040. } else {
  1041. callback()
  1042. }
  1043. }
  1044. },
  1045. trigger: 'blur'
  1046. }
  1047. ],
  1048. storageId: [
  1049. {
  1050. validator: (rule, value, callback) => {
  1051. let joinCode = JSON.parse(localStorage.getItem('greemall_user')).joinCode
  1052. if (this.curOpenDialogType !== 'send' || joinCode == 'NO') {
  1053. callback()
  1054. } else {
  1055. if (!value) {
  1056. callback(new Error('请选择仓储'))
  1057. } else {
  1058. callback()
  1059. }
  1060. }
  1061. },
  1062. trigger: 'change'
  1063. }
  1064. ],
  1065. companyCode: [
  1066. {
  1067. validator: (rule, value, callback) => {
  1068. if (this.curOpenDialogType !== 'send') {
  1069. callback()
  1070. } else {
  1071. if (!value) {
  1072. callback(new Error('请选择快递公司'))
  1073. } else {
  1074. callback()
  1075. }
  1076. }
  1077. },
  1078. trigger: 'change'
  1079. }
  1080. ]
  1081. },
  1082. curOpenDialogType: 'order',
  1083. logistics: [],
  1084. storageList: [],
  1085. dialogWidth: '50%',
  1086. logisticsLoading: false,
  1087. companyList: [],
  1088. compensateFormVisible: false,
  1089. compensateForm: {
  1090. id: null,
  1091. num: '',
  1092. amount: '',
  1093. remark: ''
  1094. },
  1095. compensateFormRules: {
  1096. num: [
  1097. { required: true, message: '请输入理赔数量', trigger: 'blur' },
  1098. {
  1099. validator: (rule, value, callback) => {
  1100. if (value > this.compensateItem.num - this.compensateItem.refundNum) {
  1101. callback(
  1102. new Error('最多还可以理赔' + (this.compensateItem.num - this.compensateItem.refundNum) + '件商品')
  1103. )
  1104. } else {
  1105. callback()
  1106. }
  1107. },
  1108. trigger: 'blur'
  1109. }
  1110. ],
  1111. amount: [{ required: true, message: '请输入理赔金额', trigger: 'blur' }]
  1112. },
  1113. compensateItem: {
  1114. num: '',
  1115. refundNum: ''
  1116. },
  1117. compensateList: [],
  1118. typeIndex: '1',
  1119. formData1: {
  1120. list: []
  1121. },
  1122. formData2: {
  1123. list: []
  1124. },
  1125. isEdit1: 0,
  1126. isEdit2: 0,
  1127. joinCode: JSON.parse(localStorage.getItem('greemall_user')).joinCode,
  1128. orderDetailId: '',
  1129. printList: [],
  1130. deliverList: [],
  1131. deliverSelection: [],
  1132. storageName: '',
  1133. pageType: '',
  1134. orderPaymentRecordListData: [],
  1135. ruleForm: {
  1136. paidAmount: '',
  1137. paidBy: '',
  1138. paidTime: '',
  1139. fileUrls: []
  1140. },
  1141. rules: {
  1142. paidAmount: [
  1143. {
  1144. validator: (rule, value, callback) => {
  1145. if (!value) {
  1146. callback(new Error('请输入'))
  1147. } else {
  1148. callback()
  1149. }
  1150. },
  1151. trigger: 'blur'
  1152. }
  1153. ],
  1154. paidBy: [
  1155. {
  1156. validator: (rule, value, callback) => {
  1157. if (!value) {
  1158. callback(new Error('请输入'))
  1159. } else {
  1160. callback()
  1161. }
  1162. },
  1163. trigger: 'blur'
  1164. }
  1165. ],
  1166. paidTime: [
  1167. {
  1168. validator: (rule, value, callback) => {
  1169. if (!value) {
  1170. callback(new Error('请输入'))
  1171. } else {
  1172. callback()
  1173. }
  1174. },
  1175. trigger: 'blur'
  1176. }
  1177. ],
  1178. fileUrls: [
  1179. {
  1180. validator: (rule, value, callback) => {
  1181. if (!value.length) {
  1182. callback(new Error('请上传'))
  1183. } else {
  1184. callback()
  1185. }
  1186. },
  1187. trigger: 'blur'
  1188. }
  1189. ]
  1190. }
  1191. }
  1192. },
  1193. created() {
  1194. this.orderId = this.$route.query.orderId
  1195. this.pageType = this.$route.query.type
  1196. this.getDetail()
  1197. this.getStorageList()
  1198. this.getCompanyList()
  1199. this.getCompensateList()
  1200. this.getPrintList()
  1201. this.getDeliverList()
  1202. setTimeout(() => {
  1203. if (this.pageType === 'shoukuan') {
  1204. var elements = document.getElementsByClassName('app-main-view-div')
  1205. for (var el of elements) {
  1206. el.scrollTo(1000, 10000000000000000000)
  1207. }
  1208. }
  1209. }, 500)
  1210. },
  1211. methods: {
  1212. shoukuanhs(type) {
  1213. this.$refs.ruleForm.validate(valid => {
  1214. if (valid) {
  1215. orderPaymentRecordAdd({
  1216. payStatus: type,
  1217. orderId: this.orderId,
  1218. ...this.ruleForm,
  1219. fileUrls: undefined,
  1220. fileUrl: this.ruleForm.fileUrls.map(item => item.url).join(',')
  1221. }).then(res => {
  1222. this.ruleForm = {
  1223. paidAmount: '',
  1224. paidBy: '',
  1225. paidTime: '',
  1226. fileUrls: []
  1227. }
  1228. this.$successMsg('记录成功')
  1229. this.getDetail()
  1230. })
  1231. }
  1232. })
  1233. },
  1234. getDetail() {
  1235. orderPaymentRecordList({ orderId: this.orderId }).then(res => {
  1236. this.orderPaymentRecordListData = res.data
  1237. })
  1238. getOrderDetail({ orderId: this.orderId, storageId: this.orderForm.storageId }).then(res => {
  1239. this.orderDetail = res.data
  1240. this.orderDetail.workerName = this.orderDetail.workerName ? this.orderDetail.workerName : '暂无'
  1241. this.orderDetail.workerPhone = this.orderDetail.workerPhone ? this.orderDetail.workerPhone : ''
  1242. this.evaluateDetail = res.data.orderComment
  1243. let arr = []
  1244. res.data.orderDetails.forEach(item => {
  1245. arr.push(item)
  1246. })
  1247. this.formData1.list = arr
  1248. })
  1249. },
  1250. getDeliverList() {
  1251. getDeliverList({
  1252. pageNum: 1,
  1253. pageSize: -1,
  1254. params: [{ param: 'a.order_id', compare: '=', value: this.orderId }]
  1255. }).then(res => {
  1256. this.deliverList = res.data.records
  1257. })
  1258. },
  1259. getPrintList() {
  1260. getPrintList({ orderId: this.orderId }).then(res => {
  1261. this.printList = res.data || []
  1262. })
  1263. },
  1264. showDialog(type) {
  1265. this.dialogWidth = type === 'query' ? '80%' : type === 'send' ? '80%' : '50%'
  1266. this.remarkVisible = true
  1267. this.curOpenDialogType = type
  1268. if (type === 'remark') {
  1269. this.dialogTitle = '订单备注'
  1270. this.remark = this.orderDetail.remark
  1271. } else if (type === 'price') {
  1272. this.dialogTitle = '修改价格'
  1273. this.orderForm.payAmount = this.orderDetail.payAmount
  1274. } else if (type === 'info') {
  1275. this.dialogTitle = '收货人信息'
  1276. this.orderForm.receUserName = this.orderDetail.receUserName
  1277. this.orderForm.recePhone = this.orderDetail.recePhone
  1278. this.orderForm.receAddress = this.orderDetail.receAddress
  1279. } else if (type === 'send') {
  1280. this.dialogTitle = '发货信息'
  1281. } else if (type === 'query') {
  1282. this.logisticsLoading = true
  1283. this.dialogTitle = '物流信息'
  1284. getExpress({
  1285. logisticsNo: this.orderDetail.logisticsNo,
  1286. companyCode: this.orderDetail.companyCode
  1287. }).then(res => {
  1288. this.logistics = res.data
  1289. this.logisticsLoading = false
  1290. })
  1291. }
  1292. },
  1293. cancelForm() {
  1294. this.remarkVisible = false
  1295. if (this.curOpenDialogType === 'query') {
  1296. return
  1297. }
  1298. this.$refs.orderForm.resetFields()
  1299. if (this.curOpenDialogType === 'remark') {
  1300. this.remark = ''
  1301. } else if (this.curOpenDialogType === 'price') {
  1302. this.price = ''
  1303. }
  1304. },
  1305. saveForm() {
  1306. const params = {
  1307. orderId: this.orderId
  1308. }
  1309. if (this.curOpenDialogType === 'remark') {
  1310. params.remark = this.remark
  1311. saveRemark(params).then(() => {
  1312. this.cancelForm()
  1313. this.getDetail()
  1314. this.$successMsg('保存成功')
  1315. })
  1316. } else if (this.curOpenDialogType === 'price') {
  1317. params.price = this.orderForm.payAmount
  1318. this.$refs.orderForm.validate(valid => {
  1319. if (valid) {
  1320. changePrice(params).then(() => {
  1321. this.cancelForm()
  1322. this.getDetail()
  1323. this.$successMsg('保存成功')
  1324. })
  1325. }
  1326. })
  1327. } else if (this.curOpenDialogType === 'info') {
  1328. params.receUserName = this.orderForm.receUserName
  1329. params.recePhone = this.orderForm.recePhone
  1330. params.receAddress = this.orderForm.receAddress
  1331. params.orderStatus = this.orderDetail.orderStatus
  1332. this.$refs.orderForm.validate(valid => {
  1333. if (valid) {
  1334. changeReceiveInfo(params).then(() => {
  1335. this.cancelForm()
  1336. this.getDetail()
  1337. this.$successMsg('保存成功')
  1338. })
  1339. }
  1340. })
  1341. } else if (this.curOpenDialogType === 'send') {
  1342. params.logisticsNo = this.orderForm.logisticsNo
  1343. params.storageId = this.orderForm.storageId
  1344. params.companyCode = this.orderForm.companyCode
  1345. params.workOrder = this.orderForm.workOrder
  1346. this.$refs.orderForm.validate(valid => {
  1347. if (valid) {
  1348. orderDeliver(params).then(() => {
  1349. this.cancelForm()
  1350. this.getDetail()
  1351. this.$successMsg('保存成功')
  1352. })
  1353. }
  1354. })
  1355. }
  1356. },
  1357. cancelOrder() {
  1358. cancelOrder({ orderId: this.orderId }).then(() => {
  1359. this.getDetail()
  1360. this.$successMsg('取消成功')
  1361. })
  1362. },
  1363. confirmOrder() {
  1364. confirmOrder({ orderId: this.orderId }).then(() => {
  1365. this.getDetail()
  1366. this.$successMsg('确认收款成功')
  1367. })
  1368. },
  1369. toDeliverDetail(deliveryId) {
  1370. this.$router.push({
  1371. name: 'sales_deliver_order_list',
  1372. query: {
  1373. deliverId: deliveryId
  1374. }
  1375. })
  1376. },
  1377. // 发起退货
  1378. returnOrder(deliveryId) {
  1379. this.$router.push({
  1380. name: 'sales_return_order_list',
  1381. query: {
  1382. deliverId: deliveryId
  1383. }
  1384. })
  1385. },
  1386. goBack() {
  1387. // this.$router.go(-1);
  1388. this.$router.push({
  1389. name: 'order_list'
  1390. })
  1391. },
  1392. isNumber(val) {
  1393. const regPos = /^\d+(\.\d+)?$/
  1394. const regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
  1395. if (regPos.test(val) || regNeg.test(val)) {
  1396. return true
  1397. } else {
  1398. return false
  1399. }
  1400. },
  1401. getStorageList() {
  1402. Storage.getList({ pageNum: 1, pageSize: -1, type: '商品' }).then(res => {
  1403. this.storageList = res.data.records
  1404. })
  1405. },
  1406. // 获取物流公司列表
  1407. getCompanyList() {
  1408. getCompanyList().then(res => {
  1409. this.companyList = res.data
  1410. })
  1411. },
  1412. // 退款
  1413. handleRefund(row) {
  1414. console.log(row)
  1415. if (row.num == 1) {
  1416. this.$confirm('此操作将退款此商品, 是否继续?', '退款', {
  1417. confirmButtonText: '确定',
  1418. cancelButtonText: '取消',
  1419. type: 'warning'
  1420. })
  1421. .then(() => {
  1422. this.orderRefund(1, row.orderDetailId)
  1423. })
  1424. .catch(() => {})
  1425. } else {
  1426. this.$prompt('请输入退款数量', '退款', {
  1427. confirmButtonText: '确定',
  1428. cancelButtonText: '取消',
  1429. inputValidator: function (value) {
  1430. if (!value) return '请输入退款数量'
  1431. if (value == 0) return '退款数量不能小于1'
  1432. if (value > row.num - row.refundNum) {
  1433. return '最多还可以退款' + (row.num - row.refundNum) + '件商品'
  1434. }
  1435. }
  1436. })
  1437. .then(({ value }) => {
  1438. this.orderRefund(value, row.orderDetailId)
  1439. })
  1440. .catch(() => {})
  1441. }
  1442. },
  1443. // 退款
  1444. orderRefund(num, id) {
  1445. orderRefund({
  1446. num: num,
  1447. orderDetailId: id
  1448. }).then(res => {
  1449. this.getDetail()
  1450. this.$successMsg('退款成功')
  1451. })
  1452. },
  1453. // 理赔
  1454. handleCompensate(row) {
  1455. this.compensateFormVisible = true
  1456. this.compensateForm.id = row.orderDetailId
  1457. this.compensateItem.num = row.num
  1458. this.compensateItem.refundNum = row.refundNum
  1459. },
  1460. // 取消 理赔
  1461. cancelCompensateForm() {
  1462. this.compensateFormVisible = false
  1463. this.compensateForm = {
  1464. id: null,
  1465. num: '',
  1466. amount: '',
  1467. remark: ''
  1468. }
  1469. },
  1470. // 提交 理赔
  1471. submitCompensateForm() {
  1472. this.$refs.compensateForm.validate(valid => {
  1473. if (valid) {
  1474. let params = {
  1475. adminUserId: this.userid,
  1476. orderDetailId: this.compensateForm.id,
  1477. num: this.compensateForm.num,
  1478. refundAmount: this.compensateForm.amount,
  1479. remark: this.compensateForm.remark
  1480. }
  1481. orderCompensate(params).then(res => {
  1482. this.cancelCompensateForm()
  1483. this.getDetail()
  1484. this.getCompensateList()
  1485. this.$successMsg('理赔成功')
  1486. })
  1487. }
  1488. })
  1489. },
  1490. // 获取理赔列表
  1491. getCompensateList() {
  1492. getCompensateList({ orderId: this.orderId }).then(res => {
  1493. this.compensateList = res.data
  1494. })
  1495. },
  1496. // 切换评价信息是否显示
  1497. changeShow() {
  1498. changeShow({
  1499. isShow: this.evaluateDetail.isShow,
  1500. orderId: this.orderId
  1501. }).then(res => {
  1502. this.getDetail()
  1503. this.$successMsg()
  1504. })
  1505. },
  1506. async getCodeDetail() {
  1507. getCodeDetail({ orderId: this.orderId }).then(async res => {
  1508. for (var item of res.data) {
  1509. item.specs = { goodsMaterialSpecsName: item.specsName, orderDetailId: item.orderDetailId }
  1510. item.material = { name: item.materialName }
  1511. item.materialList = await this.getMaterialList(item.specsName, item.goodsMaterialItemType)
  1512. }
  1513. this.formData2.list = res.data
  1514. })
  1515. },
  1516. async getMaterialList(specsName, type) {
  1517. return new Promise((resolve, reject) => {
  1518. getMaterialList({
  1519. pageNum: 1,
  1520. pageSize: -1,
  1521. specsName,
  1522. type
  1523. }).then(async res => {
  1524. resolve(res.data.records)
  1525. })
  1526. })
  1527. },
  1528. async changeSpecs(e, row) {
  1529. row.brandName = e.brandName
  1530. row.brandId = e.brandId
  1531. row.mainName = e.mainName
  1532. row.mainId = e.mainNumber
  1533. row.smallName = e.smallName
  1534. row.smallId = e.smallNumber
  1535. row.specsName = e.goodsMaterialSpecsName
  1536. row.goodsMaterialName = e.goodsName
  1537. row.goodsMaterialId = e.goodsMaterialId
  1538. row.material = null
  1539. row.materialName = ''
  1540. row.stockQty = ''
  1541. row.uniqueCode = ''
  1542. row.materialList = await this.getMaterialList(row.specsName, row.goodsMaterialItemType)
  1543. row.orderDetailId = e.orderDetailId
  1544. },
  1545. async changeMaterial(e, row) {
  1546. if (!row.specs) {
  1547. return this.$message.warning('请先选择规格型号!')
  1548. }
  1549. row.material = null
  1550. row.materialName = ''
  1551. row.stockQty = ''
  1552. row.uniqueCode = ''
  1553. row.materialList = await this.getMaterialList(row.specsName, row.goodsMaterialItemType)
  1554. },
  1555. //发货新增条码
  1556. addCode() {
  1557. this.$refs.formData2.validate(valid => {
  1558. if (valid) {
  1559. this.isEdit2 = 0
  1560. this.formData2.list.unshift({
  1561. brandId: '',
  1562. brandName: '',
  1563. mainId: '',
  1564. mainName: '',
  1565. stockQty: '',
  1566. smallId: '',
  1567. smallName: '',
  1568. goodsMaterialItemType: '',
  1569. goodsMaterialName: '',
  1570. goodsMaterialId: '',
  1571. materialCode: '',
  1572. uniqueCode: '',
  1573. specs: null,
  1574. specsName: '',
  1575. materialName: '',
  1576. material: null,
  1577. materialList: [],
  1578. orderDetailId: '',
  1579. goodsMaterialItemId: ''
  1580. })
  1581. }
  1582. })
  1583. },
  1584. delCode(orderDetailCodeId, index) {
  1585. if (orderDetailCodeId) {
  1586. delCode({
  1587. orderDetailCodeId
  1588. }).then(res => {
  1589. if (res.code == 200) {
  1590. this.$message({ type: 'success', message: '删除成功!' })
  1591. this.getOrderDetail()
  1592. this.getCodeDetail()
  1593. } else {
  1594. this.$message.error(res.msg)
  1595. }
  1596. })
  1597. } else {
  1598. this.formData2.list.splice(index, 1)
  1599. }
  1600. },
  1601. saveCode(orderDetailCodes) {
  1602. const that = this
  1603. let params = [
  1604. {
  1605. ...orderDetailCodes,
  1606. orderId: this.orderId
  1607. }
  1608. ]
  1609. delete params[0].material
  1610. delete params[0].specs
  1611. this.$refs.formData2.validate((valid, invalidFields, errLabels) => {
  1612. if (valid) {
  1613. saveCode(params).then(res => {
  1614. if (res.code == 200) {
  1615. that.$message.success('保存成功!')
  1616. this.getOrderDetail()
  1617. this.getCodeDetail()
  1618. }
  1619. })
  1620. }
  1621. })
  1622. },
  1623. deliverSelectionChange(val) {
  1624. this.deliverSelection = val
  1625. },
  1626. deliverGoods() {
  1627. this.$refs.orderForm.validate(valid => {
  1628. if (valid) {
  1629. if (this.deliverSelection.length < 1) return this.$errorMsg('请选择一个发货信息')
  1630. for (let i = 0; i < this.deliverSelection.length; i++) {
  1631. const item = this.deliverSelection[i]
  1632. if (!item.num || item.num == 0) return this.$errorMsg('请填写发货数量-订单数量')
  1633. }
  1634. orderDeliver({
  1635. orderId: this.orderId,
  1636. logisticsNo: this.orderForm.pickType == 'NO' ? this.orderForm.logisticsNo : '',
  1637. storageId: this.orderForm.storageId,
  1638. companyCode: this.orderForm.pickType == 'NO' ? this.orderForm.companyCode : '',
  1639. workOrder: this.orderForm.workOrder,
  1640. pickName: this.orderForm.pickType == 'YES' ? this.orderForm.pickName : '',
  1641. pickPhone: this.orderForm.pickType == 'YES' ? this.orderForm.pickPhone : '',
  1642. pickType: this.orderForm.pickType,
  1643. orderDeliveryDetailList: this.deliverSelection.map(item => {
  1644. return {
  1645. orderDetailId: item.orderDetailId,
  1646. sendNum: item.num,
  1647. sendInsideCodeQty: item.insideCodeQty,
  1648. sendOutCodeQty: item.outCodeQty,
  1649. sendPartsCodeQty: item.partsCodeQty
  1650. }
  1651. })
  1652. }).then(() => {
  1653. this.cancelForm()
  1654. this.getDetail()
  1655. this.getDeliverList()
  1656. this.$successMsg('发货成功')
  1657. })
  1658. }
  1659. })
  1660. },
  1661. importCode(data) {
  1662. const loading = this.$loading({
  1663. lock: true,
  1664. text: '正在导入',
  1665. spinner: 'el-icon-loading',
  1666. background: 'rgba(0, 0, 0, 0.7)'
  1667. })
  1668. var formdata = new FormData()
  1669. formdata.append('file', data.file)
  1670. let params = {
  1671. orderDetailId: this.orderDetailId
  1672. }
  1673. if (!!params) {
  1674. for (const key in params) {
  1675. if (Object.hasOwnProperty.call(params, key)) {
  1676. formdata.append(key, params[key])
  1677. }
  1678. }
  1679. }
  1680. listImport({ formdata })
  1681. .then(res => {
  1682. this.getOrderDetail()
  1683. loading.close()
  1684. this.$message({
  1685. type: 'success',
  1686. message: '导入成功!'
  1687. })
  1688. })
  1689. .catch(err => {
  1690. loading.close()
  1691. this.$message({
  1692. type: 'error',
  1693. message: err.message || '导入失败'
  1694. })
  1695. })
  1696. },
  1697. // 下载导入模版
  1698. handleDownload(title) {
  1699. commonTemplateDownload({ name: '导入条码.xlsx' }, title)
  1700. .then(res => {
  1701. this.$message({
  1702. message: '下载成功',
  1703. type: 'success'
  1704. })
  1705. })
  1706. .catch(err => {
  1707. this.$message.error('下载失败')
  1708. })
  1709. }
  1710. },
  1711. computed: {
  1712. ...mapGetters(['userid', 'name']),
  1713. curOrderStatus() {
  1714. switch (this.orderDetail.orderStatus) {
  1715. case 'NOPAY':
  1716. return 1
  1717. break
  1718. case 'DFH':
  1719. return 2
  1720. break
  1721. case 'YFH':
  1722. return 3
  1723. break
  1724. case 'OVER':
  1725. return 4
  1726. break
  1727. default:
  1728. return 1
  1729. }
  1730. },
  1731. totalAmountCompute() {
  1732. if (!this.orderDetail.totalAmount) {
  1733. return 0
  1734. }
  1735. const totalAmount = parseFloat(this.orderDetail.totalAmount)
  1736. const freight = parseFloat(this.orderDetail.freight)
  1737. return (totalAmount - freight).toFixed(2)
  1738. }
  1739. }
  1740. }
  1741. </script>
  1742. <style scoped lang="scss">
  1743. .order-main {
  1744. margin-top: 15px;
  1745. border: 1px solid #e5e5e5;
  1746. .order-main-title {
  1747. font-size: 14px;
  1748. }
  1749. .order-main-title span {
  1750. margin-right: 15px;
  1751. }
  1752. .order-main-status {
  1753. padding: 15px 0;
  1754. font-size: 24px;
  1755. color: #409eff;
  1756. }
  1757. .order-main-opt-btn {
  1758. padding: 15px 0;
  1759. }
  1760. }
  1761. .order-receive-info {
  1762. margin: 15px 0 30px;
  1763. padding: 15px;
  1764. background: #f5f7fa;
  1765. :first-child div span {
  1766. padding-right: 15px;
  1767. }
  1768. }
  1769. .order-detail {
  1770. background: #f5f7fa;
  1771. .order-amount-info {
  1772. padding: 15px 0;
  1773. font-size: 12px;
  1774. font-weight: bold;
  1775. }
  1776. ::v-deep .el-table tr,
  1777. ::v-deep .el-table th {
  1778. background-color: #f5f7fa;
  1779. }
  1780. }
  1781. .main-detail {
  1782. .title {
  1783. font-size: 16px;
  1784. font-weight: 700;
  1785. margin-bottom: 20px;
  1786. }
  1787. .item {
  1788. display: flex;
  1789. font-size: 14px;
  1790. color: #666;
  1791. padding-bottom: 12px;
  1792. .label {
  1793. white-space: nowrap;
  1794. }
  1795. }
  1796. }
  1797. .order-evaluate-info {
  1798. margin: 15px 0;
  1799. padding: 30px 15px;
  1800. background: #f5f7fa;
  1801. .title {
  1802. display: flex;
  1803. justify-content: space-between;
  1804. align-items: center;
  1805. .left {
  1806. font-size: 16px;
  1807. font-weight: 700;
  1808. span {
  1809. font-weight: normal;
  1810. margin-left: 20px;
  1811. font-size: 14px;
  1812. color: #666;
  1813. }
  1814. }
  1815. .right {
  1816. display: flex;
  1817. align-items: center;
  1818. font-size: 14px;
  1819. span {
  1820. margin-right: 10px;
  1821. }
  1822. }
  1823. }
  1824. .main {
  1825. margin-top: 20px;
  1826. display: flex;
  1827. .rate-list {
  1828. font-size: 14px;
  1829. flex-shrink: 0;
  1830. }
  1831. .tag-list {
  1832. margin-left: 30px;
  1833. ::v-deep .el-tag {
  1834. margin-right: 10px;
  1835. margin-bottom: 10px;
  1836. }
  1837. }
  1838. }
  1839. .content {
  1840. width: 400px;
  1841. line-height: 20px;
  1842. font-size: 14px;
  1843. color: #333;
  1844. margin-top: 10px;
  1845. }
  1846. .img-list {
  1847. display: flex;
  1848. flex-wrap: wrap;
  1849. margin-top: 10px;
  1850. width: 400px;
  1851. ::v-deep .el-image {
  1852. width: 100px;
  1853. height: 100px;
  1854. margin-right: 10px;
  1855. margin-bottom: 10px;
  1856. border: 1px solid #eaeaea;
  1857. }
  1858. }
  1859. }
  1860. </style>