@@ -37,6 +37,8 @@ const tabs_img_container = ref('');
// 区域内边距
const article_container = ref('');
const article_img_container = ref('');
+// 打开滑动固定开关之后,显示的样式
+const tabs_sliding_fixed_bg = ref('');
watch(
() => props.value,
(val) => {
@@ -51,6 +53,7 @@ watch(
background_img_style: new_style.tabs_bg_background_img_style,
background_img: new_style.tabs_bg_background_img,
}
+ tabs_sliding_fixed_bg.value = gradient_computer(tabs_data);
tabs_container.value = gradient_computer(tabs_data) + radius_computer(new_style.tabs_radius) + margin_computer(new_style.tabs_margin) + border_computer(new_style.tabs_content) + box_shadow_computer(new_style.tabs_content);
tabs_img_container.value = background_computer(tabs_data) + padding_computer(new_style.tabs_padding);
// 文章区域背景设置
diff --git a/src/components/model-article-tabs/model-article-tabs-content.vue b/src/components/model-article-tabs/model-article-tabs-content.vue
index 4ce12367..bae71c87 100644
--- a/src/components/model-article-tabs/model-article-tabs-content.vue
+++ b/src/components/model-article-tabs/model-article-tabs-content.vue
@@ -60,6 +60,7 @@
+
@@ -180,6 +181,7 @@ onMounted(() => {
}
if (form.tabs_list.length > 1) {
form.tabs_list.forEach((item: any) => {
+ item.is_sliding_fixed = !isEmpty(item.is_sliding_fixed) ? item.is_sliding_fixed : '0';
item.tabs_img = !isEmpty(item.tabs_img) ? item.tabs_img : [];
item.tabs_icon = !isEmpty(item.tabs_icon) ? item.tabs_icon : '';
item.tabs_type = !isEmpty(item.tabs_type) ? item.tabs_type : '0';
@@ -253,6 +255,7 @@ const tabs_add = () => {
tabs_type: '0',
tabs_img: [],
tabs_icon: '',
+ is_sliding_fixed: '0',
title: '',
desc: '',
data_type: '0',
@@ -314,6 +317,26 @@ const url_value_dialog_call_back = (item: any[]) => {
};
}
};
+/**
+ * 处理滑动固定状态变化的函数
+ * 当某个标签页的滑动固定状态发生变化时,确保同时只有一个标签页被设置为滑动固定
+ *
+ * @param val 新的滑动固定状态值,可以是字符串、数字或布尔值
+ * @param index 当前标签页的索引
+ */
+ const sliding_fixed_change = (val: string | number | boolean, index: number) => {
+ // 查找除当前标签页外,其他标签页中是否已有滑动固定的
+ const tabs_list_is_sliding_fixed = form.value.tabs_list.findIndex((item: any, index1: number) => item.is_sliding_fixed == '1' && index != index1);
+ // 如果当前标签页的滑动固定状态为'1',且已存在其他滑动固定的标签页
+ if (val == '1' && tabs_list_is_sliding_fixed != -1) {
+ // 遍历所有标签页,将其他标签页的滑动固定状态设置为'0'
+ form.value.tabs_list.forEach((item: any, index1: number) => {
+ if (index != index1) {
+ item.is_sliding_fixed = '0';
+ }
+ });
+ }
+}
const styles = reactive(props.tabStyle);
// 颜色主题切换
diff --git a/src/components/model-data-tabs/index.vue b/src/components/model-data-tabs/index.vue
index 1325517b..97ff6a62 100644
--- a/src/components/model-data-tabs/index.vue
+++ b/src/components/model-data-tabs/index.vue
@@ -3,7 +3,7 @@
@@ -60,6 +60,8 @@ const outer_container_width = ref(0);
// 数据内容样式
const data_content_container = ref('');
const data_content_img_container = ref('');
+// 打开滑动固定开关之后,显示的样式
+const tabs_sliding_fixed_bg = ref('');
watch(
() => props.value,
(val) => {
@@ -74,6 +76,7 @@ watch(
background_img_style: new_style.tabs_bg_background_img_style,
background_img: new_style.tabs_bg_background_img,
}
+ tabs_sliding_fixed_bg.value = gradient_computer(tabs_data);
tabs_container.value = gradient_computer(tabs_data) + radius_computer(new_style.tabs_radius) + margin_computer(new_style.tabs_margin) + border_computer(new_style.tabs_content) + box_shadow_computer(new_style.tabs_content);
tabs_img_container.value = background_computer(tabs_data) + padding_computer(new_style.tabs_padding);
// 内容区域背景设置
diff --git a/src/components/model-data-tabs/model-data-tabs-content.vue b/src/components/model-data-tabs/model-data-tabs-content.vue
index ef3f530f..bcbe013a 100644
--- a/src/components/model-data-tabs/model-data-tabs-content.vue
+++ b/src/components/model-data-tabs/model-data-tabs-content.vue
@@ -48,6 +48,7 @@
+
@@ -91,7 +92,7 @@ import defaultDataGoodsStyles from '@/components/common/data-tabs-common/goods/d
import defaultDataArticleStyles from '@/components/common/data-tabs-common/article/data-article-styles.vue';
import defaultDataCustomStyles from '@/components/model-custom/model-custom-styles.vue';
-import { cloneDeep } from 'lodash';
+import { cloneDeep, isEmpty } from 'lodash';
import { article_default_parameter, goods_default_parameter } from "@/config/const/data-tabs";
import defaultCustom from '@/config/const/custom';
import { get_math, tabs_style } from '@/utils';
@@ -145,6 +146,7 @@ const arry_list = form.value.tabs_list;
// 历史数据处理
arry_list.forEach((item: any) => {
item.tabs_name = `content`;
+ item.is_sliding_fixed = !isEmpty(item.is_sliding_fixed) ? item.is_sliding_fixed : '0';
if (item.tabs_data_type == 'goods') {
item.article_config = cloneDeep(article_default_parameter);
item.custom_config = cloneDeep(defaultCustom);
@@ -275,6 +277,7 @@ const tabs_list_remove = (index: number) => {
const tabs_list_copy = (index: number) => {
const data = {
...cloneDeep(form.value.tabs_list[index]),
+ is_sliding_fixed: '0',
tabs_name: 'content',
title: (form.value.tabs_list[index]?.title || '') + '(复制)',
};
@@ -294,6 +297,7 @@ const tabs_add = () => {
tabs_type: '0',
tabs_img: [],
tabs_icon: '',
+ is_sliding_fixed: '0',
title: '',
img: [],
desc: '',
@@ -309,6 +313,26 @@ const tabs_add = () => {
const tabs_theme_change = (val: string | number | boolean | undefined): void => {
styles.value.tabs_color_checked = tabs_style(styles.value.tabs_color_checked, val);
};
+/**
+ * 处理滑动固定状态变化的函数
+ * 当某个标签页的滑动固定状态发生变化时,确保同时只有一个标签页被设置为滑动固定
+ *
+ * @param val 新的滑动固定状态值,可以是字符串、数字或布尔值
+ * @param index 当前标签页的索引
+ */
+ const sliding_fixed_change = (val: string | number | boolean, index: number) => {
+ // 查找除当前标签页外,其他标签页中是否已有滑动固定的
+ const tabs_list_is_sliding_fixed = form.value.tabs_list.findIndex((item: any, index1: number) => item.is_sliding_fixed == '1' && index != index1);
+ // 如果当前标签页的滑动固定状态为'1',且已存在其他滑动固定的标签页
+ if (val == '1' && tabs_list_is_sliding_fixed != -1) {
+ // 遍历所有标签页,将其他标签页的滑动固定状态设置为'0'
+ form.value.tabs_list.forEach((item: any, index1: number) => {
+ if (index != index1) {
+ item.is_sliding_fixed = '0';
+ }
+ });
+ }
+}
// #endregion
// const is_immersion_model = computed(() => common_store.is_immersion_model);
diff --git a/src/components/model-goods-tabs/index.vue b/src/components/model-goods-tabs/index.vue
index 4537813e..2ab7773c 100644
--- a/src/components/model-goods-tabs/index.vue
+++ b/src/components/model-goods-tabs/index.vue
@@ -3,7 +3,7 @@
@@ -37,6 +37,8 @@ const tabs_img_container = ref('');
// 商品区域样式设置
const shop_container = ref('');
const shop_img_container = ref('');
+// 打开滑动固定开关之后,显示的样式
+const tabs_sliding_fixed_bg = ref('');
watch(
() => props.value,
(val) => {
@@ -51,6 +53,7 @@ watch(
background_img_style: new_style.tabs_bg_background_img_style,
background_img: new_style.tabs_bg_background_img,
}
+ tabs_sliding_fixed_bg.value = gradient_computer(tabs_data);
tabs_container.value = gradient_computer(tabs_data) + radius_computer(new_style.tabs_radius) + margin_computer(new_style.tabs_margin) + border_computer(new_style.tabs_content) + box_shadow_computer(new_style.tabs_content);
tabs_img_container.value = background_computer(tabs_data) + padding_computer(new_style.tabs_padding);
// 商品区域背景设置
diff --git a/src/components/model-goods-tabs/model-goods-tabs-content.vue b/src/components/model-goods-tabs/model-goods-tabs-content.vue
index 8d5d6421..e817b2a2 100644
--- a/src/components/model-goods-tabs/model-goods-tabs-content.vue
+++ b/src/components/model-goods-tabs/model-goods-tabs-content.vue
@@ -63,6 +63,7 @@
+
@@ -158,6 +159,7 @@ onBeforeMount(() => {
}
if (form.value.tabs_list.length > 1) {
form.value.tabs_list.forEach((item: any) => {
+ item.is_sliding_fixed = !isEmpty(item.is_sliding_fixed) ? item.is_sliding_fixed : '0';
item.tabs_img = !isEmpty(item.tabs_img) ? item.tabs_img : [];
item.tabs_icon = !isEmpty(item.tabs_icon) ? item.tabs_icon : '';
item.tabs_type = !isEmpty(item.tabs_type) ? item.tabs_type : '0';
@@ -191,6 +193,7 @@ const tabs_add = () => {
tabs_type: '0',
tabs_img: [],
tabs_icon: '',
+ is_sliding_fixed: '0',
title: '',
img: [],
desc: '',
@@ -254,6 +257,26 @@ const url_value_dialog_call_back = (item: any[]) => {
const tabs_theme_change = (val: string | number | boolean | undefined): void => {
styles.value.tabs_color_checked = tabs_style(styles.value.tabs_color_checked, val);
};
+/**
+ * 处理滑动固定状态变化的函数
+ * 当某个标签页的滑动固定状态发生变化时,确保同时只有一个标签页被设置为滑动固定
+ *
+ * @param val 新的滑动固定状态值,可以是字符串、数字或布尔值
+ * @param index 当前标签页的索引
+ */
+ const sliding_fixed_change = (val: string | number | boolean, index: number) => {
+ // 查找除当前标签页外,其他标签页中是否已有滑动固定的
+ const tabs_list_is_sliding_fixed = form.value.tabs_list.findIndex((item: any, index1: number) => item.is_sliding_fixed == '1' && index != index1);
+ // 如果当前标签页的滑动固定状态为'1',且已存在其他滑动固定的标签页
+ if (val == '1' && tabs_list_is_sliding_fixed != -1) {
+ // 遍历所有标签页,将其他标签页的滑动固定状态设置为'0'
+ form.value.tabs_list.forEach((item: any, index1: number) => {
+ if (index != index1) {
+ item.is_sliding_fixed = '0';
+ }
+ });
+ }
+}
// 选择某些风格时, 切换到对应的按钮
const change_style = (val: any): void => {
form.value.theme = val;
diff --git a/src/components/model-tabs-carousel/index.vue b/src/components/model-tabs-carousel/index.vue
index 626f28e5..a6324904 100644
--- a/src/components/model-tabs-carousel/index.vue
+++ b/src/components/model-tabs-carousel/index.vue
@@ -4,7 +4,7 @@
@@ -38,6 +38,8 @@ const tabs_img_container = ref('');
// 轮播区域背景设置
const carousel_container = ref('');
const carousel_img_container = ref('');
+// 打开滑动固定开关之后,显示的样式
+const tabs_sliding_fixed_bg = ref('');
watch(
props.value,
(val) => {
@@ -57,6 +59,7 @@ watch(
...new_style.tabs_padding,
padding_top: (new_style.tabs_padding?.padding_top || 0) + (is_general_safe_distance ? common_store.header_height : 0),
}
+ tabs_sliding_fixed_bg.value = gradient_computer(tabs_data);
tabs_container.value = gradient_computer(tabs_data) + radius_computer(new_style.tabs_radius) + margin_computer(new_style.tabs_margin) + box_shadow_computer(new_style.tabs_content) + border_computer(new_style.tabs_content) + `margin-top: ${ new_style.tabs_margin.margin_top - (is_general_safe_distance ? common_store.header_height : 0) }px;`;
tabs_img_container.value = background_computer(tabs_data) + padding_computer(new_tabs_padding);
// 轮播区域背景设置
diff --git a/src/components/model-tabs/index.vue b/src/components/model-tabs/index.vue
index 99f3f474..f80f323b 100644
--- a/src/components/model-tabs/index.vue
+++ b/src/components/model-tabs/index.vue
@@ -1,12 +1,12 @@