398 lines
12 KiB
JavaScript
398 lines
12 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));
|
||
var __async = (__this, __arguments, generator) => {
|
||
return new Promise((resolve, reject) => {
|
||
var fulfilled = (value) => {
|
||
try {
|
||
step(generator.next(value));
|
||
} catch (e) {
|
||
reject(e);
|
||
}
|
||
};
|
||
var rejected = (value) => {
|
||
try {
|
||
step(generator.throw(value));
|
||
} catch (e) {
|
||
reject(e);
|
||
}
|
||
};
|
||
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||
step((generator = generator.apply(__this, __arguments)).next());
|
||
});
|
||
};
|
||
const common_vendor = require("../../../common/vendor.js");
|
||
const tmui_tool_lib_minxs = require("../../tool/lib/minxs.js");
|
||
const tmui_tool_lib_tmpinia = require("../../tool/lib/tmpinia.js");
|
||
require("../../tool/theme/theme.js");
|
||
require("../../tool/theme/colortool.js");
|
||
require("../../tool/lib/interface.js");
|
||
require("../../tool/function/util.js");
|
||
require("../../tool/function/preview.js");
|
||
if (!Math) {
|
||
(tmIcon + tmBadge + tmText + tmSheet)();
|
||
}
|
||
const tmBadge = () => "../tm-badge/tm-badge.js";
|
||
const tmText = () => "../tm-text/tm-text.js";
|
||
const tmIcon = () => "../tm-icon/tm-icon.js";
|
||
const tmSheet = () => "../tm-sheet/tm-sheet.js";
|
||
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||
__name: "tm-tabbar-item",
|
||
props: __spreadProps(__spreadValues({}, tmui_tool_lib_minxs.custom_props), {
|
||
followTheme: {
|
||
type: [Boolean, String],
|
||
default: true
|
||
},
|
||
transprent: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
//背景主题色
|
||
color: {
|
||
type: String,
|
||
default: "white"
|
||
},
|
||
//默认的文字主题
|
||
fontColor: {
|
||
type: String,
|
||
default: "grey-darken-1"
|
||
},
|
||
linear: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
//激活后的主题色。
|
||
activeColor: {
|
||
type: String,
|
||
default: "primary"
|
||
},
|
||
//当前是否是活动项。
|
||
active: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
//是否开启向上凸起的按钮。
|
||
btnTop: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
text: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
icon: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
//未选中时的图标,如果不填写默认使用相同的图标。
|
||
unicon: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
textSize: {
|
||
type: Number,
|
||
default: 20
|
||
},
|
||
iconSize: {
|
||
type: Number,
|
||
default: 38
|
||
},
|
||
dot: {
|
||
type: [Boolean],
|
||
default: false
|
||
},
|
||
dotColor: {
|
||
type: [String],
|
||
default: "red"
|
||
},
|
||
dotIcon: {
|
||
type: [String],
|
||
default: ""
|
||
},
|
||
//如果count为数字时,显示数字角标,如果为string是显示文本角标。
|
||
count: {
|
||
type: [Number, String],
|
||
default: 0
|
||
},
|
||
maxCount: {
|
||
type: [Number],
|
||
default: 99
|
||
},
|
||
url: {
|
||
type: [String],
|
||
default: ""
|
||
},
|
||
//链接打开方式同官方。
|
||
openType: {
|
||
type: String,
|
||
default: "navigate"
|
||
},
|
||
//打开链接之前执行的勾子函数,返回fase阻止打开。也可以返回new Promise.
|
||
beforeClick: {
|
||
type: [Function, Boolean],
|
||
default: () => false
|
||
},
|
||
load: {
|
||
type: [Boolean, String],
|
||
default: false
|
||
},
|
||
//自定项目数据,在执行beforeClick时,会返回给函数内部
|
||
data: {
|
||
type: [Object, String, Number],
|
||
default: () => void 0
|
||
},
|
||
/**是否禁用选项. */
|
||
disabled: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* 为了提高响应速度,只有开启了自定图标显示功能才会去解析用户自定义图标规则名称
|
||
*/
|
||
customicon: {
|
||
type: Boolean,
|
||
default: false
|
||
}
|
||
}),
|
||
emits: ["click", "beforeClick"],
|
||
setup(__props, { emit: emits }) {
|
||
var _a, _b, _c;
|
||
const props = __props;
|
||
const store = tmui_tool_lib_tmpinia.useTmpiniaStore();
|
||
const proxy = (_b = (_a = common_vendor.getCurrentInstance()) == null ? void 0 : _a.proxy) != null ? _b : null;
|
||
const _btnTop = common_vendor.computed(() => props.btnTop);
|
||
const _transprent = common_vendor.computed(() => {
|
||
if (_btnTop.value === true)
|
||
return false;
|
||
return true;
|
||
});
|
||
const _styletop = common_vendor.computed(() => {
|
||
if (_btnTop.value !== true)
|
||
return "top:15px";
|
||
return "top:0px";
|
||
});
|
||
const _padding = common_vendor.computed(() => {
|
||
return [0, 0];
|
||
});
|
||
const _disabled = common_vendor.computed(() => props.disabled);
|
||
const _load = common_vendor.ref(props.load);
|
||
const _active = common_vendor.ref(false);
|
||
const c_font_style = common_vendor.computed(() => {
|
||
return {
|
||
dotColor: props.dotColor,
|
||
text: props.text,
|
||
icon: props.icon,
|
||
textSize: props.textSize,
|
||
iconSize: props.iconSize,
|
||
unicon: props.unicon
|
||
};
|
||
});
|
||
const uid = common_vendor.index.$tm.u.getUid(1);
|
||
const tmTabbarWidth = common_vendor.inject(
|
||
"tmTabbarWidth",
|
||
common_vendor.computed(() => 50)
|
||
);
|
||
const _width = common_vendor.computed(() => {
|
||
if (_btnTop.value === true)
|
||
return 60;
|
||
return tmTabbarWidth.value;
|
||
});
|
||
common_vendor.inject(
|
||
"tmTabbarUrl",
|
||
common_vendor.computed(() => "")
|
||
);
|
||
const tmTabbarItemList = common_vendor.inject(
|
||
"tmTabbarItemList",
|
||
common_vendor.computed(() => [])
|
||
);
|
||
const nowUid = common_vendor.inject(
|
||
"tmTabbarUid",
|
||
common_vendor.computed(() => "")
|
||
);
|
||
common_vendor.inject("tmTabbarItemSafe", false);
|
||
const tmTabbarItemActive = common_vendor.inject(
|
||
"tmTabbarItemActive",
|
||
common_vendor.computed(() => -1)
|
||
);
|
||
const tmTabbarItemAutoSelect = common_vendor.inject(
|
||
"tmTabbarItemAutoSelect",
|
||
common_vendor.computed(() => false)
|
||
);
|
||
const _color = common_vendor.computed(() => {
|
||
if (_active.value === true && !_btnTop.value) {
|
||
if (store.tmStore.color && props.followTheme) {
|
||
return store.tmStore.color;
|
||
}
|
||
return props.activeColor;
|
||
}
|
||
return props.fontColor;
|
||
});
|
||
let parent = proxy == null ? void 0 : proxy.$parent;
|
||
while (parent) {
|
||
if ((parent == null ? void 0 : parent.tmTabbarId) == "tmTabbarId" || !parent) {
|
||
break;
|
||
} else {
|
||
parent = (_c = parent == null ? void 0 : parent.$parent) != null ? _c : void 0;
|
||
}
|
||
}
|
||
if (parent) {
|
||
parent.pushKey(uid);
|
||
}
|
||
common_vendor.onUnmounted(() => {
|
||
if (parent) {
|
||
parent.delKey(uid);
|
||
}
|
||
});
|
||
if (tmTabbarItemAutoSelect.value) {
|
||
_active.value = props.active || false;
|
||
} else {
|
||
if (tmTabbarItemList.value[tmTabbarItemActive.value] == uid) {
|
||
_active.value = true;
|
||
} else {
|
||
_active.value = false;
|
||
}
|
||
}
|
||
function setActive() {
|
||
if (nowUid.value == uid) {
|
||
_active.value = true;
|
||
} else {
|
||
_active.value = false;
|
||
}
|
||
}
|
||
common_vendor.watch([nowUid, () => props.active], () => {
|
||
if (tmTabbarItemAutoSelect.value) {
|
||
setActive();
|
||
}
|
||
});
|
||
common_vendor.watch(tmTabbarItemActive, () => {
|
||
if (!tmTabbarItemAutoSelect.value) {
|
||
if (tmTabbarItemList.value[tmTabbarItemActive.value] == uid) {
|
||
common_vendor.nextTick$1(() => {
|
||
_active.value = true;
|
||
});
|
||
} else {
|
||
common_vendor.nextTick$1(() => {
|
||
_active.value = false;
|
||
});
|
||
}
|
||
}
|
||
});
|
||
common_vendor.watch([() => props.load], () => {
|
||
_load.value = props.load;
|
||
});
|
||
function itemClick() {
|
||
return __async(this, null, function* () {
|
||
if (_load.value || _disabled.value)
|
||
return;
|
||
if (typeof props.beforeClick === "function") {
|
||
_load.value = true;
|
||
let p = yield props.beforeClick(props.data);
|
||
if (typeof p === "function") {
|
||
p = yield p(props.data);
|
||
}
|
||
_load.value = false;
|
||
if (!p)
|
||
return;
|
||
}
|
||
emits("click");
|
||
common_vendor.nextTick$1(() => {
|
||
if (tmTabbarItemAutoSelect.value) {
|
||
if (parent) {
|
||
parent.setNowurl(props.url, uid);
|
||
}
|
||
setActive();
|
||
}
|
||
if (props.url == "")
|
||
return;
|
||
common_vendor.index.$tm.u.routerTo(props.url, props.openType);
|
||
});
|
||
});
|
||
}
|
||
return (_ctx, _cache) => {
|
||
return common_vendor.e({
|
||
a: !_load.value
|
||
}, !_load.value ? {
|
||
b: common_vendor.p({
|
||
customicon: props.customicon,
|
||
_style: "line-height: 0px;",
|
||
color: common_vendor.unref(_color),
|
||
["font-size"]: common_vendor.unref(c_font_style).iconSize,
|
||
name: _active.value ? common_vendor.unref(c_font_style).icon : common_vendor.unref(c_font_style).unicon || common_vendor.unref(c_font_style).icon
|
||
})
|
||
} : {}, {
|
||
c: _load.value
|
||
}, _load.value ? {
|
||
d: common_vendor.p({
|
||
spin: true,
|
||
_style: "line-height: 0px;",
|
||
color: common_vendor.unref(_color),
|
||
["font-size"]: common_vendor.unref(c_font_style).iconSize,
|
||
name: "tmicon-shuaxin"
|
||
})
|
||
} : {}, {
|
||
e: common_vendor.n(_active.value ? "anifun" : ""),
|
||
f: "65px",
|
||
g: common_vendor.p({
|
||
fontSize: 20,
|
||
color: common_vendor.unref(c_font_style).dotColor,
|
||
eventPenetrationEnabled: true,
|
||
dot: props.dot,
|
||
count: props.count,
|
||
icon: props.dotIcon,
|
||
maxCount: props.maxCount
|
||
}),
|
||
h: common_vendor.unref(c_font_style).text !== ""
|
||
}, common_vendor.unref(c_font_style).text !== "" ? {
|
||
i: common_vendor.p({
|
||
color: common_vendor.unref(_color),
|
||
_class: "pb-0",
|
||
["font-size"]: common_vendor.unref(c_font_style).textSize,
|
||
label: common_vendor.unref(c_font_style).text
|
||
})
|
||
} : {}, {
|
||
j: common_vendor.o(itemClick),
|
||
k: common_vendor.p({
|
||
height: 60,
|
||
width: common_vendor.unref(_width),
|
||
round: 24,
|
||
unit: "px",
|
||
_class: "flex-center flex ",
|
||
parenClass: "relative",
|
||
_style: common_vendor.unref(_styletop),
|
||
followTheme: common_vendor.unref(_btnTop) && props.followTheme,
|
||
transprent: common_vendor.unref(_transprent),
|
||
color: props.color,
|
||
margin: [0, 0],
|
||
padding: common_vendor.unref(_padding),
|
||
shadow: props.shadow,
|
||
outlined: props.outlined,
|
||
border: props.border,
|
||
borderStyle: props.borderStyle,
|
||
borderDirection: props.borderDirection,
|
||
linear: props.linear,
|
||
linearDeep: props.linearDeep
|
||
})
|
||
});
|
||
};
|
||
}
|
||
});
|
||
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-f3ab9f5c"], ["__file", "D:/WebstormProjects/uni-ticket-system/src/tmui/components/tm-tabbar-item/tm-tabbar-item.vue"]]);
|
||
wx.createComponent(Component);
|