修改拼团跟砍价推荐逻辑

This commit is contained in:
于肖磊
2026-06-02 11:00:38 +08:00
parent 9491b7fb10
commit 0d3d377cc4
17 changed files with 59 additions and 59 deletions

View File

@ -8,14 +8,14 @@ class PluginsBargainAPI {
* @param bargain_order_by_type 排序类型
* @param bargain_order_by_rule 排序规则
* @param bargain_number 显示数量
* @param bargain_is_recommend 是否推荐 0/1
* @param bargain_is_recommended 是否推荐 0/1
*/
static getAutoList(data: {
bargain_keywords?: string;
bargain_order_by_type?: string | number;
bargain_order_by_rule?: string | number;
bargain_number?: number | string;
bargain_is_recommend?: number;
bargain_is_recommended?: number;
}) {
return api_request({
url: `plugins/index/pluginsname/bargain/pluginscontrol/diybargain/pluginsaction/autobargainlist`,

View File

@ -8,14 +8,14 @@ class PluginsGroupbuyAPI {
* @param groupby_order_by_type 排序类型
* @param groupby_order_by_rule 排序规则
* @param groupby_number 显示数量
* @param groupbuy_is_recommend 是否推荐 0/1
* @param groupbuy_is_recommended 是否推荐 0/1
*/
static getAutoList(data: {
groupby_keywords?: string;
groupby_order_by_type?: string | number;
groupby_order_by_rule?: string | number;
groupby_number?: number | string;
groupbuy_is_recommend?: number;
groupbuy_is_recommended?: number;
}) {
return api_request({
url: `plugins/index/pluginsname/groupbuy/pluginscontrol/diygroupbuy/pluginsaction/autogroupbuylist`,

View File

@ -130,7 +130,7 @@ class UrlValueAPI {
page_size: number | string;
keywords?: string;
status?: string;
is_recommend?: number;
is_recommended?: number;
}) {
return api_request({
url: `plugins/index/pluginsname/groupbuy/pluginscontrol/diygroupbuy/pluginsaction/index`,
@ -144,7 +144,7 @@ class UrlValueAPI {
page_size: number | string;
keywords?: string;
status?: string;
is_recommend?: number;
is_recommended?: number;
}) {
return api_request({
url: `plugins/index/pluginsname/bargain/pluginscontrol/diybargain/pluginsaction/index`,

View File

@ -57,7 +57,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="是否推荐">
<el-switch v-model="is_recommend_model" :active-value="1" :inactive-value="0" />
<el-switch v-model="is_recommended_model" :active-value="1" :inactive-value="0" />
</el-form-item>
</template>
<!-- 砍价自动筛选字段与 autobargainlist 接口一致 -->
@ -76,7 +76,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="是否推荐">
<el-switch v-model="is_recommend_model" :active-value="1" :inactive-value="0" />
<el-switch v-model="is_recommended_model" :active-value="1" :inactive-value="0" />
</el-form-item>
</template>
<!-- 直播自动筛选字段与 autolivelist 接口一致 -->
@ -381,15 +381,15 @@
const keywords = ref(props.value.keywords);
const form = ref(props.value);
/** 拼团/砍价是否推荐:直接读写 props.value保证预览列表 watch 能感知变更 */
const is_recommend_model = computed({
const is_recommended_model = computed({
get() {
return Number(props.value?.is_recommend ?? 0);
return Number(props.value?.is_recommended ?? 0);
},
set(val: number) {
if (!props.value) {
return;
}
props.value.is_recommend = Number(val);
props.value.is_recommended = Number(val);
},
});
const drag_list = ref(props.list);
@ -506,8 +506,8 @@
} else if (['plugins_groupbuy', 'plugins_bargain'].includes(props.type)) {
form.value.order_by_type = Number(props.value?.order_by_type ?? 0);
form.value.order_by_rule = Number(props.value?.order_by_rule ?? 0);
if (props.value?.is_recommend === undefined) {
form.value.is_recommend = 0;
if (props.value?.is_recommended === undefined) {
form.value.is_recommended = 0;
}
} else {
form.value.order_by_type = Number(props.value?.order_by_type || 0);

View File

@ -3,8 +3,8 @@
<div class="flex-row jc-e gap-20 mb-20 align-c">
<div class="flex-row align-c gap-12">
<div class="title horizontal-title">是否推荐</div>
<el-select v-model="is_recommend" class="search-w" placeholder="请选择" clearable @change="handle_search">
<el-option v-for="item in is_recommend_list" :key="item.value" :label="item.name" :value="item.value" />
<el-select v-model="is_recommended" class="search-w" placeholder="请选择" clearable @change="handle_search">
<el-option v-for="item in is_recommended_list" :key="item.value" :label="item.name" :value="item.value" />
</el-select>
</div>
<div class="flex-row align-c gap-12">
@ -31,7 +31,7 @@
</template>
</el-table-column>
<el-table-column prop="title" label="标题" />
<el-table-column prop="is_recommend_name" label="是否推荐" width="100" />
<el-table-column prop="is_recommended_name" label="是否推荐" width="100" />
<template #empty>
<no-data :text="empty_text"></no-data>
</template>
@ -47,7 +47,7 @@ import { useLinkPickerLoad } from '@/hooks/use-link-picker-load';
import { toRef } from 'vue';
/**
* 手动选择砍价弹窗
* 列表接口 diybargain/indexpage、page_size、keywords、status、is_recommend
* 列表接口 diybargain/indexpage、page_size、keywords、status、is_recommended
*/
import UrlValueAPI from '@/api/url-value';
@ -70,19 +70,19 @@ const props = defineProps({
default: false,
},
});
const is_recommend_list = [
const is_recommended_list = [
{ name: '是', value: 1 },
{ name: '否', value: 0 },
];
const modelValue = defineModel({ type: Object, default: {} });
const tableData = ref<pageLinkList[]>([]);
const search_value = ref('');
const is_recommend = ref<number | undefined>(undefined);
const is_recommended = ref<number | undefined>(undefined);
const loading = ref(false);
const resetFields = () => {
template_selection.value = '';
search_value.value = '';
is_recommend.value = undefined;
is_recommended.value = undefined;
};
const template_selection = ref('');
@ -96,7 +96,7 @@ const get_list = (new_page: number) => {
page_size: page_size.value,
keywords: search_value.value,
status: '',
...(is_recommend.value !== undefined && is_recommend.value !== null ? { is_recommend: is_recommend.value } : {}),
...(is_recommended.value !== undefined && is_recommended.value !== null ? { is_recommended: is_recommended.value } : {}),
};
loading.value = true;
UrlValueAPI.getPluginBargainList(new_data)

View File

@ -3,8 +3,8 @@
<div class="flex-row jc-e gap-20 mb-20 align-c">
<div class="flex-row align-c gap-12">
<div class="title horizontal-title">是否推荐</div>
<el-select v-model="is_recommend" class="search-w" placeholder="请选择" clearable @change="handle_search">
<el-option v-for="item in is_recommend_list" :key="item.value" :label="item.name" :value="item.value" />
<el-select v-model="is_recommended" class="search-w" placeholder="请选择" clearable @change="handle_search">
<el-option v-for="item in is_recommended_list" :key="item.value" :label="item.name" :value="item.value" />
</el-select>
</div>
<div class="flex-row align-c gap-12">
@ -31,7 +31,7 @@
</template>
</el-table-column>
<el-table-column prop="title" label="标题" />
<el-table-column prop="is_recommend_name" label="是否推荐" width="100" />
<el-table-column prop="is_recommended_name" label="是否推荐" width="100" />
<template #empty>
<no-data :text="empty_text"></no-data>
</template>
@ -47,7 +47,7 @@ import { useLinkPickerLoad } from '@/hooks/use-link-picker-load';
import { toRef } from 'vue';
/**
* 手动选择拼团弹窗
* 列表接口 diygroupbuy/indexpage、page_size、keywords、status、is_recommend
* 列表接口 diygroupbuy/indexpage、page_size、keywords、status、is_recommended
*/
import UrlValueAPI from '@/api/url-value';
@ -70,19 +70,19 @@ const props = defineProps({
default: false,
},
});
const is_recommend_list = [
const is_recommended_list = [
{ name: '是', value: 1 },
{ name: '否', value: 0 },
];
const modelValue = defineModel({ type: Object, default: {} });
const tableData = ref<pageLinkList[]>([]);
const search_value = ref('');
const is_recommend = ref<number | undefined>(undefined);
const is_recommended = ref<number | undefined>(undefined);
const loading = ref(false);
const resetFields = () => {
template_selection.value = '';
search_value.value = '';
is_recommend.value = undefined;
is_recommended.value = undefined;
};
const template_selection = ref('');
@ -96,7 +96,7 @@ const get_list = (new_page: number) => {
page_size: page_size.value,
keywords: search_value.value,
status: '',
...(is_recommend.value !== undefined && is_recommend.value !== null ? { is_recommend: is_recommend.value } : {}),
...(is_recommended.value !== undefined && is_recommended.value !== null ? { is_recommended: is_recommended.value } : {}),
};
loading.value = true;
UrlValueAPI.getPluginGroupbuyList(new_data)

View File

@ -240,13 +240,13 @@ onMounted(() => {
});
const get_products = () => {
const { number, order_by_type, order_by_rule, keywords, is_recommend } = form.value;
const { number, order_by_type, order_by_rule, keywords, is_recommended } = form.value;
const params = {
bargain_keywords: keywords,
bargain_order_by_type: order_by_type,
bargain_order_by_rule: order_by_rule,
bargain_number: number,
bargain_is_recommend: Number(is_recommend ?? 0),
bargain_is_recommended: Number(is_recommended ?? 0),
};
PluginsBargainAPI.getAutoList(params).then((res: any) => {
if (!isEmpty(res.data)) {
@ -261,11 +261,11 @@ watchEffect(() => {
list.value = props.newList;
}
});
// 取出监听的数据(显式读取 is_recommend确保嵌套 content 变更能触发 watch
// 取出监听的数据(显式读取 is_recommended,确保嵌套 content 变更能触发 watch
const watch_data = computed(() => {
const { category_ids, brand_ids, number, order_by_type, order_by_rule, data_type, data_list, keywords } = form.value;
const is_recommend = Number(form.value.is_recommend ?? 0);
return { category_ids, brand_ids, number, order_by_type, order_by_rule, data_type, data_list, keyword: keywords, is_recommend };
const is_recommended = Number(form.value.is_recommended ?? 0);
return { category_ids, brand_ids, number, order_by_type, order_by_rule, data_type, data_list, keyword: keywords, is_recommended };
});
// 初始化的时候不执行, 监听数据变化
watch(watch_data, (val, oldVal) => {

View File

@ -74,7 +74,7 @@ watch(
new_data.content.order_by_type = new_data.content.tabs_list[tabs_active_index.value].order_by_type;
new_data.content.order_by_rule = new_data.content.tabs_list[tabs_active_index.value].order_by_rule;
const tab = new_data.content.tabs_list[tabs_active_index.value];
new_data.content.is_recommend = Number(tab.is_recommend ?? 0);
new_data.content.is_recommended = Number(tab.is_recommended ?? 0);
new_data.content.data_list = new_data.content.tabs_list[tabs_active_index.value].data_list;
new_data.content.data_auto_list = new_data.content.tabs_list[tabs_active_index.value].data_auto_list;

View File

@ -206,7 +206,7 @@ const tabs_add = () => {
data_type: '0',
category: [],
data_ids: [],
is_recommend: 0,
is_recommended: 0,
number: 4,
order_by_type: '0',
order_by_rule: '0',

View File

@ -247,13 +247,13 @@ onMounted(() => {
});
const get_products = () => {
const { number, order_by_type, order_by_rule, keywords, is_recommend } = form.value;
const { number, order_by_type, order_by_rule, keywords, is_recommended } = form.value;
const params = {
groupby_keywords: keywords,
groupby_order_by_type: order_by_type,
groupby_order_by_rule: order_by_rule,
groupby_number: number,
groupbuy_is_recommend: Number(is_recommend ?? 0),
groupbuy_is_recommended: Number(is_recommended ?? 0),
};
PluginsGroupbuyAPI.getAutoList(params).then((res: any) => {
if (!isEmpty(res.data)) {
@ -268,11 +268,11 @@ watchEffect(() => {
list.value = props.newList;
}
});
// 取出监听的数据(显式读取 is_recommend确保嵌套 content 变更能触发 watch
// 取出监听的数据(显式读取 is_recommended,确保嵌套 content 变更能触发 watch
const watch_data = computed(() => {
const { category_ids, brand_ids, number, order_by_type, order_by_rule, data_type, data_list, keywords } = form.value;
const is_recommend = Number(form.value.is_recommend ?? 0);
return { category_ids, brand_ids, number, order_by_type, order_by_rule, data_type, data_list, keyword: keywords, is_recommend };
const is_recommended = Number(form.value.is_recommended ?? 0);
return { category_ids, brand_ids, number, order_by_type, order_by_rule, data_type, data_list, keyword: keywords, is_recommended };
});
// 初始化的时候不执行, 监听数据变化
watch(watch_data, (val, oldVal) => {

View File

@ -74,7 +74,7 @@ watch(
new_data.content.order_by_type = new_data.content.tabs_list[tabs_active_index.value].order_by_type;
new_data.content.order_by_rule = new_data.content.tabs_list[tabs_active_index.value].order_by_rule;
const tab = new_data.content.tabs_list[tabs_active_index.value];
new_data.content.is_recommend = Number(tab.is_recommend ?? 0);
new_data.content.is_recommended = Number(tab.is_recommended ?? 0);
new_data.content.data_list = new_data.content.tabs_list[tabs_active_index.value].data_list;
new_data.content.data_auto_list = new_data.content.tabs_list[tabs_active_index.value].data_auto_list;

View File

@ -206,7 +206,7 @@ const tabs_add = () => {
data_type: '0',
category: [],
data_ids: [],
is_recommend: 0,
is_recommended: 0,
number: 4,
order_by_type: '0',
order_by_rule: '0',

View File

@ -10,7 +10,7 @@ interface DefaultPluginsCutpriceList {
theme: string;
data_type: string;
keywords: string;
is_recommend: number;
is_recommended: number;
carousel_col: number;
category_ids: string[];
brand_ids: string[];
@ -112,7 +112,7 @@ const defaultPluginsCutpriceList: DefaultPluginsCutpriceList = {
// 商品关键字
keywords: '',
// 是否推荐(筛选砍价)
is_recommend: 0,
is_recommended: 0,
// 轮播列数
carousel_col: 3,
// 商品列表

View File

@ -15,7 +15,7 @@ interface articleTabsList {
desc: string;
data_type: string;
keywords: string;
is_recommend: number;
is_recommended: number;
category_ids: string[];
brand_ids: string[];
data_ids: string[];
@ -178,10 +178,10 @@ const defaultProductList: DefaultProductList = {
carousel_col: 3,
// 选项卡数据
tabs_list: [
{ id: '1', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '热门推荐', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '2', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试一', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '3', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试二', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '4', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试三', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '1', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '热门推荐', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '2', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试一', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '3', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试二', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '4', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试三', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
],
// 选中的内容索引
tabs_active_index: 0,

View File

@ -10,7 +10,7 @@ interface DefaultPluginsGroupbuyList {
theme: string;
data_type: string;
keywords: string;
is_recommend: number;
is_recommended: number;
carousel_col: number;
category_ids: string[];
brand_ids: string[];
@ -112,7 +112,7 @@ const defaultPluginsGroupbuyList: DefaultPluginsGroupbuyList = {
// 商品关键字
keywords: '',
// 是否推荐(筛选拼团)
is_recommend: 0,
is_recommended: 0,
// 轮播列数
carousel_col: 3,
// 商品列表

View File

@ -15,7 +15,7 @@ interface articleTabsList {
desc: string;
data_type: string;
keywords: string;
is_recommend: number;
is_recommended: number;
category_ids: string[];
brand_ids: string[];
data_ids: string[];
@ -178,10 +178,10 @@ const defaultProductList: DefaultProductList = {
carousel_col: 3,
// 选项卡数据
tabs_list: [
{ id: '1', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '热门推荐', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '2', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试一', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '3', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试二', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '4', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试三', img: [], desc: '简介', data_type: '0', keywords: '', is_recommend: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '1', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '热门推荐', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '2', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试一', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '3', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试二', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
{ id: '4', tabs_type: '0', tabs_img: [], tabs_icon: '', is_sliding_fixed: '0', title: '测试三', img: [], desc: '简介', data_type: '0', keywords: '', is_recommended: 0, category_ids: defaultSetting.category_ids, brand_ids: defaultSetting.brand_ids, data_ids: [], number: defaultSetting.page_size, order_by_type: defaultSetting.order_by_type, order_by_rule: defaultSetting.order_by_type, data_list: [], data_auto_list: [] },
],
// 选中的内容索引
tabs_active_index: 0,

View File

@ -589,12 +589,12 @@ const save_formmat_form_data = (data: diy_data_item, close: boolean = false, is_
if (is_goods) {
new_com_data_content.brand_ids = defaultConfigSetting.brand_ids;
if (['plugins-groupbuy', 'plugins-bargain'].includes(type)) {
new_com_data_content.is_recommend = 0;
new_com_data_content.is_recommended = 0;
}
} else {
// 文章博客的显示
if (['plugins-groupbuy-tabs', 'plugins-bargain-tabs'].includes(type)) {
new_com_data_content.is_recommend = 0;
new_com_data_content.is_recommended = 0;
} else if (['article-list', 'article-tabs', 'blog', 'blog-tabs', 'plugins-video', 'plugins-video-tabs', 'plugins-live', 'plugins-live-tabs'].includes(type)) {
new_com_data_content.is_cover = defaultConfigSetting.is_cover;
if (['blog', 'blog-tabs', 'plugins-video', 'plugins-video-tabs'].includes(type)) {