@sugarat/easypicker2-client 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/.env +6 -0
  2. package/.env.production +3 -0
  3. package/.env.test +4 -0
  4. package/.eslintignore +0 -0
  5. package/.eslintrc.json +57 -0
  6. package/.github/workflows/main.yml +61 -0
  7. package/.prettierrc.js +9 -0
  8. package/LICENSE +21 -0
  9. package/README.md +86 -0
  10. package/auto-imports.d.ts +6 -0
  11. package/components.d.ts +56 -0
  12. package/docker/ep_backup/easypicker2.sql +214 -0
  13. package/docker/ep_backup/mongodb/easypicker2/action.bson +0 -0
  14. package/docker/ep_backup/mongodb/easypicker2/action.metadata.json +1 -0
  15. package/docker/ep_backup/mongodb/easypicker2/log.bson +0 -0
  16. package/docker/ep_backup/mongodb/easypicker2/log.metadata.json +1 -0
  17. package/docker/ep_backup/user-config.json +176 -0
  18. package/docs/.env +1 -0
  19. package/docs/.env.production +2 -0
  20. package/docs/.vitepress/config.ts +204 -0
  21. package/docs/.vitepress/theme/bg.png +0 -0
  22. package/docs/.vitepress/theme/index.scss +41 -0
  23. package/docs/.vitepress/theme/index.ts +5 -0
  24. package/docs/author.md +24 -0
  25. package/docs/auto-imports.d.ts +6 -0
  26. package/docs/components.d.ts +17 -0
  27. package/docs/deploy/design/api.md +3 -0
  28. package/docs/deploy/design/db.md +3 -0
  29. package/docs/deploy/design/index.md +3 -0
  30. package/docs/deploy/design/shell.md +9 -0
  31. package/docs/deploy/faq.md +86 -0
  32. package/docs/deploy/index.md +9 -0
  33. package/docs/deploy/local.md +275 -0
  34. package/docs/deploy/online-new.md +610 -0
  35. package/docs/deploy/online.md +683 -0
  36. package/docs/deploy/qiniu.md +183 -0
  37. package/docs/index.md +40 -0
  38. package/docs/introduction/about/code.md +26 -0
  39. package/docs/introduction/about/index.md +33 -0
  40. package/docs/introduction/feature/index.md +3 -0
  41. package/docs/plan/log.md +333 -0
  42. package/docs/plan/todo.md +127 -0
  43. package/docs/plan/wish.md +29 -0
  44. package/docs/praise/index.md +45 -0
  45. package/docs/public/favicon.ico +0 -0
  46. package/docs/public/logo.png +0 -0
  47. package/docs/public/robots.txt +2 -0
  48. package/docs/src/apis/ajax.ts +66 -0
  49. package/docs/src/apis/index.ts +1 -0
  50. package/docs/src/apis/modules/wish.ts +20 -0
  51. package/docs/src/components/Avatar.vue +60 -0
  52. package/docs/src/components/Home.vue +85 -0
  53. package/docs/src/components/Picture.vue +13 -0
  54. package/docs/src/components/Praise.vue +52 -0
  55. package/docs/src/components/WishBtn.vue +98 -0
  56. package/docs/src/components/WishPanel.vue +170 -0
  57. package/docs/src/components/callme/index.vue +72 -0
  58. package/docs/vite.config.ts +42 -0
  59. package/index.html +127 -0
  60. package/package.json +52 -0
  61. package/public/favicon.ico +0 -0
  62. package/public/logo.png +0 -0
  63. package/scripts/deploy/docs.mjs +24 -0
  64. package/scripts/deploy/prod.mjs +24 -0
  65. package/scripts/deploy/test.mjs +26 -0
  66. package/src/@types/ajax.d.ts +5 -0
  67. package/src/@types/api.d.ts +305 -0
  68. package/src/@types/lib.d.ts +26 -0
  69. package/src/@types/page.d.ts +18 -0
  70. package/src/App.vue +36 -0
  71. package/src/apis/ajax.ts +70 -0
  72. package/src/apis/index.ts +20 -0
  73. package/src/apis/modules/action.ts +17 -0
  74. package/src/apis/modules/category.ts +20 -0
  75. package/src/apis/modules/config.ts +19 -0
  76. package/src/apis/modules/file.ts +150 -0
  77. package/src/apis/modules/people.ts +81 -0
  78. package/src/apis/modules/public.ts +49 -0
  79. package/src/apis/modules/super/overview.ts +56 -0
  80. package/src/apis/modules/super/user.ts +62 -0
  81. package/src/apis/modules/task.ts +67 -0
  82. package/src/apis/modules/user.ts +56 -0
  83. package/src/apis/modules/wish.ts +31 -0
  84. package/src/assets/i/EasyPicker.png +0 -0
  85. package/src/assets/logo.png +0 -0
  86. package/src/assets/styles/app.css +69 -0
  87. package/src/components/HomeFooter/index.vue +134 -0
  88. package/src/components/HomeHeader/index.vue +156 -0
  89. package/src/components/InfosForm/index.vue +73 -0
  90. package/src/components/MessageList/index.vue +155 -0
  91. package/src/components/MessagePanel/index.vue +42 -0
  92. package/src/components/Praise/index.vue +102 -0
  93. package/src/components/QrCode.vue +44 -0
  94. package/src/components/linkDialog.vue +104 -0
  95. package/src/components/loginPanel.vue +92 -0
  96. package/src/constants/index.ts +83 -0
  97. package/src/env.d.ts +8 -0
  98. package/src/main.ts +19 -0
  99. package/src/pages/404/index.vue +59 -0
  100. package/src/pages/about/index.vue +152 -0
  101. package/src/pages/callme/index.vue +155 -0
  102. package/src/pages/dashboard/config/index.vue +264 -0
  103. package/src/pages/dashboard/files/index.vue +1152 -0
  104. package/src/pages/dashboard/index.vue +335 -0
  105. package/src/pages/dashboard/manage/config/index.vue +97 -0
  106. package/src/pages/dashboard/manage/index.vue +105 -0
  107. package/src/pages/dashboard/manage/overview/index.vue +488 -0
  108. package/src/pages/dashboard/manage/user/index.vue +679 -0
  109. package/src/pages/dashboard/manage/wish/index.vue +257 -0
  110. package/src/pages/dashboard/tasks/components/CategoryPanel.vue +208 -0
  111. package/src/pages/dashboard/tasks/components/CreateTask.vue +93 -0
  112. package/src/pages/dashboard/tasks/components/TaskInfo.vue +129 -0
  113. package/src/pages/dashboard/tasks/components/infoPanel/ddl.vue +96 -0
  114. package/src/pages/dashboard/tasks/components/infoPanel/file.vue +175 -0
  115. package/src/pages/dashboard/tasks/components/infoPanel/info.vue +477 -0
  116. package/src/pages/dashboard/tasks/components/infoPanel/people.vue +567 -0
  117. package/src/pages/dashboard/tasks/components/infoPanel/template.vue +146 -0
  118. package/src/pages/dashboard/tasks/components/infoPanel/tip.vue +55 -0
  119. package/src/pages/dashboard/tasks/components/infoPanel/tipInfo.vue +196 -0
  120. package/src/pages/dashboard/tasks/index.vue +302 -0
  121. package/src/pages/dashboard/tasks/public.ts +32 -0
  122. package/src/pages/disabled/index.vue +47 -0
  123. package/src/pages/feedback/index.vue +5 -0
  124. package/src/pages/home/index.vue +72 -0
  125. package/src/pages/login/index.vue +270 -0
  126. package/src/pages/register/index.vue +211 -0
  127. package/src/pages/reset/index.vue +186 -0
  128. package/src/pages/task/index.vue +897 -0
  129. package/src/pages/wish/index.vue +152 -0
  130. package/src/router/Interceptor/index.ts +112 -0
  131. package/src/router/index.ts +13 -0
  132. package/src/router/routes/index.ts +197 -0
  133. package/src/shims-vue.d.ts +6 -0
  134. package/src/store/index.ts +17 -0
  135. package/src/store/modules/category.ts +44 -0
  136. package/src/store/modules/public.ts +27 -0
  137. package/src/store/modules/task.ts +55 -0
  138. package/src/store/modules/user.ts +57 -0
  139. package/src/utils/elementUI.ts +8 -0
  140. package/src/utils/networkUtil.ts +236 -0
  141. package/src/utils/other.ts +25 -0
  142. package/src/utils/regExp.ts +11 -0
  143. package/src/utils/stringUtil.ts +242 -0
  144. package/tsconfig.json +24 -0
  145. package/vite.config.ts +55 -0
