+
-
+
+
+
-
+
+
+
@@ -93,6 +95,25 @@ import defaultCustom from '@/config/const/custom';
import { get_math, tabs_style } from '@/utils';
import { commonStore } from '@/store';
const common_store = commonStore();
+// 默认数据
+const base_list = reactive({
+ tabs_style_list: [
+ { name: '样式一', value: '0' },
+ { name: '样式二', value: '1' },
+ { name: '样式三', value: '2' },
+ { name: '样式四', value: '3' },
+ { name: '样式五', value: '4' },
+ ],
+ product_list: [
+ { name: '指定商品', value: '0' },
+ { name: '筛选商品', value: '1' },
+ ],
+ tabs_data_type_list: [
+ { label: '商品', value: 'goods',},
+ { label: '文章', value: 'article',},
+ { label: '自定义', value: 'custom',},
+ ]
+});
const props = defineProps({
value: {
@@ -133,6 +154,7 @@ arry_list.forEach((item: any) => {
item.article_config = cloneDeep(article_default_parameter);
}
})
+//#region 组件数据渲染
const getConfig = (tabs_data_type: string, row: any, ) => {
switch (tabs_data_type) {
case 'goods':
@@ -145,7 +167,6 @@ const getConfig = (tabs_data_type: string, row: any, ) => {
return {};
}
}
-
const getContentComponent = computed(() => {
return (tabs_data_type: string) => {
switch (tabs_data_type) {
@@ -201,23 +222,38 @@ const radio_click = (val: any, index: number) => {
form.value.tabs_list[index].tabs_data_type = val;
})
}
-const base_list = reactive({
- tabs_style_list: [
- { name: '样式一', value: '0' },
- { name: '样式二', value: '1' },
- { name: '样式三', value: '2' },
- { name: '样式四', value: '3' },
- { name: '样式五', value: '4' },
- ],
- product_list: [
- { name: '指定商品', value: '0' },
- { name: '筛选商品', value: '1' },
- ]
-});
-const emits = defineEmits(['theme_change']);
+//#endregion
+const emits = defineEmits(['theme_change', 'set_offset_top']);
+//#region 获取offsetTop的位置
+// 获取offsetTop的位置
+const set_offset_top = (index: number) => {
+ setTimeout(() => {
+ const elements = Array.from(document.querySelectorAll('.nav-list .flex.gap-y-16.re'));
+ if (elements && elements.length > 0) {
+ elements.forEach((element: any, index1: number) => {
+ if (index == index1) {
+ const offsetTop = element.offsetTop;
+ if (offsetTop != null) {
+ emits('set_offset_top', offsetTop);
+ }
+ }
+ })
+ }
+ })
+}
+// 选项卡点击
const tabs_list_click = (item: any, index: number) => {
+ if (form.value.tabs_active_index !== index) {
+ set_offset_top(index);
+ }
form.value.tabs_active_index = index;
};
+// 选项卡中的tab切换
+const tabs_change = (index: number) => {
+ set_offset_top(index);
+}
+//#endregion
+//#region 选项卡数据设置
// 选项卡设置
const tabs_list_remove = (index: number) => {
if (form.value.tabs_list.length > 1) {
@@ -255,11 +291,9 @@ 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);
};
+// #endregion
const is_immersion_model = computed(() => common_store.is_immersion_model);
-const tabs_change = (val: string | number | boolean | undefined) => {
- console.log(val);
-}
watchEffect(() => {
if (is_immersion_model.value) {
form.value.tabs_top_up = '0';
diff --git a/src/components/model-data-tabs/model-data-tabs-setting.vue b/src/components/model-data-tabs/model-data-tabs-setting.vue
index a70386df..de868dd0 100644
--- a/src/components/model-data-tabs/model-data-tabs-setting.vue
+++ b/src/components/model-data-tabs/model-data-tabs-setting.vue
@@ -1,7 +1,7 @@
-
+
@@ -21,6 +21,10 @@ const props = defineProps({
});
const form = ref(props.value);
+const emits = defineEmits(['set_offset_top']);
+const set_offset_top = (offsetTop: number) => {
+ emits('set_offset_top', offsetTop);
+};