@fmdevui/fm-dev
Version:
Page level components developed based on Element Plus.
688 lines (683 loc) • 26.8 kB
JavaScript
;
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;