|
|
@@ -1,170 +1,37 @@
|
|
|
<!-- 商品订单-合约汇总-交收 -->
|
|
|
<template>
|
|
|
- <app-drawer class="app-delivery" title="交收" :width="600" v-model:show="show" :loading="loading" :refresh="refresh">
|
|
|
- <div class="app-delivery__header">
|
|
|
+ <Delivery v-bind="{ goodsId: selectedRow.goodsid, total: selectedRow.enableqty }">
|
|
|
+ <template #header>
|
|
|
<span>持仓数量:{{ selectedRow.curpositionqty }}</span>
|
|
|
<span>可用数量:{{ selectedRow.enableqty }}</span>
|
|
|
- </div>
|
|
|
- <div class="app-delivery__form el-form--vertical">
|
|
|
- <table cellspacing="0" cellpadding="0">
|
|
|
- <thead>
|
|
|
- <tr>
|
|
|
- <th>持有人/商品/仓库</th>
|
|
|
- <th>升贴水</th>
|
|
|
- <th>数量</th>
|
|
|
- <th>交收数量</th>
|
|
|
- </tr>
|
|
|
- </thead>
|
|
|
- <template v-for="(item, index) in dataList" :key="index">
|
|
|
- <tbody>
|
|
|
- <tr>
|
|
|
- <td colspan="4">
|
|
|
- <span>{{ item.username }}</span>
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- <tr>
|
|
|
- <td>
|
|
|
- <span>{{ item.wrstandardname }}</span>
|
|
|
- <span>{{ item.warehousename }}</span>
|
|
|
- </td>
|
|
|
- <td>{{ item.pricemove }}</td>
|
|
|
- <td>{{ item.avalidqty }}</td>
|
|
|
- <td>
|
|
|
- <el-input-number placeholder="请输入" v-model="item.deliveryLot" :precision="0"
|
|
|
- :max="maxQty(index)" :min="0" />
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- </tbody>
|
|
|
- <tbody class="spacing" v-if="(dataList.length - 1) > index"></tbody>
|
|
|
- </template>
|
|
|
- </table>
|
|
|
- </div>
|
|
|
- <template #footer>
|
|
|
- <ul class="app-delivery__details">
|
|
|
+ </template>
|
|
|
+ <template #footer="{ discount, qty }">
|
|
|
+ <ul>
|
|
|
<li>
|
|
|
- <div class="block-left">
|
|
|
- <span>{{ selectedRow.goodsname }}</span>
|
|
|
- <span :class="selectedRow.lastColor">{{ selectedRow.lastprice }}</span>
|
|
|
- </div>
|
|
|
- <div class="block-right">
|
|
|
- <span>已点选数量:{{ totalQty }}</span>
|
|
|
- </div>
|
|
|
+ <span>{{ selectedRow.goodsname }}</span>
|
|
|
+ <span :class="selectedRow.lastColor">{{ selectedRow.lastprice }}</span>
|
|
|
</li>
|
|
|
<li>
|
|
|
- <div class="block-right">
|
|
|
- <span>升贴水:{{ discount }}</span>
|
|
|
- </div>
|
|
|
+ <span>已点数量:{{ qty }}</span>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ <ul>
|
|
|
+ <li style="margin-left: auto;">
|
|
|
+ <span>升贴水:{{ discount }}</span>
|
|
|
</li>
|
|
|
</ul>
|
|
|
- <div class="app-delivery__btnbar">
|
|
|
- <el-button type="info" @click="onCancel(false)">取消</el-button>
|
|
|
- <el-button type="primary" @click="onSubmit">交收</el-button>
|
|
|
- </div>
|
|
|
</template>
|
|
|
- </app-drawer>
|
|
|
+ </Delivery>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
-import { ref, PropType, computed } from 'vue'
|
|
|
-import { v4 } from 'uuid'
|
|
|
-import { ElMessage } from 'element-plus'
|
|
|
-import { ClientType } from '@/constants/client'
|
|
|
-import { useRequest } from '@/hooks/request'
|
|
|
-import { queryWrDeliveryAvalidHoldLB } from '@/services/api/transfer'
|
|
|
-import { deliveryOrder } from '@/services/api/trade'
|
|
|
-import { useAccountStore } from '@/stores'
|
|
|
-import moment from 'moment'
|
|
|
-import AppDrawer from '@pc/components/base/drawer/index.vue'
|
|
|
+import { PropType } from 'vue'
|
|
|
+import Delivery from '@pc/components/modules/delivery/index.vue'
|
|
|
|
|
|
-const props = defineProps({
|
|
|
+defineProps({
|
|
|
selectedRow: {
|
|
|
type: Object as PropType<Model.TradePositionRsp & { lastColor: string }>,
|
|
|
required: true,
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
-const accountStore = useAccountStore()
|
|
|
-const show = ref(true)
|
|
|
-const refresh = ref(false)
|
|
|
-const loading = ref(false)
|
|
|
-const dataList = ref<(Model.WrDeliveryAvalidHoldLBRsp & { deliveryLot: number })[]>([])
|
|
|
-
|
|
|
-useRequest(queryWrDeliveryAvalidHoldLB, {
|
|
|
- params: {
|
|
|
- goodsid: props.selectedRow.goodsid,
|
|
|
- },
|
|
|
- onSuccess: (res) => {
|
|
|
- dataList.value = res.data.map((e) => ({
|
|
|
- ...e,
|
|
|
- deliveryLot: 0,
|
|
|
- }))
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-// 已点选数量
|
|
|
-const totalQty = computed(() => dataList.value.reduce((pre, cur) => pre + cur.deliveryLot, 0))
|
|
|
-
|
|
|
-// 升贴水
|
|
|
-const discount = computed(() => {
|
|
|
- return dataList.value.reduce((pre, cur) => pre + cur.deliveryLot * cur.pricemove, 0)
|
|
|
-})
|
|
|
-
|
|
|
-// 最大交收数量
|
|
|
-const maxQty = (index: number) => {
|
|
|
- const item = dataList.value[index]
|
|
|
- const total = dataList.value.reduce((pre, cur, i) => i === index ? pre : pre + cur.deliveryLot, 0) // 计算已点选数量
|
|
|
- const max = props.selectedRow.enableqty - total
|
|
|
- return max >= item.avalidqty ? item.avalidqty : max
|
|
|
-}
|
|
|
-
|
|
|
-const onCancel = (isRefresh = false) => {
|
|
|
- show.value = false
|
|
|
- refresh.value = isRefresh
|
|
|
-}
|
|
|
-
|
|
|
-const onSubmit = async () => {
|
|
|
- if (dataList.value.some((e) => e.deliveryLot)) {
|
|
|
- const errMessage: string[] = []
|
|
|
- loading.value = true
|
|
|
- for (let i = 0; i < dataList.value.length; i++) {
|
|
|
- const e = dataList.value[i]
|
|
|
- if (e.deliveryLot) {
|
|
|
- await deliveryOrder({
|
|
|
- data: {
|
|
|
- ClientType: ClientType.Web,
|
|
|
- AccountID: accountStore.currentAccountId,
|
|
|
- XGoodsID: props.selectedRow.goodsid,
|
|
|
- DeliveryGoodsID: e.deliverygoodsid,
|
|
|
- ClientSerialNo: v4(),
|
|
|
- ClientOrderTime: moment(new Date()).format('YYYY-MM-DD HH:mm:ss'),
|
|
|
- XQty: e.deliveryLot,
|
|
|
- DeliveryQty: e.deliveryLot,
|
|
|
- DeliveryOrderDetail: {
|
|
|
- AccountID: e.accountid, // 对手方账号
|
|
|
- Qty: e.deliveryLot, // 点选数量
|
|
|
- LadingBillID: e.ladingbillid,// 提单ID
|
|
|
- SubNum: e.subnum, // 提单子单号
|
|
|
- WRFactorTypeID: e.wrfactortypeid, // 仓单要素类型ID
|
|
|
- }
|
|
|
- }
|
|
|
- }).catch((err) => {
|
|
|
- errMessage.push(err)
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- loading.value = false
|
|
|
- if (errMessage.length) {
|
|
|
- ElMessage.error('部分交收失败:' + errMessage[0])
|
|
|
- } else {
|
|
|
- ElMessage.success('提交成功')
|
|
|
- }
|
|
|
- onCancel(true)
|
|
|
- } else {
|
|
|
- ElMessage.warning('请输入交收数量')
|
|
|
- }
|
|
|
-}
|
|
|
-</script>
|
|
|
-
|
|
|
-<style lang="less">
|
|
|
-@import './index.less';
|
|
|
-</style>
|
|
|
+</script>
|