|
|
@@ -0,0 +1,115 @@
|
|
|
+<!-- 交易市场-预售转让-预售中签-详情 -->
|
|
|
+<template>
|
|
|
+ <app-drawer title="商品详情" v-model:show="show" :width="800" :refresh="refresh">
|
|
|
+ <div class="g-detail__desc">
|
|
|
+ <template v-for="(url, index) in detailBanners" :key="index">
|
|
|
+ <img :src="url" alt="" />
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <div class="g-detail__buy">
|
|
|
+ <div class="topic">
|
|
|
+ <div class="topic-left">
|
|
|
+ <span class="price-text">发行价</span>
|
|
|
+ <span class="price-unit">¥</span>
|
|
|
+ <span class="price-integer">{{ selectedRow.refprice?.toFixed(2) }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="topic-right">
|
|
|
+ <span>开始:{{ selectedRow.starttime }}</span>
|
|
|
+ <span>结束:{{ selectedRow.endtime }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="title">
|
|
|
+ <el-tag type="danger" round>摇号中签</el-tag>
|
|
|
+ <span>{{ selectedRow.sellname }}</span>
|
|
|
+ <span>{{ selectedRow.goodscode }}/{{ selectedRow.goodsname }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="qty">
|
|
|
+ <span>总量:{{ selectedRow.presaleqty }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info">
|
|
|
+ <ul>
|
|
|
+ <li>
|
|
|
+ <span>预售定金</span>
|
|
|
+ <span>{{ earnest }}</span>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <span>转让定金</span>
|
|
|
+ <span>{{ parsePercent(selectedRow.transferdepositratio) }}</span>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="g-detail__desc">
|
|
|
+ <template v-for="(url, index) in detailImages" :key="index">
|
|
|
+ <img :src="url" alt="" />
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <template #footer v-if="selectedRow.presalestatus === 2">
|
|
|
+ <div class="price">
|
|
|
+ <span class="price-text">发行价:</span>
|
|
|
+ <span class="price-unit">¥</span>
|
|
|
+ <span class="price-integer">{{ selectedRow.refprice?.toFixed(2) }}</span>
|
|
|
+ </div>
|
|
|
+ <el-button type="info" @click="onCancel(false)">取消</el-button>
|
|
|
+ <el-button type="primary" @click="onSubmit">我要认购</el-button>
|
|
|
+ <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)"
|
|
|
+ @closed="closeComponent" v-if="componentId" />
|
|
|
+ </template>
|
|
|
+ </app-drawer>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { shallowRef, computed, PropType, defineAsyncComponent } from 'vue'
|
|
|
+import { getFileUrl, parsePercent } from '@/filters'
|
|
|
+import { useComponent } from '@/hooks/component'
|
|
|
+import AppDrawer from '@pc/components/base/drawer/index.vue'
|
|
|
+
|
|
|
+const componentMap = new Map<string, unknown>([
|
|
|
+ ['delisting', defineAsyncComponent(() => import('./delisting/index.vue'))], // 摘牌
|
|
|
+])
|
|
|
+
|
|
|
+const { componentRef, componentId, openComponent, closeComponent } = useComponent(false)
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ selectedRow: {
|
|
|
+ type: Object as PropType<Model.PresaleAuctionsRsp>,
|
|
|
+ required: true,
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+// 商品banner
|
|
|
+const detailBanners = computed(() => {
|
|
|
+ const bannerpicurl = props.selectedRow.bannerpicurl ?? ''
|
|
|
+ return bannerpicurl?.split(',').map((path) => getFileUrl(path))
|
|
|
+})
|
|
|
+
|
|
|
+// 预售定金
|
|
|
+const earnest = computed(() => {
|
|
|
+ switch (props.selectedRow.presaledepositalgorithm) {
|
|
|
+ case 1:
|
|
|
+ return parsePercent(props.selectedRow.presaledepositvalue)
|
|
|
+ case 2:
|
|
|
+ return props.selectedRow.presaledepositvalue.toFixed(2)
|
|
|
+ default:
|
|
|
+ return '0.0'
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+// 商品图片列表
|
|
|
+const detailImages = computed(() => {
|
|
|
+ const pictureurls = props.selectedRow.pictureurls ?? ''
|
|
|
+ return pictureurls.split(',').map((path) => getFileUrl(path))
|
|
|
+})
|
|
|
+
|
|
|
+const show = shallowRef(true)
|
|
|
+const refresh = shallowRef(false)
|
|
|
+
|
|
|
+const onCancel = (isRefresh = false) => {
|
|
|
+ show.value = false
|
|
|
+ refresh.value = isRefresh
|
|
|
+}
|
|
|
+
|
|
|
+const onSubmit = () => {
|
|
|
+ openComponent('delisting')
|
|
|
+}
|
|
|
+</script>
|