Commit b891491c by kaisa

Merge branch 'test'

parents f93f9d42 3048b056
Showing with 234 additions and 186 deletions
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
"@vant/use": "^1.6.0", "@vant/use": "^1.6.0",
"@vueuse/core": "^10.11.1", "@vueuse/core": "^10.11.1",
"axios": "^1.7.7", "axios": "^1.7.7",
"crypto-js": "^4.2.0",
"echarts": "^5.5.1", "echarts": "^5.5.1",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"jquery": "^3.7.1", "jquery": "^3.7.1",
...@@ -2349,6 +2350,12 @@ ...@@ -2349,6 +2350,12 @@
"typescript": ">=5" "typescript": ">=5"
} }
}, },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
"license": "MIT"
},
"node_modules/css-line-break": { "node_modules/css-line-break": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz", "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"@vant/use": "^1.6.0", "@vant/use": "^1.6.0",
"@vueuse/core": "^10.11.1", "@vueuse/core": "^10.11.1",
"axios": "^1.7.7", "axios": "^1.7.7",
"crypto-js": "^4.2.0",
"echarts": "^5.5.1", "echarts": "^5.5.1",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"jquery": "^3.7.1", "jquery": "^3.7.1",
......
import request from "@/utils/request"; import request from "@/utils/requestAct";
import type { ReturnReq } from "../types"; import type { ReturnReq } from "../types";
import { handleQueryParams } from '@/utils/common' import { handleQueryParams } from '@/utils/common'
const queryParams = handleQueryParams() const queryParams = handleQueryParams()
...@@ -10,14 +10,37 @@ if (queryParams.lang == '0' || queryParams.lang == '2') { ...@@ -10,14 +10,37 @@ if (queryParams.lang == '0' || queryParams.lang == '2') {
lang = 1 lang = 1
} }
// 获取用户信息 // 获取主播签约页面
export const getUser = (data: { target: number }): Promise<ReturnReq> => { export const getSignView = (params: {
type: Number,
}): Promise<ReturnReq> => {
return request({ return request({
method: "post", method: "get",
url: "/data/getUser", url: "/webSopAnchor/getSignView",
data: { params: {
lang, lang,
target: data.target type: params.type
} }
}); });
} }
//主播进行签约
export const anchorSign = (params: {
platform: string,
micName: string,
idCard: string,
signuid: string
}): Promise<ReturnReq> => {
return request({
method: "get",
url: "/webSopAnchor/sign",
params: {
lang,
platform: params.platform,
micName: params.micName,
idCard: params.idCard,
signuid: params.signuid
}
});
}
/* 极速狂飙距离字体 */ /* 字体 */
@font-face { @font-face {
font-family: 'leading-title'; font-family: 'FZZ';
src: url('./TT0663M_.TTF'); src: url('./FZZongYi-M05T.ttf') format('truetype');
font-weight: normal; }
font-style: normal;
}
\ No newline at end of file
...@@ -11,7 +11,7 @@ export const constantRoutes: RouteRecordRaw[] = [ ...@@ -11,7 +11,7 @@ export const constantRoutes: RouteRecordRaw[] = [
path: "/activity/recruitment", path: "/activity/recruitment",
name: "recruitment", name: "recruitment",
component: () => import("@/views/activity/recruitment/index.vue"), component: () => import("@/views/activity/recruitment/index.vue"),
meta: { title: "主播招募" }, meta: { title: "SOP主播招募" },
} }
]; ];
......
// src/utils/request.ts
import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
import { showToast } from 'vant';
import { getQueryParams } from "./common";
// 创建 axios 实例
const service = axios.create({
// baseURL: import.meta.env.VITE_APP_BASE_API,
baseURL: import.meta.env.VITE_APP_API_URL,
timeout: 30000,
/* "application/json;charset=utf-8" */
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
});
// 请求拦截器
service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
// console.log("配置", config)
// get请求映射params参数
const queryParams = getQueryParams();
const requestParams = {
token: queryParams.token,
uid: queryParams.uid,
lang: queryParams?.lang || 2,
cid: queryParams?.cid || "web_gw",
os: "WEB",
};
console.log(config);
if (config.params) {
let url = config.url + "?";
for (const propName of Object.keys(config.params)) {
const value = config.params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && typeof value !== "undefined") {
if (typeof value === "object") {
for (const key of Object.keys(value)) {
let params = propName + "[" + key + "]";
var subPart = encodeURIComponent(params) + "=";
url += subPart + encodeURIComponent(value[key]) + "&";
}
} else {
url += part + encodeURIComponent(value) + "&";
}
}
}
url = url.slice(0, -1);
config.params = { ...config.params, ...requestParams };
config.url = url;
} else if(config.data) {
config.data = { ...config.data, ...requestParams };
} else {
config.params = requestParams;
}
// console.log("config.url==========", config.url)
return config;
},
(error: any) => {
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
(response: AxiosResponse) => {
// console.log("response", response)
// 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer'), 如果是,直接返回响应对象
if (
response.config.responseType === "blob" ||
response.config.responseType === "arraybuffer"
) {
return response;
}
// console.log("response", response.data.code);
const { code, msg } = response.data;
return response.data;
// if (code === 1) {
// return response.data;
// }
// showToast (msg || "請求失敗,請稍後重試");
// return Promise.reject(new Error(response.data));
},
(error: any) => {
console.log("error", error);
if (error.response && error.response.data) {
const { code, msg } = error.response.data;
showToast (msg || "請求失敗,請稍後重試");
}
return Promise.reject(error.message);
}
);
// 导出 axios 实例
export default service;
import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios"; import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
import { showToast } from 'vant'; import { showToast } from 'vant';
import { handleQueryParams } from "./common"; import CryptoJS from 'crypto-js';
// 创建 axios 实例 // 创建 axios 实例
const service = axios.create({ const service = axios.create({
baseURL: import.meta.env.VITE_APP_ACTIVE_URL, baseURL: import.meta.env.VITE_APP_API_URL,
timeout: 30000, timeout: 30000,
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" }, headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
}); });
console.log(import.meta.env.VITE_APP_ACTIVE_URL,'import.meta.env.VITE_APP_ACTIVE_URL+'); // 获取地址栏参数对象
function handleEncryptionQueryParams() {
const search = window.location.search;
// 移除开头的问号
const encryptedParam = search.substring(1);
if (encryptedParam) {
try {
const decryptedStr = decryptAES(encryptedParam, 'mySecretKey01117');
const params = new URLSearchParams(decryptedStr);
return {
uid: params.get('uid'),
};
} catch (error) {
console.error('解密失败:', error);
return null;
}
}
return null;
}
// AES解密函数
function decryptAES(encryptedStr: string, key: string) {
const keyHex = CryptoJS.enc.Utf8.parse(key);
const decrypted = CryptoJS.AES.decrypt(encryptedStr, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
// 请求拦截器 // 请求拦截器
service.interceptors.request.use( service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => { (config: InternalAxiosRequestConfig) => {
// 配置统一请求必传参数 // 配置统一请求必传参数
const queryParams = handleQueryParams(); const queryParams = handleEncryptionQueryParams();
const newParams = { const newParams = {
token: queryParams?.token || "debug", token: queryParams?.token || "debug",
uid: queryParams?.uid || 123456, micId: queryParams?.uid || 123456,
lang: queryParams?.lang || 2, lang: queryParams?.lang || 2,
cid: queryParams?.cid || "web_gw", cid: queryParams?.cid || "web_gw",
vest: queryParams?.vest || 0, vest: queryParams?.vest || 0,
...@@ -43,10 +74,12 @@ service.interceptors.request.use( ...@@ -43,10 +74,12 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
(response: AxiosResponse) => { (response: AxiosResponse) => {
const { code, msg } = response.data const { code, msg } = response.data
console.log(response.data,'response.data?');
if (code === 1) { if (code === 1) {
return response.data; return response.data;
} else { } else {
showToast(msg || "請求失敗,請稍後重試"); // showToast(msg || "請求失敗,請稍後重試");
return response.data; return response.data;
} }
}, },
......
import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
import { showToast } from 'vant';
import { handleQueryParams } from "./common";
// 创建 axios 实例\
const service = axios.create({
baseURL: import.meta.env.VITE_APP_GAME_API_URL,
timeout: 30000,
headers: { "Content-Type": "application/json;charset=utf-8" },
});
// 请求拦截器
service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
// 配置统一请求必传参数
const queryParams = handleQueryParams();
const newParams = {
token: queryParams?.token || "debug",
uid: queryParams?.uid || 123456,
roomId: queryParams?.roomId || "",
lang: queryParams?.lang || 2,
cid: queryParams?.cid || "web_gw",
vest: queryParams?.vest || 0,
os: "WEB",
pkg: queryParams?.pkg || "",
appname: queryParams?.appname || "",
version: queryParams?.appversion || "",
};
if (config.method == 'post') {
config.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8";
config.data = { ...newParams, ...config.data };
} else {
config.params = { ...newParams, ...config.params };
}
return config;
},
(error: any) => {
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
(response: AxiosResponse) => {
const { code, msg } = response.data
if (code === 1) {
return response.data;
} else {
showToast(msg || "請求失敗,請稍後重試");
return response.data;
}
},
(error: any) => {
console.log("error", error);
if (error.response && error.response.data) {
const { code, msg } = error.response.data;
showToast(msg || "請求失敗,請稍後重試");
}
return Promise.reject(error.message);
}
);
// 导出 axios 实例
export default service;
<script setup lang="ts">
const isSuccess = ref(false)
const isFail = ref(false)
const isJudge = ref(false)
interface Props {
resultLevel: number;
}
const props = withDefaults(defineProps<Props>(), {
resultLevel: 0
});
// 监听签约状态
watch(() => props.resultLevel, (newVal) => {
// 签约状态 -1 签约驳回 0 审核中 1 签约成功
if (newVal === -1) {
isFail.value = true
} else if (newVal === 0) {
isJudge.value = true
} else if (newVal === 1) {
isSuccess.value = true
}
}, { deep: true, immediate: true });
</script>
<template>
<div class="review-wrap">
<!-- 成功 -->
<div class="success" v-show="isSuccess">
<img src="../../image/success.png" alt="">
<span class="result">簽約成功</span>
<span class="content">愿你在全新的舞台上光芒四射, 直播事业一路长红!</span>
</div>
<!-- 審核中 -->
<div class="judge" v-show="isJudge">
<img src="../../image/judge.png" alt="">
<span class="result">審核中</span>
<span class="content">您的签约資料正在审核中, 请耐心等待。 </span>
</div>
<!-- 駁回 -->
<div class="failure" v-show="isFail">
<img src="../../image/fail.png" alt="">
<span class="result">簽約駁回</span>
<span class="content">您的签约申请暂未通过审核, 請聯繫公會人員了解情況。</span>
</div>
</div>
</template>
<style scoped lang="scss">
.review-wrap {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
.success {
display: flex;
flex-direction: column;
align-items: center;
img {
width: 400px;
height: 329px;
}
}
.judge {
display: flex;
flex-direction: column;
align-items: center;
img {
width: 400px;
height: 329px;
}
}
.failure {
display: flex;
flex-direction: column;
align-items: center;
img {
width: 400px;
height: 329px;
}
.result {
color: #F64848;
}
}
.result {
font-family: PingFang SC;
font-weight: bold;
font-size: 52px;
color: #111;
padding: 40px 0 34px 0;
}
.content {
width: 400px;
height: 68px;
font-family: PingFang SC;
font-weight: 500;
font-size: 28px;
color: #444444;
line-height: 42px;
text-align: center;
}
}
</style>
\ No newline at end of file
<script setup lang="ts"> <script setup lang="ts">
import review from './components/review/index.vue'
import sign from './components/sign/index.vue'
import {
getSignView,
} from "@/api/activity/recruitmentApi";
const isShowReview = ref<boolean | null>(null)
const signLevel = ref(0)
const resultLevel = ref(0)
const platformList = ref([])
// 获取页面信息
const getAnchorSignView = async () => {
const { code, msg, data } = await getSignView({
type: 0
});
// 签约状态 0 需要签约页面 1 签约结果页面
if (data.signInfo == 1) {
isShowReview.value = true
} else {
isShowReview.value = false
}
// 合作状态
signLevel.value = data.levelInfo;
// 签约状态
resultLevel.value = data.resultInfo;
// 签约平台
platformList.value = data.list;
};
onMounted(() => {
getAnchorSignView()
})
</script> </script>
<template> <template>
<div> <sign v-if="isShowReview === false" :signLevel="signLevel" :platformList="platformList" />
SOP主播招募 <review v-else-if="isShowReview === true" :resultLevel="resultLevel" />
</div>
</template> </template>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment