UNPKG

el-plus-powerful-table

Version:

## [DOCS](https://peng-xiao-shuai.github.io/vite-vue-admin-docs/zh-CN/component_directive/component/powerful-table-doc.html)

1 lines 6.77 kB
{"version":3,"file":"FSelect.mjs","sources":["../../../packages/filter/src/FSelect.tsx"],"sourcesContent":["import { ElOption, ElPopover, ElSelect } from 'element-plus'\nimport { props, slots } from './common'\nimport type { State } from './common'\nimport type { App, PropType } from 'vue'\nimport type {\n PowerfulTableFilter,\n PowerfulTableHeaderProps,\n SFCWithInstall,\n SetDataType,\n} from '~/index'\nimport { SizeSymbol } from '~/keys'\nimport { LangKey, t } from '~/locale/lang'\n\nconst isFun = <T,>(key: string, data?: T) => {\n if (typeof data == 'function') {\n return data()[key]\n } else {\n return data ? (data as { [s: string]: any })[key] : ''\n }\n}\nconst FSelect = defineComponent({\n name: 'PTFSelect',\n props: {\n ...props,\n // 过滤的配置数据\n propData: {\n type: Object as PropType<PowerfulTableHeaderProps>,\n default: () => {\n return {\n prop: '',\n }\n },\n },\n },\n emits: ['headerFilterChange'],\n setup(props, { emit, expose }) {\n const size = inject(SizeSymbol)\n\n const state: State<(string | number)[]> = reactive({\n value: [],\n options: [],\n selectVisible: false,\n visible: false,\n })\n\n const selectVisibleChange = (e: boolean) => {\n if (!e) {\n state.visible = false\n } else {\n state.selectVisible = e\n }\n }\n\n const selectChange = (val: (number | string)[]) => {\n if (!val.length) val = []\n emit('headerFilterChange', val, props.headerData)\n }\n\n const stop = watch(\n () => props.propData,\n (newProps) => {\n // 首先判断是否存在filter属性\n if (newProps.filters) {\n // filter 属性支持 数组和函数 这里在判断是否数组\n if (Array.isArray(newProps.filters)) state.options = newProps.filters\n else {\n console.warn(\n props.headerData.label,\n 'The filter attribute of the column must be an array Or set the isShowOrFilterColumn property to false'\n )\n }\n } else if (newProps.type === 'switch') {\n const arr: PowerfulTableFilter[] = []\n arr.push(\n {\n value: t(LangKey.Open),\n key:\n isFun(\n 'activeValue',\n (newProps.data as SetDataType<'switch'>)?.property\n ) || 1,\n },\n {\n value: t(LangKey.Close),\n key:\n isFun(\n 'inactiveValue',\n (newProps.data as SetDataType<'switch'>)?.property\n ) || 0,\n }\n )\n state.options = arr\n }\n },\n { immediate: true, deep: true }\n )\n\n // 暴露状态\n expose({\n state,\n header: props.headerData,\n })\n\n onBeforeUnmount(() => {\n stop()\n })\n\n return () => (\n <ElPopover\n v-model={[state.visible, 'visible']}\n placement=\"bottom-start\"\n trigger=\"contextmenu\"\n width={200}\n v-slots={slots(state, props.headerData)}\n >\n <ElSelect\n v-model={state.value}\n multiple\n collapse-tags\n clearable\n placeholder={t(LangKey.Select)}\n style=\"width: 100%\"\n teleported={false}\n size={size}\n onVisible-change={selectVisibleChange}\n onChange={selectChange}\n >\n {state.options?.map((item, index) => {\n return (\n <ElOption\n key={index}\n label={item.value}\n value={item.key}\n ></ElOption>\n )\n })}\n </ElSelect>\n </ElPopover>\n )\n },\n})\n\nconst PTFSelect = FSelect as SFCWithInstall<typeof FSelect>\nPTFSelect.install = (app: App) => {\n app.component(FSelect.name!, FSelect)\n}\nexport { PTFSelect, FSelect }\nexport default FSelect\n"],"names":["defineComponent","inject","reactive","watch","onBeforeUnmount","createVNode","ElPopover","ElSelect","ElOption","props","slots","SizeSymbol","t","LangKey","isFun","key","data","FSelect","emit","expose","size","state","selectVisibleChange","selectChange","val","stop","newProps","_a","_b","arr","_createVNode","$event","item","index","PTFSelect","app"],"mappings":"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"}