acdr-ui/dist/dev/mp-weixin/node-modules/wot-design-uni/components/wd-col-picker/wd-col-picker.js
2024-10-01 09:15:35 +08:00

455 lines
17 KiB
JavaScript

"use strict";
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
const common_vendor = require("../../../../common/vendor.js");
if (!Array) {
const _easycom_wd_icon2 = common_vendor.resolveComponent("wd-icon");
const _easycom_wd_loading2 = common_vendor.resolveComponent("wd-loading");
const _easycom_wd_action_sheet2 = common_vendor.resolveComponent("wd-action-sheet");
(_easycom_wd_icon2 + _easycom_wd_loading2 + _easycom_wd_action_sheet2)();
}
const _easycom_wd_icon = () => "../wd-icon/wd-icon.js";
const _easycom_wd_loading = () => "../wd-loading/wd-loading.js";
const _easycom_wd_action_sheet = () => "../wd-action-sheet/wd-action-sheet.js";
if (!Math) {
(_easycom_wd_icon + _easycom_wd_loading + _easycom_wd_action_sheet)();
}
const __default__ = {
name: "wd-col-picker",
options: {
addGlobalClass: true,
virtualHost: true,
styleIsolation: "shared"
}
};
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent(__spreadProps(__spreadValues({}, __default__), {
props: common_vendor.colPickerProps,
emits: ["close", "update:modelValue", "confirm"],
setup(__props, { expose: __expose, emit: __emit }) {
const { translate } = common_vendor.useTranslate("col-picker");
const $container = ".wd-col-picker__selected-container";
const $item = ".wd-col-picker__selected-item";
const props = __props;
const emit = __emit;
const pickerShow = common_vendor.ref(false);
const currentCol = common_vendor.ref(0);
const selectList = common_vendor.ref([]);
const pickerColSelected = common_vendor.ref([]);
const selectShowList = common_vendor.ref([]);
const loading = common_vendor.ref(false);
const isChange = common_vendor.ref(false);
const lastSelectList = common_vendor.ref([]);
const lastPickerColSelected = common_vendor.ref([]);
const lineStyle = common_vendor.ref("");
const scrollLeft = common_vendor.ref(0);
const inited = common_vendor.ref(false);
const isCompleting = common_vendor.ref(false);
const { proxy } = common_vendor.getCurrentInstance();
const cell = common_vendor.useCell();
const updateLineAndScroll = common_vendor.debounce(function(animation = true) {
setLineStyle(animation);
lineScrollIntoView();
}, 50);
const showValue = common_vendor.computed(() => {
const selectedItems = (props.modelValue || []).map((item, colIndex) => {
return getSelectedItem(item, colIndex, selectList.value);
});
if (props.displayFormat) {
return props.displayFormat(selectedItems);
} else {
return selectedItems.map((item) => {
return item[props.labelKey];
}).join("");
}
});
common_vendor.watch(
() => props.modelValue,
(newValue) => {
if (newValue === pickerColSelected.value)
return;
pickerColSelected.value = newValue;
newValue.map((item, colIndex) => {
return getSelectedItem(item, colIndex, selectList.value)[props.labelKey];
});
handleAutoComplete();
},
{
deep: true,
immediate: true
}
);
common_vendor.watch(
() => props.columns,
(newValue, oldValue) => {
if (newValue.length && !common_vendor.isArray(newValue[0])) {
console.error("[wot design] error(wd-col-picker): the columns props of wd-col-picker should be a two-dimensional array");
return;
}
if (newValue.length === 0 && !oldValue)
return;
const newSelectedList = newValue.slice(0);
selectList.value = newSelectedList;
selectShowList.value = pickerColSelected.value.map((item, colIndex) => {
return getSelectedItem(item, colIndex, newSelectedList)[props.labelKey];
});
lastSelectList.value = newSelectedList;
if (newSelectedList.length > 0) {
currentCol.value = newSelectedList.length - 1;
}
},
{
deep: true,
immediate: true
}
);
common_vendor.watch(
() => props.columnChange,
(fn) => {
if (fn && !common_vendor.isFunction(fn)) {
console.error("The type of columnChange must be Function");
}
},
{
deep: true,
immediate: true
}
);
common_vendor.watch(
() => props.displayFormat,
(fn) => {
if (fn && !common_vendor.isFunction(fn)) {
console.error("The type of displayFormat must be Function");
}
},
{
deep: true,
immediate: true
}
);
common_vendor.watch(
() => props.beforeConfirm,
(fn) => {
if (fn && !common_vendor.isFunction(fn)) {
console.error("The type of beforeConfirm must be Function");
}
},
{
deep: true,
immediate: true
}
);
const { parent: form } = common_vendor.useParent(common_vendor.FORM_KEY);
const errorMessage = common_vendor.computed(() => {
if (form && props.prop && form.errorMessages && form.errorMessages[props.prop]) {
return form.errorMessages[props.prop];
} else {
return "";
}
});
const isRequired = common_vendor.computed(() => {
let formRequired = false;
if (form && form.props.rules) {
const rules = form.props.rules;
for (const key in rules) {
if (Object.prototype.hasOwnProperty.call(rules, key) && key === props.prop && Array.isArray(rules[key])) {
formRequired = rules[key].some((rule) => rule.required);
}
}
}
return props.required || props.rules.some((rule) => rule.required) || formRequired;
});
common_vendor.onMounted(() => {
inited.value = true;
});
function open() {
showPicker();
}
function close() {
handlePickerClose();
}
function handlePickerOpend() {
updateLineAndScroll(false);
}
function handlePickerClose() {
pickerShow.value = false;
if (isChange.value) {
setTimeout(() => {
selectList.value = lastSelectList.value.slice(0);
pickerColSelected.value = lastPickerColSelected.value.slice(0);
selectShowList.value = lastPickerColSelected.value.map((item, colIndex) => {
return getSelectedItem(item, colIndex, lastSelectList.value)[props.labelKey];
});
currentCol.value = lastSelectList.value.length - 1;
isChange.value = false;
}, 250);
}
emit("close");
}
function showPicker() {
const { disabled, readonly } = props;
if (disabled || readonly)
return;
pickerShow.value = true;
lastPickerColSelected.value = pickerColSelected.value.slice(0);
lastSelectList.value = selectList.value.slice(0);
}
function getSelectedItem(value, colIndex, selectList2) {
const { valueKey, labelKey } = props;
if (selectList2[colIndex]) {
const selecteds = selectList2[colIndex].filter((item) => {
return item[valueKey] === value;
});
if (selecteds.length > 0) {
return selecteds[0];
}
}
return {
[valueKey]: value,
[labelKey]: ""
};
}
function chooseItem(colIndex, index) {
const item = selectList.value[colIndex][index];
if (item.disabled)
return;
const newPickerColSelected = pickerColSelected.value.slice(0, colIndex);
newPickerColSelected.push(item[props.valueKey]);
isChange.value = true;
pickerColSelected.value = newPickerColSelected;
selectList.value = selectList.value.slice(0, colIndex + 1);
selectShowList.value = newPickerColSelected.map((item2, colIndex2) => {
return getSelectedItem(item2, colIndex2, selectList.value)[props.labelKey];
});
handleColChange(colIndex, item, index);
}
function handleColChange(colIndex, item, index, callback) {
loading.value = true;
const { columnChange, beforeConfirm } = props;
columnChange && columnChange({
selectedItem: item,
index: colIndex,
rowIndex: index,
resolve: (nextColumn) => {
if (!common_vendor.isArray(nextColumn)) {
console.error("[wot design] error(wd-col-picker): the data of each column of wd-col-picker should be an array");
return;
}
const newSelectList = selectList.value.slice(0);
newSelectList[colIndex + 1] = nextColumn;
selectList.value = newSelectList;
loading.value = false;
currentCol.value = colIndex + 1;
updateLineAndScroll(true);
if (typeof callback === "function") {
isCompleting.value = false;
selectShowList.value = pickerColSelected.value.map((item2, colIndex2) => {
return getSelectedItem(item2, colIndex2, selectList.value)[props.labelKey];
});
callback();
}
},
finish: (isOk) => {
if (typeof callback === "function") {
loading.value = false;
isCompleting.value = false;
return;
}
if (common_vendor.isBoolean(isOk) && !isOk) {
loading.value = false;
return;
}
if (beforeConfirm) {
beforeConfirm(
pickerColSelected.value,
pickerColSelected.value.map((item2, colIndex2) => {
return getSelectedItem(item2, colIndex2, selectList.value);
}),
(isPass) => {
if (isPass) {
onConfirm();
} else {
loading.value = false;
}
}
);
} else {
onConfirm();
}
}
});
}
function onConfirm() {
isChange.value = false;
loading.value = false;
pickerShow.value = false;
emit("update:modelValue", pickerColSelected.value);
emit("confirm", {
value: pickerColSelected.value,
selectedItems: pickerColSelected.value.map((item, colIndex) => {
return getSelectedItem(item, colIndex, selectList.value);
})
});
}
function handleColClick(index) {
isChange.value = true;
currentCol.value = index;
updateLineAndScroll(true);
}
function setLineStyle(animation = true) {
if (!inited.value)
return;
common_vendor.getRect($item, true, proxy).then((rects) => {
const rect = rects[currentCol.value];
const width = 16;
let left = rects.slice(0, currentCol.value).reduce((prev, curr) => prev + curr.width, 0);
left += (Number(rect.width) - width) / 2;
const transition = animation ? "transition: width 300ms ease, transform 300ms ease;" : "";
const lineStyleTemp = `
transform: translateX(${left}px);
${transition}
`;
if (lineStyle.value !== lineStyleTemp) {
lineStyle.value = lineStyleTemp;
}
});
}
function lineScrollIntoView() {
if (!inited.value)
return;
Promise.all([common_vendor.getRect($item, true, proxy), common_vendor.getRect($container, false, proxy)]).then(([navItemsRects, navRect]) => {
if (!common_vendor.isArray(navItemsRects) || navItemsRects.length === 0)
return;
const selectItem = navItemsRects[currentCol.value];
const offsetLeft = navItemsRects.slice(0, currentCol.value).reduce((prev, curr) => prev + Number(curr.width), 0);
scrollLeft.value = offsetLeft - (navRect.width - Number(selectItem.width)) / 2;
});
}
function diffColumns(colIndex) {
const item = colIndex === -1 ? {} : { [props.valueKey]: props.modelValue[colIndex] };
handleColChange(colIndex, item, -1, () => {
if (selectList.value.length < props.modelValue.length) {
diffColumns(colIndex + 1);
}
});
}
function handleAutoComplete() {
if (props.autoComplete) {
if (selectList.value.length < props.modelValue.length || selectList.value.length === 0) {
if (!isCompleting.value) {
const colIndex = selectList.value.length === 0 ? -1 : selectList.value.length - 1;
diffColumns(colIndex);
}
isCompleting.value = true;
}
}
}
__expose({
close,
open
});
return (_ctx, _cache) => {
return common_vendor.e({
a: _ctx.useDefaultSlot
}, _ctx.useDefaultSlot ? {} : common_vendor.e({
b: _ctx.label || _ctx.useLabelSlot
}, _ctx.label || _ctx.useLabelSlot ? common_vendor.e({
c: _ctx.label
}, _ctx.label ? {
d: common_vendor.t(_ctx.label)
} : {}, {
e: common_vendor.n(`wd-col-picker__label ${isRequired.value && "is-required"} ${_ctx.customLabelClass}`),
f: common_vendor.s(_ctx.labelWidth ? "min-width:" + _ctx.labelWidth + ";max-width:" + _ctx.labelWidth + ";" : "")
}) : {}, {
g: common_vendor.t(showValue.value || _ctx.placeholder || common_vendor.unref(translate)("placeholder")),
h: common_vendor.n(`wd-col-picker__value ${_ctx.ellipsis && "is-ellipsis"} ${_ctx.customValueClass} ${showValue.value ? "" : "wd-col-picker__value--placeholder"}`),
i: !_ctx.disabled && !_ctx.readonly
}, !_ctx.disabled && !_ctx.readonly ? {
j: common_vendor.p({
["custom-class"]: "wd-col-picker__arrow",
name: "arrow-right"
})
} : {}, {
k: errorMessage.value
}, errorMessage.value ? {
l: common_vendor.t(errorMessage.value)
} : {}, {
m: common_vendor.n(`wd-col-picker__cell ${_ctx.disabled && "is-disabled"} ${_ctx.readonly && "is-readonly"} ${_ctx.alignRight && "is-align-right"} ${_ctx.error && "is-error"} ${_ctx.size && "is-" + _ctx.size}`)
}), {
n: common_vendor.o(showPicker),
o: common_vendor.f(selectList.value, (select, colIndex, i0) => {
return {
a: common_vendor.t(selectShowList.value[colIndex] || common_vendor.unref(translate)("select")),
b: colIndex,
c: common_vendor.n(`wd-col-picker__selected-item ${colIndex === currentCol.value && "is-selected"}`),
d: common_vendor.o(($event) => handleColClick(colIndex), colIndex)
};
}),
p: common_vendor.s(lineStyle.value),
q: scrollLeft.value,
r: common_vendor.f(selectList.value, (col, colIndex, i0) => {
return common_vendor.e({
a: common_vendor.f(col, (item, index, i1) => {
return common_vendor.e({
a: common_vendor.t(item[_ctx.labelKey]),
b: item[_ctx.tipKey]
}, item[_ctx.tipKey] ? {
c: common_vendor.t(item[_ctx.tipKey])
} : {}, {
d: "adcdd452-2-" + i0 + "-" + i1 + ",adcdd452-1",
e: index,
f: common_vendor.n(`wd-col-picker__list-item ${pickerColSelected.value[colIndex] && item[_ctx.valueKey] === pickerColSelected.value[colIndex] && "is-selected"} ${item.disabled && "is-disabled"}`),
g: common_vendor.o(($event) => chooseItem(colIndex, index), index)
});
})
}, loading.value ? {
b: "adcdd452-3-" + i0 + ",adcdd452-1",
c: common_vendor.p({
color: _ctx.loadingColor
})
} : {}, {
d: colIndex,
e: common_vendor.s(colIndex === currentCol.value ? "display: block;" : "display: none;")
});
}),
s: common_vendor.p({
["custom-class"]: "wd-col-picker__checked",
name: "check"
}),
t: loading.value,
v: common_vendor.o(handlePickerOpend),
w: common_vendor.o(handlePickerClose),
x: common_vendor.o(($event) => pickerShow.value = $event),
y: common_vendor.p({
duration: 250,
title: _ctx.title || common_vendor.unref(translate)("title"),
["close-on-click-modal"]: _ctx.closeOnClickModal,
["z-index"]: _ctx.zIndex,
["safe-area-inset-bottom"]: _ctx.safeAreaInsetBottom,
modelValue: pickerShow.value
}),
z: common_vendor.n(`wd-col-picker ${common_vendor.unref(cell).border.value ? "is-border" : ""} ${_ctx.customClass}`),
A: common_vendor.s(_ctx.customStyle)
});
};
}
}));
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-adcdd452"]]);
wx.createComponent(Component);