فهرست منبع

perf(views): 优化“完成协议配置”步骤 UI

wangcong 2 ماه پیش
والد
کامیت
9f31081f6f
1فایلهای تغییر یافته به همراه227 افزوده شده و 2 حذف شده
  1. 227 2
      src/views/setup-protocol/FinishProtocol.vue

+ 227 - 2
src/views/setup-protocol/FinishProtocol.vue

@@ -2,6 +2,7 @@
 import { onMounted } from 'vue';
 import { message } from 'ant-design-vue';
 
+import SvgIcon from '@/components/SvgIcon.vue';
 import { useRequest } from '@/hooks/request';
 import { t } from '@/i18n';
 import { downloadUserProtocol } from '@/api';
@@ -34,7 +35,231 @@ const downloadProtocol = () => {
 </script>
 
 <template>
-  <div>
-    <AButton type="primary" @click="downloadProtocol">{{ $t('setupProtocol.downloadProtocolToLocal') }}</AButton>
+  <div class="finish-container">
+    <div class="finish-bg">
+      <div class="finish-circle">
+        <div class="circle-first-line"></div>
+        <div class="circle-second-line"></div>
+      </div>
+      <div class="finish-desktop">
+        <div class="desktop-header">
+          <span class="desktop-header-dot" v-for="i in 3" :key="i"></span>
+        </div>
+        <div class="desktop-content">
+          <div class="desktop-content-item" v-for="i in 3" :key="i">
+            <div class="desktop-content-item-check">
+              <SvgIcon class="desktop-content-check-icon" name="check" />
+            </div>
+            <div class="desktop-content-item-right">
+              <li class="desktop-content-item-line" v-for="i in 2" :key="i"></li>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="finish-mobile">
+        <div class="mobile-header"></div>
+        <div class="mobile-content">
+          <div class="mobile-content-item">
+            <li class="mobile-content-item-line" v-for="i in 3" :key="i"></li>
+          </div>
+          <SvgIcon class="mobile-content-check-icon" name="check-circle" />
+        </div>
+      </div>
+    </div>
+    <div class="finish-tip">{{ $t('setupProtocol.protocolConfigCompleted') }}</div>
+    <AButton class="finish-button" type="primary" @click="downloadProtocol">
+      {{ $t('setupProtocol.downloadProtocolToLocal') }}
+    </AButton>
   </div>
 </template>
+
+<style lang="scss" scoped>
+.finish-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  margin-top: 149px;
+}
+
+.finish-bg {
+  position: relative;
+  width: 302px;
+  height: 232px;
+}
+
+.finish-circle {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 201px;
+  height: 201px;
+  background-color: var(--antd-color-primary-bg);
+  border: 1px solid var(--antd-color-primary-border);
+  border-radius: 50%;
+}
+
+.circle-first-line {
+  position: absolute;
+  top: 38px;
+  left: 135px;
+  width: 13.04px;
+  height: 1px;
+  background-color: var(--antd-color-primary);
+  transform: rotate(-58deg);
+}
+
+.circle-second-line {
+  position: absolute;
+  top: 45px;
+  left: 142px;
+  width: 15.65px;
+  height: 1px;
+  background-color: var(--antd-color-primary);
+  transform: rotate(-26.57deg);
+}
+
+.finish-desktop {
+  position: absolute;
+  top: 48px;
+  left: 0;
+}
+
+.desktop-header {
+  display: flex;
+  align-items: center;
+  width: 240px;
+  height: 22px;
+  padding-left: 16px;
+  background-color: var(--antd-color-primary);
+  border-top-left-radius: 8px;
+  border-top-right-radius: 8px;
+}
+
+.desktop-header-dot {
+  width: 6px;
+  height: 6px;
+  background-color: white;
+  border-radius: 50%;
+
+  & + & {
+    margin-left: 6px;
+  }
+}
+
+.desktop-content {
+  width: 240px;
+  padding: 12px;
+  background-color: #fafafa;
+  border: 1px solid var(--antd-color-primary);
+  border-bottom-right-radius: 8px;
+  border-bottom-left-radius: 8px;
+}
+
+.desktop-content-item {
+  display: flex;
+  align-items: center;
+  height: 36px;
+  padding: 6px;
+  padding-right: 12px;
+  background: #fff;
+  border: 1px solid #d9dbe2;
+  border-radius: 4px;
+
+  & + & {
+    margin-top: 8px;
+  }
+}
+
+.desktop-content-item-check {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 24px;
+  height: 24px;
+  margin-right: 8px;
+  background-color: var(--antd-color-primary-bg-hover);
+  border: 1px solid var(--antd-color-primary);
+  border-radius: 4px;
+}
+
+.desktop-content-check-icon {
+  font-size: 11px;
+  font-weight: bold;
+  color: var(--antd-color-primary);
+}
+
+.desktop-content-item-right {
+  flex: 1;
+}
+
+.desktop-content-item-line {
+  height: 3px;
+  background-color: var(--antd-color-primary-bg-hover);
+  border-radius: 2px;
+
+  & + & {
+    margin-top: 6px;
+  }
+
+  &:last-child {
+    width: 109.2px;
+  }
+}
+
+.finish-mobile {
+  position: absolute;
+  right: 38px;
+  bottom: 0;
+  width: 99px;
+  height: 117px;
+  padding: 12px 8px;
+  background-color: rgb(255 255 255 / 10%);
+  backdrop-filter: blur(4px);
+  border: 1px solid var(--antd-color-primary);
+  border-radius: 8px;
+}
+
+.mobile-header {
+  height: 24px;
+  margin-bottom: 8px;
+  background-color: var(--antd-color-primary-border-hover);
+  border-radius: 4px;
+}
+
+.mobile-content {
+  text-align: center;
+}
+
+.mobile-content-item-line {
+  height: 3px;
+  background-color: var(--antd-color-primary-bg-hover);
+  border-radius: 1px;
+
+  & + & {
+    margin-top: 8px;
+  }
+
+  &:last-child {
+    width: 56px;
+  }
+}
+
+.mobile-content-check-icon {
+  margin-top: 12px;
+  font-size: 24px;
+  color: var(--antd-color-primary);
+}
+
+.finish-tip {
+  margin-top: 16px;
+  margin-bottom: 40px;
+  font-size: 16px;
+  line-height: 32px;
+  color: var(--antd-color-text);
+}
+
+.finish-button {
+  width: 160px;
+  height: 40px;
+}
+</style>