various-ui
Version:
This is a test version of the Vue 3 component library
1 lines • 17.5 kB
Source Map (JSON)
{"version":3,"file":"composable.mjs","sources":["../../../../../packages/components/region-selector/src/composable.ts"],"sourcesContent":["//* Vue\r\nimport { SetupContext, nextTick, reactive, computed, inject, ref } from \"vue\";\r\n//* 组件属性\r\nimport type { UiRegionSelectorProps, UiRegionSelectorEmits, UiRegionSelectorOption } from \"./index\";\r\nimport { options } from \"./options\";\r\n//* 公共属性\r\nimport { UiFormEmitterKey } from \"@various/constants\";\r\n//* 公共函数\r\nimport { node, utility, dispose, animations } from \"@various/utils\";\r\n\r\nexport const useComposable = (define: UiRegionSelectorProps, emits: SetupContext<typeof UiRegionSelectorEmits>[\"emit\"]) => {\r\n //* 初始化mitt\r\n const emitter = inject(UiFormEmitterKey, undefined);\r\n\r\n //* 静态变量\r\n const vars = {\r\n observer: <ResizeObserver | undefined>undefined,\r\n };\r\n\r\n //* 响应式变量\r\n const refs = {\r\n visible: ref<boolean>(false),\r\n result: ref<string[]>([]),\r\n data: ref<UiRegionSelectorOption[]>([]),\r\n };\r\n\r\n const nodes = {\r\n body: ref<HTMLElement>(),\r\n container: ref<HTMLElement>(),\r\n };\r\n\r\n //* 函数列表\r\n const methods = {\r\n //* 候选菜单选择事件\r\n select: (region: UiRegionSelectorOption) => {\r\n refs.result.value.push(region.name);\r\n emits(\"update:modelValue\", refs.result.value);\r\n if (!region.children?.length) {\r\n emits(\"change\");\r\n emitter?.emit(define.name || \"\", \"change\");\r\n if (refs.visible.value) {\r\n refs.visible.value = false;\r\n vars.observer?.disconnect();\r\n }\r\n } else {\r\n //* 数据更新\r\n refs.data.value = region.children.map((value) => value);\r\n //* 回到顶部\r\n nodes.body.value?.querySelector(\".ui-form-candidate-content\")?.scrollTo({ top: 0 });\r\n }\r\n },\r\n\r\n //* 候选框隐藏事件\r\n hidden: (ev?: Event) => {\r\n if (!nodes.container.value || !nodes.body.value) return;\r\n else {\r\n //* 检测点击点是否在选择器内, 若在选择器内则无需关闭选择器并重新注册一次性点击事件\r\n const target = ev?.target as HTMLElement | undefined;\r\n if (target && (node.includes(target, nodes.container.value) || node.includes(target, nodes.body.value))) {\r\n addEventListener(\"click\", methods.hidden, { capture: true, once: true });\r\n } else {\r\n refs.visible.value = false;\r\n vars.observer?.disconnect();\r\n }\r\n }\r\n },\r\n\r\n //* 候选框显示事件\r\n show: (region?: string) => {\r\n //* 判断选择框是否处于异常状态\r\n if (define.readonly || define.disabled || define.loading) return;\r\n //* 显示or隐藏候选菜单\r\n if (region || !refs.visible.value) refs.visible.value = true;\r\n else {\r\n refs.visible.value = false;\r\n vars.observer?.disconnect();\r\n }\r\n\r\n //* 判断候选项是否已被激活\r\n if (refs.visible.value) {\r\n //* 区域初始化\r\n const index = region ? computeds.regions.value.findIndex((value) => value.name == region) : computeds.regions.value.length;\r\n const regions = computeds.regions.value.filter((value, key) => {\r\n return key < index && value.children?.length;\r\n });\r\n\r\n //* 候选项更新\r\n refs.data.value = regions.slice(-1)[0]?.children || options.regions;\r\n refs.result.value = regions.map((value) => value.name);\r\n\r\n //* 显示候选项\r\n nextTick(() => {\r\n if (!nodes.container.value || !nodes.body.value) return;\r\n else {\r\n //* 回到顶部\r\n nodes.body.value?.querySelector(\".ui-form-candidate-content\")?.scrollTo({ top: 0 });\r\n //* 隐藏事件\r\n addEventListener(\"click\", methods.hidden, { capture: true, once: true });\r\n //* 将内容添加到视图容器中\r\n node.append(document.body, nodes.body.value);\r\n //* 注册观察者\r\n vars.observer?.disconnect();\r\n vars.observer = new ResizeObserver(() => {\r\n if (!nodes.container.value || !nodes.body.value) return;\r\n else {\r\n //* 数据初始化\r\n const data = { container: nodes.container.value, view: nodes.body.value };\r\n const width = nodes.container.value?.offsetWidth || 0;\r\n dispose.boundary.relativeContainerBody(data, {\r\n direction: \"bottom\",\r\n height: define.height,\r\n offset: 4,\r\n width: { min: width, max: define.widthExtra },\r\n align: \"start\",\r\n });\r\n }\r\n });\r\n\r\n vars.observer.observe(document.documentElement);\r\n }\r\n });\r\n }\r\n },\r\n };\r\n\r\n //* 计算属性\r\n const computeds = {\r\n //* 组件值\r\n regions: computed(() => {\r\n //* 数据初始化\r\n const result: UiRegionSelectorOption[] = [];\r\n\r\n //* 获取一级省市区\r\n const region_lv1 = options.regions.find((value) => value.name == define.modelValue?.[0]);\r\n if (region_lv1) result.push({ name: region_lv1.name, children: region_lv1.children });\r\n else {\r\n return [{ name: \"请选择省/直辖市\" }];\r\n }\r\n\r\n //* 获取二级省市区\r\n const region_lv2 = region_lv1.children.find((value) => value.name == define.modelValue?.[1]);\r\n if (region_lv2) {\r\n result.push({ name: region_lv2.name, children: region_lv2.children });\r\n if (!region_lv2.children.length) {\r\n return result;\r\n }\r\n } else {\r\n return [...result, { name: \"请选择市/区\" }];\r\n }\r\n\r\n //* 获取三级区/县/街道\r\n const region_lv3 = region_lv2.children.find((value) => value.name == define.modelValue?.[2]);\r\n if (region_lv3) result.push({ name: region_lv3.name, children: [] });\r\n else {\r\n return [...result, { name: \"请选择区/县/街道\" }];\r\n }\r\n\r\n return result;\r\n }),\r\n\r\n //* 禁用状态\r\n disabled: computed(() => define.loading || define.disabled),\r\n\r\n //* 组件类\r\n className: computed(() => {\r\n //* 初始化数据\r\n const className: string[] = [];\r\n //* 判断候选项是否处于展示状态\r\n if (refs.visible.value) className.push(\"ui-form-selector\");\r\n //* 判断是否是禁用或只读状态\r\n if (define.loading) className.push(\"ui-loading-status\");\r\n else if (define.disabled) className.push(\"ui-disabled-status\");\r\n else if (define.readonly) {\r\n className.push(\"ui-readonly-status\");\r\n }\r\n\r\n return className.join(\" \");\r\n }),\r\n };\r\n\r\n //* 属性\r\n const binds = reactive({\r\n //* 候选项容器\r\n body: computed(() => {\r\n return {\r\n class: define.classExtraName || \"\",\r\n style: {\r\n zIndex: define.zIndex,\r\n },\r\n };\r\n }),\r\n\r\n //* 容器\r\n container: computed(() => {\r\n return {\r\n class: computeds.className.value,\r\n style: {\r\n width: utility.isNumber(define.width) ? define.width + \"px\" : define.width,\r\n },\r\n };\r\n }),\r\n\r\n //* 候选项列表\r\n candidates: computed(() => {\r\n return {\r\n style: {\r\n maxHeight: define.height + \"px\",\r\n },\r\n };\r\n }),\r\n });\r\n\r\n //* 响应事件\r\n const ons = {\r\n //* 候选项容器事件\r\n animation: animations.selector(true, {\r\n beforeEnter: () => emits(\"before-enter\"),\r\n beforeLeave: () => emits(\"before-leave\"),\r\n afterEnter: () => emits(\"after-enter\"),\r\n afterLeave: () => emits(\"after-leave\"),\r\n }),\r\n };\r\n\r\n return { ons, vars, refs, nodes, binds, methods, computeds };\r\n};\r\n"],"names":["node.includes","index","_a","_b","node.append","dispose.boundary.relativeContainerBody","utility.isNumber","animations.selector"],"mappings":"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"}