|
|
@@ -1,18 +1,9 @@
|
|
|
<template>
|
|
|
- <Cascader
|
|
|
- :value="innerValue"
|
|
|
- :options="getDepartTree"
|
|
|
- placeholder="全部"
|
|
|
- :field-names="{
|
|
|
- label: 'departName',
|
|
|
- value: 'id',
|
|
|
- children: 'childDepart',
|
|
|
- }"
|
|
|
- :show-search="showSearch"
|
|
|
- :allow-clear="allowClear"
|
|
|
- :change-on-select="changeOnSelect"
|
|
|
- @change="handleChange"
|
|
|
- >
|
|
|
+ <Cascader :value="innerValue" :options="getDepartTree" placeholder="全部" :field-names="{
|
|
|
+ label: 'departName',
|
|
|
+ value: 'id',
|
|
|
+ children: 'childDepart',
|
|
|
+ }" :show-search="showSearch" :allow-clear="allowClear" :change-on-select="changeOnSelect" @change="handleChange">
|
|
|
<template #displayRender="{ labels }">
|
|
|
{{ labels[labels.length - 1] }}
|
|
|
</template>
|
|
|
@@ -21,80 +12,117 @@
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts">
|
|
|
- import { last } from 'lodash';
|
|
|
- import { defineComponent, onUnmounted, h, ref } from 'vue';
|
|
|
- // import { useMessage } from '/@/hooks/web/useMessage';
|
|
|
- import { propTypes } from '/@/utils/propTypes';
|
|
|
- import { useMineDepartmentStore } from '/@/store/modules/mine';
|
|
|
- import { storeToRefs } from 'pinia';
|
|
|
- import { Cascader } from 'ant-design-vue';
|
|
|
+import { last } from 'lodash';
|
|
|
+import { defineComponent, onUnmounted, h, ref, computed, watchEffect } from 'vue';
|
|
|
+// import { useMessage } from '/@/hooks/web/useMessage';
|
|
|
+import { propTypes } from '/@/utils/propTypes';
|
|
|
+import { useMineDepartmentStore } from '/@/store/modules/mine';
|
|
|
+import { storeToRefs } from 'pinia';
|
|
|
+import { Cascader } from 'ant-design-vue';
|
|
|
|
|
|
- export default defineComponent({
|
|
|
- name: 'MineCascader',
|
|
|
- components: { Cascader },
|
|
|
- props: {
|
|
|
- value: propTypes.string.def(''),
|
|
|
- placeholder: propTypes.string.def('全部'),
|
|
|
- /** 根节点ID,如果传入,组件将过滤该节点下的节点 */
|
|
|
- rootId: propTypes.string,
|
|
|
- showSearch: propTypes.bool.def(true),
|
|
|
- allowClear: propTypes.bool.def(true),
|
|
|
- changeOnSelect: propTypes.bool.def(true),
|
|
|
- // clearOnDestroy: propTypes.bool.def(false),
|
|
|
- },
|
|
|
- emits: ['change', 'update:value'],
|
|
|
- setup(props, { emit }) {
|
|
|
- // const { createMessage } = useMessage();
|
|
|
- const mineStore = useMineDepartmentStore();
|
|
|
- const { getDepartTree, getMineCode } = storeToRefs(mineStore);
|
|
|
+export default defineComponent({
|
|
|
+ name: 'MineCascader',
|
|
|
+ components: { Cascader },
|
|
|
+ props: {
|
|
|
+ value: propTypes.string.def(''),
|
|
|
+ placeholder: propTypes.string.def('全部'),
|
|
|
+ /** 根节点ID,如果传入,组件将过滤该节点下的节点 */
|
|
|
+ rootId: propTypes.string,
|
|
|
+ showSearch: propTypes.bool.def(true),
|
|
|
+ allowClear: propTypes.bool.def(true),
|
|
|
+ changeOnSelect: propTypes.bool.def(true),
|
|
|
+ // clearOnDestroy: propTypes.bool.def(false),
|
|
|
+ mineCode: propTypes.string,//URL传入的矿井ID
|
|
|
+ showDefaultValue: propTypes.bool.def(false) //是否需要显示默认值
|
|
|
+ },
|
|
|
+ emits: ['change', 'update:value'],
|
|
|
+ setup(props, { emit }) {
|
|
|
+ // const { createMessage } = useMessage();
|
|
|
+ const mineStore = useMineDepartmentStore();
|
|
|
+ const { getDepartTree, getMineCode, } = storeToRefs(mineStore);
|
|
|
|
|
|
- // if (props.clearOnDestroy) {
|
|
|
- // const raw = getDepartId.value;
|
|
|
- // onUnmounted(() => {
|
|
|
- // mineStore.setDepartById(raw);
|
|
|
- // });
|
|
|
- // }
|
|
|
+ // if (props.clearOnDestroy) {
|
|
|
+ // const raw = getDepartId.value;
|
|
|
+ // onUnmounted(() => {
|
|
|
+ // mineStore.setDepartById(raw);
|
|
|
+ // });
|
|
|
+ // }
|
|
|
|
|
|
- if (props.rootId) {
|
|
|
- mineStore.clearDepart();
|
|
|
- mineStore.filterDepartTree((e) => e.parentId === props.rootId);
|
|
|
+ if (props.rootId) {
|
|
|
+ mineStore.clearDepart();
|
|
|
+ mineStore.filterDepartTree((e) => e.parentId === props.rootId);
|
|
|
|
|
|
- onUnmounted(() => {
|
|
|
- mineStore.restoreDepartTree();
|
|
|
- });
|
|
|
+ onUnmounted(() => {
|
|
|
+ mineStore.restoreDepartTree();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // const shownText = computed(() => getDepart.value.departName || '-');
|
|
|
+ const innerValue = ref<string[]>([]);
|
|
|
+ // const innerValue = computed(() => getDepartPath.value.map((e) => e.id));
|
|
|
+ const options = getDepartTree;
|
|
|
+
|
|
|
+ //默认显示内容
|
|
|
+ function findNodeWithPath(tree, id, path = []) {
|
|
|
+ for (const node of tree) {
|
|
|
+ const currentPath: any = [...path, node];
|
|
|
+ if (node.id == id) {
|
|
|
+ return currentPath; // 返回包含目标节点及其祖先的数组
|
|
|
+ }
|
|
|
+ if (node.childDepart && node.childDepart.length > 0) {
|
|
|
+ const result = findNodeWithPath(node.childDepart, id, currentPath)
|
|
|
+ if (result) {
|
|
|
+ return result.map(el => el.id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ console.log(findNodeWithPath(getDepartTree.value, props.mineCode),'findNodeWithPath(getDepartTree.value, props.mineCode)')
|
|
|
+ const defaultValue = computed(() => {
|
|
|
+ if (props.mineCode) {
|
|
|
+ return findNodeWithPath(getDepartTree.value, props.mineCode)
|
|
|
+ } else {
|
|
|
+ const levelData = getDepartTree.value.filter(v => v.childDepart.length)
|
|
|
+ const firstLevel = levelData[0]['id']
|
|
|
+ const secondLevel = levelData[0]['childDepart'][0]['id']
|
|
|
+ const thirdLevel = levelData[0]['childDepart'][0]['childDepart'][0]['id']
|
|
|
+ return [firstLevel, secondLevel, thirdLevel]
|
|
|
}
|
|
|
+ });
|
|
|
|
|
|
- // const shownText = computed(() => getDepart.value.departName || '-');
|
|
|
- const innerValue = ref<string[]>([]);
|
|
|
- // const innerValue = computed(() => getDepartPath.value.map((e) => e.id));
|
|
|
- const options = getDepartTree;
|
|
|
|
|
|
- /**
|
|
|
- * change事件
|
|
|
- * @param e
|
|
|
- */
|
|
|
- function handleChange(value: any[]) {
|
|
|
- innerValue.value = value;
|
|
|
- mineStore.setDepartById(last(value));
|
|
|
+ /**
|
|
|
+ * change事件
|
|
|
+ * @param e
|
|
|
+ */
|
|
|
+ function handleChange(value: any[]) {
|
|
|
+ innerValue.value = value;
|
|
|
+ mineStore.setDepartById(last(value));
|
|
|
+ const val = getMineCode.value;
|
|
|
+ emit('update:value', val);
|
|
|
+ emit('change', val);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- const val = getMineCode.value;
|
|
|
- emit('update:value', val);
|
|
|
- emit('change', val);
|
|
|
- }
|
|
|
|
|
|
+ if (props.showDefaultValue) {
|
|
|
+ handleChange(defaultValue.value);
|
|
|
+ } else {
|
|
|
handleChange([]);
|
|
|
+ }
|
|
|
|
|
|
- onUnmounted(() => {
|
|
|
- mineStore.clearDepart();
|
|
|
- });
|
|
|
+ onUnmounted(() => {
|
|
|
+ mineStore.clearDepart();
|
|
|
+ });
|
|
|
|
|
|
- return {
|
|
|
- innerValue,
|
|
|
- options,
|
|
|
- getDepartTree,
|
|
|
- handleChange,
|
|
|
- h,
|
|
|
- };
|
|
|
- },
|
|
|
- });
|
|
|
+ return {
|
|
|
+ innerValue,
|
|
|
+ options,
|
|
|
+ getDepartTree,
|
|
|
+ handleChange,
|
|
|
+ h,
|
|
|
+ };
|
|
|
+ },
|
|
|
+});
|
|
|
</script>
|