|
@@ -15,37 +15,38 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="main">
|
|
<div class="main">
|
|
|
<div class="col">
|
|
<div class="col">
|
|
|
- <div class="row2" style="background-color: #30CA79;">
|
|
|
|
|
|
|
+ <div class="row2" :style="backgroudColor('44')">
|
|
|
<img class="image2" :src="img1" />
|
|
<img class="image2" :src="img1" />
|
|
|
- <div class="text2"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(44)">社区居家养老管理系统</el-link></div>
|
|
|
|
|
|
|
+ <div class="text2" @click="handlerLinkDiv('44')"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(44)" :disabled="hasNoClientPri('44')">社区居家养老管理系统</el-link></div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="row2" style="background-color: #32B19E;">
|
|
|
|
|
|
|
+ <div class="row2" :style="backgroudColor('43')">
|
|
|
<img class="image2" :src="img2" />
|
|
<img class="image2" :src="img2" />
|
|
|
- <div class="text2"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(43)">智慧养老IOT物联网平台</el-link></div>
|
|
|
|
|
|
|
+ <div class="text2" @click="handlerLinkDiv('43')"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(43)" :disabled="hasNoClientPri('43')">智慧养老物联网系统</el-link></div>
|
|
|
<!-- <div class="text2"><a class="aaa" href="http://web.poteviohealth.com/boss/" target="_blank">智慧养老IOT物联网平台</a></div>-->
|
|
<!-- <div class="text2"><a class="aaa" href="http://web.poteviohealth.com/boss/" target="_blank">智慧养老IOT物联网平台</a></div>-->
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="col col3" style="background-color: #00734D;">
|
|
|
|
|
- <div class="text0"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(45)">康养大数据平台</el-link></div>
|
|
|
|
|
|
|
+ <div class="col col3" :style="backgroudColor('45')">
|
|
|
|
|
+ <div class="text0" @click="handlerLinkDiv('45')"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(45)" :disabled="hasNoClientPri('45')">数据可视化系统</el-link></div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="col">
|
|
<div class="col">
|
|
|
- <div class="row2" style="background-color: #4C4B6B;">
|
|
|
|
|
|
|
+ <div class="row2" style="background-color: #c9d6df;">
|
|
|
<img class="image2" :src="img5" />
|
|
<img class="image2" :src="img5" />
|
|
|
- <div class="text2"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(50)">机构养老运营管理系统</el-link></div>
|
|
|
|
|
|
|
+<!-- <div class="text2" @click="handlerLinkDiv('50')"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(50)" :disabled="hasNoClientPri('45')">机构养老运营管理系统</el-link></div>-->
|
|
|
|
|
+ <div class="text2">机构养老运营管理系统</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="row2" style="background-color: #4A8EE2;">
|
|
|
|
|
|
|
+ <div class="row2" :style="backgroudColor('49')">
|
|
|
<img class="image2" :src="img6" />
|
|
<img class="image2" :src="img6" />
|
|
|
- <div class="text2"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(49)">旅居养老运营管理系统</el-link></div>
|
|
|
|
|
|
|
+ <div class="text2" @click="handlerLinkDiv('49')"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(49)" :disabled="hasNoClientPri('49')">旅居养老运营管理系统</el-link></div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="col">
|
|
<div class="col">
|
|
|
- <div class="row2" style="background-color: #F3B144;">
|
|
|
|
|
- <img class="image2" :src="img7" />
|
|
|
|
|
- <div class="text2"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(46)">运营数据分析平台</el-link></div>
|
|
|
|
|
|
|
+ <div class="row2" :style="backgroudColor('46')">
|
|
|
|
|
+ <img class="img_gray" :src="img7" />
|
|
|
|
|
+ <div class="text2" @click="handlerLinkDiv('46')"><el-link style="font-size: 30px;color: #fff; font-weight: 500" @click="handlerLink(46)" :disabled="hasNoClientPri('46')">运营数据分析系统</el-link></div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="row2" style="background-color: #AACC05;">
|
|
|
|
|
|
|
+ <div class="row2" :style="backgroudColor('100')">
|
|
|
<img class="image2" :src="img8" />
|
|
<img class="image2" :src="img8" />
|
|
|
- <div class="text2">建设中</div>
|
|
|
|
|
|
|
+ <div class="text2">技术开发集成系统</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -78,6 +79,7 @@ import {useUserStore} from '@/store/modules/user'
|
|
|
import {useTagsViewStore} from '@/store/modules/tagsView'
|
|
import {useTagsViewStore} from '@/store/modules/tagsView'
|
|
|
import {CACHE_KEY, useCache, deleteUserCache} from '@/hooks/web/useCache'
|
|
import {CACHE_KEY, useCache, deleteUserCache} from '@/hooks/web/useCache'
|
|
|
import { resetRouter } from '@/router'
|
|
import { resetRouter } from '@/router'
|
|
|
|
|
+import { hasClient } from '@/directives/permission/hasClient'
|
|
|
|
|
|
|
|
import * as UserApi from '@/api/system/user'
|
|
import * as UserApi from '@/api/system/user'
|
|
|
import img1 from '@/assets/imgs/main/icon1.png';
|
|
import img1 from '@/assets/imgs/main/icon1.png';
|
|
@@ -89,17 +91,25 @@ import img7 from '@/assets/imgs/main/icon7.png';
|
|
|
import img8 from '@/assets/imgs/main/icon8.png';
|
|
import img8 from '@/assets/imgs/main/icon8.png';
|
|
|
import logouticon from '@/assets/imgs/main/logout.png'
|
|
import logouticon from '@/assets/imgs/main/logout.png'
|
|
|
import manager from '@/assets/imgs/main/manager.png'
|
|
import manager from '@/assets/imgs/main/manager.png'
|
|
|
|
|
+import bg from '@/assets/imgs/main/bg2.png'
|
|
|
import password from '@/assets/imgs/main/password.png'
|
|
import password from '@/assets/imgs/main/password.png'
|
|
|
import * as authUtil from '@/utils/auth'
|
|
import * as authUtil from '@/utils/auth'
|
|
|
import {InputPassword} from '@/components/InputPassword'
|
|
import {InputPassword} from '@/components/InputPassword'
|
|
|
import {updateUserPassword} from '@/api/system/user/profile'
|
|
import {updateUserPassword} from '@/api/system/user/profile'
|
|
|
|
|
+import { removeToken } from '@/utils/auth'
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+const { proxy } = getCurrentInstance()
|
|
|
const message = useMessage()
|
|
const message = useMessage()
|
|
|
|
|
|
|
|
|
|
+//
|
|
|
|
|
+import { getCurrentInstance, onBeforeMount, type ComponentInternalInstance } from 'vue';
|
|
|
|
|
+const currentInstance= getCurrentInstance() as ComponentInternalInstance;
|
|
|
|
|
+const globalProperties = currentInstance?.appContext.config.globalProperties
|
|
|
|
|
+const openWindows = globalProperties.$globalWindows;
|
|
|
const userStore = useUserStore()
|
|
const userStore = useUserStore()
|
|
|
const tagsViewStore = useTagsViewStore()
|
|
const tagsViewStore = useTagsViewStore()
|
|
|
const {t} = useI18n()
|
|
const {t} = useI18n()
|
|
|
|
|
+const route = useRoute();
|
|
|
//
|
|
//
|
|
|
const {push, replace} = useRouter()
|
|
const {push, replace} = useRouter()
|
|
|
|
|
|
|
@@ -114,6 +124,31 @@ const passwordModel = reactive({
|
|
|
confirmPassword: ''
|
|
confirmPassword: ''
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+const backgroudColor =(i)=>{
|
|
|
|
|
+
|
|
|
|
|
+ if(hasNoClientPri(i)){
|
|
|
|
|
+ return 'background-color: #c9d6df'
|
|
|
|
|
+ }
|
|
|
|
|
+ if(i=='44'){
|
|
|
|
|
+ return 'background-color: #00A5DA'
|
|
|
|
|
+ }
|
|
|
|
|
+ if(i=='43'){
|
|
|
|
|
+ return 'background-color: #4182EE'
|
|
|
|
|
+ }
|
|
|
|
|
+ if(i=='45'){
|
|
|
|
|
+ return 'background-color: #2270F7'
|
|
|
|
|
+ }
|
|
|
|
|
+ if(i=='46'){
|
|
|
|
|
+ return 'background-color: #FA8854'
|
|
|
|
|
+ }
|
|
|
|
|
+ if(i=='49'){
|
|
|
|
|
+ return 'background-color: #2270F7'
|
|
|
|
|
+ }
|
|
|
|
|
+ if(i=='100'){
|
|
|
|
|
+ return 'background-color: #E7B05E'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 表单校验
|
|
// 表单校验
|
|
|
const equalToPassword = (_rule, value, callback) => {
|
|
const equalToPassword = (_rule, value, callback) => {
|
|
|
if (passwordModel.newPassword !== value) {
|
|
if (passwordModel.newPassword !== value) {
|
|
@@ -125,21 +160,21 @@ const equalToPassword = (_rule, value, callback) => {
|
|
|
const newPasswordValidate = (rule, value, callback) => {
|
|
const newPasswordValidate = (rule, value, callback) => {
|
|
|
if (passwordModel.oldPassword === value) {
|
|
if (passwordModel.oldPassword === value) {
|
|
|
callback(new Error('新密码不能与旧密码一致'))
|
|
callback(new Error('新密码不能与旧密码一致'))
|
|
|
- } else if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,20}$/g.test(value)) {
|
|
|
|
|
|
|
+ } else if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{6,16}$/g.test(value)) {
|
|
|
callback()
|
|
callback()
|
|
|
} else {
|
|
} else {
|
|
|
- callback(new Error('包含英文字母大小写、数字和特殊符号(8-20位)'))
|
|
|
|
|
|
|
+ callback(new Error('包含英文字母大小写、数字和特殊符号(6-16位)'))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const rules = reactive<FormRules>({
|
|
const rules = reactive<FormRules>({
|
|
|
oldPassword: [
|
|
oldPassword: [
|
|
|
{required: true, message: t('profile.password.oldPwdMsg'), trigger: 'blur'},
|
|
{required: true, message: t('profile.password.oldPwdMsg'), trigger: 'blur'},
|
|
|
- {min: 8, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur'}
|
|
|
|
|
|
|
+ {min: 6, max: 16, message: t('profile.password.pwdRules'), trigger: 'blur'}
|
|
|
],
|
|
],
|
|
|
newPassword: [
|
|
newPassword: [
|
|
|
{required: true, message: t('profile.password.newPwdMsg'), trigger: 'blur'},
|
|
{required: true, message: t('profile.password.newPwdMsg'), trigger: 'blur'},
|
|
|
- {min: 8, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur'},
|
|
|
|
|
|
|
+ {min: 6, max: 16, message: t('profile.password.pwdRules'), trigger: 'blur'},
|
|
|
{required: true, validator: newPasswordValidate, trigger: 'blur'}
|
|
{required: true, validator: newPasswordValidate, trigger: 'blur'}
|
|
|
],
|
|
],
|
|
|
confirmPassword: [
|
|
confirmPassword: [
|
|
@@ -148,7 +183,6 @@ const rules = reactive<FormRules>({
|
|
|
]
|
|
]
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
-
|
|
|
|
|
const loginOut = async () => {
|
|
const loginOut = async () => {
|
|
|
try {
|
|
try {
|
|
|
await ElMessageBox.confirm(t('common.loginOutMessage'), t('common.reminder'), {
|
|
await ElMessageBox.confirm(t('common.loginOutMessage'), t('common.reminder'), {
|
|
@@ -159,10 +193,24 @@ const loginOut = async () => {
|
|
|
await userStore.loginOut()
|
|
await userStore.loginOut()
|
|
|
tagsViewStore.delAllViews()
|
|
tagsViewStore.delAllViews()
|
|
|
deleteUserCache() // 清空用户缓存
|
|
deleteUserCache() // 清空用户缓存
|
|
|
|
|
+ removeToken()
|
|
|
|
|
+ closeLinks()
|
|
|
replace('/login?redirect=/Navicate')
|
|
replace('/login?redirect=/Navicate')
|
|
|
} catch {
|
|
} catch {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+const closeLinks = () =>{
|
|
|
|
|
+ openWindows.forEach(
|
|
|
|
|
+ (item) =>{
|
|
|
|
|
+ if (item && item.win && !item.win.closed){
|
|
|
|
|
+ item.win.close()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ globalProperties.$globalWindows = []
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
const toProfile = async () => {
|
|
const toProfile = async () => {
|
|
|
push('/system/user')
|
|
push('/system/user')
|
|
|
}
|
|
}
|
|
@@ -173,19 +221,38 @@ const resetPassword = () => {
|
|
|
|
|
|
|
|
const handlerLink = async (id) => {
|
|
const handlerLink = async (id) => {
|
|
|
if (id==50){
|
|
if (id==50){
|
|
|
- window.open("http://106.37.165.111:9080/pc/PCLGO001Action_001.action");
|
|
|
|
|
|
|
+ window.open("https://jgyl.checg.cn/pc/PCLGN001Action_001.action");
|
|
|
}else{
|
|
}else{
|
|
|
try {
|
|
try {
|
|
|
const linkUrl = await UserApi.getLinkInfo(id, authUtil.getAccessToken())
|
|
const linkUrl = await UserApi.getLinkInfo(id, authUtil.getAccessToken())
|
|
|
if (linkUrl != "") {
|
|
if (linkUrl != "") {
|
|
|
- window.open(linkUrl);
|
|
|
|
|
|
|
+ for (let i = openWindows.length - 1; i >= 0; i--) {
|
|
|
|
|
+ if (openWindows[i] && openWindows[i].uid==id){
|
|
|
|
|
+ if (!openWindows[i].win.closed){
|
|
|
|
|
+ openWindows[i].win.close()
|
|
|
|
|
+ }
|
|
|
|
|
+ openWindows.splice(i, 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ const linkWindow = window.open(linkUrl);
|
|
|
|
|
+ const winObj = {};
|
|
|
|
|
+ winObj.uid = id;
|
|
|
|
|
+ winObj.win = linkWindow;
|
|
|
|
|
+ openWindows.push(winObj);
|
|
|
|
|
+ console.log("######@@@@@@@@@",openWindows);
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.log(error);
|
|
console.log(error);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-const roles = wsCache.get(CACHE_KEY.USER).roles
|
|
|
|
|
|
|
+
|
|
|
|
|
+const handlerLinkDiv = (id) => {
|
|
|
|
|
+ if(hasNoClientPri(id)){
|
|
|
|
|
+ message.error('无该系统权限,请联系系统管理员申请开通')
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+const roles = wsCache.get(CACHE_KEY.USER)?wsCache.get(CACHE_KEY.USER).roles:[]
|
|
|
// const checkRoles = (value)=>{
|
|
// const checkRoles = (value)=>{
|
|
|
// const permissionRoles = value
|
|
// const permissionRoles = value
|
|
|
// const roles = wsCache.get(CACHE_KEY.USER).roles
|
|
// const roles = wsCache.get(CACHE_KEY.USER).roles
|
|
@@ -211,16 +278,33 @@ const reset = (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return
|
|
if (!formEl) return
|
|
|
formEl.resetFields()
|
|
formEl.resetFields()
|
|
|
}
|
|
}
|
|
|
|
|
+const queryParams = route.query;
|
|
|
|
|
+
|
|
|
/** 初始化 */
|
|
/** 初始化 */
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
|
|
+ if (queryParams && queryParams.logout){
|
|
|
|
|
+ window.opener.postMessage('close', '*');
|
|
|
|
|
+ }
|
|
|
const loginDadte = authUtil.getLoginDate()
|
|
const loginDadte = authUtil.getLoginDate()
|
|
|
if(!loginDadte){
|
|
if(!loginDadte){
|
|
|
resetPassword()
|
|
resetPassword()
|
|
|
}
|
|
}
|
|
|
|
|
+ window.addEventListener('message', (event) => {
|
|
|
|
|
+ if (event.data == 'guanyuan') {
|
|
|
|
|
+ openWindows.forEach(
|
|
|
|
|
+ (item) =>{
|
|
|
|
|
+ if (item && item.win && !item.win.closed && item.uid==46){
|
|
|
|
|
+ item.win.close()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
})
|
|
})
|
|
|
const handleClose = (done) => {
|
|
const handleClose = (done) => {
|
|
|
const loginDadte = authUtil.getLoginDate()
|
|
const loginDadte = authUtil.getLoginDate()
|
|
|
- debugger
|
|
|
|
|
|
|
+ // debugger
|
|
|
if(!loginDadte){
|
|
if(!loginDadte){
|
|
|
message.error('首次登录请修改密码!')
|
|
message.error('首次登录请修改密码!')
|
|
|
return false
|
|
return false
|
|
@@ -229,13 +313,18 @@ const handleClose = (done) => {
|
|
|
done(false)
|
|
done(false)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+const hasNoClientPri = (clientIdValue: string) =>{
|
|
|
|
|
+ const clientIds = wsCache.get(CACHE_KEY.USER)?wsCache.get(CACHE_KEY.USER).clientIds:[]
|
|
|
|
|
+ const all_client = '*'
|
|
|
|
|
+ return !(all_client === clientIdValue || clientIds.includes(clientIdValue))
|
|
|
|
|
+}
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|
|
|
.screen-container {
|
|
.screen-container {
|
|
|
- // background: var(--app-screen-bg-color);
|
|
|
|
|
height: 100%;
|
|
height: 100%;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -316,6 +405,15 @@ const handleClose = (done) => {
|
|
|
.aaa{
|
|
.aaa{
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
}
|
|
}
|
|
|
|
|
+.img_gray {
|
|
|
|
|
+ -webkit-filter: grayscale(100%);
|
|
|
|
|
+ -moz-filter: grayscale(100%);
|
|
|
|
|
+ -ms-filter: grayscale(100%);
|
|
|
|
|
+ -o-filter: grayscale(100%);
|
|
|
|
|
+ filter: grayscale(100%);
|
|
|
|
|
+ filter: gray;
|
|
|
|
|
+ margin: 69px 160px 20px 160px;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
.screen-content-container {
|
|
.screen-content-container {
|
|
|
padding-top: size(var(--app-screen-header-height));
|
|
padding-top: size(var(--app-screen-header-height));
|