menuInfo.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <div class="flex1 over-auto">
  3. <div class="pd-16">
  4. <div class="info-title">套餐基本信息</div>
  5. <el-descriptions :column="4">
  6. <el-descriptions-item label="套餐名称:">{{ form?.name || '-' }}</el-descriptions-item>
  7. <el-descriptions-item label="套餐类型:">{{ selectDictLabel(dm_package_type, form?.publicFlag) || '-' }}</el-descriptions-item>
  8. <el-descriptions-item label="制定规则:">{{ selectDictLabel(dm_permit_type,form?.permitType ) }}</el-descriptions-item>
  9. <el-descriptions-item v-if="form?.permitType === '1'" label="适用类型:">{{ selectDictLabels(vip_level, form?.permit, ',') || '-' }}</el-descriptions-item>
  10. <el-descriptions-item v-if="form?.permitType === '2'" label="适用企业:">{{ form?.permitCpyNames.toString()|| '-' }}</el-descriptions-item>
  11. <el-descriptions-item label="检测周期:">{{ form?.period || '-' }}工作日</el-descriptions-item>
  12. <el-descriptions-item label="上架数量:">{{ form?.totalCount || '-' }}</el-descriptions-item>
  13. <el-descriptions-item></el-descriptions-item>
  14. <el-descriptions-item></el-descriptions-item>
  15. <el-descriptions-item label="执行标准:" :span="2">{{ form?.standard || '-' }}</el-descriptions-item>
  16. <el-descriptions-item label="送样信息:" :span="2">{{ form?.description || '-' }}</el-descriptions-item>
  17. <el-descriptions-item label="购买须知:" :span="2">{{ form?.purchaseNotes || '-' }}</el-descriptions-item>
  18. <el-descriptions-item label="创建人:">{{ form?.createName || '-' }}</el-descriptions-item>
  19. <el-descriptions-item label="创建时间:">{{ form?.createTime || '-' }}</el-descriptions-item>
  20. </el-descriptions>
  21. <el-divider />
  22. <el-descriptions :column="4" direction="vertical">
  23. <el-descriptions-item label="封面图:">
  24. <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>
  25. </el-descriptions-item>
  26. <el-descriptions-item v-if="form?.proImg" label="产品图:">
  27. <template v-for="(item, index) in form?.proImg.split(',')" :key="index">
  28. <el-image style="width: 100px; height: 100px;margin-right: 12px;" :src="item" fit="cover" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" :initial-index="index" :preview-src-list="[item]"></el-image>
  29. </template>
  30. </el-descriptions-item>
  31. </el-descriptions>
  32. <el-divider />
  33. <div class="info-title mb-16 d-flex">
  34. <span>检测项目明细</span>
  35. <span class="f-s-14">(共{{itemsInfo?.length}}项, 合计{{ totalCountPrice }}元)</span>
  36. </div>
  37. <vxe-table ref="tableRightRef" border :data="itemsInfo" :column-config="{ resizable: true }">
  38. <vxe-column type="seq" width="60" title="序号" align="center" />
  39. <vxe-column title="检测项目" align="center" field="name" min-width="100" :formatter="colNoData" />
  40. <vxe-column title="单价(元、批次)" align="center" field="price" min-width="100" :formatter="colNoData" />
  41. <vxe-column title="备注" align="center" field="description" min-width="100" :formatter="colNoData" />
  42. </vxe-table>
  43. </div>
  44. </div>
  45. </template>
  46. <script setup lang="ts">
  47. import { propTypes } from '@/utils/propTypes';
  48. import NP from 'number-precision';
  49. import { colNoData } from '@/utils/noData';
  50. import { debounce } from 'lodash';
  51. import { getTestPackage, getTestPackageItems } from '@/api/cdt/menus';
  52. const props = defineProps({
  53. info: propTypes.any.def({})
  54. });
  55. const { query }: any = useRoute();
  56. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  57. const { dm_package_type, dm_permit_type, vip_level } = toRefs<any>(proxy?.useDict('dm_package_type', 'dm_permit_type', 'vip_level'));
  58. const router = useRouter();
  59. const form = ref<any>({
  60. items: [],
  61. priceDetail: [],
  62. permitCpys: [],
  63. });
  64. const getDetail = async () => {
  65. proxy?.$modal.loading('加载中...');
  66. const res = await getTestPackage(props?.info?.packageId).finally(() => {
  67. proxy?.$modal.closeLoading();
  68. });
  69. if (!res || res.code !== 200) return;
  70. console.log(res);
  71. form.value = {
  72. ...res.data
  73. };
  74. };
  75. const itemsInfo = ref<any>([]);
  76. const getItems = async () => {
  77. const res = await getTestPackageItems({
  78. pageNum: 1,
  79. pageSize: 1000,
  80. packageId: props?.info?.packageId
  81. });
  82. if (!res || res.code !== 200) return;
  83. itemsInfo.value = res.rows;
  84. };
  85. // 合计价格
  86. const totalCountPrice = computed(() => {
  87. return itemsInfo.value.reduce((total: number, item: any) => {
  88. return NP.plus(total, item.price);
  89. }, 0);
  90. });
  91. onMounted(() => {
  92. getDetail()
  93. getItems()
  94. });
  95. </script>