项目初始化

This commit is contained in:
jerry
2025-01-21 01:46:34 +08:00
parent 364021b042
commit 48153e7761
962 changed files with 172070 additions and 0 deletions

107
sheep/util/adVideoUtils.js Normal file
View File

@@ -0,0 +1,107 @@
let videoAd = null;
let adVideoUtils = {
/**
* @param {String} adUnitId 小程序广告视频id
* videoAdInit 初始化激励广告
*/
videoAdInit(adUnitId) {
if (videoAd) {
videoAd = null;
}
if (uni.createRewardedVideoAd) {
videoAd = uni.createRewardedVideoAd({
adUnitId: adUnitId,
});
if (videoAd) {
videoAd.onLoad(() => {
console.log('激励视频 广告加载成功');
});
videoAd.onError((err) => {
console.log('onError event emit');
});
}
// return videoAd;
}
},
/**
* @param {String} adUnitId 小程序广告视频id
* videoAdInit 初始化插屏广告
*/
insertVideoAdInit(adUnitId) {
if (videoAd) {
videoAd = null;
}
if (uni.createInterstitialAd) {
videoAd = uni.createInterstitialAd({
adUnitId: adUnitId,
});
if (videoAd) {
videoAd.onLoad(() => {
console.log('插屏视频 广告加载成功');
});
videoAd.onError((err) => {
console.log('onError event emit');
});
}
// return videoAd;
}
},
/* 显示广告 ture为播放完成 */
videoAdShow() {
return new Promise((resolve, reject) => {
adVideoUtils._showAd().then((val) => {
if (val) {
videoAd.onClose((res) => {
videoAd.offClose();
if (res.isEnded) {
//成功 给予奖励
resolve(true);
} else {
resolve(false);
}
});
videoAd.onError((err) => {
if (err.errCode == "1004") {
reject("1004");
} else {
reject(err);
}
});
} else {
resolve(true);
//reject(err);
}
});
});
},
_showAd() {
return new Promise((resolve) => {
videoAd
.show()
.then(() => {
console.log("广告显示成功");
uni.setStorageSync("adClick", false);
resolve(true);
})
.catch((err) => {
console.log("广告组件出现问题", err);
// 可以手动加载一次
videoAd
.load()
.then(() => {
console.log("手动加载成功");
uni.setStorageSync("adClick", false);
resolve(true);
// 加载成功后需要再显示广告
return videoAd.show();
})
.catch((err) => {
resolve(false);
console.log("广告组件出现问题2次加载", err);
// this.showUToast("加载失败啦,请稍后在试", "error");
});
});
});
},
};
export default adVideoUtils;

122
sheep/util/const.js Normal file
View File

@@ -0,0 +1,122 @@
// ========== COMMON - 公共模块 ==========
/**
* 与后端Terminal枚举一一对应
*/
export const TerminalEnum = {
UNKNOWN: 0, // 未知, 目的:在无法解析到 terminal 时,使用它
WECHAT_MINI_PROGRAM: 10, //微信小程序
WECHAT_WAP: 11, // 微信公众号
H5: 20, // H5 网页
APP: 31, // 手机 App
};
/**
* 将 uni-app 提供的平台转换为后端所需的 terminal值
*
* @return 终端
*/
export const getTerminal = () => {
const platformType = uni.getSystemInfoSync().uniPlatform;
// 与后端terminal枚举一一对应
switch (platformType) {
case 'app':
return TerminalEnum.APP;
case 'web':
return TerminalEnum.H5;
case 'mp-weixin':
return TerminalEnum.WECHAT_MINI_PROGRAM;
default:
return TerminalEnum.UNKNOWN;
}
};
// ========== MALL - 营销模块 ==========
import dayjs from "dayjs";
/**
* 优惠类型枚举
*/
export const PromotionDiscountTypeEnum = {
PRICE: {
type: 1,
name: '满减'
},
PERCENT: {
type: 2,
name: '折扣'
}
}
/**
* 优惠劵模板的有限期类型的枚举
*/
export const CouponTemplateValidityTypeEnum = {
DATE: {
type: 1,
name: '固定日期可用'
},
TERM: {
type: 2,
name: '领取之后可用'
}
}
/**
* 营销的商品范围枚举
*/
export const PromotionProductScopeEnum = {
ALL: {
scope: 1,
name: '通用劵'
},
SPU: {
scope: 2,
name: '商品劵'
},
CATEGORY: {
scope: 3,
name: '品类劵'
}
}
// 时间段的状态枚举
export const TimeStatusEnum = {
WAIT_START: '即将开始',
STARTED: '进行中',
END: '已结束',
}
// Promotion 的 WebSocket 消息类型枚举类
export const WebSocketMessageTypeConstants = {
IM_MESSAGE_READ: 'im_message_read_status_change', // IM消息已读
IM_MESSAGE_NEWS: 'im_message_news', // IM新消息
}
/**
* 微信小程序的订阅模版
*/
export const WxaSubscribeTemplate = {
TRADE_ORDER_DELIVERY: "订单已接单提醒",
CLERK_APPLY_SUCCESS: "认证审核通知",
CLERK_BLIND: "抢单提醒",
CLERK_ORDER: "新订单通知",
TREND_APPLY_SUCCESS: "审核通过提醒",
REWARD_SUCCESS: "收到打赏通知",
UNREAD_MESSAGE: "未读回信提醒",
PROMOTION_COMBINATION_SUCCESS: "拼团结果通知",
PAY_WALLET_RECHARGER_SUCCESS: "充值成功通知",
}
export const getTimeStatusEnum = (startTime, endTime) => {
const now = dayjs();
if (now.isBefore(startTime)) {
return TimeStatusEnum.WAIT_START;
} else if (now.isAfter(endTime)) {
return TimeStatusEnum.END;
} else {
return TimeStatusEnum.STARTED;
}
}

