Jelajahi Sumber

服务器停运公告

FanHong 1 Minggu lalu
induk
melakukan
7465ff83b3

+ 152 - 0
shudao-vue-frontend/src/views/Index.vue

@@ -1,5 +1,24 @@
 <template>
   <div class="container">
+    <!-- 停机维护公告弹窗 (新版样式) -->
+    <div class="maintenance-overlay" v-if="showMaintenance">
+      <div class="maintenance-banner">
+        <div class="mb-top-line"></div>
+        <div class="mb-content">
+          <div class="mb-dept">信 息 技 术 部 · 运 维 管 理 中 心</div>
+          <h2 class="mb-title">系统升级维护公告</h2>
+          <p class="mb-desc">为进一步提升系统服务质量与运行稳定性,我单位定于以下时段进行系统升级维护,<br>届时部分业务服务将暂时无法访问,敬请谅解。</p>
+          <p class="mb-time">预计恢复时间2026年5月4日12:00</p>
+          <div class="mb-status-wrapper">
+            <div class="mb-status">
+              <span class="status-dot"></span>
+              维护中 · 部分服务暂不可用
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
     <!-- 顶部logo -->
     <div class="header">
       <div class="logo">
@@ -220,6 +239,7 @@ const {
 } = useSpeechRecognition()
 
 // 响应式数据
+const showMaintenance = ref(true) // 控制停机维护公告显示
 const searchText = ref('')
 const showFeedbackModal = ref(false)
 const isSending = ref(false)
