feat: update of partner

This commit is contained in:
eleanor.mao
2025-05-15 01:02:00 +08:00
parent 7aafc3a789
commit d2ac64f20c
52 changed files with 1435 additions and 265 deletions

View File

@ -1,7 +1,110 @@
import Taro from '@tarojs/taro';
import { CacheKey } from '@/constants/cache-key';
import http from '@/http';
import { API } from '@/http/api';
import store from '@/store';
import { setInviteCode } from '@/store/actions/partner';
import {
GetProfitRequest,
InviteUserInfo,
PartnerInviteCode,
PartnerProfitItem,
PartnerProfitsState,
} from '@/types/partner';
import { requestUserInfo } from '@/utils/user';
export const getInviteCodeFromQuery = (query: Record<string, string>): string | undefined => {
if (query) {
if (query.scene) {
return query.scene.replace('c%3D', '');
}
if (query.c) {
return query.c;
}
}
return undefined;
};
export const getInviteCodeFromQueryAndUpdate = (query: Record<string, string>) => {
const code = getInviteCodeFromQuery(query);
if (!code) {
return;
}
console.log('get code', code);
requestUserInfo(code);
};
export const getPartnerBannerClose = (): boolean => Taro.getStorageSync(CacheKey.CLOSE_PARTNER_BANNER);
export const setPartnerBannerClose = () => Taro.setStorageSync(CacheKey.CLOSE_PARTNER_BANNER, true);
export const becomePartner = async () => {
await http.post(API.BECOME_PARTNER);
await getInviteCode();
};
export const getPartnerQrcode = async () => {
return await http.post(API.PARTNER_QRCODE, {
responseType: 'arraybuffer',
});
};
export const getPartnerProfitStat = async () => {
return await http.post<PartnerProfitsState>(API.GET_PROFIT_STAT);
};
export const getPartnerInviteList = async () => {
return await http.post<InviteUserInfo[]>(API.GET_INVITE_LIST);
};
export const dispatchUpdateInviteCode = (code: string) => store.dispatch(setInviteCode(code));
export const getInviteCode = async () => {
const { inviteCode } = await http.post<PartnerInviteCode>(API.GET_INVITE_CODE);
dispatchUpdateInviteCode(inviteCode);
return inviteCode;
};
export const getProfitList = async (data: GetProfitRequest) => {
return await http.post<PartnerProfitItem[]>(API.GET_PROFIT_LIST, { data });
};
export const formatMoney = (cents: number) => {
if (!cents) {
return '0';
}
const yuan = cents / 100;
return yuan.toFixed(2);
};
export function formatTimestamp(timestamp: string): string {
// 将字符串时间戳转换为数字类型
const time = Number(timestamp);
// 创建 Date 对象
const date = new Date(time);
// 获取年、月、日、时、分、秒
const YYYY = date.getFullYear();
const MM = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始需要加1
const DD = String(date.getDate()).padStart(2, '0');
const HH = String(date.getHours()).padStart(2, '0');
const mm = String(date.getMinutes()).padStart(2, '0');
const ss = String(date.getSeconds()).padStart(2, '0');
// 拼接成所需的格式
return `${YYYY}.${MM}.${DD} ${HH}:${mm}:${ss}`;
}
export function formatUserId(input: string): string {
const length = input.length;
// 如果长度小于8隐藏最后4位
if (length < 8) {
const beforeMask = input.slice(0, length - 4); // 前部分
const maskedPart = '****'; // 替换最后4位为星号
return beforeMask + maskedPart;
}
// 如果长度大于或等于8隐藏倒数第五位到倒数第二位
const start = length - 8; // 倒数第八个字符的索引
const beforeMask = input.slice(0, start); // 前部分
const maskedPart = '****'; // 替换倒数第五位到倒数第二位为星号
const afterMask = input.slice(start + 4); // 后部分
// 拼接结果
return beforeMask + maskedPart + afterMask;
}