133
sheep/util/index.js Normal file
View File

@@ -0,0 +1,133 @@
import dayjs from "dayjs";
/**
* 将一个整数转换为分数保留两位小数
* @param {number | string | undefined} num 整数
* @return {number} 分数
*/
export const formatToFraction = (num) => {
if (typeof num === 'undefined') return 0
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
return parseFloat((parsedNumber / 100).toFixed(2))
}
/**
* 将一个数转换为 1.00 这样
* 数据呈现的时候使用
*
* @param {number | string | undefined} num 整数
* @return {string} 分数
*/
export const floatToFixed2 = (num) => {
let str = '0.00'
if (typeof num === 'undefined') {
return str
}
const f = formatToFraction(num)
const decimalPart = f.toString().split('.')[1]
const len = decimalPart ? decimalPart.length : 0
switch (len) {
case 0:
str = f.toString() + '.00'
break
case 1:
str = f.toString() + '.0'
break
case 2:
str = f.toString()
break
}
return str
}
/**
* 将一个分数转换为整数
*
* @param {number | string | undefined} num 分数
* @return {number} 整数
*/
export const convertToInteger = (num) => {
if (typeof num === 'undefined') return 0
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
// TODO 分转元后还有小数则四舍五入
return Math.round(parsedNumber * 100)
}
/**
* 时间日期转换
* @param {dayjs.ConfigType} date 当前时间new Date() 格式
* @param {string} format 需要转换的时间格式字符串
* @description format 字符串随意,如 `YYYY-mm、YYYY-mm-dd`
* @description format 季度:"YYYY-mm-dd HH:MM:SS QQQQ"
* @description format 星期:"YYYY-mm-dd HH:MM:SS WWW"
* @description format 几周:"YYYY-mm-dd HH:MM:SS ZZZ"
* @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
* @returns {string} 返回拼接后的时间字符串
*/
export function formatDate(date, format= 'YYYY-MM-DD HH:mm:ss') {
// 日期不存在,则返回空
if (!date) {
return ''
}
// 日期存在,则进行格式化
if (format === undefined) {
format = 'YYYY-MM-DD HH:mm:ss'
}
return dayjs(date).format(format)
}
/**
* 构造树型结构数据
*
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
* @param {*} rootId 根Id 默认 0
*/
export function handleTree(data, id = 'id', parentId = 'parentId', children = 'children', rootId = 0) {
// 对源数据深度克隆
const cloneData = JSON.parse(JSON.stringify(data))
// 循环所有项
const treeData = cloneData.filter(father => {
let branchArr = cloneData.filter(child => {
//返回每一项的子级数组
return father[id] === child[parentId]
});
branchArr.length > 0 ? father.children = branchArr : '';
//返回第一层
return father[parentId] === rootId;
});
return treeData !== '' ? treeData : data;
}
/**
* 重置分页对象
*
* TODO 芋艿:需要处理其它页面
*
* @param pagination 分页对象
*/
export function resetPagination(pagination) {
pagination.list = [];
pagination.total = 0;
pagination.pageNo = 1;
}
/**
* 将值复制到目标对象且以目标对象属性为准target: {a:1} source:{a:2,b:3} 结果为:{a:2}
* @param target 目标对象
* @param source 源对象
*/
export const copyValueToTarget = (target, source) => {
const newObj = Object.assign({}, target, source)
// 删除多余属性
Object.keys(newObj).forEach((key) => {
// 如果不是target中的属性则删除
if (Object.keys(target).indexOf(key) === -1) {
delete newObj[key]
}
})
// 更新目标对象值
Object.assign(target, newObj)
}