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 @@
+
+
+
+
+
+
+
+
![]()
+
+
+ {{ index + 1 }}
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
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 @@
+
+
+
+
+
![]()
+
+
+ {{ tipWords }}
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
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') }}(演示不开放)
+