first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

@@ -0,0 +1 @@
6a2a5788-e45c-4206-88f1-5d894965dc7a

View File

@@ -0,0 +1,14 @@
# Windows
[Dd]esktop.ini
Thumbs.db
$RECYCLE.BIN/
# macOS
.DS_Store
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
# Node.js
node_modules/

View File

@@ -0,0 +1 @@
d9268647-e9f3-4ce1-b5df-f4043c275e65

View File

@@ -0,0 +1 @@
95aafb55-4122-4a64-a7ac-c8950676f0da

View File

@@ -0,0 +1,3 @@
{
"workspace.preserveWindow": false
}

View File

@@ -0,0 +1,127 @@
//app.js
import config from './config/config'
App({
onLaunch: function (options) {
if (!!options.query.scene) {
wx.setStorageSync(`${config.prefix}inviteId`, options.query.scene)
}
let that = this;
that.getSystem()
// 版本更新
if (wx.canIUse('getUpdateManager')) {
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
if (res.hasUpdate) {
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新的版本下载失败
wx.showModal({
title: '已经有新版本了哟~',
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~'
})
})
}
})
}
},
// 获取设备信息的方法
getSystem: function () {
var that = this;
wx.getSystemInfo({
success: function (res) {
var statusHeight = res.statusBarHeight;
that.globalData.system = {
screenHeight: res.screenHeight,
titleHeight: 45,
statusHeight: statusHeight,
pageHeight: res.windowHeight - 45 - statusHeight
}
},
})
},
globalData: {
isToken: false,
share: false, // 分享默认为false
system: null,
isOrderList: false,//如果在详情页取消订单则改为true
cartNum: 0,//商城的角标
userInfo: {},//用户个人信息
showSkeleton: true,//首页骨架屏显示关闭
temCart: {//暂存勾选的购物车商品 商城的购物车
total: 0,//勾选的总价
allCart: [],//勾选的商品
}
},
/**
* 小程序的变量全局更新
* @param { string } key 要获取的变量名
* @param { Function } method 回调函数
*/
setWatching: function (key, method) {
let obj = this.globalData;
//加个前缀生成隐藏变量,防止死循环发生
let ori = obj[key]; //obj[key]这个不能放在Object.defineProperty里
if (ori) { //处理已经声明的变量,绑定处理
method(ori);
}
Object.defineProperty(obj, key, {
configurable: true,
enumerable: true,
set: function (value) {
this['__' + key] = value;
method(value); //数据有变化的时候回调函数,实现同步功能
},
get: function () {
if (typeof this['__' + key] == 'undefined') {
if (ori) {
//这里读取数据的时候隐藏变量和 globalData设置不一样所以要做同步处理
this['__' + key] = ori;
return ori;
} else {
return undefined;
}
} else {
return this['__' + key];
}
}
})
},
// 调用utils下的js
loadUtils: function (name) {
return require(`./utils/${name}.js`)
},
// 全局配置
loadConfig: function () {
return require("./config/config.js")
},
// 需要使用async时引入
loadAsync: function () {
const regeneratorRuntime = require("./utils/regenerator-runtime/runtime")
return regeneratorRuntime
},
// 导出接口地址
loadApi: function () {
return require("./http/api")
},
// 导出接口地址
loadHttp: function () {
return require("./http/index")
},
// 导出model模块
loadModel: function (name) {
return require(`./model/${name}`)
}
})

View File

@@ -0,0 +1,102 @@
{
"pages": [
"pages/startUp/startUp",
"pages/auth/auth",
"pages/login/login",
"pages/nearbyStore/nearbyStore",
"pages/laundry/laundry",
"pages/joinWardrobe/joinWardrobe",
"pages/contactUs/contactUs",
"pages/brandList/brandList",
"pages/brandList/brandInfo/brandInfo",
"pages/buyCabinets/buyCabinets",
"pages/userProtocol/userProtocol",
"pages/richText/richText",
"pages/newPeople/newPeople",
"pages/membershipExclusive/membershipExclusive",
"pages/housekeeping/housekeeping",
"pages/serviceInfo/serviceInfo",
"pages/activity/activity"
],
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
},
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "伊莎洗衣",
"backgroundColor": "#fff",
"navigationStyle": "custom",
"navigationBarTextStyle": "black"
},
"plugins": {},
"subpackages": [
{
"root": "mall",
"pages": [
"auth/auth",
"index/shopInfo/shopInfo",
"shopcart/shopcart",
"placeOrder/placeOrder",
"laundryList/laundryList",
"laundryList/laundryInfo/laundryInfo",
"couponCard/couponCard",
"chooseStores/chooseStores",
"chooseStores/storesAdd/storesAdd",
"paid/paid"
]
},
{
"root": "user",
"pages": [
"appointment/appointment",
"addList/addList",
"address/address",
"order/order",
"orderInfo/orderInfo",
"payment/payment",
"payment/card/card",
"couponCard/couponCard",
"couponList/couponList",
"sharingCourtesy/sharingCourtesy",
"feedback/feedback",
"parIncome/parIncome",
"recharge/recharge",
"wardrobe/wardrobe",
"wardrobe/wardrobeInfo/wardrobeInfo",
"setUp/setUp",
"couponExchange/couponExchange",
"balance/balance",
"upgradeCart/upgradeCart",
"upgradeCart/paid/paid",
"appointment/paid/paid",
"cashWithdrawal/cashWithdrawal",
"cashWithdrawal/success/success",
"withdrawalsRecord/withdrawalsRecord",
"groupShopList/groupShopList",
"OneKeyOrder/OrdinaryUsers/OrdinaryUsers",
"OneKeyOrder/GroupUser/Ordinary/Ordinary",
"OneKeyOrder/GroupUser/WorkClothes/WorkClothes"
]
},
{
"root": "view/logistics",
"pages": [
"logCentre/logCentre",
"orderList/orderList",
"appLogistics/appLogistics",
"appLogistics/inApplication/inApplication"
]
}
],
"usingComponents": {
"skeleton": "./component/skeleton/skeleton",
"nav-bar": "/component/navbar/navbar",
"i-toast": "./extend/iview/dist/toast/index",
"loading-prog": "/component/loading-prog/loading-prog",
"popup": "/component/popup/popup"
},
"sitemapLocation": "sitemap.json"
}

View File

