63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Vue
		
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Vue
		
	
	
|  | <template> | ||
|  |   <el-cascader ref="cascaderRef" v-model="modelValue" :props="cascaderProps" /> | ||
|  | </template> | ||
|  | 
 | ||
|  | <script setup> | ||
|  | import { ref } from "vue"; | ||
|  | import { postRequest } from "../../axios/index.js"; | ||
|  | import { ElCascader } from 'element-plus' | ||
|  | import "element-plus/es/components/cascader/style/css"; | ||
|  | 
 | ||
|  | defineOptions({ | ||
|  |   name: "AppCascader", | ||
|  | }); | ||
|  | const props = defineProps({ | ||
|  |   id: { type: String, required: true, default: "" }, | ||
|  |   level: { type: [Number, String], default: 3 }, | ||
|  |   checkStrictly: { type: Boolean, default: true }, | ||
|  |   showAllLevels: { type: Boolean, default: true }, | ||
|  |   value: { type: String, default: "dictionariesId" }, | ||
|  |   joinSeparator: { type: String, default: "/" }, | ||
|  |   controlLevel: { type: Boolean, default: false }, | ||
|  | }); | ||
|  | const modelValue = defineModel({ type: Array, required: true }); | ||
|  | const cascaderRef = ref(null); | ||
|  | const cascaderProps = { | ||
|  |   lazy: true, | ||
|  |   lazyLoad: async (node, resolve) => { | ||
|  |     const { dictionariesList } = await postRequest("/sys/dictionaries/list", { | ||
|  |       parentId: node.data.dictionariesId || props.id, | ||
|  |     }); | ||
|  |     resolve( | ||
|  |       dictionariesList.map((item) => { | ||
|  |         return { | ||
|  |           dictionariesId: item.dictionariesId, | ||
|  |           bianma: item.bianma, | ||
|  |           name: item.name, | ||
|  |           leaf: props.controlLevel | ||
|  |             ? node.level >= props.level | ||
|  |             : item.hasChildren === 0, | ||
|  |         }; | ||
|  |       }) | ||
|  |     ); | ||
|  |   }, | ||
|  |   value: props.value, | ||
|  |   id: "dictionariesId", | ||
|  |   label: "name", | ||
|  |   children: "children", | ||
|  |   checkStrictly: props.checkStrictly, | ||
|  | }; | ||
|  | const getCheckedNodes = () => { | ||
|  |   return ( | ||
|  |     cascaderRef.value | ||
|  |       .getCheckedNodes()[0] | ||
|  |       ?.pathLabels.join(props.joinSeparator) || "" | ||
|  |   ); | ||
|  | }; | ||
|  | defineExpose({ | ||
|  |   getCheckedNodes, | ||
|  | }); | ||
|  | </script> | ||
|  | 
 | ||
|  | <style scoped></style> |