huangxw 10 ヶ月 前
コミット
5fa929d50d

+ 23 - 0
src/api/cdt/menus/index.ts

@@ -83,3 +83,26 @@ export const copyTestPackage = (id?: string): any => {
         method: 'post'
     });
 };
+/**
+ * 获取检测套餐详细信息
+ * @param id
+ * @returns {*}
+ */
+export const getTestPackage = (id?: string): any => {
+    return request({
+        url: `/dgtmedicine/testPackage/getInfo/${id}`,
+        method: 'get'
+    });
+};
+/**
+ * 查询检测套餐项目列表
+ * @param id
+ * @returns {*}
+ */
+export const getTestPackageItems = (query?: any): any => {
+    return request({
+        url: `/dgtmedicine/testItem/list`,
+        method: 'get',
+        params: query
+    });
+};

+ 119 - 0
src/views/cdt/menus/detail/index.vue

@@ -0,0 +1,119 @@
+<template>
+    <div class="p-3">
+        <div class="bg-fff flex1 ov-hd d-flex flex-cln">
+            <div class="d-flex a-c pd-16 border-bottom">
+                <div class="f-s-20 c-333 f-w-7 mr-10">套餐详情</div>
+                <el-button @click="router.go(-1)" type="primary" text>
+                    <el-icon>
+                        <Back />
+                    </el-icon>
+                    返回上一级
+                </el-button>
+            </div>
+            <div class="flex1 over-auto">
+                <div class="pd-16">
+                    <div class="info-title mb-16">套餐基本信息</div>
+                    <el-descriptions :column="4">
+                        <el-descriptions-item label="套餐名称:">{{ form?.name || '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="套餐类型:">{{ selectDictLabel(dm_package_type, form?.publicFlag) || '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="制定规则:">{{ selectDictLabel(dm_permit_type,form?.permitType ) }}</el-descriptions-item>
+                        <el-descriptions-item v-if="form?.permitType === '1'" label="适用类型:">{{ selectDictLabels(vip_level, form?.permit, ',') || '-' }}</el-descriptions-item>
+                        <el-descriptions-item v-if="form?.permitType === '2'" label="适用企业:">{{ form?.permitCpyNames.toString()|| '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="检测周期:">{{ form?.period || '-' }}天</el-descriptions-item>
+                        <el-descriptions-item label="上架数量:">{{ form?.totalCount || '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="执行标准:">{{ form?.standard || '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="送样信息:" :span="2">{{ form?.description || '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="购买须知:" :span="2">{{ form?.purchaseNotes || '-' }}</el-descriptions-item>
+                        <el-descriptions-item label="失效日期:">{{ form?.validUntil || '-' }}</el-descriptions-item>
+                    </el-descriptions>
+                    <el-divider />
+                    <el-descriptions :column="4" direction="vertical">
+                        <el-descriptions-item label="封面图:">
+                            <el-image style="width: 100px; height: 100px" :src="form?.coverImg" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" :preview-src-list="[form?.coverImg]" fit="cover"></el-image>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="产品图:">
+                            <el-image style="width: 100px; height: 100px" :src="form?.proImg" fit="cover" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" :preview-src-list="[form?.proImg]"></el-image>
+                        </el-descriptions-item>
+                    </el-descriptions>
+                    <el-divider />
+                    <div class="info-title mb-16 d-flex">
+                        <span>检测项目明细</span>
+                        <span class="f-s-14">(共{{itemsInfo?.length}}项, 合计{{ totalCountPrice }}元)</span>
+                    </div>
+                    <vxe-table ref="tableRightRef" border :data="itemsInfo" :column-config="{ resizable: true }">
+                        <vxe-column type="seq" width="60" title="序号" align="center" />
+                        <vxe-column title="检测项目" align="center" field="name" min-width="100" :formatter="colNoData" />
+                        <vxe-column title="单价(元、批次)" align="center" field="price" min-width="100" :formatter="colNoData" />
+                        <vxe-column title="备注" align="center" field="description" min-width="100" :formatter="colNoData" />
+                    </vxe-table>
+                    <el-divider />
+                    <div class="info-title mb-16">套餐价格</div>
+                    <vxe-table ref="tableRightRef" border :data="form?.priceDetail" :column-config="{ resizable: true }">
+                        <vxe-column type="seq" width="60" title="序号" align="center" />
+                        <!-- <vxe-column v-if="form.permitType === '2'" title="企业名称" align="center" min-width="100" :formatter="colNoData">
+                            <template #default="{ row }">{{ row?.cpyName }}</template>
+                        </vxe-column> -->
+                        <vxe-column title="适用类型" align="center" field="memberLevelName" min-width="100" :formatter="colNoData" />
+                        <vxe-column title="折扣标准" align="center" min-width="100">
+                            <template #default="{ row }">{{ NP.times(row?.memberDiscount, 10) }}折</template>
+                        </vxe-column>
+                        <vxe-column title="最终售价" align="center" min-width="100">
+                            <template #default="{ row }">{{ row.price || '-' }}元</template>
+                        </vxe-column>
+                    </vxe-table>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup name="Menus-detail" lang="ts">
+import { TransferItems } from '../../models';
+import NP from 'number-precision';
+import { colNoData } from '@/utils/noData';
+import { debounce } from 'lodash';
+import { getTestPackage, getTestPackageItems } from '@/api/cdt/menus';
+const { query }: any = useRoute();
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { dm_package_type, dm_permit_type, vip_level } = toRefs<any>(proxy?.useDict('dm_package_type', 'dm_permit_type', 'vip_level'));
+// 字典
+const TransferItemsRef = ref<any>();
+const router = useRouter();
+const showSelectItems = ref(false);
+const form = ref<any>({
+   items: [],
+   priceDetail: [],
+   permitCpys: [],
+});
+const getDetail = async () => {
+    proxy?.$modal.loading('加载中...');
+    const res = await getTestPackage(query?.id).finally(() => {
+        proxy?.$modal.closeLoading();
+    });
+    if (!res || res.code !== 200) return;
+    console.log(res);
+    form.value = {
+        ...res.data
+    };
+};
+const itemsInfo = ref<any>([]);
+const getItems = async () => {
+    const res = await getTestPackageItems({
+        pageNum: 1,
+        pageSize: 1000,
+        packageId: query?.id
+    });
+    if (!res || res.code !== 200) return;
+    itemsInfo.value = res.rows;
+};
+// 合计价格
+const totalCountPrice = computed(() => {
+    return itemsInfo.value.reduce((total: number, item: any) => {
+        return NP.plus(total, item.price);
+    }, 0);
+});
+onMounted(() => {
+    getDetail()
+    getItems()
+});
+</script>

+ 4 - 4
src/views/cdt/menus/form/index.vue

@@ -56,8 +56,8 @@
                                 </el-form-item>
                             </el-col>
                             <el-col :span="8">
-                                <el-form-item label="套餐类型" prop="type">
-                                    <el-select v-model="form.type" clearable placeholder="请选择套餐类型">
+                                <el-form-item label="套餐类型" prop="publicFlag">
+                                    <el-select v-model="form.publicFlag" clearable placeholder="请选择套餐类型">
                                         <el-option v-for="item in dm_package_type" :key="item.value" :label="item.label" :value="item.value"></el-option>
                                     </el-select>
                                 </el-form-item>
@@ -164,7 +164,7 @@
     <TransferItems ref="TransferItemsRef" v-model:show="showSelectItems" @change="changeItems"></TransferItems>
 </template>
 
-<script setup name="Member-detail" lang="ts">
+<script setup name="Menus-form" lang="ts">
 import { AddBtn, SearchSelect } from '@/views/models';
 import { TransferItems } from '../../models';
 import NP from 'number-precision';
@@ -190,7 +190,7 @@ const rules = reactive<any>({
     name: [
         { required: true, message: '请输入套餐名称', trigger: 'blur' }
     ],
-    type: [
+    publicFlag: [
         { required: true, message: '请选择套餐类型', trigger: 'change' }
     ],
     permitType: [

+ 3 - 3
src/views/cdt/menus/index.vue

@@ -36,7 +36,7 @@
                 </div>
             </div>
             <div class="flex1 ov-hd pd-16">
-                <searchTabs v-model="queryParams.type" @change="handleQuery" :list="tabs" key-label="name" key-value="type" key-count="num"></searchTabs>
+                <searchTabs v-model="queryParams.publicFlag" @change="handleQuery" :list="tabs" key-label="name" key-value="type" key-count="num"></searchTabs>
                 <div class="pd-8"></div>
                 <vxe-table :loading="loading" border :data="list" min-height="0" max-height="100%">
                     <!-- 序号 -->
@@ -95,7 +95,7 @@
                             <span></span>
                             <el-button @click="copyItem(row)" text type="primary">复制</el-button>
                             <span></span>
-                            <el-button text type="primary">详情</el-button>
+                            <el-button @click="router.push({ path: 'menus-detail', query: { id: row?.id } })" text type="primary">详情</el-button>
                         </template>
                     </vxe-column>
                 </vxe-table>
@@ -115,7 +115,7 @@ const router = useRouter();
 const queryParams = ref<any>({
     pageNum: 1,
     pageSize: 10,
-    type: '1'
+    publicFlag: '1'
 });
 const queryFormRef = ref<any>();
 const loading = ref(false);