|
@@ -1,4 +1,4 @@
|
|
|
-import { NPopover, NScrollbar } from 'naive-ui';
|
|
|
+import { NPopover, NScrollbar, NTooltip } from 'naive-ui';
|
|
|
import {
|
|
|
PropType,
|
|
|
computed,
|
|
@@ -31,6 +31,10 @@ export default defineComponent({
|
|
|
placement: {
|
|
|
type: String,
|
|
|
default: 'bottom-start'
|
|
|
+ },
|
|
|
+ showPath: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
}
|
|
|
},
|
|
|
emits: ['update:value'],
|
|
@@ -40,7 +44,9 @@ export default defineComponent({
|
|
|
selectParents: {}, // 选中的数据
|
|
|
tagActiveId: '' as any,
|
|
|
tagActive: {} as any,
|
|
|
- childSelectId: null as any
|
|
|
+ childSelectId: null as any,
|
|
|
+ x: 0,
|
|
|
+ y: 0
|
|
|
});
|
|
|
|
|
|
// const formatParentCurrentValue = (ids: any, list: any) => {
|
|
@@ -117,7 +123,12 @@ export default defineComponent({
|
|
|
values.forEach((item: any) => {
|
|
|
names.push(item.name);
|
|
|
});
|
|
|
- return names.join(' / ');
|
|
|
+ if (props.showPath) {
|
|
|
+ return names.join(' / ');
|
|
|
+ } else {
|
|
|
+ const lastName = names.pop();
|
|
|
+ return lastName;
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
// 递归获取数据
|
|
@@ -171,90 +182,183 @@ export default defineComponent({
|
|
|
state.popoverShow = false;
|
|
|
};
|
|
|
return () => (
|
|
|
- <NPopover
|
|
|
- placement={props.placement as any}
|
|
|
- v-model:show={state.popoverShow}
|
|
|
- showArrow={false}
|
|
|
- trigger="click"
|
|
|
- displayDirective="show"
|
|
|
- class={[styles.cascaderPopover, 'c-cascaderPopover']}>
|
|
|
- {{
|
|
|
- trigger: () => (
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.nBaseCascaser,
|
|
|
- state.popoverShow ? styles.nBaseCascaserActive : ''
|
|
|
- ]}>
|
|
|
- <div class={styles['n-base-selection-tags']}>
|
|
|
- <div class={styles['n-base-selection-input']}>
|
|
|
- <div class={styles['n-base-selection-input__content']}>
|
|
|
- {valueText.value}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class={[styles['n-base-suffix']]}>
|
|
|
- <div class={[styles.arrow]}>
|
|
|
- <img src={state.popoverShow ? arrowUp : arrowDown} />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <>
|
|
|
+ {/* <div
|
|
|
+ class={[
|
|
|
+ styles.nBaseCascaser,
|
|
|
+ state.popoverShow ? styles.nBaseCascaserActive : ''
|
|
|
+ ]}
|
|
|
+ onClick={(e: MouseEvent) => {
|
|
|
+ console.log(e.target);
|
|
|
+ if (state.popoverShow) {
|
|
|
+ state.popoverShow = false;
|
|
|
+ } else {
|
|
|
+ state.popoverShow = true;
|
|
|
+ state.x = e.clientX;
|
|
|
+ state.y = e.clientY;
|
|
|
+ }
|
|
|
+ }}>
|
|
|
+ <div class={styles['n-base-selection-tags']}>
|
|
|
+ <div class={styles['n-base-selection-input']}>
|
|
|
+ <div class={styles['n-base-selection-input__content']}>
|
|
|
+ {valueText.value}
|
|
|
</div>
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles['n-base-selection-placeholder'],
|
|
|
- styles['n-base-selection-overlay']
|
|
|
- ]}>
|
|
|
- {!valueText.value && (
|
|
|
- <div class={styles.inner}>{props.placeholder}</div>
|
|
|
- )}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class={[styles['n-base-suffix']]}>
|
|
|
+ <div class={[styles.arrow]}>
|
|
|
+ <img src={state.popoverShow ? arrowUp : arrowDown} />
|
|
|
</div>
|
|
|
- <div class={styles['n-base-selection__border']}></div>
|
|
|
- <div class={styles['n-base-selection__state-border']}></div>
|
|
|
</div>
|
|
|
- ),
|
|
|
- default: () => (
|
|
|
- <div class={styles.baseContent}>
|
|
|
- <NScrollbar
|
|
|
- class={styles.baseScrollBar}
|
|
|
- style={{ maxHeight: '400px' }}>
|
|
|
- <div class={styles.baseContentTitle}>
|
|
|
- {props.options[0].columnName}
|
|
|
- </div>
|
|
|
- <div class={styles.baseContentWrap}>
|
|
|
- {props.options.map((subject: any) => (
|
|
|
- <span
|
|
|
- class={[
|
|
|
- styles.tag,
|
|
|
- (state.tagActiveId || '') == subject.id &&
|
|
|
- styles.tagActive
|
|
|
- ]}
|
|
|
- onClick={() => {
|
|
|
- state.tagActiveId = subject.id;
|
|
|
- initParentSelect(subject);
|
|
|
- }}>
|
|
|
- {subject.name}
|
|
|
- </span>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- <ChildNodeSearch
|
|
|
- activeRow={state.selectParents}
|
|
|
- onSelectChildTag={(val: any) => {
|
|
|
- state.childSelectId = val;
|
|
|
- }}
|
|
|
- />
|
|
|
- </NScrollbar>
|
|
|
- <div class={styles.btnGroup}>
|
|
|
- <div class={[styles.btn, styles.btnCancel]} onClick={onReset}>
|
|
|
- 重置
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles['n-base-selection-placeholder'],
|
|
|
+ styles['n-base-selection-overlay']
|
|
|
+ ]}>
|
|
|
+ {!valueText.value && (
|
|
|
+ <div class={styles.inner}>{props.placeholder}</div>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ <div class={styles['n-base-selection__border']}></div>
|
|
|
+ <div class={styles['n-base-selection__state-border']}></div>
|
|
|
+ </div>
|
|
|
+ <NPopover
|
|
|
+ placement={props.placement as any}
|
|
|
+ v-model:show={state.popoverShow}
|
|
|
+ showArrow={false}
|
|
|
+ trigger="manual"
|
|
|
+ x={state.x}
|
|
|
+ y={state.y}
|
|
|
+ displayDirective="show"
|
|
|
+ class={[styles.cascaderPopover, 'c-cascaderPopover']}>
|
|
|
+ <div class={styles.baseContent}>
|
|
|
+ <NScrollbar
|
|
|
+ class={styles.baseScrollBar}
|
|
|
+ style={{ maxHeight: '400px' }}>
|
|
|
+ <div class={styles.baseContentTitle}>
|
|
|
+ {props.options[0].columnName}
|
|
|
+ </div>
|
|
|
+ <div class={styles.baseContentWrap}>
|
|
|
+ {props.options.map((subject: any) => (
|
|
|
+ <span
|
|
|
+ class={[
|
|
|
+ styles.tag,
|
|
|
+ (state.tagActiveId || '') == subject.id &&
|
|
|
+ styles.tagActive
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ state.tagActiveId = subject.id;
|
|
|
+ initParentSelect(subject);
|
|
|
+ }}>
|
|
|
+ {subject.name}
|
|
|
+ </span>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ <ChildNodeSearch
|
|
|
+ activeRow={state.selectParents}
|
|
|
+ onSelectChildTag={(val: any) => {
|
|
|
+ state.childSelectId = val;
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </NScrollbar>
|
|
|
+ <div class={styles.btnGroup}>
|
|
|
+ <div class={[styles.btn, styles.btnCancel]} onClick={onReset}>
|
|
|
+ 重置
|
|
|
+ </div>
|
|
|
+ <div class={[styles.btn, styles.btnConfirm]} onClick={onConfirm}>
|
|
|
+ 确认
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </NPopover> */}
|
|
|
+ <NPopover
|
|
|
+ placement={props.placement as any}
|
|
|
+ v-model:show={state.popoverShow}
|
|
|
+ showArrow={false}
|
|
|
+ trigger="click"
|
|
|
+ displayDirective="show"
|
|
|
+ class={[styles.cascaderPopover, 'c-cascaderPopover']}>
|
|
|
+ {{
|
|
|
+ trigger: () => (
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.nBaseCascaser,
|
|
|
+ state.popoverShow ? styles.nBaseCascaserActive : ''
|
|
|
+ ]}
|
|
|
+ title={valueText.value}>
|
|
|
+ <div class={styles['n-base-selection-tags']}>
|
|
|
+ <div class={styles['n-base-selection-input']}>
|
|
|
+ <div class={styles['n-base-selection-input__content']}>
|
|
|
+ {valueText.value}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class={[styles['n-base-suffix']]}>
|
|
|
+ <div class={[styles.arrow]}>
|
|
|
+ <img src={state.popoverShow ? arrowUp : arrowDown} />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div
|
|
|
- class={[styles.btn, styles.btnConfirm]}
|
|
|
- onClick={onConfirm}>
|
|
|
- 确认
|
|
|
+ class={[
|
|
|
+ styles['n-base-selection-placeholder'],
|
|
|
+ styles['n-base-selection-overlay']
|
|
|
+ ]}>
|
|
|
+ {!valueText.value && (
|
|
|
+ <div class={styles.inner}>{props.placeholder}</div>
|
|
|
+ )}
|
|
|
</div>
|
|
|
+ <div class={styles['n-base-selection__border']}></div>
|
|
|
+ <div class={styles['n-base-selection__state-border']}></div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- )
|
|
|
- }}
|
|
|
- </NPopover>
|
|
|
+ ),
|
|
|
+ default: () => (
|
|
|
+ <div class={styles.baseContent}>
|
|
|
+ <NScrollbar
|
|
|
+ class={styles.baseScrollBar}
|
|
|
+ style={{ maxHeight: '400px' }}>
|
|
|
+ <div class={styles.baseContentTitle}>
|
|
|
+ {props.options[0].columnName}
|
|
|
+ </div>
|
|
|
+ <div class={styles.baseContentWrap}>
|
|
|
+ {props.options.map((subject: any) => (
|
|
|
+ <span
|
|
|
+ class={[
|
|
|
+ styles.tag,
|
|
|
+ (state.tagActiveId || '') == subject.id &&
|
|
|
+ styles.tagActive
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ state.tagActiveId = subject.id;
|
|
|
+ initParentSelect(subject);
|
|
|
+ }}>
|
|
|
+ {subject.name}
|
|
|
+ </span>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ <ChildNodeSearch
|
|
|
+ activeRow={state.selectParents}
|
|
|
+ onSelectChildTag={(val: any) => {
|
|
|
+ state.childSelectId = val;
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </NScrollbar>
|
|
|
+ <div class={styles.btnGroup}>
|
|
|
+ <div class={[styles.btn, styles.btnCancel]} onClick={onReset}>
|
|
|
+ 重置
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class={[styles.btn, styles.btnConfirm]}
|
|
|
+ onClick={onConfirm}>
|
|
|
+ 确认
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </NPopover>
|
|
|
+ </>
|
|
|
);
|
|
|
}
|
|
|
});
|