@@ -541,6 +561,138 @@ onUnmounted(() => {
 
 <style lang="less" scoped>
 
+/* 停机维护公告弹窗 (新版样式) */
+.maintenance-overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background: rgba(0, 0, 0, 0.4);
+  backdrop-filter: blur(4px);
+  z-index: 9999;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  animation: fadeIn 0.3s ease-out;
+}
+
+.maintenance-banner {
+  background: linear-gradient(180deg, #183582 0%, #0d1e57 100%);
+  border-radius: 16px;
+  overflow: hidden;
+  box-shadow: 0 20px 50px rgba(13, 30, 87, 0.5);
+  position: relative;
+  width: 90%;
+  max-width: 680px;
+  animation: scaleUp 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+}
+
+.mb-close-btn {
+  position: absolute;
+  top: 12px;
+  right: 16px;
+  font-size: 28px;
+  color: rgba(255, 255, 255, 0.6);
+  cursor: pointer;
+  line-height: 1;
+  transition: all 0.2s;
+  z-index: 10;
+}
+
+.mb-close-btn:hover {
+  color: #fff;
+  transform: scale(1.1);
+}
+
+.mb-top-line {
+  height: 6px;
+  background-color: #ef4444; /* 顶部红线 */
+  width: 100%;
+}
+
+.mb-content {
+  padding: 40px 30px 45px 30px;
+  text-align: center;
+  color: #ffffff;
+}
+
+.mb-dept {
+  font-size: 14px;
+  color: rgba(255, 255, 255, 0.7);
+  margin-bottom: 20px;
+  letter-spacing: 2px;
+}
+
+.mb-title {
+  font-size: 38px;
+  font-weight: bold;
+  margin: 0 0 28px 0;
+  letter-spacing: 2px;
+  font-family: "STZhongsong", "SimSun", "Songti SC", serif; /* 宋体/明朝体风格 */
+  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.mb-desc {
+  font-size: 15px;
+  color: rgba(255, 255, 255, 0.9);
+  line-height: 1.8;
+  margin: 0 0 16px 0;
+  letter-spacing: 0.5px;
+}
+
+.mb-time {
+  font-size: 15px;
+  color: rgba(255, 255, 255, 0.9);
+  margin: 0 0 36px 0;
+  letter-spacing: 0.5px;
+  font-weight: 500;
+}
+
+.mb-status-wrapper {
+  display: flex;
+  justify-content: center;
+}
+
+.mb-status {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  background-color: #fdf8eb; /* 浅黄色背景 */
+  color: #b45309; /* 橙色文字 */
+  padding: 12px 32px;
+  border-radius: 30px;
+  font-size: 16px;
+  font-weight: bold;
+  gap: 10px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+  letter-spacing: 1px;
+}
+
+.status-dot {
+  width: 10px;
+  height: 10px;
+  background-color: #d1a374; /* 圆点颜色 */
+  border-radius: 50%;
+  animation: pulse 2s infinite;
+}
+
+@keyframes pulse {
+  0% { opacity: 1; transform: scale(1); }
+  50% { opacity: 0.5; transform: scale(0.8); }
+  100% { opacity: 1; transform: scale(1); }
+}
+
+@keyframes fadeIn {
+  from { opacity: 0; }
+  to { opacity: 1; }
+}
+
+@keyframes scaleUp {
+  from { opacity: 0; transform: scale(0.9); }
+  to { opacity: 1; transform: scale(1); }
+}
+
 .container {
   width: 100%;
   height: 100vh;

+ 153 - 0
shudao-vue-frontend/src/views/mobile/m-Index.vue

@@ -1,5 +1,24 @@
 <template>
   <div class="mobile-container">
+    <!-- 停机维护公告弹窗 (新版样式) -->
+    <div class="maintenance-overlay" v-if="showMaintenance">
+      <div class="maintenance-banner">
+        <div class="mb-top-line"></div>
+        <div class="mb-content">
+          <div class="mb-dept">信 息 技 术 部 · 运 维 管 理 中 心</div>
+          <h2 class="mb-title">系统升级维护公告</h2>
+          <p class="mb-desc">为进一步提升系统服务质量与运行稳定性,我单位定于以下时段进行系统升级维护,<br>届时部分业务服务将暂时无法访问,敬请谅解。</p>
+          <p class="mb-time">预计恢复时间2026年5月4日12:00</p>
+          <div class="mb-status-wrapper">
+            <div class="mb-status">
+              <span class="status-dot"></span>
+              维护中 · 部分服务暂不可用
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
     <!-- 顶部logo -->
     <div class="mobile-header">
       <div class="logo">
@@ -214,6 +233,7 @@ const {
 } = useSpeechRecognition()
 
 // 响应式数据
+const showMaintenance = ref(true) // 控制停机维护公告显示
 const searchText = ref('')
 const showFeedbackModal = ref(false)
 const isSending = ref(false)
@@ -443,6 +463,139 @@ onBeforeUnmount(() => {
 </script>
 
 <style lang="less" scoped>
+
+/* 停机维护公告弹窗 (新版样式 - 移动端适配) */
+.maintenance-overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background: rgba(0, 0, 0, 0.4);
+  backdrop-filter: blur(4px);
+  z-index: 9999;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  animation: fadeIn 0.3s ease-out;
+}
+
+.maintenance-banner {
+  background: linear-gradient(180deg, #183582 0%, #0d1e57 100%);
+  border-radius: 12px;
+  overflow: hidden;
+  box-shadow: 0 15px 40px rgba(13, 30, 87, 0.5);
+  position: relative;
+  width: 90%;
+  max-width: 400px;
+  animation: scaleUp 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+}
+
+.mb-close-btn {
+  position: absolute;
+  top: 8px;
+  right: 12px;
+  font-size: 24px;
+  color: rgba(255, 255, 255, 0.6);
+  cursor: pointer;
+  line-height: 1;
+  transition: all 0.2s;
+  z-index: 10;
+}
+
+.mb-close-btn:active {
+  color: #fff;
+  transform: scale(1.1);
+}
+
+.mb-top-line {
+  height: 4px;
+  background-color: #ef4444; /* 顶部红线 */
+  width: 100%;
+}
+
+.mb-content {
+  padding: 30px 20px 35px 20px;
+  text-align: center;
+  color: #ffffff;
+}
+
+.mb-dept {
+  font-size: 12px;
+  color: rgba(255, 255, 255, 0.7);
+  margin-bottom: 16px;
+  letter-spacing: 1px;
+}
+
+.mb-title {
+  font-size: 26px;
+  font-weight: bold;
+  margin: 0 0 20px 0;
+  letter-spacing: 1px;
+  font-family: "STZhongsong", "SimSun", "Songti SC", serif; /* 宋体/明朝体风格 */
+  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.mb-desc {
+  font-size: 13px;
+  color: rgba(255, 255, 255, 0.9);
+  line-height: 1.6;
+  margin: 0 0 12px 0;
+  letter-spacing: 0.5px;
+}
+
+.mb-time {
+  font-size: 13px;
+  color: rgba(255, 255, 255, 0.9);
+  margin: 0 0 24px 0;
+  letter-spacing: 0.5px;
+  font-weight: 500;
+}
+
+.mb-status-wrapper {
+  display: flex;
+  justify-content: center;
+}
+
+.mb-status {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  background-color: #fdf8eb; /* 浅黄色背景 */
+  color: #b45309; /* 橙色文字 */
+  padding: 10px 24px;
+  border-radius: 24px;
+  font-size: 14px;
+  font-weight: bold;
+  gap: 8px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+  letter-spacing: 1px;
+}
+
+.status-dot {
+  width: 8px;
+  height: 8px;
+  background-color: #d1a374; /* 圆点颜色 */
+  border-radius: 50%;
+  animation: pulse 2s infinite;
+}
+
+@keyframes pulse {
+  0% { opacity: 1; transform: scale(1); }
+  50% { opacity: 0.5; transform: scale(0.8); }
+  100% { opacity: 1; transform: scale(1); }
+}
+
+@keyframes fadeIn {
+  from { opacity: 0; }
+  to { opacity: 1; }
+}
+
+@keyframes scaleUp {
+  from { opacity: 0; transform: scale(0.9); }
+  to { opacity: 1; transform: scale(1); }
+}
+
 .mobile-container {
   width: 100%;
   min-height: 100vh;