|
|
@@ -11,13 +11,43 @@
|
|
|
</el-button>
|
|
|
</div>
|
|
|
<div class="flex1 over-auto">
|
|
|
- <el-form :model="form" :rules="rules" ref="formRef" label-width="auto" label-position="top">
|
|
|
+ <el-form ref="formRef" label-width="auto" label-position="top" :model="form" :rules="rules">
|
|
|
<div class="pd-16 border-bottom">
|
|
|
<el-form-item>
|
|
|
- <div class="flex1"><add-btn content="选择检测项目"></add-btn></div>
|
|
|
+ <div class="flex1">
|
|
|
+ <template v-if="!form.items.length">
|
|
|
+ <add-btn @click="showSelectItems = true" content="选择检测项目"></add-btn>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <div class="d-flex">
|
|
|
+ <div class="flex1 ov-hd f-s-16 c-333 f-w-5">已选择{{ form.items.length }}项检测项目,合计{{ totalCountPrice }}元</div>
|
|
|
+ <div>
|
|
|
+ <el-button @click="addItems" type="primary" text>
|
|
|
+ <el-icon><Plus /></el-icon>
|
|
|
+ 继续添加
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="clearItemsAdd" type="danger" text>
|
|
|
+ <el-icon><DeleteFilled /></el-icon>
|
|
|
+ 清空重选
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <vxe-table ref="tableRightRef" border :data="form.items" :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-column title="操作" align="center">
|
|
|
+ <template #default="{ $rowIndex }">
|
|
|
+ <el-button type="danger" @click="deleteRow($rowIndex)" text>删除</el-button>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ </vxe-table>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
- <div class="pd-16 border-bottom">
|
|
|
+ <div class="pd-16 border-bottom ov-hd">
|
|
|
<div class="info-title mb-10">套餐基本信息</div>
|
|
|
<el-row :gutter="90">
|
|
|
<el-col :span="8">
|
|
|
@@ -34,23 +64,27 @@
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="制定规则" prop="permitType">
|
|
|
- <el-radio-group v-model="form.permitType">
|
|
|
+ <el-radio-group v-model="form.permitType" @change="changePermitType">
|
|
|
<el-radio v-for="item in dm_permit_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="适用类型" prop="permit">
|
|
|
- <el-select v-model="form.permit" clearable multiple placeholder="请选择适用类型">
|
|
|
- <el-option v-for="item in vip_level" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="适用企业" prop="permit">
|
|
|
- <SearchSelect></SearchSelect>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
+ <template v-if="form.permitType === '1'">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="适用类型" prop="permit">
|
|
|
+ <el-select v-model="form.permit" @change="changePermit" clearable multiple placeholder="请选择适用类型">
|
|
|
+ <el-option v-for="item in vip_level" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ <template v-if="form.permitType === '2'">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="适用企业" prop="permitCpy">
|
|
|
+ <SearchSelect v-model="form.permitCpy"></SearchSelect>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="检测周期" prop="period">
|
|
|
<el-input v-model.number="form.period" clearable placeholder="请输入检测周期">
|
|
|
@@ -60,7 +94,7 @@
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="上架数量" prop="totalCount">
|
|
|
- <el-input v-model.number="form.totalCount" clearable placeholder="请输入套餐价格"></el-input>
|
|
|
+ <el-input v-model.number="form.totalCount" clearable placeholder="请输入上架数量"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
@@ -69,8 +103,8 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="送样信息" prop="price">
|
|
|
- <el-input type="textarea" placeholder="请输入送样信息" :rows="4" show-word-limit maxlength="100"></el-input>
|
|
|
+ <el-form-item label="送样信息" prop="description">
|
|
|
+ <el-input type="textarea" v-model="form.description" placeholder="请输入送样信息" :rows="4" show-word-limit maxlength="100"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
@@ -90,30 +124,154 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</div>
|
|
|
- <div class="pd-16">
|
|
|
- <div class="info-title">套餐价格确认</div>
|
|
|
+ <div v-if="form.permit" class="pd-16">
|
|
|
+ <div class="info-title mb-10">套餐价格确认</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" field="name" min-width="100" :formatter="colNoData" />
|
|
|
+ <vxe-column title="适用类型" align="center" field="name" min-width="100" :formatter="colNoData" />
|
|
|
+ <vxe-column title="折扣标准" align="center" min-width="100">
|
|
|
+ <template #default="{ row }">{{ NP.times(row?.discount, 10) }}折</template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="折扣后售价" align="center" field="name" min-width="100">
|
|
|
+ <template #default="{ row }">{{ row?.discountPrice }}元</template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="最终售价" align="center" min-width="100">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-input v-model="row.price" clearable placeholder="请输入最终售价">
|
|
|
+ <template #suffix>元</template>
|
|
|
+ </el-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ </vxe-table>
|
|
|
</div>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
+ <div class="d-flex a-c j-c pd-16">
|
|
|
+ <el-button @click="router.go(-1)">取消</el-button>
|
|
|
+ <el-button @click="save" color="#0079fe">暂存</el-button>
|
|
|
+ <el-button @click="save" type="primary">提交</el-button>
|
|
|
+ <el-button @click="submitForm" type="warning">立即上架</el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <TransferItems v-if="showSelectItems" v-model:show="showSelectItems"></TransferItems>
|
|
|
+ <TransferItems ref="TransferItemsRef" v-model:show="showSelectItems" @change="changeItems"></TransferItems>
|
|
|
</template>
|
|
|
|
|
|
<script setup name="Member-detail" lang="ts">
|
|
|
import { AddBtn, SearchSelect } from '@/views/models';
|
|
|
import { TransferItems } from '../../models';
|
|
|
+import NP from 'number-precision';
|
|
|
+import { colNoData } from '@/utils/noData';
|
|
|
+import { vipDiscountList } from '@/api/cdt/discount';
|
|
|
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(true);
|
|
|
+const showSelectItems = ref(false);
|
|
|
const form = ref<any>({
|
|
|
- items: []
|
|
|
+ items: [],
|
|
|
+ priceDetail: []
|
|
|
});
|
|
|
const rules = reactive({
|
|
|
items: [
|
|
|
- { required: true, message: '请选择检测项目', trigger: 'change' }
|
|
|
+ { required: true, message: '请选择检测项目', trigger: 'change' },
|
|
|
+ ],
|
|
|
+ name: [
|
|
|
+ { required: true, message: '请输入套餐名称', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ publicFlag: [
|
|
|
+ { required: true, message: '请选择套餐类型', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ permitType: [
|
|
|
+ { required: true, message: '请选择制定规则', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ permit: [
|
|
|
+ { required: true, message: '请选择适用类型', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ permitCpy: [
|
|
|
+ { required: true, message: '请选择适用企业', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ period: [
|
|
|
+ { required: true, message: '请输入检测周期', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ totalCount: [
|
|
|
+ { required: true, message: '请输入上架数量', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ standard: [
|
|
|
+ { required: true, message: '请输入执行标准', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ description: [
|
|
|
+ { required: true, message: '请输入送样信息', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ purchaseNotes: [
|
|
|
+ { required: true, message: '请输入购买须知', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ coverImg: [
|
|
|
+ { required: true, message: '请上传封面图', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ proImg: [
|
|
|
+ { required: true, message: '请上传产品图', trigger: 'blur' }
|
|
|
]
|
|
|
});
|
|
|
+const save = () => {
|
|
|
+ console.log('暂存');
|
|
|
+};
|
|
|
+const submitForm = () => {
|
|
|
+ console.log('立即上架');
|
|
|
+};
|
|
|
+// 合计价格
|
|
|
+const totalCountPrice = computed(() => {
|
|
|
+ return form.value.items.reduce((total: number, item: any) => {
|
|
|
+ return NP.plus(total, item.price);
|
|
|
+ }, 0);
|
|
|
+});
|
|
|
+const changeItems = (val: any) => {
|
|
|
+ form.value.items = val;
|
|
|
+ changePermitType();
|
|
|
+};
|
|
|
+// 继续添加方法
|
|
|
+const addItems = () => {
|
|
|
+ // 保留之前选中
|
|
|
+ TransferItemsRef.value?.setSelectItems(form.value.items);
|
|
|
+ showSelectItems.value = true;
|
|
|
+};
|
|
|
+// 清空重选方法
|
|
|
+const clearItemsAdd = () => {
|
|
|
+ form.value.items = [];
|
|
|
+ TransferItemsRef.value?.clearAll();
|
|
|
+ showSelectItems.value = true;
|
|
|
+};
|
|
|
+// 删除行
|
|
|
+const deleteRow = (index: number) => {
|
|
|
+ form.value.items.splice(index, 1);
|
|
|
+};
|
|
|
+const discounts = ref<any>([]);
|
|
|
+const getDiscount = async () => {
|
|
|
+ // 获取折扣
|
|
|
+ const res = await vipDiscountList({ pageSize: 1000, pageNum: 1 });
|
|
|
+ if (!res || res.code !== 200) return;
|
|
|
+ discounts.value = res.rows;
|
|
|
+};
|
|
|
+const changePermit = (val: string[]) => {
|
|
|
+ console.log(val);
|
|
|
+ form.value.priceDetail = discounts.value.filter(({ level }) => val.includes(level + '')).map(item => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ memberLevel: item.level,
|
|
|
+ originalPrice: totalCountPrice.value,
|
|
|
+ discountPrice: NP.times(item.discount, totalCountPrice.value),
|
|
|
+ price: NP.times(item.discount, totalCountPrice.value) || undefined
|
|
|
+ };
|
|
|
+ });
|
|
|
+};
|
|
|
+const changePermitType = () => {
|
|
|
+ form.value.permit = [];
|
|
|
+ form.value.permitCpy = '';
|
|
|
+ form.value.priceDetail = [];
|
|
|
+};
|
|
|
+onMounted(() => {
|
|
|
+ getDiscount();
|
|
|
+});
|
|
|
</script>
|