UNPKG

song-ui-u

Version:

vue3 + js的PC前端组件库

1 lines 6.9 kB
{"version":3,"file":"tabs.cjs","sources":["../../../../../packages/components/tabs/src/tabs.jsx"],"sourcesContent":["// components/Tabs/index.jsx\r\nimport { defineComponent, provide, ref, reactive, watchEffect } from \"vue\";\r\nimport { TAB_KEY } from \"../constant\";\r\nimport { useNamespace } from \"@ui-library/hook\";\r\nimport { X } from \"song-ui-pro-icon\";\r\nimport { XIcon } from \"@ui-library/components\";\r\n\r\nexport default defineComponent({\r\n name: \"x-tabs\",\r\n props: {\r\n modelValue: {\r\n type: String,\r\n required: true,\r\n },\r\n position: {\r\n type: String,\r\n default: \"top\",\r\n },\r\n type: {\r\n type: String,\r\n default: \"\",\r\n },\r\n editable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n emits: [\"update:modelValue\", \"tab-click\", \"tab-remove\"],\r\n\r\n setup(props, { emit, slots }) {\r\n const activeName = ref(props.modelValue);\r\n\r\n const panes = reactive([]);\r\n\r\n const ns = useNamespace(\"tabs\");\r\n\r\n const registerPane = (pane) => {\r\n panes.push(pane);\r\n };\r\n\r\n const handleTabClick = (name) => {\r\n activeName.value = name;\r\n emit(\"update:modelValue\", name);\r\n emit(\"tab-click\", name);\r\n };\r\n\r\n const handelRem = (pane, e) => {\r\n e.stopPropagation();\r\n if (panes.length === 1) return;\r\n\r\n const currentIndex = panes.indexOf(pane);\r\n panes.splice(currentIndex, 1);\r\n\r\n // 根据不同情况设置新的激活项\r\n if (currentIndex === panes.length) {\r\n // 如果删除的是最后一项,激活前一项\r\n emit(\"update:modelValue\", panes[currentIndex - 1].name);\r\n } else if (currentIndex === 0) {\r\n // 如果删除的是第一项,保持激活第一项\r\n emit(\"update:modelValue\", panes[0].name);\r\n } else {\r\n // 其他情况激活下一项\r\n emit(\"update:modelValue\", panes[currentIndex].name);\r\n }\r\n\r\n emit(\"tab-remove\", pane);\r\n };\r\n\r\n watchEffect(() => {\r\n activeName.value = props.modelValue;\r\n });\r\n\r\n provide(TAB_KEY, {\r\n activeName,\r\n registerPane,\r\n handleTabClick,\r\n props,\r\n });\r\n\r\n return () => (\r\n <div class={[ns.b(), ns.m(\"position-body\", props.position)]}>\r\n <div class={[ns.e(\"header\"), ns.m(\"position-header\", props.position)]}>\r\n {panes.map((pane, index) => (\r\n <div\r\n class={[\r\n ns.is(\"active\", activeName.value == pane.name),\r\n ns.m(\"type\", props.type),\r\n ]}\r\n onClick={() => handleTabClick(pane.name)}\r\n >\r\n {pane.label}\r\n {props.editable && activeName.value === pane.name && (\r\n <XIcon onClick={(e) => handelRem(pane, e)}>\r\n <X />\r\n </XIcon>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <div class={[ns.e(\"content\")]}>{slots.default?.()}</div>\r\n </div>\r\n );\r\n },\r\n});\r\n"],"names":["defineComponent","name","props","modelValue","type","String","required","position","default","editable","Boolean","emits","setup","emit","slots","activeName","ref","panes","reactive","ns","useNamespace","registerPane","pane","push","handleTabClick","value","handelRem","e","stopPropagation","length","currentIndex","indexOf","splice","watchEffect","provide","TAB_KEY","_createVNode","b","m","map","index","is","onClick","label","XIcon","X"],"mappings":"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"}