payapply-list.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <template>
  2. <div class="app-container">
  3. <div class="filter-container">
  4. <div class="filter-control">
  5. <span>子订单ID:</span>
  6. <el-input
  7. v-model="listQuery.shopOrderId"
  8. style="width:180px;"
  9. placeholder="子订单ID"
  10. clearable
  11. @keyup.enter.native="getList"
  12. @clear="getList"
  13. @input="e => (listQuery.shopOrderId = checkedInput(e))"
  14. />
  15. </div>
  16. <div class="filter-control">
  17. <span>子订单编号:</span>
  18. <el-input
  19. v-model="listQuery.shopOrderNo"
  20. style="width:180px;"
  21. placeholder="子订单编号"
  22. clearable
  23. @keyup.enter.native="getList"
  24. @clear="getList"
  25. />
  26. </div>
  27. <div class="filter-control">
  28. <span>订单ID:</span>
  29. <el-input
  30. v-model="listQuery.orderId"
  31. style="width:180px;"
  32. placeholder="订单ID"
  33. clearable
  34. @keyup.enter.native="getList"
  35. @clear="getList"
  36. @input="e => (listQuery.orderId = checkedInput(e))"
  37. />
  38. </div>
  39. <div class="filter-control">
  40. <span>订单编号:</span>
  41. <el-input
  42. v-model="listQuery.orderNo"
  43. style="width:180px;"
  44. placeholder="订单编号"
  45. clearable
  46. @keyup.enter.native="getList"
  47. @clear="getList"
  48. />
  49. </div>
  50. <div class="filter-control">
  51. <span>供应商:</span>
  52. <el-input
  53. v-model="listQuery.shopName"
  54. style="width:180px;"
  55. placeholder="供应商"
  56. clearable
  57. @keyup.enter.native="getList"
  58. @clear="getList"
  59. />
  60. </div>
  61. <div class="filter-control">
  62. <span>机构名称:</span>
  63. <el-input
  64. v-model="listQuery.clubName"
  65. style="width:180px;"
  66. placeholder="机构名称"
  67. clearable
  68. @keyup.enter.native="getList"
  69. @clear="getList"
  70. />
  71. </div>
  72. <div class="filter-control">
  73. <span>付款状态:</span>
  74. <el-select v-model="listQuery.status" style="width:180px;" clearable @change="getList">
  75. <el-option value="" label="所有" />
  76. <el-option label="未付款" value="0" />
  77. <el-option label="部分付款" value="1" />
  78. </el-select>
  79. </div>
  80. <div class="filter-control">
  81. <span>下单时间:</span>
  82. <el-date-picker
  83. v-model="time"
  84. type="daterange"
  85. unlink-panels
  86. range-separator="至"
  87. start-placeholder="开始日期"
  88. end-placeholder="结束日期"
  89. :picker-options="pickerOptions"
  90. @change="getList"
  91. />
  92. </div>
  93. <div class="filter-control">
  94. <el-button type="primary" icon="el-icon-search" @click="getList">查询</el-button>
  95. <el-button type="success" :disabled="!orderRadio" icon="el-icon-document-add" @click="handleApplySub">付款申请</el-button>
  96. </div>
  97. </div>
  98. <el-table
  99. v-loading="listLoading"
  100. :data="list"
  101. element-loading-text="Loading"
  102. border
  103. fit
  104. highlight-current-row
  105. default-expand-all
  106. :header-cell-style="{background:'#eef1f6',color:'#606266'}"
  107. @selection-change="handleSelectionChange"
  108. >
  109. <el-table-column type="selection" width="40" />
  110. <el-table-column label="商品信息" type="expand" width="50">
  111. <template slot-scope="{row}">
  112. <el-table :data="row.newOrderProducts" border fit highlight-current-row :header-cell-style="{background:'#eef1f6',color:'#606266'}">
  113. <el-table-column label="商品名" align="center" prop="name" />
  114. <el-table-column label="规格" align="center" prop="unit" />
  115. <el-table-column label="数量" align="center" prop="num" />
  116. <el-table-column label="退货" align="center" prop="returnedPurchaseProductNum">
  117. <template slot-scope="scope">
  118. <span>{{ scope.row.returnedPurchaseProductNum ? scope.row.returnedPurchaseProductNum : 0 }}</span>
  119. </template>
  120. </el-table-column>
  121. <el-table-column label="单价" align="center" prop="price">
  122. <template slot-scope="scope">
  123. <span>{{ scope.row.price | amountfilters }}</span>
  124. </template>
  125. </el-table-column>
  126. <el-table-column label="总价" align="center" prop="totalFee">
  127. <template slot-scope="scope">
  128. <span>{{ scope.row.totalFee | amountfilters }}</span>
  129. </template>
  130. </el-table-column>
  131. </el-table>
  132. </template>
  133. </el-table-column>
  134. <el-table-column label="订单编号(ID)" align="center" prop="orderNo">
  135. <template slot-scope="{row}">
  136. <span class="el-p-link" @click="handleOrderDetails(row)">{{ row.orderNo }}({{ row.orderId }})</span>
  137. </template>
  138. </el-table-column>
  139. <el-table-column label="子订单编号(ID)" align="center" prop="shopOrderNo">
  140. <template slot-scope="{row}">
  141. <span class="el-p-link" @click="handleOrderDetails(row)">{{ row.shopOrderNo }}({{ row.shopOrderId }})</span>
  142. </template>
  143. </el-table-column>
  144. <el-table-column label="订单金额" align="center" prop="payTotalFee">
  145. <template slot-scope="{row}">
  146. <span>{{ row.payTotalFee | amountfilters }}</span>
  147. </template>
  148. </el-table-column>
  149. <el-table-column label="收款金额" align="center" prop="receiptTotalFee">
  150. <template slot-scope="{row}">
  151. <span>{{ row.receiptTotalFee | amountfilters }}</span>
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="收款状态" align="center" prop="orderReceiptStatus">
  155. <template slot-scope="{ row }">
  156. <span
  157. :class="{
  158. 'el-span-warning': row.orderReceiptStatus == 1 || row.orderReceiptStatus == 3,
  159. 'el-span-success': row.orderReceiptStatus == 2
  160. }"
  161. >
  162. {{ row.orderReceiptStatus | receiptStatusFilter }}
  163. </span>
  164. </template>
  165. </el-table-column>
  166. <el-table-column label="付款状态" align="center" prop="payStatus">
  167. <template slot-scope="{ row }">
  168. <span
  169. :class="{
  170. 'el-span-warning': row.payStatus == 1,
  171. 'el-span-success': row.payStatus == 2,
  172. 'el-span-danger': row.payStatus == 3
  173. }"
  174. >
  175. {{ row.payStatus | payStatusFilter }}
  176. </span>
  177. </template>
  178. </el-table-column>
  179. <el-table-column label="商品费" align="center" prop="productAmount">
  180. <template slot-scope="{row}">
  181. <span>{{ row.productAmount | amountfilters }}</span>
  182. </template>
  183. </el-table-column>
  184. <el-table-column label="机构名称" align="center" prop="clubName" />
  185. <el-table-column label="机构运费" align="center" prop="freight">
  186. <template slot-scope="{row}">
  187. <span>{{ row.postageInfo }}</span>
  188. </template>
  189. </el-table-column>
  190. <el-table-column label="供应商" align="center" prop="shopName" />
  191. <el-table-column label="供应商运费" align="center" prop="shopPostFee">
  192. <template slot-scope="{row}">
  193. <span>{{ row.shopPostFee | amountfilters }}</span>
  194. </template>
  195. </el-table-column>
  196. <el-table-column label="应付采美" align="center" prop="waitPayCmAmount">
  197. <template slot-scope="{row}">
  198. <span class="el-span-danger">{{ row.waitPayCmAmount | amountfilters }}</span>
  199. </template>
  200. </el-table-column>
  201. <el-table-column label="应付供应商" align="center" prop="shouldPayShopAmount">
  202. <template slot-scope="{row}">
  203. <span class="el-span-danger">{{ row.shouldPayShopAmount | amountfilters }}</span>
  204. </template>
  205. </el-table-column>
  206. <el-table-column label="操作" align="center">
  207. <template slot-scope="{row}">
  208. <el-button type="primary" size="mini" @click="handleToRecord(row.shopOrderId)">退/付款记录</el-button>
  209. </template>
  210. </el-table-column>
  211. </el-table>
  212. <pagination v-show="total>10" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
  213. </div>
  214. </template>
  215. <script>
  216. import { getPayOrderList } from '@/api/finance'
  217. import pickerOptions from '@/utils/time-picker.js'
  218. export default {
  219. filters: {
  220. receiptStatusFilter(status) {
  221. const map = {
  222. 1: '待收款',
  223. 2: '部分收款',
  224. 3: '已收款'
  225. }
  226. return map[status]
  227. },
  228. payStatusFilter(status) {
  229. const map = {
  230. 1: '待付款',
  231. 2: '部分付款',
  232. 3: '已付款'
  233. }
  234. return map[status]
  235. },
  236. statusFilter(status) {
  237. const map = {
  238. 0: '待付款',
  239. 1: '已付款',
  240. 2: '审核不通过'
  241. }
  242. return map[status]
  243. }
  244. },
  245. data() {
  246. return {
  247. time: '',
  248. list: null,
  249. pickerOptions,
  250. listLoading: true,
  251. total: 0,
  252. listQuery: {
  253. listType: 1, // 1申请付款 2子订单分账 3子订单结算
  254. organizeId: this.$store.getters.organizeId,
  255. pageNum: 1,
  256. pageSize: 10,
  257. shopName: '', // 供应商名称
  258. clubName: '', // 机构名称
  259. orderNo: '', // 订单编号
  260. orderId: '', // 订单ID
  261. payShopId: '', // 付款单
  262. orderStartTime: '', // 下单开始时间
  263. orderEndTime: '', // 下单结束时间
  264. shopOrderId: '', // 子订单ID
  265. shopOrderNo: '', // 子订单编号
  266. status: '' // 付款状态
  267. },
  268. orderRadio: null
  269. }
  270. },
  271. created() {
  272. this.getList()
  273. },
  274. methods: {
  275. initTime() {
  276. // 初始化获取时间筛选值
  277. if (this.time && this.time.length > 0) {
  278. this.listQuery.orderStartTime = this.time[0]
  279. this.listQuery.orderEndTime = this.time[1]
  280. } else {
  281. this.listQuery.orderStartTime = ''
  282. this.listQuery.orderEndTime = ''
  283. }
  284. },
  285. async getList() {
  286. this.listLoading = true
  287. try {
  288. const res = await getPayOrderList(this.listQuery)
  289. this.list = res.data.list
  290. this.listLoading = false
  291. } catch (error) {
  292. console.log('error', error)
  293. this.listLoading = false
  294. }
  295. },
  296. // 多选子订单
  297. handleSelectionChange(row) {
  298. this.orderRadio = row
  299. console.log('orderRadio', this.orderRadio)
  300. },
  301. // 付款申请
  302. handleApplySub() {
  303. console.log('flag', this.checkForDuplicates(this.orderRadio))
  304. if (this.checkForDuplicates(this.orderRadio)) {
  305. this.$alert('应付多个订单时,它们必须属于同一个供应商!', '提示', {
  306. confirmButtonText: '确定'
  307. })
  308. } else {
  309. const newArr = this.orderRadio.map(item => item.shopOrderId)
  310. this.$router.push({ path: '/finance/payapply-edit', query: { shopOrderIds: JSON.stringify(newArr) }})
  311. }
  312. },
  313. // 数组是否有重复
  314. checkForDuplicates(arr, id = 'shopId') {
  315. const newShopArr = []
  316. let flag = false
  317. for (const item of arr) {
  318. newShopArr.push(item[id])
  319. for (const el of newShopArr) {
  320. if (item[id] !== el) {
  321. flag = true
  322. }
  323. }
  324. }
  325. return flag
  326. },
  327. // 跳转订单详情
  328. handleOrderDetails(row) {
  329. this.$router.push({ path: '/order/detail', query: { id: row.orderId }})
  330. },
  331. handleToDetails(receiptId) {
  332. this.$router.push({ path: '/finance/details', query: { receiptId: receiptId }})
  333. },
  334. handleToRecord(shopOrderId) {
  335. this.$router.push({ path: '/finance/payment-record', query: { shopOrderId: shopOrderId }})
  336. },
  337. checkedInput(event) {
  338. const pattern = /[^0-9.]/g
  339. return event.replace(pattern, '')
  340. }
  341. }
  342. }
  343. </script>
  344. <style scoped>
  345. /deep/ .el-table__expanded-cell[class*=cell]{
  346. padding:10px 10px !important;
  347. }
  348. /deep/ .el-table__row td {
  349. height: 34px !important;
  350. line-height: 34px !important;
  351. padding: 0 !important;
  352. }
  353. </style>