@@ -0,0 +1,92 @@
1
+ <template>
2
+ <div class="lay-form">
3
+ <!-- 登录面板 -->
4
+ <div class="pannel">
5
+ <div class="logo">
6
+ <router-link to="/">
7
+ <img src="https://img.cdn.sugarat.top/easypicker/EasyPicker.png" />
8
+ </router-link>
9
+ <p class="name">{{ title }}</p>
10
+ <p class="introduce">{{ introduce }}</p>
11
+ </div>
12
+ <slot></slot>
13
+ </div>
14
+ </div>
15
+ </template>
16
+ <script lang="ts">
17
+ import { defineComponent } from 'vue'
18
+
19
+ export default defineComponent({
20
+ name: 'loginPanel',
21
+ props: {
22
+ title: {
23
+ type: String,
24
+ default: '轻取',
25
+ },
26
+ introduce: {
27
+ type: String,
28
+ default: '在线文件收取助手',
29
+ },
30
+ },
31
+ setup() {
32
+ return {
33
+ }
34
+ },
35
+ })
36
+ </script>
37
+
38
+ <style scoped lang="scss">
39
+ // 背景之外的部分
40
+ .lay-form {
41
+ padding-top: 86px;
42
+ margin: auto;
43
+ }
44
+
45
+ .pannel {
46
+ border-radius: 5px;
47
+ border: 1px solid #e9e9e9;
48
+ width: 430px;
49
+ background-color: #fff;
50
+ opacity: 0.9;
51
+ padding: 40px 8px 48px;
52
+ margin: auto;
53
+ .logo {
54
+ display: flex;
55
+ flex-wrap: wrap;
56
+ flex-direction: column;
57
+ a{
58
+ margin: 1rem auto;
59
+ width: 90%;
60
+ img {
61
+ width: 100%;
62
+ display: block;
63
+ margin: 0 auto;
64
+ }
65
+ }
66
+ p {
67
+ margin: 5px;
68
+ text-align: center;
69
+ }
70
+ p.name {
71
+ font-size: 2rem;
72
+ font-weight: bold;
73
+ }
74
+ p.introduce {
75
+ color: #595959;
76
+ font-size: 1rem;
77
+ }
78
+ }
79
+ }
80
+
81
+ @media screen and (max-width: 700px) {
82
+ .pannel {
83
+ width: 90%;
84
+ background-color: rgba(255, 255, 255, 0.65);
85
+ }
86
+ .logo {
87
+ img {
88
+ width: 60%;
89
+ }
90
+ }
91
+ }
92
+ </style>
@@ -0,0 +1,83 @@
1
+ /**
2
+ * 用户状态
3
+ */
4
+ export enum USER_STATUS {
5
+ /**
6
+ * 正常
7
+ */
8
+ NORMAL,
9
+ /**
10
+ * 冻结
11
+ */
12
+ FREEZE,
13
+ /**
14
+ * 封禁
15
+ */
16
+ BAN
17
+ }
18
+
19
+ export enum WishStatus {
20
+ /**
21
+ * 审核中
22
+ */
23
+ REVIEW,
24
+ /**
25
+ * 待开始
26
+ */
27
+ WAIT,
28
+ /**
29
+ * 开发中
30
+ */
31
+ START,
32
+ /**
33
+ * 已上线
34
+ */
35
+ END,
36
+ /**
37
+ * 关闭
38
+ */
39
+ CLOSE
40
+ }
41
+
42
+ export enum ActionType {
43
+ /**
44
+ * 点赞
45
+ */
46
+ PRAISE,
47
+
48
+ /**
49
+ * 文件下载
50
+ */
51
+ Download,
52
+
53
+ /**
54
+ * 文件归档
55
+ */
56
+ Compress,
57
+
58
+ /**
59
+ * 路由禁用
60
+ */
61
+ DisabledRoute
62
+ }
63
+
64
+ export enum DownloadStatus {
65
+ /**
66
+ * 归档中
67
+ */
68
+ ARCHIVE,
69
+ /**
70
+ * 链接已失效
71
+ */
72
+ EXPIRED,
73
+ /**
74
+ * 可下载
75
+ */
76
+ SUCCESS,
77
+ /**
78
+ * 归档失败
79
+ */
80
+ FAIL
81
+ }
82
+
83
+ export const filenamePattern = /[\\/:*?"<>|]/g
package/src/env.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ interface ImportMetaEnv {
2
+ VITE_APP_TITLE: string
3
+ VITE_APP_AXIOS_BASE_URL: string
4
+ // 提交文件表单输入内容最大长度限制
5
+ VITE_APP_INPUT_MAX_LENGTH: string
6
+ // PV 上报路径
7
+ VITE_APP_PV_PATH: string
8
+ }
package/src/main.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { createApp } from 'vue'
2
+ import JsonViewer from 'vue-json-viewer'
3
+ import router from './router'
4
+ import store from './store'
5
+
6
+ import App from './App.vue'
7
+ import Axios from './apis/ajax'
8
+
9
+ document.title = import.meta.env.VITE_APP_TITLE
10
+
11
+ const app = createApp(App)
12
+
13
+ app.provide('$http', Axios)
14
+
15
+ app.use(router)
16
+ app.use(store)
17
+ app.use(JsonViewer)
18
+
19
+ app.mount('#app')
@@ -0,0 +1,59 @@
1
+ <template>
2
+ <div class="not-found">
3
+ <h1>404 Not Found</h1>
4
+ <h2>糟糕页面走丢了</h2>
5
+ <h3>{{ time }}s后<a @click="handleToHome">回到首页</a></h3>
6
+ </div>
7
+ </template>
8
+ <script lang="ts" setup>
9
+ import { onMounted, ref } from 'vue'
10
+ import { useRouter } from 'vue-router'
11
+
12
+ const time = ref(3)
13
+ const timer = ref(null)
14
+ const router = useRouter()
15
+ const handleToHome = () => {
16
+ clearInterval(timer.value)
17
+ router.replace('/')
18
+ }
19
+ onMounted(() => {
20
+ timer.value = setInterval(() => {
21
+ if (time.value === 1) {
22
+ clearInterval(timer.value)
23
+ router.replace('/')
24
+ }
25
+ time.value -= 1
26
+ }, 1000)
27
+ })
28
+ </script>
29
+ <style lang="scss" scoped>
30
+ .not-found {
31
+ font-family: 'Avenir', Helvetica, Arial, sans-serif;
32
+ background-image: linear-gradient(to top, #30cfd0 0%, #330867 100%);
33
+ min-height: 100vh;
34
+ }
35
+ h1,
36
+ h2,
37
+ h3,
38
+ a {
39
+ color: aliceblue;
40
+ text-align: center;
41
+ font-weight: lighter;
42
+ }
43
+ a {
44
+ margin-left: 10px;
45
+ border-bottom: 2px solid aliceblue;
46
+ }
47
+ h1 {
48
+ font-size: 48px;
49
+ padding-top: 10%;
50
+ }
51
+ h2 {
52
+ font-size: 30px;
53
+ padding-top: 2vh;
54
+ }
55
+ h3 {
56
+ font-size: 28px;
57
+ padding-top: 1vh;
58
+ }
59
+ </style>
@@ -0,0 +1,152 @@
1
+ <template>
2
+ <div class="about">
3
+ <main>
4
+ <div class="panel">
5
+ <router-link to="/">
6
+ <img class="logo" src="https://img.cdn.sugarat.top/easypicker/EasyPicker.png">
7
+ </router-link>
8
+ </div>
9
+ <div class="panel">
10
+ <h1>简介</h1>
11
+ <p>在线文件收取助手,帮助用户快速的完成一对多的文件收取</p>
12
+ </div>
13
+ <div class="panel">
14
+ <h1>诞生背景</h1>
15
+ <p>校园学习或者工作场景中会有以下几个场景:</p>
16
+ <ul>
17
+ <li><strong>电子文件:</strong> 班委向同学收取各种实验电子报告</li>
18
+ <li><strong>图片:</strong> 收取各种截图证明/活动照片</li>
19
+ <li>...</li>
20
+ </ul>
21
+ <p>目前最广泛的收取方式为,通过邮箱,QQ,微信等通讯工具传递</p>
22
+ <p>弊端显而易见,不方便整理统计。还占用电脑/手机内存</p>
23
+ <p>为了解决这个问题,此项目应运而生</p>
24
+ <p>当然<span><strong>市面上也有几款类似的办公工具</strong></span> ,功能及使用方式都差不多</p>
25
+ <p>本项目<strong>是 <a href="https://github.com/ATQQ/easypicker2-client">开源</a> 的</strong> </p>
26
+ <p>如有私有化的需求,可自行部署使用(也可 <router-link to="/author">联系作者</router-link> 提供帮助)</p>
27
+ </div>
28
+ <div class="panel">
29
+ <h1>现有功能 <span style="color:grey;font-size:0.8rem;">(用户关心的)</span></h1>
30
+ <h2>收集任务</h2>
31
+ <ul>
32
+ <li><strong>分类管理: </strong> 收集任务支持分类管理</li>
33
+ <li><strong>设置DDL(截止日期): </strong> 任务截止后不可再提交文件</li>
34
+ <li><strong>限制提交人员: </strong> 非指定的人员(姓名),无法提交文件</li>
35
+ <li><strong>设置模板文件: </strong> 提交者可直接在提交页面下载此文件</li>
36
+ <li><strong>自动重命名: </strong> 提交的文件按填写表单信息进行自动重名(如:姓名-工号.后缀)</li>
37
+ </ul>
38
+ <h2>文件相关</h2>
39
+ <ul>
40
+ <li><strong>上传(提交): </strong>单个/多个</li>
41
+ <li><strong>下载: </strong>单个/多个/按收集任务</li>
42
+ <li><strong>撤回: </strong>用户可以撤回自己提交的文件</li>
43
+ <li><strong>分享: </strong>用户可以将文件下载链接分享给朋友</li>
44
+ <li><strong>模板下载: </strong> 下载任务发布者设置的模板文件</li>
45
+ <li><strong>导出: </strong> 导出提交记录</li>
46
+ </ul>
47
+ </div>
48
+ <div class="panel">
49
+ <h1>相关链接</h1>
50
+ <h2>应用链接相关</h2>
51
+ <ul>
52
+ <li><a href="https://docs.ep.sugarat.top" target="_blank" rel="noopener noreferrer">私有化部署</a></li>
53
+ <li><a target="_blank" href="https://ep.sugarat.top">Easypicker1.0</a></li>
54
+ <li><a target="_blank" href="https://ep2.sugarat.top">Easypicker2.0</a></li>
55
+ </ul>
56
+ <h2>应用源代码 <span style="color:grey;font-size:0.8rem;">(开发者需要的)</span></h2>
57
+ <ul>
58
+ <li><a target="_blank" href="https://github.com/ATQQ/EasyPicker-webpack">Easypicker1.0-客户端</a></li>
59
+ <li><a target="_blank" href="https://github.com/ATQQ/easypicker-server">Easypicker1.0-服务端</a></li>
60
+ </ul>
61
+ <ul>
62
+ <li><a target="_blank" href="https://github.com/ATQQ/easypicker2-client">Easypicker2.0-客户端</a></li>
63
+ <li><a target="_blank" href="https://github.com/ATQQ/easypicker2-server">Easypicker2.0-服务端</a></li>
64
+ </ul>
65
+ <ul>
66
+ <li><a target="_blank" href="https://github.com/ATQQ/vite-vue3-template">Easypicker2.0-客户端模板仓库</a></li>
67
+ <li><a target="_blank" href="https://github.com/ATQQ/node-server">Easypicker2.0-服务端模板仓库</a></li>
68
+ </ul>
69
+ <h2>作者 <span style="color:grey;font-size:0.8rem;">(夹带私货)</span></h2>
70
+ <ul>
71
+ <li><a target="_blank" href="https://sugarat.top">博客</a></li>
72
+ <li><a target="_blank" href="https://github.com/ATQQ">GitHub</a></li>
73
+ <li><a target="_blank" href="https://juejin.cn/user/1028798615918983">掘金</a></li>
74
+ </ul>
75
+ </div>
76
+ <!-- <div class="panel">
77
+ <h1>开发计划</h1>
78
+ <h2>...未完待续</h2>
79
+ </div>
80
+ <div class="panel">
81
+ <h1>涉及技术</h1>
82
+ <h2>...未完待续</h2>
83
+ </div> -->
84
+ </main>
85
+ </div>
86
+ </template>
87
+ <script lang="ts">
88
+ import { defineComponent } from 'vue'
89
+
90
+ export default defineComponent({
91
+ setup() {
92
+ return {
93
+
94
+ }
95
+ },
96
+ })
97
+ </script>
98
+ <style lang="scss" scoped>
99
+ h1,
100
+ h2,
101
+ h3,
102
+ h4 {
103
+ font-weight: 500;
104
+ }
105
+ .about {
106
+ background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);
107
+ min-height: 100vh;
108
+ }
109
+ main {
110
+ max-width: 860px;
111
+ margin: 0 auto;
112
+ padding: 20px;
113
+ .panel {
114
+ position: relative;
115
+ margin: 0 auto 10px;
116
+ padding: 16px 20px;
117
+ width: 100%;
118
+ overflow: hidden;
119
+ border-radius: 0.25rem;
120
+ box-shadow: #eee;
121
+ box-sizing: border-box;
122
+ transition: all 0.3s;
123
+ background-color: #fff;
124
+ }
125
+ .logo{
126
+ width: 100%;
127
+ max-width: 520px;
128
+ margin: 0 auto;
129
+ display: block;
130
+ }
131
+ h1 {
132
+ font-size: 1.6rem;
133
+ margin-bottom: 10px;
134
+ }
135
+ h2{
136
+ font-size: 1.3rem;
137
+ margin-bottom: 12px;
138
+ }
139
+ ul,ol{
140
+ margin-left: 20px;
141
+ font-size: 15px;
142
+ margin-bottom: 1em;
143
+ }
144
+ p{
145
+ font-size: 15px;
146
+ margin-bottom: 1em;
147
+ }
148
+ a{
149
+ color: #409eff;
150
+ }
151
+ }
152
+ </style>
@@ -0,0 +1,155 @@
1
+ <template>
2
+ <div class="callme">
3
+ <main>
4
+ <div class="panel">
5
+ <h1>联系作者</h1>
6
+ <!-- 基本信息 -->
7
+ <div class="baseinfo">
8
+ <span v-for="(info, idx) in baseInfo" :key="idx" class="info-item">
9
+ <el-icon>
10
+ <component :is="info.icon" />
11
+ </el-icon>
12
+ <i :class="info.icon"></i>
13
+ <a target="_blank" :href="info.href">{{ info.text }}</a>
14
+ </span>
15
+ </div>
16
+ <hr />
17
+ <!-- 一堆二维码 -->
18
+ <div class="qq-wechat">
19
+ <ul>
20
+ <li v-for="(qrcode, idx) in qrCOdes" :key="idx">
21
+ <div class="title">{{ qrcode.text }}</div>
22
+ <div class="content">
23
+ <img :src="qrcode.img" />
24
+ </div>
25
+ </li>
26
+ </ul>
27
+ </div>
28
+ <div class="description">
29
+ <p>如遇无法解决的账号/使用问题,欢迎小窗联系我</p>
30
+ </div>
31
+ <div class="links">
32
+ <router-link to="/">回到首页</router-link>
33
+ </div>
34
+ </div>
35
+ </main>
36
+ </div>
37
+ </template>
38
+ <script lang="ts" setup>
39
+ import { UserFilled, Promotion } from '@element-plus/icons-vue'
40
+
41
+ const baseInfo = [
42
+ {
43
+ icon: UserFilled,
44
+ text: '粥里有勺糖',
45
+ href: 'https://sugarat.top',
46
+ },
47
+ {
48
+ icon: Promotion,
49
+ text: 'engineerzjl@foxmail.com',
50
+ href: 'mailto:engineerzjl@foxmail.com',
51
+ },
52
+ ]
53
+
54
+ const qrCOdes = [
55
+ {
56
+ text: '微信',
57
+ img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTk3MTkyNA==619155971925',
58
+ },
59
+ {
60
+ text: '公众号',
61
+ img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTYwNzQ5MQ==619155607491',
62
+ },
63
+ {
64
+ text: 'QQ',
65
+ img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NjQ5ODczOQ==619156498739',
66
+ },
67
+ {
68
+ text: '交流群',
69
+ img: 'https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MTE2MTE2NA==ep-group.png',
70
+ },
71
+ ]
72
+
73
+ </script>
74
+ <style lang="scss" scoped>
75
+ h1,
76
+ h2,
77
+ h3,
78
+ h4 {
79
+ font-weight: 500;
80
+ }
81
+ .callme {
82
+ background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);
83
+ min-height: 100vh;
84
+ }
85
+ main {
86
+ max-width: 860px;
87
+ margin: 0 auto;
88
+ padding: 20px;
89
+ .panel {
90
+ position: relative;
91
+ margin: 0 auto 20px;
92
+ padding: 16px 20px;
93
+ width: 100%;
94
+ overflow: hidden;
95
+ border-radius: 0.25rem;
96
+ box-shadow: #eee;
97
+ box-sizing: border-box;
98
+ transition: all 0.3s;
99
+ background-color: #fff;
100
+ }
101
+ h1 {
102
+ font-size: 1.6rem;
103
+ font-weight: 500;
104
+ margin-bottom: 10px;
105
+ }
106
+ .baseinfo {
107
+ color: #7f7f7f;
108
+ font-size: 1rem;
109
+ display: flex;
110
+ flex-wrap: wrap;
111
+ a {
112
+ color: #7f7f7f;
113
+ font-size: 1rem;
114
+ margin-left: 10px;
115
+ }
116
+ .info-item {
117
+ margin-right: 20px;
118
+ }
119
+ margin-bottom: 10px;
120
+ }
121
+ hr {
122
+ margin-bottom: 10px;
123
+ }
124
+ .qq-wechat ul {
125
+ list-style: none;
126
+ display: flex;
127
+ flex-wrap: wrap;
128
+ margin-bottom: 10px;
129
+ li {
130
+ text-align: center;
131
+ .title {
132
+ font-weight: 600;
133
+ }
134
+ .content {
135
+ padding: 0.5em;
136
+ }
137
+ img {
138
+ width: 150px;
139
+ }
140
+ }
141
+ }
142
+ .description {
143
+ color: #242424;
144
+ font-size: 15px;
145
+ margin-bottom: 10px;
146
+ text-align: center;
147
+ }
148
+ .links {
149
+ text-align: center;
150
+ a {
151
+ color: #409eff;
152
+ }
153
+ }
154
+ }
155
+ </style>