index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <!--
  2. * @Author: xvying 1615026511@qq.com
  3. * @Date: 2022-10-31 11:55:17
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2023-02-03 16:10:34
  6. * @FilePath: index.vue
  7. * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  8. -->
  9. <!--分栏布局 -->
  10. <script lang="ts" setup>
  11. import { useSettingsStore } from '@/store/modules/settings'
  12. import { getSetting, getDictList, getFactory } from './api/index'
  13. import { settingKeys, dictsKey } from '@/config/key.config'
  14. import { logger } from '@/utils/index'
  15. defineProps({
  16. collapse: {
  17. type: Boolean,
  18. default() {
  19. return false
  20. },
  21. },
  22. fixedHeader: {
  23. type: Boolean,
  24. default() {
  25. return true
  26. },
  27. },
  28. showTabs: {
  29. type: Boolean,
  30. default() {
  31. return true
  32. },
  33. },
  34. })
  35. //获取工厂列表
  36. getFactory({ status: 1 })
  37. //定时suoping
  38. const settingsStore = useSettingsStore()
  39. const { theme } = storeToRefs(settingsStore)
  40. const { handleLock: _handleLock, handleUnLock: _handleUnLock } = settingsStore
  41. let lastTime: any
  42. let nowTime: any
  43. let countTime = 0
  44. let lockTime = 600000
  45. let setIntervalTime: any //定时器
  46. const setting: any = getSetting({
  47. keys: settingKeys,
  48. }).then((res) => {
  49. const configs = res.data.configs
  50. const mintu = configs ? Number(configs.system_auto_lock_minutes) : 0
  51. lockTime = mintu ? 1000 * 60 * mintu : 600000 //锁屏时间
  52. //设置定时器--并重新计算定时锁屏倒计时
  53. lastTime = Number(localStorage.getItem('lastTime')) //记录最后操作的时间
  54. nowTime = new Date().getTime() //当前时间
  55. countTime = lockTime - (nowTime - lastTime) //倒计时剩余时间---锁屏时间--无操作时间差
  56. logger('缓存锁屏剩余时间', countTime)
  57. if (countTime <= 0) {
  58. //上次操作时间大于定时时间显示锁屏窗口
  59. _handleLock()
  60. }
  61. })
  62. //默认加载参数配置项
  63. getDictList({ keys: dictsKey }).then((res) => {
  64. localStorage.setItem('dictsSetting', JSON.stringify(res.data.dicts))
  65. })
  66. //鼠标点击事件
  67. document.onmouseup = () => {
  68. //每次鼠标点击时先清除定时器
  69. logger('鼠标点击事件')
  70. clearInterval(setIntervalTime)
  71. if (settingsStore.getLock) {
  72. logger('锁屏中')
  73. return
  74. }
  75. const data = new Date().getTime() //当前时间
  76. localStorage.setItem('lastTime', data.toString())
  77. //设置定时器--并重新计算定时锁屏倒计时
  78. lastTime = Number(localStorage.getItem('lastTime')) //记录最后操作的时间
  79. nowTime = data //当前时间
  80. countTime = lockTime - (nowTime - lastTime) //倒计时剩余时间---锁屏时间--无操作时间
  81. logger('锁屏剩余时间', countTime)
  82. setIntervalTime = setInterval(() => {
  83. logger('执行锁屏操作')
  84. _handleLock()
  85. }, countTime)
  86. }
  87. </script>
  88. <template>
  89. <div
  90. class="vab-layout-column"
  91. :class="{
  92. fixed: fixedHeader,
  93. 'no-tabs-bar': !showTabs,
  94. }"
  95. >
  96. <vab-column-bar />
  97. <div
  98. class="vab-main"
  99. :class="{
  100. ['vab-main-' + theme.columnStyle]: true,
  101. 'is-collapse-main': collapse,
  102. }"
  103. >
  104. <div
  105. class="vab-layout-header"
  106. :class="{
  107. 'fixed-header': fixedHeader,
  108. }"
  109. >
  110. <vab-nav />
  111. <vab-tabs v-show="showTabs" />
  112. </div>
  113. <vab-app-main />
  114. </div>
  115. </div>
  116. </template>
  117. <style lang="scss" scoped>
  118. .vab-layout-column {
  119. .vab-main {
  120. &.is-collapse-main {
  121. &.vab-main-horizontal {
  122. margin-left: $base-left-menu-width-min * 1.3;
  123. :deep() {
  124. .fixed-header {
  125. width: calc(100% - #{$base-left-menu-width-min} * 1.3);
  126. }
  127. }
  128. }
  129. }
  130. }
  131. }
  132. :deep() {
  133. .el-button__text--expand {
  134. letter-spacing: 0;
  135. }
  136. }
  137. </style>