mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2026-11-14 04:49:00 +08:00
- buyer(95) / seller(169) / im(53) / manager(280) 共 597 个组件全部从 Options API 转换为 <script setup> - 四端 vuex 全部移除,状态管理统一迁移至 pinia 4(stores/ 目录) - util.js 等基础设施去除 vm 首参依赖;全局属性($Message/$filters 等)在 script 内改为具名导入 - 被外部 ref 访问的公共组件均已补齐 defineExpose(清单见各端 MIGRATION-VUE3.md) - 各端 eslint 启用 vue/component-api-style 防止新代码回退 Options API - 四端 yarn build 全部通过;迁移约定与注意事项已更新至各端 MIGRATION-VUE3.md
140 lines
4.4 KiB
Vue
140 lines
4.4 KiB
Vue
<template>
|
|
<div>
|
|
<el-card>
|
|
<el-form ref="form" :model="form" label-width="120px">
|
|
<el-form-item label="活动名称" required>
|
|
<el-input v-model="form.promotionName" style="width: 320px" />
|
|
</el-form-item>
|
|
<el-form-item label="活动时间" required>
|
|
<el-date-picker
|
|
v-model="form.rangeTime"
|
|
class="nth-item-range-picker"
|
|
type="datetimerange"
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
start-placeholder="开始时间"
|
|
end-placeholder="结束时间"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="第N件" required>
|
|
<el-input-number v-model="form.nthNum" :min="2" />
|
|
<span class="tip">例如 2 表示第 2 件享受优惠</span>
|
|
</el-form-item>
|
|
<el-form-item label="优惠方式" required>
|
|
<el-select v-model="form.discountType" style="width: 200px">
|
|
<el-option label="半价" value="HALF" />
|
|
<el-option label="免单" value="FREE" />
|
|
<el-option label="打折" value="RATE" />
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item v-if="form.discountType === 'RATE'" label="折扣" required>
|
|
<el-input-number v-model="form.discountValue" :min="0.1" :max="9.9" :precision="1" />
|
|
<span class="tip">如 8 表示 8 折</span>
|
|
</el-form-item>
|
|
<el-form-item label="活动说明">
|
|
<el-input v-model="form.description" type="textarea" style="width: 360px" />
|
|
</el-form-item>
|
|
<el-form-item label="活动商品">
|
|
<el-button type="primary" @click="openGoods">选择商品</el-button>
|
|
<el-table v-if="form.promotionGoodsList.length" :data="form.promotionGoodsList" border class="mt_10">
|
|
<el-table-column prop="goodsName" label="商品" />
|
|
<el-table-column prop="originalPrice" label="原价" width="100" />
|
|
</el-table>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" @click="submit">保存</el-button>
|
|
<el-button @click="$router.back()">返回</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-card>
|
|
<liliDialog ref="liliDialog" @selectedGoodsData="selectedGoods" />
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { onMounted, reactive, ref } from "vue";
|
|
import { useRoute, useRouter } from "vue-router";
|
|
import { getNthItemDiscountDetail, saveNthItemDiscount, editNthItemDiscount } from "@/api/promotion.js";
|
|
import { Message } from "@/utils/message";
|
|
import { unixToDate } from "@/utils/filters";
|
|
|
|
const route = useRoute();
|
|
const router = useRouter();
|
|
|
|
const liliDialog = ref(null);
|
|
|
|
const form = reactive({
|
|
promotionName: "",
|
|
rangeTime: [],
|
|
nthNum: 2,
|
|
discountType: "HALF",
|
|
discountValue: 8,
|
|
description: "",
|
|
scopeType: "PORTION_GOODS",
|
|
promotionGoodsList: [],
|
|
});
|
|
|
|
onMounted(() => {
|
|
if (route.query.id) {
|
|
getNthItemDiscountDetail(route.query.id).then((res) => {
|
|
if (res.success) {
|
|
Object.assign(form, res.result);
|
|
form.rangeTime = [new Date(res.result.startTime), new Date(res.result.endTime)];
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
function openGoods() {
|
|
liliDialog.value.open("goods");
|
|
}
|
|
function selectedGoods(list) {
|
|
list.forEach((g) => {
|
|
if (!form.promotionGoodsList.find((i) => i.skuId === g.id)) {
|
|
form.promotionGoodsList.push({
|
|
skuId: g.id,
|
|
goodsId: g.goodsId,
|
|
goodsName: g.goodsName,
|
|
originalPrice: g.price,
|
|
price: g.price,
|
|
quantity: g.quantity,
|
|
});
|
|
}
|
|
});
|
|
}
|
|
function submit() {
|
|
const payload = { ...form };
|
|
if (payload.rangeTime && payload.rangeTime.length === 2) {
|
|
const start =
|
|
payload.rangeTime[0] instanceof Date
|
|
? payload.rangeTime[0]
|
|
: new Date(payload.rangeTime[0]);
|
|
const end =
|
|
payload.rangeTime[1] instanceof Date
|
|
? payload.rangeTime[1]
|
|
: new Date(payload.rangeTime[1]);
|
|
payload.startTime = unixToDate(start.getTime() / 1000);
|
|
payload.endTime = unixToDate(end.getTime() / 1000);
|
|
}
|
|
delete payload.rangeTime;
|
|
const req = payload.id ? editNthItemDiscount(payload) : saveNthItemDiscount(payload);
|
|
req.then((res) => {
|
|
if (res.success) {
|
|
Message.success("保存成功");
|
|
router.back();
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.tip { margin-left: 8px; color: #999; }
|
|
.mt_10 { margin-top: 10px; }
|
|
|
|
:deep(.nth-item-range-picker.el-date-editor--datetimerange) {
|
|
width: 380px;
|
|
max-width: 380px;
|
|
flex-grow: 0;
|
|
--el-date-editor-width: 380px;
|
|
}
|
|
</style>
|