解决merge
@@ -4,7 +4,7 @@
|
||||
"configurations": [{
|
||||
"app-plus" :
|
||||
{
|
||||
"launchtype" : "local"
|
||||
"launchtype" : "remote"
|
||||
},
|
||||
"default" :
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@ const request = (parameter, hideLoding = true) => {
|
||||
// 注入header
|
||||
config.header = {
|
||||
'Accept': 'application/json',
|
||||
'Authorization': store.getters.getToken || ''
|
||||
'Authorization': store.getters.getToken || uni.getStorageSync('token')
|
||||
}
|
||||
// 加载提示
|
||||
if(!hideLoding) uni.showLoading({
|
||||
@@ -137,6 +137,8 @@ const errToast = (code) => {
|
||||
// 更新token
|
||||
const updateToken = (token) => {
|
||||
store.commit('setToken', token)
|
||||
// 清除退出登录标识
|
||||
uni.removeStorageSync('isnew')
|
||||
}
|
||||
|
||||
// 处理登录提示
|
||||
|
||||
@@ -24,7 +24,70 @@ const recharge = (data) => {
|
||||
})
|
||||
}
|
||||
|
||||
// 充值订单信息
|
||||
const payment = (data) => {
|
||||
return request({
|
||||
url: "user/transaction/recharge/payment",
|
||||
method: "POST",
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 充值记录
|
||||
const log = (data) => {
|
||||
return request({
|
||||
url: 'user/transaction/recharge/lists'
|
||||
})
|
||||
}
|
||||
|
||||
// 获取钱包地址
|
||||
const code = () => {
|
||||
return request({
|
||||
url: 'chain/account/code'
|
||||
})
|
||||
}
|
||||
|
||||
// 转账初始化
|
||||
const transfer = () => {
|
||||
return request({
|
||||
url: 'user/transaction/transfer'
|
||||
})
|
||||
}
|
||||
|
||||
// 设置支付密码
|
||||
const setpassword = data => {
|
||||
return request({
|
||||
url: 'user/transaction/setpassword',
|
||||
method: 'POST',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取验证码
|
||||
const getSms = data => {
|
||||
return request({
|
||||
url: 'user/transaction/setpassword/sms',
|
||||
method: 'POST'
|
||||
})
|
||||
}
|
||||
|
||||
// 提交转账
|
||||
const submitTransfer = data => {
|
||||
return request({
|
||||
url: 'user/transaction/transfer/store',
|
||||
method: 'POST',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
dt,
|
||||
recharge
|
||||
recharge,
|
||||
payment,
|
||||
log,
|
||||
code,
|
||||
transfer,
|
||||
setpassword,
|
||||
getSms,
|
||||
submitTransfer
|
||||
}
|
||||
|
||||
@@ -15,7 +15,22 @@ const life = () =>{
|
||||
})
|
||||
}
|
||||
|
||||
// 共分首页
|
||||
const glz = () => {
|
||||
return request({
|
||||
url: 'user/glz/index'
|
||||
})
|
||||
}
|
||||
|
||||
// 签到
|
||||
const sign = () => {
|
||||
return request({
|
||||
url: 'user/glz/sign'
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
life
|
||||
life,
|
||||
glz,
|
||||
sign
|
||||
}
|
||||
|
||||
@@ -21,16 +21,34 @@ const goods = id => {
|
||||
})
|
||||
}
|
||||
|
||||
// 套餐列表
|
||||
const meals = (id, categoryId) => {
|
||||
// 店铺列表
|
||||
const shops = (categoryId) => {
|
||||
return request({
|
||||
url: 'mall/meals/' + id,
|
||||
url: 'mall/shops',
|
||||
data: {
|
||||
category_id: categoryId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 店铺详情
|
||||
const shopsDetail = (shopId) => {
|
||||
return request({
|
||||
url: 'mall/shops/' + shopId,
|
||||
})
|
||||
}
|
||||
|
||||
// 店铺商品
|
||||
const shopsGoods = (shop_id, category_id) => {
|
||||
return request({
|
||||
url: 'mall/goods',
|
||||
data: {
|
||||
shop_id,
|
||||
category_id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 商品列表
|
||||
const lists = data => {
|
||||
return request({
|
||||
@@ -66,7 +84,9 @@ const classify = id => {
|
||||
export {
|
||||
mall,
|
||||
goods,
|
||||
meals,
|
||||
shops,
|
||||
shopsDetail,
|
||||
shopsGoods,
|
||||
lists,
|
||||
buy,
|
||||
verify,
|
||||
|
||||
21
apis/interfaces/team.js
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
/**
|
||||
* Web唐明明
|
||||
* 匆匆数载恍如梦,岁月迢迢华发增。
|
||||
* 碌碌无为枉半生,一朝惊醒万事空。
|
||||
* moduleName: 团队
|
||||
*/
|
||||
|
||||
import { request } from '../index'
|
||||
|
||||
// 团队
|
||||
const relations = (data) => {
|
||||
return request({
|
||||
url: 'user/relations',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
relations
|
||||
}
|
||||
@@ -14,7 +14,22 @@ const info = () =>{
|
||||
})
|
||||
}
|
||||
|
||||
// 导出助记词
|
||||
const chainSeed = () => {
|
||||
return request({
|
||||
url: 'chain/safe/seed'
|
||||
})
|
||||
}
|
||||
|
||||
// 获取邀请码
|
||||
const invitationCode = () => {
|
||||
return request({
|
||||
url: 'user/invite'
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
info
|
||||
info,
|
||||
chainSeed,
|
||||
invitationCode
|
||||
}
|
||||
|
||||
@@ -18,14 +18,14 @@ const vip = () =>{
|
||||
// 开通会员
|
||||
const vipPay = () => {
|
||||
return request({
|
||||
url: ''
|
||||
url: 'user/identities/buyvip'
|
||||
})
|
||||
}
|
||||
|
||||
// 获取支付信息
|
||||
const payInfo = () => {
|
||||
const payInfo = (orderId) => {
|
||||
return request({
|
||||
url: ''
|
||||
url: 'user/identities/pay/' + orderId + '/wechat'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name" : "ZH-HEALTH",
|
||||
"name" : "共力生态",
|
||||
"appid" : "__UNI__DE7B0E6",
|
||||
"description" : "ZH-HEALTH,您手上的健康管理专家",
|
||||
"description" : "共力生态",
|
||||
"versionName" : "1.0.22",
|
||||
"versionCode" : 100,
|
||||
"transformPx" : false,
|
||||
@@ -78,7 +78,7 @@
|
||||
"payment" : {
|
||||
"weixin" : {
|
||||
"__platform__" : [ "android" ],
|
||||
"appid" : "wx74b2fcb478707364",
|
||||
"appid" : "wxcb85e48d044bc5ee",
|
||||
"UniversalLinks" : ""
|
||||
},
|
||||
"alipay" : {
|
||||
@@ -87,14 +87,12 @@
|
||||
},
|
||||
"share" : {
|
||||
"weixin" : {
|
||||
"appid" : "wx74b2fcb478707364",
|
||||
"appid" : "wxcb85e48d044bc5ee",
|
||||
"UniversalLinks" : ""
|
||||
}
|
||||
},
|
||||
"ad" : {},
|
||||
"push" : {
|
||||
"unipush" : {}
|
||||
},
|
||||
"push" : {},
|
||||
"geolocation" : {
|
||||
"system" : {
|
||||
"__platform__" : [ "android" ]
|
||||
|
||||
765
pages.json
@@ -1,363 +1,408 @@
|
||||
{
|
||||
"pages" : [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "pages/auth/auth",
|
||||
"name": "Auth",
|
||||
"style": {
|
||||
"navigationBarTitleText": "登录",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/auth/role",
|
||||
"name": "AuthRole",
|
||||
"style": {
|
||||
"navigationBarTitleText": "角色创建",
|
||||
"navigationBarBackgroundColor": "#FFF",
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"buttons": [{
|
||||
"text": "退出登录",
|
||||
"fontSize": "14",
|
||||
"width": "80px",
|
||||
"color": "#34CE98"
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
"path": "pages/life/life",
|
||||
"name": "Life",
|
||||
"style": {
|
||||
"navigationBarTitleText": "共力人生",
|
||||
"navigationStyle": "custom",
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"type": "transparent"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/store/index",
|
||||
"name": "Store",
|
||||
"style": {
|
||||
"navigationBarTitleText": "DT商城",
|
||||
"enablePullDownRefresh": true,
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"backgroundColor": "#FFFFFF",
|
||||
"buttons": [{
|
||||
"float": "right",
|
||||
"text": "\ue603",
|
||||
"fontSrc": "/static/iconfont.ttf",
|
||||
"color": "#000",
|
||||
"fontSize": "20px"
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/user/index",
|
||||
"name": "User",
|
||||
"style": {
|
||||
"navigationBarTitleText": "我的",
|
||||
"navigationBarTextStyle": "white",
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"backgroundColor": "#34CE98",
|
||||
"type": "transparent"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/setting/setting",
|
||||
"name": "Setting",
|
||||
"style": {
|
||||
"navigationBarTitleText": "设置中心",
|
||||
"navigationBarBackgroundColor": "#34CE98",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "pages/store/goods",
|
||||
"name": "StoreGoods",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "详情",
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"backgroundColor": "#FFFFFF",
|
||||
"type": "transparent"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/store/buy",
|
||||
"name": "StoreBuy",
|
||||
"style": {
|
||||
"navigationBarTitleText": "确认订单",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/auth/auth",
|
||||
"name" : "Auth",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "登录",
|
||||
"navigationStyle" : "custom"
|
||||
"path": "pages/order/index",
|
||||
"name": "Order",
|
||||
"style": {
|
||||
"navigationBarTitleText": "我的订单",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/auth/role",
|
||||
"name" : "AuthRole",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "角色创建",
|
||||
"navigationBarBackgroundColor" : "#FFF",
|
||||
"app-plus" : {
|
||||
"titleNView" : {
|
||||
"buttons" : [
|
||||
{
|
||||
"text" : "退出登录",
|
||||
"fontSize" : "14",
|
||||
"width" : "80px",
|
||||
"color" : "#34CE98"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/life/life",
|
||||
"name" : "Life",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "共力人生",
|
||||
"navigationStyle" : "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/index",
|
||||
"name" : "Store",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "DT商城",
|
||||
"enablePullDownRefresh" : true,
|
||||
"app-plus" : {
|
||||
"titleNView" : {
|
||||
"backgroundColor" : "#FFFFFF",
|
||||
"buttons" : [
|
||||
{
|
||||
"float" : "right",
|
||||
"text" : "\ue603",
|
||||
"fontSrc" : "/static/iconfont.ttf",
|
||||
"color" : "#000",
|
||||
"fontSize" : "20px"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/user/index",
|
||||
"name" : "User",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "我的",
|
||||
"navigationStyle" : "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/setting/setting",
|
||||
"name" : "Setting",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "设置中心",
|
||||
"navigationBarBackgroundColor" : "#34CE98",
|
||||
"navigationBarTextStyle" : "white"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/goods",
|
||||
"name" : "StoreGoods",
|
||||
"style" : {
|
||||
"navigationStyle" : "custom",
|
||||
"navigationBarTitleText" : "详情",
|
||||
"app-plus" : {
|
||||
"titleNView" : {
|
||||
"backgroundColor" : "#FFFFFF",
|
||||
"type" : "transparent"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/buy",
|
||||
"name" : "StoreBuy",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "确认订单",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/order/index",
|
||||
"name" : "Order",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "我的订单",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/order/details",
|
||||
"name" : "OrderDetails",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "订单详情",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/order/logistics",
|
||||
"name" : "OrderLogistics",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "物流信息",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/address/index",
|
||||
"name" : "Address",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "收货地址"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/address/edit",
|
||||
"name" : "AddressEdit",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "编辑",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/pay/pay",
|
||||
"name" : "Pay",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "收银台",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/list",
|
||||
"name" : "StoreList",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "商品",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF",
|
||||
"enablePullDownRefresh" : true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/meals",
|
||||
"name" : "StoreMeals",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "套餐",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF",
|
||||
"enablePullDownRefresh" : true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/search",
|
||||
"name" : "StoreSearch",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "搜索",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/list",
|
||||
"name" : "OrderRefund",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "退款/售后",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF",
|
||||
"enablePullDownRefresh" : true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/detail",
|
||||
"name" : "OrderRefundDetail",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "退货退款详情",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/aftersale",
|
||||
"name" : "AfterSale",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : " 选择售后类型",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/refund_history",
|
||||
"name" : "RefundHistory",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "售后历史",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/deliver_form",
|
||||
"name" : "DeliverForm",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "填写物流信息",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/refund_or_exchange_apply",
|
||||
"name" : "RefundOrExchangeApply",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "退换货申请",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/exchange",
|
||||
"name" : "Exchange",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "换货",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/refund/refund_money",
|
||||
"name" : "RefundMoney",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "申请退款",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/account/integral",
|
||||
"name" : "AccountIntegral",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "共力值",
|
||||
"navigationBarBackgroundColor" : "#34CE98",
|
||||
"navigationBarTextStyle" : "white"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/account/dt",
|
||||
"name" : "AccountDt",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "DT积分",
|
||||
"navigationBarBackgroundColor" : "#34CE98",
|
||||
"backgroundColorTop" : "#34CE98",
|
||||
"navigationBarTextStyle" : "white",
|
||||
"app-plus" : {
|
||||
"titleNView" : {
|
||||
"buttons" : [
|
||||
{
|
||||
"text" : "充值",
|
||||
"width" : "60",
|
||||
"fontSize" : "14"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/account/recharge",
|
||||
"name" : "AccountRecharge",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "DT积分充值",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF",
|
||||
"app-plus" : {
|
||||
"titleNView" : {
|
||||
"buttons" : [
|
||||
{
|
||||
"text" : "充值记录",
|
||||
"width" : "80",
|
||||
"fontSize" : "14"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/vip/vip",
|
||||
"name" : "Vip",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "共力会员",
|
||||
"navigationBarBackgroundColor" : "#242430",
|
||||
"navigationBarTextStyle" : "white",
|
||||
"backgroundColorTop" : "#242430"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/vip/agreement",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "共力会员协议"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/team/index",
|
||||
"name" : "Team",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "共力团队",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/shop/shopDetail",
|
||||
"name" : "ShopDetail",
|
||||
"style" : {
|
||||
"navigationStyle" : "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/store/shop/shopList",
|
||||
"name" : "ShopList",
|
||||
"style" : {
|
||||
"navigationBarTitleText" : "更多店铺",
|
||||
"navigationBarBackgroundColor" : "#FFFFFF",
|
||||
"enablePullDownRefresh" : true
|
||||
}
|
||||
}
|
||||
],
|
||||
"tabBar" : {
|
||||
"borderStyle" : "white",
|
||||
"selectedColor" : "#34CE98",
|
||||
"list" : [
|
||||
{
|
||||
"iconPath" : "static/tabBar/tabBar_02.png",
|
||||
"selectedIconPath" : "static/tabBar/tabBar_show_02.png",
|
||||
"pagePath" : "pages/life/life",
|
||||
"text" : "共力人生"
|
||||
},
|
||||
{
|
||||
"iconPath" : "static/tabBar/tabBar_02.png",
|
||||
"selectedIconPath" : "static/tabBar/tabBar_show_02.png",
|
||||
"pagePath" : "pages/store/index",
|
||||
"text" : "DT商城"
|
||||
},
|
||||
{
|
||||
"iconPath" : "static/tabBar/tabBar_03.png",
|
||||
"selectedIconPath" : "static/tabBar/tabBar_show_03.png",
|
||||
"pagePath" : "pages/user/index",
|
||||
"text" : "我的"
|
||||
}
|
||||
]
|
||||
},
|
||||
"globalStyle" : {
|
||||
"navigationBarTextStyle" : "black",
|
||||
"navigationBarTitleText" : "ZH健康",
|
||||
"navigationBarBackgroundColor" : "#F3F6FB",
|
||||
"backgroundColorTop" : "#F3F6FB",
|
||||
"backgroundColorBottom" : "#F3F6FB"
|
||||
},
|
||||
"easycom" : {
|
||||
"^u-(.*)" : "uview-ui/components/u-$1/u-$1.vue"
|
||||
}
|
||||
},{
|
||||
"path": "pages/order/logistics",
|
||||
"name": "OrderLogistics",
|
||||
"style": {
|
||||
"navigationBarTitleText": "物流进度",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/order/details",
|
||||
"name": "OrderDetails",
|
||||
"style": {
|
||||
"navigationBarTitleText": "订单详情",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/address/index",
|
||||
"name": "Address",
|
||||
"style": {
|
||||
"navigationBarTitleText": "收货地址"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/address/edit",
|
||||
"name": "AddressEdit",
|
||||
"style": {
|
||||
"navigationBarTitleText": "编辑",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/pay/pay",
|
||||
"name": "Pay",
|
||||
"style": {
|
||||
"navigationBarTitleText": "收银台",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/store/list",
|
||||
"name": "StoreList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "商品",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/store/meals",
|
||||
"name": "StoreMeals",
|
||||
"style": {
|
||||
"navigationBarTitleText": "套餐",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/store/search",
|
||||
"name": "StoreSearch",
|
||||
"style": {
|
||||
"navigationBarTitleText": "搜索",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/list",
|
||||
"name": "OrderRefund",
|
||||
"style": {
|
||||
"navigationBarTitleText": "退换货",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/refund/exchange",
|
||||
"name": "Exchange",
|
||||
"style": {
|
||||
"navigationBarTitleText": "换货",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "pages/refund/detail",
|
||||
"name": "OrderRefundDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "退货退款详情",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/aftersale",
|
||||
"name": "AfterSale",
|
||||
"style": {
|
||||
"navigationBarTitleText": " 选择售后类型",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/refund_history",
|
||||
"name": "RefundHistory",
|
||||
"style": {
|
||||
"navigationBarTitleText": "售后历史",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/deliver_form",
|
||||
"name": "DeliverForm",
|
||||
"style": {
|
||||
"navigationBarTitleText": "填写物流信息",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/refund_or_exchange_apply",
|
||||
"name": "RefundOrExchangeApply",
|
||||
"style": {
|
||||
"navigationBarTitleText": "退换货申请",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/refund_money",
|
||||
"name": "RefundMoney",
|
||||
"style": {
|
||||
"navigationBarTitleText": "申请退款",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/account/integral",
|
||||
"name": "AccountIntegral",
|
||||
"style": {
|
||||
"navigationBarTitleText": "共力值",
|
||||
"navigationBarBackgroundColor": "#34CE98",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/dt",
|
||||
"name": "AccountDt",
|
||||
"style": {
|
||||
"navigationBarTitleText": "DT积分",
|
||||
"navigationBarBackgroundColor": "#34CE98",
|
||||
"backgroundColorTop": "#34CE98",
|
||||
"navigationBarTextStyle": "white",
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"buttons": [{
|
||||
"text": "充值",
|
||||
"width": "60",
|
||||
"fontSize": "14"
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/recharge",
|
||||
"name": "AccountRecharge",
|
||||
"style": {
|
||||
"navigationBarTitleText": "充值",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"app-plus": {
|
||||
"titleNView": {
|
||||
"buttons": [{
|
||||
"text": "充值记录",
|
||||
"width": "80",
|
||||
"fontSize": "14"
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
"path": "pages/vip/vip",
|
||||
"name": "Vip",
|
||||
"style": {
|
||||
"navigationBarTitleText": "共力会员",
|
||||
"navigationBarBackgroundColor": "#242430",
|
||||
"navigationBarTextStyle": "white",
|
||||
"backgroundColorTop": "#242430"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/vip/agreement",
|
||||
"style": {
|
||||
"navigationBarTitleText": "共力会员协议"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/team/index",
|
||||
"name": "Team",
|
||||
"style": {
|
||||
"navigationBarTitleText": "共力团队"
|
||||
}
|
||||
|
||||
},
|
||||
{
|
||||
"path": "pages/store/shop/shopDetail",
|
||||
"name": "ShopDetail",
|
||||
"style": {
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/store/shop/shopList",
|
||||
"name": "ShopList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "店铺",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/log",
|
||||
"name": "AccountLog",
|
||||
"style": {
|
||||
"navigationBarTitleText": "充值记录",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/transfer",
|
||||
"name": "AccountTransfer",
|
||||
"style": {
|
||||
"navigationBarTitleText": "转账",
|
||||
"navigationBarBackgroundColor": "#F3F6FB"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/resetPassword",
|
||||
"name": "AccountResetPassword",
|
||||
"style": {
|
||||
"navigationBarTitleText": "钱包密码",
|
||||
"navigationBarBackgroundColor": "#F3F6FB"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/results",
|
||||
"name": "Accountresults",
|
||||
"style": {
|
||||
"navigationBarTitleText": "转账结果",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/account/code",
|
||||
"name": "AccountCode",
|
||||
"style": {
|
||||
"navigationBarTitleText": "收款码",
|
||||
"navigationBarBackgroundColor": "#34CE98",
|
||||
"backgroundColorTop": "#34CE98",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/invitation/invitation",
|
||||
"name": "Invitation",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"disableScroll": true
|
||||
}
|
||||
}, {
|
||||
"path": "pages/life/capacity",
|
||||
"name": "Capacity",
|
||||
"style": {
|
||||
"navigationBarTitleText": "-"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tabBar": {
|
||||
"borderStyle": "white",
|
||||
"selectedColor": "#34CE98",
|
||||
"list": [{
|
||||
"iconPath": "static/tabBar/tabBar_02.png",
|
||||
"selectedIconPath": "static/tabBar/tabBar_show_02.png",
|
||||
"pagePath": "pages/life/life",
|
||||
"text": "共力人生"
|
||||
}, {
|
||||
"iconPath": "static/tabBar/tabBar_02.png",
|
||||
"selectedIconPath": "static/tabBar/tabBar_show_02.png",
|
||||
"pagePath": "pages/store/index",
|
||||
"text": "DT商城"
|
||||
}, {
|
||||
"iconPath": "static/tabBar/tabBar_03.png",
|
||||
"selectedIconPath": "static/tabBar/tabBar_show_03.png",
|
||||
"pagePath": "pages/user/index",
|
||||
"text": "我的"
|
||||
}]
|
||||
},
|
||||
"globalStyle": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarTitleText": "ZH健康",
|
||||
"navigationBarBackgroundColor": "#F3F6FB",
|
||||
"backgroundColorTop": "#F3F6FB",
|
||||
"backgroundColorBottom": "#F3F6FB"
|
||||
},
|
||||
"easycom": {
|
||||
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
|
||||
},
|
||||
"condition": { //模式配置,仅开发期间生效
|
||||
"current": 0 //当前激活的模式(list 的索引项)
|
||||
}
|
||||
}
|
||||
|
||||
124
pages/account/code.vue
Normal file
@@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<view class="vertical code">
|
||||
<view class="vertical code-content">
|
||||
<view class="sub-title">扫码转入DT积分</view>
|
||||
<view class="code-img">
|
||||
<image :src="code" mode="widthFix" />
|
||||
</view>
|
||||
<view class="hr"></view>
|
||||
<view class="sub-title">钱包地址</view>
|
||||
<view class="hash">{{address || '-'}}</view>
|
||||
<view class="buttons">
|
||||
<button class="item greed" type="default" @click="copyAddress">复制</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="footer">共力生态</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { code } from '@/apis/interfaces/account'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
address: '',
|
||||
code: ''
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
code().then(res=>{
|
||||
this.code = res.image
|
||||
this.address = res.address
|
||||
}).catch(err=>{
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err.message
|
||||
})
|
||||
})
|
||||
},
|
||||
methods:{
|
||||
copyAddress(){
|
||||
uni.setClipboardData({
|
||||
data: this.address
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.code{
|
||||
height: 100vh;
|
||||
background:linear-gradient(to bottom, $main-color, #22ab98);
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
box-sizing: border-box;
|
||||
// 收款码
|
||||
.code-content{
|
||||
text-align: center;
|
||||
background: white;
|
||||
margin: 0 8vw;
|
||||
border-radius: $radius;
|
||||
padding: $padding * 2;
|
||||
height: 70vh;
|
||||
box-shadow: 0 0 6rpx 6rpx rgba($color: #000000, $alpha: .02);
|
||||
box-sizing: border-box;
|
||||
.sub-title{
|
||||
font-size: $title-size;
|
||||
}
|
||||
.code-img{
|
||||
width: 20vh;
|
||||
height: 20vh;
|
||||
margin: $margin * 3 0 $margin * 2;
|
||||
display: inline-block;
|
||||
background-image: url(../../static/background/wallet-code-background.png);
|
||||
padding: $padding;
|
||||
box-sizing: border-box;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
image{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.hr{
|
||||
height: 1rpx;
|
||||
background: $border-color;
|
||||
margin: $margin * 2 0;
|
||||
}
|
||||
.hash{
|
||||
word-wrap: break-word;
|
||||
font-size: 28rpx;
|
||||
padding: $padding 0;
|
||||
}
|
||||
.buttons{
|
||||
display: flex;
|
||||
padding-top: $padding * 2;
|
||||
.item{
|
||||
width: 40%;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 40rpx;
|
||||
font-size: $title-size;
|
||||
color: white;
|
||||
&::after{
|
||||
border: none;
|
||||
}
|
||||
&.red{
|
||||
background: $text-price;
|
||||
}
|
||||
&.greed{
|
||||
background: $main-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 底部
|
||||
.footer{
|
||||
height: 10vh;
|
||||
line-height: 10vh;
|
||||
text-align: center;
|
||||
font-size: 28rpx;
|
||||
color: rgba(255, 255, 255, .5);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,20 +1,19 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<view class="dt-header">
|
||||
<view class="title">DT积分余额</view>
|
||||
<view class="num">{{score}}</view>
|
||||
<view class="dt-header-number">
|
||||
<view class="title">DT积分余额</view>
|
||||
<view class="num">{{score}}</view>
|
||||
</view>
|
||||
<button class="transfer" size="mini" @click="onTransfer('AccountCode')">收款</button>
|
||||
<button class="transfer" size="mini" @click="onTransfer('AccountTransfer')">转账</button>
|
||||
</view>
|
||||
<block v-if="logs.length > 0">
|
||||
<view class="logs-title">账户记录</view>
|
||||
<view class="logs-item">
|
||||
<view class="logs-item-title">账户充值</view>
|
||||
<view class="logs-item-time">2022-06-07 10:10:51</view>
|
||||
<view class="logs-item-price add">+1000.0</view>
|
||||
</view>
|
||||
<view class="logs-item">
|
||||
<view class="logs-item-title">账户充值</view>
|
||||
<view class="logs-item-time">2022-06-07 10:10:51</view>
|
||||
<view class="logs-item-price remove">-1000.0</view>
|
||||
<view class="logs-item" v-for="(item,index) in logs" :key="index">
|
||||
<view class="logs-item-title">{{item.remark}}</view>
|
||||
<view class="logs-item-time">{{item.created_at}}</view>
|
||||
<view class="logs-item-price" :class="item.amount > 0 ? 'add': 'remove'">{{item.amount}}</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
@@ -50,8 +49,15 @@
|
||||
this.logs = res.lists.data
|
||||
this.page = res.lists.page
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 转账
|
||||
onTransfer(name){
|
||||
this.$Router.push({name})
|
||||
}
|
||||
},
|
||||
onNavigationBarButtonTap() {
|
||||
@@ -68,17 +74,40 @@
|
||||
background: $window-color;
|
||||
min-height: 100vh;
|
||||
.dt-header{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-direction: row;
|
||||
background: $main-color;
|
||||
padding: $padding*3 $padding $padding*2;
|
||||
.title{
|
||||
color: rgba(255, 255, 255, .9);
|
||||
font-size: 28rpx;
|
||||
align-items: center;
|
||||
.dt-header-number{
|
||||
width: calc(100% - 330rpx);
|
||||
.title{
|
||||
color: rgba(255, 255, 255, .9);
|
||||
font-size: 28rpx;
|
||||
@extend .nowrap;
|
||||
}
|
||||
.num{
|
||||
font-weight: bold;
|
||||
font-size: 60rpx;
|
||||
padding-top: 10rpx;
|
||||
color: white;
|
||||
@extend .nowrap;
|
||||
}
|
||||
}
|
||||
.num{
|
||||
.transfer[size="mini"]{
|
||||
width: 150rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 40rpx;
|
||||
line-height: 80rpx;
|
||||
background: white;
|
||||
font-size: 30rpx;
|
||||
color: $main-color;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
font-size: 60rpx;
|
||||
padding-top: 10rpx;
|
||||
color: white;
|
||||
&::after{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 账户记录
|
||||
|
||||
90
pages/account/log.vue
Normal file
@@ -0,0 +1,90 @@
|
||||
<template>
|
||||
<view class="logs">
|
||||
<block v-if="logs.length > 0">
|
||||
<view class="logs-item" v-for="(item, index) in logs" :key="index">
|
||||
<view class="logs-item-flex">
|
||||
<view class="title">充值DT积分</view>
|
||||
<view class="price">{{item.amount}}</view>
|
||||
</view>
|
||||
<view class="logs-item-flex">
|
||||
<view class="time">{{item.created_at}}</view>
|
||||
<view class="status">{{item.status_text}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view class="vertical pages-empty">
|
||||
<u-empty
|
||||
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
||||
textColor="#999"
|
||||
text="暂无充值记录"
|
||||
>
|
||||
</u-empty>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { log } from '@/apis/interfaces/account.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
logs: [],
|
||||
pages: {}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
log().then(res => {
|
||||
this.logs = res.data
|
||||
this.pages = res.pages
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
// 数据为空
|
||||
.pages-empty{
|
||||
height: 80vh;
|
||||
}
|
||||
// 记录
|
||||
.logs{
|
||||
background-color: $window-color;
|
||||
min-height: 100vh;
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
padding: 10rpx 0;
|
||||
.logs-item{
|
||||
border-radius: $radius;
|
||||
background: white;
|
||||
margin: ($margin - 10) $margin;
|
||||
padding: $padding;
|
||||
&-flex{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.title{
|
||||
font-weight: bold;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.price{
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
line-height: 40rpx;
|
||||
color: $text-price;
|
||||
}
|
||||
.time,
|
||||
.status{
|
||||
font-size: 26rpx;
|
||||
line-height: 40rpx;
|
||||
color: gray;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -15,25 +15,25 @@
|
||||
</view>
|
||||
<view class="recharge-fast">
|
||||
<view class="recharge-fast-item" @click="onRecharge(50)">
|
||||
<view class="recharge-fast-price">50<text>元</text></view>
|
||||
<view class="recharge-fast-numb">50<text>DT积分</text></view>
|
||||
</view>
|
||||
<view class="recharge-fast-item" @click="onRecharge(100)">
|
||||
<view class="recharge-fast-price">100<text>元</text></view>
|
||||
<view class="recharge-fast-numb">100<text>DT积分</text></view>
|
||||
</view>
|
||||
<view class="recharge-fast-item" @click="onRecharge(200)">
|
||||
<view class="recharge-fast-item" @click="onRecharge(100)">
|
||||
<view class="recharge-fast-price">200<text>元</text></view>
|
||||
<view class="recharge-fast-numb">200<text>DT积分</text></view>
|
||||
</view>
|
||||
<view class="recharge-fast-item" @click="onRecharge(500)">
|
||||
<view class="recharge-fast-item" @click="onRecharge(200)">
|
||||
<view class="recharge-fast-price">500<text>元</text></view>
|
||||
<view class="recharge-fast-numb">500<text>DT积分</text></view>
|
||||
</view>
|
||||
<view class="recharge-fast-item" @click="onRecharge(1000)">
|
||||
<view class="recharge-fast-item" @click="onRecharge(500)">
|
||||
<view class="recharge-fast-price">1000<text>元</text></view>
|
||||
<view class="recharge-fast-numb">1000<text>DT积分</text></view>
|
||||
</view>
|
||||
<view class="recharge-fast-item" @click="onRecharge(1000)">
|
||||
<view class="recharge-fast-price">3000<text>元</text></view>
|
||||
<view class="recharge-fast-numb">3000<text>DT积分</text></view>
|
||||
</view>
|
||||
<view class="recharge-fast-item" @click="onRecharge(5000)">
|
||||
<view class="recharge-fast-price">5000<text>元</text></view>
|
||||
<view class="recharge-fast-numb">5000<text>DT积分</text></view>
|
||||
@@ -48,7 +48,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { recharge } from "@/apis/interfaces/account"
|
||||
import { recharge, payment } from "@/apis/interfaces/account"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -68,21 +68,42 @@
|
||||
// 充值
|
||||
onRecharge(value){
|
||||
uni.showLoading({
|
||||
title: '加载中'
|
||||
title: '提交订单'
|
||||
})
|
||||
recharge({
|
||||
amount: typeof(value) === 'number' ? value: this.priceValue
|
||||
}).then(res => {
|
||||
console.log(res)
|
||||
if(res.order_id){
|
||||
uni.showLoading({
|
||||
title: '获取支付信息'
|
||||
})
|
||||
this.getPayInfo(res.order_id)
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 获取充值信息
|
||||
getPayInfo(order_id){
|
||||
payment({order_id}).then(res => {
|
||||
uni.requestPayment({
|
||||
provider: 'wxpay',
|
||||
orderInfo: res,
|
||||
orderInfo: JSON.parse(res),
|
||||
success: res => {
|
||||
console.log(res)
|
||||
uni.redirectTo({
|
||||
url: './results?type=recharge'
|
||||
})
|
||||
},
|
||||
fail(err) {
|
||||
let showToast = err.errMsg
|
||||
if(err.errMsg === 'requestPayment:fail [payment微信:-2]User canceled'){
|
||||
showToast = '充值被取消'
|
||||
}
|
||||
uni.showToast({
|
||||
title: err.errMsg,
|
||||
title: showToast,
|
||||
icon : 'none'
|
||||
})
|
||||
}
|
||||
@@ -96,7 +117,7 @@
|
||||
}
|
||||
},
|
||||
onNavigationBarButtonTap() {
|
||||
console.log('充值记录')
|
||||
this.$Router.push({name: 'AccountLog'})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
203
pages/account/resetPassword.vue
Normal file
@@ -0,0 +1,203 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- 设置支付密码 -->
|
||||
<view class="password">
|
||||
<view class="prompt">
|
||||
<view class="prompt-code">验证码已发送至{{phone}} <button size="mini" :disabled="getCodeState" @click="getCode">{{sendCode}}</button></view>
|
||||
<view>请设置6位数字密码。建议不要使用连续的数字。</view>
|
||||
</view>
|
||||
<view class="group">
|
||||
<view class="inputs">
|
||||
<label>设密码</label>
|
||||
<input type="number" v-model="password" maxlength="6" password placeholder="请设置支付密码" />
|
||||
</view>
|
||||
<view class="inputs">
|
||||
<label>确认密码</label>
|
||||
<input type="number" v-model="verify" maxlength="6" password placeholder="请确认支付密码" />
|
||||
</view>
|
||||
<view class="inputs">
|
||||
<label>验证码</label>
|
||||
<input type="number" v-model="code" maxlength="4" placeholder="请输入验证码" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 按钮 -->
|
||||
<view class="buttons">
|
||||
<button type="default" form-type="submit" @click="createWallet">确认</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { setpassword, getSms } from '@/apis/interfaces/account'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
sendCode : '',
|
||||
getCodeState: false,
|
||||
phone : '',
|
||||
code : '',
|
||||
password : '',
|
||||
verify : ''
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.phone = this.$Route.query.phone
|
||||
this.getCode()
|
||||
},
|
||||
methods: {
|
||||
// 获取验证码
|
||||
getCode(){
|
||||
let outTime;
|
||||
let smsTime = 60;
|
||||
getSms().then(res => {
|
||||
uni.showToast({
|
||||
title: res,
|
||||
icon: "none",
|
||||
});
|
||||
this.getCodeState = true;
|
||||
this.sendCode = smsTime + 's后重新获取';
|
||||
outTime = setInterval(() => {
|
||||
if (smsTime <= 1) {
|
||||
this.getCodeState = false;
|
||||
this.sendCode = '重新获取';
|
||||
clearInterval(outTime);
|
||||
return
|
||||
}
|
||||
this.sendCode = smsTime + 's后重新获取';
|
||||
smsTime -= 1;
|
||||
}, 1000);
|
||||
}).catch((err) => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon: "none",
|
||||
});
|
||||
});
|
||||
},
|
||||
// 激活钱包
|
||||
createWallet() {
|
||||
if (this.password === '' || this.verify === '') {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '请设置支付密码'
|
||||
})
|
||||
return
|
||||
}
|
||||
if (this.password !== this.verify) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '两次输入密码不一致'
|
||||
})
|
||||
return
|
||||
}
|
||||
setpassword({
|
||||
password: this.password,
|
||||
password_confirmation: this.verify,
|
||||
code: this.code
|
||||
}).then(res => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '支付密码设置成功',
|
||||
showCancel:false,
|
||||
success: res=> {
|
||||
uni.navigateBack()
|
||||
}
|
||||
})
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err.message
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.content{
|
||||
background: $window-color;
|
||||
min-height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
// 副标题
|
||||
.sub-title {
|
||||
color: $text-gray;
|
||||
text-align: center;
|
||||
margin: $margin * 2 $margin;
|
||||
font-size: $title-size-m;
|
||||
}
|
||||
// 设置密码
|
||||
.password {
|
||||
padding: 0 $padding;
|
||||
|
||||
.prompt {
|
||||
margin-top: $margin * 2;
|
||||
font-size: $title-size-m;
|
||||
color: gray;
|
||||
text-align: center;
|
||||
&-code{
|
||||
line-height: 50rpx;
|
||||
button[size="mini"]{
|
||||
vertical-align: top;
|
||||
margin-left: 20rpx;
|
||||
font-size: $title-size-m;
|
||||
background: transparent;
|
||||
color: $main-color;
|
||||
height: 50rpx;
|
||||
line-height: 50rpx;
|
||||
width: auto;
|
||||
padding: 0;
|
||||
&::after{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.group {
|
||||
margin-top: $margin;
|
||||
border-radius: $radius-m;
|
||||
box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02);
|
||||
background-color: white;
|
||||
|
||||
.inputs {
|
||||
padding: $padding $padding + 10;
|
||||
border-bottom: solid 1rpx $border-color;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
label {
|
||||
color: $text-gray;
|
||||
font-size: $title-size-m;
|
||||
}
|
||||
|
||||
input {
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
font-size: $title-size;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 按钮
|
||||
.buttons {
|
||||
padding: $padding*2 $padding;
|
||||
button {
|
||||
border-radius: 45rpx;
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
background-color: $main-color;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: $title-size;
|
||||
&::after{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
90
pages/account/results.vue
Normal file
@@ -0,0 +1,90 @@
|
||||
<template>
|
||||
<view>
|
||||
<view class="vertical results">
|
||||
<uni-icons type="checkbox-filled" size="88" color="#34CE98"></uni-icons>
|
||||
<view class="title">{{type !== 'recharge' ? '转账交易已提交' : '充值信息已提交'}}</view>
|
||||
<view class="sub-title">预计10秒内到账,{{type !== 'recharge' ? '可在DT积分账户交易记录中查询,以实际到账时间为准' : '可在DT积分账户交易记录中查询,如充值失败充值金额原路退还'}}</view>
|
||||
<view class="hash" v-if="type !== 'recharge'">
|
||||
<view class="hash-title">交易哈希</view>
|
||||
<view class="hash-text">{{hash}}</view>
|
||||
</view>
|
||||
<button class="results-button" type="default" @click="navBack">返回</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
type: 'recharge',
|
||||
hash: ''
|
||||
};
|
||||
},
|
||||
onLoad(e){
|
||||
this.type = e.type
|
||||
if(e.type === 'recharge'){
|
||||
uni.setNavigationBarTitle({
|
||||
title: '充值结果'
|
||||
})
|
||||
}
|
||||
if(e.hash){
|
||||
this.hash = e.hash
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
navBack(){
|
||||
uni.navigateBack()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.results{
|
||||
height: 100vh;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
padding-left: $padding * 3;
|
||||
padding-right: $padding * 3;
|
||||
padding-bottom: 20vh;
|
||||
.title{
|
||||
font-size: $title-size + 8;
|
||||
color: $text-color;
|
||||
font-weight: bold;
|
||||
line-height: 80rpx;
|
||||
padding: $padding 0;
|
||||
}
|
||||
.sub-title{
|
||||
color: $text-gray;
|
||||
line-height: 40rpx;
|
||||
}
|
||||
.hash{
|
||||
background-color: white;
|
||||
padding: $padding * 2;
|
||||
border-radius: $radius-lg;
|
||||
margin-top: $margin * 2;
|
||||
font-size: $title-size;
|
||||
color: $text-color;
|
||||
.hash-title{
|
||||
padding-bottom: $padding;
|
||||
}
|
||||
.hash-text{
|
||||
word-break:break-all;
|
||||
}
|
||||
}
|
||||
.results-button{
|
||||
margin-top: $margin * 3;
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
border-radius: 45rpx;
|
||||
background-color: $main-color;
|
||||
color: white;
|
||||
font-size: $title-size;
|
||||
font-weight: bold;
|
||||
&::after{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
227
pages/account/transfer.vue
Normal file
@@ -0,0 +1,227 @@
|
||||
<template>
|
||||
<view class="transfer">
|
||||
<!-- 账户余额 -->
|
||||
<view class="transfer-block">
|
||||
<view class="unit">DT积分</view>
|
||||
<view class="transfer-flex">
|
||||
<view class="item ellipsis">
|
||||
<label>余额</label>{{balance || '0.00'}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="sub-title">
|
||||
<text>请认真确认地址及数量,地址错误无法找回</text>
|
||||
</view>
|
||||
<!-- 转账信息 -->
|
||||
<view class="password">
|
||||
<view class="group">
|
||||
<view class="inputs input-scan">
|
||||
<label>接收地址</label>
|
||||
<input type="text" placeholder="请输入接收地址" v-model="address" />
|
||||
<view class="input-scan-icon" @click="scanCode">
|
||||
<uni-icons type="scan" size="22" color="#34CE98"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<view class="inputs">
|
||||
<label>转账数量</label>
|
||||
<input type="number" placeholder="请输入转账数量" v-model="number" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="group">
|
||||
<view class="inputs">
|
||||
<label>交易密码</label>
|
||||
<input type="password" placeholder="请输入安全密码" v-model="password" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 按钮 -->
|
||||
<view class="buttons">
|
||||
<button type="default" @click="submitTransfer">转账</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { transfer, submitTransfer } from '@/apis/interfaces/account'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
balance : '0.00',
|
||||
address : '',
|
||||
number : '',
|
||||
password : ''
|
||||
}
|
||||
},
|
||||
onLoad(e){
|
||||
if(e.hashAddress) this.address = e.hashAddress
|
||||
},
|
||||
onShow() {
|
||||
uni.showLoading({
|
||||
title: '获取账户信息',
|
||||
})
|
||||
transfer().then(res => {
|
||||
let phone = res.mobile
|
||||
this.balance = res.balance
|
||||
if(!res.has_transfer_password){
|
||||
uni.showModal({
|
||||
title : '提示',
|
||||
content : '暂未设置账户密码,无法发起转账,请设置后重试',
|
||||
cancelText : '稍后设置',
|
||||
confirmText : '立即设置',
|
||||
success : modalRes => {
|
||||
if(modalRes.confirm){
|
||||
this.$Router.push({name: 'AccountResetPassword', params: {phone}})
|
||||
return
|
||||
}
|
||||
this.$Router.back()
|
||||
}
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
// 转账
|
||||
submitTransfer(){
|
||||
if(this.address === '' || this.number === '' || this.password === ''){
|
||||
let messageText
|
||||
if(this.address === '') messageText = '请输入接收地址'
|
||||
else if(this.number === '') messageText = '请输入转账数量'
|
||||
else if(this.password === '') messageText = '请输入支付密码'
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: messageText
|
||||
})
|
||||
return
|
||||
}
|
||||
// 提交转账信息
|
||||
submitTransfer({
|
||||
addr: this.address,
|
||||
amount: this.number,
|
||||
transfer_password: this.password
|
||||
}).then(res => {
|
||||
uni.redirectTo({
|
||||
url: './results?hash=' + res.hash + '&number=' + this.amount
|
||||
})
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err.message
|
||||
})
|
||||
})
|
||||
},
|
||||
// 扫码
|
||||
scanCode(){
|
||||
uni.scanCode({
|
||||
scanType: ['qrCode'],
|
||||
success: res=> {
|
||||
this.address = res.result
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.transfer{
|
||||
background: $window-color;
|
||||
min-height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
// 账户余额
|
||||
.transfer-block{
|
||||
background-color: window-color;
|
||||
margin: $margin;
|
||||
border-radius: $radius;
|
||||
box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02);
|
||||
background-color: white;
|
||||
padding: $padding $padding + 10;
|
||||
.unit{
|
||||
font-weight: bold;
|
||||
font-size: $title-size + 10;
|
||||
line-height: 90rpx;
|
||||
color: $text-color;
|
||||
}
|
||||
.transfer-flex{
|
||||
display: flex;
|
||||
padding: $padding 0;
|
||||
border-top: solid 1rpx $border-color;
|
||||
.item{
|
||||
width: 100%;
|
||||
font-size: $title-size-m;
|
||||
& > label{
|
||||
color: $text-gray;
|
||||
padding-right: $padding/2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 提示信息
|
||||
.sub-title{
|
||||
color: $text-gray;
|
||||
text-align: center;
|
||||
margin: $margin*2 $margin $margin $margin;
|
||||
font-size: $title-size-m;
|
||||
}
|
||||
// 转账信息
|
||||
.password{
|
||||
padding: 0 $padding;
|
||||
.group{
|
||||
margin-top: $margin;
|
||||
border-radius: $radius;
|
||||
box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02);
|
||||
background-color: white;
|
||||
.inputs{
|
||||
padding: $padding $padding + 10;
|
||||
border-bottom: solid 1rpx $border-color;
|
||||
&:last-child{
|
||||
border-bottom: none;
|
||||
}
|
||||
label{
|
||||
color: $text-gray;
|
||||
font-size: $title-size-m;
|
||||
}
|
||||
input{
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
font-size: $title-size;
|
||||
}
|
||||
}
|
||||
.input-scan{
|
||||
position: relative;
|
||||
padding-right: ($padding*2) + 70;
|
||||
.input-scan-icon{
|
||||
position: absolute;
|
||||
bottom: $padding;
|
||||
right: $padding;
|
||||
height: 70rpx;
|
||||
width: 70rpx;
|
||||
line-height: 70rpx;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 按钮
|
||||
.buttons{
|
||||
padding: $padding*2 $padding;
|
||||
button{
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
background-color: $main-color;
|
||||
border-radius: 45rpx;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: $title-size;
|
||||
&::after{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -12,6 +12,9 @@
|
||||
<view class="auth-input auth-code">
|
||||
<input v-model="code" type="number" maxlength="4" placeholder="输入验证码">
|
||||
<button :disabled="getSms" size="mini" @click="getPhoneCode()">{{sendCode}}</button>
|
||||
</view>
|
||||
<view class="auth-input">
|
||||
<input v-model="parentId" type="number" placeholder="输入邀请码">
|
||||
</view>
|
||||
<view class="auth-button">
|
||||
<button @click="login('code')">登录</button>
|
||||
@@ -35,7 +38,8 @@
|
||||
data() {
|
||||
return {
|
||||
phone : '18245180131',
|
||||
code : '',
|
||||
code : '',
|
||||
parentId: '',
|
||||
getSms : false,
|
||||
sendCode: '获取验证码'
|
||||
};
|
||||
@@ -81,12 +85,13 @@
|
||||
title: '登录中'
|
||||
})
|
||||
smsAuth({
|
||||
mobileNo: this.phone,
|
||||
code : this.code,
|
||||
mobileNo : this.phone,
|
||||
code : this.code,
|
||||
parent_id : this.parentId
|
||||
}).then((res) => {
|
||||
this.$store.commit('setToken', res.token_type + ' ' + res.access_token);
|
||||
this.$store.commit('setIsNew', res.is_new ? 0 : 1)
|
||||
if(res.is_new){
|
||||
if(res.is_new){
|
||||
uni.setStorageSync('isnew', res.is_new ? 0 : 1)
|
||||
this.$Router.replace({name: 'AuthRole'})
|
||||
return
|
||||
}
|
||||
|
||||
193
pages/invitation/invitation.vue
Normal file
@@ -0,0 +1,193 @@
|
||||
|
||||
<template>
|
||||
<view class="invitation">
|
||||
<view class="invitation-refund">
|
||||
<view class="invitation-refund-btn" @click="onBack">
|
||||
<uni-icons type="back" color="white" size="24"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<image class="invitation-back" src="@/static/img/code_back.png" mode="aspectFill"></image>
|
||||
<view class="invitation-content">
|
||||
<view class="invitation-lay">
|
||||
<image class="invitation-code" :src="code"></image>
|
||||
<view class="invitation-text">
|
||||
<view class="invitation-text-code" @click="copyInvite"><text>{{invite}}</text>点击复制</view>
|
||||
<view class="invitation-text-sub">扫码下载共力生态App</view>
|
||||
<view class="invitation-text-sub">邀请好友增加共力分增长</view>
|
||||
</view>
|
||||
</view>
|
||||
<button class="invitation-btn" @click="onShare">分享邀请</button>
|
||||
</view>
|
||||
<!-- 分享 -->
|
||||
<uni-popup ref="popupShare" type="share" background-color="#fff">
|
||||
<uni-popup-share title="分享到" @select="select"></uni-popup-share>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { invitationCode } from '@/apis/interfaces/user.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
invite: '',
|
||||
code : '',
|
||||
};
|
||||
},
|
||||
created() {
|
||||
invitationCode().then(res => {
|
||||
this.invite = res[0].invite
|
||||
this.code = res[0].code
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
// 返回
|
||||
onBack(){
|
||||
this.$Router.back()
|
||||
},
|
||||
// 复制邀请码
|
||||
copyInvite(){
|
||||
uni.setClipboardData({
|
||||
data: this.invite,
|
||||
success() {
|
||||
uni.showToast({
|
||||
title: '邀请码已复制',
|
||||
icon : 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
// 分享
|
||||
onShare(){
|
||||
this.$refs.popupShare.open();
|
||||
},
|
||||
// 分享选项
|
||||
select(e){
|
||||
switch(e.item.name){
|
||||
case 'wxchum':
|
||||
uni.share({
|
||||
provider: 'weixin',
|
||||
scene : 'WXSceneSession',
|
||||
type : 0,
|
||||
href : 'https://www.baidu.com',
|
||||
title : '共力生态',
|
||||
summary : '共力生态 共力 共赢 共享 带你进入web3.0!',
|
||||
imageUrl: 'https://gl-ecological.oss-cn-zhangjiakou.aliyuncs.com/images/2022/06/10/e763ae96ce9d0b4407b68e66963c7cb2.jpg',
|
||||
fail(err) {
|
||||
uni.showToast({
|
||||
title: err.errMsg,
|
||||
icon : 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
break;
|
||||
case 'wxcircle':
|
||||
uni.share({
|
||||
provider: 'weixin',
|
||||
scene : 'WXSceneTimeline',
|
||||
type : 0,
|
||||
href : 'https://www.baidu.com',
|
||||
title : '共力生态 共力 共赢 共享',
|
||||
imageUrl: 'https://gl-ecological.oss-cn-zhangjiakou.aliyuncs.com/images/2022/06/10/e763ae96ce9d0b4407b68e66963c7cb2.jpg',
|
||||
fail(err) {
|
||||
uni.showToast({
|
||||
title: err.errMsg,
|
||||
icon : 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
break;
|
||||
case 'qq':
|
||||
uni.showToast({
|
||||
title: 'qq好友分享近期开放,敬请期待',
|
||||
icon : 'none'
|
||||
})
|
||||
break;
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.invitation{
|
||||
position: relative;
|
||||
background: #1c2472;
|
||||
min-height: 100vh;
|
||||
.invitation-refund{
|
||||
@extend .ios-top;
|
||||
position: absolute;
|
||||
top: 30rpx;
|
||||
left: $margin*2;
|
||||
z-index: 9;
|
||||
.invitation-refund-btn{
|
||||
border-radius: 50%;
|
||||
line-height: 58rpx;
|
||||
width: 58rpx;
|
||||
height: 58rpx;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background: rgba(0, 0, 0, .5);
|
||||
}
|
||||
}
|
||||
.invitation-back{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.invitation-content{
|
||||
padding: $padding*2;
|
||||
position: absolute;
|
||||
bottom: 5vh;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
.invitation-lay{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background: rgba(0, 0, 0, .5);
|
||||
border-radius: $radius;
|
||||
padding: $padding;
|
||||
margin-bottom: $margin;
|
||||
color: white;
|
||||
.invitation-code{
|
||||
width: 168rpx;
|
||||
height: 168rpx;
|
||||
background: white;
|
||||
}
|
||||
.invitation-text{
|
||||
width: calc(100% - 198rpx);
|
||||
.invitation-text-code{
|
||||
font-size: 26rpx;
|
||||
line-height: 50rpx;
|
||||
text{
|
||||
font-weight: bold;
|
||||
font-size: 40rpx;
|
||||
margin-right: 10rpx;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
.invitation-text-sub{
|
||||
font-size: 26rpx;
|
||||
line-height: 50rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.invitation-btn{
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
border-radius: 45rpx;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
background: linear-gradient(to top left, #2b307f, #83a8de);
|
||||
color: white;
|
||||
&::after{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
232
pages/life/capacity.vue
Normal file
@@ -0,0 +1,232 @@
|
||||
<template>
|
||||
<view class="capacity">
|
||||
<view class="capacity-title">共力分总产率/小时<text>{{baseHour}}GLF/h</text></view>
|
||||
<view class="capacity-sbutitle">总产率=角色产率+团队产率+共建产率+共力值产率</view>
|
||||
<view class="capacity-block">
|
||||
<view class="capacity-block-title">
|
||||
<view class="title">我的角色</view>
|
||||
<view class="nickname">{{nickname}}</view>
|
||||
</view>
|
||||
<view class="capacity-block-glf">{{identityText}}:{{base}}GLF/h</view>
|
||||
</view>
|
||||
<view class="capacity-block">
|
||||
<view class="capacity-block-title">
|
||||
<view class="title">成员产率({{group.effect}}/{{group.count}})<text>{{group.capacity}}GLF/h</text></view>
|
||||
<view class="more" @click="onInvitation">邀请更多好友</view>
|
||||
</view>
|
||||
<view class="capacity-block-table">
|
||||
<view class="header">
|
||||
<view class="flex-item">家族成员产率</view>
|
||||
</view>
|
||||
<view class="flex">
|
||||
<view class="flex-item">{{recommend.vip}}人在线(会员)</view>
|
||||
<view class="flex-item">{{recommend.vip_text}}</view>
|
||||
</view>
|
||||
<view class="flex">
|
||||
<view class="flex-item">{{recommend.novip}}人在线(普通用户)</view>
|
||||
<view class="flex-item">{{recommend.novip_text}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="capacity-block-table">
|
||||
<view class="header">
|
||||
<view class="flex-item">伙伴成员</view>
|
||||
</view>
|
||||
<view class="flex">
|
||||
<view class="flex-item">{{partner.vip}}人在线(会员)</view>
|
||||
<view class="flex-item">{{partner.vip_text}}</view>
|
||||
</view>
|
||||
<view class="flex">
|
||||
<view class="flex-item">{{partner.novip}}人在线(会员)</view>
|
||||
<view class="flex-item">{{partner.novip_text}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="capacity-block">
|
||||
<view class="capacity-block-title">
|
||||
<view class="title">共建产率<text>0GLF/h</text></view>
|
||||
<view class="subtitle">-/-</view>
|
||||
</view>
|
||||
<view class="capacity-block-text">产品当前设置共建者每日可以通过看广告获得共建值(暂未开放,敬请期待)</view>
|
||||
</view>
|
||||
<view class="capacity-block">
|
||||
<view class="capacity-block-title">
|
||||
<view class="title">共力值产率<text>0GLF/h</text></view>
|
||||
<view class="subtitle">-/-</view>
|
||||
</view>
|
||||
<view class="capacity-block-text">根据正常用户的使用在平台的使用习惯,购物等行为产生对应共力值(暂未开放,敬请期待)</view>
|
||||
</view>
|
||||
<view class="capacity-hint">
|
||||
PS产品设置每100个共力值或共建值可以加速5%的角色产率;
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { glz } from '@/apis/interfaces/life.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
identityText: '普通用户',
|
||||
baseHour : 0,
|
||||
base : 0,
|
||||
group : {
|
||||
count : 0,
|
||||
effect : 0,
|
||||
capacity: 0,
|
||||
},
|
||||
nickname : '',
|
||||
recommend : {
|
||||
vip : '-',
|
||||
vip_count : '-',
|
||||
novip : '-',
|
||||
novip_count : '-',
|
||||
vip_text : '-',
|
||||
novip_text : '-',
|
||||
},
|
||||
partner : {
|
||||
vip : '-',
|
||||
vip_count : '-',
|
||||
novip : '-',
|
||||
novip_count : '-',
|
||||
vip_text : '-',
|
||||
novip_text : '-',
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
glz().then(res => {
|
||||
this.nickname = res.nickname
|
||||
this.identityText = res.identity_text
|
||||
this.baseHour = res.base_hour
|
||||
this.base = res.base
|
||||
this.group = res.group
|
||||
this.recommend = res.recommend
|
||||
this.partner = res.partner
|
||||
uni.setNavigationBarTitle({
|
||||
title: res.glz + 'GLF'
|
||||
})
|
||||
uni.hideLoading()
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
onInvitation(){
|
||||
this.$Router.push({name: 'Invitation'})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.capacity{
|
||||
background: $window-color;
|
||||
min-height: 100vh;
|
||||
padding: $padding;
|
||||
box-sizing: border-box;
|
||||
&-hint{
|
||||
font-size: 26rpx;
|
||||
color: gray;
|
||||
line-height: 40rpx;
|
||||
padding: $padding 0;
|
||||
}
|
||||
&-title{
|
||||
font-size: 38rpx;
|
||||
font-weight: bold;
|
||||
line-height: 60rpx;
|
||||
text{
|
||||
margin-left: 10rpx;
|
||||
color: $main-color;
|
||||
}
|
||||
}
|
||||
&-sbutitle{
|
||||
font-size: 26rpx;
|
||||
line-height: 40rpx;
|
||||
}
|
||||
&-block{
|
||||
background: white;
|
||||
margin-top: $margin;
|
||||
border-radius: $radius;
|
||||
padding: $padding;
|
||||
&-glf{
|
||||
color: $main-color;
|
||||
font-size: 30rpx;
|
||||
}
|
||||
&-title{
|
||||
font-weight: bold;
|
||||
font-size: 34rpx;
|
||||
padding-bottom: 30rpx;
|
||||
line-height: 60rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.title{
|
||||
text{
|
||||
color: $main-color;
|
||||
font-weight: normal;
|
||||
padding-left: 10rpx;
|
||||
}
|
||||
}
|
||||
.more{
|
||||
background: $main-color;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: 28rpx;
|
||||
border-radius: 25rpx;
|
||||
line-height: 60rpx;
|
||||
width: 230rpx;
|
||||
text-align: center;
|
||||
}
|
||||
.subtitle{
|
||||
font-weight: normal;
|
||||
font-size: 24rpx;
|
||||
color: $main-color;
|
||||
}
|
||||
.nickname{
|
||||
color: gray;
|
||||
font-size: 30rpx;
|
||||
}
|
||||
}
|
||||
&-text{
|
||||
font-size: 28rpx;
|
||||
color: gray;
|
||||
line-height: 40rpx;
|
||||
}
|
||||
&-table{
|
||||
border:solid 1px $border-color;
|
||||
margin-bottom: 20rpx;
|
||||
&:last-child{
|
||||
margin-top: 0;
|
||||
}
|
||||
.header{
|
||||
background: $border-color;
|
||||
line-height: 50rpx;
|
||||
padding: 0 15rpx;
|
||||
font-size: 26rpx;
|
||||
color: gray;
|
||||
}
|
||||
.flex{
|
||||
display: flex;
|
||||
border-top: solid 1rpx $border-color;
|
||||
color: gray;
|
||||
.flex-item{
|
||||
width: 50%;
|
||||
box-sizing: border-box;
|
||||
line-height: 50rpx;
|
||||
padding: 0 15rpx;
|
||||
font-size: 24rpx;
|
||||
&:first-child{
|
||||
border-right: solid 1rpx $border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -3,11 +3,28 @@
|
||||
<!-- 账户信息 -->
|
||||
<view class="life-header">
|
||||
<view class="life-header-flex">
|
||||
<view class="life-header-item">0.00共力值</view>
|
||||
<view class="life-header-item">{{glz}}<text>GLF</text></view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 共力人生 -->
|
||||
<view class="life-cover">
|
||||
<view class="life-sign">
|
||||
<view class="life-sign-icon number-float" @click="onSign">
|
||||
<view class="life-sign-icon-text">{{isSign ? 'GLF': '签到'}}</view>
|
||||
<image class="life-sign-icon-image" :src="require('@/static/icon/sign_btn.png')" alt="签到"></image>
|
||||
</view>
|
||||
<view class="life-sign-num">0</view>
|
||||
<view class="life-sign-unit">GLF/h</view>
|
||||
<view class="life-sign-time">
|
||||
<u-count-down :time="nextSignAt" format="HH:mm:ss" @change="TimeDown">
|
||||
<view class="time">
|
||||
<text class="time__item">{{ timeData.hours > 9 ? timeData.hours: '0'+timeData.hours}}:</text>
|
||||
<text class="time__item">{{ timeData.minutes > 9 ? timeData.minutes: '0'+timeData.minutes }}:</text>
|
||||
<text class="time__item">{{ timeData.seconds > 9 ? timeData.seconds: '0'+timeData.seconds }}</text>
|
||||
</view>
|
||||
</u-count-down>
|
||||
</view>
|
||||
</view>
|
||||
<image class="life-cover-back" :src="require('@/static/life/back.png')"></image>
|
||||
<view class="life-role">
|
||||
<image class="life-role-src" :src="figurePath" mode="widthFix"/>
|
||||
@@ -55,7 +72,7 @@
|
||||
<view class="other-subtitle">{{message > 0 ? message + '条未读消息': '暂无消息'}}</view>
|
||||
<image class="other-back" src="../../static/life/icon_07.png"></image>
|
||||
</view>
|
||||
<view class="life-flex-item other">
|
||||
<view class="life-flex-item other" @click="onNav({name: 'Invitation'}, '')">
|
||||
<view class="other-title">
|
||||
<image src="../../static/life/icon_03.png" mode="widthFix"></image>
|
||||
邀请朋友
|
||||
@@ -84,7 +101,10 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { life } from '@/apis/interfaces/life.js'
|
||||
import { life, sign } from '@/apis/interfaces/life.js'
|
||||
|
||||
var account;
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -103,26 +123,79 @@
|
||||
init: 0,
|
||||
pay: 0,
|
||||
delivered: 0
|
||||
}
|
||||
},
|
||||
nextSignAt : 0,
|
||||
glz : 0,
|
||||
base_hour : 0,
|
||||
base_seconds: 0,
|
||||
timeData : {},
|
||||
isSign : false,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
// 共力人生
|
||||
life().then(res => {
|
||||
this.nickname = res.nickname
|
||||
this.figurePath = res.figure_path
|
||||
this.identity = res.identity
|
||||
this.children = res.children
|
||||
this.message = res.message
|
||||
this.order = res.order
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
onShow() {
|
||||
this.getLife()
|
||||
},
|
||||
methods: {
|
||||
// 倒计时
|
||||
TimeDown(e){
|
||||
this.timeData = e
|
||||
},
|
||||
// 共力人生
|
||||
getLife(){
|
||||
life().then(res => {
|
||||
this.glz = res.account.glz
|
||||
this.base_hour = res.account.base_hour
|
||||
this.base_seconds = res.account.base_seconds
|
||||
this.nextSignAt = res.next_sign_at * 1000
|
||||
this.nickname = res.nickname
|
||||
this.figurePath = res.figure_path
|
||||
this.identity = res.identity
|
||||
this.children = res.children
|
||||
this.message = res.message
|
||||
this.order = res.order
|
||||
this.isSign = res.is_sign
|
||||
if(res.is_sign){
|
||||
this.outTime()
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 计时器
|
||||
outTime(){
|
||||
account = setInterval(() =>{
|
||||
let newGlz = (Number(this.glz) + this.base_seconds)
|
||||
this.glz = newGlz.toFixed(4)
|
||||
}, 1000)
|
||||
},
|
||||
// 签到
|
||||
onSign(){
|
||||
|
||||
console.log(this.isSign)
|
||||
|
||||
if(this.isSign){
|
||||
this.$Router.push({name: 'Capacity'})
|
||||
return
|
||||
}
|
||||
uni.showLoading({
|
||||
title: '签到中..'
|
||||
})
|
||||
sign().then(res => {
|
||||
uni.showToast({
|
||||
title: '签到成功',
|
||||
icon : 'none'
|
||||
})
|
||||
this.getLife()
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 我的订单
|
||||
onNav(name, type){
|
||||
if(type){
|
||||
@@ -138,10 +211,31 @@
|
||||
icon : 'none'
|
||||
})
|
||||
}
|
||||
},
|
||||
onHide() {
|
||||
clearInterval(account)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 气泡漂浮 */
|
||||
.number-float{
|
||||
animation: 4s octfloat infinite;
|
||||
}
|
||||
@keyframes octfloat{
|
||||
0%{
|
||||
margin-top: 0;
|
||||
}
|
||||
50%{
|
||||
margin-top: 15rpx;
|
||||
}
|
||||
100%{
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.life{
|
||||
min-height: 100vh;
|
||||
@@ -347,7 +441,13 @@
|
||||
border-radius: 35rpx;
|
||||
padding: 0 20rpx;
|
||||
margin-right: 20rpx;
|
||||
font-size: 28rpx;
|
||||
font-size: 42rpx;
|
||||
font-weight: bold;
|
||||
text{
|
||||
font-weight: normal;
|
||||
padding-left: 5rpx;
|
||||
font-size: 70%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -357,6 +457,64 @@
|
||||
width: 100%;
|
||||
padding-top: 134%;
|
||||
overflow: hidden;
|
||||
.life-sign{
|
||||
position: absolute;
|
||||
top: 15vh;
|
||||
right: $margin * 2;
|
||||
z-index: 999;
|
||||
text-align: center;
|
||||
.life-sign-icon{
|
||||
display: inline-block;
|
||||
width: 98rpx;
|
||||
height: 98rpx;
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
.life-sign-icon-image{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 98rpx;
|
||||
height: 98rpx;
|
||||
}
|
||||
.life-sign-icon-text{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 98rpx;
|
||||
height: 98rpx;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
z-index: 1;
|
||||
font-size: 28rpx;
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
.life-sign-num{
|
||||
color: #f79824;
|
||||
font-size: 36rpx;
|
||||
line-height: 30rpx;
|
||||
height: 30rpx;
|
||||
text-shadow: 0 2rpx 2rpx rgba(0, 0, 0, .3);
|
||||
}
|
||||
.life-sign-unit{
|
||||
font-weight: bold;
|
||||
color: #f79824;
|
||||
font-size: 30rpx;
|
||||
line-height: 40rpx;
|
||||
text-shadow: 0 2rpx 2rpx rgba(0, 0, 0, .3);
|
||||
}
|
||||
.life-sign-time{
|
||||
.time{
|
||||
@include flex;
|
||||
align-items: center;
|
||||
&__item {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.life-cover-back{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
|
||||
@@ -47,12 +47,12 @@
|
||||
type: "paid",
|
||||
},
|
||||
{
|
||||
name: "待签收",
|
||||
name: "待收货",
|
||||
type: "delivered",
|
||||
},
|
||||
{
|
||||
name: "已完成",
|
||||
type: "completed",
|
||||
name: " 已签收",
|
||||
type: "signed",
|
||||
},
|
||||
],
|
||||
index: '0',
|
||||
@@ -187,7 +187,7 @@
|
||||
this.$Router.push({
|
||||
name: 'OrderLogistics',
|
||||
params: {
|
||||
orderNo
|
||||
orderNo: orderNo,
|
||||
},
|
||||
});
|
||||
break;
|
||||
@@ -259,7 +259,7 @@
|
||||
})
|
||||
break;
|
||||
case 'shopsDetail':
|
||||
this.$Router.push({ name: 'ShopDetail', params: {shopId: shopId}})
|
||||
this.$Router.push({ name: 'ShopDetail', params: {ShopId: shopId}})
|
||||
break;
|
||||
case 'goodsDetail':
|
||||
this.$Router.push({ name: 'StoreGoods', params: {id: goodsId}})
|
||||
@@ -325,4 +325,5 @@
|
||||
.pages-load {
|
||||
padding-bottom: $padding;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
}
|
||||
|
||||
.afterSales {
|
||||
background-color: #f9f9f9;
|
||||
background-color: $window-color;
|
||||
min-height: 100vh;
|
||||
|
||||
.service-content {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<!-- 订单列表 -->
|
||||
<view class="order--content" :class="[true ? 'chunk': 'broad']" v-for="(item, arrayIndex) in array"
|
||||
:key="arrayIndex">
|
||||
<view class="order--group--header" @click=" $Router.push({ name: 'ShopDetail', params: {shopId: item.shop.shop_id}})">
|
||||
<view class="order--group--header" @click=" $Router.push({ name: 'ShopDetail', params: {ShopId: item.shop.shop_id}})">
|
||||
<image class="logo" v-if="item.shop.cover != ''" :src="item.shop.cover" mode="aspectFill"></image>
|
||||
<view class="store">
|
||||
{{item.shop.name}}
|
||||
|
||||
@@ -25,12 +25,12 @@
|
||||
</view>
|
||||
|
||||
<!-- 店铺信息 -->
|
||||
<view class="shopInfo" @click="toShop(2)" v-if="goods.shop">
|
||||
<view class="shopInfo" @click="toShop(goods.shop.shop_id)" v-if="goods.shop">
|
||||
<view class="shopInfo-title-left">
|
||||
<image class="shop-logo" :src="goods.shop.cover" mode="aspectFill" />
|
||||
<view class="shop-title">
|
||||
<view class="shop-titl" >{{goods.shop.name}}</view>
|
||||
<view> 商品质量:<span class='no'>5.0</span> <text style="padding-left: 20rpx;">服务态度:<span class='no'>5.0</span></text> </view>
|
||||
<view> 店铺评分:<span class='no'>5.0</span> <text style="padding-left: 20rpx;">服务态度:<span class='no'>5.0</span></text> </view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopInfo-title-right" >全部商品 {{goods.shop.goods_count || 0}} <uni-icons type="right" color="grey"/></view>
|
||||
@@ -45,7 +45,7 @@
|
||||
</view>
|
||||
<!-- 立即购买 -->
|
||||
<view class="footer">
|
||||
<view @click="toShop(2)" class=" shop"><uni-icons type="shop" size="26" color="grey"/>店铺</view>
|
||||
<view @click="toShop(goods.shop.shop_id)" class=" shop"><uni-icons type="shop" size="26" color="grey"/>店铺</view>
|
||||
<button type="default" hover-class="none" @click="buy">立即购买</button>
|
||||
</view>
|
||||
</view>
|
||||
@@ -96,7 +96,7 @@
|
||||
this.$Router.push({
|
||||
name: 'ShopDetail',
|
||||
params: {
|
||||
shopId: id
|
||||
ShopId: id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 健康产品分类 -->
|
||||
<u-scroll-list class="classify-box" indicatorColor="#ddd" indicatorActiveColor="#34CE98">
|
||||
<view v-for="(item, index) in goodTabs" :key="index" class="classify-item" @click="$Router.push({name: 'StoreList', params: {id: item.category_id, title: item.name}})">
|
||||
@@ -24,6 +25,7 @@
|
||||
</view>
|
||||
</view>
|
||||
</u-scroll-list>
|
||||
|
||||
<!-- 每日上新 -->
|
||||
<view class="new-box">
|
||||
<view class="title">上新精选<text class="title-des"> | 精品上新新品推荐</text></view>
|
||||
@@ -43,16 +45,16 @@
|
||||
<view class="title">推荐店铺 <view class="more"><text class="title-des"> | 您身边的优质体验店</text> <text class="more-txt" @click="$Router.push({name: 'ShopList'})">更多></text></view></view>
|
||||
<view class="card-box">
|
||||
<block v-for="(item, index) in shops" :key="index">
|
||||
<view class="card-box-item" style="{'backgrond': #FFF}" v-if="index<4" @click="$Router.push({name: 'ShopDetail', params: {id: item.shop_id}})">
|
||||
<view class="card-box-item" style="{'backgrond': #FFF}" v-if="index < 4" @click="$Router.push({name: 'ShopDetail', params: {ShopId: item.shop_id}})">
|
||||
<view class="card-title">{{item.name}}</view>
|
||||
<view class="card-subtitle">距离1.5M</view>
|
||||
<view class="card-subtitle"> </view>
|
||||
<view class="card-btn">前往体验</view>
|
||||
<image class="card-cover" :src="item.cover" mode="aspectFill" />
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 推荐品类 -->
|
||||
<!-- <view class="card-box">
|
||||
<block v-for="(item, index) in meals" :key="index">
|
||||
@@ -63,8 +65,7 @@
|
||||
</view>
|
||||
</block>
|
||||
</view> -->
|
||||
|
||||
|
||||
|
||||
<!-- goods -->
|
||||
<view class="goods-box">
|
||||
<oct-goods
|
||||
@@ -98,7 +99,6 @@
|
||||
methods:{
|
||||
getMall(){
|
||||
mall().then(res => {
|
||||
console.log(res);
|
||||
this.banners = res.banners
|
||||
this.goodsArr = res.goods
|
||||
this.newGood = res.news
|
||||
@@ -188,7 +188,8 @@
|
||||
.card-subtitle{
|
||||
font-size: 20rpx;
|
||||
color: $text-gray;
|
||||
line-height: 40rpx;
|
||||
// line-height: 40rpx;
|
||||
min-height: 20rpx;
|
||||
@extend .nowrap;
|
||||
}
|
||||
.card-cover{
|
||||
|
||||
@@ -1,570 +1,377 @@
|
||||
<template>
|
||||
<view class="shopDetail">
|
||||
<view class="top">
|
||||
<view class="search" @click="search">
|
||||
<uni-icons type="left" class="back" size="30" @click="$Router.back();" />
|
||||
<view class="input">
|
||||
<uni-icons type="search" class="search-icon" color="grey" size="20" /> 请输入要搜索商品的关键词
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopInfo">
|
||||
<view class="shopInfo-title-left">
|
||||
<image class="shop-logo" src="/static/img/house_back.jpg" mode="aspectFill" />
|
||||
<view class="shop-title">
|
||||
<view class="shop-titl">三只松鼠旗舰店</view>
|
||||
<view> 商品质量:<span class='no'>5.0</span> <text style="padding-left: 20rpx;">服务态度:<span
|
||||
class='no'>5.0</span></text> </view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopInfo-title-right"> +关注 </view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
<view class="content">
|
||||
<view class="left">
|
||||
<scroll-view scroll-y="true" class="scroll-view-left">
|
||||
<view :class="['classify-item', item.category_id === category_id?'active_classify_item':'']"
|
||||
v-for="(item,index) in classify" :key="index" @click="selectClassify(item.category_id)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<view class="right">
|
||||
<scroll-view scroll-y="true" class="scroll-view-right">
|
||||
<view class="goods-item" v-for="(item,index) in goods" :key="index" @click="onGoods(item.goods_id)">
|
||||
<image :src="item.cover" mode="aspectFill" class="good-img" />
|
||||
<view class="item--content">
|
||||
<view class="title">{{item.name}}</view>
|
||||
<view class="sub_title">{{item.shop.name}}</view>
|
||||
<view class="price">{{item.price.price_min || '0'}}
|
||||
<view class="price-type">
|
||||
<text> DT积分</text>
|
||||
<text class="kucun"> 库存量:1222</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopDetail">
|
||||
<view class="top">
|
||||
<view class="search" @click="search">
|
||||
<uni-icons type="left" class="back" size="30" @click="$Router.back();" />
|
||||
<view class="input">
|
||||
<uni-icons type="search" class="search-icon" color="grey" size="20" /> 请输入要搜索商品的关键词
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopInfo">
|
||||
<view class="shopInfo-title-left">
|
||||
<image class="shop-logo" :src="logo" mode="aspectFill" />
|
||||
<view class="shop-title">
|
||||
<view class="shop-titl">{{name}}</view>
|
||||
<view>店铺评分:<span class='no'>5.0</span> 服务态度 :<span class='no'>5.0</span></view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="shopInfo-title-right"> +关注 </view> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="content">
|
||||
<view class="left">
|
||||
<scroll-view scroll-y="true" class="scroll-view-left">
|
||||
<view :class="['classify-item', item.category_id === category_id?'active_classify_item':'']"
|
||||
v-for="(item,index) in classify" :key="index" @click="selectClassify(item.category_id)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<view class="right">
|
||||
<scroll-view scroll-y="true" class="scroll-view-right">
|
||||
<block v-if="goods.length > 0">
|
||||
<view class="goods-item" v-for="(item,index) in goods" :key="index"
|
||||
@click="onGoods(item.goods_id)">
|
||||
<image :src="item.cover" mode="aspectFill" class="good-img" />
|
||||
<view class="item--content">
|
||||
<view class="title">{{item.name}}</view>
|
||||
<view class="sub_title">{{item.shop.name}}</view>
|
||||
<view class="price">{{item.price.price_min || '0'}}
|
||||
<view class="price-type">
|
||||
<text> DT积分</text>
|
||||
<text class="kucun"> 库存量:1222</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view class="vertical pages-empty">
|
||||
<u-empty icon="http://cdn.uviewui.com/uview/empty/list.png" textColor="#999" text="暂无相关商品">
|
||||
</u-empty>
|
||||
</view>
|
||||
</block>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
category_id: 1,
|
||||
classify: [{
|
||||
category_id: 1,
|
||||
name: "全部商品",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 2,
|
||||
name: "面部护理",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 3,
|
||||
name: "香水彩妆",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 4,
|
||||
name: "男装男鞋",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 5,
|
||||
name: "儿童用品",
|
||||
cover: ""
|
||||
}],
|
||||
goods: [{
|
||||
"goods_id": 70,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "一口爆浆冰皮榴莲泡泡",
|
||||
"description": "专注冰皮,苏丹王榴莲",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/11/ccd654bda2e3c95e190e941209e50c62.png",
|
||||
"tags": [],
|
||||
"original_price": 111,
|
||||
"price": {
|
||||
"show": "100",
|
||||
"score": 1,
|
||||
"price_min": 100,
|
||||
"price_max": 100
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 3253
|
||||
}, {
|
||||
"goods_id": 56,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "铜锣烧蛋糕",
|
||||
"description": "口感丰富,悠闲小食",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/11/37ecc570f9d7ad929a693d24118a0311.png",
|
||||
"tags": [],
|
||||
"original_price": 155,
|
||||
"price": {
|
||||
"show": "100",
|
||||
"score": 1,
|
||||
"price_min": 100,
|
||||
"price_max": 100
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 7394
|
||||
}, {
|
||||
"goods_id": 54,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "雪麸蛋糕 香蕉牛奶风味",
|
||||
"description": "北海道牛奶风味",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/11/9093c59ea5d513008926ac4233c20992.png",
|
||||
"tags": [],
|
||||
"original_price": 222,
|
||||
"price": {
|
||||
"show": "111",
|
||||
"score": 1,
|
||||
"price_min": 111,
|
||||
"price_max": 111
|
||||
},
|
||||
"clicks": 1,
|
||||
"sales": 202
|
||||
}, {
|
||||
"goods_id": 37,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "澳大利亚深海鱼油胶囊",
|
||||
"description": "无腥味工艺,呵护全家健康",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/07/af4e0bab7e621d2bd6f1cb7052f1eb71.png",
|
||||
"tags": [],
|
||||
"original_price": 188,
|
||||
"price": {
|
||||
"show": "100",
|
||||
"score": 1,
|
||||
"price_min": 100,
|
||||
"price_max": 100
|
||||
},
|
||||
"clicks": 2,
|
||||
"sales": 5538
|
||||
}, {
|
||||
"goods_id": 28,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "冰淇淋威化饼干",
|
||||
"description": "浓香醇厚,微甜不腻",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/06/f01d2ec7e73dff9371b71892957d85f0.png",
|
||||
"tags": [],
|
||||
"original_price": 155,
|
||||
"price": {
|
||||
"show": "111",
|
||||
"score": 1,
|
||||
"price_min": 111,
|
||||
"price_max": 111
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 2707
|
||||
}, {
|
||||
"goods_id": 33,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "麦饭石天然矿泉水",
|
||||
"description": "优选产地,多种矿物质",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/06/770afc8c293ff493c35d9a98dc3dbe97.png",
|
||||
"tags": [],
|
||||
"original_price": 122,
|
||||
"price": {
|
||||
"show": "100",
|
||||
"score": 1,
|
||||
"price_min": 100,
|
||||
"price_max": 100
|
||||
},
|
||||
"clicks": 2,
|
||||
"sales": 5257
|
||||
}, {
|
||||
"goods_id": 24,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "小米锅巴",
|
||||
"description": "8%小米含量,松脆营养",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/06/5c6bbb8f1f50953c3d25b7a5c22a9865.png",
|
||||
"tags": [],
|
||||
"original_price": 155,
|
||||
"price": {
|
||||
"show": "111",
|
||||
"score": 1,
|
||||
"price_min": 111,
|
||||
"price_max": 111
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 2653
|
||||
}, {
|
||||
"goods_id": 97,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "甜味浓郁低糖水果千禧玲珑小番茄",
|
||||
"description": "甜味浓郁低糖水果千禧玲珑小番茄",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/11/8c44833a6d9477a9c01f8b4e06b2f748.png",
|
||||
"tags": [],
|
||||
"original_price": 0,
|
||||
"price": {
|
||||
"show": "89",
|
||||
"score": 10,
|
||||
"price_min": 89,
|
||||
"price_max": 89
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 1347
|
||||
}, {
|
||||
"goods_id": 12,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "秘制手撕牛肉",
|
||||
"description": "肉质紧致弹牙,细嚼口齿留香",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/06/bbd96a7724cb053e501b4ce2c34b5a0f.png",
|
||||
"tags": [],
|
||||
"original_price": 255,
|
||||
"price": {
|
||||
"show": "111",
|
||||
"score": 1,
|
||||
"price_min": 111,
|
||||
"price_max": 111
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 1352
|
||||
}, {
|
||||
"goods_id": 58,
|
||||
"shop": {
|
||||
"shop_id": 1,
|
||||
"name": "平台自营店铺",
|
||||
"cover": "",
|
||||
"is_self": true
|
||||
},
|
||||
"is_self": true,
|
||||
"name": "挚爱巧克力",
|
||||
"description": "黄金可可,瑞士工艺传承",
|
||||
"cover": "http://storage.zh.shangkelian.cn/images/2022/01/11/ad5953e7f7ae60ca2f13f1313d67bb62.png",
|
||||
"tags": [],
|
||||
"original_price": 200,
|
||||
"price": {
|
||||
"show": "100",
|
||||
"score": 1,
|
||||
"price_min": 100,
|
||||
"price_max": 100
|
||||
},
|
||||
"clicks": 0,
|
||||
"sales": 5420
|
||||
}],
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
this.shopId = this.$Route.query.id;
|
||||
},
|
||||
methods: {
|
||||
selectClassify(id) {
|
||||
if (id === this.category_id) return;
|
||||
this.category_id = id;
|
||||
},
|
||||
search() {
|
||||
console.log('search')
|
||||
this.$Router.push({
|
||||
'name': 'StoreSearch'
|
||||
});
|
||||
},
|
||||
onGoods(id) {
|
||||
this.$Router.push({
|
||||
name: 'StoreGoods',
|
||||
params: {
|
||||
id: id
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
import {
|
||||
shopsDetail,
|
||||
shopsGoods
|
||||
} from "@/apis/interfaces/store"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
name : '',
|
||||
logo : '',
|
||||
category_id : '',
|
||||
classify : [],
|
||||
goods : [],
|
||||
pages : {}
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
this.ShopId = this.$Route.query.ShopId
|
||||
shopsDetail(this.ShopId).then(res => {
|
||||
this.classify = [{
|
||||
category_id: '',
|
||||
name: '全部商品',
|
||||
}, ...res.categories]
|
||||
this.name = res.name
|
||||
this.logo = res.cover
|
||||
this.getGoods()
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon: 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
getGoods() {
|
||||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
shopsGoods(this.ShopId, this.category_id).then(res => {
|
||||
this.goods = res.data
|
||||
this.pages = res.page
|
||||
uni.hideLoading()
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon: 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
selectClassify(id) {
|
||||
if (id === this.category_id) return;
|
||||
this.category_id = id;
|
||||
this.getGoods()
|
||||
},
|
||||
search() {
|
||||
this.$Router.push({
|
||||
name: 'StoreSearch'
|
||||
});
|
||||
},
|
||||
onGoods(id) {
|
||||
this.$Router.push({
|
||||
name: 'StoreGoods',
|
||||
params: {
|
||||
id: id
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.shopDetail {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
.pages-empty {
|
||||
height: 70vh;
|
||||
}
|
||||
|
||||
.top {
|
||||
height: 320rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
box-sizing: border-box;
|
||||
padding-top: 44px;
|
||||
width: 100%;
|
||||
.shopDetail {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
|
||||
.search {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding-right: $padding;
|
||||
.top {
|
||||
height: 320rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
box-sizing: border-box;
|
||||
padding-top: 44px;
|
||||
width: 100%;
|
||||
|
||||
.back {
|
||||
padding: 0 $padding;
|
||||
}
|
||||
.search {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding-right: $padding;
|
||||
|
||||
.input {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
background-color: #f9f9f9;
|
||||
color: gray;
|
||||
font-size: 26rpx;
|
||||
border-radius: 30rpx;
|
||||
padding: 10rpx $padding;
|
||||
.back {
|
||||
padding: 0 $padding;
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
margin-right: $margin;
|
||||
}
|
||||
}
|
||||
}
|
||||
.input {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
background-color: #f9f9f9;
|
||||
color: gray;
|
||||
font-size: 26rpx;
|
||||
border-radius: 30rpx;
|
||||
padding: 10rpx $padding;
|
||||
|
||||
.search-icon {
|
||||
margin-right: $margin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.shopInfo {
|
||||
border-top: solid 1 #f9f9f9;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding: $padding - 10;
|
||||
background-color: #fff;
|
||||
.shopInfo {
|
||||
border-top: solid 1 #f9f9f9;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding: $padding - 10;
|
||||
background-color: #fff;
|
||||
|
||||
.shopInfo-title-left {
|
||||
width: 500rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
.shopInfo-title-left {
|
||||
width: 500rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
|
||||
.shop-logo {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 10rpx;
|
||||
border: solid 1rpx #f9f9f9;
|
||||
}
|
||||
.shop-logo {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 10rpx;
|
||||
border: solid 1rpx #f9f9f9;
|
||||
}
|
||||
|
||||
.shop-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
font-size: 26rpx;
|
||||
margin-left: $margin;
|
||||
color: #999;
|
||||
width: 370rpx;
|
||||
.shop-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
font-size: 26rpx;
|
||||
margin-left: $margin;
|
||||
color: #999;
|
||||
width: 370rpx;
|
||||
|
||||
.no {
|
||||
color: $text-price;
|
||||
padding-left: 4rpx;
|
||||
}
|
||||
.no {
|
||||
color: $text-price;
|
||||
padding-left: 4rpx;
|
||||
padding-right: 10rpx;
|
||||
}
|
||||
|
||||
.shop-titl {
|
||||
font-size: 34rpx;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
margin-bottom: 6rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
.shop-titl {
|
||||
font-size: 34rpx;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
margin-bottom: 6rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shopInfo-title-right {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
font-size: 28rpx;
|
||||
color: #222;
|
||||
background-color: $main-color;
|
||||
padding: 6rpx $padding;
|
||||
color: #FFF;
|
||||
}
|
||||
.shopInfo-title-right {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
font-size: 28rpx;
|
||||
color: #222;
|
||||
background-color: $main-color;
|
||||
padding: 6rpx $padding;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
height: calc(100vh - 320rpx);
|
||||
background-color: #eee;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding-top: 20rpx;
|
||||
box-sizing: border-box;
|
||||
.content {
|
||||
height: calc(100vh - 320rpx);
|
||||
background-color: #eee;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding-top: 20rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.left {
|
||||
width: 180rpx;
|
||||
height: 100%;
|
||||
.left {
|
||||
width: 180rpx;
|
||||
height: 100%;
|
||||
|
||||
.scroll-view-left {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.scroll-view-left {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.classify-item {
|
||||
width: 100%;
|
||||
padding: $padding 0;
|
||||
font-size: 26rpx;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #222;
|
||||
display: inline-block;
|
||||
}
|
||||
.classify-item {
|
||||
width: 100%;
|
||||
padding: $padding 0;
|
||||
font-size: 26rpx;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #222;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.active_classify_item {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
.active_classify_item {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
width: calc(100% - 180rpx);
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
.right {
|
||||
width: calc(100% - 180rpx);
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
|
||||
.scroll-view-right {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.scroll-view-right {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
.goods-item {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
border-bottom: solid 1rpx #eee;
|
||||
// padding: $padding;
|
||||
padding-left: $padding;
|
||||
padding-top: $padding;
|
||||
padding-bottom: $padding;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
.goods-item {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
border-bottom: solid 1rpx #eee;
|
||||
// padding: $padding;
|
||||
padding-left: $padding;
|
||||
padding-top: $padding;
|
||||
padding-bottom: $padding;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
|
||||
.good-img {
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
.good-img {
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
|
||||
.item--content {
|
||||
flex: 1;
|
||||
padding: $padding - 10;
|
||||
.item--content {
|
||||
flex: 1;
|
||||
padding: $padding - 10;
|
||||
|
||||
&>.title {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
// @extend .ellipsis-1;
|
||||
}
|
||||
&>.title {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
// @extend .ellipsis-1;
|
||||
}
|
||||
|
||||
&>.sub_title {
|
||||
color: #a05f0c;
|
||||
font-size: 24rpx;
|
||||
padding-top: 4rpx;
|
||||
// @extend .ellipsis-1;
|
||||
}
|
||||
&>.sub_title {
|
||||
color: #a05f0c;
|
||||
font-size: 24rpx;
|
||||
padding-top: 4rpx;
|
||||
// @extend .ellipsis-1;
|
||||
}
|
||||
|
||||
&>.price {
|
||||
padding-top: $padding/2;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-end;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
line-height: 40rpx;
|
||||
font-weight: bold;
|
||||
font-size: 32rpx;
|
||||
color: $text-price;
|
||||
&>.price {
|
||||
padding-top: $padding/2;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-end;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
line-height: 40rpx;
|
||||
font-weight: bold;
|
||||
font-size: 32rpx;
|
||||
color: $text-price;
|
||||
|
||||
// @extend .ellipsis-1;
|
||||
.price-type {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-end;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
// @extend .ellipsis-1;
|
||||
.price-type {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-end;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
|
||||
text {
|
||||
margin-right: $margin/2;
|
||||
padding-left: 6rpx;
|
||||
font-size: 70%;
|
||||
}
|
||||
text {
|
||||
margin-right: $margin/2;
|
||||
padding-left: 6rpx;
|
||||
font-size: 70%;
|
||||
}
|
||||
|
||||
.kucun {
|
||||
color: $text-gray;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
.kucun {
|
||||
color: $text-gray;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,79 +1,58 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- banner -->
|
||||
<view class="banner">
|
||||
<image class="banner-cover"
|
||||
src="http://storage.zh.shangkelian.cn/images/2022/01/11/7278de59f0817da7fbcaf6657dba7475.jpg"
|
||||
mode="aspectFill" />
|
||||
</view>
|
||||
<!-- 分类 -->
|
||||
<u-sticky bgColor="#fff" zIndex="99">
|
||||
<u-tabs :list="classify" lineColor="#34CE98" @click="onTabs" />
|
||||
</u-sticky>
|
||||
<!-- 店铺列表 -->
|
||||
<block v-for="(item,index) in 10" :key="index">
|
||||
<view class="shopInfo" @click="toShop(2)">
|
||||
<view class="shopInfo-title-left">
|
||||
<image class="shop-logo" src="/static/img/house_back.jpg" mode="aspectFill" />
|
||||
<view class="shop-title">
|
||||
<view class="shop-titl">三只松鼠旗舰店</view>
|
||||
<view> 商品质量:<span>5.0</span> <text style="padding-left: 20rpx;">服务态度:<span>5.0</span></text> </view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopInfo-title-right" >全部商品 723 <uni-icons type="right" color="grey" /></view>
|
||||
</view>
|
||||
</block>
|
||||
<!-- 店铺列表 -->
|
||||
<block v-if="shopsArr.length > 0">
|
||||
<view class="shop-List">
|
||||
<view class="shopInfo" v-for="(item,index) in shopsArr" :key="index" @click="toShop(item.shop_id)">
|
||||
<view class="shopInfo-title-left">
|
||||
<image class="shop-logo" :src="item.cover" mode="aspectFill" />
|
||||
<view class="shop-title">
|
||||
<view class="shop-titl nowrap">{{item.name}}</view>
|
||||
<view>店铺评分:<span>5.0</span></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="shopInfo-title-right" >在售{{item.goods_count}}件<uni-icons class="icons" type="right" size="14" color="grey" /></view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view class="vertical pages-empty">
|
||||
<u-empty
|
||||
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
||||
textColor="#999"
|
||||
text="暂无相关店铺"
|
||||
>
|
||||
</u-empty>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
meals
|
||||
shops
|
||||
} from "@/apis/interfaces/store"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
banner: "",
|
||||
goodsArr: [],
|
||||
// classify: [],
|
||||
classify: [{
|
||||
category_id: 1,
|
||||
name: " 全部",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 2,
|
||||
name: " 母婴",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 3,
|
||||
name: "服饰",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 4,
|
||||
name: "男装",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 5,
|
||||
name: "男鞋",
|
||||
cover: ""
|
||||
}, {
|
||||
category_id: 6,
|
||||
name: "女装",
|
||||
cover: ""
|
||||
}]
|
||||
shopsArr : [],
|
||||
classify : [],
|
||||
shopsPage: {},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
// this.getMeals()
|
||||
this.getShops()
|
||||
},
|
||||
methods: {
|
||||
getMeals() {
|
||||
meals(this.$Route.query.id, this.categoryId).then(res => {
|
||||
uni.setNavigationBarTitle({
|
||||
title: res.meal.subtitle
|
||||
})
|
||||
this.banner = res.meal.banner
|
||||
this.goodsArr = res.goods
|
||||
getShops() {
|
||||
shops(this.categoryId).then(res => {
|
||||
console.log(res)
|
||||
this.shopsArr = res.shops.data
|
||||
this.shopsPage= res.shops.page
|
||||
this.classify = [{
|
||||
name: "全部",
|
||||
category_id: ""
|
||||
@@ -83,10 +62,9 @@
|
||||
},
|
||||
onTabs(e) {
|
||||
this.categoryId = e.category_id
|
||||
this.getMeals()
|
||||
this.getShops()
|
||||
},
|
||||
toShop(id) {
|
||||
console.log('toShop/////.........');
|
||||
this.$Router.push({
|
||||
name: 'ShopDetail',
|
||||
params: {
|
||||
@@ -96,106 +74,95 @@
|
||||
}
|
||||
},
|
||||
onPullDownRefresh() {
|
||||
this.getMeals()
|
||||
this.getShops()
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
<style lang="scss" scoped>
|
||||
.pages-empty{
|
||||
height: 70vh;
|
||||
}
|
||||
.content {
|
||||
background: $window-color;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
// banner
|
||||
.banner {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
background-color: white;
|
||||
padding-top: 40%;
|
||||
|
||||
&-text,
|
||||
&-cover {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
// 筛选
|
||||
.classify-tabs {
|
||||
background: white;
|
||||
}
|
||||
|
||||
|
||||
.shopInfo {
|
||||
border-top: solid 1 #f9f9f9;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding: $padding $padding - 10;
|
||||
border-bottom: solid 10rpx #f9f9f9;
|
||||
background-color: #fff;
|
||||
|
||||
.shopInfo-title-left {
|
||||
width: 500rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
|
||||
.shop-logo {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 10rpx;
|
||||
border: solid 1rpx #f9f9f9;
|
||||
}
|
||||
|
||||
.shop-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
font-size: 26rpx;
|
||||
margin-left: $margin;
|
||||
color: #999;
|
||||
width: 370rpx;
|
||||
|
||||
span {
|
||||
color: $text-price;
|
||||
padding-left: 4rpx;
|
||||
}
|
||||
|
||||
.shop-titl {
|
||||
font-size: 34rpx;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
margin-bottom: 6rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shopInfo-title-right {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
font-size: 28rpx;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.shop-List{
|
||||
padding: $padding;
|
||||
.shopInfo {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding: $padding - 10;
|
||||
background-color: #fff;
|
||||
border-radius: $radius;
|
||||
margin-top: 20rpx;
|
||||
&:first-child{
|
||||
margin-top: 0;
|
||||
}
|
||||
.shopInfo-title-left {
|
||||
width: 60%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
padding-left: 90rpx;
|
||||
min-height: 90rpx;
|
||||
box-sizing: border-box;
|
||||
.shop-logo {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 90rpx;
|
||||
height: 90rpx;
|
||||
border-radius: 10rpx;
|
||||
border: solid 1rpx #f9f9f9;
|
||||
}
|
||||
.shop-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
box-sizing: border-box;
|
||||
font-size: 26rpx;
|
||||
margin-left: $margin;
|
||||
color: #999;
|
||||
width: 100%;
|
||||
span {
|
||||
color: $text-price;
|
||||
padding-left: 4rpx;
|
||||
}
|
||||
.shop-titl {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
margin-bottom: 6rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
.shopInfo-title-right {
|
||||
width: 40%;
|
||||
text-align: right;
|
||||
font-size: 26rpx;
|
||||
color: gray;
|
||||
.icons{
|
||||
vertical-align: bottom;
|
||||
margin-top: 2rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,23 +1,251 @@
|
||||
<template>
|
||||
<view>
|
||||
共力团队
|
||||
|
||||
<view>共力家族</view>
|
||||
<view>共力伙伴</view>
|
||||
<view>供应商</view>
|
||||
<view class="team">
|
||||
<!-- 统计信息 -->
|
||||
<view class="team-hader">
|
||||
<view class="team-hader-item">
|
||||
<image class="team-hader-cover" src="@/static/vip/lv_03.png" mode="widthFix"></image>
|
||||
<view class="team-hader-title">共力家族</view>
|
||||
<view class="team-hader-number"><text>{{count.one}}</text>人</view>
|
||||
</view>
|
||||
<view class="team-hader-item">
|
||||
<image class="team-hader-cover" src="@/static/vip/lv_04.png" mode="widthFix"></image>
|
||||
<view class="team-hader-title">共力伙伴</view>
|
||||
<view class="team-hader-number"><text>{{count.two}}</text>人</view>
|
||||
</view>
|
||||
<view class="team-hader-item">
|
||||
<image class="team-hader-cover" src="@/static/vip/lv_06.png" mode="widthFix"></image>
|
||||
<view class="team-hader-title">供应商</view>
|
||||
<view class="team-hader-number"><text>{{count.supplier}}</text>人</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 邀请好友 -->
|
||||
<view class="team-invite" @click="onInvitation">
|
||||
<image src="@/static/img/team_00.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<!-- 团队 -->
|
||||
<view class="team-tabs">
|
||||
<u-tabs
|
||||
:list="teamTabs"
|
||||
:scrollable="false"
|
||||
lineColor="#34CE98"
|
||||
@click="onTeamTab"
|
||||
></u-tabs>
|
||||
<view class="team-lists">
|
||||
<view class="team-list-header">
|
||||
<view class="team-list-header-item">用户</view>
|
||||
<view class="team-list-header-item">手机号码</view>
|
||||
<view class="team-list-header-item">{{tabsType === 'supplier' ? '业绩': '注册时间'}}</view>
|
||||
</view>
|
||||
<block v-if="users.length > 0">
|
||||
<view class="team-list-flex" v-for="(item, index) in 10" :key="index">
|
||||
<view class="team-list-flex-item user">
|
||||
<image class="user-cover" src="" mode="aspectFill"></image>
|
||||
<view class="user-nickname">唐明明</view>
|
||||
</view>
|
||||
<view class="team-list-flex-item number">182****0131</view>
|
||||
<view class="team-list-flex-item number">2022/06/09</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view class="vertical pages-empty">
|
||||
<u-empty
|
||||
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
||||
textColor="#999"
|
||||
text="暂无成员"
|
||||
>
|
||||
</u-empty>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { relations } from '@/apis/interfaces/team.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
teamTabs: [
|
||||
{ name: '共力家族', type: 'one'},
|
||||
{ name: '共力伙伴', type: 'two'},
|
||||
{ name: '供应商', type: 'supplier'},
|
||||
],
|
||||
tabsType: 'one',
|
||||
count: {
|
||||
all: 0,
|
||||
one: 0,
|
||||
two: 0,
|
||||
supplier: 0
|
||||
},
|
||||
users: [],
|
||||
page : {}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
// 共力团队
|
||||
onTeamTab(e){
|
||||
if(this.tabsType === e.type) return
|
||||
this.tabsType = e.type
|
||||
this.getRelations()
|
||||
},
|
||||
// 团队信息
|
||||
getRelations(){
|
||||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
relations({
|
||||
larer: this.tabsType
|
||||
}).then(res => {
|
||||
this.count = res.count
|
||||
this.users = res.users.data
|
||||
this.pages = res.users.page
|
||||
uni.hideLoading()
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message
|
||||
})
|
||||
})
|
||||
},
|
||||
onInvitation(){
|
||||
this.$Router.push({name: 'Invitation'})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
.team{
|
||||
background: $window-color;
|
||||
min-height: 100vh;
|
||||
padding-bottom: $padding*2;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
// 用户数据
|
||||
.pages-empty{
|
||||
height: 45vh;
|
||||
}
|
||||
// 团队统计
|
||||
.team-hader{
|
||||
position: relative;
|
||||
padding: 20rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
&-item{
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
width: calc(33.33% - 20rpx);
|
||||
background-color: white;
|
||||
margin: 0 10rpx;
|
||||
border-radius: $radius*2 $radius $radius*2 $radius;
|
||||
height: 150rpx;
|
||||
padding: 20rpx;
|
||||
box-sizing: border-box;
|
||||
color: white;
|
||||
overflow: hidden;
|
||||
&:nth-child(1){
|
||||
background-image: linear-gradient(to bottom right, #f6d5c2, #edc0a1);
|
||||
}
|
||||
&:nth-child(2){
|
||||
background-image: linear-gradient(to bottom right, #d5ddee, #b5c1d9);
|
||||
}
|
||||
&:nth-child(3){
|
||||
background-image: linear-gradient(to bottom right, #f5cb8e, #efba6d);
|
||||
}
|
||||
}
|
||||
&-title{
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
font-size: 26rpx;
|
||||
@extend .nowrap;
|
||||
}
|
||||
&-number{
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
@extend .nowrap;
|
||||
text{
|
||||
font-size: 40rpx;
|
||||
font-weight: bold;
|
||||
padding-right: 6rpx;
|
||||
}
|
||||
font-size: 26rpx;
|
||||
}
|
||||
&-cover{
|
||||
position: absolute;
|
||||
width: 240rpx;
|
||||
height: 240rpx;
|
||||
right: -100rpx;
|
||||
top: -30rpx;
|
||||
opacity: .7;
|
||||
}
|
||||
}
|
||||
// 邀请团队
|
||||
.team-invite{
|
||||
padding: 0 $padding;
|
||||
image{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
// 团队列表
|
||||
.team-tabs{
|
||||
margin: 0 $margin $margin $margin;
|
||||
padding-bottom: $padding;
|
||||
.team-lists{
|
||||
margin-top: $margin/2;
|
||||
border-radius: $radius;
|
||||
background: white;
|
||||
padding: 20rpx $padding;
|
||||
.team-list-header{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
text-align: center;
|
||||
border-bottom: solid 1px $border-color;
|
||||
line-height: 70rpx;
|
||||
padding-bottom: 15rpx;
|
||||
text-align: center;
|
||||
font-size: 28rpx;
|
||||
color: $text-gray;
|
||||
margin-bottom: 10rpx;
|
||||
.team-list-header-item{
|
||||
width: 33.33%;
|
||||
}
|
||||
}
|
||||
.team-list-flex{
|
||||
display: flex;
|
||||
font-size: 28rpx;
|
||||
padding: 10rpx 0;
|
||||
&-item{
|
||||
width: 33.33%;
|
||||
height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
color: #333;
|
||||
&.user{
|
||||
padding-left: 70rpx;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
.user-cover{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 5rpx;
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
border-radius: 50%;
|
||||
background: $window-color;
|
||||
}
|
||||
.user-nickname{
|
||||
@extend .nowrap;
|
||||
}
|
||||
}
|
||||
&.number{
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -4,32 +4,18 @@
|
||||
<view class="info-box">
|
||||
<image src="@/static/user/user_back.png" mode="aspectFill" />
|
||||
<view class="user-flex">
|
||||
<image class="cover" @click="goSetting" :src="userInfo.avatar || require('@/static/user/cover.png')"
|
||||
<image class="cover" @click="onBtn('Setting', {})" :src="userInfo.avatar || require('@/static/user/cover.png')"
|
||||
mode="aspectFill" />
|
||||
<view class="user-content">
|
||||
<block v-if="$store.state.token != ''">
|
||||
<view class="name">{{ userInfo.nickname }}</view>
|
||||
<view class="tabs" v-if="userInfo.identity.length !== 0">
|
||||
<view class="tabs-item">
|
||||
<image src="@/static/user/icon_07.png" />
|
||||
VIP会员
|
||||
</view>
|
||||
<view class="name">{{ userInfo.nickname }}</view>
|
||||
<view class="tabs">
|
||||
<view class="tabs-item">
|
||||
<image :src="identity.cover_url" mode="heightFix" />{{identity.identity_text}}
|
||||
</view>
|
||||
<view class="tabs" v-else>
|
||||
<view class="tabs-item">
|
||||
<image src="@/static/user/icon_07.png" />
|
||||
普通用户
|
||||
</view>
|
||||
</view>
|
||||
<view class="chainAddress" v-if="userInfo.chain_address">
|
||||
<!-- <u-icon labelPos="left" @click="copy(userInfo.chain_address)" labelSize="14"
|
||||
labelColor="#fff" :label="userInfo.chain_address.substr(0, 20)+'...'" space="10"
|
||||
:name="require('@/static/imgs/copy.png')" size="16" /> -->
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view class="name">未登录</view>
|
||||
</block>
|
||||
</view>
|
||||
<view class="chainAddress" v-if="userInfo.addr">
|
||||
<text @click="copy(userInfo.addr)">区块地址:{{userInfo.addr.substring(0,5) + '****' + userInfo.addr.substring(userInfo.addr.length - 5)}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -38,25 +24,24 @@
|
||||
<view class="vip-card">
|
||||
<view class="title">
|
||||
<image src="@/static/user/icon_06.png" mode="widthFix" />
|
||||
会员
|
||||
共力会员
|
||||
</view>
|
||||
<view class="subtitle">
|
||||
<u-notice-bar :text="cardText" icon="" bgColor="" duration="3000" color="#fcc692" direction="column">
|
||||
</u-notice-bar>
|
||||
</view>
|
||||
<!-- v-if="userInfo.identity.length === 0" -->
|
||||
<view class="btn" @click="openVip">开通</view>
|
||||
<view class="btn" @click="onBtn('Vip', {})">{{userInfo.isOpenVip ? '开通': '续费'}}</view>
|
||||
</view>
|
||||
|
||||
<!-- 健康数据 -->
|
||||
<view class="health-flex">
|
||||
<view class="health-flex-item" @click="onBtn('AccountIntegral', {})">
|
||||
<view class="title">共力值</view>
|
||||
<view class="num">0.00</view>
|
||||
<view class="num">{{account.glz}}</view>
|
||||
</view>
|
||||
<view class="health-flex-item" @click="onBtn('AccountDt', {})">
|
||||
<view class="title">DT积分</view>
|
||||
<view class="num">0.00</view>
|
||||
<view class="num">{{account.dt}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 订单 -->
|
||||
@@ -84,7 +69,7 @@
|
||||
</view>
|
||||
<!-- 功能块 -->
|
||||
<view class="btns-box">
|
||||
<view class="btns-box-item">
|
||||
<view class="btns-box-item" @click="onMnemonic">
|
||||
<image class="icon" src="@/static/user/userIcon_02.png" mode="widthFix" />
|
||||
导出助记词
|
||||
<uni-icons class="forward" type="forward" color="#999" />
|
||||
@@ -94,18 +79,11 @@
|
||||
地址管理
|
||||
<uni-icons class="forward" type="forward" color="#999" />
|
||||
</view>
|
||||
<view class="btns-box-item">
|
||||
<view class="btns-box-item" @click="onBtn('Invitation', {})">
|
||||
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
|
||||
分享邀请
|
||||
<uni-icons class="forward" type="forward" color="#999" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="btns-box">
|
||||
<view class="btns-box-item">
|
||||
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
|
||||
供应商申请
|
||||
<uni-icons class="forward" type="forward" color="#999" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btns-box">
|
||||
<view class="btns-box-item">
|
||||
@@ -127,25 +105,48 @@
|
||||
<view class="footer-text">
|
||||
<view>共力生态</view>
|
||||
<view>The total force ecological</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 助记词弹出框 -->
|
||||
<u-modal :show="wordsShow" :zoom="false" confirmText="复制" @confirm="copyWord" confirmColor="#34CE98">
|
||||
<slot default>
|
||||
<view class="wordsCont">
|
||||
<view class="wordsCont-title">导出助记词</view>
|
||||
<view class="wordsCont-tips">请务必抄下助记词并存在安全的地方,若助记词丢失,重装或换设备登录时将无法查看历史消息!若助记词被他人获取,将可能获取你的信息!</view>
|
||||
<view class="wordsCont-text">{{mnemonic}}</view>
|
||||
<image class="wordsCont-close" @click="wordsShow = false" src="@/static/icon/userCloes.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</slot>
|
||||
</u-modal>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
info
|
||||
} from '@/apis/interfaces/user';
|
||||
import userAuth from '@/public/userAuth';
|
||||
|
||||
info,
|
||||
chainSeed
|
||||
} from '@/apis/interfaces/user';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
cardText: ['开通会员加速共力值增长', '前10000名用户专享阶段折扣价格'],
|
||||
cardText: [],
|
||||
userInfo: {
|
||||
nickname: '',
|
||||
avatar: '',
|
||||
identity: []
|
||||
}
|
||||
nickname : '',
|
||||
addr : '',
|
||||
avatar : '',
|
||||
isOpenVip : '',
|
||||
},
|
||||
identity : {
|
||||
button_cover_url: '',
|
||||
cover_url : '',
|
||||
identity_text : ''
|
||||
},
|
||||
account : {
|
||||
glz : 0.00,
|
||||
dt : 0.00
|
||||
},
|
||||
mnemonic : '',
|
||||
wordsShow: false
|
||||
};
|
||||
},
|
||||
onShow() {
|
||||
@@ -153,25 +154,40 @@
|
||||
},
|
||||
methods: {
|
||||
// 用户信息
|
||||
getInfo() {
|
||||
getInfo() {
|
||||
if (this.$store.state.token === '') return;
|
||||
info()
|
||||
.then(res => {
|
||||
uni.setNavigationBarTitle({
|
||||
title: res.nickname
|
||||
});
|
||||
this.userInfo = res;
|
||||
})
|
||||
.catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon: 'none'
|
||||
});
|
||||
info().then(res => {
|
||||
uni.setNavigationBarTitle({
|
||||
title: res.nickname
|
||||
});
|
||||
},
|
||||
// 开通会员
|
||||
openVip() {
|
||||
this.$Router.push({name: 'Vip'})
|
||||
this.cardText = res.identity_array
|
||||
this.userInfo = {
|
||||
nickname : res.nickname,
|
||||
addr : res.addr,
|
||||
avatar : res.avatar,
|
||||
isOpenVip : res.is_open_vip,
|
||||
}
|
||||
this.identity = res.identity
|
||||
this.account = res.account
|
||||
})
|
||||
.catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
},
|
||||
// 导出助记词
|
||||
onMnemonic(){
|
||||
chainSeed().then(res => {
|
||||
this.mnemonic = res.seed
|
||||
this.wordsShow = true
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 按钮导航
|
||||
onBtn(name, params) {
|
||||
@@ -180,17 +196,17 @@
|
||||
params
|
||||
});
|
||||
},
|
||||
goSetting() {
|
||||
this.$Router.push({
|
||||
name: 'Setting'
|
||||
})
|
||||
},
|
||||
// 退出登录
|
||||
logOut() {
|
||||
this.$store.commit('setToken', '');
|
||||
this.$store.commit('setIsNew', '');
|
||||
this.$Router.replaceAll({name: 'Auth'})
|
||||
},
|
||||
logOut() {
|
||||
uni.removeStorage({
|
||||
key: 'isnew',
|
||||
success: () =>{
|
||||
this.$store.commit('setToken', '');
|
||||
this.$Router.replaceAll({name: 'Auth'})
|
||||
}
|
||||
})
|
||||
},
|
||||
// 复制
|
||||
copy(data) {
|
||||
uni.setClipboardData({
|
||||
data: data,
|
||||
@@ -203,7 +219,21 @@
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
// 复制助记词
|
||||
copyWord() {
|
||||
uni.setClipboardData({
|
||||
data: this.mnemonic,
|
||||
success: () => {
|
||||
this.wordsShow = false
|
||||
uni.showToast({
|
||||
title: '助记词已复制',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -281,26 +311,24 @@
|
||||
font-size: $title-size + 8;
|
||||
@extend .nowrap;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
padding-top: 10rpx;
|
||||
|
||||
&-item {
|
||||
background: rgba($color: #000000, $alpha: 0.3);
|
||||
font-size: $title-size-sm - 4;
|
||||
display: inline-block;
|
||||
line-height: 36rpx;
|
||||
padding: 0 20rpx;
|
||||
border-radius: 20rpx;
|
||||
|
||||
image {
|
||||
width: 26rpx;
|
||||
height: 26rpx;
|
||||
vertical-align: middle;
|
||||
margin-bottom: 2rpx;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
}
|
||||
padding-top: 10rpx;
|
||||
&-item {
|
||||
background: rgba($color: #000000, $alpha: 0.3);
|
||||
font-size: $title-size-sm - 4;
|
||||
display: inline-block;
|
||||
line-height: 36rpx;
|
||||
padding: 0 20rpx;
|
||||
border-radius: 20rpx;
|
||||
|
||||
image {
|
||||
width: 38rpx;
|
||||
height: 38rpx;
|
||||
vertical-align: middle;
|
||||
margin-bottom: 2rpx;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -456,5 +484,38 @@
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* 助记词弹框 */
|
||||
.wordsCont {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.wordsCont-title {
|
||||
width: 100%;
|
||||
font-weight: 600;
|
||||
font-size: 44rpx;
|
||||
}
|
||||
|
||||
.wordsCont-tips {
|
||||
padding: 30rpx 0;
|
||||
box-sizing: border-box;
|
||||
color: #de5660;
|
||||
line-height: 48rpx;
|
||||
font-size: 30rpx;
|
||||
}
|
||||
|
||||
.wordsCont-text {
|
||||
font-weight: 500;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
|
||||
.wordsCont-close {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 44rpx;
|
||||
height: 44rpx;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<view class="vip-user">
|
||||
<image class="user-cover" :src="user.avatar" mode="aspectFill"></image>
|
||||
<view class="user-nickname">{{user.nickname}}</view>
|
||||
<view class="user-date">到期日期:{{identity.ended_at}}</view>
|
||||
<view class="user-date">到期日期:{{endedAt}}</view>
|
||||
<view class="vip-renewal" v-if="!isOpen">续费</view>
|
||||
</view>
|
||||
<view class="user-cards">
|
||||
@@ -54,7 +54,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { vip, vipPay, submitOrder } from '@/apis/interfaces/vip.js'
|
||||
import { vip, vipPay, payInfo } from '@/apis/interfaces/vip.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -68,8 +68,9 @@
|
||||
identity: {
|
||||
identity_text: '',
|
||||
cover_url: '',
|
||||
ended_at: ''
|
||||
},
|
||||
// 到期时间
|
||||
endedAt: '',
|
||||
// 下级身份
|
||||
nextIdentity:{
|
||||
identity_text: ''
|
||||
@@ -85,49 +86,81 @@
|
||||
};
|
||||
},
|
||||
onShow() {
|
||||
vip().then(res =>{
|
||||
console.log(res)
|
||||
this.isOpen = res.is_open
|
||||
this.prices = res.prices
|
||||
this.rights = res.rights
|
||||
this.secondRule = res.second_rule
|
||||
this.nextIdentity = res.next_identity
|
||||
this.identity = res.identity
|
||||
this.user = res.user
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
this.getVipInfo()
|
||||
},
|
||||
methods: {
|
||||
// 获取会员信息
|
||||
getVipInfo(){
|
||||
vip().then(res =>{
|
||||
this.isOpen = res.is_open
|
||||
this.prices = res.prices
|
||||
this.rights = res.rights
|
||||
this.secondRule = res.second_rule
|
||||
this.nextIdentity = res.next_identity
|
||||
this.identity = res.identity
|
||||
this.endedAt = res.identity_ended_at
|
||||
this.user = res.user
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 提交订单
|
||||
onOpenVip(){
|
||||
// 获取订单
|
||||
vipPay().then(orderNo => {
|
||||
uni.showLoading({
|
||||
title: '提交订单'
|
||||
})
|
||||
vipPay().then(res => {
|
||||
// 支付参数
|
||||
submitOrder({
|
||||
orderNo
|
||||
}).then(orderInfo => {
|
||||
uni.requestPayment({
|
||||
provider : "wxpay",
|
||||
orderInfo,
|
||||
success: res => {
|
||||
console.log(res)
|
||||
},
|
||||
fail: err=> {
|
||||
console.log(err)
|
||||
}
|
||||
if(res.id) {
|
||||
uni.showLoading({
|
||||
title: '获取支付信息'
|
||||
})
|
||||
}).catch(err =>{
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
this.wxPay(res.id)
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 微信支付
|
||||
wxPay(orderId){
|
||||
payInfo(orderId).then(orderInfo => {
|
||||
uni.requestPayment({
|
||||
provider : "wxpay",
|
||||
orderInfo: JSON.parse(orderInfo),
|
||||
success: res => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '开通成功',
|
||||
showCancel: false,
|
||||
success: ()=> {
|
||||
this.getVipInfo()
|
||||
}
|
||||
})
|
||||
},
|
||||
fail(err) {
|
||||
let showToast = err.message
|
||||
if(err.errMsg === 'requestPayment:fail [payment微信:-2]User canceled'){
|
||||
showToast = '支付被取消'
|
||||
}
|
||||
uni.showToast({
|
||||
title: showToast,
|
||||
icon : 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
}).catch(err =>{
|
||||
uni.showToast({
|
||||
title: err.message,
|
||||
icon : 'none'
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,25 +4,15 @@ import {
|
||||
} from 'uni-simple-router';
|
||||
import store from '@/store/index'
|
||||
|
||||
// CALL 页面,必须是nvue,但是NVUE 不支持webpack的 ROUTES 注入
|
||||
// https://github.com/SilurianYang/uni-read-pages/issues/20
|
||||
// #ifdef APP-NVUE
|
||||
const ROUTES = [{
|
||||
"path": "/pages/im/private/call"
|
||||
}];
|
||||
// #endif
|
||||
|
||||
const router = createRouter({
|
||||
platform: process.env.VUE_APP_PLATFORM,
|
||||
routes: [...ROUTES]
|
||||
});
|
||||
|
||||
// console.log(...ROUTES)
|
||||
|
||||
//全局路由前置守卫
|
||||
router.beforeEach((to, from, next) => {
|
||||
if(to.name === 'Auth' && store.getters.getToken != '' && uni.getStorageSync('token') != ''){
|
||||
if(store.getters.getIsNew === 0 || uni.getStorageSync('isnew') === 0){
|
||||
if(uni.getStorageSync('isnew') === 0){
|
||||
next({
|
||||
name: 'AuthRole',
|
||||
NAVTYPE: 'replace'
|
||||
|
||||
BIN
static/background/wallet-code-background.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
static/icon/share_icon_00.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
static/icon/share_icon_01.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
static/icon/share_icon_02.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
static/icon/sign_btn.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
static/icon/userCloes.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
static/img/code_back.png
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
static/img/team_00.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
static/vip/lv_03.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 195 KiB |
BIN
static/vip/lv_06.png
Normal file
|
After Width: | Height: | Size: 194 KiB |
@@ -12,8 +12,7 @@ Vue.use(Vuex)
|
||||
export default new Vuex.Store({
|
||||
state: {
|
||||
token: uni.getStorageSync('token') || '',
|
||||
address: {},
|
||||
isnew: uni.getStorageSync('isNew') || 0
|
||||
address: {}
|
||||
},
|
||||
getters: {
|
||||
getToken: state => {
|
||||
@@ -21,9 +20,6 @@ export default new Vuex.Store({
|
||||
},
|
||||
getAddress: state => {
|
||||
return state.address
|
||||
},
|
||||
getIsNew: state => {
|
||||
return state.isnew
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
@@ -33,10 +29,6 @@ export default new Vuex.Store({
|
||||
},
|
||||
setAddress(state, value) {
|
||||
state.address = value
|
||||
},
|
||||
setIsNew(state, isNew) {
|
||||
state.isnew = isNew
|
||||
uni.setStorageSync('isnew', isNew)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
## 5.1.15(2022-01-10)
|
||||
* 更新 SDK
|
||||
## 1.0.4(2022-01-06)
|
||||
* 修复初始化问题
|
||||
## 1.0.3(2022-01-06)
|
||||
* 更新插件内容
|
||||
## 1.0.2(2022-01-06)
|
||||
* 添加枚举值
|
||||
## 1.0.1(2022-01-05)
|
||||
* 更新目录结构
|
||||
## 1.0.0(2022-01-05)
|
||||
* 支持 Calllib JS 层
|
||||
377
uni_modules/RongCloud-CallWrapper/lib/index.d.ts
vendored
@@ -1,377 +0,0 @@
|
||||
/*
|
||||
* RCCallUni - v5.1.14-release.1
|
||||
* CommitId - a184e82065a309fc565be987321c44e9da02abbb
|
||||
* Thu Jan 06 2022 16:03:36 GMT+0800 (中国标准时间)
|
||||
* ©2020 RongCloud, Inc. All rights reserved.
|
||||
*/
|
||||
declare enum RCCallIWCamera {
|
||||
NONE = -1,
|
||||
FRONT = 0,
|
||||
BACK = 1
|
||||
}
|
||||
/**
|
||||
* 通话媒体类型
|
||||
*/
|
||||
declare enum RCCallIWMediaType {
|
||||
/**
|
||||
* 音频通话
|
||||
*/
|
||||
AUDIO = 0,
|
||||
/**
|
||||
* 视频通话
|
||||
*/
|
||||
AUDIO_VIDEO = 1
|
||||
}
|
||||
declare enum RCUNICallErrorCode {
|
||||
SUCCESS = 0,
|
||||
ENGINE_NOT_FOUND = 1,
|
||||
NETWORK_UNAVAILABLE = 2,
|
||||
ONE_CALL_EXISTED = 3,
|
||||
OPERATION_UNAVAILABLE = 4,
|
||||
INVALID_PARAM = 5,
|
||||
NETWORK_UNSTABLE = 6,
|
||||
MEDIA_REQUEST_FAILED = 7,
|
||||
MEDIA_SERVER_NOT_READY = 8,
|
||||
MEDIA_SERVER_NOT_INITIALIZED = 9,
|
||||
MEDIA_REQUEST_TIMEOUT = 10,
|
||||
MEDIA_UNKOWN_ERROR = 11,
|
||||
MEDIA_KICKED_BY_SERVER_ERROR = 12,
|
||||
MEDIA_SERVER_CLOSED_ERROR = 13,
|
||||
MEDIA_SERVER_PUBLISH_ERROR = 14,
|
||||
MEDIA_SERVER_SUBSCRIBE_ERROR = 15,
|
||||
MEDIA_JOIN_ROOM_REFUSE_ERROR = 16
|
||||
}
|
||||
declare enum RCCallIWCallDisconnectedReason {
|
||||
CANCEL = 0,
|
||||
REJECT = 1,
|
||||
HANGUP = 2,
|
||||
BUSY_LINE = 3,
|
||||
NO_RESPONSE = 4,
|
||||
ENGINE_UNSUPPORTED = 5,
|
||||
NETWORK_ERROR = 6,
|
||||
RESOURCE_GET_ERROR = 7,
|
||||
RESOURCE_PUBLISH_ERROR = 8,
|
||||
RESOURCE_SUBSCRIBE_ERROR = 9,
|
||||
REMOTE_CANCEL = 10,
|
||||
REMOTE_REJECT = 11,
|
||||
REMOTE_HANGUP = 12,
|
||||
REMOTE_BUSY_LINE = 13,
|
||||
REMOTE_NO_RESPONSE = 14,
|
||||
REMOTE_ENGINE_UNSUPPORTED = 15,
|
||||
REMOTE_NETWORK_ERROR = 16,
|
||||
REMOTE_RESOURCE_GET_ERROR = 17,
|
||||
REMOTE_RESOURCE_PUBLISH_ERROR = 18,
|
||||
REMOTE_RESOURCE_SUBSCRIBE_ERROR = 19,
|
||||
KICKED_BY_OTHER_CALL = 20,
|
||||
IN_OTHER_CALL = 21,
|
||||
KICKED_BY_SERVER = 22,
|
||||
REMOTE_KICKED_BY_OTHER_CALL = 23,
|
||||
REMOTE_IN_OTHER_CALL = 24,
|
||||
REMOTE_KICKED_BY_SERVER = 25,
|
||||
ACCEPT_BY_OTHER_CLIENT = 26,
|
||||
HANGUP_BY_OTHER_CLIENT = 27,
|
||||
REJECTED_BY_BLACKLIST = 28,
|
||||
SERVICE_NOT_OPENED = 29,
|
||||
DROP_TO_OBSERVER = 30,
|
||||
INIT_VIDEO_ERROR = 31,
|
||||
OTHER_DEVICE_HAD_ACCEPTED = 32,
|
||||
SERVICE_DISCONNECTED = 33
|
||||
}
|
||||
declare enum RCCallIWBeautyFilterType {
|
||||
NONE = 0,
|
||||
ESTHETIC = 1,
|
||||
FRESH = 2,
|
||||
ROMANTIC = 3
|
||||
}
|
||||
|
||||
interface UniListenerResult<T> {
|
||||
module: string;
|
||||
type: string;
|
||||
data: T;
|
||||
}
|
||||
interface usersParams {
|
||||
userId: string;
|
||||
mediaType: string;
|
||||
enableCamera: string;
|
||||
userType: string;
|
||||
enableMicrophone: string;
|
||||
mediaId?: string;
|
||||
}
|
||||
interface ReceivedListenerResult {
|
||||
mine: usersParams;
|
||||
inviter: usersParams;
|
||||
startTime: number;
|
||||
caller: usersParams;
|
||||
mediaType: number;
|
||||
callType: number;
|
||||
endTime: number;
|
||||
extra: string;
|
||||
targetId: string;
|
||||
connectedTime: number;
|
||||
users: usersParams[];
|
||||
callId: string;
|
||||
}
|
||||
interface ListenerResultRes {
|
||||
reason?: RCCallIWCallDisconnectedReason;
|
||||
}
|
||||
interface ListenerResultError {
|
||||
reason?: RCUNICallErrorCode;
|
||||
}
|
||||
interface ListenerResultData {
|
||||
userId?: string;
|
||||
user?: usersParams;
|
||||
mediaType?: string;
|
||||
}
|
||||
interface RCCallIWBeautyOption {
|
||||
whitenessLevel: number;
|
||||
smoothLevel: number;
|
||||
ruddyLevel: number;
|
||||
brightLevel: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化 SDK,只需要调用一次
|
||||
*
|
||||
* calllib初始化默认不传参数
|
||||
*/
|
||||
declare function init(): void;
|
||||
/**
|
||||
* 注销calllib
|
||||
*
|
||||
* 注销calllib默认不传参数
|
||||
*/
|
||||
declare function unInit(): void;
|
||||
/**
|
||||
* 添加接收监听函数
|
||||
*
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onCallReceived(listener: (result: UniListenerResult<ReceivedListenerResult>) => void): void;
|
||||
/**
|
||||
* 添加挂断监听函数
|
||||
*
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onCallDisconnected(listener: (result: UniListenerResult<ListenerResultRes>) => void): void;
|
||||
/**
|
||||
* 添加连接监听函数
|
||||
*
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onCallConnected(listener: (result: UniListenerResult<ListenerResultRes>) => void): void;
|
||||
/**
|
||||
* 通话中的某一个参与者,邀请好友加入通话
|
||||
*
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserInvited(listener: (result: UniListenerResult<ListenerResultRes>) => void): void;
|
||||
/**
|
||||
* 对端用户加入了通话
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserJoined(listener: (result: UniListenerResult<usersParams>) => void): void;
|
||||
/**
|
||||
* 对端用户挂断 (实际测试,只在群聊时用触发)
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserLeft(listener: (result: UniListenerResult<ListenerResultRes>) => void): void;
|
||||
/**
|
||||
* 电话已拨出 主叫端拨出电话后,通过回调 onCallOutgoing 通知当前 call 的详细信息
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onCallOutgoing(listener: (result: UniListenerResult<ListenerResultRes>) => void): void;
|
||||
/**
|
||||
* 被叫端正在振铃,主叫端拨出电话,被叫端收到请求,发出振铃响应时监听
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserRinging(listener: (result: UniListenerResult<ListenerResultRes>) => void): void;
|
||||
/**
|
||||
* 通话出现错误的回调
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onError(listener: (result: UniListenerResult<ListenerResultError>) => void): void;
|
||||
/**
|
||||
* 对端用户切换了媒体类型
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserMediaTypeChanged(listener: (result: UniListenerResult<ListenerResultData>) => void): void;
|
||||
/**
|
||||
* 对端用户关闭了摄像头
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserCameraStateChanged(listener: (result: UniListenerResult<ListenerResultData>) => void): void;
|
||||
/**
|
||||
* 对端用户关闭了麦克风
|
||||
* @param listener 回调函数
|
||||
*/
|
||||
declare function onRemoteUserMicrophoneStateChanged(listener: (result: UniListenerResult<ListenerResultData>) => void): void;
|
||||
/**
|
||||
* 邀请用户
|
||||
* @param userIds 被邀请用户id列表
|
||||
* @param observerUserIds 被邀请观察者id列表 (只能听或看,不能推流的用户)
|
||||
*/
|
||||
declare function inviteUsers(userIds: string[], observerUserIds: string[]): void;
|
||||
/**
|
||||
* 移除监听-接收到通话呼入
|
||||
*/
|
||||
declare function removeCallReceivedListener(): void;
|
||||
/**
|
||||
* 移除监听-通话已接通
|
||||
*/
|
||||
declare function removeCallConnectedListener(): void;
|
||||
/**
|
||||
* 移除监听-通话已结束
|
||||
* @param 挂断原因
|
||||
*/
|
||||
declare function removeCallDisconnectedListener(): void;
|
||||
/**
|
||||
* 移除监听-对端用户加入了通话
|
||||
*/
|
||||
declare function removeRemoteUserJoinedListener(): void;
|
||||
/**
|
||||
* 移除监听-对端用户挂断
|
||||
*/
|
||||
declare function removeRemoteUserLeftListener(): void;
|
||||
/**
|
||||
* 移除监听-有用户被邀请加入通话
|
||||
*/
|
||||
declare function removeRemoteUserInvited(): void;
|
||||
/**
|
||||
* 移除监听-开启或关闭摄像头的回调
|
||||
*/
|
||||
declare function removeEnableCameraListener(): void;
|
||||
/**
|
||||
* 移除监听-切换摄像头回调
|
||||
*/
|
||||
declare function removeSwitchCameraListener(): void;
|
||||
/**
|
||||
* 移除监听-通话出现错误的回调
|
||||
*/
|
||||
declare function removeErrorListener(): void;
|
||||
/**
|
||||
* 移除监听-开始呼叫通话的回调
|
||||
*/
|
||||
declare function removeCallOutgoingListener(): void;
|
||||
/**
|
||||
* 移除监听-对端用户正在振铃
|
||||
*/
|
||||
declare function removeRemoteUserRingingListener(): void;
|
||||
/**
|
||||
* 移除监听-对端用户切换了媒体类型
|
||||
*/
|
||||
declare function removeRemoteUserMediaTypeChangedListener(): void;
|
||||
/**
|
||||
* 获取当前calllib本地存储信息
|
||||
*
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function getCurrentCallSession(): any;
|
||||
/**
|
||||
* 挂断calllib
|
||||
*
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function hangup(): void;
|
||||
/**
|
||||
* 接收calllib
|
||||
*
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function accept(): void;
|
||||
/**
|
||||
* 发起单聊呼叫
|
||||
*
|
||||
* @param targetId 目标ID
|
||||
* @param type 呼叫类型(0:音频 1:音视频)
|
||||
* @param extra 默认传''
|
||||
*
|
||||
*/
|
||||
declare function startSingleCall(targetId: string, type: number, extra: null): void;
|
||||
/**
|
||||
* 发起组呼呼叫
|
||||
*
|
||||
* @param groupId 组ID
|
||||
* @param userIds 群组成员
|
||||
* @param observerUserIds 观察者ID默认为空数组
|
||||
* @param type 呼叫类型(0:音频 1:音视频)
|
||||
* @param extra 默认传''
|
||||
*
|
||||
*/
|
||||
declare function startGroupCall(groupId: string, userIds: Array<string>, observerUserIds: Array<string>, type: number, extra: string): void;
|
||||
/**
|
||||
* 设置预览窗口,此方法需要在视图更新渲染完成后执行
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @param ref ref ID 对应组件的标识
|
||||
* @param type 视频显示模式 0 铺满 1 自适应
|
||||
* @param isZOrderOnTop android only 是否置顶
|
||||
*/
|
||||
declare function setVideoView(userId: string, ref: string, type: number, isZOrderOnTop?: boolean): void;
|
||||
/**
|
||||
* 设置callib是否开启扬声器
|
||||
*
|
||||
* @param isOpen 默认开启
|
||||
*
|
||||
*/
|
||||
declare function enableSpeaker(isOpen: boolean): void;
|
||||
/**
|
||||
* 设置callib是否开启麦克风
|
||||
*
|
||||
* @param isOPen 默认开启
|
||||
*
|
||||
*/
|
||||
declare function enableMicrophone(isOpen: boolean): void;
|
||||
/**
|
||||
* 切换摄像头
|
||||
*
|
||||
* 默认不传参数
|
||||
*
|
||||
*/
|
||||
declare function switchCamera(): void;
|
||||
/**
|
||||
* 获取当前摄像头方式
|
||||
*
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function currentCamera(): any;
|
||||
/**
|
||||
* 开启摄像头摄像头
|
||||
*
|
||||
* @param isOpen 是否开启
|
||||
* @param RCCallIWCamera 对端还是本端
|
||||
*
|
||||
*/
|
||||
declare function enableCamera(isOpen: boolean, camera: RCCallIWCamera): void;
|
||||
/**
|
||||
* 修改通话类型
|
||||
* @param type
|
||||
*/
|
||||
declare function changeMediaType(type: RCCallIWMediaType): void;
|
||||
/**
|
||||
* 设置滤镜
|
||||
* @param filter
|
||||
*/
|
||||
declare function setBeautyFilter(filter: RCCallIWBeautyFilterType): void;
|
||||
/**
|
||||
* 获取当前的滤镜
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function getCurrentBeautyFilter(): any;
|
||||
/**
|
||||
* 设置美颜参数
|
||||
* @param enable 默认关闭
|
||||
* @param RCCallIWBeautyOption 美颜参数
|
||||
*/
|
||||
declare function setBeautyOption(enable: boolean | undefined, option: RCCallIWBeautyOption): void;
|
||||
/**
|
||||
* 获取当前的美颜参数
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function getCurrentBeautyOption(): any;
|
||||
/**
|
||||
* 重置美颜参数和滤镜
|
||||
* 默认不传参数
|
||||
*/
|
||||
declare function resetBeauty(): void;
|
||||
|
||||
export { RCCallIWBeautyFilterType, RCCallIWCallDisconnectedReason, RCCallIWCamera, RCCallIWMediaType, RCUNICallErrorCode, accept, changeMediaType, currentCamera, enableCamera, enableMicrophone, enableSpeaker, getCurrentBeautyFilter, getCurrentBeautyOption, getCurrentCallSession, hangup, init, inviteUsers, onCallConnected, onCallDisconnected, onCallOutgoing, onCallReceived, onError, onRemoteUserCameraStateChanged, onRemoteUserInvited, onRemoteUserJoined, onRemoteUserLeft, onRemoteUserMediaTypeChanged, onRemoteUserMicrophoneStateChanged, onRemoteUserRinging, removeCallConnectedListener, removeCallDisconnectedListener, removeCallOutgoingListener, removeCallReceivedListener, removeEnableCameraListener, removeErrorListener, removeRemoteUserInvited, removeRemoteUserJoinedListener, removeRemoteUserLeftListener, removeRemoteUserMediaTypeChangedListener, removeRemoteUserRingingListener, removeSwitchCameraListener, resetBeauty, setBeautyFilter, setBeautyOption, setVideoView, startGroupCall, startSingleCall, switchCamera, unInit };
|
||||
@@ -1,286 +0,0 @@
|
||||
/*
|
||||
* RCCallUni - v5.1.14-release.1
|
||||
* CommitId - a184e82065a309fc565be987321c44e9da02abbb
|
||||
* Thu Jan 06 2022 16:03:36 GMT+0800 (中国标准时间)
|
||||
* ©2020 RongCloud, Inc. All rights reserved.
|
||||
*/
|
||||
class Logger {
|
||||
tag;
|
||||
|
||||
constructor(tag) {
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
log(str) {
|
||||
console.log(`[${this.tag}] ${new Date().toISOString()} ${str}`);
|
||||
}
|
||||
|
||||
}
|
||||
const logger = new Logger('RCUNICallLib');
|
||||
|
||||
var RCCallIWCamera;
|
||||
|
||||
(function (RCCallIWCamera) {
|
||||
RCCallIWCamera[RCCallIWCamera["NONE"] = -1] = "NONE";
|
||||
RCCallIWCamera[RCCallIWCamera["FRONT"] = 0] = "FRONT";
|
||||
RCCallIWCamera[RCCallIWCamera["BACK"] = 1] = "BACK";
|
||||
})(RCCallIWCamera || (RCCallIWCamera = {}));
|
||||
|
||||
var RCCallIWMediaType;
|
||||
|
||||
(function (RCCallIWMediaType) {
|
||||
RCCallIWMediaType[RCCallIWMediaType["AUDIO"] = 0] = "AUDIO";
|
||||
RCCallIWMediaType[RCCallIWMediaType["AUDIO_VIDEO"] = 1] = "AUDIO_VIDEO";
|
||||
})(RCCallIWMediaType || (RCCallIWMediaType = {}));
|
||||
|
||||
var RCUNICallErrorCode;
|
||||
|
||||
(function (RCUNICallErrorCode) {
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["SUCCESS"] = 0] = "SUCCESS";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["ENGINE_NOT_FOUND"] = 1] = "ENGINE_NOT_FOUND";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["NETWORK_UNAVAILABLE"] = 2] = "NETWORK_UNAVAILABLE";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["ONE_CALL_EXISTED"] = 3] = "ONE_CALL_EXISTED";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["OPERATION_UNAVAILABLE"] = 4] = "OPERATION_UNAVAILABLE";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["INVALID_PARAM"] = 5] = "INVALID_PARAM";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["NETWORK_UNSTABLE"] = 6] = "NETWORK_UNSTABLE";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_REQUEST_FAILED"] = 7] = "MEDIA_REQUEST_FAILED";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_NOT_READY"] = 8] = "MEDIA_SERVER_NOT_READY";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_NOT_INITIALIZED"] = 9] = "MEDIA_SERVER_NOT_INITIALIZED";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_REQUEST_TIMEOUT"] = 10] = "MEDIA_REQUEST_TIMEOUT";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_UNKOWN_ERROR"] = 11] = "MEDIA_UNKOWN_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_KICKED_BY_SERVER_ERROR"] = 12] = "MEDIA_KICKED_BY_SERVER_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_CLOSED_ERROR"] = 13] = "MEDIA_SERVER_CLOSED_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_PUBLISH_ERROR"] = 14] = "MEDIA_SERVER_PUBLISH_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_SUBSCRIBE_ERROR"] = 15] = "MEDIA_SERVER_SUBSCRIBE_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_JOIN_ROOM_REFUSE_ERROR"] = 16] = "MEDIA_JOIN_ROOM_REFUSE_ERROR";
|
||||
})(RCUNICallErrorCode || (RCUNICallErrorCode = {}));
|
||||
|
||||
var RCCallIWCallDisconnectedReason;
|
||||
|
||||
(function (RCCallIWCallDisconnectedReason) {
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["CANCEL"] = 0] = "CANCEL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REJECT"] = 1] = "REJECT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["HANGUP"] = 2] = "HANGUP";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["BUSY_LINE"] = 3] = "BUSY_LINE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["NO_RESPONSE"] = 4] = "NO_RESPONSE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["ENGINE_UNSUPPORTED"] = 5] = "ENGINE_UNSUPPORTED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["NETWORK_ERROR"] = 6] = "NETWORK_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_GET_ERROR"] = 7] = "RESOURCE_GET_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_PUBLISH_ERROR"] = 8] = "RESOURCE_PUBLISH_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_SUBSCRIBE_ERROR"] = 9] = "RESOURCE_SUBSCRIBE_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_CANCEL"] = 10] = "REMOTE_CANCEL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_REJECT"] = 11] = "REMOTE_REJECT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_HANGUP"] = 12] = "REMOTE_HANGUP";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_BUSY_LINE"] = 13] = "REMOTE_BUSY_LINE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_NO_RESPONSE"] = 14] = "REMOTE_NO_RESPONSE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_ENGINE_UNSUPPORTED"] = 15] = "REMOTE_ENGINE_UNSUPPORTED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_NETWORK_ERROR"] = 16] = "REMOTE_NETWORK_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_GET_ERROR"] = 17] = "REMOTE_RESOURCE_GET_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_PUBLISH_ERROR"] = 18] = "REMOTE_RESOURCE_PUBLISH_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_SUBSCRIBE_ERROR"] = 19] = "REMOTE_RESOURCE_SUBSCRIBE_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["KICKED_BY_OTHER_CALL"] = 20] = "KICKED_BY_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["IN_OTHER_CALL"] = 21] = "IN_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["KICKED_BY_SERVER"] = 22] = "KICKED_BY_SERVER";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_KICKED_BY_OTHER_CALL"] = 23] = "REMOTE_KICKED_BY_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_IN_OTHER_CALL"] = 24] = "REMOTE_IN_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_KICKED_BY_SERVER"] = 25] = "REMOTE_KICKED_BY_SERVER";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["ACCEPT_BY_OTHER_CLIENT"] = 26] = "ACCEPT_BY_OTHER_CLIENT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["HANGUP_BY_OTHER_CLIENT"] = 27] = "HANGUP_BY_OTHER_CLIENT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REJECTED_BY_BLACKLIST"] = 28] = "REJECTED_BY_BLACKLIST";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["SERVICE_NOT_OPENED"] = 29] = "SERVICE_NOT_OPENED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["DROP_TO_OBSERVER"] = 30] = "DROP_TO_OBSERVER";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["INIT_VIDEO_ERROR"] = 31] = "INIT_VIDEO_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["OTHER_DEVICE_HAD_ACCEPTED"] = 32] = "OTHER_DEVICE_HAD_ACCEPTED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["SERVICE_DISCONNECTED"] = 33] = "SERVICE_DISCONNECTED";
|
||||
})(RCCallIWCallDisconnectedReason || (RCCallIWCallDisconnectedReason = {}));
|
||||
|
||||
var RCCallIWBeautyFilterType;
|
||||
|
||||
(function (RCCallIWBeautyFilterType) {
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["NONE"] = 0] = "NONE";
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["ESTHETIC"] = 1] = "ESTHETIC";
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["FRESH"] = 2] = "FRESH";
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["ROMANTIC"] = 3] = "ROMANTIC";
|
||||
})(RCCallIWBeautyFilterType || (RCCallIWBeautyFilterType = {}));
|
||||
|
||||
const call = uni.requireNativePlugin('RongCloud-Call-RCUniCall');
|
||||
const Platform = uni.getSystemInfoSync().platform;
|
||||
logger.log('已进入index.js');
|
||||
function init() {
|
||||
logger.log(`init Platform->${Platform}`);
|
||||
call.init({});
|
||||
}
|
||||
function unInit() {
|
||||
logger.log(`unInit Platform->${Platform}`);
|
||||
call.unInit();
|
||||
}
|
||||
function onCallReceived(listener) {
|
||||
logger.log(`Engine:OnCallReceived 监听通话呼入 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallReceived", listener);
|
||||
}
|
||||
function onCallDisconnected(listener) {
|
||||
logger.log(`Engine:OnCallDisconnected 监听通话结束 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallDisconnected", listener);
|
||||
}
|
||||
function onCallConnected(listener) {
|
||||
logger.log(`Engine:OnCallConnected 已建立通话通话接通 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallConnected", listener);
|
||||
}
|
||||
function onRemoteUserInvited(listener) {
|
||||
logger.log(`Engine:OnRemoteUserInvited 通话中的某一个参与者,邀请好友加入通话 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserInvited", listener);
|
||||
}
|
||||
function onRemoteUserJoined(listener) {
|
||||
logger.log(`Engine:OnRemoteUserJoined 对端用户加入通话 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserJoined", listener);
|
||||
}
|
||||
function onRemoteUserLeft(listener) {
|
||||
logger.log(`Engine:OnRemoteUserLeft 对端用户挂断(群聊触发) Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserLeft", listener);
|
||||
}
|
||||
function onCallOutgoing(listener) {
|
||||
logger.log(`Engine:OnCallOutgoing 电话已拨出,通知当前 call 的详细信息 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallOutgoing", listener);
|
||||
}
|
||||
function onRemoteUserRinging(listener) {
|
||||
logger.log(`Engine:OnRemoteUserRinging 被叫端收到请求,发出振铃响应时监听 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserRinging", listener);
|
||||
}
|
||||
function onError(listener) {
|
||||
logger.log(`Engine:OnError 通话出现错误 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnError", listener);
|
||||
}
|
||||
function onRemoteUserMediaTypeChanged(listener) {
|
||||
logger.log(`Engine:OnRemoteUserMediaTypeChanged 对端用户切换了媒体类型 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserMediaTypeChanged", listener);
|
||||
}
|
||||
function onRemoteUserCameraStateChanged(listener) {
|
||||
logger.log(`Engine:OnRemoteUserCameraStateChanged 对端用户关闭了摄像头 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserCameraStateChanged", listener);
|
||||
}
|
||||
function onRemoteUserMicrophoneStateChanged(listener) {
|
||||
logger.log(`Engine:OnRemoteUserMicrophoneStateChanged 对端用户关闭了麦克风 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserMicrophoneStateChanged", listener);
|
||||
}
|
||||
function inviteUsers(userIds, observerUserIds) {
|
||||
logger.log(`inviteUsers 邀请用户->${userIds} Platform->${Platform}`);
|
||||
call.inviteUsers(userIds, observerUserIds);
|
||||
}
|
||||
function removeCallReceivedListener() {
|
||||
logger.log(`removeCallReceivedListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallReceived');
|
||||
}
|
||||
function removeCallConnectedListener() {
|
||||
logger.log(`removeCallConnectedListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallConnected');
|
||||
}
|
||||
function removeCallDisconnectedListener() {
|
||||
logger.log(`removeCallDisconnectedListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallDisconnected');
|
||||
}
|
||||
function removeRemoteUserJoinedListener() {
|
||||
logger.log(`removeRemoteUserJoinedListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserJoined');
|
||||
}
|
||||
function removeRemoteUserLeftListener() {
|
||||
logger.log(`removeRemoteUserLeftListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserLeft');
|
||||
}
|
||||
function removeRemoteUserInvited() {
|
||||
logger.log(`removeRemoteUserInvited`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserInvited');
|
||||
}
|
||||
function removeEnableCameraListener() {
|
||||
logger.log(`removeEnableCameraListener`);
|
||||
call.removeAllEventListeners('Engine:OnEnableCamera');
|
||||
}
|
||||
function removeSwitchCameraListener() {
|
||||
logger.log(`removeSwitchCameraListener`);
|
||||
call.removeAllEventListeners('Engine:OnSwitchCamera');
|
||||
}
|
||||
function removeErrorListener() {
|
||||
logger.log(`removeErrorListener`);
|
||||
call.removeAllEventListeners('Engine:OnError');
|
||||
}
|
||||
function removeCallOutgoingListener() {
|
||||
logger.log(`removeCallOutgoingListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallOutgoing');
|
||||
}
|
||||
function removeRemoteUserRingingListener() {
|
||||
logger.log(`removeRemoteUserRingingListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserRinging');
|
||||
}
|
||||
function removeRemoteUserMediaTypeChangedListener() {
|
||||
logger.log(`removeRemoteUserMediaTypeChangedListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserMediaTypeChanged');
|
||||
}
|
||||
function getCurrentCallSession() {
|
||||
logger.log(`getCurrentCallSession Platform->${Platform}`);
|
||||
return call.getCurrentCallSession();
|
||||
}
|
||||
function hangup() {
|
||||
logger.log(`hangup Platform->${Platform}`);
|
||||
call.hangup();
|
||||
}
|
||||
function accept() {
|
||||
logger.log(`accept Platform->${Platform}`);
|
||||
call.accept();
|
||||
}
|
||||
function startSingleCall(targetId, type, extra) {
|
||||
logger.log(`startSingleCall targetId->${targetId} type=>${type} extra=>${extra} Platform->${Platform}`);
|
||||
call.startSingleCall(targetId, type, extra);
|
||||
}
|
||||
function startGroupCall(groupId, userIds, observerUserIds, type, extra) {
|
||||
logger.log(`startGroupCall groupId->${groupId} userIds=>${userIds} observerUserIds=>${observerUserIds} type=>${type} extra=>${extra} Platform->${Platform}`);
|
||||
call.startGroupCall(groupId, userIds, observerUserIds, type, extra);
|
||||
}
|
||||
function setVideoView(userId, ref, type, isZOrderOnTop = false) {
|
||||
logger.log(`setVideoView userId->${userId} ref=>${ref} type=>${type} isZOrderOnTop=>${isZOrderOnTop} Platform->${Platform}`);
|
||||
Platform === 'android' ? call.setVideoView(userId, ref, type, isZOrderOnTop) : call.setVideoView(userId, ref, type);
|
||||
}
|
||||
function enableSpeaker(isOpen) {
|
||||
logger.log(`enableSpeaker isOPen->${isOpen} Platform->${Platform}`);
|
||||
call.enableSpeaker(isOpen);
|
||||
}
|
||||
function enableMicrophone(isOpen) {
|
||||
logger.log(`enableMicrophone isOPen->${isOpen} Platform->${Platform}`);
|
||||
call.enableMicrophone(isOpen);
|
||||
}
|
||||
function switchCamera() {
|
||||
logger.log(`switchCamera Platform->${Platform}`);
|
||||
call.switchCamera();
|
||||
}
|
||||
function currentCamera() {
|
||||
logger.log(`currentCamera Platform->${Platform}`);
|
||||
return call.currentCamera();
|
||||
}
|
||||
function enableCamera(isOpen, camera) {
|
||||
logger.log(`enableCamera isOpen=>${isOpen} camera=>${camera} Platform->${Platform}`);
|
||||
call.enableCamera(isOpen, camera);
|
||||
}
|
||||
function changeMediaType(type) {
|
||||
logger.log(`changeMediaType type=>${type} Platform->${Platform}`);
|
||||
call.changeMediaType(type);
|
||||
}
|
||||
function setBeautyFilter(filter) {
|
||||
logger.log(`setBeautyFilter filter=>${filter} Platform->${Platform}`);
|
||||
call.setBeautyFilter(filter);
|
||||
}
|
||||
function getCurrentBeautyFilter() {
|
||||
logger.log(`getCurrentBeautyFilter Platform->${Platform}`);
|
||||
return call.getCurrentBeautyFilter();
|
||||
}
|
||||
function setBeautyOption(enable = false, option) {
|
||||
logger.log(`setBeautyOption enable=>${enable} option=>${option} Platform->${Platform}`);
|
||||
call.setBeautyOption(enable, option);
|
||||
}
|
||||
function getCurrentBeautyOption() {
|
||||
logger.log(`getCurrentBeautyOption Platform->${Platform}`);
|
||||
return call.getCurrentBeautyOption();
|
||||
}
|
||||
function resetBeauty() {
|
||||
logger.log(`resetBeauty Platform->${Platform}`);
|
||||
call.resetBeauty();
|
||||
}
|
||||
|
||||
export { RCCallIWBeautyFilterType, RCCallIWCallDisconnectedReason, RCCallIWCamera, RCCallIWMediaType, RCUNICallErrorCode, accept, changeMediaType, currentCamera, enableCamera, enableMicrophone, enableSpeaker, getCurrentBeautyFilter, getCurrentBeautyOption, getCurrentCallSession, hangup, init, inviteUsers, onCallConnected, onCallDisconnected, onCallOutgoing, onCallReceived, onError, onRemoteUserCameraStateChanged, onRemoteUserInvited, onRemoteUserJoined, onRemoteUserLeft, onRemoteUserMediaTypeChanged, onRemoteUserMicrophoneStateChanged, onRemoteUserRinging, removeCallConnectedListener, removeCallDisconnectedListener, removeCallOutgoingListener, removeCallReceivedListener, removeEnableCameraListener, removeErrorListener, removeRemoteUserInvited, removeRemoteUserJoinedListener, removeRemoteUserLeftListener, removeRemoteUserMediaTypeChangedListener, removeRemoteUserRingingListener, removeSwitchCameraListener, resetBeauty, setBeautyFilter, setBeautyOption, setVideoView, startGroupCall, startSingleCall, switchCamera, unInit };
|
||||
@@ -1,333 +0,0 @@
|
||||
/*
|
||||
* RCCallUni - v5.1.14-release.1
|
||||
* CommitId - a184e82065a309fc565be987321c44e9da02abbb
|
||||
* Thu Jan 06 2022 16:03:36 GMT+0800 (中国标准时间)
|
||||
* ©2020 RongCloud, Inc. All rights reserved.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
class Logger {
|
||||
tag;
|
||||
|
||||
constructor(tag) {
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
log(str) {
|
||||
console.log(`[${this.tag}] ${new Date().toISOString()} ${str}`);
|
||||
}
|
||||
|
||||
}
|
||||
const logger = new Logger('RCUNICallLib');
|
||||
|
||||
exports.RCCallIWCamera = void 0;
|
||||
|
||||
(function (RCCallIWCamera) {
|
||||
RCCallIWCamera[RCCallIWCamera["NONE"] = -1] = "NONE";
|
||||
RCCallIWCamera[RCCallIWCamera["FRONT"] = 0] = "FRONT";
|
||||
RCCallIWCamera[RCCallIWCamera["BACK"] = 1] = "BACK";
|
||||
})(exports.RCCallIWCamera || (exports.RCCallIWCamera = {}));
|
||||
|
||||
exports.RCCallIWMediaType = void 0;
|
||||
|
||||
(function (RCCallIWMediaType) {
|
||||
RCCallIWMediaType[RCCallIWMediaType["AUDIO"] = 0] = "AUDIO";
|
||||
RCCallIWMediaType[RCCallIWMediaType["AUDIO_VIDEO"] = 1] = "AUDIO_VIDEO";
|
||||
})(exports.RCCallIWMediaType || (exports.RCCallIWMediaType = {}));
|
||||
|
||||
exports.RCUNICallErrorCode = void 0;
|
||||
|
||||
(function (RCUNICallErrorCode) {
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["SUCCESS"] = 0] = "SUCCESS";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["ENGINE_NOT_FOUND"] = 1] = "ENGINE_NOT_FOUND";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["NETWORK_UNAVAILABLE"] = 2] = "NETWORK_UNAVAILABLE";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["ONE_CALL_EXISTED"] = 3] = "ONE_CALL_EXISTED";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["OPERATION_UNAVAILABLE"] = 4] = "OPERATION_UNAVAILABLE";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["INVALID_PARAM"] = 5] = "INVALID_PARAM";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["NETWORK_UNSTABLE"] = 6] = "NETWORK_UNSTABLE";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_REQUEST_FAILED"] = 7] = "MEDIA_REQUEST_FAILED";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_NOT_READY"] = 8] = "MEDIA_SERVER_NOT_READY";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_NOT_INITIALIZED"] = 9] = "MEDIA_SERVER_NOT_INITIALIZED";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_REQUEST_TIMEOUT"] = 10] = "MEDIA_REQUEST_TIMEOUT";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_UNKOWN_ERROR"] = 11] = "MEDIA_UNKOWN_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_KICKED_BY_SERVER_ERROR"] = 12] = "MEDIA_KICKED_BY_SERVER_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_CLOSED_ERROR"] = 13] = "MEDIA_SERVER_CLOSED_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_PUBLISH_ERROR"] = 14] = "MEDIA_SERVER_PUBLISH_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_SUBSCRIBE_ERROR"] = 15] = "MEDIA_SERVER_SUBSCRIBE_ERROR";
|
||||
RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_JOIN_ROOM_REFUSE_ERROR"] = 16] = "MEDIA_JOIN_ROOM_REFUSE_ERROR";
|
||||
})(exports.RCUNICallErrorCode || (exports.RCUNICallErrorCode = {}));
|
||||
|
||||
exports.RCCallIWCallDisconnectedReason = void 0;
|
||||
|
||||
(function (RCCallIWCallDisconnectedReason) {
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["CANCEL"] = 0] = "CANCEL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REJECT"] = 1] = "REJECT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["HANGUP"] = 2] = "HANGUP";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["BUSY_LINE"] = 3] = "BUSY_LINE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["NO_RESPONSE"] = 4] = "NO_RESPONSE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["ENGINE_UNSUPPORTED"] = 5] = "ENGINE_UNSUPPORTED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["NETWORK_ERROR"] = 6] = "NETWORK_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_GET_ERROR"] = 7] = "RESOURCE_GET_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_PUBLISH_ERROR"] = 8] = "RESOURCE_PUBLISH_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_SUBSCRIBE_ERROR"] = 9] = "RESOURCE_SUBSCRIBE_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_CANCEL"] = 10] = "REMOTE_CANCEL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_REJECT"] = 11] = "REMOTE_REJECT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_HANGUP"] = 12] = "REMOTE_HANGUP";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_BUSY_LINE"] = 13] = "REMOTE_BUSY_LINE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_NO_RESPONSE"] = 14] = "REMOTE_NO_RESPONSE";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_ENGINE_UNSUPPORTED"] = 15] = "REMOTE_ENGINE_UNSUPPORTED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_NETWORK_ERROR"] = 16] = "REMOTE_NETWORK_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_GET_ERROR"] = 17] = "REMOTE_RESOURCE_GET_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_PUBLISH_ERROR"] = 18] = "REMOTE_RESOURCE_PUBLISH_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_SUBSCRIBE_ERROR"] = 19] = "REMOTE_RESOURCE_SUBSCRIBE_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["KICKED_BY_OTHER_CALL"] = 20] = "KICKED_BY_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["IN_OTHER_CALL"] = 21] = "IN_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["KICKED_BY_SERVER"] = 22] = "KICKED_BY_SERVER";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_KICKED_BY_OTHER_CALL"] = 23] = "REMOTE_KICKED_BY_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_IN_OTHER_CALL"] = 24] = "REMOTE_IN_OTHER_CALL";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_KICKED_BY_SERVER"] = 25] = "REMOTE_KICKED_BY_SERVER";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["ACCEPT_BY_OTHER_CLIENT"] = 26] = "ACCEPT_BY_OTHER_CLIENT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["HANGUP_BY_OTHER_CLIENT"] = 27] = "HANGUP_BY_OTHER_CLIENT";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REJECTED_BY_BLACKLIST"] = 28] = "REJECTED_BY_BLACKLIST";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["SERVICE_NOT_OPENED"] = 29] = "SERVICE_NOT_OPENED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["DROP_TO_OBSERVER"] = 30] = "DROP_TO_OBSERVER";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["INIT_VIDEO_ERROR"] = 31] = "INIT_VIDEO_ERROR";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["OTHER_DEVICE_HAD_ACCEPTED"] = 32] = "OTHER_DEVICE_HAD_ACCEPTED";
|
||||
RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["SERVICE_DISCONNECTED"] = 33] = "SERVICE_DISCONNECTED";
|
||||
})(exports.RCCallIWCallDisconnectedReason || (exports.RCCallIWCallDisconnectedReason = {}));
|
||||
|
||||
exports.RCCallIWBeautyFilterType = void 0;
|
||||
|
||||
(function (RCCallIWBeautyFilterType) {
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["NONE"] = 0] = "NONE";
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["ESTHETIC"] = 1] = "ESTHETIC";
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["FRESH"] = 2] = "FRESH";
|
||||
RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["ROMANTIC"] = 3] = "ROMANTIC";
|
||||
})(exports.RCCallIWBeautyFilterType || (exports.RCCallIWBeautyFilterType = {}));
|
||||
|
||||
const call = uni.requireNativePlugin('RongCloud-Call-RCUniCall');
|
||||
const Platform = uni.getSystemInfoSync().platform;
|
||||
logger.log('已进入index.js');
|
||||
function init() {
|
||||
logger.log(`init Platform->${Platform}`);
|
||||
call.init({});
|
||||
}
|
||||
function unInit() {
|
||||
logger.log(`unInit Platform->${Platform}`);
|
||||
call.unInit();
|
||||
}
|
||||
function onCallReceived(listener) {
|
||||
logger.log(`Engine:OnCallReceived 监听通话呼入 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallReceived", listener);
|
||||
}
|
||||
function onCallDisconnected(listener) {
|
||||
logger.log(`Engine:OnCallDisconnected 监听通话结束 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallDisconnected", listener);
|
||||
}
|
||||
function onCallConnected(listener) {
|
||||
logger.log(`Engine:OnCallConnected 已建立通话通话接通 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallConnected", listener);
|
||||
}
|
||||
function onRemoteUserInvited(listener) {
|
||||
logger.log(`Engine:OnRemoteUserInvited 通话中的某一个参与者,邀请好友加入通话 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserInvited", listener);
|
||||
}
|
||||
function onRemoteUserJoined(listener) {
|
||||
logger.log(`Engine:OnRemoteUserJoined 对端用户加入通话 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserJoined", listener);
|
||||
}
|
||||
function onRemoteUserLeft(listener) {
|
||||
logger.log(`Engine:OnRemoteUserLeft 对端用户挂断(群聊触发) Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserLeft", listener);
|
||||
}
|
||||
function onCallOutgoing(listener) {
|
||||
logger.log(`Engine:OnCallOutgoing 电话已拨出,通知当前 call 的详细信息 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnCallOutgoing", listener);
|
||||
}
|
||||
function onRemoteUserRinging(listener) {
|
||||
logger.log(`Engine:OnRemoteUserRinging 被叫端收到请求,发出振铃响应时监听 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserRinging", listener);
|
||||
}
|
||||
function onError(listener) {
|
||||
logger.log(`Engine:OnError 通话出现错误 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnError", listener);
|
||||
}
|
||||
function onRemoteUserMediaTypeChanged(listener) {
|
||||
logger.log(`Engine:OnRemoteUserMediaTypeChanged 对端用户切换了媒体类型 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserMediaTypeChanged", listener);
|
||||
}
|
||||
function onRemoteUserCameraStateChanged(listener) {
|
||||
logger.log(`Engine:OnRemoteUserCameraStateChanged 对端用户关闭了摄像头 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserCameraStateChanged", listener);
|
||||
}
|
||||
function onRemoteUserMicrophoneStateChanged(listener) {
|
||||
logger.log(`Engine:OnRemoteUserMicrophoneStateChanged 对端用户关闭了麦克风 Platform->${Platform}`);
|
||||
call.addEventListener("Engine:OnRemoteUserMicrophoneStateChanged", listener);
|
||||
}
|
||||
function inviteUsers(userIds, observerUserIds) {
|
||||
logger.log(`inviteUsers 邀请用户->${userIds} Platform->${Platform}`);
|
||||
call.inviteUsers(userIds, observerUserIds);
|
||||
}
|
||||
function removeCallReceivedListener() {
|
||||
logger.log(`removeCallReceivedListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallReceived');
|
||||
}
|
||||
function removeCallConnectedListener() {
|
||||
logger.log(`removeCallConnectedListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallConnected');
|
||||
}
|
||||
function removeCallDisconnectedListener() {
|
||||
logger.log(`removeCallDisconnectedListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallDisconnected');
|
||||
}
|
||||
function removeRemoteUserJoinedListener() {
|
||||
logger.log(`removeRemoteUserJoinedListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserJoined');
|
||||
}
|
||||
function removeRemoteUserLeftListener() {
|
||||
logger.log(`removeRemoteUserLeftListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserLeft');
|
||||
}
|
||||
function removeRemoteUserInvited() {
|
||||
logger.log(`removeRemoteUserInvited`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserInvited');
|
||||
}
|
||||
function removeEnableCameraListener() {
|
||||
logger.log(`removeEnableCameraListener`);
|
||||
call.removeAllEventListeners('Engine:OnEnableCamera');
|
||||
}
|
||||
function removeSwitchCameraListener() {
|
||||
logger.log(`removeSwitchCameraListener`);
|
||||
call.removeAllEventListeners('Engine:OnSwitchCamera');
|
||||
}
|
||||
function removeErrorListener() {
|
||||
logger.log(`removeErrorListener`);
|
||||
call.removeAllEventListeners('Engine:OnError');
|
||||
}
|
||||
function removeCallOutgoingListener() {
|
||||
logger.log(`removeCallOutgoingListener`);
|
||||
call.removeAllEventListeners('Engine:OnCallOutgoing');
|
||||
}
|
||||
function removeRemoteUserRingingListener() {
|
||||
logger.log(`removeRemoteUserRingingListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserRinging');
|
||||
}
|
||||
function removeRemoteUserMediaTypeChangedListener() {
|
||||
logger.log(`removeRemoteUserMediaTypeChangedListener`);
|
||||
call.removeAllEventListeners('Engine:OnRemoteUserMediaTypeChanged');
|
||||
}
|
||||
function getCurrentCallSession() {
|
||||
logger.log(`getCurrentCallSession Platform->${Platform}`);
|
||||
return call.getCurrentCallSession();
|
||||
}
|
||||
function hangup() {
|
||||
logger.log(`hangup Platform->${Platform}`);
|
||||
call.hangup();
|
||||
}
|
||||
function accept() {
|
||||
logger.log(`accept Platform->${Platform}`);
|
||||
call.accept();
|
||||
}
|
||||
function startSingleCall(targetId, type, extra) {
|
||||
logger.log(`startSingleCall targetId->${targetId} type=>${type} extra=>${extra} Platform->${Platform}`);
|
||||
call.startSingleCall(targetId, type, extra);
|
||||
}
|
||||
function startGroupCall(groupId, userIds, observerUserIds, type, extra) {
|
||||
logger.log(`startGroupCall groupId->${groupId} userIds=>${userIds} observerUserIds=>${observerUserIds} type=>${type} extra=>${extra} Platform->${Platform}`);
|
||||
call.startGroupCall(groupId, userIds, observerUserIds, type, extra);
|
||||
}
|
||||
function setVideoView(userId, ref, type, isZOrderOnTop = false) {
|
||||
logger.log(`setVideoView userId->${userId} ref=>${ref} type=>${type} isZOrderOnTop=>${isZOrderOnTop} Platform->${Platform}`);
|
||||
Platform === 'android' ? call.setVideoView(userId, ref, type, isZOrderOnTop) : call.setVideoView(userId, ref, type);
|
||||
}
|
||||
function enableSpeaker(isOpen) {
|
||||
logger.log(`enableSpeaker isOPen->${isOpen} Platform->${Platform}`);
|
||||
call.enableSpeaker(isOpen);
|
||||
}
|
||||
function enableMicrophone(isOpen) {
|
||||
logger.log(`enableMicrophone isOPen->${isOpen} Platform->${Platform}`);
|
||||
call.enableMicrophone(isOpen);
|
||||
}
|
||||
function switchCamera() {
|
||||
logger.log(`switchCamera Platform->${Platform}`);
|
||||
call.switchCamera();
|
||||
}
|
||||
function currentCamera() {
|
||||
logger.log(`currentCamera Platform->${Platform}`);
|
||||
return call.currentCamera();
|
||||
}
|
||||
function enableCamera(isOpen, camera) {
|
||||
logger.log(`enableCamera isOpen=>${isOpen} camera=>${camera} Platform->${Platform}`);
|
||||
call.enableCamera(isOpen, camera);
|
||||
}
|
||||
function changeMediaType(type) {
|
||||
logger.log(`changeMediaType type=>${type} Platform->${Platform}`);
|
||||
call.changeMediaType(type);
|
||||
}
|
||||
function setBeautyFilter(filter) {
|
||||
logger.log(`setBeautyFilter filter=>${filter} Platform->${Platform}`);
|
||||
call.setBeautyFilter(filter);
|
||||
}
|
||||
function getCurrentBeautyFilter() {
|
||||
logger.log(`getCurrentBeautyFilter Platform->${Platform}`);
|
||||
return call.getCurrentBeautyFilter();
|
||||
}
|
||||
function setBeautyOption(enable = false, option) {
|
||||
logger.log(`setBeautyOption enable=>${enable} option=>${option} Platform->${Platform}`);
|
||||
call.setBeautyOption(enable, option);
|
||||
}
|
||||
function getCurrentBeautyOption() {
|
||||
logger.log(`getCurrentBeautyOption Platform->${Platform}`);
|
||||
return call.getCurrentBeautyOption();
|
||||
}
|
||||
function resetBeauty() {
|
||||
logger.log(`resetBeauty Platform->${Platform}`);
|
||||
call.resetBeauty();
|
||||
}
|
||||
|
||||
exports.accept = accept;
|
||||
exports.changeMediaType = changeMediaType;
|
||||
exports.currentCamera = currentCamera;
|
||||
exports.enableCamera = enableCamera;
|
||||
exports.enableMicrophone = enableMicrophone;
|
||||
exports.enableSpeaker = enableSpeaker;
|
||||
exports.getCurrentBeautyFilter = getCurrentBeautyFilter;
|
||||
exports.getCurrentBeautyOption = getCurrentBeautyOption;
|
||||
exports.getCurrentCallSession = getCurrentCallSession;
|
||||
exports.hangup = hangup;
|
||||
exports.init = init;
|
||||
exports.inviteUsers = inviteUsers;
|
||||
exports.onCallConnected = onCallConnected;
|
||||
exports.onCallDisconnected = onCallDisconnected;
|
||||
exports.onCallOutgoing = onCallOutgoing;
|
||||
exports.onCallReceived = onCallReceived;
|
||||
exports.onError = onError;
|
||||
exports.onRemoteUserCameraStateChanged = onRemoteUserCameraStateChanged;
|
||||
exports.onRemoteUserInvited = onRemoteUserInvited;
|
||||
exports.onRemoteUserJoined = onRemoteUserJoined;
|
||||
exports.onRemoteUserLeft = onRemoteUserLeft;
|
||||
exports.onRemoteUserMediaTypeChanged = onRemoteUserMediaTypeChanged;
|
||||
exports.onRemoteUserMicrophoneStateChanged = onRemoteUserMicrophoneStateChanged;
|
||||
exports.onRemoteUserRinging = onRemoteUserRinging;
|
||||
exports.removeCallConnectedListener = removeCallConnectedListener;
|
||||
exports.removeCallDisconnectedListener = removeCallDisconnectedListener;
|
||||
exports.removeCallOutgoingListener = removeCallOutgoingListener;
|
||||
exports.removeCallReceivedListener = removeCallReceivedListener;
|
||||
exports.removeEnableCameraListener = removeEnableCameraListener;
|
||||
exports.removeErrorListener = removeErrorListener;
|
||||
exports.removeRemoteUserInvited = removeRemoteUserInvited;
|
||||
exports.removeRemoteUserJoinedListener = removeRemoteUserJoinedListener;
|
||||
exports.removeRemoteUserLeftListener = removeRemoteUserLeftListener;
|
||||
exports.removeRemoteUserMediaTypeChangedListener = removeRemoteUserMediaTypeChangedListener;
|
||||
exports.removeRemoteUserRingingListener = removeRemoteUserRingingListener;
|
||||
exports.removeSwitchCameraListener = removeSwitchCameraListener;
|
||||
exports.resetBeauty = resetBeauty;
|
||||
exports.setBeautyFilter = setBeautyFilter;
|
||||
exports.setBeautyOption = setBeautyOption;
|
||||
exports.setVideoView = setVideoView;
|
||||
exports.startGroupCall = startGroupCall;
|
||||
exports.startSingleCall = startSingleCall;
|
||||
exports.switchCamera = switchCamera;
|
||||
exports.unInit = unInit;
|
||||
@@ -1,80 +0,0 @@
|
||||
{
|
||||
"id": "RongCloud-CallWrapper",
|
||||
"displayName": "RongCloud-CallWrapper",
|
||||
"version": "5.1.15",
|
||||
"description": "RongCloud-CallWrapper",
|
||||
"keywords": [
|
||||
"RongCloud-CallWrapper"
|
||||
],
|
||||
"repository": "",
|
||||
"engines": {
|
||||
"HBuilderX": "^3.1.0"
|
||||
},
|
||||
"dcloudext": {
|
||||
"category": [
|
||||
"JS SDK",
|
||||
"通用 SDK"
|
||||
],
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "插件不采集任何数据",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": ""
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": [],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y"
|
||||
},
|
||||
"client": {
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
},
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "y"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "n",
|
||||
"Android Browser": "n",
|
||||
"微信浏览器(Android)": "n",
|
||||
"QQ浏览器(Android)": "n"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "n",
|
||||
"IE": "n",
|
||||
"Edge": "n",
|
||||
"Firefox": "n",
|
||||
"Safari": "n"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "n",
|
||||
"阿里": "n",
|
||||
"百度": "n",
|
||||
"字节跳动": "n",
|
||||
"QQ": "n"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "n",
|
||||
"联盟": "n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
# RongCloud-CallWrapper
|
||||
@@ -1,4 +0,0 @@
|
||||
## 5.1.3-7(2022-01-19)
|
||||
调整私聊已读回执回调参数
|
||||
## 0.0.1(2022-01-19)
|
||||
从npm迁入插件市场
|
||||
1719
uni_modules/RongCloud-IMWrapper/js_sdk/index.d.ts
vendored
@@ -1,80 +0,0 @@
|
||||
{
|
||||
"id": "RongCloud-IMWrapper",
|
||||
"displayName": "RongCloud-IMWrapper",
|
||||
"version": "5.1.3-7",
|
||||
"description": "融云IM原生插件包装层",
|
||||
"keywords": [
|
||||
"RongCloud-IMWrapper"
|
||||
],
|
||||
"repository": "",
|
||||
"engines": {
|
||||
"HBuilderX": "^3.1.0"
|
||||
},
|
||||
"dcloudext": {
|
||||
"category": [
|
||||
"JS SDK",
|
||||
"通用 SDK"
|
||||
],
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "插件不采集任何数据",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": ""
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": [],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y"
|
||||
},
|
||||
"client": {
|
||||
"Vue": {
|
||||
"vue2": "n",
|
||||
"vue3": "n"
|
||||
},
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "y"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "n",
|
||||
"Android Browser": "n",
|
||||
"微信浏览器(Android)": "n",
|
||||
"QQ浏览器(Android)": "n"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "n",
|
||||
"IE": "n",
|
||||
"Edge": "n",
|
||||
"Firefox": "n",
|
||||
"Safari": "n"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "n",
|
||||
"阿里": "n",
|
||||
"百度": "n",
|
||||
"字节跳动": "n",
|
||||
"QQ": "n"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "n",
|
||||
"联盟": "n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
# RongCloud-IMWrapper
|
||||
60
uni_modules/uni-popup/changelog.md
Normal file
@@ -0,0 +1,60 @@
|
||||
## 1.7.9(2022-04-02)
|
||||
- 修复 弹出层内部无法滚动的bug
|
||||
## 1.7.8(2022-03-28)
|
||||
- 修复 小程序中高度错误的bug
|
||||
## 1.7.7(2022-03-17)
|
||||
- 修复 快速调用open出现问题的Bug
|
||||
## 1.7.6(2022-02-14)
|
||||
- 修复 safeArea 属性不能设置为false的bug
|
||||
## 1.7.5(2022-01-19)
|
||||
- 修复 isMaskClick 失效的bug
|
||||
## 1.7.4(2022-01-19)
|
||||
- 新增 cancelText \ confirmText 属性 ,可自定义文本
|
||||
- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
|
||||
- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
|
||||
## 1.7.3(2022-01-13)
|
||||
- 修复 设置 safeArea 属性不生效的bug
|
||||
## 1.7.2(2021-11-26)
|
||||
- 优化 组件示例
|
||||
## 1.7.1(2021-11-26)
|
||||
- 修复 vuedoc 文字错误
|
||||
## 1.7.0(2021-11-19)
|
||||
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
||||
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
|
||||
## 1.6.2(2021-08-24)
|
||||
- 新增 支持国际化
|
||||
## 1.6.1(2021-07-30)
|
||||
- 优化 vue3下事件警告的问题
|
||||
## 1.6.0(2021-07-13)
|
||||
- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
|
||||
## 1.5.0(2021-06-23)
|
||||
- 新增 mask-click 遮罩层点击事件
|
||||
## 1.4.5(2021-06-22)
|
||||
- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
|
||||
## 1.4.4(2021-06-18)
|
||||
- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
|
||||
## 1.4.3(2021-06-08)
|
||||
- 修复 错误的 watch 字段
|
||||
- 修复 safeArea 属性不生效的问题
|
||||
- 修复 点击内容,再点击遮罩无法关闭的Bug
|
||||
## 1.4.2(2021-05-12)
|
||||
- 新增 组件示例地址
|
||||
## 1.4.1(2021-04-29)
|
||||
- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
|
||||
## 1.4.0 (2021-04-29)
|
||||
- 新增 type 属性的 left\right 值,支持左右弹出
|
||||
- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
|
||||
- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
|
||||
- 新增 safeArea 属性,是否适配底部安全区
|
||||
- 修复 App\h5\微信小程序底部安全区占位不对的Bug
|
||||
- 修复 App 端弹出等待的Bug
|
||||
- 优化 提升低配设备性能,优化动画卡顿问题
|
||||
- 优化 更简单的组件自定义方式
|
||||
## 1.2.9(2021-02-05)
|
||||
- 优化 组件引用关系,通过uni_modules引用组件
|
||||
## 1.2.8(2021-02-05)
|
||||
- 调整为uni_modules目录规范
|
||||
## 1.2.7(2021-02-05)
|
||||
- 调整为uni_modules目录规范
|
||||
- 新增 支持 PC 端
|
||||
- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端
|
||||
@@ -0,0 +1,45 @@
|
||||
// #ifdef H5
|
||||
export default {
|
||||
name: 'Keypress',
|
||||
props: {
|
||||
disable: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
const keyNames = {
|
||||
esc: ['Esc', 'Escape'],
|
||||
tab: 'Tab',
|
||||
enter: 'Enter',
|
||||
space: [' ', 'Spacebar'],
|
||||
up: ['Up', 'ArrowUp'],
|
||||
left: ['Left', 'ArrowLeft'],
|
||||
right: ['Right', 'ArrowRight'],
|
||||
down: ['Down', 'ArrowDown'],
|
||||
delete: ['Backspace', 'Delete', 'Del']
|
||||
}
|
||||
const listener = ($event) => {
|
||||
if (this.disable) {
|
||||
return
|
||||
}
|
||||
const keyName = Object.keys(keyNames).find(key => {
|
||||
const keyName = $event.key
|
||||
const value = keyNames[key]
|
||||
return value === keyName || (Array.isArray(value) && value.includes(keyName))
|
||||
})
|
||||
if (keyName) {
|
||||
// 避免和其他按键事件冲突
|
||||
setTimeout(() => {
|
||||
this.$emit(keyName, {})
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
document.addEventListener('keyup', listener)
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
document.removeEventListener('keyup', listener)
|
||||
})
|
||||
},
|
||||
render: () => {}
|
||||
}
|
||||
// #endif
|
||||
@@ -0,0 +1,271 @@
|
||||
<template>
|
||||
<view class="uni-popup-dialog">
|
||||
<view class="uni-dialog-title">
|
||||
<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text>
|
||||
</view>
|
||||
<view v-if="mode === 'base'" class="uni-dialog-content">
|
||||
<slot>
|
||||
<text class="uni-dialog-content-text">{{content}}</text>
|
||||
</slot>
|
||||
</view>
|
||||
<view v-else class="uni-dialog-content">
|
||||
<slot>
|
||||
<input class="uni-dialog-input" v-model="val" type="text" :placeholder="placeholderText" :focus="focus" >
|
||||
</slot>
|
||||
</view>
|
||||
<view class="uni-dialog-button-group">
|
||||
<view class="uni-dialog-button" @click="closeDialog">
|
||||
<text class="uni-dialog-button-text">{{closeText}}</text>
|
||||
</view>
|
||||
<view class="uni-dialog-button uni-border-left" @click="onOk">
|
||||
<text class="uni-dialog-button-text uni-button-color">{{okText}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import popup from '../uni-popup/popup.js'
|
||||
import {
|
||||
initVueI18n
|
||||
} from '@dcloudio/uni-i18n'
|
||||
import messages from '../uni-popup/i18n/index.js'
|
||||
const { t } = initVueI18n(messages)
|
||||
/**
|
||||
* PopUp 弹出层-对话框样式
|
||||
* @description 弹出层-对话框样式
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
|
||||
* @property {String} value input 模式下的默认值
|
||||
* @property {String} placeholder input 模式下输入提示
|
||||
* @property {String} type = [success|warning|info|error] 主题样式
|
||||
* @value success 成功
|
||||
* @value warning 提示
|
||||
* @value info 消息
|
||||
* @value error 错误
|
||||
* @property {String} mode = [base|input] 模式、
|
||||
* @value base 基础对话框
|
||||
* @value input 可输入对话框
|
||||
* @property {String} content 对话框内容
|
||||
* @property {Boolean} beforeClose 是否拦截取消事件
|
||||
* @event {Function} confirm 点击确认按钮触发
|
||||
* @event {Function} close 点击取消按钮触发
|
||||
*/
|
||||
|
||||
export default {
|
||||
name: "uniPopupDialog",
|
||||
mixins: [popup],
|
||||
emits:['confirm','close'],
|
||||
props: {
|
||||
value: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
},
|
||||
placeholder: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
default: 'error'
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
default: 'base'
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
content: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
beforeClose: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
cancelText:{
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
confirmText:{
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialogType: 'error',
|
||||
focus: false,
|
||||
val: ""
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
okText() {
|
||||
return this.confirmText || t("uni-popup.ok")
|
||||
},
|
||||
closeText() {
|
||||
return this.cancelText || t("uni-popup.cancel")
|
||||
},
|
||||
placeholderText() {
|
||||
return this.placeholder || t("uni-popup.placeholder")
|
||||
},
|
||||
titleText() {
|
||||
return this.title || t("uni-popup.title")
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
type(val) {
|
||||
this.dialogType = val
|
||||
},
|
||||
mode(val) {
|
||||
if (val === 'input') {
|
||||
this.dialogType = 'info'
|
||||
}
|
||||
},
|
||||
value(val) {
|
||||
this.val = val
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// 对话框遮罩不可点击
|
||||
this.popup.disableMask()
|
||||
// this.popup.closeMask()
|
||||
if (this.mode === 'input') {
|
||||
this.dialogType = 'info'
|
||||
this.val = this.value
|
||||
} else {
|
||||
this.dialogType = this.type
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.focus = true
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 点击确认按钮
|
||||
*/
|
||||
onOk() {
|
||||
if (this.mode === 'input'){
|
||||
this.$emit('confirm', this.val)
|
||||
}else{
|
||||
this.$emit('confirm')
|
||||
}
|
||||
if(this.beforeClose) return
|
||||
this.popup.close()
|
||||
},
|
||||
/**
|
||||
* 点击取消按钮
|
||||
*/
|
||||
closeDialog() {
|
||||
this.$emit('close')
|
||||
if(this.beforeClose) return
|
||||
this.popup.close()
|
||||
},
|
||||
close(){
|
||||
this.popup.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" >
|
||||
.uni-popup-dialog {
|
||||
width: 300px;
|
||||
border-radius: 11px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.uni-dialog-title {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
padding-top: 25px;
|
||||
}
|
||||
|
||||
.uni-dialog-title-text {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.uni-dialog-content {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.uni-dialog-content-text {
|
||||
font-size: 14px;
|
||||
color: #6C6C6C;
|
||||
}
|
||||
|
||||
.uni-dialog-button-group {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
border-top-color: #f5f5f5;
|
||||
border-top-style: solid;
|
||||
border-top-width: 1px;
|
||||
}
|
||||
|
||||
.uni-dialog-button {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 45px;
|
||||
}
|
||||
|
||||
.uni-border-left {
|
||||
border-left-color: #f0f0f0;
|
||||
border-left-style: solid;
|
||||
border-left-width: 1px;
|
||||
}
|
||||
|
||||
.uni-dialog-button-text {
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.uni-button-color {
|
||||
color: #007aff;
|
||||
}
|
||||
|
||||
.uni-dialog-input {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
border: 1px #eee solid;
|
||||
height: 40px;
|
||||
padding: 0 10px;
|
||||
border-radius: 5px;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.uni-popup__success {
|
||||
color: #4cd964;
|
||||
}
|
||||
|
||||
.uni-popup__warn {
|
||||
color: #f0ad4e;
|
||||
}
|
||||
|
||||
.uni-popup__error {
|
||||
color: #dd524d;
|
||||
}
|
||||
|
||||
.uni-popup__info {
|
||||
color: #909399;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,143 @@
|
||||
<template>
|
||||
<view class="uni-popup-message">
|
||||
<view class="uni-popup-message__box fixforpc-width" :class="'uni-popup__'+type">
|
||||
<slot>
|
||||
<text class="uni-popup-message-text" :class="'uni-popup__'+type+'-text'">{{message}}</text>
|
||||
</slot>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import popup from '../uni-popup/popup.js'
|
||||
/**
|
||||
* PopUp 弹出层-消息提示
|
||||
* @description 弹出层-消息提示
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
|
||||
* @property {String} type = [success|warning|info|error] 主题样式
|
||||
* @value success 成功
|
||||
* @value warning 提示
|
||||
* @value info 消息
|
||||
* @value error 错误
|
||||
* @property {String} message 消息提示文字
|
||||
* @property {String} duration 显示时间,设置为 0 则不会自动关闭
|
||||
*/
|
||||
|
||||
export default {
|
||||
name: 'uniPopupMessage',
|
||||
mixins:[popup],
|
||||
props: {
|
||||
/**
|
||||
* 主题 success/warning/info/error 默认 success
|
||||
*/
|
||||
type: {
|
||||
type: String,
|
||||
default: 'success'
|
||||
},
|
||||
/**
|
||||
* 消息文字
|
||||
*/
|
||||
message: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
/**
|
||||
* 显示时间,设置为 0 则不会自动关闭
|
||||
*/
|
||||
duration: {
|
||||
type: Number,
|
||||
default: 3000
|
||||
},
|
||||
maskShow:{
|
||||
type:Boolean,
|
||||
default:false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
created() {
|
||||
this.popup.maskShow = this.maskShow
|
||||
this.popup.messageChild = this
|
||||
},
|
||||
methods: {
|
||||
timerClose(){
|
||||
if(this.duration === 0) return
|
||||
clearTimeout(this.timer)
|
||||
this.timer = setTimeout(()=>{
|
||||
this.popup.close()
|
||||
},this.duration)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" >
|
||||
.uni-popup-message {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.uni-popup-message__box {
|
||||
background-color: #e1f3d8;
|
||||
padding: 10px 15px;
|
||||
border-color: #eee;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 500px) {
|
||||
.fixforpc-width {
|
||||
margin-top: 20px;
|
||||
border-radius: 4px;
|
||||
flex: none;
|
||||
min-width: 380px;
|
||||
/* #ifndef APP-NVUE */
|
||||
max-width: 50%;
|
||||
/* #endif */
|
||||
/* #ifdef APP-NVUE */
|
||||
max-width: 500px;
|
||||
/* #endif */
|
||||
}
|
||||
}
|
||||
|
||||
.uni-popup-message-text {
|
||||
font-size: 14px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.uni-popup__success {
|
||||
background-color: #e1f3d8;
|
||||
}
|
||||
|
||||
.uni-popup__success-text {
|
||||
color: #67C23A;
|
||||
}
|
||||
|
||||
.uni-popup__warn {
|
||||
background-color: #faecd8;
|
||||
}
|
||||
|
||||
.uni-popup__warn-text {
|
||||
color: #E6A23C;
|
||||
}
|
||||
|
||||
.uni-popup__error {
|
||||
background-color: #fde2e2;
|
||||
}
|
||||
|
||||
.uni-popup__error-text {
|
||||
color: #F56C6C;
|
||||
}
|
||||
|
||||
.uni-popup__info {
|
||||
background-color: #F2F6FC;
|
||||
}
|
||||
|
||||
.uni-popup__info-text {
|
||||
color: #909399;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,191 @@
|
||||
<template>
|
||||
<view class="uni-popup-share">
|
||||
<view class="uni-share-title"><text class="uni-share-title-text">{{shareTitleText}}</text></view>
|
||||
<view class="uni-share-content">
|
||||
<view class="uni-share-content-box">
|
||||
<view class="uni-share-content-item" v-for="(item,index) in bottomData" :key="index" @click.stop="select(item,index)">
|
||||
<image class="uni-share-image" :src="item.icon" mode="aspectFill"></image>
|
||||
<text class="uni-share-text">{{item.text}}</text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="uni-share-button-box">
|
||||
<button class="uni-share-button" @click="close">{{cancelText}}</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import popup from '../uni-popup/popup.js'
|
||||
import {
|
||||
initVueI18n
|
||||
} from '@dcloudio/uni-i18n'
|
||||
import messages from '../uni-popup/i18n/index.js'
|
||||
const { t } = initVueI18n(messages)
|
||||
export default {
|
||||
name: 'UniPopupShare',
|
||||
mixins:[popup],
|
||||
emits:['select'],
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
beforeClose: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
bottomData: [{
|
||||
text: '微信好友',
|
||||
icon: require('@/static/icon/share_icon_01.png'),
|
||||
name: 'wxchum'
|
||||
},
|
||||
{
|
||||
text: '朋友圈',
|
||||
icon: require('@/static/icon/share_icon_00.png'),
|
||||
name: 'wxcircle'
|
||||
},
|
||||
{
|
||||
text: 'QQ',
|
||||
icon: require('@/static/icon/share_icon_02.png'),
|
||||
name: 'qq'
|
||||
},
|
||||
// {
|
||||
// text: '新浪',
|
||||
// icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png',
|
||||
// name: 'sina'
|
||||
// },
|
||||
// {
|
||||
// text: '百度',
|
||||
// icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1ec6e920-50bf-11eb-8a36-ebb87efcf8c0.png',
|
||||
// name: 'copy'
|
||||
// },
|
||||
// {
|
||||
// text: '其他',
|
||||
// icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/2e0fdfe0-50bf-11eb-b997-9918a5dda011.png',
|
||||
// name: 'more'
|
||||
// }
|
||||
]
|
||||
}
|
||||
},
|
||||
created() {},
|
||||
computed: {
|
||||
cancelText() {
|
||||
return t("uni-popup.cancel")
|
||||
},
|
||||
shareTitleText() {
|
||||
return this.title || t("uni-popup.shareTitle")
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 选择内容
|
||||
*/
|
||||
select(item, index) {
|
||||
this.$emit('select', {
|
||||
item,
|
||||
index
|
||||
})
|
||||
this.close()
|
||||
|
||||
},
|
||||
/**
|
||||
* 关闭窗口
|
||||
*/
|
||||
close() {
|
||||
if(this.beforeClose) return
|
||||
this.popup.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" >
|
||||
.uni-popup-share {
|
||||
background-color: #fff;
|
||||
border-top-left-radius: 11px;
|
||||
border-top-right-radius: 11px;
|
||||
}
|
||||
.uni-share-title {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
}
|
||||
.uni-share-title-text {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
}
|
||||
.uni-share-content {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.uni-share-content-box {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
width: 360px;
|
||||
}
|
||||
|
||||
.uni-share-content-item {
|
||||
width: 33.33%;
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 10px 0;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.uni-share-content-item:active {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.uni-share-image {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.uni-share-text {
|
||||
margin-top: 10px;
|
||||
font-size: 14px;
|
||||
color: #3B4144;
|
||||
}
|
||||
|
||||
.uni-share-button-box {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
|
||||
.uni-share-button {
|
||||
flex: 1;
|
||||
border-radius: 45rpx;
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
color: white;
|
||||
font-size: 16px;
|
||||
background: #34CE98;
|
||||
}
|
||||
|
||||
.uni-share-button::after {
|
||||
border-radius: 50px;
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
7
uni_modules/uni-popup/components/uni-popup/i18n/en.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"uni-popup.cancel": "cancel",
|
||||
"uni-popup.ok": "ok",
|
||||
"uni-popup.placeholder": "pleace enter",
|
||||
"uni-popup.title": "Hint",
|
||||
"uni-popup.shareTitle": "Share to"
|
||||
}
|
||||
8
uni_modules/uni-popup/components/uni-popup/i18n/index.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import en from './en.json'
|
||||
import zhHans from './zh-Hans.json'
|
||||
import zhHant from './zh-Hant.json'
|
||||
export default {
|
||||
en,
|
||||
'zh-Hans': zhHans,
|
||||
'zh-Hant': zhHant
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"uni-popup.cancel": "取消",
|
||||
"uni-popup.ok": "确定",
|
||||
"uni-popup.placeholder": "请输入",
|
||||
"uni-popup.title": "提示",
|
||||
"uni-popup.shareTitle": "分享到"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"uni-popup.cancel": "取消",
|
||||
"uni-popup.ok": "確定",
|
||||
"uni-popup.placeholder": "請輸入",
|
||||
"uni-popup.title": "提示",
|
||||
"uni-popup.shareTitle": "分享到"
|
||||
}
|
||||
45
uni_modules/uni-popup/components/uni-popup/keypress.js
Normal file
@@ -0,0 +1,45 @@
|
||||
// #ifdef H5
|
||||
export default {
|
||||
name: 'Keypress',
|
||||
props: {
|
||||
disable: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
const keyNames = {
|
||||
esc: ['Esc', 'Escape'],
|
||||
tab: 'Tab',
|
||||
enter: 'Enter',
|
||||
space: [' ', 'Spacebar'],
|
||||
up: ['Up', 'ArrowUp'],
|
||||
left: ['Left', 'ArrowLeft'],
|
||||
right: ['Right', 'ArrowRight'],
|
||||
down: ['Down', 'ArrowDown'],
|
||||
delete: ['Backspace', 'Delete', 'Del']
|
||||
}
|
||||
const listener = ($event) => {
|
||||
if (this.disable) {
|
||||
return
|
||||
}
|
||||
const keyName = Object.keys(keyNames).find(key => {
|
||||
const keyName = $event.key
|
||||
const value = keyNames[key]
|
||||
return value === keyName || (Array.isArray(value) && value.includes(keyName))
|
||||
})
|
||||
if (keyName) {
|
||||
// 避免和其他按键事件冲突
|
||||
setTimeout(() => {
|
||||
this.$emit(keyName, {})
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
document.addEventListener('keyup', listener)
|
||||
// this.$once('hook:beforeDestroy', () => {
|
||||
// document.removeEventListener('keyup', listener)
|
||||
// })
|
||||
},
|
||||
render: () => {}
|
||||
}
|
||||
// #endif
|
||||
26
uni_modules/uni-popup/components/uni-popup/popup.js
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.popup = this.getParent()
|
||||
},
|
||||
methods:{
|
||||
/**
|
||||
* 获取父元素实例
|
||||
*/
|
||||
getParent(name = 'uniPopup') {
|
||||
let parent = this.$parent;
|
||||
let parentName = parent.$options.name;
|
||||
while (parentName !== name) {
|
||||
parent = parent.$parent;
|
||||
if (!parent) return false
|
||||
parentName = parent.$options.name;
|
||||
}
|
||||
return parent;
|
||||
},
|
||||
}
|
||||
}
|
||||
474
uni_modules/uni-popup/components/uni-popup/uni-popup.vue
Normal file
@@ -0,0 +1,474 @@
|
||||
<template>
|
||||
<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']">
|
||||
<view @touchstart="touchstart">
|
||||
<uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass"
|
||||
:duration="duration" :show="showTrans" @click="onTap" />
|
||||
<uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration"
|
||||
:show="showTrans" @click="onTap">
|
||||
<view class="uni-popup__wrapper" :style="{ backgroundColor: bg }" :class="[popupstyle]" @click="clear">
|
||||
<slot />
|
||||
</view>
|
||||
</uni-transition>
|
||||
</view>
|
||||
<!-- #ifdef H5 -->
|
||||
<keypress v-if="maskShow" @esc="onTap" />
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// #ifdef H5
|
||||
import keypress from './keypress.js'
|
||||
// #endif
|
||||
|
||||
/**
|
||||
* PopUp 弹出层
|
||||
* @description 弹出层组件,为了解决遮罩弹层的问题
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
|
||||
* @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
|
||||
* @value top 顶部弹出
|
||||
* @value center 中间弹出
|
||||
* @value bottom 底部弹出
|
||||
* @value left 左侧弹出
|
||||
* @value right 右侧弹出
|
||||
* @value message 消息提示
|
||||
* @value dialog 对话框
|
||||
* @value share 底部分享示例
|
||||
* @property {Boolean} animation = [true|false] 是否开启动画
|
||||
* @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
|
||||
* @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
|
||||
* @property {String} backgroundColor 主窗口背景色
|
||||
* @property {String} maskBackgroundColor 蒙版颜色
|
||||
* @property {Boolean} safeArea 是否适配底部安全区
|
||||
* @event {Function} change 打开关闭弹窗触发,e={show: false}
|
||||
* @event {Function} maskClick 点击遮罩触发
|
||||
*/
|
||||
|
||||
export default {
|
||||
name: 'uniPopup',
|
||||
components: {
|
||||
// #ifdef H5
|
||||
keypress
|
||||
// #endif
|
||||
},
|
||||
emits: ['change', 'maskClick'],
|
||||
props: {
|
||||
// 开启动画
|
||||
animation: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
|
||||
// message: 消息提示 ; dialog : 对话框
|
||||
type: {
|
||||
type: String,
|
||||
default: 'center'
|
||||
},
|
||||
// maskClick
|
||||
isMaskClick: {
|
||||
type: Boolean,
|
||||
default: null
|
||||
},
|
||||
// TODO 2 个版本后废弃属性 ,使用 isMaskClick
|
||||
maskClick: {
|
||||
type: Boolean,
|
||||
default: null
|
||||
},
|
||||
backgroundColor: {
|
||||
type: String,
|
||||
default: 'none'
|
||||
},
|
||||
safeArea: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
maskBackgroundColor: {
|
||||
type: String,
|
||||
default: 'rgba(0, 0, 0, 0.4)'
|
||||
},
|
||||
},
|
||||
|
||||
watch: {
|
||||
/**
|
||||
* 监听type类型
|
||||
*/
|
||||
type: {
|
||||
handler: function(type) {
|
||||
if (!this.config[type]) return
|
||||
this[this.config[type]](true)
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
isDesktop: {
|
||||
handler: function(newVal) {
|
||||
if (!this.config[newVal]) return
|
||||
this[this.config[this.type]](true)
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
/**
|
||||
* 监听遮罩是否可点击
|
||||
* @param {Object} val
|
||||
*/
|
||||
maskClick: {
|
||||
handler: function(val) {
|
||||
this.mkclick = val
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
isMaskClick: {
|
||||
handler: function(val) {
|
||||
this.mkclick = val
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
// H5 下禁止底部滚动
|
||||
showPopup(show) {
|
||||
// #ifdef H5
|
||||
// fix by mehaotian 处理 h5 滚动穿透的问题
|
||||
document.getElementsByTagName('body')[0].style.overflow = show ? 'hidden' : 'visible'
|
||||
// #endif
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
duration: 300,
|
||||
ani: [],
|
||||
showPopup: false,
|
||||
showTrans: false,
|
||||
popupWidth: 0,
|
||||
popupHeight: 0,
|
||||
config: {
|
||||
top: 'top',
|
||||
bottom: 'bottom',
|
||||
center: 'center',
|
||||
left: 'left',
|
||||
right: 'right',
|
||||
message: 'top',
|
||||
dialog: 'center',
|
||||
share: 'bottom'
|
||||
},
|
||||
maskClass: {
|
||||
position: 'fixed',
|
||||
bottom: 0,
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.4)'
|
||||
},
|
||||
transClass: {
|
||||
position: 'fixed',
|
||||
left: 0,
|
||||
right: 0
|
||||
},
|
||||
maskShow: true,
|
||||
mkclick: true,
|
||||
popupstyle: this.isDesktop ? 'fixforpc-top' : 'top'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isDesktop() {
|
||||
return this.popupWidth >= 500 && this.popupHeight >= 500
|
||||
},
|
||||
bg() {
|
||||
if (this.backgroundColor === '' || this.backgroundColor === 'none') {
|
||||
return 'transparent'
|
||||
}
|
||||
return this.backgroundColor
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
const fixSize = () => {
|
||||
const {
|
||||
windowWidth,
|
||||
windowHeight,
|
||||
windowTop,
|
||||
safeArea,
|
||||
screenHeight,
|
||||
safeAreaInsets
|
||||
} = uni.getSystemInfoSync()
|
||||
this.popupWidth = windowWidth
|
||||
this.popupHeight = windowHeight + (windowTop || 0)
|
||||
// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
|
||||
if (safeArea && this.safeArea) {
|
||||
// #ifdef MP-WEIXIN
|
||||
this.safeAreaInsets = screenHeight - safeArea.bottom
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
this.safeAreaInsets = safeAreaInsets.bottom
|
||||
// #endif
|
||||
} else {
|
||||
this.safeAreaInsets = 0
|
||||
}
|
||||
}
|
||||
fixSize()
|
||||
// #ifdef H5
|
||||
// window.addEventListener('resize', fixSize)
|
||||
// this.$once('hook:beforeDestroy', () => {
|
||||
// window.removeEventListener('resize', fixSize)
|
||||
// })
|
||||
// #endif
|
||||
},
|
||||
// #ifndef VUE3
|
||||
// TODO vue2
|
||||
destroyed() {
|
||||
this.setH5Visible()
|
||||
},
|
||||
// #endif
|
||||
// #ifdef VUE3
|
||||
// TODO vue3
|
||||
unmounted() {
|
||||
this.setH5Visible()
|
||||
},
|
||||
// #endif
|
||||
created() {
|
||||
// this.mkclick = this.isMaskClick || this.maskClick
|
||||
if (this.isMaskClick === null && this.maskClick === null) {
|
||||
this.mkclick = true
|
||||
} else {
|
||||
this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick
|
||||
}
|
||||
if (this.animation) {
|
||||
this.duration = 300
|
||||
} else {
|
||||
this.duration = 0
|
||||
}
|
||||
// TODO 处理 message 组件生命周期异常的问题
|
||||
this.messageChild = null
|
||||
// TODO 解决头条冒泡的问题
|
||||
this.clearPropagation = false
|
||||
this.maskClass.backgroundColor = this.maskBackgroundColor
|
||||
},
|
||||
methods: {
|
||||
setH5Visible() {
|
||||
// #ifdef H5
|
||||
// fix by mehaotian 处理 h5 滚动穿透的问题
|
||||
document.getElementsByTagName('body')[0].style.overflow = 'visible'
|
||||
// #endif
|
||||
},
|
||||
/**
|
||||
* 公用方法,不显示遮罩层
|
||||
*/
|
||||
closeMask() {
|
||||
this.maskShow = false
|
||||
},
|
||||
/**
|
||||
* 公用方法,遮罩层禁止点击
|
||||
*/
|
||||
disableMask() {
|
||||
this.mkclick = false
|
||||
},
|
||||
// TODO nvue 取消冒泡
|
||||
clear(e) {
|
||||
// #ifndef APP-NVUE
|
||||
e.stopPropagation()
|
||||
// #endif
|
||||
this.clearPropagation = true
|
||||
},
|
||||
|
||||
open(direction) {
|
||||
// fix by mehaotian 处理快速打开关闭的情况
|
||||
if (this.showPopup) {
|
||||
clearTimeout(this.timer)
|
||||
this.showPopup = false
|
||||
}
|
||||
let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
|
||||
if (!(direction && innerType.indexOf(direction) !== -1)) {
|
||||
direction = this.type
|
||||
}
|
||||
if (!this.config[direction]) {
|
||||
console.error('缺少类型:', direction)
|
||||
return
|
||||
}
|
||||
this[this.config[direction]]()
|
||||
this.$emit('change', {
|
||||
show: true,
|
||||
type: direction
|
||||
})
|
||||
},
|
||||
close(type) {
|
||||
this.showTrans = false
|
||||
this.$emit('change', {
|
||||
show: false,
|
||||
type: this.type
|
||||
})
|
||||
clearTimeout(this.timer)
|
||||
// // 自定义关闭事件
|
||||
// this.customOpen && this.customClose()
|
||||
this.timer = setTimeout(() => {
|
||||
this.showPopup = false
|
||||
}, 300)
|
||||
},
|
||||
// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
|
||||
touchstart() {
|
||||
this.clearPropagation = false
|
||||
},
|
||||
|
||||
onTap() {
|
||||
if (this.clearPropagation) {
|
||||
// fix by mehaotian 兼容 nvue
|
||||
this.clearPropagation = false
|
||||
return
|
||||
}
|
||||
this.$emit('maskClick')
|
||||
if (!this.mkclick) return
|
||||
this.close()
|
||||
},
|
||||
/**
|
||||
* 顶部弹出样式处理
|
||||
*/
|
||||
top(type) {
|
||||
this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top'
|
||||
this.ani = ['slide-top']
|
||||
this.transClass = {
|
||||
position: 'fixed',
|
||||
left: 0,
|
||||
right: 0,
|
||||
backgroundColor: this.bg
|
||||
}
|
||||
// TODO 兼容 type 属性 ,后续会废弃
|
||||
if (type) return
|
||||
this.showPopup = true
|
||||
this.showTrans = true
|
||||
this.$nextTick(() => {
|
||||
if (this.messageChild && this.type === 'message') {
|
||||
this.messageChild.timerClose()
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 底部弹出样式处理
|
||||
*/
|
||||
bottom(type) {
|
||||
this.popupstyle = 'bottom'
|
||||
this.ani = ['slide-bottom']
|
||||
this.transClass = {
|
||||
position: 'fixed',
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
paddingBottom: this.safeAreaInsets + 'px',
|
||||
backgroundColor: this.bg
|
||||
}
|
||||
// TODO 兼容 type 属性 ,后续会废弃
|
||||
if (type) return
|
||||
this.showPopup = true
|
||||
this.showTrans = true
|
||||
},
|
||||
/**
|
||||
* 中间弹出样式处理
|
||||
*/
|
||||
center(type) {
|
||||
this.popupstyle = 'center'
|
||||
this.ani = ['zoom-out', 'fade']
|
||||
this.transClass = {
|
||||
position: 'fixed',
|
||||
/* #ifndef APP-NVUE */
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
/* #endif */
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
}
|
||||
// TODO 兼容 type 属性 ,后续会废弃
|
||||
if (type) return
|
||||
this.showPopup = true
|
||||
this.showTrans = true
|
||||
},
|
||||
left(type) {
|
||||
this.popupstyle = 'left'
|
||||
this.ani = ['slide-left']
|
||||
this.transClass = {
|
||||
position: 'fixed',
|
||||
left: 0,
|
||||
bottom: 0,
|
||||
top: 0,
|
||||
backgroundColor: this.bg,
|
||||
/* #ifndef APP-NVUE */
|
||||
display: 'flex',
|
||||
flexDirection: 'column'
|
||||
/* #endif */
|
||||
}
|
||||
// TODO 兼容 type 属性 ,后续会废弃
|
||||
if (type) return
|
||||
this.showPopup = true
|
||||
this.showTrans = true
|
||||
},
|
||||
right(type) {
|
||||
this.popupstyle = 'right'
|
||||
this.ani = ['slide-right']
|
||||
this.transClass = {
|
||||
position: 'fixed',
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
backgroundColor: this.bg,
|
||||
/* #ifndef APP-NVUE */
|
||||
display: 'flex',
|
||||
flexDirection: 'column'
|
||||
/* #endif */
|
||||
}
|
||||
// TODO 兼容 type 属性 ,后续会废弃
|
||||
if (type) return
|
||||
this.showPopup = true
|
||||
this.showTrans = true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.uni-popup {
|
||||
position: fixed;
|
||||
/* #ifndef APP-NVUE */
|
||||
z-index: 99;
|
||||
|
||||
/* #endif */
|
||||
&.top,
|
||||
&.left,
|
||||
&.right {
|
||||
/* #ifdef H5 */
|
||||
top: var(--window-top);
|
||||
/* #endif */
|
||||
/* #ifndef H5 */
|
||||
top: 0;
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.uni-popup__wrapper {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: block;
|
||||
/* #endif */
|
||||
position: relative;
|
||||
|
||||
/* iphonex 等安全区设置,底部安全区适配 */
|
||||
/* #ifndef APP-NVUE */
|
||||
// padding-bottom: constant(safe-area-inset-bottom);
|
||||
// padding-bottom: env(safe-area-inset-bottom);
|
||||
/* #endif */
|
||||
&.left,
|
||||
&.right {
|
||||
/* #ifdef H5 */
|
||||
padding-top: var(--window-top);
|
||||
/* #endif */
|
||||
/* #ifndef H5 */
|
||||
padding-top: 0;
|
||||
/* #endif */
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fixforpc-z-index {
|
||||
/* #ifndef APP-NVUE */
|
||||
z-index: 999;
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.fixforpc-top {
|
||||
top: 0;
|
||||
}
|
||||
</style>
|
||||
90
uni_modules/uni-popup/package.json
Normal file
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"id": "uni-popup",
|
||||
"displayName": "uni-popup 弹出层",
|
||||
"version": "1.7.9",
|
||||
"description": " Popup 组件,提供常用的弹层",
|
||||
"keywords": [
|
||||
"uni-ui",
|
||||
"弹出层",
|
||||
"弹窗",
|
||||
"popup",
|
||||
"弹框"
|
||||
],
|
||||
"repository": "https://github.com/dcloudio/uni-ui",
|
||||
"engines": {
|
||||
"HBuilderX": ""
|
||||
},
|
||||
"directories": {
|
||||
"example": "../../temps/example_temps"
|
||||
},
|
||||
"dcloudext": {
|
||||
"category": [
|
||||
"前端组件",
|
||||
"通用组件"
|
||||
],
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "无",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": [
|
||||
"uni-scss",
|
||||
"uni-transition"
|
||||
],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y"
|
||||
},
|
||||
"client": {
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "y"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "y",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "y"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "y",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "y",
|
||||
"QQ": "y"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "u",
|
||||
"联盟": "u"
|
||||
},
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
uni_modules/uni-popup/readme.md
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
|
||||
## Popup 弹出层
|
||||
> **组件名:uni-popup**
|
||||
> 代码块: `uPopup`
|
||||
> 关联组件:`uni-transition`
|
||||
|
||||
|
||||
弹出层组件,在应用中弹出一个消息提示窗口、提示框等
|
||||
|
||||
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
|
||||
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
20
uni_modules/uni-transition/changelog.md
Normal file
@@ -0,0 +1,20 @@
|
||||
## 1.3.1(2021-11-23)
|
||||
- 修复 init 方法初始化问题
|
||||
## 1.3.0(2021-11-19)
|
||||
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
||||
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
|
||||
## 1.2.1(2021-09-27)
|
||||
- 修复 init 方法不生效的 Bug
|
||||
## 1.2.0(2021-07-30)
|
||||
- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
|
||||
## 1.1.1(2021-05-12)
|
||||
- 新增 示例地址
|
||||
- 修复 示例项目缺少组件的 Bug
|
||||
## 1.1.0(2021-04-22)
|
||||
- 新增 通过方法自定义动画
|
||||
- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
|
||||
- 优化 动画触发逻辑,使动画更流畅
|
||||
- 优化 支持单独的动画类型
|
||||
- 优化 文档示例
|
||||
## 1.0.2(2021-02-05)
|
||||
- 调整为 uni_modules 目录规范
|
||||
@@ -0,0 +1,128 @@
|
||||
// const defaultOption = {
|
||||
// duration: 300,
|
||||
// timingFunction: 'linear',
|
||||
// delay: 0,
|
||||
// transformOrigin: '50% 50% 0'
|
||||
// }
|
||||
// #ifdef APP-NVUE
|
||||
const nvueAnimation = uni.requireNativePlugin('animation')
|
||||
// #endif
|
||||
class MPAnimation {
|
||||
constructor(options, _this) {
|
||||
this.options = options
|
||||
this.animation = uni.createAnimation(options)
|
||||
this.currentStepAnimates = {}
|
||||
this.next = 0
|
||||
this.$ = _this
|
||||
|
||||
}
|
||||
|
||||
_nvuePushAnimates(type, args) {
|
||||
let aniObj = this.currentStepAnimates[this.next]
|
||||
let styles = {}
|
||||
if (!aniObj) {
|
||||
styles = {
|
||||
styles: {},
|
||||
config: {}
|
||||
}
|
||||
} else {
|
||||
styles = aniObj
|
||||
}
|
||||
if (animateTypes1.includes(type)) {
|
||||
if (!styles.styles.transform) {
|
||||
styles.styles.transform = ''
|
||||
}
|
||||
let unit = ''
|
||||
if(type === 'rotate'){
|
||||
unit = 'deg'
|
||||
}
|
||||
styles.styles.transform += `${type}(${args+unit}) `
|
||||
} else {
|
||||
styles.styles[type] = `${args}`
|
||||
}
|
||||
this.currentStepAnimates[this.next] = styles
|
||||
}
|
||||
_animateRun(styles = {}, config = {}) {
|
||||
let ref = this.$.$refs['ani'].ref
|
||||
if (!ref) return
|
||||
return new Promise((resolve, reject) => {
|
||||
nvueAnimation.transition(ref, {
|
||||
styles,
|
||||
...config
|
||||
}, res => {
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
_nvueNextAnimate(animates, step = 0, fn) {
|
||||
let obj = animates[step]
|
||||
if (obj) {
|
||||
let {
|
||||
styles,
|
||||
config
|
||||
} = obj
|
||||
this._animateRun(styles, config).then(() => {
|
||||
step += 1
|
||||
this._nvueNextAnimate(animates, step, fn)
|
||||
})
|
||||
} else {
|
||||
this.currentStepAnimates = {}
|
||||
typeof fn === 'function' && fn()
|
||||
this.isEnd = true
|
||||
}
|
||||
}
|
||||
|
||||
step(config = {}) {
|
||||
// #ifndef APP-NVUE
|
||||
this.animation.step(config)
|
||||
// #endif
|
||||
// #ifdef APP-NVUE
|
||||
this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
|
||||
this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
|
||||
this.next++
|
||||
// #endif
|
||||
return this
|
||||
}
|
||||
|
||||
run(fn) {
|
||||
// #ifndef APP-NVUE
|
||||
this.$.animationData = this.animation.export()
|
||||
this.$.timer = setTimeout(() => {
|
||||
typeof fn === 'function' && fn()
|
||||
}, this.$.durationTime)
|
||||
// #endif
|
||||
// #ifdef APP-NVUE
|
||||
this.isEnd = false
|
||||
let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
|
||||
if(!ref) return
|
||||
this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
|
||||
this.next = 0
|
||||
// #endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
|
||||
'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
|
||||
'translateZ'
|
||||
]
|
||||
const animateTypes2 = ['opacity', 'backgroundColor']
|
||||
const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
|
||||
animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
|
||||
MPAnimation.prototype[type] = function(...args) {
|
||||
// #ifndef APP-NVUE
|
||||
this.animation[type](...args)
|
||||
// #endif
|
||||
// #ifdef APP-NVUE
|
||||
this._nvuePushAnimates(type, args)
|
||||
// #endif
|
||||
return this
|
||||
}
|
||||
})
|
||||
|
||||
export function createAnimation(option, _this) {
|
||||
if(!_this) return
|
||||
clearTimeout(_this.timer)
|
||||
return new MPAnimation(option, _this)
|
||||
}
|
||||
@@ -0,0 +1,277 @@
|
||||
<template>
|
||||
<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createAnimation } from './createAnimation'
|
||||
|
||||
/**
|
||||
* Transition 过渡动画
|
||||
* @description 简单过渡动画组件
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=985
|
||||
* @property {Boolean} show = [false|true] 控制组件显示或隐藏
|
||||
* @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
|
||||
* @value fade 渐隐渐出过渡
|
||||
* @value slide-top 由上至下过渡
|
||||
* @value slide-right 由右至左过渡
|
||||
* @value slide-bottom 由下至上过渡
|
||||
* @value slide-left 由左至右过渡
|
||||
* @value zoom-in 由小到大过渡
|
||||
* @value zoom-out 由大到小过渡
|
||||
* @property {Number} duration 过渡动画持续时间
|
||||
* @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
|
||||
*/
|
||||
export default {
|
||||
name: 'uniTransition',
|
||||
emits:['click','change'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
modeClass: {
|
||||
type: [Array, String],
|
||||
default() {
|
||||
return 'fade'
|
||||
}
|
||||
},
|
||||
duration: {
|
||||
type: Number,
|
||||
default: 300
|
||||
},
|
||||
styles: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {}
|
||||
}
|
||||
},
|
||||
customClass:{
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isShow: false,
|
||||
transform: '',
|
||||
opacity: 1,
|
||||
animationData: {},
|
||||
durationTime: 300,
|
||||
config: {}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show: {
|
||||
handler(newVal) {
|
||||
if (newVal) {
|
||||
this.open()
|
||||
} else {
|
||||
// 避免上来就执行 close,导致动画错乱
|
||||
if (this.isShow) {
|
||||
this.close()
|
||||
}
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 生成样式数据
|
||||
stylesObject() {
|
||||
let styles = {
|
||||
...this.styles,
|
||||
'transition-duration': this.duration / 1000 + 's'
|
||||
}
|
||||
let transform = ''
|
||||
for (let i in styles) {
|
||||
let line = this.toLine(i)
|
||||
transform += line + ':' + styles[i] + ';'
|
||||
}
|
||||
return transform
|
||||
},
|
||||
// 初始化动画条件
|
||||
transformStyles() {
|
||||
return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// 动画默认配置
|
||||
this.config = {
|
||||
duration: this.duration,
|
||||
timingFunction: 'ease',
|
||||
transformOrigin: '50% 50%',
|
||||
delay: 0
|
||||
}
|
||||
this.durationTime = this.duration
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* ref 触发 初始化动画
|
||||
*/
|
||||
init(obj = {}) {
|
||||
if (obj.duration) {
|
||||
this.durationTime = obj.duration
|
||||
}
|
||||
this.animation = createAnimation(Object.assign(this.config, obj),this)
|
||||
},
|
||||
/**
|
||||
* 点击组件触发回调
|
||||
*/
|
||||
onClick() {
|
||||
this.$emit('click', {
|
||||
detail: this.isShow
|
||||
})
|
||||
},
|
||||
/**
|
||||
* ref 触发 动画分组
|
||||
* @param {Object} obj
|
||||
*/
|
||||
step(obj, config = {}) {
|
||||
if (!this.animation) return
|
||||
for (let i in obj) {
|
||||
try {
|
||||
if(typeof obj[i] === 'object'){
|
||||
this.animation[i](...obj[i])
|
||||
}else{
|
||||
this.animation[i](obj[i])
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`方法 ${i} 不存在`)
|
||||
}
|
||||
}
|
||||
this.animation.step(config)
|
||||
return this
|
||||
},
|
||||
/**
|
||||
* ref 触发 执行动画
|
||||
*/
|
||||
run(fn) {
|
||||
if (!this.animation) return
|
||||
this.animation.run(fn)
|
||||
},
|
||||
// 开始过度动画
|
||||
open() {
|
||||
clearTimeout(this.timer)
|
||||
this.transform = ''
|
||||
this.isShow = true
|
||||
let { opacity, transform } = this.styleInit(false)
|
||||
if (typeof opacity !== 'undefined') {
|
||||
this.opacity = opacity
|
||||
}
|
||||
this.transform = transform
|
||||
// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
|
||||
this.$nextTick(() => {
|
||||
// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
|
||||
this.timer = setTimeout(() => {
|
||||
this.animation = createAnimation(this.config, this)
|
||||
this.tranfromInit(false).step()
|
||||
this.animation.run()
|
||||
this.$emit('change', {
|
||||
detail: this.isShow
|
||||
})
|
||||
}, 20)
|
||||
})
|
||||
},
|
||||
// 关闭过度动画
|
||||
close(type) {
|
||||
if (!this.animation) return
|
||||
this.tranfromInit(true)
|
||||
.step()
|
||||
.run(() => {
|
||||
this.isShow = false
|
||||
this.animationData = null
|
||||
this.animation = null
|
||||
let { opacity, transform } = this.styleInit(false)
|
||||
this.opacity = opacity || 1
|
||||
this.transform = transform
|
||||
this.$emit('change', {
|
||||
detail: this.isShow
|
||||
})
|
||||
})
|
||||
},
|
||||
// 处理动画开始前的默认样式
|
||||
styleInit(type) {
|
||||
let styles = {
|
||||
transform: ''
|
||||
}
|
||||
let buildStyle = (type, mode) => {
|
||||
if (mode === 'fade') {
|
||||
styles.opacity = this.animationType(type)[mode]
|
||||
} else {
|
||||
styles.transform += this.animationType(type)[mode] + ' '
|
||||
}
|
||||
}
|
||||
if (typeof this.modeClass === 'string') {
|
||||
buildStyle(type, this.modeClass)
|
||||
} else {
|
||||
this.modeClass.forEach(mode => {
|
||||
buildStyle(type, mode)
|
||||
})
|
||||
}
|
||||
return styles
|
||||
},
|
||||
// 处理内置组合动画
|
||||
tranfromInit(type) {
|
||||
let buildTranfrom = (type, mode) => {
|
||||
let aniNum = null
|
||||
if (mode === 'fade') {
|
||||
aniNum = type ? 0 : 1
|
||||
} else {
|
||||
aniNum = type ? '-100%' : '0'
|
||||
if (mode === 'zoom-in') {
|
||||
aniNum = type ? 0.8 : 1
|
||||
}
|
||||
if (mode === 'zoom-out') {
|
||||
aniNum = type ? 1.2 : 1
|
||||
}
|
||||
if (mode === 'slide-right') {
|
||||
aniNum = type ? '100%' : '0'
|
||||
}
|
||||
if (mode === 'slide-bottom') {
|
||||
aniNum = type ? '100%' : '0'
|
||||
}
|
||||
}
|
||||
this.animation[this.animationMode()[mode]](aniNum)
|
||||
}
|
||||
if (typeof this.modeClass === 'string') {
|
||||
buildTranfrom(type, this.modeClass)
|
||||
} else {
|
||||
this.modeClass.forEach(mode => {
|
||||
buildTranfrom(type, mode)
|
||||
})
|
||||
}
|
||||
|
||||
return this.animation
|
||||
},
|
||||
animationType(type) {
|
||||
return {
|
||||
fade: type ? 1 : 0,
|
||||
'slide-top': `translateY(${type ? '0' : '-100%'})`,
|
||||
'slide-right': `translateX(${type ? '0' : '100%'})`,
|
||||
'slide-bottom': `translateY(${type ? '0' : '100%'})`,
|
||||
'slide-left': `translateX(${type ? '0' : '-100%'})`,
|
||||
'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
|
||||
'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
|
||||
}
|
||||
},
|
||||
// 内置动画类型与实际动画对应字典
|
||||
animationMode() {
|
||||
return {
|
||||
fade: 'opacity',
|
||||
'slide-top': 'translateY',
|
||||
'slide-right': 'translateX',
|
||||
'slide-bottom': 'translateY',
|
||||
'slide-left': 'translateX',
|
||||
'zoom-in': 'scale',
|
||||
'zoom-out': 'scale'
|
||||
}
|
||||
},
|
||||
// 驼峰转中横线
|
||||
toLine(name) {
|
||||
return name.replace(/([A-Z])/g, '-$1').toLowerCase()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
87
uni_modules/uni-transition/package.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"id": "uni-transition",
|
||||
"displayName": "uni-transition 过渡动画",
|
||||
"version": "1.3.1",
|
||||
"description": "元素的简单过渡动画",
|
||||
"keywords": [
|
||||
"uni-ui",
|
||||
"uniui",
|
||||
"动画",
|
||||
"过渡",
|
||||
"过渡动画"
|
||||
],
|
||||
"repository": "https://github.com/dcloudio/uni-ui",
|
||||
"engines": {
|
||||
"HBuilderX": ""
|
||||
},
|
||||
"directories": {
|
||||
"example": "../../temps/example_temps"
|
||||
},
|
||||
"dcloudext": {
|
||||
"category": [
|
||||
"前端组件",
|
||||
"通用组件"
|
||||
],
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "无",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": ["uni-scss"],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y"
|
||||
},
|
||||
"client": {
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "y"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "y",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "y"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "y",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "y",
|
||||
"QQ": "y"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "u",
|
||||
"联盟": "u"
|
||||
},
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
uni_modules/uni-transition/readme.md
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
## Transition 过渡动画
|
||||
> **组件名:uni-transition**
|
||||
> 代码块: `uTransition`
|
||||
|
||||
|
||||
元素过渡动画
|
||||
|
||||
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
|
||||
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
|
||||
@@ -1,8 +1,8 @@
|
||||
|
||||
var isReady=false;var onReadyCallbacks=[];
|
||||
var isServiceReady=false;var onServiceReadyCallbacks=[];
|
||||
var __uniConfig = {"pages":["pages/auth/auth","pages/auth/role","pages/life/life","pages/store/index","pages/user/index","pages/setting/setting","pages/store/goods","pages/store/buy","pages/order/index","pages/order/details","pages/address/index","pages/address/edit","pages/pay/pay","pages/store/list","pages/store/meals","pages/store/search","pages/refund/index","pages/account/integral","pages/account/dt","pages/account/recharge","pages/vip/vip","pages/vip/agreement","pages/team/index","pages/store/shop/shopDetail","pages/store/shop/shopList"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"ZH健康","navigationBarBackgroundColor":"#F3F6FB","backgroundColorTop":"#F3F6FB","backgroundColorBottom":"#F3F6FB"},"tabBar":{"borderStyle":"white","selectedColor":"#34CE98","list":[{"iconPath":"static/tabBar/tabBar_02.png","selectedIconPath":"static/tabBar/tabBar_show_02.png","pagePath":"pages/life/life","text":"共力人生"},{"iconPath":"static/tabBar/tabBar_02.png","selectedIconPath":"static/tabBar/tabBar_show_02.png","pagePath":"pages/store/index","text":"DT商城"},{"iconPath":"static/tabBar/tabBar_03.png","selectedIconPath":"static/tabBar/tabBar_show_03.png","pagePath":"pages/user/index","text":"我的"}]},"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"ZH-HEALTH","compilerVersion":"3.4.14","entryPagePath":"pages/auth/auth","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
|
||||
var __uniRoutes = [{"path":"/pages/auth/auth","meta":{"isQuit":true},"window":{"navigationBarTitleText":"登录","navigationStyle":"custom"}},{"path":"/pages/auth/role","meta":{},"window":{"navigationBarTitleText":"角色创建","navigationBarBackgroundColor":"#FFF","titleNView":{"buttons":[{"text":"退出登录","fontSize":"14","width":"80px","color":"#34CE98"}]}}},{"path":"/pages/life/life","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"共力人生","navigationStyle":"custom"}},{"path":"/pages/store/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"DT商城","enablePullDownRefresh":true,"titleNView":{"backgroundColor":"#FFFFFF","buttons":[{"float":"right","text":"","fontSrc":"/static/iconfont.ttf","color":"#000","fontSize":"20px"}]}}},{"path":"/pages/user/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"我的","navigationStyle":"custom"}},{"path":"/pages/setting/setting","meta":{},"window":{"navigationBarTitleText":"设置中心","navigationBarBackgroundColor":"#34CE98","navigationBarTextStyle":"white"}},{"path":"/pages/store/goods","meta":{},"window":{"navigationStyle":"custom","navigationBarTitleText":"详情","titleNView":{"backgroundColor":"#FFFFFF","type":"transparent"}}},{"path":"/pages/store/buy","meta":{},"window":{"navigationBarTitleText":"确认订单","enablePullDownRefresh":false}},{"path":"/pages/order/index","meta":{},"window":{"navigationBarTitleText":"我的订单","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":false}},{"path":"/pages/order/details","meta":{},"window":{"navigationBarTitleText":"订单详情","enablePullDownRefresh":false}},{"path":"/pages/address/index","meta":{},"window":{"navigationBarTitleText":"收货地址"}},{"path":"/pages/address/edit","meta":{},"window":{"navigationBarTitleText":"编辑","enablePullDownRefresh":false}},{"path":"/pages/pay/pay","meta":{},"window":{"navigationBarTitleText":"收银台","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/store/list","meta":{},"window":{"navigationBarTitleText":"商品","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":true}},{"path":"/pages/store/meals","meta":{},"window":{"navigationBarTitleText":"套餐","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":true}},{"path":"/pages/store/search","meta":{},"window":{"navigationBarTitleText":"搜索","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/refund/index","meta":{},"window":{"navigationBarTitleText":"退换货","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/account/integral","meta":{},"window":{"navigationBarTitleText":"共力值","navigationBarBackgroundColor":"#34CE98","navigationBarTextStyle":"white"}},{"path":"/pages/account/dt","meta":{},"window":{"navigationBarTitleText":"DT积分","navigationBarBackgroundColor":"#34CE98","backgroundColorTop":"#34CE98","navigationBarTextStyle":"white","titleNView":{"buttons":[{"text":"充值","width":"60","fontSize":"14"}]}}},{"path":"/pages/account/recharge","meta":{},"window":{"navigationBarTitleText":"DT积分充值","navigationBarBackgroundColor":"#FFFFFF","titleNView":{"buttons":[{"text":"充值记录","width":"80","fontSize":"14"}]}}},{"path":"/pages/vip/vip","meta":{},"window":{"navigationBarTitleText":"共力会员","navigationBarBackgroundColor":"#242430","navigationBarTextStyle":"white","backgroundColorTop":"#242430"}},{"path":"/pages/vip/agreement","meta":{},"window":{"navigationBarTitleText":"共力会员协议"}},{"path":"/pages/team/index","meta":{},"window":{"navigationBarTitleText":"共力团队","enablePullDownRefresh":false}},{"path":"/pages/store/shop/shopDetail","meta":{},"window":{"navigationStyle":"custom"}},{"path":"/pages/store/shop/shopList","meta":{},"window":{"navigationBarTitleText":"更多店铺","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":true}}];
|
||||
var __uniConfig = {"pages":["pages/auth/auth","pages/auth/role","pages/life/life","pages/store/index","pages/user/index","pages/setting/setting","pages/store/goods","pages/store/buy","pages/order/index","pages/order/details","pages/address/index","pages/address/edit","pages/pay/pay","pages/store/list","pages/store/meals","pages/store/search","pages/refund/list","pages/refund/aftersale","pages/refund/refund_or_exchange_apply","pages/refund/exchange","pages/account/integral","pages/account/dt","pages/account/recharge","pages/vip/vip","pages/vip/agreement","pages/team/index","pages/store/shop/shopDetail","pages/store/shop/shopList"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"ZH健康","navigationBarBackgroundColor":"#F3F6FB","backgroundColorTop":"#F3F6FB","backgroundColorBottom":"#F3F6FB"},"tabBar":{"borderStyle":"white","selectedColor":"#34CE98","list":[{"iconPath":"static/tabBar/tabBar_02.png","selectedIconPath":"static/tabBar/tabBar_show_02.png","pagePath":"pages/life/life","text":"共力人生"},{"iconPath":"static/tabBar/tabBar_02.png","selectedIconPath":"static/tabBar/tabBar_show_02.png","pagePath":"pages/store/index","text":"DT商城"},{"iconPath":"static/tabBar/tabBar_03.png","selectedIconPath":"static/tabBar/tabBar_show_03.png","pagePath":"pages/user/index","text":"我的"}]},"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"共力生态","compilerVersion":"3.4.14","entryPagePath":"pages/auth/auth","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
|
||||
var __uniRoutes = [{"path":"/pages/auth/auth","meta":{"isQuit":true},"window":{"navigationBarTitleText":"登录","navigationStyle":"custom"}},{"path":"/pages/auth/role","meta":{},"window":{"navigationBarTitleText":"角色创建","navigationBarBackgroundColor":"#FFF","titleNView":{"buttons":[{"text":"退出登录","fontSize":"14","width":"80px","color":"#34CE98"}]}}},{"path":"/pages/life/life","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"共力人生","navigationStyle":"custom"}},{"path":"/pages/store/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"DT商城","enablePullDownRefresh":true,"titleNView":{"backgroundColor":"#FFFFFF","buttons":[{"float":"right","text":"","fontSrc":"/static/iconfont.ttf","color":"#000","fontSize":"20px"}]}}},{"path":"/pages/user/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"我的","navigationStyle":"custom"}},{"path":"/pages/setting/setting","meta":{},"window":{"navigationBarTitleText":"设置中心","navigationBarBackgroundColor":"#34CE98","navigationBarTextStyle":"white"}},{"path":"/pages/store/goods","meta":{},"window":{"navigationStyle":"custom","navigationBarTitleText":"详情","titleNView":{"backgroundColor":"#FFFFFF","type":"transparent"}}},{"path":"/pages/store/buy","meta":{},"window":{"navigationBarTitleText":"确认订单","enablePullDownRefresh":false}},{"path":"/pages/order/index","meta":{},"window":{"navigationBarTitleText":"我的订单","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":false}},{"path":"/pages/order/details","meta":{},"window":{"navigationBarTitleText":"订单详情","enablePullDownRefresh":false}},{"path":"/pages/address/index","meta":{},"window":{"navigationBarTitleText":"收货地址"}},{"path":"/pages/address/edit","meta":{},"window":{"navigationBarTitleText":"编辑","enablePullDownRefresh":false}},{"path":"/pages/pay/pay","meta":{},"window":{"navigationBarTitleText":"收银台","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/store/list","meta":{},"window":{"navigationBarTitleText":"商品","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":true}},{"path":"/pages/store/meals","meta":{},"window":{"navigationBarTitleText":"套餐","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":true}},{"path":"/pages/store/search","meta":{},"window":{"navigationBarTitleText":"搜索","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/refund/list","meta":{},"window":{"navigationBarTitleText":"退换货","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/refund/aftersale","meta":{},"window":{"navigationBarTitleText":" 选择售后类型","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/refund/refund_or_exchange_apply","meta":{},"window":{"navigationBarTitleText":"退换货申请","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/refund/exchange","meta":{},"window":{"navigationBarTitleText":"换货","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/account/integral","meta":{},"window":{"navigationBarTitleText":"共力值","navigationBarBackgroundColor":"#34CE98","navigationBarTextStyle":"white"}},{"path":"/pages/account/dt","meta":{},"window":{"navigationBarTitleText":"DT积分","navigationBarBackgroundColor":"#34CE98","backgroundColorTop":"#34CE98","navigationBarTextStyle":"white","titleNView":{"buttons":[{"text":"充值","width":"60","fontSize":"14"}]}}},{"path":"/pages/account/recharge","meta":{},"window":{"navigationBarTitleText":"DT积分充值","navigationBarBackgroundColor":"#FFFFFF","titleNView":{"buttons":[{"text":"充值记录","width":"80","fontSize":"14"}]}}},{"path":"/pages/vip/vip","meta":{},"window":{"navigationBarTitleText":"共力会员","navigationBarBackgroundColor":"#242430","navigationBarTextStyle":"white","backgroundColorTop":"#242430"}},{"path":"/pages/vip/agreement","meta":{},"window":{"navigationBarTitleText":"共力会员协议"}},{"path":"/pages/team/index","meta":{},"window":{"navigationBarTitleText":"共力团队"}},{"path":"/pages/store/shop/shopDetail","meta":{},"window":{"navigationStyle":"custom"}},{"path":"/pages/store/shop/shopList","meta":{},"window":{"navigationBarTitleText":"更多店铺","navigationBarBackgroundColor":"#FFFFFF","enablePullDownRefresh":true}}];
|
||||
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
|
||||
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
|
||||
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:Math.round(f/20)})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:void 0,window:void 0,document:void 0,frames:void 0,self:void 0,location:void 0,navigator:void 0,localStorage:void 0,history:void 0,Caches:void 0,screen:void 0,alert:void 0,confirm:void 0,prompt:void 0,fetch:void 0,XMLHttpRequest:void 0,WebSocket:void 0,webkit:void 0,print:void 0}}}});
|
||||
|
||||
6
unpackage/dist/build/app-plus/app-service.js
vendored
2
unpackage/dist/build/app-plus/app-view.js
vendored
2
unpackage/dist/build/app-plus/manifest.json
vendored
BIN
unpackage/dist/build/app-plus/static/icon/userCloes.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
unpackage/dist/build/app-plus/static/img/team_00.png
vendored
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
unpackage/dist/build/app-plus/static/vip/lv_03.png
vendored
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
unpackage/dist/build/app-plus/static/vip/lv_04.png
vendored
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 195 KiB |
BIN
unpackage/dist/build/app-plus/static/vip/lv_06.png
vendored
Normal file
|
After Width: | Height: | Size: 194 KiB |
10499
unpackage/dist/dev/app-plus/app-service.js
vendored
10603
unpackage/dist/dev/app-plus/app-view.js
vendored
2
unpackage/dist/dev/app-plus/manifest.json
vendored
BIN
unpackage/dist/dev/app-plus/static/background/wallet-code-background.png
vendored
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
unpackage/dist/dev/app-plus/static/icon/share_icon_00.png
vendored
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
unpackage/dist/dev/app-plus/static/icon/share_icon_01.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
unpackage/dist/dev/app-plus/static/icon/share_icon_02.png
vendored
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
unpackage/dist/dev/app-plus/static/icon/sign_btn.png
vendored
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
unpackage/dist/dev/app-plus/static/icon/userCloes.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
unpackage/dist/dev/app-plus/static/img/code_back.png
vendored
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
unpackage/dist/dev/app-plus/static/img/team_00.png
vendored
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
unpackage/dist/dev/app-plus/static/vip/lv_03.png
vendored
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
unpackage/dist/dev/app-plus/static/vip/lv_04.png
vendored
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 195 KiB |
BIN
unpackage/dist/dev/app-plus/static/vip/lv_06.png
vendored
Normal file
|
After Width: | Height: | Size: 194 KiB |