diff --git a/package.json b/package.json
index f001e8eb3..29dfa0888 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"url": "https://github.com/tencent/tdesign-mobile-vue"
},
"scripts": {
+ "init": "git submodule init && git submodule update",
"start": "npm run dev",
"prepare": "husky install .husky",
"dev": "cd site && cross-env NODE_ENV=development vite",
@@ -187,4 +188,4 @@
"prettier --write"
]
}
-}
+}
\ No newline at end of file
diff --git a/src/cascader/__test__/__snapshots__/demo.test.jsx.snap b/src/cascader/__test__/__snapshots__/demo.test.jsx.snap
index fc3876842..53abab2ae 100644
--- a/src/cascader/__test__/__snapshots__/demo.test.jsx.snap
+++ b/src/cascader/__test__/__snapshots__/demo.test.jsx.snap
@@ -460,6 +460,202 @@ exports[`Cascader > Cascader keysVue demo works fine 1`] = `
`;
+exports[`Cascader > Cascader lazyVue demo works fine 1`] = `
+
+
+
+
+
+
+
+
+ 地址
+
+
+
+
+ 请选择地址
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
exports[`Cascader > Cascader mobileVue demo works fine 1`] = `
Cascader mobileVue demo works fine 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 地址
+
+
+
+
+ 请选择地址
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/cascader/__test__/demo.test.jsx b/src/cascader/__test__/demo.test.jsx
index f51aa4c9b..c9f019384 100644
--- a/src/cascader/__test__/demo.test.jsx
+++ b/src/cascader/__test__/demo.test.jsx
@@ -5,6 +5,7 @@
import { mount } from '@vue/test-utils';
import baseVue from '@/cascader/demos/base.vue';
import keysVue from '@/cascader/demos/keys.vue';
+import lazyVue from '@/cascader/demos/lazy.vue';
import mobileVue from '@/cascader/demos/mobile.vue';
import themeTabVue from '@/cascader/demos/theme-tab.vue';
import withTitleVue from '@/cascader/demos/with-title.vue';
@@ -13,6 +14,7 @@ import withValueVue from '@/cascader/demos/with-value.vue';
const mapper = {
baseVue,
keysVue,
+ lazyVue,
mobileVue,
themeTabVue,
withTitleVue,
diff --git a/src/cascader/cascader.vue b/src/cascader/cascader.vue
index 953808c08..17546a576 100644
--- a/src/cascader/cascader.vue
+++ b/src/cascader/cascader.vue
@@ -82,6 +82,7 @@ import {
watch,
onMounted,
Ref,
+ nextTick,
} from 'vue';
import TPopup from '../popup';
import { Tabs as TTabs, TabPanel as TTabPanel } from '../tabs';
@@ -95,6 +96,16 @@ const { prefix } = config;
const name = `${prefix}-cascader`;
const defaultOptionLabel = '选择选项';
+interface ChildrenInfoType {
+ value: string | number;
+ level: number;
+}
+
+const childrenInfo: ChildrenInfoType = {
+ value: '',
+ level: 0,
+};
+
interface KeysType {
value?: string;
label?: string;
@@ -200,6 +211,9 @@ export default defineComponent({
stepIndex.value += 1;
steps[level + 1] = '选择选项';
steps.length = level + 2;
+ } else if (item[(keys as Ref).value?.children ?? 'children']?.length === 0) {
+ childrenInfo.value = e;
+ childrenInfo.level = level;
} else {
setCascaderValue(item[keys.value?.value ?? 'value']);
props.onChange?.(
@@ -218,6 +232,18 @@ export default defineComponent({
open.value = visible.value;
});
+ watch(
+ () => props.options,
+ () => {
+ if (open.value) {
+ handleSelect(childrenInfo.value, childrenInfo.level);
+ }
+ },
+ {
+ deep: true,
+ },
+ );
+
const close = (trigger: string) => {
props.onClose?.({ trigger });
};
diff --git a/src/cascader/demos/lazy.vue b/src/cascader/demos/lazy.vue
new file mode 100644
index 000000000..0eb41e28a
--- /dev/null
+++ b/src/cascader/demos/lazy.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
diff --git a/src/cascader/demos/mobile.vue b/src/cascader/demos/mobile.vue
index 9ae5bb99a..29f2258fd 100644
--- a/src/cascader/demos/mobile.vue
+++ b/src/cascader/demos/mobile.vue
@@ -17,6 +17,9 @@
+
+
+