index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <div class="upgrade-dialog">
  3. <el-dialog
  4. v-model="state.isUpgrade"
  5. width="300px"
  6. destroy-on-close
  7. :show-close="false"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. >
  11. <div class="upgrade-title">
  12. <div class="upgrade-title-warp">
  13. <span class="upgrade-title-warp-txt">{{ $t('message.upgrade.title') }}</span>
  14. <span class="upgrade-title-warp-version">v{{ state.version }}</span>
  15. </div>
  16. </div>
  17. <div class="upgrade-content">
  18. {{ getThemeConfig.globalTitle }} {{ $t('message.upgrade.msg') }}
  19. <div class="mt5">
  20. <el-link type="primary" class="font12" href="https://gitee.com/huge-dream/django-vue3-admin/blob/master/CHANGELOG.md" target="_black">
  21. CHANGELOG.md
  22. </el-link>
  23. </div>
  24. <div class="upgrade-content-desc mt5">{{ $t('message.upgrade.desc') }}</div>
  25. </div>
  26. <div class="upgrade-btn">
  27. <el-button round size="default" type="info" text @click="onCancel" >{{ $t('message.upgrade.btnOne') }}</el-button>
  28. <el-button type="primary" round size="default" @click="onUpgrade" :loading="state.isLoading" >{{ state.btnTxt }}</el-button>
  29. </div>
  30. </el-dialog>
  31. </div>
  32. </template>
  33. <script setup lang="ts" name="layoutUpgrade">
  34. import { reactive, computed, onMounted } from 'vue';
  35. import { useI18n } from 'vue-i18n';
  36. import { storeToRefs } from 'pinia';
  37. import { useThemeConfig } from '/@/stores/themeConfig';
  38. import { Local,Session } from '/@/utils/storage';
  39. // 定义变量内容
  40. const { t } = useI18n();
  41. const storesThemeConfig = useThemeConfig();
  42. const { themeConfig } = storeToRefs(storesThemeConfig);
  43. const state = reactive({
  44. isUpgrade: false,
  45. // @ts-ignore
  46. version: __VERSION__,
  47. isLoading: false,
  48. btnTxt: '',
  49. });
  50. // 获取布局配置信息
  51. const getThemeConfig = computed(() => {
  52. return themeConfig.value;
  53. });
  54. // 残忍拒绝
  55. const onCancel = () => {
  56. state.isUpgrade = false;
  57. Session.set('isUpgrade', false)
  58. };
  59. // 马上更新
  60. const onUpgrade = () => {
  61. state.isLoading = true;
  62. state.btnTxt = t('message.upgrade.btnTwoLoading');
  63. setTimeout(() => {
  64. Local.clear();
  65. window.location.reload();
  66. Local.set('version', state.version);
  67. Session.set('isUpgrade', false)
  68. }, 2000);
  69. };
  70. // 延迟显示,防止刷新时界面显示太快
  71. const delayShow = () => {
  72. const isUpgrade = Session.get('isUpgrade')===false?Session.get('isUpgrade'):true
  73. if(isUpgrade){
  74. setTimeout(() => {
  75. state.isUpgrade = true;
  76. }, 2000);
  77. }
  78. };
  79. // 页面加载时
  80. onMounted(() => {
  81. delayShow();
  82. setTimeout(() => {
  83. state.btnTxt = t('message.upgrade.btnTwo');
  84. }, 200);
  85. });
  86. </script>
  87. <style scoped lang="scss">
  88. .upgrade-dialog {
  89. :deep(.el-dialog) {
  90. .el-dialog__body {
  91. padding: 0 !important;
  92. }
  93. .el-dialog__header {
  94. display: none !important;
  95. }
  96. .upgrade-title {
  97. text-align: center;
  98. height: 130px;
  99. display: flex;
  100. align-items: center;
  101. justify-content: center;
  102. position: relative;
  103. &::after {
  104. content: '';
  105. position: absolute;
  106. background-color: var(--el-color-primary-light-1);
  107. width: 130%;
  108. height: 130px;
  109. border-bottom-left-radius: 100%;
  110. border-bottom-right-radius: 100%;
  111. }
  112. .upgrade-title-warp {
  113. z-index: 1;
  114. position: relative;
  115. .upgrade-title-warp-txt {
  116. color: var(--next-color-white);
  117. font-size: 22px;
  118. letter-spacing: 3px;
  119. }
  120. .upgrade-title-warp-version {
  121. color: var(--next-color-white);
  122. background-color: var(--el-color-primary-light-4);
  123. font-size: 12px;
  124. position: absolute;
  125. display: flex;
  126. top: -2px;
  127. right: -50px;
  128. padding: 2px 4px;
  129. border-radius: 2px;
  130. }
  131. }
  132. }
  133. .upgrade-content {
  134. padding: 20px;
  135. line-height: 22px;
  136. .upgrade-content-desc {
  137. color: var(--el-color-info-light-5);
  138. font-size: 12px;
  139. }
  140. }
  141. .upgrade-btn {
  142. border-top: 1px solid var(--el-border-color-lighter, #ebeef5);
  143. display: flex;
  144. justify-content: space-around;
  145. padding: 15px 20px;
  146. .el-button {
  147. width: 100%;
  148. }
  149. }
  150. }
  151. }
  152. </style>