From ef0c041f985982840d05f701dd606fb885b1ad51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sat, 7 Sep 2024 17:57:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9Amanger=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=8F=8A=E4=BA=A7=E5=93=81=E4=B8=8E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/system/company/model/index.ts | 2 +- api/system/user/model/index.ts | 2 + ...kJyvf_!!6000000001499-55-tps-70-70 (1).svg | 1 + components/AppHeader.vue | 4 +- components/Breadcrumb.vue | 1 + composables/useServerRequest.ts | 10 +- layouts/default.vue | 30 +- pages/console/index.vue | 120 ------ pages/manage/index.vue | 353 ++++++++++++++++++ pages/passport/login.vue | 183 ++++++++- pages/search/index.vue | 208 +++++++++++ utils/common.ts | 2 +- 12 files changed, 762 insertions(+), 154 deletions(-) create mode 100644 assets/svg/O1CN01yz6fEl1MwaRtkJyvf_!!6000000001499-55-tps-70-70 (1).svg delete mode 100644 pages/console/index.vue create mode 100644 pages/manage/index.vue create mode 100644 pages/search/index.vue diff --git a/api/system/company/model/index.ts b/api/system/company/model/index.ts index 38863e1..5246840 100644 --- a/api/system/company/model/index.ts +++ b/api/system/company/model/index.ts @@ -1,4 +1,4 @@ -import { PageParam } from '@/api'; +import type { PageParam } from '@/api'; /** * 企业信息 diff --git a/api/system/user/model/index.ts b/api/system/user/model/index.ts index 092f753..cb0c589 100644 --- a/api/system/user/model/index.ts +++ b/api/system/user/model/index.ts @@ -109,6 +109,8 @@ export interface User { truename?: string; // 是否管理员:1是;2否 isAdmin?: boolean; + // 是否同意注册协议 + isAgree?: boolean; // 客户端ID clientId?: string; // 注册来源客户端 (APP、H5、小程序等) diff --git a/assets/svg/O1CN01yz6fEl1MwaRtkJyvf_!!6000000001499-55-tps-70-70 (1).svg b/assets/svg/O1CN01yz6fEl1MwaRtkJyvf_!!6000000001499-55-tps-70-70 (1).svg new file mode 100644 index 0000000..a7b3b75 --- /dev/null +++ b/assets/svg/O1CN01yz6fEl1MwaRtkJyvf_!!6000000001499-55-tps-70-70 (1).svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/components/AppHeader.vue b/components/AppHeader.vue index affab09..15fdedc 100644 --- a/components/AppHeader.vue +++ b/components/AppHeader.vue @@ -66,7 +66,8 @@ v-model="searchValue" @keyup.enter.native="handleSearch" /> - 控制台 + 控制台 + diff --git a/composables/useServerRequest.ts b/composables/useServerRequest.ts index b78e4a6..c7393ce 100644 --- a/composables/useServerRequest.ts +++ b/composables/useServerRequest.ts @@ -15,12 +15,11 @@ export const useServerRequest = (url: string, opts?: UseFetchOptions(url: string, opts?: UseFetchOptions @@ -49,6 +56,7 @@ // TODO 1 查询当前域名是否有绑定域名,绑定则解构出租户ID放入缓存 const domain = window.location.hostname; + if(domain !== 'localhost'){ // 生产环境生效 const runtimeConfig = useRuntimeConfig(); @@ -57,15 +65,15 @@ }}); const data = domainInfo.value?.data; if (data) { - localStorage.setItem('TID_DOMAIN',`${data?.tenantId}`) + // localStorage.setItem('TID_DOMAIN',`${data?.tenantId}`) }else { - website.value.statusIcon = 'error'; - website.value.statusName = '未开通'; - website.value.statusUrl = 'https://websoft.top' - website.value.statusBtnText = '去开通'; - website.value.statusText = '请在后台开通产品并绑定域名'; - loading.value = true; - return ; + // website.value.statusIcon = 'error'; + // website.value.statusName = '未开通'; + // website.value.statusUrl = 'https://websoft.top' + // website.value.statusBtnText = '去开通'; + // website.value.statusText = '请在后台开通产品并绑定域名'; + // loading.value = true; + // return ; } } diff --git a/pages/console/index.vue b/pages/console/index.vue deleted file mode 100644 index 8cd4571..0000000 --- a/pages/console/index.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - diff --git a/pages/manage/index.vue b/pages/manage/index.vue new file mode 100644 index 0000000..aee84b2 --- /dev/null +++ b/pages/manage/index.vue @@ -0,0 +1,353 @@ + + + diff --git a/pages/passport/login.vue b/pages/passport/login.vue index c49cc52..577b8c7 100644 --- a/pages/passport/login.vue +++ b/pages/passport/login.vue @@ -3,19 +3,24 @@
- - - + + + + +
- - - + - + @@ -43,8 +48,8 @@ - - + + 发送验证码 已发送 {{ countdownTime }} s @@ -59,7 +64,7 @@ - @@ -77,6 +154,7 @@ import {useConfigInfo, useToken, useUser, useWebsite} from "~/composables/config import useFormData from '@/utils/use-form-data'; import type { User } from '@/api/system/user/model'; import { ref } from 'vue' +import { Key, Avatar, Briefcase } from '@element-plus/icons-vue' import {useServerRequest} from "~/composables/useServerRequest"; import type {ApiResult} from "~/api"; import type {CaptchaResult, LoginResult} from "~/api/passport/login/model"; @@ -90,6 +168,8 @@ const user = useUser(); const activeName = ref('account') +// 登录注册切换 +const loginBar = ref(true) // 验证码 base64 数据 const captcha = ref(''); // 验证码内容, 实际项目去掉 @@ -110,6 +190,7 @@ const { form } = useFormData({ password: '', code: '', smsCode: '', + isAgree: false, remember: true, isAdmin: true }); @@ -123,6 +204,18 @@ const openImgCodeModal = () => { // imgCode.value = text.value; }; +const checkUser = async () => { + const {data: hasUser } = await useServerRequest>('/existence',{baseURL: runtimeConfig.public.apiServerDev,method: "get",params: { + field: 'phone', value: form.phone + }}); + if(hasUser.value?.code == 0){ + await sendCode(); + } + if(hasUser.value?.code != 0){ + ElMessage.error('该手机号码未注册'); + } +}; + /* 发送短信验证码 */ const sendCode = async () => { @@ -136,7 +229,7 @@ const sendCode = async () => { const {data: smsCode } = await useServerRequest>('/sendSmsCaptcha',{baseURL: runtimeConfig.public.apiServer,method: "post",body: { phone: form.phone }}); - if(smsCode.value){ + if(smsCode.value?.code == 0){ codeLoading.value = false; countdownTime.value = 30; // 开始对按钮进行倒计时 @@ -148,15 +241,23 @@ const sendCode = async () => { countdownTime.value--; }, 1000); } + if(smsCode.value?.code != 0){ + ElMessage.error(smsCode.value?.message); + } }; const navigateTo = (url: string) => { window.location.href = url; } +const onLoginBar = () => { + loginBar.value = !loginBar.value + activeName.value = loginBar.value ? 'account' : 'sms' +} + /* 获取图形验证码 */ const changeCaptcha = async () => { - const {data: captchaInfo } = await useServerRequest>('/captcha',{baseURL: runtimeConfig.public.apiServer}); + const {data: captchaInfo } = await useServerRequest>('/captcha',{baseURL: runtimeConfig.public.apiServerDev}); const captchaData = captchaInfo.value?.data if(captchaData){ captcha.value = captchaData.base64; @@ -180,7 +281,7 @@ useHead({ * 执行登录 */ const onSubmit = async () => { - const {data: response} = await useServerRequest>('/login',{baseURL: runtimeConfig.public.apiServer,method: "post",body: form}) + const {data: response} = await useServerRequest>('/login',{baseURL: runtimeConfig.public.apiServerDev,method: "post",body: form}) // 登录成功 if(response.value?.code == 0){ ElMessage.success(response.value?.message) @@ -196,13 +297,39 @@ const onSubmit = async () => { * 短信验证码登录 */ const onSubmitBySms = async () => { - const {data: response} = await useServerRequest>('/loginBySms',{baseURL: runtimeConfig.public.apiServer,method: "post",body: { + const {data: response} = await useServerRequest>('/loginBySms',{baseURL: runtimeConfig.public.apiServerDev,method: "post",body: { + phone: form.phone, + code: form.code, + isAdmin: true + }}) + // 登录成功 + if(response.value?.code == 0){ + ElMessage.success(response.value?.message) + await doLogin(response.value.data) + } + if(response.value?.code != 0){ + ElMessage.error(response.value?.message) + await changeCaptcha() + } +} + +/** + * 账号密码注册 + */ +const onRegister = async () => { + const {data: response} = await useServerRequest>('/register',{baseURL: runtimeConfig.public.apiServerDev,method: "post",body: { + companyName: '应用名称', + username: form.phone, phone: form.phone, + password: form.password, code: form.code, - tenantId: 5 + email: form.email, + isAdmin: true }}) + // 登录成功 if(response.value?.code == 0){ + console.log(response.value) ElMessage.success(response.value?.message) await doLogin(response.value.data) } @@ -212,6 +339,7 @@ const onSubmitBySms = async () => { } } + // 登录成功执行 const doLogin = async (data: any) => { const access_token = data?.access_token @@ -225,6 +353,8 @@ const doLogin = async (data: any) => { user.value.gradeName = data.user.gradeName; user.value.avatar = data.user.avatar; localStorage.setItem('UserId',data.user.userId); + localStorage.setItem('TID_ADMIN',data.user.tenantId); + // localStorage.setItem('TID_DOMAIN',data.user.tenantId); } setTimeout(() => { navigateTo('/user') @@ -239,4 +369,27 @@ changeCaptcha(); background: url("https://oss.wsdns.cn/20240904/6f5dc87c37334c4da3453826352a37d1.jpg"); background-size: 100%; } + +/* 改变未激活标签的颜色 */ +.el-tabs__item { + color: #606266; + font-size: 18px; +} + +/* 改变激活标签的颜色 */ +//.el-tabs__item.is-active { +// color: #cf1313; +//} +// +///* 改变标签边界的颜色 */ +//.el-tabs__item:not(.is-disabled):focus, +//.el-tabs__item:not(.is-disabled):hover { +// border-color: #cf1313; +//} +// +///* 改变标签栏指示器的颜色 */ +//.el-tabs--top .el-tabs__active-bar, +//.el-tabs--bottom .el-tabs__active-bar { +// background: #cf1313; +//} diff --git a/pages/search/index.vue b/pages/search/index.vue new file mode 100644 index 0000000..8254cf7 --- /dev/null +++ b/pages/search/index.vue @@ -0,0 +1,208 @@ + + diff --git a/utils/common.ts b/utils/common.ts index 5059991..d3bd0b7 100644 --- a/utils/common.ts +++ b/utils/common.ts @@ -123,7 +123,7 @@ export function openSpmUrl(path: string, d?: any, id = 0): void { // TODO 含http直接跳转 if (path.slice(0, 4) == 'http') { - window.location.href = `${path}${spm.value}`; + window.open(`${path}${spm.value}`); return; }