diff --git a/continew-admin-common/pom.xml b/continew-admin-common/pom.xml index 40bcbbbbd84622021a2c15207450a34faa0bc937..07ccca229f0c200fcb5247741f11aaa4e3bd5ecd 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 156bf02f87bd89e2fef5a749ed4f0d4594df3f95..d07a0add21fe58274e248479377300bbb69147c1 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 b0700bc13878cf7d1ce0440024cdd89dc1f10abf..93f8668d4d4d96b23d3d672078e5d3962d7eae17 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 ee1b34c222347ddc936a278d80c5ad9bedbe5a21..c9ee3041884bc4895f79dc275cc8a462107e094a 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 5cac1853676e0e1575f573274b2b12f11d507d72..e2b55a5e34bec515e1c66f4fd8ba10f9f11114d4 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 1d51a1966a76bf72476804df3702020ebf644222..58b1ece5b9fd6b6a086de4644fbe1d3ee1b03af0 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 1ddd2d2c9e5c9f0761d5a29518f76de3d2af8960..99857f710eec55246ed1930cce9195671e388664 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 d44d5a996117b20068a76302dc0aa9aa3519824f..a1c90ce8dfae0acf359eb788f5bc2d21e5c5bce4 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 b6f8c166a4e5e0722ee3cb67b8ae1f51fbed8116..5c02028f0a8f875199c1880568310521052de706 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 39904d3c833228c88d076d47fd2c1478df5b9a80..2ed355d9f2d27991473520ff4203355d9907f417 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 06487b33fa0cc4dabb10c5100c973c3708d45675..493a29f2b64a79b36b4c2b2ba1eda4a016973a0a 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 1451479f0f1942615e161825eaba9e752814f3fb..13830e72d755e45a4ed50a47cfba68bd241f366f 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 847d39353f7f09f5611c3377dab6270bae5e7a0b..0b53ccd3668544ff9752f70d058ed6cb68db3faa 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 d8efb0f52a5522ed98cfd8f187d354055851b7b5..8e4267924592cfd84e21727eb58faf8024fa3c5c 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 09d54c0a48fa2efb4c632200cf25e539da4bf07b..b10eaeb747026849cd273dfc2d690b6966ea4c86 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 0000000000000000000000000000000000000000..9c9871b67e29874d58c90d94857fe30d41594e91 --- /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 0000000000000000000000000000000000000000..add38991aa6b2d255fe6a81af7e5d9ea9ffc67f7 --- /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 0000000000000000000000000000000000000000..c648fbe1aeb3f06f8ef4bea8ab662ae9ec70d3e0 --- /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 0000000000000000000000000000000000000000..9ed83769381ec7de73392ed8e358c580bd14123a --- /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 0000000000000000000000000000000000000000..901e307ff0ff60fe45d97e77a8fd61da505805b8 --- /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 71b634a7453d2dbad9c684033639cddaf88d3180..621225d61e1353d01eb62f33c9df491b642ee306 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') }}(演示不开放) +