UNPKG

@fmdevui/fm-dev

Version:

Page level components developed based on Element Plus.

688 lines (683 loc) 26.8 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var vueRouter = require('vue-router'); var elementPlus = require('element-plus'); var screenfull = require('screenfull'); var vueI18n = require('vue-i18n'); var pinia = require('pinia'); require('../../../stores/index.js'); var index$5 = require('../../../utils/other/index.js'); var index$1 = require('../../../utils/emit/index.js'); require('../../../utils/index.js'); require('../../../api/index.js'); var Push = require('push.js'); var svg = require('@element-plus/icons-vue'); var index = require('../../../locales/index.js'); var FlagIcon = require('vue3-flag-icons'); var userNews = require('./userNews.vue.js'); require('./search.vue.js'); require('./changePassword.vue.js'); var onlineuser = require('./onlineuser.vue.js'); require('./upgradeInfo.vue.js'); var search_vue_vue_type_script_setup_true_name_layoutBreadcrumbSearch_lang = require('./search.vue2.js'); var changePassword_vue_vue_type_script_setup_true_lang = require('./changePassword.vue2.js'); var upgradeInfo_vue_vue_type_script_setup_true_lang = require('./upgradeInfo.vue2.js'); var routesList = require('../../../stores/routesList.js'); var userInfo = require('../../../stores/userInfo.js'); var themeConfig = require('../../../stores/themeConfig.js'); var index$2 = require('../../../utils/storage/index.js'); var index$3 = require('../../../utils/const/index.js'); var index$4 = require('../../../api/sys/index.js'); var request = require('../../../api/utils/request.js'); 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__ */ vue.defineComponent({ __name: "user", setup(__props) { const UserNews = userNews.default; const Search = search_vue_vue_type_script_setup_true_name_layoutBreadcrumbSearch_lang.default; const OnlineUser = onlineuser.default; const ChangePassword = changePassword_vue_vue_type_script_setup_true_lang.default; const UpgradeInfo = upgradeInfo_vue_vue_type_script_setup_true_lang.default; const routeStores = routesList.useRoutesList(); const { locale, t } = vueI18n.useI18n(); const router = vueRouter.useRouter(); const stores = userInfo.useUserInfo(); const storesThemeConfig = themeConfig.useThemeConfig(); const { userInfos } = pinia.storeToRefs(stores); const { themeConfig: themeConfig$1 } = pinia.storeToRefs(storesThemeConfig); const searchRef = vue.ref(); const onlineUserRef = vue.ref(); const changePasswordRef = vue.ref(); const upgradeInfoRef = vue.ref(); const currentCountryCode = vue.ref(index.getCountryCode(themeConfig$1.value.globalI18n)); const state = vue.reactive({ isScreenfull: false, disabledI18n: "zh-cn", disabledSize: "large", noticeList: [], // 站内信列表 tagsRefsIndex: 0, tagsViewList: [], tagsViewRoutesList: [] }); const layoutUserFlexNum = vue.computed(() => { let num = ""; const { layout, isClassicSplitMenu } = themeConfig$1.value; const layoutArr = ["defaults", "columns"]; if (layoutArr.includes(layout) || layout === "classic" && !isClassicSplitMenu) num = "1"; else num = ""; return num; }); const hasUnreadNotice = vue.computed(() => { return state.noticeList.some((r) => r.readStatus == void 0 || r.readStatus == 0); }); const onScreenfullClick = () => { if (!screenfull.isEnabled) { elementPlus.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 = () => { index$1.default.emit("openSettingsDrawer"); }; const onHandleCommandClick = (path) => { if (path === "clearCache") { index$2.Local.clear(); index$2.Session.clear(); window.location.reload(); } else if (path === "lockScreen") { index$2.Local.remove(index$3.PUB.themeConfig); themeConfig$1.value.isLockScreen = true; themeConfig$1.value.lockScreenTime = 1; index$2.Local.set(index$3.PUB.themeConfig, themeConfig$1.value); } else if (path === "logOut") { elementPlus.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 index$4.useSysApi().Logout(); } catch (error) { console.error(error); } instance.confirmButtonLoading = false; done(); } else { done(); } } }).then(async () => { request.clearAccessTokens(); }).catch(() => { }); } else { router.push(path); } }; const onSearchClick = () => { searchRef.value.openSearch(); }; const onOnlineUserClick = () => { onlineUserRef.value.openDrawer(); }; const onComponentSizeChange = (size) => { index$2.Local.remove(index$3.PUB.themeConfig); themeConfig$1.value.globalComponentSize = size; index$2.Local.set(index$3.PUB.themeConfig, themeConfig$1.value); initI18nOrSize("globalComponentSize", "disabledSize"); window.location.reload(); }; const onLanguageChange = (lang) => { index$2.Local.remove(index$3.PUB.themeConfig); themeConfig$1.value.globalI18n = lang; index$2.Local.set(index$3.PUB.themeConfig, themeConfig$1.value); currentCountryCode.value = index.getCountryCode(lang); locale.value = lang; index$5.default.useTitle(); initI18nOrSize("globalI18n", "disabledI18n"); refreshCurrentTabpage(); }; const refreshCurrentTabpage = () => { index$1.default.emit("onCurrentContextmenuClick", { ...routeStores.currentRoute, contextMenuClickId: 0 }); }; const initI18nOrSize = (value, attr) => { state[attr] = index$2.Local.get(index$3.PUB.themeConfig)[value]; }; vue.onMounted(async () => { if (index$2.Local.get(index$3.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 index$4.useSysApi().getNoticeUnReadList(); state.noticeList = res.data.result ?? []; index$1.default.emit("onPublicNotice", receiveNotice); var res1 = await index$4.useSysApi().getUpgradeLastUnRead(); if (res1.data.result != null) { upgradeInfoRef.value?.openDialog(res1.data.result); } await changePassword(); }); const receiveNotice = (msg) => { state.noticeList.unshift(msg); elementPlus.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 = request.decryptJWT(index$2.Local.get(index$3.PUB.accessTokenKey)); if (userToken.AccountType == 999) return; var enabledForceChangePassword = themeConfig$1.value.forceChangePassword ?? true; if (enabledForceChangePassword) { if (userInfos.value.lastChangePasswordTime == null || userInfos.value.lastChangePasswordTime == void 0) { changePasswordRef.value?.openDialog(); return; } } var passwordExpirationTime = themeConfig$1.value.passwordExpirationTime ?? 0; if (passwordExpirationTime > 0) { var res = await index$4.useSysApi().verifyPwdExpirationTime(); if (!res.data.result) { changePasswordRef.value?.openDialog(); } } }; return (_ctx, _cache) => { const _component_el_dropdown_item = vue.resolveComponent("el-dropdown-item"); const _component_el_dropdown_menu = vue.resolveComponent("el-dropdown-menu"); const _component_el_dropdown = vue.resolveComponent("el-dropdown"); const _component_ele_Search = vue.resolveComponent("ele-Search"); const _component_el_icon = vue.resolveComponent("el-icon"); const _component_ele_Bell = vue.resolveComponent("ele-Bell"); const _component_el_badge = vue.resolveComponent("el-badge"); const _component_el_popover = vue.resolveComponent("el-popover"); const _component_ele_User = vue.resolveComponent("ele-User"); const _component_el_tooltip = vue.resolveComponent("el-tooltip"); const _component_ele_ArrowDown = vue.resolveComponent("ele-ArrowDown"); return vue.openBlock(), vue.createElementBlock( "div", { class: "layout-navbars-breadcrumb-user pr15", style: vue.normalizeStyle({ flex: layoutUserFlexNum.value }) }, [ vue.createVNode(_component_el_dropdown, { "show-timeout": 70, "hide-timeout": 50, trigger: "click", onCommand: onComponentSizeChange }, { dropdown: vue.withCtx(() => [ vue.createVNode(_component_el_dropdown_menu, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_dropdown_item, { command: "large", disabled: state.disabledSize === "large" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.user.dropdownLarge")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["disabled"]), vue.createVNode(_component_el_dropdown_item, { command: "default", disabled: state.disabledSize === "default" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.user.dropdownDefault")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["disabled"]), vue.createVNode(_component_el_dropdown_item, { command: "small", disabled: state.disabledSize === "small" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.user.dropdownSmall")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["disabled"]) ]), _: 1 /* STABLE */ }) ]), default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_1, [ vue.createElementVNode("i", { class: "iconfont icon-ziti", title: _ctx.$t("message.user.title0") }, null, 8, _hoisted_2) ]) ]), _: 1 /* STABLE */ }), vue.unref(themeConfig$1).i18NSwitch ? (vue.openBlock(), vue.createBlock(_component_el_dropdown, { key: 0, "show-timeout": 70, "hide-timeout": 50, trigger: "click", onCommand: onLanguageChange }, { dropdown: vue.withCtx(() => [ vue.createVNode(_component_el_dropdown_menu, null, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(vue.unref(index.languageList), (value, key) => { return vue.openBlock(), vue.createBlock(_component_el_dropdown_item, { key, command: key, disabled: state.disabledI18n === key }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_4, [ vue.createElementVNode("div", _hoisted_5, [ vue.createVNode(vue.unref(FlagIcon), { code: vue.unref(index.getCountryCode)(key), size: 18 }, null, 8, ["code"]) ]), vue.createElementVNode( "div", _hoisted_6, vue.toDisplayString(value), 1 /* TEXT */ ) ]) ]), _: 2 /* DYNAMIC */ }, 1032, ["command", "disabled"]); }), 128 /* KEYED_FRAGMENT */ )) ]), _: 1 /* STABLE */ }) ]), default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_3, [ vue.createVNode(vue.unref(FlagIcon), { code: currentCountryCode.value, square: "", size: 12, title: _ctx.$t("message.user.title1") }, null, 8, ["code", "title"]) ]) ]), _: 1 /* STABLE */ })) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { class: "layout-navbars-breadcrumb-user-icon", onClick: onSearchClick }, [ vue.createVNode(_component_el_icon, { title: _ctx.$t("message.user.title2") }, { default: vue.withCtx(() => [ vue.createVNode(_component_ele_Search) ]), _: 1 /* STABLE */ }, 8, ["title"]) ]), vue.createElementVNode("div", { class: "layout-navbars-breadcrumb-user-icon", onClick: onLayoutSetingClick }, [ vue.createElementVNode("i", { class: "icon-skin iconfont", title: _ctx.$t("message.user.title3") }, null, 8, _hoisted_7) ]), vue.createElementVNode("div", _hoisted_8, [ vue.createVNode(_component_el_popover, { placement: "bottom", trigger: "hover", transition: "el-zoom-in-top", width: 300, persistent: false }, { reference: vue.withCtx(() => [ vue.createVNode(_component_el_badge, { "is-dot": hasUnreadNotice.value }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_icon, { title: _ctx.$t("message.user.title4") }, { default: vue.withCtx(() => [ vue.createVNode(_component_ele_Bell) ]), _: 1 /* STABLE */ }, 8, ["title"]) ]), _: 1 /* STABLE */ }, 8, ["is-dot"]) ]), default: vue.withCtx(() => [ vue.createVNode(vue.unref(UserNews), { noticeList: state.noticeList }, null, 8, ["noticeList"]) ]), _: 1 /* STABLE */ }) ]), vue.createElementVNode("div", { class: "layout-navbars-breadcrumb-user-icon", onClick: onScreenfullClick }, [ vue.createElementVNode("i", { class: vue.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) ]), vue.createElementVNode("div", { class: "layout-navbars-breadcrumb-user-icon mr10", onClick: onOnlineUserClick }, [ vue.createVNode(_component_el_icon, { title: _ctx.$t("message.list.onlineUser") }, { default: vue.withCtx(() => [ vue.createVNode(_component_ele_User) ]), _: 1 /* STABLE */ }, 8, ["title"]) ]), vue.createVNode(_component_el_dropdown, { "show-timeout": 70, "hide-timeout": 50, size: "large", onCommand: onHandleCommandClick }, { dropdown: vue.withCtx(() => [ vue.createVNode(_component_el_dropdown_menu, null, { default: vue.withCtx(() => [ vue.createCommentVNode(` <el-dropdown-item command="/dashboard/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item> `), vue.createVNode(_component_el_dropdown_item, { icon: vue.unref(svg.Avatar), command: "/system/userCenter" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.user.dropdown2")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["icon"]), vue.createVNode(_component_el_dropdown_item, { icon: vue.unref(svg.Loading), command: "clearCache" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.user.dropdown3")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["icon"]), vue.createVNode(_component_el_dropdown_item, { icon: vue.unref(svg.Lock), divided: "", command: "lockScreen" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.layout.threeIsLockScreen")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["icon"]), vue.createVNode(_component_el_dropdown_item, { icon: vue.unref(svg.CircleCloseFilled), divided: "", command: "logOut" }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.user.dropdown5")), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["icon"]) ]), _: 1 /* STABLE */ }) ]), default: vue.withCtx(() => [ vue.createElementVNode("span", _hoisted_10, [ vue.createVNode(_component_el_tooltip, { effect: "dark", placement: "left" }, { content: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(_ctx.$t("message.list.account")) + "\uFF1A" + vue.toDisplayString(vue.unref(userInfos).account), 1 /* TEXT */ ), _cache[0] || (_cache[0] = vue.createElementVNode( "br", null, null, -1 /* CACHED */ )), vue.createTextVNode( " " + vue.toDisplayString(_ctx.$t("message.list.realName")) + "\uFF1A" + vue.toDisplayString(vue.unref(userInfos).realName), 1 /* TEXT */ ), _cache[1] || (_cache[1] = vue.createElementVNode( "br", null, null, -1 /* CACHED */ )), vue.createTextVNode( " " + vue.toDisplayString(_ctx.$t("message.list.phone")) + "\uFF1A" + vue.toDisplayString(vue.unref(userInfos).phone), 1 /* TEXT */ ), _cache[2] || (_cache[2] = vue.createElementVNode( "br", null, null, -1 /* CACHED */ )), vue.createTextVNode( " " + vue.toDisplayString(_ctx.$t("message.list.email")) + "\uFF1A" + vue.toDisplayString(vue.unref(userInfos).email), 1 /* TEXT */ ), _cache[3] || (_cache[3] = vue.createElementVNode( "br", null, null, -1 /* CACHED */ )), vue.createTextVNode( " " + vue.toDisplayString(_ctx.$t("message.list.orgName")) + "\uFF1A" + vue.toDisplayString(vue.unref(userInfos).orgName), 1 /* TEXT */ ), _cache[4] || (_cache[4] = vue.createElementVNode( "br", null, null, -1 /* CACHED */ )), vue.createTextVNode( " " + vue.toDisplayString(_ctx.$t("message.list.positionText")) + "\uFF1A" + vue.toDisplayString(vue.unref(userInfos).posName), 1 /* TEXT */ ), _cache[5] || (_cache[5] = vue.createElementVNode( "br", null, null, -1 /* CACHED */ )) ]), default: vue.withCtx(() => [ vue.createElementVNode("img", { src: vue.unref(userInfos).avatar, class: "layout-navbars-breadcrumb-user-link-photo mr5" }, null, 8, _hoisted_11) ]), _: 1 /* STABLE */ }), vue.createTextVNode( " " + vue.toDisplayString(vue.unref(userInfos).realName == "" ? vue.unref(userInfos).account : vue.unref(userInfos).realName) + " ", 1 /* TEXT */ ), vue.createVNode(_component_el_icon, { class: "el-icon--right" }, { default: vue.withCtx(() => [ vue.createVNode(_component_ele_ArrowDown) ]), _: 1 /* STABLE */ }) ]) ]), _: 1 /* STABLE */ }), vue.createVNode( vue.unref(Search), { ref_key: "searchRef", ref: searchRef }, null, 512 /* NEED_PATCH */ ), vue.createVNode( vue.unref(OnlineUser), { ref_key: "onlineUserRef", ref: onlineUserRef }, null, 512 /* NEED_PATCH */ ), vue.createVNode( vue.unref(ChangePassword), { ref_key: "changePasswordRef", ref: changePasswordRef }, null, 512 /* NEED_PATCH */ ), vue.createVNode( vue.unref(UpgradeInfo), { ref_key: "upgradeInfoRef", ref: upgradeInfoRef }, null, 512 /* NEED_PATCH */ ) ], 4 /* STYLE */ ); }; } }); exports.default = _sfc_main;