提交 cb186d22 作者: 毛细亚

Merge branch 'release' into 1.1

<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>company_app</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/chunk-vendors.00452471.js"></script><script defer="defer" src="static/js/app.8f259f12.js"></script><link href="static/css/chunk-vendors.34a02360.css" rel="stylesheet"><link href="static/css/app.edfd37dc.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>company_app</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/chunk-vendors.6db6cb17.js"></script><script defer="defer" src="static/js/app.7d43d61c.js"></script><link href="static/css/chunk-vendors.34a02360.css" rel="stylesheet"><link href="static/css/app.c6113497.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
\ No newline at end of file
...@@ -45,6 +45,7 @@ import bindUserList from '@/views/components/bindGameAccount/bindUserList.vue' ...@@ -45,6 +45,7 @@ import bindUserList from '@/views/components/bindGameAccount/bindUserList.vue'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import { mapState, mapMutations } from 'vuex' import { mapState, mapMutations } from 'vuex'
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import { getParams } from '@/utils/index'
export default { export default {
name: 'App', name: 'App',
components: { components: {
...@@ -101,8 +102,8 @@ export default { ...@@ -101,8 +102,8 @@ export default {
shouldShowToggle: false, // 是否显示展开收起按钮 shouldShowToggle: false, // 是否显示展开收起按钮
} }
}, },
computed:{ computed: {
...mapState('user',['external_userid','token']), ...mapState('user', ['external_userid', 'token']),
}, },
watch: { watch: {
'$route.path'(val) { '$route.path'(val) {
...@@ -120,7 +121,7 @@ export default { ...@@ -120,7 +121,7 @@ export default {
if (newVal) { if (newVal) {
this.$nextTick(() => { this.$nextTick(() => {
this.showMemberId = true this.showMemberId = true
console.log('external_userid 已设置:', newVal, window.location.href, this.token,Cookies.get('token')) console.log('external_userid 已设置:', newVal, window.location.href, this.token, Cookies.get('token'))
// 强制更新组件 // 强制更新组件
this.$forceUpdate() this.$forceUpdate()
// 检查是否需要显示展开收起按钮 // 检查是否需要显示展开收起按钮
...@@ -131,14 +132,21 @@ export default { ...@@ -131,14 +132,21 @@ export default {
immediate: true immediate: true
} }
}, },
created() {
const urlParams = getParams();
// 每次进入页面都缓存corp_id
if (urlParams.corp_id) {
this.cacheCorp_id(urlParams.corp_id) // 缓存 corp_id
}
},
mounted() { mounted() {
this.initVuexValue()
// 页面刷新时从 Cookie 恢复 token 到 store // 页面刷新时从 Cookie 恢复 token 到 store
const cookieToken = Cookies.get('token') const cookieToken = Cookies.get('token')
if (cookieToken && !this.token) { if (cookieToken && !this.token) {
this.set_token(cookieToken) this.set_token(cookieToken)
console.log('从 Cookie 恢复 token:', cookieToken) console.log('从 Cookie 恢复 token:', cookieToken)
} }
// 页面刷新时从 Cookie 恢复 accountSelect 到 store // 页面刷新时从 Cookie 恢复 accountSelect 到 store
const cookieAccountSelect = Cookies.get('accountSelect') const cookieAccountSelect = Cookies.get('accountSelect')
if (cookieAccountSelect && !this.$store.state.game.accountSelect) { if (cookieAccountSelect && !this.$store.state.game.accountSelect) {
...@@ -167,9 +175,29 @@ export default { ...@@ -167,9 +175,29 @@ export default {
beforeDestroy() { beforeDestroy() {
window.removeEventListener('resize', this.handleResize) window.removeEventListener('resize', this.handleResize)
}, },
methods:{ methods: {
...mapMutations('user',['set_userid','set_corp_id','set_token','set_cser_info','set_cser_id','set_cser_name','set_userInfo']), ...mapMutations('user', ['set_userid', 'set_corp_id', 'set_token', 'set_cser_info', 'set_cser_id', 'set_cser_name', 'set_userInfo']),
...mapMutations('game', ['set_accountSelect']), // 设置缓存
cacheCorp_id(corp_id) {
Cookies.set('corp_id', corp_id, { expires: 7 })
this.set_corp_id(corp_id)
},
initVuexValue() {
this.set_userid(Cookies.get('userid'))
this.set_corp_id(Cookies.get('corp_id'))
this.set_token(Cookies.get('token'))
this.set_cser_id(Cookies.get('cser_id'))
this.set_cser_name(Cookies.get('cser_name'))
const userinfo = {
cser_id: Cookies.get('cser_id'),
cser_name: Cookies.get('cser_name'),
username: Cookies.get('cser_name'),
id: Cookies.get('cser_id'),
}
this.set_userInfo(userinfo)
const cser_info = Cookies.get('cser_info')
cser_info ? this.set_cser_info(JSON.parse(cser_info)) : this.set_cser_info({})
},
handleSelect(key, keyPath) { handleSelect(key, keyPath) {
console.log('菜单选择:', key, keyPath, window.location.href) console.log('菜单选择:', key, keyPath, window.location.href)
}, },
...@@ -230,16 +258,17 @@ export default { ...@@ -230,16 +258,17 @@ export default {
this.checkMenuOverflow() this.checkMenuOverflow()
}, 150) }, 150)
} }
} },
} }
</script> </script>
<style scoped> <style scoped>
#app{ #app {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
} }
.mobile-app-wrapper { .mobile-app-wrapper {
width: 100%; width: 100%;
margin: 0 auto; margin: 0 auto;
...@@ -247,8 +276,9 @@ export default { ...@@ -247,8 +276,9 @@ export default {
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
box-shadow: 0 0 12px rgba(0,0,0,0.04); box-shadow: 0 0 12px rgba(0, 0, 0, 0.04);
} }
.mobile-menu-bar { .mobile-menu-bar {
background: #fff; background: #fff;
border-bottom: 1px solid #f0f0f0; border-bottom: 1px solid #f0f0f0;
...@@ -279,7 +309,7 @@ export default { ...@@ -279,7 +309,7 @@ export default {
} }
.mobile-menu-item { .mobile-menu-item {
font-size: 14px ; font-size: 14px;
padding: 0 16px !important; padding: 0 16px !important;
min-width: 0; min-width: 0;
flex: none; flex: none;
...@@ -316,16 +346,19 @@ export default { ...@@ -316,16 +346,19 @@ export default {
flex: 1; flex: 1;
overflow-y: auto; overflow-y: auto;
} }
.mobile-content > div {
.mobile-content>div {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
min-height: 60vh; min-height: 60vh;
padding: 10px; padding: 10px;
} }
.el-menu--horizontal>.el-menu-item{
.el-menu--horizontal>.el-menu-item {
height: 50px; height: 50px;
line-height: 50px; line-height: 50px;
} }
body { body {
background: #f0f2f5; background: #f0f2f5;
} }
......
...@@ -15,17 +15,14 @@ import VConsole from 'vconsole'; ...@@ -15,17 +15,14 @@ import VConsole from 'vconsole';
import uploading from '@/utils/cos-upload' import uploading from '@/utils/cos-upload'
import errorHandle from '@/utils/errorHandle' import errorHandle from '@/utils/errorHandle'
import { getParams } from '@/utils/index' import { getParams } from '@/utils/index'
import globalComponent from '@/components/register.js' import globalComponent from '@/components/register.js'
import loadmore from '@/directive/loadmore/index.js' // 加载更多 import loadmore from '@/directive/loadmore/index.js' // 加载更多
import clickagain from './directive/clickagain' import clickagain from './directive/clickagain'
import permission from '@/directive/permission/index.js' // 权限判断指令 import permission from '@/directive/permission/index.js' // 权限判断指令
Vue.use(globalComponent).use(permission).use(clickagain).use(loadmore) Vue.use(globalComponent).use(permission).use(clickagain).use(loadmore)
if(isTest()){ // 导入 VConsole 清理工具
// new VConsole(); import '@/utils/vconsoleCleanup'
}
function isTest(){
return process.env.NODE_ENV !== 'production'
}
// 开发环境不收集日志 // 开发环境不收集日志
if (process.env.NODE_ENV !== 'development') { if (process.env.NODE_ENV !== 'development') {
errorHandle.onload() errorHandle.onload()
......
...@@ -9,20 +9,37 @@ class DevModeManager { ...@@ -9,20 +9,37 @@ class DevModeManager {
this.resetTime = 3000 // 3秒内无点击则重置 this.resetTime = 3000 // 3秒内无点击则重置
this.isDevMode = this.getDevModeFromStorage() this.isDevMode = this.getDevModeFromStorage()
// 如果已经开启过开发模式,自动初始化 // 自动初始化逻辑
if (this.isDevMode) { this.autoInit()
}
// 自动初始化逻辑
autoInit() {
const isDevEnv = process.env.NODE_ENV !== 'production'
// 如果是开发环境或特定公司ID,或者之前开启过开发模式,则自动启用
if (isDevEnv || this.isDevMode) {
this.enableDevMode() this.enableDevMode()
} }
} }
// 从 localStorage 获取开发模式状态 // 从 localStorage 获取开发模式状态
getDevModeFromStorage() { getDevModeFromStorage() {
try {
return localStorage.getItem('dev_mode_enabled') === 'true' return localStorage.getItem('dev_mode_enabled') === 'true'
} catch (error) {
console.warn('无法读取开发模式状态:', error)
return false
}
} }
// 保存开发模式状态到 localStorage // 保存开发模式状态到 localStorage
saveDevModeToStorage(enabled) { saveDevModeToStorage(enabled) {
try {
localStorage.setItem('dev_mode_enabled', enabled.toString()) localStorage.setItem('dev_mode_enabled', enabled.toString())
} catch (error) {
console.warn('无法保存开发模式状态:', error)
}
} }
// 处理点击事件 // 处理点击事件
...@@ -71,17 +88,27 @@ class DevModeManager { ...@@ -71,17 +88,27 @@ class DevModeManager {
// 开启开发模式 // 开启开发模式
enableDevMode() { enableDevMode() {
try {
// 防止重复初始化
if (!this.vConsole) { if (!this.vConsole) {
this.vConsole = new VConsole() this.vConsole = new VConsole()
console.log('🎉 开发模式已开启!') console.log('🎉 开发模式已开启!')
console.log('💡 提示:再次连续点击7次可关闭开发模式') console.log('💡 提示:再次连续点击7次可关闭开发模式')
} else {
console.log('📱 开发模式已经处于开启状态')
} }
this.isDevMode = true this.isDevMode = true
this.saveDevModeToStorage(true) this.saveDevModeToStorage(true)
} catch (error) {
console.error('开启开发模式失败:', error)
this.vConsole = null
this.isDevMode = false
}
} }
// 关闭开发模式 // 关闭开发模式
disableDevMode() { disableDevMode() {
try {
if (this.vConsole) { if (this.vConsole) {
this.vConsole.destroy() this.vConsole.destroy()
this.vConsole = null this.vConsole = null
...@@ -89,6 +116,12 @@ class DevModeManager { ...@@ -89,6 +116,12 @@ class DevModeManager {
} }
this.isDevMode = false this.isDevMode = false
this.saveDevModeToStorage(false) this.saveDevModeToStorage(false)
} catch (error) {
console.error('关闭开发模式失败:', error)
// 强制重置状态
this.vConsole = null
this.isDevMode = false
}
} }
// 检查是否为开发环境 // 检查是否为开发环境
...@@ -102,9 +135,16 @@ class DevModeManager { ...@@ -102,9 +135,16 @@ class DevModeManager {
enabled: this.isDevMode, enabled: this.isDevMode,
environment: process.env.NODE_ENV, environment: process.env.NODE_ENV,
clickCount: this.clickCount, clickCount: this.clickCount,
maxClicks: this.maxClicks maxClicks: this.maxClicks,
hasVConsole: !!this.vConsole
} }
} }
// 安全销毁方法
destroy() {
this.resetClickCount()
this.disableDevMode()
}
} }
// 创建全局实例 // 创建全局实例
...@@ -117,8 +157,18 @@ if (typeof window !== 'undefined') { ...@@ -117,8 +157,18 @@ if (typeof window !== 'undefined') {
enable: () => devModeManager.enableDevMode(), enable: () => devModeManager.enableDevMode(),
disable: () => devModeManager.disableDevMode(), disable: () => devModeManager.disableDevMode(),
status: () => devModeManager.getDevModeStatus(), status: () => devModeManager.getDevModeStatus(),
reset: () => devModeManager.resetClickCount() reset: () => devModeManager.resetClickCount(),
destroy: () => devModeManager.destroy()
}
// 监听页面卸载,清理资源
window.addEventListener('beforeunload', () => {
try {
devModeManager.destroy()
} catch (error) {
console.warn('清理开发模式资源时出错:', error)
} }
})
} }
export default devModeManager export default devModeManager
...@@ -37,7 +37,7 @@ service.interceptors.request.use( ...@@ -37,7 +37,7 @@ service.interceptors.request.use(
if (authToken) { if (authToken) {
config.headers['Authtoken'] = authToken config.headers['Authtoken'] = authToken
} }
const corp_id = store.state.user.corp_id || Cookies.get('corp_id') const corp_id = Cookies.get('corp_id') || store.state.user.corp_id
const userid = Cookies.get('userid') const userid = Cookies.get('userid')
if (corp_id) { if (corp_id) {
config.headers['Corp-Id'] = corp_id config.headers['Corp-Id'] = corp_id
......
// VConsole 清理工具
// 用于清理可能存在的重复实例和状态问题
const VConsoleCleanup = {
// 清理所有可能的 VConsole 实例
cleanup() {
try {
// 清理全局 VConsole 引用
if (window.VConsole) {
delete window.VConsole
}
// 清理可能存在的 vConsole 实例
if (window.vConsole && typeof window.vConsole.destroy === 'function') {
window.vConsole.destroy()
delete window.vConsole
}
// 清理 DOM 中的 VConsole 元素
const vcElements = document.querySelectorAll('[class*="vc-"], [id*="__vconsole"]')
vcElements.forEach(el => {
try {
el.remove()
} catch (e) {
console.warn('移除 VConsole 元素失败:', e)
}
})
// 清理可能的事件监听器
this.removeEventListeners()
// 清理 localStorage 中的 VConsole 相关数据
this.cleanupStorage()
console.log('✅ VConsole 清理完成')
} catch (error) {
console.error('❌ VConsole 清理过程中出错:', error)
}
},
// 移除可能的事件监听器
removeEventListeners() {
try {
// VConsole 常用的事件类型
const eventTypes = ['resize', 'orientationchange', 'scroll', 'touchstart', 'touchmove', 'touchend']
// 移除可能由 VConsole 添加的事件监听器(这里只能尝试移除一些通用的)
eventTypes.forEach(type => {
// 注意:这里无法准确移除所有 VConsole 的监听器,只是一个清理尝试
document.removeEventListener(type, this.dummyHandler, true)
window.removeEventListener(type, this.dummyHandler, true)
})
} catch (error) {
console.warn('清理事件监听器时出错:', error)
}
},
// 空的事件处理器
dummyHandler() {},
// 清理存储
cleanupStorage() {
try {
const keysToRemove = []
// 检查 localStorage 中是否有 VConsole 相关的键
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i)
if (key && (key.includes('vconsole') || key.includes('vConsole'))) {
keysToRemove.push(key)
}
}
// 移除找到的键(保留我们自定义的 dev_mode_enabled)
keysToRemove.forEach(key => {
if (key !== 'dev_mode_enabled') {
localStorage.removeItem(key)
}
})
} catch (error) {
console.warn('清理存储时出错:', error)
}
},
// 检查当前状态
checkStatus() {
const status = {
hasWindowVConsole: !!window.VConsole,
hasWindowVconsole: !!window.vConsole,
vcElements: document.querySelectorAll('[class*="vc-"], [id*="__vconsole"]').length,
devModeStatus: window.devMode ? window.devMode.status() : null
}
console.table(status)
return status
},
// 强制重启开发模式
forceRestart() {
try {
this.cleanup()
// 等待清理完成后重新启动
setTimeout(() => {
if (window.devMode) {
window.devMode.enable()
console.log('🔄 开发模式已重新启动')
}
}, 500)
} catch (error) {
console.error('强制重启失败:', error)
}
}
}
// 添加到全局,方便控制台调用
if (typeof window !== 'undefined') {
window.VConsoleCleanup = VConsoleCleanup
// 在控制台提供快捷命令
window.cleanVConsole = () => VConsoleCleanup.cleanup()
window.checkVConsole = () => VConsoleCleanup.checkStatus()
window.restartVConsole = () => VConsoleCleanup.forceRestart()
}
export default VConsoleCleanup
\ No newline at end of file
...@@ -397,6 +397,16 @@ import watchMember from '@/mixins/watchMember' ...@@ -397,6 +397,16 @@ import watchMember from '@/mixins/watchMember'
background-color: #fff; background-color: #fff;
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
.warnText{
width:100%;
height:auto;
font-weight: 600;
font-size: 18px;
p{
color: #F56C6C;
line-height: 25px;
}
}
.cser_name{ .cser_name{
font-size: 14px; font-size: 14px;
margin-bottom: 10px; margin-bottom: 10px;
......
...@@ -5,16 +5,11 @@ ...@@ -5,16 +5,11 @@
</template> </template>
<script> <script>
import Info from './components/Info.vue' import Info from './components/Info.vue'
// import RoleInfo from './components/RoleInfo.vue'
// import ViolationRecord from '../ViolationRecord.vue'
import { mapState,mapMutations } from 'vuex' import { mapState,mapMutations } from 'vuex'
import Cookies from 'js-cookie'
export default { export default {
name: 'UserInfo', name: 'UserInfo',
components:{ components:{
Info, Info,
// RoleInfo,
// ViolationRecord
}, },
mounted() { mounted() {
}, },
...@@ -22,13 +17,15 @@ export default { ...@@ -22,13 +17,15 @@ export default {
return { return {
} }
}, },
computed:{
...mapState('user',['chatUserInfo']),
},
created(){ created(){
// 初始化 vuex 中的值 // 初始化 vuex 中的值
}, },
methods:{ methods:{
...mapMutations('game',['set_chatUserInfo']),
} }
} }
</script> </script>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论