初始化项目

This commit is contained in:
2026-09-01 22:15:50 +08:00
commit b5a26a8848
11217 changed files with 1710987 additions and 0 deletions
+234
View File
@@ -0,0 +1,234 @@
import store from '@/store'
import * as util from '@/utils/util'
import { paginate } from '@/common/constant'
/**
* 显示成功提示框
*/
export const showSuccess = (msg, callback) => {
uni.showToast({
title: msg,
icon: 'success',
mask: true,
duration: 1500,
success() {
callback && callback()
}
})
}
/**
* 显示失败提示框
*/
export const showError = (msg, callback) => {
uni.showModal({
title: '友情提示',
content: msg,
showCancel: false,
success(res) {
callback && callback()
}
})
}
/**
* 显示纯文字提示框
*/
export const showToast = (msg, duration = 1500, mask = true) => {
uni.showToast({
title: msg, // 提示的内容
icon: 'none',
mask, // 是否显示透明蒙层,防止触摸穿透
duration // 提示的延迟时间,单位毫秒,默认:1500
})
}
/**
* tabBar页面路径列表 (用于链接跳转时判断)
* tabBarLinks为常量, 无需修改
*/
export const getTabBarLinks = () => {
const tabBarLinks = [
'pages/index/index',
'pages/category/index',
'pages/cart/index',
'pages/user/index'
]
return tabBarLinks
}
/**
* 生成完整的H5地址 [带参数]
* @param {string} h5Url H5访问地址
* @param {string} path 页面路径
* @param {object} params 页面参数
* @return {string}
*/
export const buildUrL = (h5Url, path, params) => {
let complete = h5Url
if (!util.isEmpty(path)) {
complete += '#/' + path
const shareParamsStr = getShareUrlParams(params)
if (!util.isEmpty(shareParamsStr)) {
complete += '?' + shareParamsStr
}
}
return complete
}
/**
* 生成转发的url参数(string格式)
*/
export const getShareUrlParams = (params) => {
return util.urlEncode({
// refereeId: store.getters.userId, // 推荐人ID
...params
})
}
/**
* 跳转到指定页面url
* 支持tabBar页面
* @param {string} url 页面路径
* @param {object} query 页面参数
* @param {string} modo 跳转类型(默认navigateTo)
*/
export const navTo = (url, query = {}, modo = 'navigateTo') => {
if (!url || url.length == 0) {
return false
}
// tabBar页面, 使用switchTab
if (util.inArray(url, getTabBarLinks())) {
uni.switchTab({
url: `/${url}`
})
return true
}
// 生成query参数
const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : ''
// 普通页面, 使用navigateTo
modo === 'navigateTo' && uni.navigateTo({
url: `/${url}${queryStr}`
})
// 特殊指定, 使用redirectTo
modo === 'redirectTo' && uni.redirectTo({
url: `/${url}${queryStr}`
})
return true
}
/**
* 获取购物车商品总数量
* @param {*} value
*/
export const getCartTotalNum = (value) => {
const cartTotal = uni.getStorageSync('cartTotalNum') || 0
return checkLogin() ? cartTotal : 0
}
/**
* 记录购物车商品总数量
* @param {*} value
*/
export const setCartTotalNum = (value) => {
uni.setStorageSync('cartTotalNum', Number(value))
}
/**
* 设置购物车tabbar的角标
* 该方法只能在tabbar页面中调用, 其他页面调用会报错
*/
export const setCartTabBadge = () => {
const cartTabbarIndex = 2
const cartTotal = getCartTotalNum()
if (cartTotal > 0) {
uni.setTabBarBadge({
index: cartTabbarIndex,
text: `${cartTotal}`
})
} else {
uni.removeTabBarBadge({
index: cartTabbarIndex
})
}
return
}
/**
* 验证是否已登录
*/
export const checkLogin = () => {
return !!store.getters.userId
}
/**
* 发起支付请求
* @param {Object} 参数
*/
export const wxPayment = (option) => {
const options = {
timeStamp: '',
nonceStr: '',
prepay_id: '',
paySign: '',
...option
}
return new Promise((resolve, reject) => {
uni.requestPayment({
provider: 'wxpay',
timeStamp: options.timeStamp,
nonceStr: options.nonceStr,
'package': `prepay_id=${options.prepay_id}`,
signType: 'MD5',
paySign: options.paySign,
success: res => resolve(res),
fail: res => reject(res)
})
})
}
/**
* 加载更多列表数据
* @param {Object} resList 新列表数据
* @param {Object} oldList 旧列表数据
* @param {int} pageNo 当前页码
*/
export const getEmptyPaginateObj = () => {
return util.cloneObj(paginate)
}
/**
* 加载更多列表数据
* @param {Object} resList 新列表数据
* @param {Object} oldList 旧列表数据
* @param {int} pageNo 当前页码
*/
export const getMoreListData = (resList, oldList, pageNo) => {
// 如果是第一页需手动制空列表
if (pageNo == 1) oldList.data = []
// 合并新数据
return oldList.data.concat(resList.data)
}
/**
* scene解码
* 用于解码微信小程序二维码参数,并返回对象
*/
export const sceneDecode = (str) => {
if (str === undefined)
return {}
const data = {}
const params = decodeURIComponent(str).split(',')
for (const i in params) {
const val = params[i].split(':');
val.length > 0 && val[0] && (data[val[0]] = val[1] || null)
}
return data
}
/**
* 获取二维码场景值(scene)
*/
export const getSceneData = query => {
return query.hasOwnProperty('scene') ? sceneDecode(query.scene) : {}
}
+13
View File
@@ -0,0 +1,13 @@
import store from '@/store'
import storage from '@/utils/storage'
import platform from '@/core/platform'
import { ACCESS_TOKEN, USER_ID } from '@/store/mutation-types'
export default function Initializer() {
// 当前运行的终端
store.commit('SET_PLATFORM', platform)
// 用户认证token
store.commit('SET_TOKEN', storage.get(ACCESS_TOKEN))
// 当前用户ID
store.commit('SET_USER_ID', storage.get(USER_ID))
}
@@ -0,0 +1,20 @@
// ** 本文件是config.js的默认数据 (请勿修改本文件中的内容)
// ** 如需修改配置请移步到根目录的config.js文件
export default {
// 系统名称
name: "萤火商城2.0",
/**
* 后端api地址 (必填; 斜杠/结尾; 请确保能访问)
* 例如: https://www.你的域名.com/index.php?s=/api/
*/
apiUrl: "./index.php?s=/api/",
/**
* 是否启用商城设置缓存
* 正式运营时启用, 将减少用户端重复请求
*/
enabledSettingCache: false,
}
+25
View File
@@ -0,0 +1,25 @@
import config from '@/config.js'
import defaultConfig from './defaultConfig.js'
// 合并用户配置和默认配置
const mergeConfig = Object.assign({}, defaultConfig, config)
/**
* 配置文件工具类
* mix: 如需在项目中获取配置项, 请使用本工具类的方法, 不要直接import根目录的config.js
*/
export default {
// 获取全部配置
all() {
return mergeConfig
},
// 获取指定配置
get(key, def = undefined) {
if (mergeConfig.hasOwnProperty(key)) {
return mergeConfig[key]
}
console.error(`检测到不存在的配置项: ${key}`)
return def
}
}
+14
View File
@@ -0,0 +1,14 @@
import Vue from 'vue'
import { mapGetters } from 'vuex'
import store from '@/store/index'
import platform from '@/core/platform'
export default {
data() {
return {
platform
}
},
computed: {}
}
+64
View File
@@ -0,0 +1,64 @@
/**
* 获取当前运行的客户端(APP H5 小程序)
* https://uniapp.dcloud.io/platform
*/
const getPlatform = () => {
// #ifdef APP-PLUS
const platform = 'APP'
// #endif
// #ifdef APP-PLUS-NVUE
const platform = 'APP'
// #endif
// #ifdef H5
const platform = weixinOfficial() ? 'H5-WEIXIN' : 'H5'
// #endif
// #ifdef MP-WEIXIN
const platform = 'MP-WEIXIN'
// #endif
// #ifdef MP-ALIPAY
const platform = 'MP-ALIPAY'
// #endif
// #ifdef MP-BAIDU
const platform = 'MP-BAIDU'
// #endif
// #ifdef MP-TOUTIAO
const platform = 'MP-TOUTIAO'
// #endif
// #ifdef MP-LARK
const platform = 'MP-LARK'
// #endif
// #ifdef MP-QQ
const platform = 'MP-QQ'
// #endif
// #ifdef MP-KUAISHOU
const platform = 'MP-KUAISHOU'
// #endif
// #ifdef MP-360
const platform = 'MP-360'
// #endif
// #ifdef QUICKAPP-WEBVIEW
const platform = 'QUICKAPP-WEBVIEW'
// #endif
return platform
}
// 是否为微信公众号端
const weixinOfficial = () => {
// #ifdef H5
const ua = window.navigator.userAgent.toLowerCase()
return String(ua.match(/MicroMessenger/i)) === 'micromessenger'
// #endif
return false
}
const platfrom = getPlatform()
export const isH5 = platfrom === 'H5'
export const isApp = platfrom === 'APP'
export const isMpWeixin = platfrom === 'MP-WEIXIN'
// 是否为微信公众号端
// 相当于H5端运行在微信内置浏览器, 但是需要使用微信的jssdk所以要单独区分
export const isWeixinOfficial = platfrom === 'H5-WEIXIN'
export default platfrom