From eab53520c8fc42bb58f6e25ff561d1f5fabb6e9d Mon Sep 17 00:00:00 2001 From: Bull-BCLS Date: Thu, 28 Dec 2023 23:47:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E9=80=81=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E9=80=82=E9=85=8D=20ContiNew=20Starter=20=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- continew-admin-common/pom.xml | 6 + .../system/enums/MessageTemplateEnum.java | 2 +- .../admin/system/mapper/MessageMapper.java | 2 +- .../system/mapper/MessageUserMapper.java | 2 +- .../admin/system/model/entity/MessageDO.java | 2 +- .../system/model/entity/MessageUserDO.java | 2 +- .../system/model/query/MessageQuery.java | 2 +- .../admin/system/model/req/MessageReq.java | 2 +- .../admin/system/model/resp/MessageResp.java | 2 +- .../admin/system/service/MessageService.java | 2 +- .../system/service/MessageUserService.java | 2 +- .../service/impl/MessageServiceImpl.java | 2 +- .../service/impl/MessageUserServiceImpl.java | 2 +- continew-admin-ui/src/api/common/captcha.ts | 50 +- continew-admin-ui/src/components/index.ts | 2 + .../src/components/verifition/Verify.vue | 431 ++++++++++++++++ .../verifition/Verify/VerifyPoints.vue | 296 +++++++++++ .../verifition/Verify/VerifySlide.vue | 462 ++++++++++++++++++ .../src/components/verifition/utils/ase.js | 14 + .../src/components/verifition/utils/util.js | 39 ++ .../views/login/components/phone-login.vue | 29 +- .../security-settings/update-phone.vue | 45 +- continew-admin-ui/tsconfig.json | 3 +- .../webapi/common/CaptchaController.java | 32 +- .../webapi/system/MessageController.java | 2 +- .../main/resources/config/application-dev.yml | 7 +- .../resources/config/application-prod.yml | 7 +- 27 files changed, 1409 insertions(+), 40 deletions(-) create mode 100644 continew-admin-ui/src/components/verifition/Verify.vue create mode 100644 continew-admin-ui/src/components/verifition/Verify/VerifyPoints.vue create mode 100644 continew-admin-ui/src/components/verifition/Verify/VerifySlide.vue create mode 100644 continew-admin-ui/src/components/verifition/utils/ase.js create mode 100644 continew-admin-ui/src/components/verifition/utils/util.js diff --git a/continew-admin-common/pom.xml b/continew-admin-common/pom.xml index 40bcbbbb..07ccca22 100644 --- a/continew-admin-common/pom.xml +++ b/continew-admin-common/pom.xml @@ -52,6 +52,12 @@ continew-starter-captcha-graphic + + + top.charles7c.continew + continew-starter-captcha-behavior + + top.charles7c.continew diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/enums/MessageTemplateEnum.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/enums/MessageTemplateEnum.java index 156bf02f..d07a0add 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/enums/MessageTemplateEnum.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/enums/MessageTemplateEnum.java @@ -22,7 +22,7 @@ import lombok.RequiredArgsConstructor; /** * 消息模板枚举 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:51 */ @Getter diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageMapper.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageMapper.java index b0700bc1..93f8668d 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageMapper.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageMapper.java @@ -29,7 +29,7 @@ import top.charles7c.continew.starter.data.mybatis.plus.base.BaseMapper; /** * 消息 Mapper * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ public interface MessageMapper extends BaseMapper { diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageUserMapper.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageUserMapper.java index ee1b34c2..c9ee3041 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageUserMapper.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/MessageUserMapper.java @@ -24,7 +24,7 @@ import top.charles7c.continew.starter.data.mybatis.plus.base.BaseMapper; /** * 消息和用户 Mapper * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 20:25 */ public interface MessageUserMapper extends BaseMapper { diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageDO.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageDO.java index 5cac1853..e2b55a5e 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageDO.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageDO.java @@ -32,7 +32,7 @@ import top.charles7c.continew.admin.common.enums.MessageTypeEnum; /** * 消息实体 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ @Data diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageUserDO.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageUserDO.java index 1d51a196..58b1ece5 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageUserDO.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/entity/MessageUserDO.java @@ -26,7 +26,7 @@ import com.baomidou.mybatisplus.annotation.TableName; /** * 消息和用户关联实体 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 20:25 */ @Data diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/query/MessageQuery.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/query/MessageQuery.java index 1ddd2d2c..99857f71 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/query/MessageQuery.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/query/MessageQuery.java @@ -28,7 +28,7 @@ import top.charles7c.continew.starter.data.mybatis.plus.query.QueryType; /** * 消息查询条件 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ @Data diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/MessageReq.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/MessageReq.java index d44d5a99..a1c90ce8 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/MessageReq.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/MessageReq.java @@ -33,7 +33,7 @@ import top.charles7c.continew.starter.extension.crud.base.BaseReq; /** * 创建消息信息 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ @Data diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/resp/MessageResp.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/resp/MessageResp.java index b6f8c166..5c02028f 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/resp/MessageResp.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/resp/MessageResp.java @@ -31,7 +31,7 @@ import top.charles7c.continew.admin.common.enums.MessageTypeEnum; /** * 消息信息 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ @Data diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageService.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageService.java index 39904d3c..2ed355d9 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageService.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageService.java @@ -27,7 +27,7 @@ import top.charles7c.continew.starter.extension.crud.model.resp.PageDataResp; /** * 消息业务接口 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ public interface MessageService { diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageUserService.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageUserService.java index 06487b33..493a29f2 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageUserService.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/MessageUserService.java @@ -23,7 +23,7 @@ import top.charles7c.continew.admin.system.model.resp.MessageUnreadResp; /** * 消息和用户关联业务接口 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ public interface MessageUserService { diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageServiceImpl.java index 1451479f..13830e72 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageServiceImpl.java @@ -47,7 +47,7 @@ import top.charles7c.continew.starter.extension.crud.model.resp.PageDataResp; /** * 消息业务实现 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ @Service diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java index 847d3935..0b53ccd3 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java @@ -38,7 +38,7 @@ import top.charles7c.continew.starter.core.util.validate.CheckUtils; /** * 消息和用户关联业务实现 * - * @author BULL_BCLS + * @author Bull-BCLS * @since 2023/10/15 19:05 */ @Service diff --git a/continew-admin-ui/src/api/common/captcha.ts b/continew-admin-ui/src/api/common/captcha.ts index d8efb0f5..8e426792 100644 --- a/continew-admin-ui/src/api/common/captcha.ts +++ b/continew-admin-ui/src/api/common/captcha.ts @@ -1,11 +1,35 @@ import axios from 'axios'; +import qs from 'query-string'; -const BASE_URL = '/common/captcha'; +const BASE_URL = '/captcha'; export interface ImageCaptchaRes { uuid: string; img: string; } + +export interface BehaviorCaptchaRes { + originalImageBase64: string; + point: { + x: number; + y: number; + }; + jigsawImageBase64: string; + token: string; + secretKey: string; +} + +export interface BehaviorCaptchaReq { + captchaType?: string; + captchaVerification?: string; + clientUid?: string; +} + +export interface CheckBehaviorCaptchaRes { + repCode: string; + repMsg: string; +} + export function getImageCaptcha() { return axios.get(`${BASE_URL}/img`); } @@ -14,6 +38,26 @@ export function getMailCaptcha(email: string) { return axios.get(`${BASE_URL}/mail?email=${email}`); } -export function getSmsCaptcha(phone: string) { - return axios.get(`${BASE_URL}/sms?phone=${phone}`); +export function getSmsCaptcha( + phone: string, + behaviorCaptcha: BehaviorCaptchaReq, +) { + return axios.get( + `${BASE_URL}/sms?phone=${phone}&captchaVerification=${encodeURIComponent( + behaviorCaptcha.captchaVerification || '', + )}`, + ); +} + +export function getBehaviorCaptcha(params: any) { + return axios.get(`${BASE_URL}/behavior`, { + params, + paramsSerializer: (obj) => { + return qs.stringify(obj); + }, + }); +} + +export function checkBehaviorCaptcha(params: any) { + return axios.post(`${BASE_URL}/behavior`, params); } diff --git a/continew-admin-ui/src/components/index.ts b/continew-admin-ui/src/components/index.ts index 09d54c0a..b10eaeb7 100644 --- a/continew-admin-ui/src/components/index.ts +++ b/continew-admin-ui/src/components/index.ts @@ -17,6 +17,7 @@ import RightToolbar from './right-toolbar/index.vue'; import SvgIcon from './svg-icon/index.vue'; import IconSelect from './icon-select/index.vue'; import download from './crud'; +import Verify from './verifition/Verify.vue'; // Manually introduce ECharts modules to reduce packing size @@ -46,5 +47,6 @@ export default { Vue.component('RightToolbar', RightToolbar); Vue.component('SvgIcon', SvgIcon); Vue.component('IconSelect', IconSelect); + Vue.component('Verify', Verify); }, }; diff --git a/continew-admin-ui/src/components/verifition/Verify.vue b/continew-admin-ui/src/components/verifition/Verify.vue new file mode 100644 index 00000000..9c9871b6 --- /dev/null +++ b/continew-admin-ui/src/components/verifition/Verify.vue @@ -0,0 +1,431 @@ + + + + + diff --git a/continew-admin-ui/src/components/verifition/Verify/VerifyPoints.vue b/continew-admin-ui/src/components/verifition/Verify/VerifyPoints.vue new file mode 100644 index 00000000..add38991 --- /dev/null +++ b/continew-admin-ui/src/components/verifition/Verify/VerifyPoints.vue @@ -0,0 +1,296 @@ + + + diff --git a/continew-admin-ui/src/components/verifition/Verify/VerifySlide.vue b/continew-admin-ui/src/components/verifition/Verify/VerifySlide.vue new file mode 100644 index 00000000..c648fbe1 --- /dev/null +++ b/continew-admin-ui/src/components/verifition/Verify/VerifySlide.vue @@ -0,0 +1,462 @@ + + + diff --git a/continew-admin-ui/src/components/verifition/utils/ase.js b/continew-admin-ui/src/components/verifition/utils/ase.js new file mode 100644 index 00000000..9ed83769 --- /dev/null +++ b/continew-admin-ui/src/components/verifition/utils/ase.js @@ -0,0 +1,14 @@ +import CryptoJS from 'crypto-js'; +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word, keyWord = 'XwKsGlMcdPMEhR1B') { + const key = CryptoJS.enc.Utf8.parse(keyWord); + const arcs = CryptoJS.enc.Utf8.parse(word); + const encrypted = CryptoJS.AES.encrypt(arcs, key, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + }); + return encrypted.toString(); +} diff --git a/continew-admin-ui/src/components/verifition/utils/util.js b/continew-admin-ui/src/components/verifition/utils/util.js new file mode 100644 index 00000000..901e307f --- /dev/null +++ b/continew-admin-ui/src/components/verifition/utils/util.js @@ -0,0 +1,39 @@ +export function resetSize(vm) { + let img_width; + let img_height; + let bar_width; + let bar_height; // 图片的宽度、高度,移动条的宽度、高度 + + const parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth; + const parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight; + if (vm.imgSize.width.indexOf('%') !== -1) { + img_width = `${(parseInt(vm.imgSize.width, 10) / 100) * parentWidth}px`; + } else { + img_width = vm.imgSize.width; + } + + if (vm.imgSize.height.indexOf('%') !== -1) { + img_height = `${(parseInt(vm.imgSize.height, 10) / 100) * parentHeight}px`; + } else { + img_height = vm.imgSize.height; + } + + if (vm.barSize.width.indexOf('%') !== -1) { + bar_width = `${(parseInt(vm.barSize.width, 10) / 100) * parentWidth}px`; + } else { + bar_width = vm.barSize.width; + } + + if (vm.barSize.height.indexOf('%') !== -1) { + bar_height = `${(parseInt(vm.barSize.height, 10) / 100) * parentHeight}px`; + } else { + bar_height = vm.barSize.height; + } + + return { + imgWidth: img_width, + imgHeight: img_height, + barWidth: bar_width, + barHeight: bar_height, + }; +} diff --git a/continew-admin-ui/src/views/login/components/phone-login.vue b/continew-admin-ui/src/views/login/components/phone-login.vue index 71b634a7..621225d6 100644 --- a/continew-admin-ui/src/views/login/components/phone-login.vue +++ b/continew-admin-ui/src/views/login/components/phone-login.vue @@ -29,7 +29,7 @@ class="captcha-btn" :loading="captchaLoading" :disabled="captchaDisable" - @click="handleSendCaptcha" + @click="handleOpenBehaviorCaptcha" > {{ captchaBtnName }} @@ -43,6 +43,13 @@ >{{ $t('login.button') }}(演示不开放) +