UNPKG

@fmdevui/fm-dev

Version:

Page level components developed based on Element Plus.

684 lines (681 loc) 25.7 kB
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 };