diff --git a/snowy-admin-web/package.json b/snowy-admin-web/package.json index 311883dc..e109ef77 100644 --- a/snowy-admin-web/package.json +++ b/snowy-admin-web/package.json @@ -24,12 +24,13 @@ "@chenfengyuan/vue-qrcode": "2.0.0", "@highlightjs/vue-plugin": "2.1.0", "@kangc/v-md-editor": "2.3.18", + "@microsoft/fetch-event-source": "2.0.1", "@tinymce/tinymce-vue": "5.1.1", "@vue-office/docx": "1.6.2", "@vue-office/excel": "1.7.11", - "@vue-office/pdf": "2.0.2", "ant-design-vue": "4.2.6", "axios": "1.7.7", + "codemirror": "5.65.19", "cropperjs": "1.6.2", "dayjs": "1.11.13", "echarts": "5.5.1", @@ -52,6 +53,7 @@ "vue": "3.5.13", "vue-cropper": "1.1.4", "vue-i18n": "10.0.0", + "vue-pdf-embed": "2.1.2", "vue-router": "4.4.5", "vue3-colorpicker": "2.3.0", "vue3-tree-org": "4.2.2", diff --git a/snowy-admin-web/src/api/auth/client/clientLoginApi.js b/snowy-admin-web/src/api/auth/client/clientLoginApi.js new file mode 100644 index 00000000..b1456911 --- /dev/null +++ b/snowy-admin-web/src/api/auth/client/clientLoginApi.js @@ -0,0 +1,58 @@ +/** + * Copyright [2022] [https://www.xiaonuo.vip] + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +import { baseRequest } from '@/utils/request' +import tool from '@/utils/tool' + +const request = (url, ...arg) => baseRequest(`/auth/c/` + url, ...arg) +/** + * 登录 + * + * @author yubaoshan + * @date 2025-05-31 23:55:10 + */ +export default { + // C端获取图片验证码 + clientGetPicCaptcha(data) { + return request('getPicCaptcha', data, 'get') + }, + // C端获取手机验证码 + clientGetPhoneValidCode(data) { + return request('getPhoneValidCode', data, 'get') + }, + // C端获取邮箱验证码 + clientGetEmailValidCode(data) { + return request('getEmailValidCode', data, 'get') + }, + // C端账号密码登录 + clientLogin(data) { + return request('doLogin', data, 'post', false) + }, + // C端手机验证码登录 + clientLoginByPhone(data) { + return request('doLoginByPhone', data, 'post', false) + }, + // C端邮箱验证码登录 + clientLoginByEmail(data) { + return request('doLoginByEmail', data, 'post', false) + }, + // 退出 + clientLogout(data) { + return request('doLogout', data, 'get') + }, + // 获取用户信息 + clientGetLoginUser(data) { + return request('getLoginUser', data, 'get') + }, + // C端注册 + clientRegister(data) { + return request('register', data, 'post') + } +} diff --git a/snowy-admin-web/src/api/auth/loginApi.js b/snowy-admin-web/src/api/auth/loginApi.js index fee58ac9..850f9ce0 100644 --- a/snowy-admin-web/src/api/auth/loginApi.js +++ b/snowy-admin-web/src/api/auth/loginApi.js @@ -26,6 +26,10 @@ export default { getPhoneValidCode(data) { return request('getPhoneValidCode', data, 'get') }, + // B端获取邮箱验证码 + getEmailValidCode(data) { + return request('getEmailValidCode', data, 'get') + }, // B端账号密码登录 login(data) { return request('doLogin', data, 'post', false) @@ -34,6 +38,10 @@ export default { loginByPhone(data) { return request('doLoginByPhone', data, 'post', false) }, + // B端邮箱验证码登录 + loginByEmail(data) { + return request('doLoginByEmail', data, 'post', false) + }, // 退出 logout(data) { return request('doLogout', data, 'get') @@ -41,5 +49,9 @@ export default { // 获取用户信息 getLoginUser(data) { return request('getLoginUser', data, 'get') + }, + // 注册用户 + register(data) { + return request('register', data) } } diff --git a/snowy-admin-web/src/api/client/clientUserApi.js b/snowy-admin-web/src/api/client/clientUserApi.js new file mode 100644 index 00000000..e55d9fda --- /dev/null +++ b/snowy-admin-web/src/api/client/clientUserApi.js @@ -0,0 +1,37 @@ +/** + * Copyright [2022] [https://www.xiaonuo.vip] + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +import { baseRequest } from '@/utils/request' + +const request = (url, ...arg) => baseRequest(`/client/user/` + url, ...arg) +/** + * 前台用户接口api + * + * @author yubaoshan + * @date 2025-06-01 22:26:20 + */ +export default { + // 获取用户分页 + userPage(data) { + return request('page', data, 'get') + }, + // 提交表单 edit为true时为编辑,默认为新增 + submitForm(data, edit = false) { + return request(edit ? 'edit' : 'add', data) + }, + // 删除用户 + userDelete(data) { + return request('delete', data) + }, + // 获取用户详情 + userDetail(data) { + return request('detail', data, 'get') + } +} diff --git a/snowy-admin-web/src/api/client/clientUserCenterApi.js b/snowy-admin-web/src/api/client/clientUserCenterApi.js new file mode 100644 index 00000000..6ad99766 --- /dev/null +++ b/snowy-admin-web/src/api/client/clientUserCenterApi.js @@ -0,0 +1,113 @@ +/** + * Copyright [2022] [https://www.xiaonuo.vip] + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +import { baseRequest } from '@/utils/request' + +const request = (url, ...arg) => baseRequest(`/client/userCenter/` + url, ...arg) +/** + * C端用户个人控制器 + * + * @author xuyuxiang + * @date 2022-04-22 09:34:00 + */ +export default { + // 获取图片验证码 + clientUserGetPicCaptcha(data) { + return request('getPicCaptcha', data, 'get') + }, + // 找回密码获取手机验证码 + clientUserFindPasswordGetPhoneValidCode(data) { + return request('findPasswordGetPhoneValidCode', data, 'get') + }, + // 找回密码获取邮箱验证码 + clientUserFindPasswordGetEmailValidCode(data) { + return request('findPasswordGetEmailValidCode', data, 'get') + }, + // 通过手机号找回用户密码 + clientUserFindPasswordByPhone(data) { + return request('findPasswordByPhone', data) + }, + // 通过邮箱找回用户密码 + clientUserFindPasswordByEmail(data) { + return request('findPasswordByEmail', data) + }, + // 修改密码获取手机验证码 + clientUserUpdatePasswordGetPhoneValidCode(data) { + return request('updatePasswordGetPhoneValidCode', data, 'get') + }, + // 修改密码获取邮箱验证码 + clientUserUpdatePasswordGetEmailValidCode(data) { + return request('updatePasswordGetEmailValidCode', data, 'get') + }, + // 通过验证旧密码修改用户密码 + clientUserUpdatePasswordByOld(data) { + return request('updatePasswordByOld', data) + }, + // 通过验证手机号修改用户密码 + clientUserUpdatePasswordByPhone(data) { + return request('updatePasswordByPhone', data) + }, + // 通过验证邮箱修改用户密码 + clientUserUpdatePasswordByEmail(data) { + return request('updatePasswordByEmail', data) + }, + // 绑定手机号获取手机验证码 + clientUserBindPhoneGetPhoneValidCode(data) { + return request('bindPhoneGetPhoneValidCode', data, 'get') + }, + // 修改绑定手机号获取手机验证码 + clientUserUpdateBindPhoneGetPhoneValidCode(data) { + return request('updateBindPhoneGetPhoneValidCode', data, 'get') + }, + // 绑定手机号 + clientUserBindPhone(data) { + return request('bindPhone', data) + }, + // 绑定邮箱获取邮箱验证码 + clientUserBindEmailGetEmailValidCode(data) { + return request('bindEmailGetEmailValidCode', data, 'get') + }, + // 修改绑定邮箱获取邮箱验证码 + clientUserUpdateBindEmailGetEmailValidCode(data) { + return request('updateBindEmailGetEmailValidCode', data, 'get') + }, + // 绑定邮箱 + clientUserBindEmail(data) { + return request('bindEmail', data) + }, + // 修改用户头像 + clientUserUpdateAvatar(data) { + return request('updateAvatar', data) + }, + // 修改用户签名图片 + clientUserUpdateSignature(data) { + return request('updateSignature', data) + }, + // 编辑个人信息 + clientUserUpdateUserInfo(data) { + return request('updateUserInfo', data) + }, + // 根据id获取头像 + clientUserGetAvatarById(data) { + return request('getAvatarById', data, 'get') + }, + // 判断当前用户是否需要绑定手机号 + clientUserIsUserNeedBindPhone(data) { + return request('isUserNeedBindPhone', data, 'get') + }, + // 判断当前用户是否需要绑定邮箱 + clientUserIsUserNeedBindEmail(data) { + return request('isUserNeedBindEmail', data, 'get') + }, + // 判断当前用户密码是否过期 + clientUserIsUserPasswordExpired(data) { + return request('isUserPasswordExpired', data, 'get') + } +} diff --git a/snowy-admin-web/src/api/dev/weakPasswordApi.js b/snowy-admin-web/src/api/dev/weakPasswordApi.js new file mode 100644 index 00000000..c1c50295 --- /dev/null +++ b/snowy-admin-web/src/api/dev/weakPasswordApi.js @@ -0,0 +1,28 @@ +import { baseRequest } from '@/utils/request' + +const request = (url, ...arg) => baseRequest(`/dev/weakPassword/` + url, ...arg) + +/** + * 弱密码库Api接口管理器 + * + * @author yubaoshan + * @date 2025/05/31 01:45 + **/ +export default { + // 获取弱密码库分页 + weakPasswordPage(data) { + return request('page', data, 'get') + }, + // 提交弱密码库表单 edit为true时为编辑,默认为新增 + weakPasswordSubmitForm(data, edit = false) { + return request(edit ? 'edit' : 'add', data) + }, + // 删除弱密码库 + weakPasswordDelete(data) { + return request('delete', data) + }, + // 获取弱密码库详情 + weakPasswordDetail(data) { + return request('detail', data, 'get') + } +} diff --git a/snowy-admin-web/src/api/sys/userCenterApi.js b/snowy-admin-web/src/api/sys/userCenterApi.js index 96968026..1dcd42a4 100644 --- a/snowy-admin-web/src/api/sys/userCenterApi.js +++ b/snowy-admin-web/src/api/sys/userCenterApi.js @@ -59,24 +59,18 @@ export default { return request('updatePasswordByEmail', data) }, // 绑定手机号获取手机验证码 - userBindPhoneGetPhoneValidCode(data) { - return request('bindPhoneGetPhoneValidCode', data) + userBindPhoneGetPhoneValidCode(data, phone) { + // 如果有手机号,则修改获取、否则首次绑定 + return request(phone ? 'updateBindPhoneGetPhoneValidCode' : 'bindPhoneGetPhoneValidCode', data, 'get') }, - // 修改绑定手机号获取手机验证码 - userUpdateBindPhoneGetPhoneValidCode(data) { - return request('updateBindPhoneGetPhoneValidCode', data) - }, - // 修改绑定手机号获取手机验证码 + // 绑定手机号 userBindPhone(data) { return request('bindPhone', data) }, // 绑定邮箱获取邮箱验证码 - userBindEmailGetEmailValidCode(data) { - return request('bindEmailGetEmailValidCode', data) - }, - // 修改绑定邮箱获取邮箱验证码 - userUpdateBindEmailGetEmailValidCode(data) { - return request('updateBindEmailGetEmailValidCode', data) + userBindEmailGetEmailValidCode(data, email) { + // 如果有邮箱号,则修改获取、否则首次绑定 + return request(email ? 'updateBindEmailGetEmailValidCode' : 'bindEmailGetEmailValidCode', data, 'get') }, // 绑定邮箱 userBindEmail(data) { diff --git a/snowy-admin-web/src/components/XnFilePreview/index.vue b/snowy-admin-web/src/components/XnFilePreview/index.vue index d9631ea8..0a2e4376 100644 --- a/snowy-admin-web/src/components/XnFilePreview/index.vue +++ b/snowy-admin-web/src/components/XnFilePreview/index.vue @@ -9,26 +9,28 @@ 返回 - + - @@ -50,6 +52,7 @@ + + + + diff --git a/snowy-admin-web/src/layout/components/bindPhone.vue b/snowy-admin-web/src/layout/components/bindPhone.vue new file mode 100644 index 00000000..10d07632 --- /dev/null +++ b/snowy-admin-web/src/layout/components/bindPhone.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/snowy-admin-web/src/layout/components/panel-search/index.vue b/snowy-admin-web/src/layout/components/panel-search/index.vue index e5d0b694..9ff7f1e4 100644 --- a/snowy-admin-web/src/layout/components/panel-search/index.vue +++ b/snowy-admin-web/src/layout/components/panel-search/index.vue @@ -10,7 +10,7 @@ :width="600" destroyOnClose dialogClass="searchModal" - :bodyStyle="{ maxHeight: '520px', overflow: 'auto', padding: '14px' }" + :bodyStyle="{ overflow: 'auto', padding: '14px' }" @close="searchPanelClose" >
+ + diff --git a/snowy-admin-web/src/views/auth/client/findPwd/index.vue b/snowy-admin-web/src/views/auth/client/findPwd/index.vue new file mode 100644 index 00000000..78d79110 --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/findPwd/index.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/snowy-admin-web/src/views/auth/client/findPwd/phoneFindForm.vue b/snowy-admin-web/src/views/auth/client/findPwd/phoneFindForm.vue new file mode 100644 index 00000000..f11043f1 --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/findPwd/phoneFindForm.vue @@ -0,0 +1,175 @@ + + + diff --git a/snowy-admin-web/src/views/auth/client/login/emailLoginForm.vue b/snowy-admin-web/src/views/auth/client/login/emailLoginForm.vue new file mode 100644 index 00000000..0346eb3e --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/login/emailLoginForm.vue @@ -0,0 +1,152 @@ + + + diff --git a/snowy-admin-web/src/views/auth/client/login/login.less b/snowy-admin-web/src/views/auth/client/login/login.less new file mode 100644 index 00000000..d3c9818d --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/login/login.less @@ -0,0 +1,56 @@ +.login-wrapper { + width: 100vw; + height: 100vh; + overflow: hidden; + background: linear-gradient(135deg, #1677ff 0%, #a64fff 100%); + display: flex; + justify-content: center; +} +.login_main { + width: 100%; + max-width: 450px; + margin-top: 110px; +} +.login-form { + width: 100%; + background: rgba(255, 255, 255, 0.95); + border-radius: 6px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +.login-header { + text-align: center; +} +.login-header h2 { + font-size: 28px; + font-weight: 600; + color: #1a1a1a; + margin: 0; +} +.xn-color-0d84ff { + transition: color 0.3s ease; +} +.xn-color-0d84ff:hover { + color: var(--primary-1); +} +:deep(.ant-tabs-tab) { + font-size: 16px; + padding: 12px 0; +} +:deep(.ant-input-affix-wrapper) { + border-radius: 6px; + height: 45px; +} +:deep(.ant-btn) { + height: 45px; + border-radius: 6px; + font-weight: 500; +} +:deep(.ant-card) { + background: transparent; + border: none; + box-shadow: none; +} +:deep(.ant-card-body) { + padding: 24px 32px; +} diff --git a/snowy-admin-web/src/views/auth/client/login/login.vue b/snowy-admin-web/src/views/auth/client/login/login.vue new file mode 100644 index 00000000..d3a5cf9a --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/login/login.vue @@ -0,0 +1,290 @@ + + + diff --git a/snowy-admin-web/src/views/auth/client/login/phoneLoginForm.vue b/snowy-admin-web/src/views/auth/client/login/phoneLoginForm.vue new file mode 100644 index 00000000..2f5897d5 --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/login/phoneLoginForm.vue @@ -0,0 +1,152 @@ + + + diff --git a/snowy-admin-web/src/views/auth/client/login/util.js b/snowy-admin-web/src/views/auth/client/login/util.js new file mode 100644 index 00000000..7d929e6e --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/login/util.js @@ -0,0 +1,18 @@ +import router from '@/router' +import tool from '@/utils/tool' +import { message } from 'ant-design-vue' +import clientLoginApi from '@/api/auth/client/clientLoginApi' + +export const afterLogin = async (loginToken) => { + tool.data.set('CLIENT_TOKEN', loginToken) + const param = { + token: loginToken + } + const clientLoginUserInfo = await clientLoginApi.clientGetLoginUser(param) + tool.data.set('CLIENT_USER_INFO', clientLoginUserInfo) + let indexMenu = '/front/client/index' + message.success('登录成功') + await router.replace({ + path: indexMenu + }) +} diff --git a/snowy-admin-web/src/views/auth/client/register/index.vue b/snowy-admin-web/src/views/auth/client/register/index.vue new file mode 100644 index 00000000..700d2b9a --- /dev/null +++ b/snowy-admin-web/src/views/auth/client/register/index.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/snowy-admin-web/src/views/auth/login/emailLoginForm.vue b/snowy-admin-web/src/views/auth/login/emailLoginForm.vue new file mode 100644 index 00000000..4e2a688d --- /dev/null +++ b/snowy-admin-web/src/views/auth/login/emailLoginForm.vue @@ -0,0 +1,159 @@ + + + diff --git a/snowy-admin-web/src/views/auth/login/login.vue b/snowy-admin-web/src/views/auth/login/login.vue index 620567b4..f0ccf456 100644 --- a/snowy-admin-web/src/views/auth/login/login.vue +++ b/snowy-admin-web/src/views/auth/login/login.vue @@ -90,9 +90,12 @@ - - {{ $t('login.forgetPassword') }}? - + - + + + + - + +
@@ -114,6 +123,7 @@ + + + + diff --git a/snowy-admin-web/src/views/client/user/form.vue b/snowy-admin-web/src/views/client/user/form.vue new file mode 100644 index 00000000..8dda7cfa --- /dev/null +++ b/snowy-admin-web/src/views/client/user/form.vue @@ -0,0 +1,273 @@ + + + + + diff --git a/snowy-admin-web/src/views/client/user/index.vue b/snowy-admin-web/src/views/client/user/index.vue new file mode 100644 index 00000000..57edd762 --- /dev/null +++ b/snowy-admin-web/src/views/client/user/index.vue @@ -0,0 +1,181 @@ + + + + diff --git a/snowy-admin-web/src/views/dev/config/index.vue b/snowy-admin-web/src/views/dev/config/index.vue index d1baaee9..2869645e 100644 --- a/snowy-admin-web/src/views/dev/config/index.vue +++ b/snowy-admin-web/src/views/dev/config/index.vue @@ -33,6 +33,9 @@

+

+ +

@@ -54,6 +57,7 @@ import FileConfig from './fileConfig/index.vue' import ThirdConfig from './thirdConfig/index.vue' import OtherConfig from './otherConfig/index.vue' + import PushConfig from './pushConfig/index.vue' const key = ref('sysConfig') const noTitleKey = ref('sysConfig') @@ -94,6 +98,10 @@ key: 'fileConfig', tab: '文件配置' }, + { + key: 'pushConfig', + tab: '推送配置' + }, { key: 'thirdConfig', tab: '第三方配置' diff --git a/snowy-admin-web/src/views/dev/config/passwordConfig/index.vue b/snowy-admin-web/src/views/dev/config/passwordConfig/index.vue index baabccf6..957e8c5b 100644 --- a/snowy-admin-web/src/views/dev/config/passwordConfig/index.vue +++ b/snowy-admin-web/src/views/dev/config/passwordConfig/index.vue @@ -6,11 +6,15 @@ + + + diff --git a/snowy-admin-web/src/views/dev/config/passwordConfig/weakPassword/form.vue b/snowy-admin-web/src/views/dev/config/passwordConfig/weakPassword/form.vue new file mode 100644 index 00000000..18841eae --- /dev/null +++ b/snowy-admin-web/src/views/dev/config/passwordConfig/weakPassword/form.vue @@ -0,0 +1,68 @@ + + + diff --git a/snowy-admin-web/src/views/dev/config/passwordConfig/weakPassword/index.vue b/snowy-admin-web/src/views/dev/config/passwordConfig/weakPassword/index.vue new file mode 100644 index 00000000..4f8ca2d8 --- /dev/null +++ b/snowy-admin-web/src/views/dev/config/passwordConfig/weakPassword/index.vue @@ -0,0 +1,112 @@ + + + diff --git a/snowy-admin-web/src/views/dev/config/pushConfig/dingTalkForm.vue b/snowy-admin-web/src/views/dev/config/pushConfig/dingTalkForm.vue new file mode 100644 index 00000000..8f9d1693 --- /dev/null +++ b/snowy-admin-web/src/views/dev/config/pushConfig/dingTalkForm.vue @@ -0,0 +1,86 @@ + + + diff --git a/snowy-admin-web/src/views/dev/config/pushConfig/feishuForm.vue b/snowy-admin-web/src/views/dev/config/pushConfig/feishuForm.vue new file mode 100644 index 00000000..5ecdb41f --- /dev/null +++ b/snowy-admin-web/src/views/dev/config/pushConfig/feishuForm.vue @@ -0,0 +1,82 @@ + + + diff --git a/snowy-admin-web/src/views/dev/config/pushConfig/index.vue b/snowy-admin-web/src/views/dev/config/pushConfig/index.vue new file mode 100644 index 00000000..2ca4d769 --- /dev/null +++ b/snowy-admin-web/src/views/dev/config/pushConfig/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/snowy-admin-web/src/views/dev/config/pushConfig/workWechatForm.vue b/snowy-admin-web/src/views/dev/config/pushConfig/workWechatForm.vue new file mode 100644 index 00000000..2c3867e6 --- /dev/null +++ b/snowy-admin-web/src/views/dev/config/pushConfig/workWechatForm.vue @@ -0,0 +1,82 @@ + + + diff --git a/snowy-admin-web/src/views/front/index.vue b/snowy-admin-web/src/views/front/index.vue new file mode 100644 index 00000000..ff396b85 --- /dev/null +++ b/snowy-admin-web/src/views/front/index.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/snowy-admin-web/src/views/gen/config.vue b/snowy-admin-web/src/views/gen/config.vue index b9fb6439..ad497501 100644 --- a/snowy-admin-web/src/views/gen/config.vue +++ b/snowy-admin-web/src/views/gen/config.vue @@ -8,6 +8,20 @@ :showPagination="false" bordered > +