|
@@ -45,7 +45,7 @@
|
|
|
<vxe-column title="套餐名称" fixed="left" align="center" field="name" min-width="100" :formatter="colNoData" />
|
|
<vxe-column title="套餐名称" fixed="left" align="center" field="name" min-width="100" :formatter="colNoData" />
|
|
|
<vxe-column title="适用对象" field="applyType" min-width="100">
|
|
<vxe-column title="适用对象" field="applyType" min-width="100">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
- <view class="d-flex flex-cln">
|
|
|
|
|
|
|
+ <view class="d-flex flex-cln" v-if="row?.permitType == '1'">
|
|
|
<template v-for="(item, index) in row?.priceDetail" :key="index">
|
|
<template v-for="(item, index) in row?.priceDetail" :key="index">
|
|
|
<view>
|
|
<view>
|
|
|
{{ item?.memberLevelName }}-{{ NP.times(item?.memberDiscount, 10) }}折
|
|
{{ item?.memberLevelName }}-{{ NP.times(item?.memberDiscount, 10) }}折
|
|
@@ -53,6 +53,14 @@
|
|
|
</view>
|
|
</view>
|
|
|
</template>
|
|
</template>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
+ <view class="d-flex flex-cln" v-if="row?.permitType == '2'">
|
|
|
|
|
+ <view>
|
|
|
|
|
+ {{ row?.permitCpyNames?.join(',') }}-{{
|
|
|
|
|
+ NP.times(row?.priceDetail[0]?.memberDiscount, 10)
|
|
|
|
|
+ }}折
|
|
|
|
|
+ <span class="c-333 f-w-5">({{ row?.priceDetail[0]?.price }})</span>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
</template>
|
|
</template>
|
|
|
</vxe-column>
|
|
</vxe-column>
|
|
|
<vxe-column title="检测项目" min-width="140">
|
|
<vxe-column title="检测项目" min-width="140">
|
|
@@ -69,6 +77,22 @@
|
|
|
</vxe-column>
|
|
</vxe-column>
|
|
|
<vxe-column title="上架数量" field="totalCount" width="80" :formatter="colNoData"></vxe-column>
|
|
<vxe-column title="上架数量" field="totalCount" width="80" :formatter="colNoData"></vxe-column>
|
|
|
<vxe-column title="销量" field="orderedCount" width="80" :formatter="colNoData"></vxe-column>
|
|
<vxe-column title="销量" field="orderedCount" width="80" :formatter="colNoData"></vxe-column>
|
|
|
|
|
+ <vxe-column title="开始时间" field="validFrom" width="160">
|
|
|
|
|
+ <template #default="{ row }">{{ row?.validFrom }}</template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <vxe-column title="结束时间" field="validUntil" width="160">
|
|
|
|
|
+ <template #default="{ row }">{{ row?.validUntil }}</template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <vxe-column title="剩余时间" field="restDay" width="100">
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
|
+ <span v-if="row.status == 0">未上架</span>
|
|
|
|
|
+ <span v-if="row.status == 2"></span>
|
|
|
|
|
+ <span v-if="row.status == 1 && new Date(row?.validUntil ) > new Date()">{{Math.floor((new Date(row?.validUntil).getTime()-new Date().getTime())/(3600*24*1000))+1 }}天</span>
|
|
|
|
|
+ <span v-else>已过期</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <vxe-column title="创建人" field="createName" width="100"></vxe-column>
|
|
|
|
|
+ <vxe-column title="创建时间" field="createTime" width="160"></vxe-column>
|
|
|
<vxe-column title="套餐状态" align="center" width="90" fixed="right">
|
|
<vxe-column title="套餐状态" align="center" width="90" fixed="right">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
<span v-if="+row?.status === 0" class="c-danger">未上架</span>
|
|
<span v-if="+row?.status === 0" class="c-danger">未上架</span>
|
|
@@ -86,7 +110,7 @@
|
|
|
<template v-if="+row?.status === 1">
|
|
<template v-if="+row?.status === 1">
|
|
|
<el-button @click="soldOut(row)" text type="danger">下架</el-button>
|
|
<el-button @click="soldOut(row)" text type="danger">下架</el-button>
|
|
|
<span></span>
|
|
<span></span>
|
|
|
- <el-button text type="primary">分享</el-button>
|
|
|
|
|
|
|
+ <el-button text type="primary" @click="showShareImg(row)">分享</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
<template v-if="+row?.status === 2">
|
|
<template v-if="+row?.status === 2">
|
|
|
<el-button @click="putaway(row)" text type="primary">上架</el-button>
|
|
<el-button @click="putaway(row)" text type="primary">上架</el-button>
|
|
@@ -105,9 +129,17 @@
|
|
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <el-dialog title="套餐分享" v-model="shareDialog" width="350px">
|
|
|
|
|
+ <div class="d-flex flex-cln">
|
|
|
|
|
+ {{ sharePkgName }}
|
|
|
|
|
+ <el-button type="primary" @click="download">下载</el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <vue-qr ref="qrCode" :text="shareText" v-if="shareText" :size="300"></vue-qr>
|
|
|
|
|
+ </el-dialog>
|
|
|
<rowItems v-if="showRowItems" v-model:show="showRowItems" :packageId="rowId"></rowItems>
|
|
<rowItems v-if="showRowItems" v-model:show="showRowItems" :packageId="rowId"></rowItems>
|
|
|
</template>
|
|
</template>
|
|
|
<script setup name="Menus" lang="ts">
|
|
<script setup name="Menus" lang="ts">
|
|
|
|
|
+import vueQr from 'vue-qr/src/packages/vue-qr.vue'
|
|
|
import { copyTestPackage, testPackageList, testPackageListCount, testPackageSale, testPackageUnSale } from '@/api/cdt/menus';
|
|
import { copyTestPackage, testPackageList, testPackageListCount, testPackageSale, testPackageUnSale } from '@/api/cdt/menus';
|
|
|
import { colNoData } from '@/utils/noData';
|
|
import { colNoData } from '@/utils/noData';
|
|
|
import { searchTabs } from '@/views/models';
|
|
import { searchTabs } from '@/views/models';
|
|
@@ -146,7 +178,9 @@ const resetQuery = () => {
|
|
|
// 获取tabs统计数据
|
|
// 获取tabs统计数据
|
|
|
const tabs = ref<any[]>([]);
|
|
const tabs = ref<any[]>([]);
|
|
|
const getTabsCount = debounce(async () => {
|
|
const getTabsCount = debounce(async () => {
|
|
|
- const res = await testPackageListCount({ ...queryParams.value });
|
|
|
|
|
|
|
+ const params = { ...queryParams.value }
|
|
|
|
|
+ params.publicFlag = ''
|
|
|
|
|
+ const res = await testPackageListCount(params);
|
|
|
if (!res || res.code !== 200) return;
|
|
if (!res || res.code !== 200) return;
|
|
|
// this.tabsList = res.rows;
|
|
// this.tabsList = res.rows;
|
|
|
tabs.value = res.data;
|
|
tabs.value = res.data;
|
|
@@ -205,6 +239,25 @@ const queryRowItems = (row: any) => {
|
|
|
rowId.value = row?.id;
|
|
rowId.value = row?.id;
|
|
|
showRowItems.value = true;
|
|
showRowItems.value = true;
|
|
|
};
|
|
};
|
|
|
|
|
+//二维码分享
|
|
|
|
|
+const shareText = ref('');
|
|
|
|
|
+const sharePkgName = ref('');
|
|
|
|
|
+const shareDialog = ref(false);
|
|
|
|
|
+const showShareImg = (row) => {
|
|
|
|
|
+ shareText.value = `http://dm.share.yujin.shuziyunyao.com/package?id=${row?.id}`;
|
|
|
|
|
+ sharePkgName.value = row?.name;
|
|
|
|
|
+ shareDialog.value = true;
|
|
|
|
|
+}
|
|
|
|
|
+const qrCode = ref<any>(null)
|
|
|
|
|
+const download = () => {
|
|
|
|
|
+ const a: any = document.createElement('a')
|
|
|
|
|
+ // 下载的文件名
|
|
|
|
|
+ a.download = `${sharePkgName.value}.png`
|
|
|
|
|
+ // url
|
|
|
|
|
+ a.href = qrCode.value.$el.src
|
|
|
|
|
+ // 触发点击
|
|
|
|
|
+ a.click()
|
|
|
|
|
+}
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
getTabsCount();
|
|
getTabsCount();
|
|
|
getList();
|
|
getList();
|