YNUtdPlatform/pages/gzt/index.vue

600 lines
18 KiB
Vue
Raw Normal View History

2024-08-07 14:53:53 +08:00
<template>
2024-10-12 16:03:45 +08:00
<view class="normal-login-container">
<view class="top">
<view class="title">作业管控智慧平台</view>
</view>
<view class="content">
<view class="top-msg">
<view class="msg1">今日消息</view>
<view class="msg2">
<view class="msg-content">
<u-notice-bar
:text="msgList"
direction="column"
icon=""
bgColor=""
color="#000"
font-size="16"
></u-notice-bar>
</view>
<view class="box">
<u-badge max="99" :value="value" shape="horn" bgColor="red"></u-badge>
</view>
</view>
</view>
<view class="yy-box">
<view class="bt">我的应用</view>
<view class="yy-list">
2024-10-27 22:40:40 +08:00
<view class="yy-one" @click="gotoYy(item.appName)" v-for="(item, index) in allApp" :key="index">
2024-10-12 16:03:45 +08:00
<view class="yy-img">
<image :src="item.base64Url"></image>
</view>
<view class="yy-name">{{ item.appName }}</view>
</view>
</view>
</view>
2024-10-18 09:18:32 +08:00
<!-- <view class="yy-box">
2024-10-12 16:03:45 +08:00
<view class="bt">全部应用</view>
<view class="yy-list">
<view class="yy-one" @click="gotoYy(item.appName)" v-for="(item, index) in allApp" :key="index">
<view class="yy-img">
<image :src="item.base64Url"></image>
</view>
<view class="yy-name">{{ item.appName }}</view>
</view>
</view>
2024-10-18 09:18:32 +08:00
</view> -->
2024-10-12 16:03:45 +08:00
</view>
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
<view>
<!-- 普通弹窗 -->
<uni-popup ref="popup" background-color="#fff" :is-mask-click="false">
<view style="text-align: center; font-size: 40rpx; padding-top: 30rpx">密码修改</view>
<view class="popup-content">
<u--form :model="restForm" ref="uForm3" :rules="rules3" labelWidth="60">
<view style="color: red; line-height: 30rpx; font-size: 24rpx; padding-top: 20rpx; text-align: center">
您是第一次登录系统需要修改密码
</view>
<u-form-item label="新密码" prop="password">
<u-input
class="login-input"
:type="isOpen ? 'text' : 'password'"
placeholder="请输入密码"
prefixIcon="lock"
v-model="restForm.password"
save="false"
autocomplete="new-password"
>
<template slot="suffix">
<image
@click="isOpen = !isOpen"
style="width: 40rpx; height: 40rpx; margin-right: 10rpx; z-index: 999"
:src="
isOpen
? '../../static/images/design_ic_visibility.png'
: '../../static/images/design_ic_visibility_off.png'
"
></image>
</template>
</u-input>
</u-form-item>
<u-form-item label="新密码" prop="passwordA">
<u-input
class="login-input"
:type="isOpen2 ? 'text' : 'password'"
placeholder="请再次输入密码"
prefixIcon="lock"
v-model="restForm.passwordA"
save="false"
autocomplete="new-password"
>
<template slot="suffix">
<image
@click="isOpen2 = !isOpen2"
style="width: 40rpx; height: 40rpx; margin-right: 10rpx; z-index: 999"
:src="
isOpen2
? '../../static/images/design_ic_visibility.png'
: '../../static/images/design_ic_visibility_off.png'
"
></image>
</template>
</u-input>
</u-form-item>
<view style="color: red; line-height: 30rpx; font-size: 24rpx; padding-top: 20rpx">
密码必须至少包含一个大写字母一个小写字母一个数字和一个特殊符号并且长度在8到16个字符之间
</view>
<view style="display: flex">
<u-button
class="loginBtn"
style="margin-top: 30rpx; width: 30%; color: black"
@click="logout"
color="#d0d2d5"
>
退出
</u-button>
<u-button class="loginBtn" style="margin-top: 30rpx; width: 30%" @click="submit" color="#00367a">
确认
</u-button>
</view>
</u--form>
</view>
</uni-popup>
</view>
<u-toast ref="uToast"></u-toast>
<m-tabbar fixed fill :current="1" :tabbar="tabbar"></m-tabbar>
</view>
2024-08-07 14:53:53 +08:00
</template>
<script>
2024-10-12 16:03:45 +08:00
import TabbarConfig from '@/totalTabbar.js'
import AES from '@/utils/realNameAes.js'
import config from '@/config'
import Crypoto from '@/utils/aescbc'
2024-08-28 09:51:05 +08:00
2024-10-12 16:03:45 +08:00
import {
getDayNoticeAnnoByUserId,
getAppList,
getMyAppByUser,
updatePwdByApp,
getNoticeAnnoByUserId
} from '@/api/index.js'
export default {
data() {
const equalToPassword = (rule, value, callback) => {
if (this.restForm.password !== value) {
callback(new Error('两次输入的密码不一致'))
} else {
callback()
}
}
// 密码校验 长度不能小于8位且不能大于16位字符,必须包含大写字母、小写字母、数字和特殊符号
var ISPWD = /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\._\+(){}])[0-9a-zA-Z!@#$%^&*,\\._\+(){}]{8,16}$/
// 密码校验
const validatePassword = (rule, value, callback) => {
if (!ISPWD.test(this.restForm.password)) {
callback(new Error('用户密码必须包含大写字母、小写字母、数字和特殊符号'))
} else {
callback()
}
}
return {
tabbar: TabbarConfig,
value6: 0,
type: 'error',
value: 0,
allApp: [],
myApp: [],
msgList: [],
restForm: {
password: '',
passwordA: ''
},
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
rules3: {
password: [
{
required: true,
trigger: 'blur',
message: '请输入您的密码'
},
{
min: 8,
max: 16,
message: '用户密码长度必须介于 8 和 16 之间',
trigger: 'blur'
},
{
required: true,
validator: validatePassword,
trigger: 'blur'
}
],
passwordA: [
{
required: true,
message: '请再次输入新密码',
trigger: ['blur', 'change']
},
{
required: true,
validator: equalToPassword,
trigger: 'blur'
}
]
},
isOpen: false,
isOpen2: false
}
},
onShow() {
this.getDayNoticeAnnoByUserId()
this.getAppList()
this.getMyAppByUser()
this.getNoticeAnnoByUserId()
},
methods: {
//判断是否有未读消息
getNoticeAnnoByUserId() {
getNoticeAnnoByUserId({ status: 0 }).then(res => {
if (res.data.length > 0) {
//有未读消息
uni.setTabBarItem({
index: 0,
iconPath: 'static/images/dh1.png'
})
}
})
},
gotoYy(name) {
const cry = new Crypoto()
const params = {
username: uni.getStorageSync('userPhone'),
jwtToken: uni.getStorageSync('App-Token')
}
const tjparams = {
// username: '17681010134', // 15912575796
// password: 'YNsbd@123456'
telephone: cry.encrypt(uni.getStorageSync('userPhone')),
jwtToken: uni.getStorageSync('App-Token')
}
const realParams = {
username: AES.encrypt(uni.getStorageSync('userPhone')),
password: AES.encrypt('YNsbd@123456'),
jwtToken: uni.getStorageSync('App-Token')
}
console.log('🚀 ~ gotoYy ~ tjparams:', realParams)
if (name == '考试培训移动端') {
uni.request({
url: config.login + '/login',
method: 'POST',
data: JSON.stringify(params),
header: {
'Content-Type': 'application/json'
},
success: res => {
console.log(res)
let req = res.data
console.log('🚀 ~ getUserInfo ~ req:', req)
if (req.code == 200) {
uni.setStorageSync('access_token', req.data.access_token)
uni.setStorageSync('userId', req.data.loginUser.userId)
uni.setStorageSync('userName', req.data.loginUser.userName)
uni.setStorageSync('className', req.data.loginUser.sysUser.className)
uni.setStorageSync('facePath', req.data.loginUser.sysUser.facePath)
setTimeout(() => {
uni.reLaunch({
url: '/pages/YNEduApp/index/index'
})
}, 500)
} else {
uni.showToast({
2024-10-18 09:07:44 +08:00
title: '无权限访问',
2024-10-12 16:03:45 +08:00
icon: 'none'
})
}
},
fail: err => {
console.log('🚀 ~ gotoYy ~ err:', err)
uni.showToast({
2024-10-18 09:07:44 +08:00
title: '无权限访问',
2024-10-12 16:03:45 +08:00
icon: 'none'
})
}
})
} else if (name == '实名制移动端') {
uni.request({
url: config.realLoginUrl + 'login',
method: 'POST',
data: JSON.stringify(realParams),
header: {
'Content-Type': 'application/json'
},
success: res => {
console.log('🚀 ~ gotoYy ~ res:', res)
// console.log('🚀 ~ gotoYy ~ res:', res.data.token)
if (res.data.code == 200) {
// uni.setStorageSync('tjToken', res.data.token)
uni.setStorageSync('realNameToken', res.data.data.access_token)
uni.setStorageSync('realNameUser', res.data.data.loginUser.sysUser)
uni.setStorageSync('realNamePermissions', res.data.data.loginUser.permissions)
uni.removeStorageSync('hasChosenPro')
setTimeout(() => {
uni.reLaunch({
url: '/pages/realName/index/index'
})
}, 500)
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
}
},
fail: err => {
console.log('🚀 ~ gotoYy ~ err:', err)
uni.showToast({
2024-10-18 09:07:44 +08:00
title: '无权限访问',
2024-10-12 16:03:45 +08:00
icon: 'none'
})
}
})
} else if (name == '健康体检移动端') {
uni.request({
url: config.tjBaseUrl + '/app/loginNoPassword',
method: 'POST',
data: tjparams,
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: res => {
console.log('🚀 ~ gotoYy ~ res:', res)
console.log('🚀 ~ gotoYy ~ res:', res.data.obj)
if (res.statusCode == 200) {
uni.removeStorageSync('tjToken')
uni.removeStorageSync('tjPhone')
uni.setStorageSync('tjToken', res.data.obj)
uni.setStorageSync('tjPhone', tjparams.telephone)
setTimeout(() => {
uni.reLaunch({
url: '/pages/HealthExaminationApp/index/index'
})
}, 500)
} else {
uni.showToast({
2024-10-18 09:07:44 +08:00
title: '无权限访问',
2024-10-12 16:03:45 +08:00
icon: 'none'
})
}
},
fail: err => {
console.log('🚀 ~ gotoYy ~ err:', err)
uni.showToast({
2024-10-18 09:07:44 +08:00
title: '无权限访问',
2024-10-12 16:03:45 +08:00
icon: 'none'
})
}
})
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
if (name === '作业计划移动端') {
2024-10-25 18:21:10 +08:00
const paramsWork = {
username: uni.getStorageSync('userPhone'),
password: 'YNsbd@123456'
// jwtToken: uni.getStorageSync('App-Token')
}
console.log('请求参数', paramsWork)
2024-10-24 16:53:53 +08:00
uni.request({
2024-10-25 18:21:10 +08:00
url: config.workPlanNewYnUrl + '/ynPlanApp/login',
2024-10-24 16:53:53 +08:00
method: 'POST',
2024-10-25 18:21:10 +08:00
data: paramsWork,
2024-10-24 16:53:53 +08:00
header: {
2024-10-25 18:21:10 +08:00
'Content-Type': 'application/x-www-form-urlencoded'
2024-10-24 16:53:53 +08:00
},
success: res => {
2024-10-25 18:21:10 +08:00
console.log('登录成功!', res)
2024-10-24 16:53:53 +08:00
// console.log('🚀 ~ gotoYy ~ res:', res.data.token)
2024-10-25 18:21:10 +08:00
if (res.statusCode == 200) {
uni.setStorageSync('wkToken', res.data.user.token)
uni.setStorageSync('wkName', res.data.user.username)
uni.setStorageSync('wkRole', res.data.user.role)
// uni.setStorageSync('realNameUser', res.data.data.loginUser.sysUser)
// uni.setStorageSync('realNamePermissions', res.data.data.loginUser.permissions)
// uni.removeStorageSync('hasChosenPro')
2024-10-24 16:53:53 +08:00
setTimeout(() => {
uni.reLaunch({
url: '/pages/workPlan/index/index'
})
}, 500)
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
}
},
fail: err => {
console.log('🚀 ~ gotoYy ~ err:', err)
uni.showToast({
title: '无权限访问',
icon: 'none'
})
}
2024-10-12 16:03:45 +08:00
})
}
},
getDayNoticeAnnoByUserId() {
getDayNoticeAnnoByUserId({}).then(response => {
console.log(response)
if (response.code == 200) {
this.msgList = response.data.map(item => item.noticeTitle)
this.value = this.msgList.length
} else {
uni.$u.toast('获取今日消息失败')
}
})
},
getAppList() {
getAppList({}).then(response => {
console.log(response)
if (response.code == 200) {
this.allApp = response.data
//TODO 第一次登录 弹出修改密码框
/* if (this.$store.state.user.isFirstLogin == '0') {
2024-08-07 14:53:53 +08:00
this.$refs.popup.open("center")
} */
2024-10-12 16:03:45 +08:00
} else {
uni.$u.toast('获取全部应用失败')
}
})
},
getMyAppByUser() {
getMyAppByUser({}).then(response => {
console.log(response)
if (response.code == 200) {
console.log('我的应用-----------', response)
this.myApp = response.data
} else {
uni.$u.toast('获取我的应用失败')
}
})
},
logout() {
this.$store.dispatch('LogOut').then(res => {
uni.redirectTo({
url: '/pages/login'
})
})
},
closePwd() {
// open 方法传入参数 等同在 uni-popup 组件上绑定 type属性
this.$refs.popup.close('center')
},
submit() {
let _this = this
this.$refs.uForm3
.validate()
.then(res => {
let form = {
id: this.$store.state.user.userId,
pd: this.restForm.password,
type: 3
}
updatePwdByApp(form).then(res => {
if (res.code == 200) {
this.closePwd()
this.$refs.uToast.show({
type: 'success',
message: '密码修改成功'
})
// setTimeout(_this.logout(), 50000);
} else {
uni.$u.toast(res.msg)
}
})
})
.catch(errors => {
// uni.$u.toast('校验失败')
})
}
}
}
2024-08-07 14:53:53 +08:00
</script>
<style lang="scss">
2024-10-12 16:03:45 +08:00
page {
background-color: rgb(238, 243, 250) !important;
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.popup-content {
@include flex;
align-items: center;
justify-content: center;
padding: 15px;
height: 480rpx;
background-color: #fff;
max-width: 600rpx;
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.u-badge--horn {
border-bottom-left-radius: 0 !important;
border-top-right-radius: 0 !important;
margin-top: 20rpx;
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.normal-login-container {
.top {
height: 40vh;
background-image: url('../../static/images/bg-top.png');
background-size: 100% 100%;
background-repeat: no-repeat;
background-position: center;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.title {
color: white;
font-size: 30rpx;
text-align: center;
padding-top: 60rpx;
}
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.content {
margin-top: 20rpx;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.top-msg {
width: 95%;
height: 60rpx;
background-color: white;
display: flex;
border-radius: 10rpx;
margin: auto;
margin-bottom: 20rpx;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.msg1 {
width: 160rpx;
text-align: center;
color: rgb(154, 154, 154);
font-size: 26rpx;
border-right: 1px solid #efefef;
margin: 10rpx 0;
line-height: 40rpx;
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.msg2 {
width: calc(100% - 160rpx);
font-size: 32rpx;
line-height: 60rpx;
display: flex;
justify-content: space-between;
padding: 0rpx 10rpx;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.msg-content {
width: calc(100% - 60rpx);
white-space: nowrap;
/* 确保文本在一行内显示 */
overflow: hidden;
/* 隐藏溢出的内容 */
text-overflow: ellipsis;
/* 使用省略号表示文本溢出 */
}
}
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.yy-box {
background-color: white;
min-height: 150rpx;
padding: 30rpx;
margin-bottom: 20rpx;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.bt {
font-weight: 600;
font-size: 30rpx;
}
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.yy-list {
display: flex;
flex-wrap: wrap;
justify-content: start;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.yy-one {
font-size: 24rpx;
margin-top: 20rpx;
width: calc(100% / 3);
height: 200rpx;
text-align: center;
2024-08-07 14:53:53 +08:00
2024-10-12 16:03:45 +08:00
.yy-img image {
width: 150rpx;
height: 150rpx;
}
}
}
}
}
}
</style>