yanzhen-design-vue
Version:
162 lines (161 loc) • 5.26 kB
JavaScript
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const vue = require("vue");
const core = require("@vueuse/core");
const utilsVue = require("@yanzhen-libs/utils-vue");
const lodashEs = require("lodash-es");
const utils = require("@yanzhen-libs/utils");
require("../../../../utils/index.cjs");
require("../../../list/index.cjs");
const contacts = require("../constants/contacts.cjs");
const handleTreeNode = require("../utils/handleTreeNode.cjs");
const handleDataType = require("../utils/handleDataType.cjs");
const list = require("../../../list/src/list.cjs");
const log = require("../../../../utils/log.cjs");
const useContactsList = (props, emit) => {
const $attrs = vue.useAttrs();
const $slots = vue.useSlots();
const { selectedIds, selectedValue, multiple, activeTab, ...refs } = vue.toRefs(props);
const _loading = utilsVue.useVModel(props, "loading", emit);
const _childActiveTab = utilsVue.useVModel(props, "childActiveTab", emit);
const _selectedIds = vue.computed(() => {
if (vue.unref(selectedValue)) {
const values = lodashEs.flattenDeep([vue.unref(selectedValue)]);
if (!vue.unref(activeTab)) return values.map((item) => item.value);
return values.reduce(
(prev, item) => {
const type = handleDataType.handleDataType(item);
switch (true) {
case type === vue.unref(activeTab):
case (vue.unref(activeTab) === contacts.Contacts.USUALLY && [contacts.Contacts.USUALLY, contacts.Contacts.USER].includes(type)):
prev.push(item.value);
break;
}
return prev;
},
[]
);
}
return lodashEs.flattenDeep([vue.unref(selectedIds)]).filter(Boolean);
});
const [DefineHeaderTemplate, ReusableHeaderTemplate] = core.createReusableTemplate();
const [DefineContactsItemTemplate, ReusableContactsItemTemplate] = core.createReusableTemplate();
const [DefineContactsCardItemTemplate, ReusableContactsCardItemTemplate] = core.createReusableTemplate();
const [DefineSelectedIconTemplate, ReusableSelectedIconTemplate] = core.createReusableTemplate();
const [DefineTreeTemplate, ReusableTreeTemplate] = core.createReusableTemplate();
const [DefineTreeItemTemplate, ReusableTreeItemTemplate] = core.createReusableTemplate();
const _listProps = vue.computed(
() => lodashEs.pick(vue.mergeProps($attrs, vue.unref(props)), ...Object.keys(list.listProps))
);
const _disabledIds = vue.computed(() => lodashEs.flattenDeep([props.disableIds]));
const selectedIconClass = vue.computed(() => {
return vue.mergeProps(
{
class: []
},
{
class: props.selectedIconClass
}
).class;
});
function handleUpdateChildActiveTab(value) {
if (props["onUpdate:childActiveTab"]) {
props["onUpdate:childActiveTab"](value);
} else {
emit("update:child-active-tab", value);
}
}
const optionKey = utilsVue.useOptionKey();
const listConfig = vue.computed(() => {
return vue.mergeProps(vue.unref(_listProps), {
"onUpdate:loading": props["onUpdate:loading"],
onLoadMore: props.onLoadMore
});
});
function handleLoadMore(...args) {
if (props.onLoadMore) {
props.onLoadMore(...args);
} else {
emit("load-more", ...args);
}
}
async function handleTreeExpand(...args) {
if (props.onTreeExpand) {
props.onTreeExpand(...args);
} else {
emit("tree-expand", ...args);
}
}
function handleTreeSelect(...args) {
const [, info] = args;
if ((info == null ? void 0 : info.node) && props.onItemClick) {
handleItemClick(info == null ? void 0 : info.node);
return;
}
if (props.onTreeSelect) {
props.onTreeSelect(...args);
} else {
emit("tree-select", ...args);
}
}
function handleItemClick(item) {
switch (true) {
case item.disabled:
case item.disableCheckbox:
case vue.unref(_disabledIds).includes(item.value):
return;
}
switch (vue.unref(activeTab)) {
case contacts.Contacts.USER:
if (!item.isCard && utils.isEmptyArray(item.children)) {
log.message.warning("请展开数据").then((r) => r);
return;
}
break;
}
if (props.onItemClick) {
props.onItemClick(item);
} else {
emit("item-click", item);
}
}
const ctx = {
...refs,
multiple,
activeTab,
optionKey,
_loading,
_disabledIds,
_selectedIds,
_listProps,
_childActiveTab,
selectedIconClass,
listConfig,
$slots
};
const templates = {
DefineHeaderTemplate,
ReusableHeaderTemplate,
DefineContactsItemTemplate,
ReusableContactsItemTemplate,
DefineContactsCardItemTemplate,
ReusableContactsCardItemTemplate,
DefineSelectedIconTemplate,
ReusableSelectedIconTemplate,
DefineTreeTemplate,
ReusableTreeTemplate,
DefineTreeItemTemplate,
ReusableTreeItemTemplate
};
return {
ctx,
templates,
handleTreeNode: handleTreeNode.handleTreeNode,
handleItemClick,
handleTreeSelect,
handleTreeExpand,
handleLoadMore,
handleUpdateChildActiveTab
};
};
exports.useContactsList = useContactsList;