@@ -0,0 +1,114 @@
/* 导入全局样式 */
@import "./css/main.wxss";
@import "./css/color.wxss";
@import "./css/box.wxss";
/**app.wxss**/
/* 导入ui框架样式 */
@import "./extend/ColorUI/css/main.wxss";
@import "./extend/ColorUI/css/icon.wxss";
.scrollPage {
height: 100vh;
}
.nav-list {
display: flex;
flex-wrap: wrap;
padding: 0px 40rpx 0px;
justify-content: space-between;
}
.nav-li {
padding: 30rpx;
border-radius: 12rpx;
width: 45%;
margin: 0 2.5% 40rpx;
background-image: url(https://image.weilanwl.com/color2.0/cardBg.png);
background-size: cover;
background-position: center;
position: relative;
z-index: 1;
}
.nav-li::after {
content: "";
position: absolute;
z-index: -1;
background-color: inherit;
width: 100%;
height: 100%;
left: 0;
bottom: -10%;
border-radius: 10rpx;
opacity: 0.2;
transform: scale(0.9, 0.9);
}
.nav-li.cur {
color: #fff;
background: rgb(94, 185, 94);
box-shadow: 4rpx 4rpx 6rpx rgba(94, 185, 94, 0.4);
}
.nav-title {
font-size: 32rpx;
font-weight: 300;
}
.nav-title::first-letter {
font-size: 40rpx;
margin-right: 4rpx;
}
.nav-name {
font-size: 28rpx;
text-transform: Capitalize;
margin-top: 20rpx;
position: relative;
}
.nav-name::before {
content: "";
position: absolute;
display: block;
width: 40rpx;
height: 6rpx;
background: #fff;
bottom: 0;
right: 0;
opacity: 0.5;
}
.nav-name::after {
content: "";
position: absolute;
display: block;
width: 100rpx;
height: 1px;
background: #fff;
bottom: 0;
right: 40rpx;
opacity: 0.3;
}
.nav-name::first-letter {
font-weight: bold;
font-size: 36rpx;
margin-right: 1px;
}
.nav-li text {
position: absolute;
right: 30rpx;
top: 30rpx;
font-size: 52rpx;
width: 60rpx;
height: 60rpx;
text-align: center;
line-height: 60rpx;
}
.text-light {
font-weight: 300;
}

View File

@@ -0,0 +1 @@
f4ba4205-04e9-4df7-840c-37467116a2f7

View File

@@ -0,0 +1 @@
59c5fd67-4518-4cd7-96d2-43b7f7fdfa59

View File

@@ -0,0 +1,23 @@
// component/TabBar/TabBar.js
Component({
/**
* 组件的属性列表
*/
properties: {
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1,32 @@
<!-- component/TabBar/TabBar.wxml -->
<!-- tabbar -->
<view class="TabBar">
<view class="cu-bar tabbar bg-white">
<view data-index="1" bind:tap="tabSwitch" class="action {{index == 1?'text-green':'text-gray'}}">
<view class="cuIcon-homefill"></view>
首页
</view>
<view data-index="2" bind:tap="tabSwitch" class="action {{index == 2?'text-green':'text-gray'}}">
<view class="cuIcon-similar"></view>
价目表
</view>
<view data-index="3" bind:tap="tabSwitch" class="action {{index == 3?'text-green':'text-gray'}} add-action">
<view class="live">
<view class="my-icno">
<image src="/static/img/icon/asdferfhrthjtr.png" />
</view>
<span></span>
<span></span>
</view>
一键下单
</view>
<view data-index="4" bind:tap="tabSwitch" class="action {{index == 4?'text-green':'text-gray'}}">
<view class="cuIcon-cart"></view>
商城
</view>
<view data-index="5" bind:tap="tabSwitch" class="action {{index == 5?'text-green':'text-gray'}}">
<view class="cuIcon-my"></view>
我的
</view>
</view>
</view>

View File

@@ -0,0 +1,2 @@
@import "../../extend/ColorUI/css/main.wxss";
@import "../../extend/ColorUI/css/icon.wxss";

View File

@@ -0,0 +1 @@
8560d1d5-f21b-4e20-bcee-6284751a16e3

View File

@@ -0,0 +1,52 @@
// component/loading-prog/loading-prog.js
const app = getApp();
Component({
/**
* 组件的属性列表
*/
properties: {
isLoading: {
type: Boolean,
value: true
}
},
/**
* 组件的初始数据
*/
data: {
loadProgress: 0,
system: app.globalData.system, //设备相关信息
},
/**
* 在组件实例刚刚被创建时执行
*/
created() {
this.loadProgress()
},
/**
* 组件的方法列表
*/
methods: {
// 加载动画
loadProgress() {
this.setData({
loadProgress: this.data.loadProgress + 3
})
if (this.data.loadProgress < 100) {
setTimeout(() => {
this.loadProgress();
}, 70)
} else {
this.setData({
loadProgress: 0
})
}
if (!this.properties.isLoading) {
this.setData({
loadProgress: 100
})
}
},
}
})

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1,6 @@
<!-- component/loading-prog/loading-prog.wxml -->
<!-- 加载动画 -->
<view class='load-progress load-all {{isLoading?"show":"hide"}}' style="top:{{system.statusHeight+system.titleHeight}}px;">
<view class='load-progress-bar bg-green' style="transform: translate3d(-{{100-loadProgress}}%, 0px, 0px);"></view>
<view class="load-bac"></view>
</view>

View File

@@ -0,0 +1,3 @@
/* component/loading-prog/loading-prog.wxss */
@import "../../extend/ColorUI/css/main.wxss";
@import "../../css/_main.wxss";

View File

@@ -0,0 +1 @@
8dff8546-bd7a-4bb4-a798-1dee8cf77bbb

View File

@@ -0,0 +1,23 @@
// component/loading/loading.js
Component({
/**
* 组件的属性列表
*/
properties: {
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1,2 @@
<!--component/loading/loading.wxml-->
<text>component/loading/loading.wxml</text>

View File

@@ -0,0 +1 @@
/* component/loading/loading.wxss */

View File

@@ -0,0 +1 @@
7d98dc12-1217-4f78-9dc2-dbec623b916f

View File

@@ -0,0 +1,112 @@
const app = getApp();
const model = app.loadModel("index")
const regeneratorRuntime = app.loadAsync()
Component({
/**
* 组件的属性列表
*/
properties: {
isLogin: {
type: Boolean
},
propData: {
type: Number
},
cityInfo: {
type: Object,
value: {
city: "未定位",
city_code: ""
}
},
system: {
type: Object,
value: {
titleHeight: "",
statusHeight: ""
}
},
pageTitle: {
type: String,
value: "伊莎洗衣"
},
isBack: {
type: Boolean,
value: false
},
isLocation: {
type: Boolean,
value: false
},
isContact: {
type: Boolean,
value: false
},
titleColor: {
type: Object,
value: {
bColor: "#ffffff",
tColor: "#333333"
}
},
backColor: {
type: String,
value: null
}
},
/**
* 组件的初始数据
*/
data: {
isCount: 0
},
/**
* 组件的方法列表
*/
methods: {
goBack: function (e) {
var pages = getCurrentPages();
var prevPage = pages[pages.length - 2]
if (!!prevPage) {
wx.navigateBack({
delta: 1
})
} else {
wx.reLaunch({
url: '/pages/auth/auth'
})
}
},
changePhone: function () {
var that = this;
var isCount = that.data.isCount;
that.setData({
isCount: isCount == 0 ? 1 : 0
})
this.triggerEvent('changeInput', {
isCount: isCount == 0 ? 1 : 0
})
},
storeJump: async function (e) {
let getSetting = await model.getauth.getSetting() //获取已经授权的信息
let url = e.currentTarget.dataset.url
if (!getSetting.authSetting['scope.userLocation']) {
// 用户取消授权的处理
wx.showModal({
title: '你拒绝了地理位置授权',
content: '请点击确定,到权限表设置',
success(res) {
if (res.confirm) {
wx.openSetting()
}
}
})
return
}
wx.navigateTo({
url: url
})
}
}
})

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1,18 @@
<!-- component/navber/navber.wxml -->
<!-- components/header/header.wxml -->
<view style="padding-top:{{system.statusHeight+'px'}};background: {{titleColor.bColor}};color: {{titleColor.tColor}};" class='customTitleBox'>
<view class='customBot' style="height:{{system.titleHeight+'px'}}">
<view wx:if="{{isLocation}}" data-url='{{cityInfo.location}}' class="cityBox" bind:tap="storeJump">
<image class='arrowBottom' src='/static/img/icon/dw.png'></image>
{{cityInfo.city}}
<!-- <image class='arrowBottom1' src='/static/img/icon/inverted-icon.png'></image> -->
</view>
<view data-propdata="{{propData}}" data-islogin="{{isLogin}}" style="width:{{system.titleHeight+'px'}}" wx:if="{{isBack}}" bindtap='goBack' class='backBtn'>
<image wx:if="{{backColor == null}}" class='backIcon' src='/static/img/icon/asdwgyjtyj.png'></image>
<image wx:else class='backIcon' src='/static/img/icon/left-fff.png'></image>
</view>
<view bindtap='changePhone' wx:if="{{isContact}}" class='addChange'>添加账户联系人</view>
<view class='customTitle'>{{pageTitle}}</view>
</view>
</view>
<view style="height:{{system.statusHeight+system.titleHeight+'px'}}"></view>

View File

@@ -0,0 +1,77 @@
/* component/navber/navber.wxss */
/* 顶部要固定定位 标题要居中 自定义按钮和标题要和右边微信原生的胶囊上下对齐 */
.customTitleBox {
position: fixed;
left: 0;
top: 0;
right: 0;
z-index: 1001;
}
.customTitle {
font-size: 36rpx;
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 750rpx;
text-align: center;
font-weight: 700;
}
.customBot {
display: flex;
display: -webkit-flex;
align-items: center;
position: relative;
}
.arrowBottom {
width: 28rpx;
/* width: 32rpx; */
height: 32rpx;
margin: 0 10rpx;
}
.arrowBottom1 {
width: 26rpx;
height: 16rpx;
margin: 0 10rpx;
}
.cityBox {
font-size: 32rpx;
display: flex;
display: -webkit-flex;
align-items: center;
justify-content: center;
height: 100%;
margin-left: 30rpx;
position: relative;
z-index: 1000;
}
.backBtn {
height: 100%;
display: flex;
display: -webkit-flex;
align-items: center;
justify-content: center;
margin-left: -10rpx;
position: relative;
z-index: 1000;
}
.backIcon {
width: 44rpx;
height: 44rpx;
}
.addChange {
font-size: 26rpx;
height: 44rpx;
}
.addChange {
font-size: 26rpx;
color: #fff;
}

View File

@@ -0,0 +1 @@
ad4676e5-cb8d-402a-ab3d-f2369f5cc401

View File

@@ -0,0 +1,36 @@
// component/popup/popup.js
Component({
/**
* 组件的属性列表
*/
options:{
multipleSlots: true
},
properties: {
isPopup:{ //是否显示弹出层
type: Boolean,
value: true
},
backClick:{ // 点击背景是否关闭
type: Boolean,
value: true
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
isBackClick () {
if(this.properties.backClick) return;
this.properties.isPopup = false
}
}
})

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1,10 @@
<!--component/popup/popup.wxml-->
<view
catchtouchmove='{{ isPopup }}'
wx:if="{{ isPopup }}"
class="popup"
bindtap="isBackClick"
>
<slot/>
</view>

View File

@@ -0,0 +1,15 @@
/* component/popup/popup.wxss */
.popup {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 9999999;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, 0.75);
display: flex;
align-items: center;
justify-content: center;
}

View File

@@ -0,0 +1 @@
3c856ec5-0e6d-4df8-baa9-716b12cae1ef

View File

@@ -0,0 +1,43 @@
// component/quantityClothes/quantityClothes.js
Component({
/**
* 组件的属性列表
*/
properties: {
isTips: {
type: Boolean,
value: false
}
},
/**
* 组件的初始数据
*/
data: {
num: 0
},
/**
* 组件的方法列表
*/
methods: {
reduce() {
let num = --this.data.num
this.setData({
num: num <= 0 ? 0 : num
})
},
add() {
this.setData({
num: ++this.data.num
})
},
chCount() {
this.triggerEvent('chCount', { num: this.data.num })
},
closeTips() {
this.properties.isTips = false
this.triggerEvent('chCount', { isTips: 'close' })
}
}
})

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1,29 @@
<!-- component/quantityClothes/quantityClothes.wxml -->
<!-- 增减衣物 -->
<view wx:if="{{isTips}}" class="backwash_tips flex-con3 tips">
<view>
<view class="tips_cen">
<view class="tips_cen_tit">本次洗护数量</view>
<view class="flex-con3 mt30">
<view class="tips_cen_num flex-con3">
<view class="num_img" catchtap="reduce">
<image src="/static/img/icon/j1.png" />
</view>
<view class="num_text">{{num}}</view>
<view class="num_img" catchtap="add">
<image src="/static/img/icon/j2.png" />
</view>
</view>
</view>
<!-- <view data-type="remarks" class="tips_remarks">
<view class="flex1 clamp1">{{changeCount.remarks}}</view>
<view class="remarks_xiu">修改</view>
</view> -->
<view class="tips_cen_sub" catchtap="chCount">提交</view>
<!-- <view class="mt20 tips_ts">提示:请在洗衣柜附近开柜!</view> -->
</view>
<view class="tips_img" data-type="num" catchtap="closeTips">
<image src="/static/img/icon/colse_tips.png" />
</view>
</view>
</view>

View File

@@ -0,0 +1,115 @@
@import '../../css/_main.wxss';
/* component/quantityClothes/quantityClothes.wxss */
/* 弹出层 */
.tips{
position: fixed;
top: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 9999;
}
.tips_cen{
width: 600rpx;
background-color: #ffffff;
border-radius: 10rpx;
padding-top: 58rpx;
padding-bottom: 50rpx;
}
.tips_cen_tit{
font-family: PingFang-SC-Bold;
font-size: 36rpx;
color: #000000;
font-weight: 600;
text-align: center;
}
.tips_cen_tit1{
text-align: center;
font-size: 28rpx;
color: #666666;
}
.tips_cen_tit1 span{
color: #ff4838;
}
.tips_cen_text{
width: 520rpx;
height: 200rpx;
background-color: #f5f5f5;
border-radius: 5rpx;
position: relative;
padding: 34rpx 25rpx;
}
.tips_cen_text textarea{
height: 100%;
width: 100%;
}
.tips_cen_num{
width: 520rpx;
height: 120rpx;
background-color: #f5f5f5;
border-radius: 5rpx;
margin: 0 auto;
}
.tips_text_span{
position: absolute;
right: 16rpx;
bottom: 13rpx;
font-family: PingFang-SC-Medium;
font-size: 20rpx;
color: #999999;
}
.tips_cen_sub{
margin: 45rpx auto 0;
width: 550rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background-color: #36d96c;
border-radius: 40rpx;
font-family: PingFang-SC-Medium;
font-size: 32rpx;
color: #ffffff;
}
.tips_img{
margin-top: 50rpx;
text-align: center;
}
.tips_img image{
width: 69rpx;
height: 69rpx;
}
.tips_ts{
text-align: center;
font-family: PingFang-SC-Medium;
font-size: 26rpx;
color: #999999;
}
.tips_remarks{
width: 526rpx;
display: flex;
margin: 20rpx auto 0;
font-family: PingFang-SC-Medium;
font-size: 26rpx;
color: #333333;
}
.remarks_xiu{
display: inline-block;
font-family: PingFang-SC-Medium;
font-size: 26rpx;
color: #1dbf53;
}
.num_img image{
width: 45rpx;
height: 45rpx;
}
.num_text{
line-height: 45rpx;
width: 70rpx;
text-align: center;
}
.tipsRemarks{
z-index: 99999;
}

View File

@@ -0,0 +1 @@
c82a22ae-e8a0-40ae-a271-88481086efcf

View File

@@ -0,0 +1,78 @@
Component({
properties: {
bgcolor: {
type: String,
value: '#FFF'
},
selector: {
type: String,
value: 'skeleton'
},
loading: {
type: String,
value: 'spin'
}
},
data: {
loadingAni: ['spin', 'chiaroscuro'],
systemInfo: {},
skeletonRectLists: [],
skeletonCircleLists: []
},
attached: function () {
//默认的首屏宽高,防止内容闪现
const systemInfo = wx.getSystemInfoSync();
this.setData({
systemInfo: {
width: systemInfo.windowWidth,
height: systemInfo.windowHeight
},
loading: this.data.loadingAni.includes(this.data.loading) ? this.data.loading : 'spin'
})
},
ready: function () {
const that = this;
//绘制背景
wx.createSelectorQuery().selectAll(`.${this.data.selector}`).boundingClientRect().exec(function(res){
that.setData({
'systemInfo.height': res[0][0].height + res[0][0].top
})
});
//绘制矩形
this.rectHandle();
//绘制圆形
this.radiusHandle();
},
methods: {
rectHandle: function () {
const that = this;
//绘制不带样式的节点
wx.createSelectorQuery().selectAll(`.${this.data.selector} >>> .${this.data.selector}-rect`).boundingClientRect().exec(function(res){
that.setData({
skeletonRectLists: res[0]
})
});
},
radiusHandle: function () {
const that = this;
wx.createSelectorQuery().selectAll(`.${this.data.selector} >>> .${this.data.selector}-radius`).boundingClientRect().exec(function(res){
// console.log(res);
that.setData({
skeletonCircleLists: res[0]
})
});
},
}
})

View File

@@ -0,0 +1,3 @@
{
"component": true
}

View File

@@ -0,0 +1,17 @@
<!--<canvas canvas-id="skeleton" disable-scroll="true"></canvas>-->
<view style="width: {{systemInfo.width}}px; height: {{systemInfo.height}}px; background-color: {{bgcolor}}; position: absolute; left:0; top:0; z-index:9998; overflow: hidden;">
<view wx:for="{{skeletonRectLists}}" wx:key="{{index}}" class="{{loading == 'chiaroscuro' ? 'chiaroscuro' : ''}}" style="width: {{item.width}}px; height: {{item.height}}px; background-color: rgb(238,238,238); position: absolute; left: {{item.left}}px; top: {{item.top}}px">
</view>
<view wx:for="{{skeletonCircleLists}}" wx:key="{{index}}" class="{{loading == 'chiaroscuro' ? 'chiaroscuro' : ''}}" style="width: {{item.width}}px; height: {{item.height}}px; background-color: rgb(238,238,238); border-radius: {{item.width}}px; position: absolute; left: {{item.left}}px; top: {{item.top}}px">
</view>
<view class="spinbox" wx:if="{{loading == 'spin'}}">
<view class="spin"></view>
</view>
</view>

View File

@@ -0,0 +1,78 @@
.spinbox{
position: fixed;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
z-index: 9999
}
.spin {
display: inline-block;
width: 64rpx;
height: 64rpx;
}
.spin:after {
content: " ";
display: block;
width: 46rpx;
height: 46rpx;
margin: 1rpx;
border-radius: 50%;
border: 5rpx solid #409eff;
border-color: #409eff transparent #409eff transparent;
animation: spin 1.2s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.chiaroscuro{
width: 100%;
height: 100%;
background: rgb(194, 207, 214);
animation-duration: 2s;
animation-name: blink;
animation-iteration-count: infinite;
}
@keyframes blink {
0% {
opacity: .4;
}
50% {
opacity: 1;
}
100% {
opacity: .4;
}
}
@keyframes flush {
0% {
left: -100%;
}
50% {
left: 0;
}
100% {
left: 100%;
}
}
.shine {
animation: flush 2s linear infinite;
position: absolute;
top: 0;
bottom: 0;
width: 100%;
background: linear-gradient(to left,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, .85) 50%,
rgba(255, 255, 255, 0) 100%
)
}

View File

@@ -0,0 +1 @@
23d03dff-d9c7-41c8-acce-6411e5a0e5e0

View File

@@ -0,0 +1,7 @@
// 项目配置文件
const config = {
baseUrl: __wxConfig.envVersion == "release" ? "https://ceshi.yishaxiyi.com/storeapi" :"https://ceshi.yishaxiyi.com/storeapi", // api基地址 release为线上地址
prefix: "ysxy_",// storage的前缀
isPay: true //是否开启支付功能
}
module.exports = config

View File

@@ -0,0 +1 @@
06346afe-b1dd-4222-b269-d7f0fd7dedcd

View File

@@ -0,0 +1,3 @@
@import "./box.wxss";
@import "./color.wxss";
@import "./main.wxss";

View File

@@ -0,0 +1,150 @@
/* 全局盒子模型样式 */
.mt7{
margin-top: 7rpx;
}
.mt10{
margin-top: 10rpx;
}
.mt20{
margin-top: 20rpx;
}
.mt30{
margin-top: 30rpx;
}
.mt35{
margin-top: 35rpx;
}
.mt40{
margin-top: 40rpx;
}
.mt50{
margin-top: 50rpx;
}
.mt90{
margin-top: 90rpx;
}
.mt100{
margin-top: 100rpx;
}
.mt150{
margin-top: 150rpx;
}
.mr10{
margin-right: 10rpx;
}
.mr15{
margin-right: 15rpx;
}
.mr20{
margin-right: 20rpx;
}
.mr30{
margin-right: 30rpx;
}
.mb5{
margin-bottom: 5rpx;
}
.mb10{
margin-bottom: 10rpx;
}
.mb20{
margin-bottom: 20rpx;
}
.mb50{
margin-bottom: 50rpx;
}
.ml10{
margin-left: 10rpx;
}
.ml20{
margin-left: 20rpx;
}
.ml30{
margin-left: 30rpx;
}
.ml40{
margin-left: 40rpx;
}
.mtb20{
margin: 20rpx 0;
}
.pt10{
padding-top: 10rpx;
}
.pt20{
padding-top: 20rpx;
}
.pt30{
padding-top: 30rpx;
}
.pt40{
padding-top: 40rpx;
}
.pr10{
padding-right: 10rpx;
}
.pb10{
padding-bottom: 10rpx;
}
.pb20{
padding-bottom: 20rpx;
}
.pl10{
padding-left: 10rpx;
}
.pl20{
padding-left: 20rpx;
}
.pl30{
padding-left: 30rpx;
}
.pt40{
padding-top: 40rpx;
}
.pl{
padding: 0 38rpx;
}
.pd20{
padding: 0 20rpx;
}
.pd25{
padding: 0 25rpx;
}
.pd30{
padding: 0 30rpx;
}
.pd40{
padding: 0 40rpx;
}
.pdtb10{
padding: 10rpx 0;
}
.pdtb20{
padding: 20rpx 0;
}
.pdtb30{
padding: 30rpx 0;
}
.fl{
float: left;
}
.fr{
float: right;
}
.w100{
width: 100%;
}
.fw500{
font-weight: 500;
}

View File

@@ -0,0 +1,19 @@
/* 全局颜色 */
.b_red{
background-color: red;
}
.c_red{
color: #ff4838 !important;
}
.gray300{
color: #333333;
}
.gray900{
color: #cccccc;
}
.orange300{
color: #f6ba42;
}
page{
--greens: #1dbf53;
}

View File

@@ -0,0 +1,212 @@
/* 全局css */
.TabBar{
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 99999;
}
/* 平铺水平对齐 */
.flex-con1 {
display: -webkit-flex;
display: flex;
-webkit-justify-content: space-between;
justify-content: space-between;
}
/* 垂直居中对齐 */
.flex-con2 {
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
}
/* 水平垂直居中 */
.flex-con3 {
display: flex;
align-items: center;
justify-content: center;
}
/* 垂直平铺 */
.flex-con4 {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column;
}
/* 水平居中右对齐 */
.flex-con5{
display: -webkit-flex;
display: flex;
-webkit-flex-direction: row-reverse;
flex-direction: row-reverse;
-webkit-align-items: center;
align-items: center;
}
/* 右对齐,盒子底部 */
.flex-con6{
display: -webkit-flex;
display: flex;
-webkit-flex-wrap: wrap-reverse;
flex-wrap: wrap-reverse;
-webkit-flex-direction: row-reverse;
flex-direction: row-reverse;
}
/* 溢出隐藏 */
.clamp1 {
display: -webkit-box !important;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
/* flex布局横向 */
.dis-flex{
display: flex;
}
/* flex布局纵向 */
.dis-flex1{
display: flex;
flex-flow: column;
}
.flex1{
flex: 1;
}
.flex2{
flex: 2;
}
.text-left{
text-align: left;
}
.text-right{
text-align: right;
}
.load-all{
height: 100%;
width: 100%;
}
.load-bac{
height: 100%;
width: 100%;
background: #ffffff;
}
.clear{
clear: both;
}
/* 空列表 */
.empty {
height: 600rpx;
width: 100%;
text-align: center;
font-family: PingFang-SC-Medium;
font-size: 26rpx;
font-weight: 400;
font-stretch: normal;
color: #999;
}
.empty_img {
width: 116rpx;
height: 83rpx;
}
/* 固定到底部按钮 */
.add{
position: fixed;
bottom: 0;
height: 100rpx;
width: 100%;
background-image: linear-gradient(
#1dbf53,
#1dbf53),
linear-gradient(
#2dc44e,
#2dc44e);
background-blend-mode: normal,
normal;
font-family: PingFang-SC-Medium;
font-size: 38rpx;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #ffffff;
text-align: center;
line-height: 100rpx;
}
/* 提交按钮 */
.sub{
margin: 90rpx auto 0;
width: 690rpx;
height: 100rpx;
background-image: linear-gradient(
#1dbf53,
#1dbf53),
linear-gradient(
#2fd152,
#2fd152);
background-blend-mode: normal,
normal;
border-radius: 50rpx;
text-align: center;
line-height: 100rpx;
font-family: PingFang-SC-Bold;
font-size: 38rpx;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #ffffff;
}
/* 动画 */
.live{
}
@keyframes living {
0%{
transform: scale(1);
opacity: 0.5;
}
50%{
transform: scale(1.5);
opacity: 0; /*圆形放大的同时透明度逐渐减小为0*/
}
100%{
transform: scale(1);
opacity: 0.5;
}
}
.liveSpan{
position: absolute;
width: 128rpx;
height: 128rpx;
top: -110rpx;
left: 6px;
right: 0;
background: #21d85c;
border-radius: 50%;
-webkit-animation: living 3s linear infinite;
z-index: -1;
}
.liveSpan:nth-child(2){
-webkit-animation-delay: 1.5s; /*第二个span动画延迟1.5秒*/
}
@keyframes loading {
0%{
transform: scale(0.2);
opacity: 0.5;
}
100%{
transform: scale(1);
opacity: 0; /*圆形放大的同时透明度逐渐减小为0*/
}
}

View File

@@ -0,0 +1 @@
a3404621-06f7-4d54-948e-d5f607c33c1b

View File

@@ -0,0 +1 @@
203e3245-b4d2-4bb6-976e-cf7574c6ebf6

View File

@@ -0,0 +1 @@
b963d095-2c4e-4434-b8d6-4b76d483dbad

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
c5fb51e3-6e36-41d5-8d4b-68dee1b87612

View File

@@ -0,0 +1 @@
e7070433-045e-4a3e-a423-7bec01a09cdd

View File

@@ -0,0 +1 @@
5e9b44c2-583d-4463-9edd-33ed2db98f8d

View File

@@ -0,0 +1,29 @@
Component({
externalClasses: ['i-class', 'i-class-alone'],
properties: {
count: {
type: Number,
value: 0,
observer: 'finalCount'
},
overflowCount: {
type: Number,
value: 99
},
dot: {
type: Boolean,
value: false
},
},
data: {
finalCount: 0
},
methods: {
finalCount() {
this.setData({
finalCount: parseInt(this.data.count) >= parseInt(this.data.overflowCount) ? `${this.data.overflowCount}+` : this.data.count
});
},
}
});

View File

@@ -0,0 +1,3 @@
{
"component": true
}

View File

@@ -0,0 +1,5 @@
<view class="i-class i-badge">
<slot></slot>
<view class="i-badge-dot" wx:if="{{ dot }}"></view>
<view class="i-badge-count i-class-alone" wx:elif="{{ count !== 0 }}">{{ finalCount }}</view>
</view>

View File

@@ -0,0 +1 @@
.i-badge{position:relative;display:inline-block;line-height:1;vertical-align:middle}.i-badge-count{position:absolute;transform:translateX(50%);top:-6px;right:0;height:18px;border-radius:9px;min-width:18px;background:#ed3f14;border:1px solid transparent;color:#fff;line-height:18px;text-align:center;padding:0 5px;font-size:12px;white-space:nowrap;transform-origin:-10% center;z-index:10;box-shadow:0 0 0 1px #fff;box-sizing:border-box;text-rendering:optimizeLegibility}.i-badge-count-alone{top:auto;display:block;position:relative;transform:translateX(0)}.i-badge-dot{position:absolute;transform:translateX(-50%);transform-origin:0 center;top:-4px;right:-8px;height:8px;width:8px;border-radius:100%;background:#ed3f14;z-index:10;box-shadow:0 0 0 1px #fff}

View File

@@ -0,0 +1 @@
f3f73713-c88d-41d9-8403-7aa414a3840c

View File

@@ -0,0 +1,37 @@
function getCtx (selector) {
const pages = getCurrentPages();
const ctx = pages[pages.length - 1];
const componentCtx = ctx.selectComponent(selector);
if (!componentCtx) {
console.error('无法找到对应的组件,请按文档说明使用组件');
return null;
}
return componentCtx;
}
function Toast(options) {
const { selector = '#toast' } = options;
const ctx = getCtx(selector);
ctx.handleShow(options);
}
Toast.hide = function (selector = '#toast') {
const ctx = getCtx(selector);
ctx.handleHide();
};
function Message(options) {
const { selector = '#message' } = options;
const ctx = getCtx(selector);
ctx.handleShow(options);
}
module.exports = {
$Toast: Toast,
$Message: Message
};

View File

@@ -0,0 +1 @@
7a8dec79-d5ba-48d7-b345-54d95510f1c5

View File

@@ -0,0 +1,22 @@
Component({
externalClasses: ['i-class'],
properties: {
type: {
type: String,
value: ''
},
custom: {
type: String,
value: ''
},
size: {
type: Number,
value: 14
},
color: {
type: String,
value: ''
}
}
});

View File

@@ -0,0 +1,3 @@
{
"component": true
}

View File

@@ -0,0 +1 @@
<view class="i-class i-icon {{ type === '' ? '' : 'i-icon-' + type }} {{ custom }}" style="font-size: {{ size }}px; {{ color ? 'color:' + color : '' }}"></view>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
329dcedb-f785-4c7d-9146-07ae7ebfc6d8

View File

@@ -0,0 +1,101 @@
function addNum (num1, num2) {
let sq1, sq2, m;
try {
sq1 = num1.toString().split('.')[1].length;
}
catch (e) {
sq1 = 0;
}
try {
sq2 = num2.toString().split('.')[1].length;
}
catch (e) {
sq2 = 0;
}
m = Math.pow(10, Math.max(sq1, sq2));
return (Math.round(num1 * m) + Math.round(num2 * m)) / m;
}
Component({
externalClasses: ['i-class'],
properties: {
// small || default || large
size: String,
value: {
type: Number,
value: 1
},
min: {
type: Number,
value: -Infinity
},
max: {
type: Number,
value: Infinity
},
step: {
type: Number,
value: 1
}
},
methods: {
handleChangeStep(e, type) {
const { dataset = {} } = e.currentTarget;
const { disabled } = dataset;
const { step } = this.data;
let { value } = this.data;
if (disabled) return null;
if (type === 'minus') {
value = addNum(value, -step);
} else if (type === 'plus') {
value = addNum(value, step);
}
if (value < this.data.min || value > this.data.max) return null;
this.handleEmit(value, type);
},
handleMinus(e) {
this.handleChangeStep(e, 'minus');
},
handlePlus(e) {
this.handleChangeStep(e, 'plus');
},
handleBlur(e) {
let { value } = e.detail;
const { min, max } = this.data;
if (!value) {
setTimeout(() => {
this.handleEmit(value);
}, 16);
return;
}
value = +value;
if (value > max) {
value = max;
} else if (value < min) {
value = min;
}
this.handleEmit(value);
},
handleEmit (value, type) {
const data = {
value: value
};
if (type) data.type = type;
this.triggerEvent('change', data);
}
}
});

View File

@@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"wux-icon": "../../../wux/dist/icon/index"
}
}

View File

@@ -0,0 +1,9 @@
<view class="i-class i-input-number i-input-number-size-{{ size }}">
<view class="i-input-number-minus {{ value <= min ? 'i-input-number-disabled' : '' }}" data-disabled="{{ value <= min }}" catchtap="handleMinus">
<wux-icon size="18" type="md-remove" />
</view>
<input disabled class="i-input-number-text {{ min >= max ? 'i-input-number-disabled' : '' }}" type="number" value="{{ value }}" bindblur="handleBlur" />
<view class="i-input-number-plus {{ value >= max ? 'i-input-number-disabled' : '' }}" data-disabled="{{ value >= max }}" catchtap="handlePlus">
<wux-icon size="18" type="md-add" />
</view>
</view>

View File

@@ -0,0 +1 @@
.i-input-number{color:#495060}.i-input-number view{display:inline-block;line-height:20px;padding:5px 0;text-align:center;min-width:40px;box-sizing:border-box;vertical-align:middle;font-size:12px;border:1rpx solid #dddee1}.i-input-number-minus{border-right:none;border-radius:2px 0 0 2px}.i-input-number-plus{border-left:none;border-radius:0 2px 2px 0}.i-input-number-text{border:1rpx solid #dddee1;display:inline-block;text-align:center;vertical-align:middle;height:30px;width:40px;min-height:auto;font-size:12px;line-height:30px}.i-input-number-disabled{border-color:#dddee1;color:#bbbec4;background:#f7f7f7}

View File

@@ -0,0 +1 @@
d18574ad-fea5-4631-8d02-df4c37ff7b1a

View File

@@ -0,0 +1,50 @@
Component({
externalClasses: ['i-class'],
relations: {
'../tabs/index': {
type: 'parent'
}
},
properties: {
key: {
type: String,
value: ''
},
title: {
type: String,
value: ''
},
dot: {
type: Boolean,
value: false
},
count: {
type: Number,
value: 0
}
},
data: {
current: false,
currentColor: '',
scroll: false
},
methods: {
changeCurrent (current) {
this.setData({ current });
},
changeCurrentColor (currentColor) {
this.setData({ currentColor });
},
changeScroll (scroll) {
this.setData({ scroll });
},
handleClickItem () {
const parent = this.getRelationNodes('../tabs/index')[0];
parent.emitEvent(this.data.key);
}
}
});

View File

@@ -0,0 +1,7 @@
{
"component": true,
"usingComponents":
{
"i-badge": "../badge/index"
}
}

View File

@@ -0,0 +1,9 @@
<view class="i-class i-tabs-tab {{ scroll ? 'i-tabs-tab-scroll' : '' }} {{ current ? 'i-tabs-tab-current' : '' }}" bindtap="handleClickItem">
<i-badge dot="{{ dot }}" count="{{ dot ? 0 : count }}">
<view>
<view class="i-tabs-tab-title {{ current ? 'i-tabs-tab-title-current' : '' }}" wx:if="{{ current && currentColor }}" style="color: {{ currentColor }}">{{ title }}</view>
<view class="i-tabs-tab-title {{ current ? 'i-tabs-tab-title-current' : '' }}" wx:else>{{ title }}</view>
</view>
</i-badge>
<view class="i-tabs-tab-bar" wx:if="{{ current }}" style="background: {{ currentColor }}"></view>
</view>

View File

@@ -0,0 +1 @@
.i-tabs-tab{flex:1;display:flex;width:100%;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;text-align:center;position:relative}.i-tabs-tab-bar{display:block;width:100%;height:3px;background:0 0;position:absolute;bottom:0;left:0;background:#1dbf45}.i-tabs-tab-title{font-size:14px;text-align:center;box-sizing:border-box;color:#80848f}.i-tabs-tab-title-current{color:#1dbf45;font-weight:500;}.i-tabs-tab-scroll{display:inline-block;}

View File

@@ -0,0 +1 @@
30522d48-eaa5-4d6f-aba1-85fbbbed5420

View File

@@ -0,0 +1,56 @@
Component({
externalClasses: ['i-class'],
relations: {
'../tab/index': {
type: 'child',
linked () {
this.changeCurrent();
},
linkChanged () {
this.changeCurrent();
},
unlinked () {
this.changeCurrent();
}
}
},
properties: {
current: {
type: String,
value: '',
observer: 'changeCurrent'
},
color: {
type: String,
value: ''
},
scroll: {
type: Boolean,
value: false
},
fixed: {
type: Boolean,
value: false
}
},
methods: {
changeCurrent (val = this.data.current) {
let items = this.getRelationNodes('../tab/index');
const len = items.length;
if (len > 0) {
items.forEach(item => {
item.changeScroll(this.data.scroll);
item.changeCurrent(item.data.key === val);
item.changeCurrentColor(this.data.color);
});
}
},
emitEvent (key) {
this.triggerEvent('change', { key });
}
}
});

View File

@@ -0,0 +1,3 @@
{
"component": true
}

View File

@@ -0,0 +1,2 @@
<scroll-view wx:if="{{ scroll }}" scroll-x="true" class="i-class i-tabs i-tabs-scroll {{ fixed ? 'i-tabs-fixed' : '' }}"><slot></slot></scroll-view>
<view wx:else class="i-class i-tabs {{ fixed ? 'i-tabs-fixed' : '' }}"><slot></slot></view>

View File

@@ -0,0 +1 @@
.i-tabs{display:flex;width:100%;height:42px;line-height:42px;box-sizing:border-box;position:relative;justify-content:space-around;align-items:center;-webkit-box-align:center;background:#fff}.i-tabs::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-bottom-width:1px}.i-tabs-scroll{display:block;overflow-x:auto;-webkit-overflow-scrolling: touch;white-space:nowrap}.i-tabs-fixed{position:fixed;top:0;z-index:2}

View File

@@ -0,0 +1 @@
53e3281c-0cd2-4342-b252-fae4d4a980a1

View File

@@ -0,0 +1,48 @@
const default_data = {
visible: false,
content: '',
icon: '',
image: '',
duration: 2,
mask: true,
type: 'default', // default || success || warning || error || loading
};
let timmer = null;
Component({
externalClasses: ['i-class'],
data: {
...default_data
},
methods: {
handleShow (options) {
const { type = 'default', duration = 2 } = options;
this.setData({
...options,
type,
duration,
visible: true
});
const d = this.data.duration * 1000;
if (timmer) clearTimeout(timmer);
if (d !== 0) {
timmer = setTimeout(() => {
this.handleHide();
timmer = null;
}, d);
}
},
handleHide () {
this.setData({
...default_data
});
}
}
});

View File

@@ -0,0 +1,7 @@
{
"component": true,
"usingComponents":
{
"i-icon": "../icon/index"
}
}

View File

@@ -0,0 +1,16 @@
<view class="i-toast-mask" wx:if="{{ visible && mask }}" bindtap="handleHide"></view>
<view class="i-class i-toast {{ type }}" wx:if="{{ visible }}">
<block wx:if="{{ type !== 'default' }}">
<view class="i-toast-type">
<!-- <i-icon i-class="i-toast-icon" type="success" wx:if="{{ type === 'success' }}"></i-icon>
<i-icon i-class="i-toast-icon" type="prompt" wx:elif="{{ type === 'warning' }}"></i-icon>
<i-icon i-class="i-toast-icon" type="delete" wx:elif="{{ type === 'error' }}"></i-icon>
<view class="i-toast-icon i-toast-loading" wx:elif="{{ type === 'loading' }}"></view> -->
</view>
</block>
<block wx:else>
<i-icon i-class="i-toast-icon" type="{{ icon }}" wx:if="{{ icon }}"></i-icon>
<image class="i-toast-image" src="{{ image }}" wx:if="{{ image }}" mode="aspectFit"></image>
</block>
<view class="i-toast-content {{ type }}" wx:if="{{ content }}">{{ content }}</view>
</view>

View File

@@ -0,0 +1,17 @@
.i-toast{position:fixed;top:35%;left:50%;transform:translate3d(-50%,-50%,0);background:rgba(0,0,0,.7);color:#fff;font-size:14px;line-height:1.5em;margin:0 auto;box-sizing:border-box;padding:10px 18px;text-align:center;border-radius:4px;z-index:1010}.i-toast-mask{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1010}.i-toast-icon{font-size:38px!important;margin-bottom:6px}.i-toast-image{max-width:100px;max-height:100px}.i-toast-loading{display:inline-block;vertical-align:middle;width:28px;height:28px;background:0 0;border-radius:50%;border:2px solid #fff;border-color:#fff #fff #fff #2d8cf0;animation:btn-spin .8s linear;animation-iteration-count:infinite}@keyframes btn-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
.success {
color: #67c23a;
background-color: #f0f9eb;
border-color: #e1f3d8;
}
.error{
color: #f56c6c;
background-color: #fef0f0;
border-color: #fde2e2;
}
.warning{
color: #e6a23c;
background-color: #fdf6ec;
border-color: #faecd8;
}

View File

@@ -0,0 +1 @@
5a4a69b2-522e-494b-9451-0bf66e6ec721

View File

@@ -0,0 +1 @@
2c8c7cbc-f5bb-4920-a3d8-2fe8e8f3ead3

View File

@@ -0,0 +1 @@
17eec174-b9dc-4315-bc63-649707290592

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,3 @@
{
"component": true
}

View File

@@ -0,0 +1,3 @@
<view class="wux-class {{ wrapCls }} {{ animateCss }}" bindtap="onTap" catchtouchmove="{{ disableScroll ? 'noop' : '' }}" bindtransitionend="onTransitionEnd" bindanimationend="onAnimationEnd" wx:if="{{ animateStatus !== 'unmounted' }}" style="{{ extStyle }}">
<slot></slot>
</view>

View File

@@ -0,0 +1 @@
.wux-animate--fadeIn-enter{transition:opacity .3s;opacity:0}.wux-animate--fadeIn-enter-active,.wux-animate--fadeIn-enter-done{opacity:1}.wux-animate--fadeIn-exit{transition:opacity .3s;opacity:1}.wux-animate--fadeIn-exit-active,.wux-animate--fadeIn-exit-done{opacity:0}.wux-animate--fadeInDown-enter{transition:opacity .3s,transform .3s;opacity:0;transform:translate3d(0,-100%,0)}.wux-animate--fadeInDown-enter-active,.wux-animate--fadeInDown-enter-done{opacity:1;transform:none}.wux-animate--fadeInDown-exit{transition:opacity .3s,transform .3s;opacity:1;transform:none}.wux-animate--fadeInDown-exit-active,.wux-animate--fadeInDown-exit-done{opacity:0;transform:translate3d(0,-100%,0)}.wux-animate--fadeInLeft-enter{transition:opacity .3s,transform .3s;opacity:0;transform:translate3d(-100%,0,0)}.wux-animate--fadeInLeft-enter-active,.wux-animate--fadeInLeft-enter-done{opacity:1;transform:none}.wux-animate--fadeInLeft-exit{transition:opacity .3s,transform .3s;opacity:1;transform:none}.wux-animate--fadeInLeft-exit-active,.wux-animate--fadeInLeft-exit-done{opacity:0;transform:translate3d(-100%,0,0)}.wux-animate--fadeInRight-enter{transition:opacity .3s,transform .3s;opacity:0;transform:translate3d(100%,0,0)}.wux-animate--fadeInRight-enter-active,.wux-animate--fadeInRight-enter-done{opacity:1;transform:none}.wux-animate--fadeInRight-exit{transition:opacity .3s,transform .3s;opacity:1;transform:none}.wux-animate--fadeInRight-exit-active,.wux-animate--fadeInRight-exit-done{opacity:0;transform:translate3d(100%,0,0)}.wux-animate--fadeInUp-enter{transition:opacity .3s,transform .3s;opacity:0;transform:translate3d(0,100%,0)}.wux-animate--fadeInUp-enter-active,.wux-animate--fadeInUp-enter-done{opacity:1;transform:none}.wux-animate--fadeInUp-exit{transition:opacity .3s,transform .3s;opacity:1;transform:none}.wux-animate--fadeInUp-exit-active,.wux-animate--fadeInUp-exit-done{opacity:0;transform:translate3d(0,100%,0)}.wux-animate--slideInUp-enter{transition:transform .3s;transform:translate3d(0,100%,0);visibility:visible}.wux-animate--slideInUp-enter-active,.wux-animate--slideInUp-enter-done{transform:translateZ(0)}.wux-animate--slideInUp-exit{transition:transform .3s;transform:translateZ(0)}.wux-animate--slideInUp-exit-active,.wux-animate--slideInUp-exit-done{transform:translate3d(0,100%,0);visibility:visible}.wux-animate--slideInDown-enter{transition:transform .3s;transform:translate3d(0,-100%,0);visibility:visible}.wux-animate--slideInDown-enter-active,.wux-animate--slideInDown-enter-done{transform:translateZ(0)}.wux-animate--slideInDown-exit{transition:transform .3s;transform:translateZ(0)}.wux-animate--slideInDown-exit-active,.wux-animate--slideInDown-exit-done{transform:translate3d(0,-100%,0);visibility:visible}.wux-animate--slideInLeft-enter{transition:transform .3s;transform:translate3d(-100%,0,0);visibility:visible}.wux-animate--slideInLeft-enter-active,.wux-animate--slideInLeft-enter-done{transform:translateZ(0)}.wux-animate--slideInLeft-exit{transition:transform .3s;transform:translateZ(0)}.wux-animate--slideInLeft-exit-active,.wux-animate--slideInLeft-exit-done{transform:translate3d(-100%,0,0);visibility:visible}.wux-animate--slideInRight-enter{transition:transform .3s;transform:translate3d(100%,0,0);visibility:visible}.wux-animate--slideInRight-enter-active,.wux-animate--slideInRight-enter-done{transform:none}.wux-animate--slideInRight-exit{transition:transform .3s;transform:none}.wux-animate--slideInRight-exit-active,.wux-animate--slideInRight-exit-done{transform:translate3d(100%,0,0);visibility:visible}.wux-animate--zoom-enter{transition:all .3s cubic-bezier(.215,.61,.355,1);opacity:.01;transform:scale(.75)}.wux-animate--zoom-enter-active,.wux-animate--zoom-enter-done{opacity:1;transform:none}.wux-animate--zoom-exit{transition:all .25s linear;transform:none}.wux-animate--zoom-exit-active,.wux-animate--zoom-exit-done{opacity:.01;transform:scale(.75)}.wux-animate--punch-enter{transition:all .3s cubic-bezier(.215,.61,.355,1);opacity:.01;transform:scale(1.35)}.wux-animate--punch-enter-active,.wux-animate--punch-enter-done{opacity:1;transform:none}.wux-animate--punch-exit{transition:all .25s linear;transform:none}.wux-animate--punch-exit-active,.wux-animate--punch-exit-done{opacity:.01;transform:scale(1.35)}

View File

@@ -0,0 +1 @@
f9e3c0ce-1597-4fea-ac93-c6345a9dce13

View File

@@ -0,0 +1 @@
"use strict";var _baseComponent=_interopRequireDefault(require("../helpers/baseComponent"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(0,_baseComponent.default)({properties:{prefixCls:{type:String,value:"wux-backdrop"},transparent:{type:Boolean,value:!1},zIndex:{type:Number,value:1e3},classNames:{type:null,value:"wux-animate--fadeIn"}},computed:{classes:["prefixCls, transparent",function(e,t){return{wrap:t?"".concat(e,"--transparent"):e}}]},methods:{retain:function(){"number"==typeof this.backdropHolds&&this.backdropHolds||(this.backdropHolds=0),this.backdropHolds=this.backdropHolds+1,1===this.backdropHolds&&this.setData({in:!0})},release:function(){1===this.backdropHolds&&this.setData({in:!1}),this.backdropHolds=Math.max(0,this.backdropHolds-1)},onClick:function(){this.triggerEvent("click")}}});

View File

@@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"wux-animation-group": "../animation-group/index"
}
}

Some files were not shown because too many files have changed in this diff Show More