@fmdevui/fm-dev
Version:
Page level components developed based on Element Plus.
684 lines (681 loc) • 25.7 kB
JavaScript
import { defineComponent, ref, reactive, computed, onMounted, resolveComponent, createElementBlock, openBlock, normalizeStyle, createVNode, createBlock, createCommentVNode, createElementVNode, withCtx, createTextVNode, toDisplayString, unref, Fragment, renderList, normalizeClass } from 'vue';
import { useRouter } from 'vue-router';
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus';
import screenfull from 'screenfull';
import { useI18n } from 'vue-i18n';
import { storeToRefs } from 'pinia';
import '../../../stores/index.mjs';
import other from '../../../utils/other/index.mjs';
import emitter from '../../../utils/emit/index.mjs';
import '../../../utils/index.mjs';
import '../../../api/index.mjs';
import Push from 'push.js';
import { Avatar, Loading, Lock, CircleCloseFilled } from '@element-plus/icons-vue';
import { getCountryCode, languageList } from '../../../locales/index.mjs';
import FlagIcon from 'vue3-flag-icons';
import uernewcom from './userNews.vue.mjs';
import './search.vue.mjs';
import './changePassword.vue.mjs';
import onlineusercom from './onlineuser.vue.mjs';
import './upgradeInfo.vue.mjs';
import _sfc_main$1 from './search.vue2.mjs';
import _sfc_main$2 from './changePassword.vue2.mjs';
import _sfc_main$3 from './upgradeInfo.vue2.mjs';
import { useRoutesList } from '../../../stores/routesList.mjs';
import { useUserInfo } from '../../../stores/userInfo.mjs';
import { useThemeConfig } from '../../../stores/themeConfig.mjs';
import { Local, Session } from '../../../utils/storage/index.mjs';
import { PUB } from '../../../utils/const/index.mjs';
import { useSysApi } from '../../../api/sys/index.mjs';
import { clearAccessTokens, decryptJWT } from '../../../api/utils/request.mjs';
const _hoisted_1 = { class: "layout-navbars-breadcrumb-user-icon" };
const _hoisted_2 = ["title"];
const _hoisted_3 = { class: "layout-navbars-breadcrumb-user-icon" };
const _hoisted_4 = { class: "flex items-center" };
const _hoisted_5 = { class: "mr-2" };
const _hoisted_6 = { style: { "margin-left": "10px" } };
const _hoisted_7 = ["title"];
const _hoisted_8 = { class: "layout-navbars-breadcrumb-user-icon" };
const _hoisted_9 = ["title"];
const _hoisted_10 = { class: "layout-navbars-breadcrumb-user-link" };
const _hoisted_11 = ["src"];
var _sfc_main = /* @__PURE__ */ defineComponent({
__name: "user",
setup(__props) {
const UserNews = uernewcom;
const Search = _sfc_main$1;
const OnlineUser = onlineusercom;
const ChangePassword = _sfc_main$2;
const UpgradeInfo = _sfc_main$3;
const routeStores = useRoutesList();
const { locale, t } = useI18n();
const router = useRouter();
const stores = useUserInfo();
const storesThemeConfig = useThemeConfig();
const { userInfos } = storeToRefs(stores);
const { themeConfig } = storeToRefs(storesThemeConfig);
const searchRef = ref();
const onlineUserRef = ref();
const changePasswordRef = ref();
const upgradeInfoRef = ref();
const currentCountryCode = ref(getCountryCode(themeConfig.value.globalI18n));
const state = reactive({
isScreenfull: false,
disabledI18n: "zh-cn",
disabledSize: "large",
noticeList: [],
// 站内信列表
tagsRefsIndex: 0,
tagsViewList: [],
tagsViewRoutesList: []
});
const layoutUserFlexNum = computed(() => {
let num = "";
const { layout, isClassicSplitMenu } = themeConfig.value;
const layoutArr = ["defaults", "columns"];
if (layoutArr.includes(layout) || layout === "classic" && !isClassicSplitMenu) num = "1";
else num = "";
return num;
});
const hasUnreadNotice = computed(() => {
return state.noticeList.some((r) => r.readStatus == void 0 || r.readStatus == 0);
});
const onScreenfullClick = () => {
if (!screenfull.isEnabled) {
ElMessage.warning("\u6682\u4E0D\u4E0D\u652F\u6301\u5168\u5C4F");
return false;
}
screenfull.toggle();
screenfull.on("change", () => {
if (screenfull.isFullscreen) state.isScreenfull = true;
else state.isScreenfull = false;
});
};
const onLayoutSetingClick = () => {
emitter.emit("openSettingsDrawer");
};
const onHandleCommandClick = (path) => {
if (path === "clearCache") {
Local.clear();
Session.clear();
window.location.reload();
} else if (path === "lockScreen") {
Local.remove(PUB.themeConfig);
themeConfig.value.isLockScreen = true;
themeConfig.value.lockScreenTime = 1;
Local.set(PUB.themeConfig, themeConfig.value);
} else if (path === "logOut") {
ElMessageBox({
closeOnClickModal: false,
closeOnPressEscape: false,
title: t("message.user.logOutTitle"),
message: t("message.user.logOutMessage"),
type: "warning",
showCancelButton: true,
confirmButtonText: t("message.user.logOutConfirm"),
cancelButtonText: t("message.user.logOutCancel"),
// buttonSize: 'default',
beforeClose: async (action, instance, done) => {
if (action === "confirm") {
instance.confirmButtonLoading = true;
instance.confirmButtonText = t("message.user.logOutExit");
try {
await useSysApi().Logout();
} catch (error) {
console.error(error);
}
instance.confirmButtonLoading = false;
done();
} else {
done();
}
}
}).then(async () => {
clearAccessTokens();
}).catch(() => {
});
} else {
router.push(path);
}
};
const onSearchClick = () => {
searchRef.value.openSearch();
};
const onOnlineUserClick = () => {
onlineUserRef.value.openDrawer();
};
const onComponentSizeChange = (size) => {
Local.remove(PUB.themeConfig);
themeConfig.value.globalComponentSize = size;
Local.set(PUB.themeConfig, themeConfig.value);
initI18nOrSize("globalComponentSize", "disabledSize");
window.location.reload();
};
const onLanguageChange = (lang) => {
Local.remove(PUB.themeConfig);
themeConfig.value.globalI18n = lang;
Local.set(PUB.themeConfig, themeConfig.value);
currentCountryCode.value = getCountryCode(lang);
locale.value = lang;
other.useTitle();
initI18nOrSize("globalI18n", "disabledI18n");
refreshCurrentTabpage();
};
const refreshCurrentTabpage = () => {
emitter.emit("onCurrentContextmenuClick", { ...routeStores.currentRoute, contextMenuClickId: 0 });
};
const initI18nOrSize = (value, attr) => {
state[attr] = Local.get(PUB.themeConfig)[value];
};
onMounted(async () => {
if (Local.get(PUB.themeConfig)) {
initI18nOrSize("globalComponentSize", "disabledSize");
initI18nOrSize("globalI18n", "disabledI18n");
}
if (Push.Permission.GRANTED) {
Push.Permission.request(() => {
}, () => {
});
}
document.addEventListener("visibilitychange", () => {
if (!document.hidden) {
Push.clear();
}
});
var res = await useSysApi().getNoticeUnReadList();
state.noticeList = res.data.result ?? [];
emitter.emit("onPublicNotice", receiveNotice);
var res1 = await useSysApi().getUpgradeLastUnRead();
if (res1.data.result != null) {
upgradeInfoRef.value?.openDialog(res1.data.result);
}
await changePassword();
});
const receiveNotice = (msg) => {
state.noticeList.unshift(msg);
ElNotification({
title: "\u63D0\u793A",
message: "\u60A8\u6709\u4E00\u6761\u65B0\u6D88\u606F...",
type: "info",
position: "bottom-right"
});
Push.create("\u63D0\u793A", {
body: "\u4F60\u6709\u4E00\u6761\u65B0\u7684\u6D88\u606F",
icon: "logo.png",
// public目录下的
timeout: 4500
// 通知显示时间,单位为毫秒
});
};
const changePassword = async () => {
let userToken = decryptJWT(Local.get(PUB.accessTokenKey));
if (userToken.AccountType == 999) return;
var enabledForceChangePassword = themeConfig.value.forceChangePassword ?? true;
if (enabledForceChangePassword) {
if (userInfos.value.lastChangePasswordTime == null || userInfos.value.lastChangePasswordTime == void 0) {
changePasswordRef.value?.openDialog();
return;
}
}
var passwordExpirationTime = themeConfig.value.passwordExpirationTime ?? 0;
if (passwordExpirationTime > 0) {
var res = await useSysApi().verifyPwdExpirationTime();
if (!res.data.result) {
changePasswordRef.value?.openDialog();
}
}
};
return (_ctx, _cache) => {
const _component_el_dropdown_item = resolveComponent("el-dropdown-item");
const _component_el_dropdown_menu = resolveComponent("el-dropdown-menu");
const _component_el_dropdown = resolveComponent("el-dropdown");
const _component_ele_Search = resolveComponent("ele-Search");
const _component_el_icon = resolveComponent("el-icon");
const _component_ele_Bell = resolveComponent("ele-Bell");
const _component_el_badge = resolveComponent("el-badge");
const _component_el_popover = resolveComponent("el-popover");
const _component_ele_User = resolveComponent("ele-User");
const _component_el_tooltip = resolveComponent("el-tooltip");
const _component_ele_ArrowDown = resolveComponent("ele-ArrowDown");
return openBlock(), createElementBlock(
"div",
{
class: "layout-navbars-breadcrumb-user pr15",
style: normalizeStyle({ flex: layoutUserFlexNum.value })
},
[
createVNode(_component_el_dropdown, {
"show-timeout": 70,
"hide-timeout": 50,
trigger: "click",
onCommand: onComponentSizeChange
}, {
dropdown: withCtx(() => [
createVNode(_component_el_dropdown_menu, null, {
default: withCtx(() => [
createVNode(_component_el_dropdown_item, {
command: "large",
disabled: state.disabledSize === "large"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.user.dropdownLarge")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["disabled"]),
createVNode(_component_el_dropdown_item, {
command: "default",
disabled: state.disabledSize === "default"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.user.dropdownDefault")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["disabled"]),
createVNode(_component_el_dropdown_item, {
command: "small",
disabled: state.disabledSize === "small"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.user.dropdownSmall")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["disabled"])
]),
_: 1
/* STABLE */
})
]),
default: withCtx(() => [
createElementVNode("div", _hoisted_1, [
createElementVNode("i", {
class: "iconfont icon-ziti",
title: _ctx.$t("message.user.title0")
}, null, 8, _hoisted_2)
])
]),
_: 1
/* STABLE */
}),
unref(themeConfig).i18NSwitch ? (openBlock(), createBlock(_component_el_dropdown, {
key: 0,
"show-timeout": 70,
"hide-timeout": 50,
trigger: "click",
onCommand: onLanguageChange
}, {
dropdown: withCtx(() => [
createVNode(_component_el_dropdown_menu, null, {
default: withCtx(() => [
(openBlock(true), createElementBlock(
Fragment,
null,
renderList(unref(languageList), (value, key) => {
return openBlock(), createBlock(_component_el_dropdown_item, {
key,
command: key,
disabled: state.disabledI18n === key
}, {
default: withCtx(() => [
createElementVNode("div", _hoisted_4, [
createElementVNode("div", _hoisted_5, [
createVNode(unref(FlagIcon), {
code: unref(getCountryCode)(key),
size: 18
}, null, 8, ["code"])
]),
createElementVNode(
"div",
_hoisted_6,
toDisplayString(value),
1
/* TEXT */
)
])
]),
_: 2
/* DYNAMIC */
}, 1032, ["command", "disabled"]);
}),
128
/* KEYED_FRAGMENT */
))
]),
_: 1
/* STABLE */
})
]),
default: withCtx(() => [
createElementVNode("div", _hoisted_3, [
createVNode(unref(FlagIcon), {
code: currentCountryCode.value,
square: "",
size: 12,
title: _ctx.$t("message.user.title1")
}, null, 8, ["code", "title"])
])
]),
_: 1
/* STABLE */
})) : createCommentVNode("v-if", true),
createElementVNode("div", {
class: "layout-navbars-breadcrumb-user-icon",
onClick: onSearchClick
}, [
createVNode(_component_el_icon, {
title: _ctx.$t("message.user.title2")
}, {
default: withCtx(() => [
createVNode(_component_ele_Search)
]),
_: 1
/* STABLE */
}, 8, ["title"])
]),
createElementVNode("div", {
class: "layout-navbars-breadcrumb-user-icon",
onClick: onLayoutSetingClick
}, [
createElementVNode("i", {
class: "icon-skin iconfont",
title: _ctx.$t("message.user.title3")
}, null, 8, _hoisted_7)
]),
createElementVNode("div", _hoisted_8, [
createVNode(_component_el_popover, {
placement: "bottom",
trigger: "hover",
transition: "el-zoom-in-top",
width: 300,
persistent: false
}, {
reference: withCtx(() => [
createVNode(_component_el_badge, { "is-dot": hasUnreadNotice.value }, {
default: withCtx(() => [
createVNode(_component_el_icon, {
title: _ctx.$t("message.user.title4")
}, {
default: withCtx(() => [
createVNode(_component_ele_Bell)
]),
_: 1
/* STABLE */
}, 8, ["title"])
]),
_: 1
/* STABLE */
}, 8, ["is-dot"])
]),
default: withCtx(() => [
createVNode(unref(UserNews), {
noticeList: state.noticeList
}, null, 8, ["noticeList"])
]),
_: 1
/* STABLE */
})
]),
createElementVNode("div", {
class: "layout-navbars-breadcrumb-user-icon",
onClick: onScreenfullClick
}, [
createElementVNode("i", {
class: normalizeClass(["iconfont", !state.isScreenfull ? "icon-fullscreen" : "icon-tuichuquanping"]),
title: state.isScreenfull ? _ctx.$t("message.user.title6") : _ctx.$t("message.user.title5")
}, null, 10, _hoisted_9)
]),
createElementVNode("div", {
class: "layout-navbars-breadcrumb-user-icon mr10",
onClick: onOnlineUserClick
}, [
createVNode(_component_el_icon, {
title: _ctx.$t("message.list.onlineUser")
}, {
default: withCtx(() => [
createVNode(_component_ele_User)
]),
_: 1
/* STABLE */
}, 8, ["title"])
]),
createVNode(_component_el_dropdown, {
"show-timeout": 70,
"hide-timeout": 50,
size: "large",
onCommand: onHandleCommandClick
}, {
dropdown: withCtx(() => [
createVNode(_component_el_dropdown_menu, null, {
default: withCtx(() => [
createCommentVNode(` <el-dropdown-item command="/dashboard/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item> `),
createVNode(_component_el_dropdown_item, {
icon: unref(Avatar),
command: "/system/userCenter"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.user.dropdown2")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["icon"]),
createVNode(_component_el_dropdown_item, {
icon: unref(Loading),
command: "clearCache"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.user.dropdown3")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["icon"]),
createVNode(_component_el_dropdown_item, {
icon: unref(Lock),
divided: "",
command: "lockScreen"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.layout.threeIsLockScreen")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["icon"]),
createVNode(_component_el_dropdown_item, {
icon: unref(CircleCloseFilled),
divided: "",
command: "logOut"
}, {
default: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.user.dropdown5")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}, 8, ["icon"])
]),
_: 1
/* STABLE */
})
]),
default: withCtx(() => [
createElementVNode("span", _hoisted_10, [
createVNode(_component_el_tooltip, {
effect: "dark",
placement: "left"
}, {
content: withCtx(() => [
createTextVNode(
toDisplayString(_ctx.$t("message.list.account")) + "\uFF1A" + toDisplayString(unref(userInfos).account),
1
/* TEXT */
),
_cache[0] || (_cache[0] = createElementVNode(
"br",
null,
null,
-1
/* CACHED */
)),
createTextVNode(
" " + toDisplayString(_ctx.$t("message.list.realName")) + "\uFF1A" + toDisplayString(unref(userInfos).realName),
1
/* TEXT */
),
_cache[1] || (_cache[1] = createElementVNode(
"br",
null,
null,
-1
/* CACHED */
)),
createTextVNode(
" " + toDisplayString(_ctx.$t("message.list.phone")) + "\uFF1A" + toDisplayString(unref(userInfos).phone),
1
/* TEXT */
),
_cache[2] || (_cache[2] = createElementVNode(
"br",
null,
null,
-1
/* CACHED */
)),
createTextVNode(
" " + toDisplayString(_ctx.$t("message.list.email")) + "\uFF1A" + toDisplayString(unref(userInfos).email),
1
/* TEXT */
),
_cache[3] || (_cache[3] = createElementVNode(
"br",
null,
null,
-1
/* CACHED */
)),
createTextVNode(
" " + toDisplayString(_ctx.$t("message.list.orgName")) + "\uFF1A" + toDisplayString(unref(userInfos).orgName),
1
/* TEXT */
),
_cache[4] || (_cache[4] = createElementVNode(
"br",
null,
null,
-1
/* CACHED */
)),
createTextVNode(
" " + toDisplayString(_ctx.$t("message.list.positionText")) + "\uFF1A" + toDisplayString(unref(userInfos).posName),
1
/* TEXT */
),
_cache[5] || (_cache[5] = createElementVNode(
"br",
null,
null,
-1
/* CACHED */
))
]),
default: withCtx(() => [
createElementVNode("img", {
src: unref(userInfos).avatar,
class: "layout-navbars-breadcrumb-user-link-photo mr5"
}, null, 8, _hoisted_11)
]),
_: 1
/* STABLE */
}),
createTextVNode(
" " + toDisplayString(unref(userInfos).realName == "" ? unref(userInfos).account : unref(userInfos).realName) + " ",
1
/* TEXT */
),
createVNode(_component_el_icon, { class: "el-icon--right" }, {
default: withCtx(() => [
createVNode(_component_ele_ArrowDown)
]),
_: 1
/* STABLE */
})
])
]),
_: 1
/* STABLE */
}),
createVNode(
unref(Search),
{
ref_key: "searchRef",
ref: searchRef
},
null,
512
/* NEED_PATCH */
),
createVNode(
unref(OnlineUser),
{
ref_key: "onlineUserRef",
ref: onlineUserRef
},
null,
512
/* NEED_PATCH */
),
createVNode(
unref(ChangePassword),
{
ref_key: "changePasswordRef",
ref: changePasswordRef
},
null,
512
/* NEED_PATCH */
),
createVNode(
unref(UpgradeInfo),
{
ref_key: "upgradeInfoRef",
ref: upgradeInfoRef
},
null,
512
/* NEED_PATCH */
)
],
4
/* STYLE */
);
};
}
});
export { _sfc_main as default };