luna-mobile-weapp 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/miniprogram_dist/action-sheet/index.js +59 -0
- package/miniprogram_dist/action-sheet/index.json +4 -0
- package/miniprogram_dist/action-sheet/index.wxml +18 -0
- package/miniprogram_dist/action-sheet/index.wxss +1 -0
- package/miniprogram_dist/address-edit/index.js +130 -0
- package/miniprogram_dist/address-edit/index.json +4 -0
- package/miniprogram_dist/address-edit/index.wxml +63 -0
- package/miniprogram_dist/address-edit/index.wxss +1 -0
- package/miniprogram_dist/address-list/index.js +57 -0
- package/miniprogram_dist/address-list/index.json +4 -0
- package/miniprogram_dist/address-list/index.wxml +37 -0
- package/miniprogram_dist/address-list/index.wxss +1 -0
- package/miniprogram_dist/aside/index.js +17 -0
- package/miniprogram_dist/aside/index.json +4 -0
- package/miniprogram_dist/aside/index.wxml +5 -0
- package/miniprogram_dist/aside/index.wxss +1 -0
- package/miniprogram_dist/avatar/index.js +35 -0
- package/miniprogram_dist/avatar/index.json +4 -0
- package/miniprogram_dist/avatar/index.wxml +13 -0
- package/miniprogram_dist/avatar/index.wxss +1 -0
- package/miniprogram_dist/back-top/index.js +38 -0
- package/miniprogram_dist/back-top/index.json +7 -0
- package/miniprogram_dist/back-top/index.wxml +5 -0
- package/miniprogram_dist/back-top/index.wxss +1 -0
- package/miniprogram_dist/badge/index.js +35 -0
- package/miniprogram_dist/badge/index.json +4 -0
- package/miniprogram_dist/badge/index.wxml +9 -0
- package/miniprogram_dist/badge/index.wxss +1 -0
- package/miniprogram_dist/button/index.js +39 -0
- package/miniprogram_dist/button/index.json +4 -0
- package/miniprogram_dist/button/index.wxml +5 -0
- package/miniprogram_dist/button/index.wxss +1 -0
- package/miniprogram_dist/captcha/index.js +37 -0
- package/miniprogram_dist/captcha/index.json +8 -0
- package/miniprogram_dist/captcha/index.wxml +38 -0
- package/miniprogram_dist/captcha/index.wxss +1 -0
- package/miniprogram_dist/card/index.js +30 -0
- package/miniprogram_dist/card/index.json +4 -0
- package/miniprogram_dist/card/index.wxml +27 -0
- package/miniprogram_dist/card/index.wxss +1 -0
- package/miniprogram_dist/category-menu/index.js +42 -0
- package/miniprogram_dist/category-menu/index.json +4 -0
- package/miniprogram_dist/category-menu/index.wxml +23 -0
- package/miniprogram_dist/category-menu/index.wxss +1 -0
- package/miniprogram_dist/cell/index.js +48 -0
- package/miniprogram_dist/cell/index.json +7 -0
- package/miniprogram_dist/cell/index.wxml +35 -0
- package/miniprogram_dist/cell/index.wxss +1 -0
- package/miniprogram_dist/cell-group/index.js +13 -0
- package/miniprogram_dist/cell-group/index.json +4 -0
- package/miniprogram_dist/cell-group/index.wxml +9 -0
- package/miniprogram_dist/cell-group/index.wxss +1 -0
- package/miniprogram_dist/checkbox/index.js +50 -0
- package/miniprogram_dist/checkbox/index.json +4 -0
- package/miniprogram_dist/checkbox/index.wxml +17 -0
- package/miniprogram_dist/checkbox/index.wxss +1 -0
- package/miniprogram_dist/circle-progress/index.js +52 -0
- package/miniprogram_dist/circle-progress/index.json +4 -0
- package/miniprogram_dist/circle-progress/index.wxml +13 -0
- package/miniprogram_dist/circle-progress/index.wxss +1 -0
- package/miniprogram_dist/collapse/index.js +31 -0
- package/miniprogram_dist/collapse/index.json +4 -0
- package/miniprogram_dist/collapse/index.wxml +5 -0
- package/miniprogram_dist/collapse/index.wxss +1 -0
- package/miniprogram_dist/collapse-item/index.js +42 -0
- package/miniprogram_dist/collapse-item/index.json +7 -0
- package/miniprogram_dist/collapse-item/index.wxml +18 -0
- package/miniprogram_dist/collapse-item/index.wxss +1 -0
- package/miniprogram_dist/common/runtime.js +234 -0
- package/miniprogram_dist/container/index.js +18 -0
- package/miniprogram_dist/container/index.json +4 -0
- package/miniprogram_dist/container/index.wxml +5 -0
- package/miniprogram_dist/container/index.wxss +1 -0
- package/miniprogram_dist/count-down/index.js +58 -0
- package/miniprogram_dist/count-down/index.json +4 -0
- package/miniprogram_dist/count-down/index.wxml +14 -0
- package/miniprogram_dist/count-down/index.wxss +1 -0
- package/miniprogram_dist/count-up/index.js +56 -0
- package/miniprogram_dist/count-up/index.json +4 -0
- package/miniprogram_dist/count-up/index.wxml +2 -0
- package/miniprogram_dist/count-up/index.wxss +1 -0
- package/miniprogram_dist/date-time-picker/index.js +134 -0
- package/miniprogram_dist/date-time-picker/index.json +4 -0
- package/miniprogram_dist/date-time-picker/index.wxml +77 -0
- package/miniprogram_dist/date-time-picker/index.wxss +1 -0
- package/miniprogram_dist/divider/index.js +22 -0
- package/miniprogram_dist/divider/index.json +4 -0
- package/miniprogram_dist/divider/index.wxml +13 -0
- package/miniprogram_dist/divider/index.wxss +1 -0
- package/miniprogram_dist/drop-down-menu/index.js +33 -0
- package/miniprogram_dist/drop-down-menu/index.json +7 -0
- package/miniprogram_dist/drop-down-menu/index.wxml +19 -0
- package/miniprogram_dist/drop-down-menu/index.wxss +1 -0
- package/miniprogram_dist/empty/index.js +21 -0
- package/miniprogram_dist/empty/index.json +7 -0
- package/miniprogram_dist/empty/index.wxml +17 -0
- package/miniprogram_dist/empty/index.wxss +1 -0
- package/miniprogram_dist/fixed-view/index.js +36 -0
- package/miniprogram_dist/fixed-view/index.json +4 -0
- package/miniprogram_dist/fixed-view/index.wxml +9 -0
- package/miniprogram_dist/fixed-view/index.wxss +1 -0
- package/miniprogram_dist/flex/index.js +31 -0
- package/miniprogram_dist/flex/index.json +4 -0
- package/miniprogram_dist/flex/index.wxml +5 -0
- package/miniprogram_dist/flex/index.wxss +1 -0
- package/miniprogram_dist/float-button/index.js +35 -0
- package/miniprogram_dist/float-button/index.json +7 -0
- package/miniprogram_dist/float-button/index.wxml +8 -0
- package/miniprogram_dist/float-button/index.wxss +1 -0
- package/miniprogram_dist/footer/index.js +17 -0
- package/miniprogram_dist/footer/index.json +4 -0
- package/miniprogram_dist/footer/index.wxml +5 -0
- package/miniprogram_dist/footer/index.wxss +1 -0
- package/miniprogram_dist/form/index.js +41 -0
- package/miniprogram_dist/form/index.json +4 -0
- package/miniprogram_dist/form/index.wxml +5 -0
- package/miniprogram_dist/form/index.wxss +1 -0
- package/miniprogram_dist/form-item/index.js +30 -0
- package/miniprogram_dist/form-item/index.json +4 -0
- package/miniprogram_dist/form-item/index.wxml +20 -0
- package/miniprogram_dist/form-item/index.wxss +1 -0
- package/miniprogram_dist/grid/index.js +22 -0
- package/miniprogram_dist/grid/index.json +4 -0
- package/miniprogram_dist/grid/index.wxml +5 -0
- package/miniprogram_dist/grid/index.wxss +1 -0
- package/miniprogram_dist/grid-item/index.js +41 -0
- package/miniprogram_dist/grid-item/index.json +7 -0
- package/miniprogram_dist/grid-item/index.wxml +21 -0
- package/miniprogram_dist/grid-item/index.wxss +1 -0
- package/miniprogram_dist/guide/index.js +93 -0
- package/miniprogram_dist/guide/index.json +4 -0
- package/miniprogram_dist/guide/index.wxml +28 -0
- package/miniprogram_dist/guide/index.wxss +1 -0
- package/miniprogram_dist/header/index.js +17 -0
- package/miniprogram_dist/header/index.json +4 -0
- package/miniprogram_dist/header/index.wxml +5 -0
- package/miniprogram_dist/header/index.wxss +1 -0
- package/miniprogram_dist/highlight/index.js +42 -0
- package/miniprogram_dist/highlight/index.json +4 -0
- package/miniprogram_dist/highlight/index.wxml +10 -0
- package/miniprogram_dist/highlight/index.wxss +1 -0
- package/miniprogram_dist/icon/index.js +26 -0
- package/miniprogram_dist/icon/index.json +4 -0
- package/miniprogram_dist/icon/index.wxml +5 -0
- package/miniprogram_dist/icon/index.wxss +1 -0
- package/miniprogram_dist/image/index.js +51 -0
- package/miniprogram_dist/image/index.json +4 -0
- package/miniprogram_dist/image/index.wxml +13 -0
- package/miniprogram_dist/image/index.wxss +1 -0
- package/miniprogram_dist/input/index.js +121 -0
- package/miniprogram_dist/input/index.json +7 -0
- package/miniprogram_dist/input/index.wxml +35 -0
- package/miniprogram_dist/input/index.wxss +1 -0
- package/miniprogram_dist/input-number/index.js +71 -0
- package/miniprogram_dist/input-number/index.json +7 -0
- package/miniprogram_dist/input-number/index.wxml +9 -0
- package/miniprogram_dist/input-number/index.wxss +1 -0
- package/miniprogram_dist/keyboard/index.js +84 -0
- package/miniprogram_dist/keyboard/index.json +7 -0
- package/miniprogram_dist/keyboard/index.wxml +27 -0
- package/miniprogram_dist/keyboard/index.wxss +1 -0
- package/miniprogram_dist/lazy-image/index.js +53 -0
- package/miniprogram_dist/lazy-image/index.json +4 -0
- package/miniprogram_dist/lazy-image/index.wxml +16 -0
- package/miniprogram_dist/lazy-image/index.wxss +1 -0
- package/miniprogram_dist/line-progress/index.js +45 -0
- package/miniprogram_dist/line-progress/index.json +4 -0
- package/miniprogram_dist/line-progress/index.wxml +14 -0
- package/miniprogram_dist/line-progress/index.wxss +1 -0
- package/miniprogram_dist/load-more/index.js +23 -0
- package/miniprogram_dist/load-more/index.json +7 -0
- package/miniprogram_dist/load-more/index.wxml +21 -0
- package/miniprogram_dist/load-more/index.wxss +1 -0
- package/miniprogram_dist/loading/index.js +28 -0
- package/miniprogram_dist/loading/index.json +4 -0
- package/miniprogram_dist/loading/index.wxml +12 -0
- package/miniprogram_dist/loading/index.wxss +1 -0
- package/miniprogram_dist/main/index.js +63 -0
- package/miniprogram_dist/main/index.json +4 -0
- package/miniprogram_dist/main/index.wxml +5 -0
- package/miniprogram_dist/main/index.wxss +1 -0
- package/miniprogram_dist/navbar/index.js +37 -0
- package/miniprogram_dist/navbar/index.json +7 -0
- package/miniprogram_dist/navbar/index.wxml +23 -0
- package/miniprogram_dist/navbar/index.wxss +1 -0
- package/miniprogram_dist/notice-bar/index.js +79 -0
- package/miniprogram_dist/notice-bar/index.json +7 -0
- package/miniprogram_dist/notice-bar/index.wxml +18 -0
- package/miniprogram_dist/notice-bar/index.wxss +1 -0
- package/miniprogram_dist/page/index.js +14 -0
- package/miniprogram_dist/page/index.json +4 -0
- package/miniprogram_dist/page/index.wxml +7 -0
- package/miniprogram_dist/page/index.wxss +0 -0
- package/miniprogram_dist/pin-input/index.js +32 -0
- package/miniprogram_dist/pin-input/index.json +4 -0
- package/miniprogram_dist/pin-input/index.wxml +5 -0
- package/miniprogram_dist/pin-input/index.wxss +1 -0
- package/miniprogram_dist/popup/index.js +60 -0
- package/miniprogram_dist/popup/index.json +4 -0
- package/miniprogram_dist/popup/index.wxml +9 -0
- package/miniprogram_dist/popup/index.wxss +1 -0
- package/miniprogram_dist/pull-refresh/index.js +56 -0
- package/miniprogram_dist/pull-refresh/index.json +4 -0
- package/miniprogram_dist/pull-refresh/index.wxml +10 -0
- package/miniprogram_dist/pull-refresh/index.wxss +1 -0
- package/miniprogram_dist/radio/index.js +35 -0
- package/miniprogram_dist/radio/index.json +4 -0
- package/miniprogram_dist/radio/index.wxml +9 -0
- package/miniprogram_dist/radio/index.wxss +1 -0
- package/miniprogram_dist/radio-group/index.js +14 -0
- package/miniprogram_dist/radio-group/index.json +4 -0
- package/miniprogram_dist/radio-group/index.wxml +5 -0
- package/miniprogram_dist/radio-group/index.wxss +1 -0
- package/miniprogram_dist/rate/index.js +88 -0
- package/miniprogram_dist/rate/index.json +4 -0
- package/miniprogram_dist/rate/index.wxml +16 -0
- package/miniprogram_dist/rate/index.wxss +1 -0
- package/miniprogram_dist/safe-area/index.js +14 -0
- package/miniprogram_dist/safe-area/index.json +4 -0
- package/miniprogram_dist/safe-area/index.wxml +5 -0
- package/miniprogram_dist/safe-area/index.wxss +1 -0
- package/miniprogram_dist/scroll-list/index.js +54 -0
- package/miniprogram_dist/scroll-list/index.json +4 -0
- package/miniprogram_dist/scroll-list/index.wxml +13 -0
- package/miniprogram_dist/scroll-list/index.wxss +1 -0
- package/miniprogram_dist/search/index.js +59 -0
- package/miniprogram_dist/search/index.json +7 -0
- package/miniprogram_dist/search/index.wxml +17 -0
- package/miniprogram_dist/search/index.wxss +1 -0
- package/miniprogram_dist/share-panel/index.js +70 -0
- package/miniprogram_dist/share-panel/index.json +7 -0
- package/miniprogram_dist/share-panel/index.wxml +25 -0
- package/miniprogram_dist/share-panel/index.wxss +1 -0
- package/miniprogram_dist/skeleton/index.js +27 -0
- package/miniprogram_dist/skeleton/index.json +4 -0
- package/miniprogram_dist/skeleton/index.wxml +30 -0
- package/miniprogram_dist/skeleton/index.wxss +1 -0
- package/miniprogram_dist/slider/index.js +78 -0
- package/miniprogram_dist/slider/index.json +4 -0
- package/miniprogram_dist/slider/index.wxml +13 -0
- package/miniprogram_dist/slider/index.wxss +1 -0
- package/miniprogram_dist/steps/index.js +19 -0
- package/miniprogram_dist/steps/index.json +7 -0
- package/miniprogram_dist/steps/index.wxml +27 -0
- package/miniprogram_dist/steps/index.wxss +1 -0
- package/miniprogram_dist/sticky/index.js +18 -0
- package/miniprogram_dist/sticky/index.json +4 -0
- package/miniprogram_dist/sticky/index.wxml +5 -0
- package/miniprogram_dist/sticky/index.wxss +0 -0
- package/miniprogram_dist/swipe-action/index.js +38 -0
- package/miniprogram_dist/swipe-action/index.json +4 -0
- package/miniprogram_dist/swipe-action/index.wxml +14 -0
- package/miniprogram_dist/swipe-action/index.wxss +1 -0
- package/miniprogram_dist/switch/index.js +86 -0
- package/miniprogram_dist/switch/index.json +7 -0
- package/miniprogram_dist/switch/index.wxml +31 -0
- package/miniprogram_dist/switch/index.wxss +1 -0
- package/miniprogram_dist/tabbar/index.js +41 -0
- package/miniprogram_dist/tabbar/index.json +4 -0
- package/miniprogram_dist/tabbar/index.wxml +5 -0
- package/miniprogram_dist/tabbar/index.wxss +1 -0
- package/miniprogram_dist/tabbar-item/index.js +47 -0
- package/miniprogram_dist/tabbar-item/index.json +8 -0
- package/miniprogram_dist/tabbar-item/index.wxml +18 -0
- package/miniprogram_dist/tabbar-item/index.wxss +1 -0
- package/miniprogram_dist/tabs/index.js +54 -0
- package/miniprogram_dist/tabs/index.json +4 -0
- package/miniprogram_dist/tabs/index.wxml +17 -0
- package/miniprogram_dist/tabs/index.wxss +1 -0
- package/miniprogram_dist/tag/index.js +22 -0
- package/miniprogram_dist/tag/index.json +4 -0
- package/miniprogram_dist/tag/index.wxml +5 -0
- package/miniprogram_dist/tag/index.wxss +1 -0
- package/miniprogram_dist/text/index.js +56 -0
- package/miniprogram_dist/text/index.json +4 -0
- package/miniprogram_dist/text/index.wxml +5 -0
- package/miniprogram_dist/text/index.wxss +1 -0
- package/miniprogram_dist/textarea/index.js +60 -0
- package/miniprogram_dist/textarea/index.json +4 -0
- package/miniprogram_dist/textarea/index.wxml +8 -0
- package/miniprogram_dist/textarea/index.wxss +1 -0
- package/miniprogram_dist/toast/index.js +46 -0
- package/miniprogram_dist/toast/index.json +8 -0
- package/miniprogram_dist/toast/index.wxml +16 -0
- package/miniprogram_dist/toast/index.wxss +1 -0
- package/miniprogram_dist/upload/index.js +79 -0
- package/miniprogram_dist/upload/index.json +7 -0
- package/miniprogram_dist/upload/index.wxml +38 -0
- package/miniprogram_dist/upload/index.wxss +1 -0
- package/package.json +16 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<view class="ln-collapse-item" class="{{active? 'is-active' : ''}}" class="{{disabled? 'is-disabled' : ''}}" class="{{bordered? 'is-bordered' : ''}}">
|
|
2
|
+
<view class="ln-collapse-item__header" role="button" tabindex="{{disabled ? -1 : 0}}" bindtap="toggle" bindkeydown="__handler_1">
|
|
3
|
+
<text class="ln-collapse-item__title">
|
|
4
|
+
{{title}} </text>
|
|
5
|
+
<text class="ln-collapse-item__arrow">
|
|
6
|
+
<icon icon="{{ChevronRight}}" size="{{16}}" />
|
|
7
|
+
</text>
|
|
8
|
+
</view>
|
|
9
|
+
<block wx:if="{{active}}">
|
|
10
|
+
<view class="ln-collapse-item__wrap">
|
|
11
|
+
<view class="ln-collapse-item__content">
|
|
12
|
+
<block wx:if="{{children}}">
|
|
13
|
+
<slot />
|
|
14
|
+
{{/if}} </block>
|
|
15
|
+
</view>
|
|
16
|
+
</view>
|
|
17
|
+
{{/if}} </block>
|
|
18
|
+
</view>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ln-collapse{border-radius:16rpx;overflow:hidden;background-color:#fff;border:1px solid #e4e7ed}.dark .ln-collapse{background-color:#1d1e1f;border-color:hsla(0,0%,100%,.08)}.ln-collapse-item+.ln-collapse-item{border-top:1px solid #e4e7ed}.dark .ln-collapse-item+.ln-collapse-item{border-top-color:hsla(0,0%,100%,.08)}.ln-collapse-item__header{display:flex;align-items:center;justify-content:space-between;padding:24rpx 32rpx;cursor:pointer;user-select:none;background:#fff;outline:none}.ln-collapse-item__title{flex:1;font-size:28rpx;font-weight:500;color:#303133}.ln-collapse-item__arrow{display:inline-flex;color:#a8abb2;transition:transform .2s}.ln-collapse-item.is-active .ln-collapse-item__arrow{transform:rotate(90deg)}.ln-collapse-item__wrap{overflow:hidden;border-top:1px solid #e4e7ed}.ln-collapse-item__content{padding:0 32rpx 24rpx;font-size:28rpx;color:#606266}.ln-collapse-item.is-bordered{border:1px solid #e4e7ed;border-radius:16rpx;overflow:hidden}.ln-collapse-item.is-disabled .ln-collapse-item__header{cursor:not-allowed}.ln-collapse-item.is-disabled .ln-collapse-item__title{color:#c0c4cc}.dark .ln-collapse-item.is-bordered{border-color:hsla(0,0%,100%,.08)}.dark .ln-collapse-item .ln-collapse-item__header{background:#1d1e1f}.dark .ln-collapse-item .ln-collapse-item__title{color:#e5eaf3}.dark .ln-collapse-item .ln-collapse-item__arrow{color:#6b6f76}.dark .ln-collapse-item .ln-collapse-item__wrap{border-top-color:hsla(0,0%,100%,.08)}.dark .ln-collapse-item .ln-collapse-item__content{color:#cfd3dc}.dark .ln-collapse-item.is-disabled .ln-collapse-item__title{color:#6b6f76}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sveltemp 运行时桥接层
|
|
3
|
+
* 将 Svelte 5 Runes 响应式模型桥接到小程序 setData 机制
|
|
4
|
+
* 体积目标: < 5KB (minified)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// ============================================================
|
|
8
|
+
// 1. 响应式代理 — 拦截 $state 变量的赋值,自动触发 setData
|
|
9
|
+
// ============================================================
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 创建响应式代理
|
|
13
|
+
* @param {Object} ctx - 小程序组件/页面实例 (this)
|
|
14
|
+
* @param {Object} initialData - 初始 data 对象
|
|
15
|
+
* @returns {Proxy} 代理对象
|
|
16
|
+
*/
|
|
17
|
+
function createReactiveProxy(ctx, initialData) {
|
|
18
|
+
const pending = {};
|
|
19
|
+
let timer = null;
|
|
20
|
+
|
|
21
|
+
const handler = {
|
|
22
|
+
set(target, key, value) {
|
|
23
|
+
target[key] = value;
|
|
24
|
+
pending[key] = value;
|
|
25
|
+
|
|
26
|
+
// 批量合并 setData 调用(微任务级别)
|
|
27
|
+
if (!timer) {
|
|
28
|
+
timer = setTimeout(() => {
|
|
29
|
+
if (Object.keys(pending).length > 0) {
|
|
30
|
+
ctx.setData(Object.assign({}, pending));
|
|
31
|
+
// 清空 pending
|
|
32
|
+
Object.keys(pending).forEach(k => delete pending[k]);
|
|
33
|
+
}
|
|
34
|
+
timer = null;
|
|
35
|
+
}, 0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return true;
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
get(target, key) {
|
|
42
|
+
return target[key];
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
return new Proxy(initialData, handler);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ============================================================
|
|
50
|
+
// 2. 批量 setData — 合并多次 setData 为一次调用
|
|
51
|
+
// ============================================================
|
|
52
|
+
|
|
53
|
+
const batchQueue = new Map();
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 批量 setData
|
|
57
|
+
* @param {Object} ctx - 小程序实例
|
|
58
|
+
* @param {Object} data - 要更新的数据
|
|
59
|
+
* @param {Function} [callback] - 回调
|
|
60
|
+
*/
|
|
61
|
+
function batchSetData(ctx, data, callback) {
|
|
62
|
+
const id = ctx.__sveltempId || (ctx.__sveltempId = ++batchIdCounter);
|
|
63
|
+
|
|
64
|
+
if (!batchQueue.has(id)) {
|
|
65
|
+
batchQueue.set(id, { ctx, data: {}, callbacks: [] });
|
|
66
|
+
|
|
67
|
+
// 下一个微任务执行
|
|
68
|
+
Promise.resolve().then(() => {
|
|
69
|
+
const batch = batchQueue.get(id);
|
|
70
|
+
if (batch) {
|
|
71
|
+
batchQueue.delete(id);
|
|
72
|
+
batch.ctx.setData(batch.data, () => {
|
|
73
|
+
batch.callbacks.forEach(cb => cb && cb());
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const batch = batchQueue.get(id);
|
|
80
|
+
Object.assign(batch.data, data);
|
|
81
|
+
if (callback) {
|
|
82
|
+
batch.callbacks.push(callback);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let batchIdCounter = 0;
|
|
87
|
+
|
|
88
|
+
// ============================================================
|
|
89
|
+
// 3. 跨平台 API 适配器
|
|
90
|
+
// ============================================================
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 获取当前平台的全局 API 对象
|
|
94
|
+
*/
|
|
95
|
+
function getApi() {
|
|
96
|
+
/* eslint-disable no-undef */
|
|
97
|
+
if (typeof wx !== 'undefined') return wx;
|
|
98
|
+
if (typeof my !== 'undefined') return my;
|
|
99
|
+
if (typeof swan !== 'undefined') return swan;
|
|
100
|
+
if (typeof qq !== 'undefined') return qq;
|
|
101
|
+
if (typeof tt !== 'undefined') return tt;
|
|
102
|
+
/* eslint-enable no-undef */
|
|
103
|
+
throw new Error('[sveltemp-runtime] 未检测到小程序环境');
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const api = getApi();
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 统一的 API 调用封装
|
|
110
|
+
* 处理各平台 API 差异(回调风格 vs Promise 风格)
|
|
111
|
+
*/
|
|
112
|
+
function callApi(name, options) {
|
|
113
|
+
return new Promise((resolve, reject) => {
|
|
114
|
+
const fn = api[name];
|
|
115
|
+
if (!fn) {
|
|
116
|
+
reject(new Error(`API ${name} 不存在`));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
fn(Object.assign({}, options, {
|
|
121
|
+
success: (res) => {
|
|
122
|
+
if (options && options.success) options.success(res);
|
|
123
|
+
resolve(res);
|
|
124
|
+
},
|
|
125
|
+
fail: (err) => {
|
|
126
|
+
if (options && options.fail) options.fail(err);
|
|
127
|
+
reject(err);
|
|
128
|
+
},
|
|
129
|
+
complete: (res) => {
|
|
130
|
+
if (options && options.complete) options.complete(res);
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// ============================================================
|
|
137
|
+
// 4. 导航 API 统一封装
|
|
138
|
+
// ============================================================
|
|
139
|
+
|
|
140
|
+
const router = {
|
|
141
|
+
push(url, params) {
|
|
142
|
+
const query = params ? '?' + Object.keys(params).map(k => `${k}=${encodeURIComponent(params[k])}`).join('&') : '';
|
|
143
|
+
return callApi('navigateTo', { url: url + query });
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
replace(url, params) {
|
|
147
|
+
const query = params ? '?' + Object.keys(params).map(k => `${k}=${encodeURIComponent(params[k])}`).join('&') : '';
|
|
148
|
+
return callApi('redirectTo', { url: url + query });
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
back(delta) {
|
|
152
|
+
return callApi('navigateBack', { delta: delta || 1 });
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
switchTab(url) {
|
|
156
|
+
return callApi('switchTab', { url });
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// ============================================================
|
|
161
|
+
// 5. 存储 API 统一封装
|
|
162
|
+
// ============================================================
|
|
163
|
+
|
|
164
|
+
const storage = {
|
|
165
|
+
get(key) {
|
|
166
|
+
return callApi('getStorage', { key }).then(res => res.data);
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
set(key, data) {
|
|
170
|
+
return callApi('setStorage', { key, data });
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
remove(key) {
|
|
174
|
+
return callApi('removeStorage', { key });
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
clear() {
|
|
178
|
+
return callApi('clearStorage', {});
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// ============================================================
|
|
183
|
+
// 6. 网络请求统一封装
|
|
184
|
+
// ============================================================
|
|
185
|
+
|
|
186
|
+
function request(options) {
|
|
187
|
+
return callApi('request', options);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// ============================================================
|
|
191
|
+
// 7. 事件总线(跨组件通信)
|
|
192
|
+
// ============================================================
|
|
193
|
+
|
|
194
|
+
const eventBus = {
|
|
195
|
+
_events: {},
|
|
196
|
+
|
|
197
|
+
on(event, handler) {
|
|
198
|
+
if (!this._events[event]) {
|
|
199
|
+
this._events[event] = [];
|
|
200
|
+
}
|
|
201
|
+
this._events[event].push(handler);
|
|
202
|
+
return () => this.off(event, handler);
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
off(event, handler) {
|
|
206
|
+
if (!this._events[event]) return;
|
|
207
|
+
if (handler) {
|
|
208
|
+
this._events[event] = this._events[event].filter(h => h !== handler);
|
|
209
|
+
} else {
|
|
210
|
+
delete this._events[event];
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
|
|
214
|
+
emit(event, ...args) {
|
|
215
|
+
if (this._events[event]) {
|
|
216
|
+
this._events[event].forEach(h => h(...args));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// ============================================================
|
|
222
|
+
// 导出
|
|
223
|
+
// ============================================================
|
|
224
|
+
|
|
225
|
+
module.exports = {
|
|
226
|
+
createReactiveProxy,
|
|
227
|
+
batchSetData,
|
|
228
|
+
api,
|
|
229
|
+
callApi,
|
|
230
|
+
router,
|
|
231
|
+
storage,
|
|
232
|
+
request,
|
|
233
|
+
eventBus,
|
|
234
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const { createReactiveProxy, batchSetData } = require('../common/runtime');
|
|
2
|
+
|
|
3
|
+
Component({
|
|
4
|
+
properties: {
|
|
5
|
+
direction: {
|
|
6
|
+
type: String,
|
|
7
|
+
value: 'vertical',
|
|
8
|
+
},
|
|
9
|
+
class: className: {
|
|
10
|
+
type: null,
|
|
11
|
+
value: '',
|
|
12
|
+
},
|
|
13
|
+
children: {
|
|
14
|
+
type: null,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ln-container{display:flex;flex-direction:column;box-sizing:border-box;min-height:100vh;min-height:100dvh;max-width:1500rpx;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,"Helvetica Neue","PingFang SC","Hiragino Sans GB","Microsoft YaHei",Arial,sans-serif;transition:background-color .3s,color .3s}.dark .ln-container{background-color:#141415;color:#e5eaf3}.ln-header{position:fixed;top:0;left:0;right:0;max-width:1500rpx;margin:0 auto;flex-shrink:0;z-index:100;background-color:#fff;will-change:transform;transform:translateZ(0)}.dark .ln-header{background-color:#1d1e1f}.ln-main{display:block;flex:1;box-sizing:border-box;min-width:0;overflow-x:clip;padding:32rpx;padding-top:120rpx;background-color:#f2f3f5}.dark .ln-main{background-color:#141415}.ln-main--slide-right{animation:ln-slide-right 300ms ease both}.ln-main--slide-left{animation:ln-slide-left 300ms ease both}@keyframes ln-slide-right{from{transform:translateX(120rpx)}to{transform:translateX(0)}}@keyframes ln-slide-left{from{transform:translateX(-120rpx)}to{transform:translateX(0)}}.ln-footer{display:flex;align-items:center;box-sizing:border-box;flex-shrink:0;height:100rpx;padding:0 32rpx;background-color:#fff;border-top:.10rpx solid #e4e7ed}.dark .ln-footer{background-color:#1d1e1f;border-top-color:hsla(0,0%,100%,.08);color:#e5eaf3}.ln-aside{display:flex;flex-direction:column;box-sizing:border-box;flex-shrink:0;width:var(--ln-aside-width, 400rpx);overflow:hidden;background-color:#fff;border-right:.10rpx solid #e4e7ed}.dark .ln-aside{background-color:#1d1e1f;border-right-color:hsla(0,0%,100%,.08);color:#e5eaf3}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const { createReactiveProxy, batchSetData } = require('../common/runtime');
|
|
2
|
+
|
|
3
|
+
Component({
|
|
4
|
+
properties: {
|
|
5
|
+
time: {
|
|
6
|
+
type: Number,
|
|
7
|
+
value: 0,
|
|
8
|
+
},
|
|
9
|
+
format: {
|
|
10
|
+
type: null,
|
|
11
|
+
value: 'HH:mm:ss',
|
|
12
|
+
},
|
|
13
|
+
plain: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
value: false,
|
|
16
|
+
},
|
|
17
|
+
onfinish: {
|
|
18
|
+
type: null,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
data: {
|
|
23
|
+
remaining: 0,
|
|
24
|
+
display: undefined,
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
observers: {
|
|
28
|
+
'format, remaining': function() {
|
|
29
|
+
this.setData({ display: const h = Math.floor(remaining / 3600000);
|
|
30
|
+
const m = Math.floor((remaining % 3600000) / 60000);
|
|
31
|
+
const s = Math.floor((remaining % 60000) / 1000);
|
|
32
|
+
return format
|
|
33
|
+
.replace('HH', pad(h))
|
|
34
|
+
.replace('mm', pad(m))
|
|
35
|
+
.replace('ss', pad(s)); });
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
lifetimes: {
|
|
40
|
+
attached() {
|
|
41
|
+
const self = this;
|
|
42
|
+
// $effect #1
|
|
43
|
+
remaining = time;;
|
|
44
|
+
// $effect #2
|
|
45
|
+
if (remaining <= 0) return;
|
|
46
|
+
const timer = setInterval(() => {
|
|
47
|
+
remaining -= 1000;
|
|
48
|
+
if (remaining <= 0) {
|
|
49
|
+
remaining = 0;
|
|
50
|
+
clearInterval(timer);
|
|
51
|
+
onfinish?.();
|
|
52
|
+
}
|
|
53
|
+
}, 1000);
|
|
54
|
+
return () => clearInterval(timer);;
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<text class="ln-countdown" class="{{plain? 'ln-countdown--plain' : ''}}">
|
|
2
|
+
<block wx:if="{{plain}}">
|
|
3
|
+
{{display}} </block>
|
|
4
|
+
<block wx:else>
|
|
5
|
+
<block wx:for="{{display.split(':')}}" wx:for-item="part" wx:for-index="i">
|
|
6
|
+
<block wx:if="{{i > 0}}">
|
|
7
|
+
<text class="ln-countdown__separator">
|
|
8
|
+
: </text>
|
|
9
|
+
{{/if}} <text class="ln-countdown__block">
|
|
10
|
+
{{part}} </text>
|
|
11
|
+
{{/each}}{{/if}} </block>
|
|
12
|
+
</block>
|
|
13
|
+
</block>
|
|
14
|
+
</text>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ln-countdown{display:inline-flex;align-items:center;color:#303133;font-size:28rpx;font-variant-numeric:tabular-nums}.ln-countdown__block{display:inline-flex;align-items:center;justify-content:center;min-width:48rpx;height:48rpx;padding:0 8rpx;background-color:#303133;color:#fff;border-radius:4rpx;font-size:26rpx;font-weight:500}.ln-countdown__separator{margin:0 8rpx;color:#303133;font-weight:700}.ln-countdown--plain .ln-countdown__block{background-color:rgba(0,0,0,0);color:#303133;padding:0;min-width:auto}.dark .ln-countdown{color:#e5eaf3}.dark .ln-countdown .ln-countdown__block{background-color:#e5eaf3;color:#141415}.dark .ln-countdown .ln-countdown__separator{color:#e5eaf3}.dark .ln-countdown.ln-countdown--plain .ln-countdown__block{background-color:rgba(0,0,0,0);color:#e5eaf3}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const { createReactiveProxy, batchSetData } = require('../common/runtime');
|
|
2
|
+
|
|
3
|
+
Component({
|
|
4
|
+
properties: {
|
|
5
|
+
endValue: {
|
|
6
|
+
type: Number,
|
|
7
|
+
value: 0,
|
|
8
|
+
},
|
|
9
|
+
startValue: {
|
|
10
|
+
type: Number,
|
|
11
|
+
value: 0,
|
|
12
|
+
},
|
|
13
|
+
duration: {
|
|
14
|
+
type: Number,
|
|
15
|
+
value: 2000,
|
|
16
|
+
},
|
|
17
|
+
decimals: {
|
|
18
|
+
type: Number,
|
|
19
|
+
value: 0,
|
|
20
|
+
},
|
|
21
|
+
prefix: {
|
|
22
|
+
type: String,
|
|
23
|
+
value: '',
|
|
24
|
+
},
|
|
25
|
+
suffix: {
|
|
26
|
+
type: String,
|
|
27
|
+
value: '',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
data: {
|
|
32
|
+
display: '0',
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
lifetimes: {
|
|
36
|
+
attached() {
|
|
37
|
+
const self = this;
|
|
38
|
+
// $effect #1
|
|
39
|
+
const start = startValue;
|
|
40
|
+
const end = endValue;
|
|
41
|
+
const dur = duration;
|
|
42
|
+
const dec = decimals;
|
|
43
|
+
let raf: number;
|
|
44
|
+
const t0 = performance.now();
|
|
45
|
+
const tick = (now: number): void => {
|
|
46
|
+
const progress = Math.min((now - t0) / dur, 1);
|
|
47
|
+
const eased = 1 - Math.pow(1 - progress, 3);
|
|
48
|
+
display = (start + (end - start) * eased).toFixed(dec);
|
|
49
|
+
if (progress < 1) raf = requestAnimationFrame(tick);
|
|
50
|
+
}
|
|
51
|
+
raf = requestAnimationFrame(tick);
|
|
52
|
+
return () => cancelAnimationFrame(raf);;
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ln-count-up{font-variant-numeric:tabular-nums;font-size:40rpx;font-weight:700;color:#303133}.dark .ln-count-up{color:#e5eaf3}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// import from 'svelte/transition'
|
|
2
|
+
const { createReactiveProxy, batchSetData } = require('../common/runtime');
|
|
3
|
+
|
|
4
|
+
Component({
|
|
5
|
+
properties: {
|
|
6
|
+
value: {
|
|
7
|
+
type: String,
|
|
8
|
+
value: '',
|
|
9
|
+
},
|
|
10
|
+
mode: {
|
|
11
|
+
type: String,
|
|
12
|
+
value: 'date',
|
|
13
|
+
},
|
|
14
|
+
visible: {
|
|
15
|
+
type: Boolean,
|
|
16
|
+
value: false,
|
|
17
|
+
},
|
|
18
|
+
minDate: {
|
|
19
|
+
type: String,
|
|
20
|
+
value: '1970-01-01',
|
|
21
|
+
},
|
|
22
|
+
maxDate: {
|
|
23
|
+
type: String,
|
|
24
|
+
value: '2099-12-31',
|
|
25
|
+
},
|
|
26
|
+
disabled: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
value: false,
|
|
29
|
+
},
|
|
30
|
+
onconfirm: {
|
|
31
|
+
type: null,
|
|
32
|
+
},
|
|
33
|
+
onclose: {
|
|
34
|
+
type: null,
|
|
35
|
+
},
|
|
36
|
+
children: {
|
|
37
|
+
type: null,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
data: {
|
|
42
|
+
year: new Date().getFullYear(),
|
|
43
|
+
month: new Date().getMonth() + 1,
|
|
44
|
+
day: new Date().getDate(),
|
|
45
|
+
hour: 0,
|
|
46
|
+
minute: 0,
|
|
47
|
+
yearEl: undefined,
|
|
48
|
+
monthEl: undefined,
|
|
49
|
+
dayEl: undefined,
|
|
50
|
+
hourEl: undefined,
|
|
51
|
+
minuteEl: undefined,
|
|
52
|
+
min: undefined,
|
|
53
|
+
max: undefined,
|
|
54
|
+
years: undefined,
|
|
55
|
+
months: undefined,
|
|
56
|
+
dayCount: undefined,
|
|
57
|
+
dayList: undefined,
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
observers: {
|
|
61
|
+
'**': function() {
|
|
62
|
+
this.setData({ min: parseMin() });
|
|
63
|
+
},
|
|
64
|
+
'**': function() {
|
|
65
|
+
this.setData({ max: parseMax() });
|
|
66
|
+
},
|
|
67
|
+
'max, min': function() {
|
|
68
|
+
this.setData({ years: Array.from({ length: max.y - min.y + 1 }, (_: unknown, i: number) => min.y + i) });
|
|
69
|
+
},
|
|
70
|
+
'**': function() {
|
|
71
|
+
this.setData({ months: Array.from({ length: 12 }, (_: unknown, i: number) => i + 1) });
|
|
72
|
+
},
|
|
73
|
+
'year, month': function() {
|
|
74
|
+
this.setData({ dayCount: new Date(year, month, 0).getDate() });
|
|
75
|
+
},
|
|
76
|
+
'dayCount, day': function() {
|
|
77
|
+
this.setData({ dayList: Array.from({ length: dayCount }, (_: unknown, i: number) => i + 1) });
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
lifetimes: {
|
|
82
|
+
attached() {
|
|
83
|
+
const self = this;
|
|
84
|
+
// $bindable: value
|
|
85
|
+
this.__bind_value = function(e) {
|
|
86
|
+
self.setData({ value: e.detail.value });
|
|
87
|
+
self.triggerEvent('update:value', e.detail.value);
|
|
88
|
+
};
|
|
89
|
+
// $bindable: visible
|
|
90
|
+
this.__bind_visible = function(e) {
|
|
91
|
+
self.setData({ visible: e.detail.value });
|
|
92
|
+
self.triggerEvent('update:visible', e.detail.value);
|
|
93
|
+
};
|
|
94
|
+
// $effect #1
|
|
95
|
+
if (day > dayCount) day = dayCount;;
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
methods: {
|
|
100
|
+
close(e) {
|
|
101
|
+
// 用户定义的处理函数
|
|
102
|
+
},
|
|
103
|
+
close(e) {
|
|
104
|
+
// 用户定义的处理函数
|
|
105
|
+
},
|
|
106
|
+
confirm(e) {
|
|
107
|
+
// 用户定义的处理函数
|
|
108
|
+
},
|
|
109
|
+
onScroll('year')(e) {
|
|
110
|
+
// 用户定义的处理函数
|
|
111
|
+
},
|
|
112
|
+
onScroll('month')(e) {
|
|
113
|
+
// 用户定义的处理函数
|
|
114
|
+
},
|
|
115
|
+
onScroll('day')(e) {
|
|
116
|
+
// 用户定义的处理函数
|
|
117
|
+
},
|
|
118
|
+
onScroll('hour')(e) {
|
|
119
|
+
// 用户定义的处理函数
|
|
120
|
+
},
|
|
121
|
+
onScroll('minute')(e) {
|
|
122
|
+
// 用户定义的处理函数
|
|
123
|
+
},
|
|
124
|
+
__bind_value(e) {
|
|
125
|
+
this.setData({ value: e.detail.value });
|
|
126
|
+
this.triggerEvent('update:value', e.detail.value);
|
|
127
|
+
},
|
|
128
|
+
__bind_visible(e) {
|
|
129
|
+
this.setData({ visible: e.detail.value });
|
|
130
|
+
this.triggerEvent('update:visible', e.detail.value);
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<view class="ln-date-time-picker" class="{{disabled? 'is-disabled' : ''}}">
|
|
2
|
+
<block wx:if="{{children}}">
|
|
3
|
+
<slot />
|
|
4
|
+
{{/if}} </block>
|
|
5
|
+
</view>
|
|
6
|
+
<block wx:if="{{visible}}">
|
|
7
|
+
<view class="ln-overlay" role="presentation" bindtap="close">
|
|
8
|
+
</view>
|
|
9
|
+
<view class="ln-date-time-picker__panel">
|
|
10
|
+
<view class="ln-date-time-picker__toolbar">
|
|
11
|
+
<button type="button" class="ln-date-time-picker__cancel" bindtap="close">
|
|
12
|
+
取消 </button>
|
|
13
|
+
<text class="ln-date-time-picker__title">
|
|
14
|
+
{{mode === 'year-month' ? '选择年月' : mode === 'datetime' ? '选择日期时间' : '选择日期'}} </text>
|
|
15
|
+
<button type="button" class="ln-date-time-picker__ok" bindtap="confirm">
|
|
16
|
+
确定 </button>
|
|
17
|
+
</view>
|
|
18
|
+
<view class="ln-date-time-picker__columns">
|
|
19
|
+
<view class="ln-date-time-picker__col" this="{{yearEl}}" bindchange="__bind_yearEl" bindscroll="__handler_1">
|
|
20
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
21
|
+
</view>
|
|
22
|
+
<block wx:for="{{years}}" wx:for-item="y">
|
|
23
|
+
<view class="ln-date-time-picker__item" class="{{year === y? 'is-active' : ''}}">
|
|
24
|
+
{{y}}年 </view>
|
|
25
|
+
</block>
|
|
26
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
27
|
+
</view>
|
|
28
|
+
</view>
|
|
29
|
+
<view class="ln-date-time-picker__col" this="{{monthEl}}" bindchange="__bind_monthEl" bindscroll="__handler_2">
|
|
30
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
31
|
+
</view>
|
|
32
|
+
<block wx:for="{{months}}" wx:for-item="m">
|
|
33
|
+
<view class="ln-date-time-picker__item" class="{{month === m? 'is-active' : ''}}">
|
|
34
|
+
{{pad2(m)}}月 </view>
|
|
35
|
+
</block>
|
|
36
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
37
|
+
</view>
|
|
38
|
+
</view>
|
|
39
|
+
<block wx:if="{{mode !== 'year-month'}}">
|
|
40
|
+
<view class="ln-date-time-picker__col" this="{{dayEl}}" bindchange="__bind_dayEl" bindscroll="__handler_3">
|
|
41
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
42
|
+
</view>
|
|
43
|
+
<block wx:for="{{dayList}}" wx:for-item="d">
|
|
44
|
+
<view class="ln-date-time-picker__item" class="{{day === d? 'is-active' : ''}}">
|
|
45
|
+
{{pad2(d)}}日 </view>
|
|
46
|
+
</block>
|
|
47
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
48
|
+
</view>
|
|
49
|
+
</view>
|
|
50
|
+
{{/if}} <block wx:if="{{mode === 'datetime'}}">
|
|
51
|
+
<view class="ln-date-time-picker__col" this="{{hourEl}}" bindchange="__bind_hourEl" bindscroll="__handler_4">
|
|
52
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
53
|
+
</view>
|
|
54
|
+
<block wx:for="{{hourList}}" wx:for-item="h">
|
|
55
|
+
<view class="ln-date-time-picker__item" class="{{hour === h? 'is-active' : ''}}">
|
|
56
|
+
{{pad2(h)}}时 </view>
|
|
57
|
+
</block>
|
|
58
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
59
|
+
</view>
|
|
60
|
+
</view>
|
|
61
|
+
<view class="ln-date-time-picker__col" this="{{minuteEl}}" bindchange="__bind_minuteEl" bindscroll="__handler_5">
|
|
62
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
63
|
+
</view>
|
|
64
|
+
<block wx:for="{{minuteList}}" wx:for-item="m">
|
|
65
|
+
<view class="ln-date-time-picker__item" class="{{minute === m? 'is-active' : ''}}">
|
|
66
|
+
{{pad2(m)}}分 </view>
|
|
67
|
+
</block>
|
|
68
|
+
<view class="ln-date-time-picker__pad" style="height:{PAD_H}px">
|
|
69
|
+
</view>
|
|
70
|
+
</view>
|
|
71
|
+
{{/if}} <view class="ln-date-time-picker__mask">
|
|
72
|
+
</view>
|
|
73
|
+
</block>
|
|
74
|
+
</block>
|
|
75
|
+
</view>
|
|
76
|
+
</view>
|
|
77
|
+
{{/if}}</block>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ln-date-time-picker.is-disabled{opacity:.5;pointer-events:none}.ln-date-time-picker__panel{position:fixed;bottom:0;left:0;right:0;z-index:2001;background:#fff;border-radius:32rpx 32rpx 0 0;padding-bottom:env(safe-area-inset-bottom)}.ln-date-time-picker__toolbar{display:flex;align-items:center;justify-content:space-between;padding:16rpx 32rpx;border-bottom:none}.ln-date-time-picker__title{font-size:32rpx;font-weight:500;color:#303133}.ln-date-time-picker__cancel{border:none;background:none;font-size:28rpx;color:#909399;cursor:pointer;padding:8rpx 16rpx}.ln-date-time-picker__ok{border:none;background:none;font-size:28rpx;color:#0062ff;font-weight:500;cursor:pointer;padding:8rpx 16rpx}.ln-date-time-picker__columns{position:relative;display:flex;height:440rpx;overflow:hidden}.ln-date-time-picker__col{flex:1;height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}.ln-date-time-picker__col::-webkit-scrollbar{display:none}.ln-date-time-picker__col{scrollbar-width:none}.ln-date-time-picker__item{display:flex;align-items:center;justify-content:center;height:88rpx;font-size:32rpx;color:#909399;transition:color .15s;user-select:none}.ln-date-time-picker__item.is-active{color:#303133;font-weight:500}.ln-date-time-picker__pad{flex-shrink:0}.ln-date-time-picker__mask{position:absolute;left:0;right:0;top:50%;height:88rpx;transform:translateY(-50%);border-top:.10rpx solid #e4e7ed;border-bottom:.10rpx solid #e4e7ed;pointer-events:none}.dark .ln-date-time-picker .ln-date-time-picker__panel{background:#1d1e1f}.dark .ln-date-time-picker .ln-date-time-picker__title{color:#e5eaf3}.dark .ln-date-time-picker .ln-date-time-picker__cancel{color:#a3a6ad}.dark .ln-date-time-picker .ln-date-time-picker__item{color:#a3a6ad}.dark .ln-date-time-picker .ln-date-time-picker__item.is-active{color:#e5eaf3}.dark .ln-date-time-picker .ln-date-time-picker__mask{border-color:#4a4a4c}.dark .ln-date-time-picker__panel{background:#1d1e1f}.dark .ln-date-time-picker__title{color:#e5eaf3}.dark .ln-date-time-picker__cancel{color:#a3a6ad}.dark .ln-date-time-picker__item{color:#a3a6ad}.dark .ln-date-time-picker__item.is-active{color:#e5eaf3}.dark .ln-date-time-picker__mask{border-color:#4a4a4c}
|