leon 2 роки тому
батько
коміт
f3d8471b66

+ 3 - 55
dist/app.js

@@ -1,4 +1,5 @@
 "use strict";
+require("./prebundle/vendors-node_modules_taro_weapp_prebundle_taro-ui_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_chunk-2Y2U3MWF_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_xstate_js.js");
@@ -8,7 +9,7 @@ require("./prebundle/vendors-node_modules_taro_weapp_prebundle_react-redux_js.js
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_react-i18next_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_tarojs_plugin-framework-react_dist_runtime_js.js");
-require("./prebundle/vendors-node_modules_taro_weapp_prebundle_tarojs_taro_js.js");
+require("./prebundle/vendors-node_modules_taro_weapp_prebundle_chunk-6GAVBEBQ_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_i18next-browser-languagedetector_js.js");
 require("./prebundle/node_modules_taro_weapp_prebundle_tarojs_runtime_js.js");
 require("./prebundle/vendors-node_modules_taro_weapp_prebundle_tarojs_plugin-platform-weapp_dist_runtime_js.js");
@@ -17,6 +18,7 @@ require("./prebundle/remoteEntry.js");
 require("./prebundle/node_modules_taro_weapp_prebundle_react_jsx-runtime_js.js");
 require("./prebundle/node_modules_taro_weapp_prebundle_react_js.js");
 require("./prebundle/node_modules_taro_weapp_prebundle_react-dom_js.js");
+require("./prebundle/node_modules_taro_weapp_prebundle_tarojs_taro_js.js");
 
 require("./common");
 require("./vendors");
@@ -404,60 +406,6 @@ var apple = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createAsyncThunk)('
 }());
 /* harmony default export */ __webpack_exports__["default"] = (counterSlice.reducer);
 
-/***/ }),
-
-/***/ "./src/store/permission.tsx":
-/*!**********************************!*\
-  !*** ./src/store/permission.tsx ***!
-  \**********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-/* unused harmony exports setWXPubFollow, setPushAllow, setStepAllow, setCameraAllow, setAlbumAllow, setPhotoAllow */
-/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @reduxjs/toolkit */ "webpack/container/remote/@reduxjs/toolkit");
-/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
-
-var initialState = {
-  wxPubFollow: false,
-  pushAllow: false,
-  stepAllow: false,
-  albumAllow: false,
-  cameraAllow: false,
-  photoAllow: false
-};
-var permissionSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
-  name: 'permission',
-  initialState: initialState,
-  reducers: {
-    setWXPubFollow: function setWXPubFollow(state, action) {
-      state.wxPubFollow = action.payload;
-    },
-    setPushAllow: function setPushAllow(state, action) {
-      state.pushAllow = action.payload;
-    },
-    setStepAllow: function setStepAllow(state, action) {
-      state.stepAllow = action.payload;
-    },
-    setAlbumAllow: function setAlbumAllow(state, action) {
-      state.albumAllow = action.payload;
-    },
-    setCameraAllow: function setCameraAllow(state, action) {
-      state.cameraAllow = action.payload;
-    },
-    setPhotoAllow: function setPhotoAllow(state, action) {
-      state.photoAllow = action.payload;
-    }
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (permissionSlice.reducer);
-var _permissionSlice$acti = permissionSlice.actions,
-  setWXPubFollow = _permissionSlice$acti.setWXPubFollow,
-  setPushAllow = _permissionSlice$acti.setPushAllow,
-  setStepAllow = _permissionSlice$acti.setStepAllow,
-  setCameraAllow = _permissionSlice$acti.setCameraAllow,
-  setAlbumAllow = _permissionSlice$acti.setAlbumAllow,
-  setPhotoAllow = _permissionSlice$acti.setPhotoAllow;
-
-
 /***/ }),
 
 /***/ "./src/store/store.tsx":

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/app.js.map


+ 6 - 174
dist/base.wxml

@@ -61,14 +61,6 @@
   </button>
 </template>
 
-<template name="tmpl_0_23">
-  <form report-submit="{{xs.b(i.p1,!1)}}" bindsubmit="eh" bindreset="eh" name="{{i.p0}}" report-submit-timeout="{{xs.b(i.p2,0)}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </form>
-</template>
-
 <template name="tmpl_0_27">
   <template is="{{xs.c(i, 'tmpl_0_')}}" data="{{i:i,c:c}}" />
 </template>
@@ -81,14 +73,6 @@
   <input value="{{i.p24}}" type="{{xs.b(i.p23,'')}}" password="{{xs.b(i.p11,!1)}}" placeholder="{{i.p12}}" placeholder-style="{{i.p14}}" placeholder-class="{{xs.b(i.p13,'input-placeholder')}}" disabled="{{i.p7}}" maxlength="{{xs.b(i.p9,140)}}" cursor-spacing="{{xs.b(i.p6,0)}}" confirm-type="{{xs.b(i.p4,'done')}}" confirm-hold="{{xs.b(i.p3,!1)}}" cursor="{{xs.b(i.p5,i.p24?i.p24.length:-1)}}" selection-start="{{xs.b(i.p22,-1)}}" selection-end="{{xs.b(i.p21,-1)}}" bindinput="eh" bindfocus="eh" bindblur="eh" bindconfirm="eh" name="{{i.p10}}" always-embed="{{xs.b(i.p1,false)}}" adjust-position="{{xs.b(i.p0,true)}}" hold-keyboard="{{xs.b(i.p8,false)}}" safe-password-cert-path="{{i.p15}}" safe-password-length="{{i.p17}}" safe-password-time-stamp="{{i.p20}}" safe-password-nonce="{{i.p18}}" safe-password-salt="{{i.p19}}" safe-password-custom-hash="{{i.p16}}" auto-fill="{{i.p2}}" bindkeyboardheightchange="eh" bindnicknamereview="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}"></input>
 </template>
 
-<template name="tmpl_0_29">
-  <label for="{{i.p0}}" name="{{i.p1}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </label>
-</template>
-
 <template name="tmpl_0_44">
   <picker mode="{{xs.b(i.p6,'selector')}}" disabled="{{i.p1}}" range="{{i.p8}}" range-key="{{i.p9}}" value="{{i.p11}}" start="{{i.p10}}" end="{{i.p2}}" fields="{{xs.b(i.p3,'day')}}" custom-item="{{i.p0}}" name="{{i.p7}}" bindcancel="eh" bindchange="eh" bindcolumnchange="eh" header-text="{{i.p4}}" level="{{xs.b(i.p5,region)}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -97,40 +81,20 @@
   </picker>
 </template>
 
-<template name="tmpl_0_54">
-  <slider min="{{xs.b(i.p7,0)}}" max="{{xs.b(i.p6,100)}}" step="{{xs.b(i.p11,1)}}" disabled="{{i.p5}}" value="{{xs.b(i.p12,0)}}" activeColor="{{xs.b(i.p0,'#1aad19')}}" backgroundColor="{{xs.b(i.p1,'#e9e9e9')}}" block-size="{{xs.b(i.p3,28)}}" block-color="{{xs.b(i.p2,'#ffffff')}}" show-value="{{xs.b(i.p10,!1)}}" bindchange="eh" bindchanging="eh" name="{{i.p8}}" color="{{xs.b(i.p4,'#e9e9e9')}}" selected-color="{{xs.b(i.p9,'#1aad19')}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}"></slider>
-</template>
-
-<template name="tmpl_0_61">
-  <switch checked="{{xs.b(i.p0,!1)}}" disabled="{{i.p2}}" type="{{xs.b(i.p4,'switch')}}" color="{{xs.b(i.p1,'#04BE02')}}" bindchange="eh" name="{{i.p3}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}"></switch>
-</template>
-
-<template name="tmpl_0_62">
-  <template is="{{xs.c(i, 'tmpl_0_')}}" data="{{i:i,c:c}}" />
-</template>
-
-<template name="tmpl_0_62_focus">
-  <textarea value="{{i.p19}}" placeholder="{{i.p13}}" placeholder-style="{{i.p15}}" placeholder-class="{{xs.b(i.p14,'textarea-placeholder')}}" disabled="{{i.p8}}" maxlength="{{xs.b(i.p11,140)}}" auto-focus="{{xs.b(i.p1,!1)}}" focus="{{xs.b(i.focus,!1)}}" auto-height="{{xs.b(i.p2,!1)}}" fixed="{{xs.b(i.p9,!1)}}" cursor-spacing="{{xs.b(i.p6,0)}}" cursor="{{xs.b(i.p5,i.p19?i.p19.length:-1)}}" selection-start="{{xs.b(i.p17,-1)}}" selection-end="{{xs.b(i.p16,-1)}}" bindfocus="eh" bindblur="eh" bindlinechange="eh" bindinput="eh" bindconfirm="eh" name="{{i.p12}}" show-confirm-bar="{{xs.b(i.p18,true)}}" adjust-position="{{xs.b(i.p0,true)}}" hold-keyboard="{{xs.b(i.p10,false)}}" disable-default-padding="{{xs.b(i.p7,false)}}" confirm-type="{{xs.b(i.p4,'return')}}" confirm-hold="{{xs.b(i.p3,false)}}" bindkeyboardheightchange="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}"></textarea>
-</template>
-
-<template name="tmpl_0_62_blur">
-  <textarea value="{{i.p19}}" placeholder="{{i.p13}}" placeholder-style="{{i.p15}}" placeholder-class="{{xs.b(i.p14,'textarea-placeholder')}}" disabled="{{i.p8}}" maxlength="{{xs.b(i.p11,140)}}" auto-focus="{{xs.b(i.p1,!1)}}" auto-height="{{xs.b(i.p2,!1)}}" fixed="{{xs.b(i.p9,!1)}}" cursor-spacing="{{xs.b(i.p6,0)}}" cursor="{{xs.b(i.p5,i.p19?i.p19.length:-1)}}" selection-start="{{xs.b(i.p17,-1)}}" selection-end="{{xs.b(i.p16,-1)}}" bindfocus="eh" bindblur="eh" bindlinechange="eh" bindinput="eh" bindconfirm="eh" name="{{i.p12}}" show-confirm-bar="{{xs.b(i.p18,true)}}" adjust-position="{{xs.b(i.p0,true)}}" hold-keyboard="{{xs.b(i.p10,false)}}" disable-default-padding="{{xs.b(i.p7,false)}}" confirm-type="{{xs.b(i.p4,'return')}}" confirm-hold="{{xs.b(i.p3,false)}}" bindkeyboardheightchange="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}"></textarea>
-</template>
-
-<template name="tmpl_0_35">
-  <movable-area scale-area="{{xs.b(i.p0,!1)}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
+<template name="tmpl_0_45">
+  <picker-view value="{{i.p6}}" indicator-style="{{i.p2}}" indicator-class="{{i.p1}}" mask-style="{{i.p4}}" mask-class="{{i.p3}}" bindchange="eh" name="{{i.p5}}" immediate-change="{{xs.b(i.p0,false)}}" bindpickstart="eh" bindpickend="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
       <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
     </block>
-  </movable-area>
+  </picker-view>
 </template>
 
-<template name="tmpl_0_36">
-  <movable-view direction="{{xs.b(i.p2,none)}}" inertia="{{xs.b(i.p6,!1)}}" out-of-bounds="{{xs.b(i.p7,!1)}}" x="{{i.p13}}" y="{{i.p14}}" damping="{{xs.b(i.p1,20)}}" friction="{{xs.b(i.p4,2)}}" disabled="{{i.p3}}" scale="{{xs.b(i.p8,!1)}}" scale-min="{{xs.b(i.p10,0.5)}}" scale-max="{{xs.b(i.p9,10)}}" scale-value="{{xs.b(i.p11,1)}}" bindchange="eh" bindscale="eh" bindhtouchmove="eh" bindvtouchmove="eh" width="{{xs.b(i.p12,'10px')}}" height="{{xs.b(i.p5,'10px')}}" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" animation="{{i.p0}}" bindanimationstart="eh" bindanimationiteration="eh" bindanimationend="eh" bindtransitionend="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
+<template name="tmpl_0_46">
+  <picker-view-column name="{{i.p0}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
       <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
     </block>
-  </movable-view>
+  </picker-view-column>
 </template>
 
 <template name="tmpl_0_52">
@@ -141,22 +105,6 @@
   </scroll-view>
 </template>
 
-<template name="tmpl_0_59">
-  <swiper indicator-dots="{{xs.b(i.p8,!1)}}" indicator-color="{{xs.b(i.p7,'rgba(0, 0, 0, .3)')}}" indicator-active-color="{{xs.b(i.p6,'#000000')}}" autoplay="{{xs.b(i.p0,!1)}}" current="{{xs.b(i.p2,0)}}" interval="{{xs.b(i.p9,5000)}}" duration="{{xs.b(i.p4,500)}}" circular="{{xs.b(i.p1,!1)}}" vertical="{{xs.b(i.p13,!1)}}" previous-margin="{{xs.b(i.p11,'0px')}}" next-margin="{{xs.b(i.p10,'0px')}}" display-multiple-items="{{xs.b(i.p3,1)}}" bindchange="eh" bindtransition="eh" bindanimationfinish="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" snap-to-edge="{{xs.b(i.p12,false)}}" easing-function="{{xs.b(i.p5,'default')}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper>
-</template>
-
-<template name="tmpl_0_60">
-  <swiper-item item-id="{{i.p0}}" skip-hidden-item-layout="{{xs.b(i.p1,false)}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper-item>
-</template>
-
 <template name="tmpl_0_3">
   <image src="{{i.p3}}" mode="{{xs.b(i.p1,'scaleToFill')}}" lazy-load="{{xs.b(i.p0,!1)}}" webp="{{xs.b(i.p4,false)}}" show-menu-by-longpress="{{xs.b(i.p2,false)}}" style="{{i.st}}" class="{{i.cl}}"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -189,10 +137,6 @@
   </web-view>
 </template>
 
-<template name="tmpl_0_41">
-  <open-data type="{{i.p4}}" open-gid="{{i.p3}}" lang="{{xs.b(i.p2,'en')}}" default-text="{{i.p1}}" default-avatar="{{i.p0}}" binderror="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}"></open-data>
-</template>
-
 <template name="tmpl_0_8">
   <block>{{i.v}}</block>
 </template>
@@ -253,22 +197,6 @@
   </text>
 </template>
 
-<template name="tmpl_1_23">
-  <form report-submit="{{xs.b(i.p1,!1)}}" bindsubmit="eh" bindreset="eh" name="{{i.p0}}" report-submit-timeout="{{xs.b(i.p2,0)}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </form>
-</template>
-
-<template name="tmpl_1_29">
-  <label for="{{i.p0}}" name="{{i.p1}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </label>
-</template>
-
 <template name="tmpl_1_52">
   <scroll-view scroll-x="{{xs.b(i.p23,!1)}}" scroll-y="{{xs.b(i.p24,!1)}}" upper-threshold="{{xs.b(i.p27,50)}}" lower-threshold="{{xs.b(i.p8,50)}}" scroll-top="{{i.p21}}" scroll-left="{{i.p20}}" scroll-into-view="{{i.p17}}" scroll-with-animation="{{xs.b(i.p22,!1)}}" enable-back-to-top="{{xs.b(i.p3,!1)}}" bindscrolltoupper="eh" bindscrolltolower="eh" bindscroll="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" animation="{{i.p0}}" bindanimationstart="eh" bindanimationiteration="eh" bindanimationend="eh" bindtransitionend="eh" type="{{xs.b(i.p26,'list')}}" event-passive="{{xs.b(i.p6,false)}}" enable-flex="{{xs.b(i.p4,false)}}" scroll-anchoring="{{xs.b(i.p16,false)}}" refresher-enabled="{{xs.b(i.p12,false)}}" refresher-threshold="{{xs.b(i.p13,45)}}" refresher-default-style="{{xs.b(i.p11,'black')}}" refresher-background="{{xs.b(i.p10,'#FFF')}}" refresher-triggered="{{xs.b(i.p14,false)}}" enhanced="{{xs.b(i.p5,false)}}" bounces="{{xs.b(i.p1,true)}}" show-scrollbar="{{xs.b(i.p25,true)}}" paging-enabled="{{xs.b(i.p9,false)}}" fast-deceleration="{{xs.b(i.p7,false)}}" reverse="{{xs.b(i.p15,false)}}" cache-extent="{{xs.b(i.p2,0)}}" scroll-into-view-within-extent="{{xs.b(i.p19,false)}}" scroll-into-view-alignment="{{xs.b(i.p18,'start')}}" binddragstart="eh" binddragging="eh" binddragend="eh" bindrefresherpulling="eh" bindrefresherrefresh="eh" bindrefresherrestore="eh" bindrefresherabort="eh" bindscrollstart="eh" bindscrollend="eh" bindrefresherwillrefresh="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -277,22 +205,6 @@
   </scroll-view>
 </template>
 
-<template name="tmpl_1_59">
-  <swiper indicator-dots="{{xs.b(i.p8,!1)}}" indicator-color="{{xs.b(i.p7,'rgba(0, 0, 0, .3)')}}" indicator-active-color="{{xs.b(i.p6,'#000000')}}" autoplay="{{xs.b(i.p0,!1)}}" current="{{xs.b(i.p2,0)}}" interval="{{xs.b(i.p9,5000)}}" duration="{{xs.b(i.p4,500)}}" circular="{{xs.b(i.p1,!1)}}" vertical="{{xs.b(i.p13,!1)}}" previous-margin="{{xs.b(i.p11,'0px')}}" next-margin="{{xs.b(i.p10,'0px')}}" display-multiple-items="{{xs.b(i.p3,1)}}" bindchange="eh" bindtransition="eh" bindanimationfinish="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" snap-to-edge="{{xs.b(i.p12,false)}}" easing-function="{{xs.b(i.p5,'default')}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper>
-</template>
-
-<template name="tmpl_1_60">
-  <swiper-item item-id="{{i.p0}}" skip-hidden-item-layout="{{xs.b(i.p1,false)}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper-item>
-</template>
-
 <template name="tmpl_1_demo">
   <demo  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -349,22 +261,6 @@
   </text>
 </template>
 
-<template name="tmpl_2_23">
-  <form report-submit="{{xs.b(i.p1,!1)}}" bindsubmit="eh" bindreset="eh" name="{{i.p0}}" report-submit-timeout="{{xs.b(i.p2,0)}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </form>
-</template>
-
-<template name="tmpl_2_29">
-  <label for="{{i.p0}}" name="{{i.p1}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </label>
-</template>
-
 <template name="tmpl_2_52">
   <scroll-view scroll-x="{{xs.b(i.p23,!1)}}" scroll-y="{{xs.b(i.p24,!1)}}" upper-threshold="{{xs.b(i.p27,50)}}" lower-threshold="{{xs.b(i.p8,50)}}" scroll-top="{{i.p21}}" scroll-left="{{i.p20}}" scroll-into-view="{{i.p17}}" scroll-with-animation="{{xs.b(i.p22,!1)}}" enable-back-to-top="{{xs.b(i.p3,!1)}}" bindscrolltoupper="eh" bindscrolltolower="eh" bindscroll="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" animation="{{i.p0}}" bindanimationstart="eh" bindanimationiteration="eh" bindanimationend="eh" bindtransitionend="eh" type="{{xs.b(i.p26,'list')}}" event-passive="{{xs.b(i.p6,false)}}" enable-flex="{{xs.b(i.p4,false)}}" scroll-anchoring="{{xs.b(i.p16,false)}}" refresher-enabled="{{xs.b(i.p12,false)}}" refresher-threshold="{{xs.b(i.p13,45)}}" refresher-default-style="{{xs.b(i.p11,'black')}}" refresher-background="{{xs.b(i.p10,'#FFF')}}" refresher-triggered="{{xs.b(i.p14,false)}}" enhanced="{{xs.b(i.p5,false)}}" bounces="{{xs.b(i.p1,true)}}" show-scrollbar="{{xs.b(i.p25,true)}}" paging-enabled="{{xs.b(i.p9,false)}}" fast-deceleration="{{xs.b(i.p7,false)}}" reverse="{{xs.b(i.p15,false)}}" cache-extent="{{xs.b(i.p2,0)}}" scroll-into-view-within-extent="{{xs.b(i.p19,false)}}" scroll-into-view-alignment="{{xs.b(i.p18,'start')}}" binddragstart="eh" binddragging="eh" binddragend="eh" bindrefresherpulling="eh" bindrefresherrefresh="eh" bindrefresherrestore="eh" bindrefresherabort="eh" bindscrollstart="eh" bindscrollend="eh" bindrefresherwillrefresh="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -373,22 +269,6 @@
   </scroll-view>
 </template>
 
-<template name="tmpl_2_59">
-  <swiper indicator-dots="{{xs.b(i.p8,!1)}}" indicator-color="{{xs.b(i.p7,'rgba(0, 0, 0, .3)')}}" indicator-active-color="{{xs.b(i.p6,'#000000')}}" autoplay="{{xs.b(i.p0,!1)}}" current="{{xs.b(i.p2,0)}}" interval="{{xs.b(i.p9,5000)}}" duration="{{xs.b(i.p4,500)}}" circular="{{xs.b(i.p1,!1)}}" vertical="{{xs.b(i.p13,!1)}}" previous-margin="{{xs.b(i.p11,'0px')}}" next-margin="{{xs.b(i.p10,'0px')}}" display-multiple-items="{{xs.b(i.p3,1)}}" bindchange="eh" bindtransition="eh" bindanimationfinish="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" snap-to-edge="{{xs.b(i.p12,false)}}" easing-function="{{xs.b(i.p5,'default')}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper>
-</template>
-
-<template name="tmpl_2_60">
-  <swiper-item item-id="{{i.p0}}" skip-hidden-item-layout="{{xs.b(i.p1,false)}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper-item>
-</template>
-
 <template name="tmpl_2_demo">
   <demo  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -445,22 +325,6 @@
   </text>
 </template>
 
-<template name="tmpl_3_23">
-  <form report-submit="{{xs.b(i.p1,!1)}}" bindsubmit="eh" bindreset="eh" name="{{i.p0}}" report-submit-timeout="{{xs.b(i.p2,0)}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </form>
-</template>
-
-<template name="tmpl_3_29">
-  <label for="{{i.p0}}" name="{{i.p1}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </label>
-</template>
-
 <template name="tmpl_3_52">
   <scroll-view scroll-x="{{xs.b(i.p23,!1)}}" scroll-y="{{xs.b(i.p24,!1)}}" upper-threshold="{{xs.b(i.p27,50)}}" lower-threshold="{{xs.b(i.p8,50)}}" scroll-top="{{i.p21}}" scroll-left="{{i.p20}}" scroll-into-view="{{i.p17}}" scroll-with-animation="{{xs.b(i.p22,!1)}}" enable-back-to-top="{{xs.b(i.p3,!1)}}" bindscrolltoupper="eh" bindscrolltolower="eh" bindscroll="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" animation="{{i.p0}}" bindanimationstart="eh" bindanimationiteration="eh" bindanimationend="eh" bindtransitionend="eh" type="{{xs.b(i.p26,'list')}}" event-passive="{{xs.b(i.p6,false)}}" enable-flex="{{xs.b(i.p4,false)}}" scroll-anchoring="{{xs.b(i.p16,false)}}" refresher-enabled="{{xs.b(i.p12,false)}}" refresher-threshold="{{xs.b(i.p13,45)}}" refresher-default-style="{{xs.b(i.p11,'black')}}" refresher-background="{{xs.b(i.p10,'#FFF')}}" refresher-triggered="{{xs.b(i.p14,false)}}" enhanced="{{xs.b(i.p5,false)}}" bounces="{{xs.b(i.p1,true)}}" show-scrollbar="{{xs.b(i.p25,true)}}" paging-enabled="{{xs.b(i.p9,false)}}" fast-deceleration="{{xs.b(i.p7,false)}}" reverse="{{xs.b(i.p15,false)}}" cache-extent="{{xs.b(i.p2,0)}}" scroll-into-view-within-extent="{{xs.b(i.p19,false)}}" scroll-into-view-alignment="{{xs.b(i.p18,'start')}}" binddragstart="eh" binddragging="eh" binddragend="eh" bindrefresherpulling="eh" bindrefresherrefresh="eh" bindrefresherrestore="eh" bindrefresherabort="eh" bindscrollstart="eh" bindscrollend="eh" bindrefresherwillrefresh="eh" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -469,22 +333,6 @@
   </scroll-view>
 </template>
 
-<template name="tmpl_3_59">
-  <swiper indicator-dots="{{xs.b(i.p8,!1)}}" indicator-color="{{xs.b(i.p7,'rgba(0, 0, 0, .3)')}}" indicator-active-color="{{xs.b(i.p6,'#000000')}}" autoplay="{{xs.b(i.p0,!1)}}" current="{{xs.b(i.p2,0)}}" interval="{{xs.b(i.p9,5000)}}" duration="{{xs.b(i.p4,500)}}" circular="{{xs.b(i.p1,!1)}}" vertical="{{xs.b(i.p13,!1)}}" previous-margin="{{xs.b(i.p11,'0px')}}" next-margin="{{xs.b(i.p10,'0px')}}" display-multiple-items="{{xs.b(i.p3,1)}}" bindchange="eh" bindtransition="eh" bindanimationfinish="eh" bindtouchstart="eh" bindtouchmove="eh" bindtouchend="eh" bindtouchcancel="eh" bindlongpress="eh" snap-to-edge="{{xs.b(i.p12,false)}}" easing-function="{{xs.b(i.p5,'default')}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper>
-</template>
-
-<template name="tmpl_3_60">
-  <swiper-item item-id="{{i.p0}}" skip-hidden-item-layout="{{xs.b(i.p1,false)}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </swiper-item>
-</template>
-
 <template name="tmpl_3_demo">
   <demo  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -541,14 +389,6 @@
   </text>
 </template>
 
-<template name="tmpl_4_29">
-  <label for="{{i.p0}}" name="{{i.p1}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </label>
-</template>
-
 <template name="tmpl_4_demo">
   <demo  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">
@@ -605,14 +445,6 @@
   </text>
 </template>
 
-<template name="tmpl_5_29">
-  <label for="{{i.p0}}" name="{{i.p1}}" style="{{i.st}}" class="{{i.cl}}" bindtap="eh"  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
-    <block wx:for="{{i.cn}}" wx:key="sid">
-      <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" />
-    </block>
-  </label>
-</template>
-
 <template name="tmpl_5_demo">
   <demo  id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
     <block wx:for="{{i.cn}}" wx:key="sid">

+ 57 - 0
dist/common.js

@@ -801,6 +801,63 @@ var commonSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)(
 var setResources = commonSlice.actions.setResources;
 
 
+/***/ }),
+
+/***/ "./src/store/permission.tsx":
+/*!**********************************!*\
+  !*** ./src/store/permission.tsx ***!
+  \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   setWXPubFollow: function() { return /* binding */ setWXPubFollow; }
+/* harmony export */ });
+/* unused harmony exports setPushAllow, setStepAllow, setCameraAllow, setAlbumAllow, setPhotoAllow */
+/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @reduxjs/toolkit */ "webpack/container/remote/@reduxjs/toolkit");
+/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
+
+var initialState = {
+  wxPubFollow: false,
+  pushAllow: false,
+  stepAllow: false,
+  albumAllow: false,
+  cameraAllow: false,
+  photoAllow: false
+};
+var permissionSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
+  name: 'permission',
+  initialState: initialState,
+  reducers: {
+    setWXPubFollow: function setWXPubFollow(state, action) {
+      state.wxPubFollow = action.payload;
+    },
+    setPushAllow: function setPushAllow(state, action) {
+      state.pushAllow = action.payload;
+    },
+    setStepAllow: function setStepAllow(state, action) {
+      state.stepAllow = action.payload;
+    },
+    setAlbumAllow: function setAlbumAllow(state, action) {
+      state.albumAllow = action.payload;
+    },
+    setCameraAllow: function setCameraAllow(state, action) {
+      state.cameraAllow = action.payload;
+    },
+    setPhotoAllow: function setPhotoAllow(state, action) {
+      state.photoAllow = action.payload;
+    }
+  }
+});
+/* harmony default export */ __webpack_exports__["default"] = (permissionSlice.reducer);
+var _permissionSlice$acti = permissionSlice.actions,
+  setWXPubFollow = _permissionSlice$acti.setWXPubFollow,
+  setPushAllow = _permissionSlice$acti.setPushAllow,
+  setStepAllow = _permissionSlice$acti.setStepAllow,
+  setCameraAllow = _permissionSlice$acti.setCameraAllow,
+  setAlbumAllow = _permissionSlice$acti.setAlbumAllow,
+  setPhotoAllow = _permissionSlice$acti.setPhotoAllow;
+
+
 /***/ }),
 
 /***/ "./src/store/scenario.tsx":

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/common.js.map


+ 1 - 0
dist/custom-tab-bar/index.wxss

@@ -12,6 +12,7 @@
   -webkit-justify-content: space-around;
       -ms-flex-pack: distribute;
           justify-content: space-around;
+  background-color: #000;
   padding-bottom: constant(safe-area-inset-bottom);
   /* 兼容 iOS < 11.2 */
   padding-bottom: env(safe-area-inset-bottom);

Різницю між файлами не показано, бо вона завелика
+ 101 - 5625
dist/pages/Clock.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/pages/Clock.js.map


+ 87 - 0
dist/pages/Clock.wxss

@@ -15,6 +15,26 @@
 .login {
   color: red;
 }
+/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[2]!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[4]!./src/pages/Clock.scss ***!
+  \*******************************************************************************************************************************************************************************************************************************************************************************************************************/
+.console_box {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  margin: 20rpx;
+  padding-top: 40rpx;
+  padding-bottom: 40rpx;
+  color: #fff;
+  background-color: #1c1c1c;
+  border-radius: 40rpx;
+}
 /*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
   !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[2]!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[4]!./node_modules/taro-ui/dist/style/components/float-layout.scss ***!
   \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@@ -283,3 +303,70 @@
   -webkit-transform: translate3d(0, 0, 0);
           transform: translate3d(0, 0, 0);
 }
+/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[2]!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[0].use[4]!./src/features/trackTimeDuration/components/TitleBar.scss ***!
+  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+.detail {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: row;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  -webkit-justify-content: space-between;
+      -ms-flex-pack: justify;
+          justify-content: space-between;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  margin-bottom: 10rpx;
+  color: #fff;
+  background-color: #000;
+}
+
+.title {
+  color: #fff;
+  font-size: 48rpx;
+  line-height: 48rpx;
+  margin-bottom: 8rpx;
+}
+
+.time {
+  color: #fff;
+  opacity: 0.4;
+  font-size: 32rpx;
+  line-height: 48rpx;
+}
+
+.detail_item {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+}
+
+.title_bg {
+  padding-top: 9rpx;
+  position: relative;
+}
+
+.badge {
+  position: absolute;
+  right: -9rpx;
+  top: 0rpx;
+  width: 18rpx;
+  height: 18rpx;
+  border-radius: 50%;
+  background-color: #AAFF00;
+}

+ 45 - 0
dist/prebundle/node_modules_taro_weapp_prebundle_tarojs_taro_js.js

@@ -0,0 +1,45 @@
+(wx["webpackJsonp"] = wx["webpackJsonp"] || []).push([["node_modules_taro_weapp_prebundle_tarojs_taro_js"],{
+
+/***/ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.core.js":
+/*!*****************************************************************!*\
+  !*** ./node_modules/.taro/weapp/prebundle/@tarojs_taro.core.js ***!
+  \*****************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _chunk_6GAVBEBQ_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-6GAVBEBQ.js */ "./node_modules/.taro/weapp/prebundle/chunk-6GAVBEBQ.js");
+/* harmony import */ var _chunk_3EXGJ5BE_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-3EXGJ5BE.js */ "./node_modules/.taro/weapp/prebundle/chunk-3EXGJ5BE.js");
+/* harmony import */ var _chunk_77KB62LY_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-77KB62LY.js */ "./node_modules/.taro/weapp/prebundle/chunk-77KB62LY.js");
+/* harmony import */ var _chunk_SOUSFT7N_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-SOUSFT7N.js */ "./node_modules/.taro/weapp/prebundle/chunk-SOUSFT7N.js");
+/* harmony import */ var _chunk_P7VEE7PG_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-P7VEE7PG.js */ "./node_modules/.taro/weapp/prebundle/chunk-P7VEE7PG.js");
+
+
+
+
+
+// entry:@tarojs_taro
+var require_tarojs_taro = (0,_chunk_P7VEE7PG_js__WEBPACK_IMPORTED_MODULE_4__.__commonJS)({
+    "entry:@tarojs_taro" (exports, module) {
+        module.exports = (0,_chunk_6GAVBEBQ_js__WEBPACK_IMPORTED_MODULE_0__.require_taro)();
+    }
+});
+/* harmony default export */ __webpack_exports__["default"] = (require_tarojs_taro());
+
+
+/***/ }),
+
+/***/ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.js":
+/*!************************************************************!*\
+  !*** ./node_modules/.taro/weapp/prebundle/@tarojs_taro.js ***!
+  \************************************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+var m = __webpack_require__(/*! ./@tarojs_taro.core.js */ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.core.js");
+                   module.exports = m.default;
+                   exports["default"] = module.exports;
+                  
+
+/***/ })
+
+}]);

+ 13 - 7
dist/prebundle/remoteEntry.js

@@ -13,17 +13,17 @@ var moduleMap = {
 		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-LNJCN3VW_js"), __webpack_require__.e("node_modules_taro_weapp_prebundle_react_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react.js */ "./node_modules/.taro/weapp/prebundle/react.js")); }; });
 	},
 	"./@tarojs/taro": function() {
-		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_tarojs_taro_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/@tarojs_taro.js */ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.js")); }; });
+		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-6GAVBEBQ_js"), __webpack_require__.e("node_modules_taro_weapp_prebundle_tarojs_taro_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/@tarojs_taro.js */ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.js")); }; });
 	},
 	"./react-redux": function() {
 		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-LNJCN3VW_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-2Y2U3MWF_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_react-redux_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react-redux.js */ "./node_modules/.taro/weapp/prebundle/react-redux.js")); }; });
 	},
-	"./@reduxjs/toolkit": function() {
-		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_reduxjs_toolkit_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js */ "./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js")); }; });
-	},
 	"./react-i18next": function() {
 		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-LNJCN3VW_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_react-i18next_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react-i18next.js */ "./node_modules/.taro/weapp/prebundle/react-i18next.js")); }; });
 	},
+	"./@reduxjs/toolkit": function() {
+		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_reduxjs_toolkit_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js */ "./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js")); }; });
+	},
 	"./i18next-browser-languagedetector": function() {
 		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_i18next-browser-languagedetector_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/i18next-browser-languagedetector.js */ "./node_modules/.taro/weapp/prebundle/i18next-browser-languagedetector.js")); }; });
 	},
@@ -33,6 +33,9 @@ var moduleMap = {
 	"./i18next": function() {
 		return __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_i18next_js").then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/i18next.js */ "./node_modules/.taro/weapp/prebundle/i18next.js")); }; });
 	},
+	"./taro-ui": function() {
+		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-77KB62LY_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-3EXGJ5BE_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-LNJCN3VW_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-6GAVBEBQ_js"), __webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_taro-ui_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/taro-ui.js */ "./node_modules/.taro/weapp/prebundle/taro-ui.js")); }; });
+	},
 	"./react/jsx-runtime": function() {
 		return Promise.all([__webpack_require__.e("vendors-node_modules_taro_weapp_prebundle_chunk-LNJCN3VW_js"), __webpack_require__.e("node_modules_taro_weapp_prebundle_react_jsx-runtime_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react_jsx-runtime.js */ "./node_modules/.taro/weapp/prebundle/react_jsx-runtime.js")); }; });
 	},
@@ -86,12 +89,12 @@ var taroModuleMap = {
 	"./react-redux": function() {
 		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react-redux.js */ "./node_modules/.taro/weapp/prebundle/react-redux.js")); };
 	},
-	"./@reduxjs/toolkit": function() {
-		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js */ "./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js")); };
-	},
 	"./react-i18next": function() {
 		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react-i18next.js */ "./node_modules/.taro/weapp/prebundle/react-i18next.js")); };
 	},
+	"./@reduxjs/toolkit": function() {
+		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js */ "./node_modules/.taro/weapp/prebundle/@reduxjs_toolkit.js")); };
+	},
 	"./i18next-browser-languagedetector": function() {
 		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/i18next-browser-languagedetector.js */ "./node_modules/.taro/weapp/prebundle/i18next-browser-languagedetector.js")); };
 	},
@@ -101,6 +104,9 @@ var taroModuleMap = {
 	"./i18next": function() {
 		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/i18next.js */ "./node_modules/.taro/weapp/prebundle/i18next.js")); };
 	},
+	"./taro-ui": function() {
+		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/taro-ui.js */ "./node_modules/.taro/weapp/prebundle/taro-ui.js")); };
+	},
 	"./react/jsx-runtime": function() {
 		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/react_jsx-runtime.js */ "./node_modules/.taro/weapp/prebundle/react_jsx-runtime.js")); };
 	},

+ 9 - 27
dist/prebundle/vendors-node_modules_taro_weapp_prebundle_tarojs_taro_js.js → dist/prebundle/vendors-node_modules_taro_weapp_prebundle_chunk-6GAVBEBQ_js.js

@@ -1,13 +1,15 @@
-(wx["webpackJsonp"] = wx["webpackJsonp"] || []).push([["vendors-node_modules_taro_weapp_prebundle_tarojs_taro_js"],{
+"use strict";
+(wx["webpackJsonp"] = wx["webpackJsonp"] || []).push([["vendors-node_modules_taro_weapp_prebundle_chunk-6GAVBEBQ_js"],{
 
-/***/ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.core.js":
-/*!*****************************************************************!*\
-  !*** ./node_modules/.taro/weapp/prebundle/@tarojs_taro.core.js ***!
-  \*****************************************************************/
+/***/ "./node_modules/.taro/weapp/prebundle/chunk-6GAVBEBQ.js":
+/*!**************************************************************!*\
+  !*** ./node_modules/.taro/weapp/prebundle/chunk-6GAVBEBQ.js ***!
+  \**************************************************************/
 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   require_taro: function() { return /* binding */ require_taro; }
+/* harmony export */ });
 /* harmony import */ var _chunk_3EXGJ5BE_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-3EXGJ5BE.js */ "./node_modules/.taro/weapp/prebundle/chunk-3EXGJ5BE.js");
 /* harmony import */ var _chunk_77KB62LY_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-77KB62LY.js */ "./node_modules/.taro/weapp/prebundle/chunk-77KB62LY.js");
 /* harmony import */ var _chunk_SOUSFT7N_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-SOUSFT7N.js */ "./node_modules/.taro/weapp/prebundle/chunk-SOUSFT7N.js");
@@ -390,27 +392,8 @@ var require_taro = (0,_chunk_P7VEE7PG_js__WEBPACK_IMPORTED_MODULE_3__.__commonJS
         module.exports.default = module.exports;
     }
 });
-// entry:@tarojs_taro
-var require_tarojs_taro = (0,_chunk_P7VEE7PG_js__WEBPACK_IMPORTED_MODULE_3__.__commonJS)({
-    "entry:@tarojs_taro" (exports, module) {
-        module.exports = require_taro();
-    }
-});
-/* harmony default export */ __webpack_exports__["default"] = (require_tarojs_taro());
-
 
-/***/ }),
-
-/***/ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.js":
-/*!************************************************************!*\
-  !*** ./node_modules/.taro/weapp/prebundle/@tarojs_taro.js ***!
-  \************************************************************/
-/***/ (function(module, exports, __webpack_require__) {
 
-var m = __webpack_require__(/*! ./@tarojs_taro.core.js */ "./node_modules/.taro/weapp/prebundle/@tarojs_taro.core.js");
-                   module.exports = m.default;
-                   exports["default"] = module.exports;
-                  
 
 /***/ }),
 
@@ -420,7 +403,6 @@ var m = __webpack_require__(/*! ./@tarojs_taro.core.js */ "./node_modules/.taro/
   \**************************************************************/
 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
 
-"use strict";
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
 /* harmony export */   _classCallCheck: function() { return /* binding */ _classCallCheck; },
 /* harmony export */   _createClass: function() { return /* binding */ _createClass; },

Різницю між файлами не показано, бо вона завелика
+ 4675 - 0
dist/prebundle/vendors-node_modules_taro_weapp_prebundle_taro-ui_js.js


+ 7 - 1
dist/runtime.js

@@ -204,7 +204,8 @@
 /******/ 				"webpack/container/remote/react-dom"
 /******/ 			],
 /******/ 			"pages/Clock": [
-/******/ 				"webpack/container/remote/xstate"
+/******/ 				"webpack/container/remote/xstate",
+/******/ 				"webpack/container/remote/taro-ui"
 /******/ 			],
 /******/ 			"common": [
 /******/ 				"webpack/container/remote/@tarojs/runtime",
@@ -247,6 +248,11 @@
 /******/ 				"./xstate",
 /******/ 				null
 /******/ 			],
+/******/ 			"webpack/container/remote/taro-ui": [
+/******/ 				"default",
+/******/ 				"./taro-ui",
+/******/ 				null
+/******/ 			],
 /******/ 			"webpack/container/remote/@tarojs/runtime": [
 /******/ 				"default",
 /******/ 				"./@tarojs/runtime",

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/runtime.js.map


+ 3 - 12
dist/taro.js

@@ -10,25 +10,16 @@
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
 /* harmony export */   Button: function() { return /* binding */ Button; },
 /* harmony export */   Canvas: function() { return /* binding */ Canvas; },
-/* harmony export */   Form: function() { return /* binding */ Form; },
 /* harmony export */   Image: function() { return /* binding */ Image; },
 /* harmony export */   Input: function() { return /* binding */ Input; },
-/* harmony export */   Label: function() { return /* binding */ Label; },
-/* harmony export */   MovableArea: function() { return /* binding */ MovableArea; },
-/* harmony export */   MovableView: function() { return /* binding */ MovableView; },
-/* harmony export */   OpenData: function() { return /* binding */ OpenData; },
 /* harmony export */   Picker: function() { return /* binding */ Picker; },
-/* harmony export */   ScrollView: function() { return /* binding */ ScrollView; },
-/* harmony export */   Slider: function() { return /* binding */ Slider; },
-/* harmony export */   Swiper: function() { return /* binding */ Swiper; },
-/* harmony export */   SwiperItem: function() { return /* binding */ SwiperItem; },
-/* harmony export */   Switch: function() { return /* binding */ Switch; },
+/* harmony export */   PickerView: function() { return /* binding */ PickerView; },
+/* harmony export */   PickerViewColumn: function() { return /* binding */ PickerViewColumn; },
 /* harmony export */   Text: function() { return /* binding */ Text; },
-/* harmony export */   Textarea: function() { return /* binding */ Textarea; },
 /* harmony export */   View: function() { return /* binding */ View; },
 /* harmony export */   WebView: function() { return /* binding */ WebView; }
 /* harmony export */ });
-/* unused harmony exports Ad, AdCustom, Audio, Block, Camera, ChannelLive, ChannelVideo, Checkbox, CheckboxGroup, CoverImage, CoverView, CustomWrapper, Editor, FunctionalPageNavigator, GridView, Icon, KeyboardAccessory, ListView, LivePlayer, LivePusher, Map, MatchMedia, NativeSlot, NavigationBar, Navigator, OfficialAccount, PageContainer, PageMeta, PickerView, PickerViewColumn, Progress, Radio, RadioGroup, RichText, RootPortal, ShareElement, Slot, StickyHeader, StickySection, Video, VoipRoom */
+/* unused harmony exports Ad, AdCustom, Audio, Block, Camera, ChannelLive, ChannelVideo, Checkbox, CheckboxGroup, CoverImage, CoverView, CustomWrapper, Editor, Form, FunctionalPageNavigator, GridView, Icon, KeyboardAccessory, Label, ListView, LivePlayer, LivePusher, Map, MatchMedia, MovableArea, MovableView, NativeSlot, NavigationBar, Navigator, OfficialAccount, OpenData, PageContainer, PageMeta, Progress, Radio, RadioGroup, RichText, RootPortal, ScrollView, ShareElement, Slider, Slot, StickyHeader, StickySection, Swiper, SwiperItem, Switch, Textarea, Video, VoipRoom */
 var View = 'view';
 var Icon = 'icon';
 var Progress = 'progress';

+ 1 - 1
dist/taro.js.map

@@ -1 +1 @@
-{"version":3,"file":"taro.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA","sources":["webpack://hola/.._src_components-react.ts","webpack://hola/._node_modules_@tarojs_webpack5-runner_dist_template_comp.js","webpack://hola/.._.._src_template_custom-wrapper.ts"],"sourcesContent":["// For React.createElement's type\nexport * from '@tarojs/components/mini'\nexport const Editor = 'editor'\nexport const MatchMedia = 'match-media'\nexport const FunctionalPageNavigator = 'functional-page-navigator'\nexport const LivePusher = 'live-pusher'\nexport const OfficialAccount = 'official-account'\nexport const OpenData = 'open-data'\nexport const NavigationBar = 'navigation-bar'\nexport const PageMeta = 'page-meta'\nexport const VoipRoom = 'voip-room'\nexport const AdCustom = 'ad-custom'\nexport const PageContainer = 'page-container'\nexport const ShareElement = 'share-element'\nexport const KeyboardAccessory = 'keyboard-accessory'\nexport const RootPortal = 'root-portal'\nexport const ChannelLive = 'channel-live'\nexport const ChannelVideo = 'channel-video'\nexport const ListView = 'list-view'\nexport const GridView = 'grid-view'\nexport const StickyHeader = 'sticky-header'\nexport const StickySection = 'sticky-section'\n","/* eslint-disable no-undef */\nimport { createRecursiveComponentConfig } from '@tarojs/runtime'\n// @ts-ignore\nComponent(createRecursiveComponentConfig())\n"],"names":[],"sourceRoot":""}
+{"version":3,"file":"taro.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA","sources":["webpack://hola/.._src_components-react.ts","webpack://hola/._node_modules_@tarojs_webpack5-runner_dist_template_comp.js","webpack://hola/.._.._src_template_custom-wrapper.ts"],"sourcesContent":["// For React.createElement's type\nexport * from '@tarojs/components/mini'\nexport const Editor = 'editor'\nexport const MatchMedia = 'match-media'\nexport const FunctionalPageNavigator = 'functional-page-navigator'\nexport const LivePusher = 'live-pusher'\nexport const OfficialAccount = 'official-account'\nexport const OpenData = 'open-data'\nexport const NavigationBar = 'navigation-bar'\nexport const PageMeta = 'page-meta'\nexport const VoipRoom = 'voip-room'\nexport const AdCustom = 'ad-custom'\nexport const PageContainer = 'page-container'\nexport const ShareElement = 'share-element'\nexport const KeyboardAccessory = 'keyboard-accessory'\nexport const RootPortal = 'root-portal'\nexport const ChannelLive = 'channel-live'\nexport const ChannelVideo = 'channel-video'\nexport const ListView = 'list-view'\nexport const GridView = 'grid-view'\nexport const StickyHeader = 'sticky-header'\nexport const StickySection = 'sticky-section'\n","/* eslint-disable no-undef */\nimport { createRecursiveComponentConfig } from '@tarojs/runtime'\n// @ts-ignore\nComponent(createRecursiveComponentConfig())\n"],"names":[],"sourceRoot":""}

+ 1 - 0
src/custom-tab-bar/index.scss

@@ -3,6 +3,7 @@
     display: flex;
     flex-direction: row;
     justify-content: space-around;
+    background-color: #000;
     // background-color: red;
     padding-bottom: constant(safe-area-inset-bottom);
     /* 兼容 iOS < 11.2 */

+ 91 - 3
src/features/trackTimeDuration/components/Clock.tsx

@@ -1,11 +1,99 @@
 import Rings from "@/components/Rings";
-import { View,Text } from "@tarojs/components";
+import trackTimeService, { machine } from "@/store/trackTimeMachine";
+import { View, Text } from "@tarojs/components";
+import { useEffect, useState } from "react";
+import { TimeFormatter } from "@/utils/time_format";
 
-export default function Component(){
+export default function Component() {
+    const [checkData, setCheckData] = useState(null)
+    const [counter, setCounter] = useState(0)
+    const [timerId, setTimerId] = useState(null)
+
+
+    useEffect(() => {
+        if (machine.context.checkData) {
+            setCheckData(machine.context.checkData as any);
+        }
+    }, [machine.context.checkData]);
+
+    useEffect(() => {
+        trackTimeService.onTransition(_ => {
+            if (machine.context.checkData) {
+                setCheckData(machine.context.checkData as any);
+            }
+        });
+    }, []);
+
+    useEffect(() => {
+        startTimer();
+        return () => {
+            // 在组件卸载时清除定时器
+            if (timerId) {
+                clearInterval(timerId);
+            }
+        };
+    }, [timerId]);
+
+    const startTimer = () => {
+        // 避免重复启动定时器
+        if (timerId) {
+            return;
+        }
+
+        const id = setInterval(() => {
+            setCounter((prevCounter) => prevCounter + 1);
+        }, 1000);
+
+        setTimerId(id as any);
+    };
+
+    const stopTimer = () => {
+        if (timerId) {
+            clearInterval(timerId);
+            setTimerId(null);
+        }
+    };
+
+    if (!checkData)
+        return <View>
+            <Rings radius={50} />
+            <Text style={{ opacity: 0 }}>{counter}</Text>
+        </View>
     return (
         <View>
             <Rings radius={50} />
-            <Text>Clock Component</Text>
+            {
+                (checkData as any).current_record.status == 'WAIT_FOR_START' && <Text style={{color:'#AAFF00'}}>00:00:00</Text>
+            }
+            {
+                (checkData as any).current_record.status == 'ONGOING' && <Text style={{color:(checkData as any).current_record.scenario=='FAST'?'#aaff00':'#00ffffff'}}>
+                    {TimeFormatter.formateTimeNow((checkData as any).current_record.fast ?
+                        (checkData as any).current_record.fast.real_start_time :
+                        (checkData as any).current_record.sleep.real_start_time)}
+                </Text>
+            }
+            {
+                (checkData as any).current_record.status == 'ONGOING1' && <Text style={{color:'#AAFF00'}}>
+                    {TimeFormatter.formateTimeNow((checkData as any).current_record.fast.real_start_time)}
+                </Text>
+            }
+            {
+                (checkData as any).current_record.status == 'ONGOING2' && <View style={{flexDirection:'column',display:'flex'}}>
+                    <Text style={{color:'#AAFF00'}}>
+                        {TimeFormatter.formateTimeNow((checkData as any).current_record.fast.real_start_time)}
+                    </Text>
+                    <Text style={{color:'#00FFFF'}}>
+                        {TimeFormatter.formateTimeNow((checkData as any).current_record.sleep.real_start_time)}
+                    </Text>
+                </View>
+            }
+            {
+                (checkData as any).current_record.status == 'ONGOING3' && <Text>
+                    <Text  style={{color:'#AAFF00'}}>
+                        {TimeFormatter.formateTimeNow((checkData as any).current_record.fast.real_start_time)}
+                    </Text>
+                </Text>
+            }
         </View>
     )
 }

+ 147 - 19
src/features/trackTimeDuration/components/Console.tsx

@@ -1,7 +1,8 @@
 import { recordCheck } from "@/services/trackTimeDuration";
-import { View, Text } from "@tarojs/components";
+import { View, Text, PickerView, PickerViewColumn, Picker } from "@tarojs/components";
 import trackTimeService, { machine } from "@/store/trackTimeMachine"
 import { useEffect, useState } from "react";
+import { TimeFormatter } from "@/utils/time_format";
 
 export default function Component() {
     // const [current,send] = useService(machine)
@@ -10,6 +11,32 @@ export default function Component() {
     // debugger
     const [key, setKey] = useState('');
     const [value, setValue] = useState('');
+    const [counter, setCounter] = useState(0)
+    const [timerId, setTimerId] = useState(null)
+
+
+    const hours: number[] = [];
+
+    const [isFast, setIsFast] = useState(true);
+    const [fastValues, setFastValues] = useState<number[]>([15, 0]);
+    const [sleepValues, setSleepValues] = useState<number[]>([7, 0]);
+
+    const handlePickerChange = (e: any) => {
+        const values = e.detail.value;
+        // setSelectedValues(values);
+        isFast ? setFastValues(values) : setSleepValues(values);
+
+    };
+
+
+    for (let i = 1; i <= 23; i++) {
+        hours.push(i);
+    }
+
+    const minutes: number[] = [];
+    for (let i = 0; i <= 11; i++) {
+        minutes.push(i * 5);
+    }
 
     useEffect(() => {
         getStateDetail();
@@ -35,19 +62,50 @@ export default function Component() {
         });
     }, []);
 
+    useEffect(() => {
+        startTimer();
+        return () => {
+            // 在组件卸载时清除定时器
+            if (timerId) {
+                clearInterval(timerId);
+            }
+        };
+    }, [timerId]);
+
+    const startTimer = () => {
+        // 避免重复启动定时器
+        if (timerId) {
+            return;
+        }
+
+        const id = setInterval(() => {
+            setCounter((prevCounter) => prevCounter + 1);
+        }, 1000);
+
+        setTimerId(id as any);
+    };
+
     function getStateDetail() {
         var state = trackTimeService.getSnapshot().value
         if ((state as any).FAST_SLEEP) {
             setKey('FAST_SLEEP');
             setValue((state as any).FAST_SLEEP);
+            if ((state as any).FAST_SLEEP == 'WAIT_FOR_START') {
+                setIsFast(true);
+            }
+            else if ((state as any).FAST_SLEEP == 'ONGOING1') {
+                setIsFast(false);
+            }
         }
         if ((state as any).FAST) {
             setKey('FAST');
             setValue((state as any).FAST);
+            setIsFast(true);
         }
         if ((state as any).SLEEP) {
             setKey('SLEEP');
             setValue((state as any).SLEEP);
+            setIsFast(false);
         }
 
     }
@@ -56,10 +114,8 @@ export default function Component() {
         return obj instanceof Map;
     }
 
-    function startFast() {
-        
-        const start_time = new Date().getTime();
-        const duration = 8 * 3600 * 1000;
+    function startFast(start_time: number) {
+        const duration = hours[fastValues[0]] * 3600 * 1000 + minutes[fastValues[1]] * 5 * 60 * 1000//8 * 3600 * 1000;
         const extra = {
             set_time: start_time - 20 * 1000,
             confirm_time: start_time + 50 * 1000,
@@ -75,9 +131,7 @@ export default function Component() {
         });
         // dispatch(startFast());
     }
-    function startSleep() {
-        
-        const start_time = new Date().getTime();
+    function startSleep(start_time: number) {
         const duration = 8 * 3600 * 1000;
         const extra = {
             set_time: start_time - 20 * 1000,
@@ -95,7 +149,7 @@ export default function Component() {
         // dispatch(startSleep());
     }
     function endSleep() {
-        
+
         const start_time = new Date().getTime();
         // const duration = 8 * 3600 * 1000;
         const extra = {
@@ -112,7 +166,7 @@ export default function Component() {
         });
     }
     function endFast() {
-        
+
         const start_time = new Date().getTime();
         // const duration = 8 * 3600 * 1000;
         const extra = {
@@ -131,23 +185,46 @@ export default function Component() {
         });
     }
 
+    function minTime() {
+        if (value == 'WAIT_FOR_START') {
+            return '00:00'
+        }
+        var time = new Date((machine.context.checkData as any).current_record.fast.real_start_time);
+        const formatter = new Intl.DateTimeFormat('en-US', {
+            hour: '2-digit',
+            minute: '2-digit',
+        });
+
+        return formatter.format(time);
+    }
+
+    function currentTime() {
+        var time = new Date();
+        const formatter = new Intl.DateTimeFormat('en-US', {
+            hour: '2-digit',
+            minute: '2-digit',
+        });
+
+        return formatter.format(time);
+    }
+
     function mixedBtns() {
         return <View>
             {
-                (value == 'WAIT_FOR_START' || value == 'DONE') && <Text onClick={startFast}>Start Fast</Text>
+                (value == 'WAIT_FOR_START' || value == 'DONE') &&
+                <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}><Text style={{ color: '#AAFF00' }}>Start Fast</Text></Picker>
             }
             {
                 (value == 'ONGOING'/* ||value == 'ONGOING1' || value == 'ONGOING2'*/ || value == 'ONGOING3') && <Text onClick={endFast}>End Fast</Text>
             }
             {
-                value == 'ONGOING1' && <Text onClick={startSleep}>Start Sleep</Text>
+                value == 'ONGOING1' && <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}>
+                    <Text style={{ color: '#00ffff' }}>Start Sleep</Text>
+                </Picker>
             }
             {
                 value == 'ONGOING2' && <Text onClick={endSleep}>End Sleep</Text>
             }
-            {/* <Text onClick={startSleep}>Start Sleep</Text>
-        <Text onClick={endSleep}>End Sleep</Text>
-        <Text onClick={endFast}>End Fast</Text> */}
         </View>
     }
 
@@ -156,7 +233,7 @@ export default function Component() {
             {
                 value == 'ONGOING' ?
                     <Text onClick={endFast}>End Fast</Text> :
-                    <Text onClick={startFast}>Start Fast</Text>
+                    <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}><Text style={{ color: '#AAFF00' }}>Start Fast</Text></Picker>
             }
         </View>
     }
@@ -166,13 +243,64 @@ export default function Component() {
             {
                 value == 'ONGOING' ?
                     <Text onClick={endSleep}>End Sleep</Text> :
-                    <Text onClick={startSleep}>Start Sleep</Text>
+                    <Picker mode="time" onChange={timePickerChange} value={currentTime()}  end={currentTime()}>
+                        <Text style={{ color: '#00ffff' }}>Start Sleep</Text></Picker>
             }
         </View>
     }
+
+    function timePickerChange(e) {
+        var time = e.detail.value;
+        var hour = time.split(':')[0];
+        var minute = time.split(':')[1];
+        var dt = new Date();
+        dt.setHours(hour);
+        dt.setMinutes(minute);
+        if (isFast) {
+            startFast(dt.getTime())
+        }
+        else {
+            startSleep(dt.getTime())
+        }
+
+    }
     return (
-        <View>
-            <Text>Console Component</Text>
+        <View style={{ display: 'flex', flexDirection: 'column', width: '100%', alignItems: 'center' }}>
+            {
+                (value == 'ONGOING1' || value == 'WAIT_FOR_START') && 
+                <PickerView
+
+                    value={isFast ? fastValues : sleepValues}
+                    onChange={handlePickerChange}
+                    indicatorStyle='height: 50px;' style='width: 100%; height: 100px;'>
+                    <PickerViewColumn>
+                        {hours.map(item => {
+                            return (
+                                <View style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>{item}小时</View>
+                            );
+                        })}
+                    </PickerViewColumn>
+                    <PickerViewColumn>
+                        {minutes.map(item => {
+                            return (
+                                <View style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>{item}分钟</View>
+                            );
+                        })}
+                    </PickerViewColumn>
+                </PickerView>
+            }
+            {
+                machine.context.checkData && value == 'ONGOING2' && <View>
+                    <Text>{TimeFormatter.formateTimeNow((machine.context.checkData as any).current_record.sleep.target_end_time)}</Text>
+                </View>
+            }
+
+            {
+                machine.context.checkData && value == 'ONGOING3' && <View>
+                    <Text>{TimeFormatter.formateTimeNow((machine.context.checkData as any).current_record.fast.target_end_time)}</Text>
+                </View>
+            }
+
             <View>
                 {
                     key === 'FAST_SLEEP' && mixedBtns()

+ 0 - 1
src/features/trackTimeDuration/components/More.tsx

@@ -95,7 +95,6 @@ export default function Component() {
 
     function checkActionSheetData() {
         var state = trackTimeService.getSnapshot().value
-        debugger
         if ((state as any).FAST_SLEEP === 'WAIT_FOR_START' ||
             (state as any).FAST === 'WAIT_FOR_START' ||
             (state as any).SLEEP === 'WAIT_FOR_START') {

+ 46 - 0
src/features/trackTimeDuration/components/TitleBar.scss

@@ -0,0 +1,46 @@
+.detail{
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 10px;
+    color: #fff;
+    background-color: #000;
+}
+
+.title{
+    color: #fff;
+    font-size: 48px;
+    line-height: 48px;
+    margin-bottom: 8px;
+}
+
+.time{
+    color: #fff;
+    opacity: 0.4;
+    font-size: 32px;
+    line-height: 48px;
+}
+
+.detail_item{
+    display: flex;
+    flex: 1;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+}
+
+.title_bg{
+    padding-top: 9px;
+    position: relative;
+}
+
+.badge{
+    position: absolute;
+    right: -9px;
+    top: 0px;
+    width: 18px;
+    height: 18px;
+    border-radius: 50%;
+    background-color: #AAFF00;
+}

+ 150 - 0
src/features/trackTimeDuration/components/TitleBar.tsx

@@ -0,0 +1,150 @@
+import { View, Text } from "@tarojs/components";
+import './TitleBar.scss'
+import { useEffect, useState } from "react";
+import trackTimeService, { machine } from "@/store/trackTimeMachine";
+import { TimeFormatter } from "@/utils/time_format";
+import Taro from "@tarojs/taro";
+import { recordCheck } from "@/services/trackTimeDuration";
+import { useTranslation } from "react-i18next";
+
+export default function Component() {
+    const { t } = useTranslation()
+    const [checkData, setCheckData] = useState(null)
+    useEffect(() => {
+        if (machine.context.checkData) {
+            setCheckData(machine.context.checkData as any);
+        }
+    }, [machine.context.checkData]);
+
+    useEffect(() => {
+        trackTimeService.onTransition(_ => {
+            if (machine.context.checkData) {
+                setCheckData(machine.context.checkData as any);
+            }
+        });
+    }, []);
+
+    function more() {
+        var state = trackTimeService.getSnapshot().value
+        if ((state as any).FAST_SLEEP === 'WAIT_FOR_START' ||
+            (state as any).FAST === 'WAIT_FOR_START' ||
+            (state as any).SLEEP === 'WAIT_FOR_START') {
+            waitActionSheet()
+        }
+        else if ((state as any).FAST_SLEEP === 'ONGOING1' ||
+            (state as any).FAST_SLEEP === 'ONGOING2') {
+            endFastActionSheet()
+        }
+        else if ((state as any).FAST_SLEEP === 'ONGOING3') {
+            Taro.showToast({
+                title: '暂无更多操作',
+                icon: 'none',
+                duration: 2000
+            })
+        }
+    }
+
+    function waitActionSheet() {
+        Taro.showActionSheet({
+            itemList: [t('feature.track_time_duration.action_sheet.change_schedule'), t('feature.track_time_duration.action_sheet.switch_scenario')]
+        })
+            .then(res => {
+                console.log(res.tapIndex)
+                switch (res.tapIndex) {
+                    case 0:
+                        Taro.navigateTo({
+                            url: '/pages/SetSchedule'
+                        })
+                        break;
+                    case 1:
+                        Taro.navigateTo({
+                            url: '/pages/ChooseScenario'
+                        })
+                        break;
+                }
+            })
+            .catch(err => {
+                console.log(err.errMsg)
+            })
+    }
+
+    function endFastActionSheet() {
+        Taro.showActionSheet({
+            itemList: [t('feature.track_time_duration.action_sheet.end_fast')]
+        })
+            .then(res => {
+                console.log(res.tapIndex)
+                switch (res.tapIndex) {
+                    case 0:
+                        {
+
+                            const start_time = new Date().getTime();
+                            // const duration = 8 * 3600 * 1000;
+                            const extra = {
+                                set_time: start_time - 20 * 1000,
+                                confirm_time: start_time + 50 * 1000,
+                            }
+                            recordCheck({
+                                action: 'FAST_END',
+                                real_check_time: start_time,
+                                extra: extra
+                            }).then(res => {
+                                trackTimeService.send({ type: 'END_FAST' });
+                                console.log(res);
+                                trackTimeService.send({ type: 'RESET' });
+
+                                trackTimeService.send({ type: global.scenario });
+                            });
+                        }
+                        break;
+                }
+            })
+            .catch(err => {
+                console.log(err.errMsg)
+            })
+    }
+
+    if (!checkData) {
+        return <View />
+    }
+    /*
+                    {
+                    (checkData as any).current_record.status == 'ONGOING3'?<Text>已完成<Text/>:<Text className="time">{TimeFormatter.calculateTimeDifference((checkData as any).current_record.sleep.target_start_time,
+                    (checkData as any).current_record.sleep.target_end_time, true)}</Text>
+                }*/
+    return <View className="detail" onClick={more}>
+        {
+            (checkData as any).scenaro != 'SLEEP' &&
+            <View className="detail_item">
+                <View className="title_bg">
+                    <Text className="title">断食</Text>
+                    {
+                        ((checkData as any).current_record.status == 'ONGOING' ||
+                            (checkData as any).current_record.status == 'ONGOING1' ||
+                            (checkData as any).current_record.status == 'ONGOING2' ||
+                            (checkData as any).current_record.status == 'ONGOING3') ? <View className="badge" /> : <View />
+                    }
+                </View>
+                <Text className="time">{TimeFormatter.calculateTimeDifference((checkData as any).current_record.fast.target_start_time,
+                    (checkData as any).current_record.fast.target_end_time, true)}</Text>
+            </View>
+        }
+        {
+            ((checkData as any).scenaro != 'FAST') &&
+            <View className="detail_item">
+                <View className="title_bg">
+                    <Text className="title">睡眠</Text>
+                    {
+                        ((checkData as any).current_record.status == 'ONGOING' ||
+                            (checkData as any).current_record.status == 'ONGOING2') ? <View className="badge" style={{ backgroundColor: '#00FFFF' }} /> : <View />
+                    }
+                </View>
+                {
+                    (checkData as any).current_record.status == 'ONGOING3' ? <Text className="time">已完成</Text> : <Text className="time">{TimeFormatter.calculateTimeDifference((checkData as any).current_record.sleep.target_start_time,
+                        (checkData as any).current_record.sleep.target_end_time, true)}</Text>
+                }
+
+            </View>
+        }
+    </View>
+}

+ 11 - 0
src/pages/Clock.scss

@@ -0,0 +1,11 @@
+.console_box{
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    margin: 20px;
+    padding-top: 40px;
+    padding-bottom: 40px;
+    color: #fff;
+    background-color: #1c1c1c;
+    border-radius: 40px;
+  }

+ 20 - 4
src/pages/clock.tsx

@@ -1,6 +1,7 @@
 import { Component, PropsWithChildren, useEffect } from 'react'
 import { View, Text, Button, Input } from '@tarojs/components'
 import './index/index.scss'
+import './Clock.scss'
 import Taro, { useDidShow, useReady, useRouter } from '@tarojs/taro'
 // import ComponentA from './component'
 import Rings from '@components/Rings';
@@ -14,11 +15,13 @@ import Clocks from '@/features/trackTimeDuration/components/Clock';
 import Console from '@/features/trackTimeDuration/components/Console';
 import More from '@/features/trackTimeDuration/components/More';
 import Schedule from '@/features/trackTimeDuration/components/Schedule';
+import TitleBar from '@/features/trackTimeDuration/components/TitleBar';
 import { getChecks, getClocks } from '@/services/trackTimeDuration';
 import { setScenario } from '@/store/scenario';
 
 import { setSpecifiedStatus, setSpecifiedState, machine } from '@/store/trackTimeMachine';
 import trackTimeService from '@/store/trackTimeMachine';
+import { setWXPubFollow } from '@/store/permission';
 // import TabBar from '../../components/Tabbar';
 
 export default function IndexPage() {
@@ -136,8 +139,14 @@ export default function IndexPage() {
   }
 
   function checkWXPubFollow() {
+    console.log('9527');
     wxPubFollow().then(res => {
-      console.log(res);
+      if ((res as any).wx_pub_followed == true) {
+        setTimeout(() => {
+          dispatch(setWXPubFollow(true));
+        }, 1000)
+        // dispatch(setWXPubFollow(true));
+      }
     })
   }
 
@@ -192,7 +201,8 @@ export default function IndexPage() {
 
   }
   return (
-    <View style={{ backgroundColor: '#fff', flex: 1, flexDirection: 'column', display: 'flex' }}>
+    <View style={{ flex: 1, flexDirection: 'column', display: 'flex', backgroundColor: '#fff' }}>
+      <TitleBar />
       {
         permission.wxPubFollow == false ? <Text onClick={() => followWxPub()}>去关注公众号</Text> : <Text>已关注</Text>
       }
@@ -204,11 +214,17 @@ export default function IndexPage() {
       <Text className='login' onClick={() => login()}>sss</Text>
       {/* <TabBar /> */}
       <Clocks />
-      <Console />
+      <View className='console_box'>
+        <Console />
+      </View>
+
       <More />
       <Schedule />
 
-      <Schedule type='latest' />
+      {
+        machine.context.checkData && (machine.context.checkData as any).latest_record && <Schedule type='latest' />
+      }
+
 
     </View>
   )

+ 0 - 1
src/pages/index/index.scss

@@ -12,4 +12,3 @@
 .login{
   color: red;
 }
-  

+ 0 - 136
src/store/trackTimeMachine1.tsx

@@ -1,136 +0,0 @@
-import { createMachine, interpret } from "xstate";
-import { getPlans, setPlan, getChecks, recordCheck } from '@/services/trackTimeDuration'
-
-export const machine = createMachine(
-  {
-    id: "trackTime",
-    initial: "choose",
-    context: {
-      hi: 'hi'
-    },
-    states: {
-      choose: {
-        on: {
-          SLEEPING: {
-            target: "sleeping",
-          },
-          MIXED: {
-            target: "mixed",
-          },
-          FAST: {
-            target: "fasting",
-          },
-        },
-      },
-      sleeping: {
-        initial: "WAIT_TO_START",
-        states: {
-          WAIT_TO_START: {
-            on: {
-              start: {
-                target: "ON_GOING",
-              },
-            },
-          },
-          ON_GOING: {
-            on: {
-              end: {
-                target: "DONE",
-              },
-            },
-          },
-          DONE: {},
-        },
-      },
-      mixed: {
-        initial: "WAIT_TO_START",
-        states: {
-          WAIT_TO_START: {
-            on: {
-              start_fast: {
-                target: "ON_GOING1",
-              },
-            },
-          },
-          ON_GOING1: {
-            on: {
-              "start_sleep": {
-                target: "ON_GOING2",
-              },
-              "end fast(skip_start_sleep)": {
-                target: "DONE",
-              },
-            },
-          },
-          ON_GOING2: {
-            on: {
-              "end fast(skip_end_sleep)": {
-                target: "DONE",
-              },
-              "end_sleep": {
-                target: "ON_GOING3",
-              },
-            },
-          },
-          DONE: {},
-          ON_GOING3: {
-            on: {
-              end_fast: {
-                target: "DONE",
-              },
-            },
-          },
-        },
-      },
-      fasting: {
-        initial: "WAIT_TO_START",
-        states: {
-          WAIT_TO_START: {
-            on: {
-              start: {
-                target: "ON_GOING",
-              },
-            },
-          },
-          ON_GOING: {
-            on: {
-              end: {
-                target: "DONE",
-              },
-            },
-          },
-          DONE: {},
-        },
-      },
-    },
-    schema: {
-      events: {} as
-        | { type: "end" }
-        | { type: "FAST" }
-        | { type: "MIXED" }
-        | { type: "start" }
-        | { type: "SLEEPING" }
-        | { type: "end_fast" }
-        | { type: "end_sleep" }
-        | { type: "start_fast" }
-        | { type: "start_sleep" }
-        | { type: "end fast(skip_end_sleep)" }
-        | { type: "end fast(skip_start_sleep)" }
-        | { type: "GET_STATUS"}
-    },
-    predictableActionArguments: true,
-    preserveActionOrder: true,
-  },
-  {
-    actions: {},
-    services: {
-      getPlans, setPlan, getChecks, recordCheck
-    },
-    guards: {},
-    delays: {},
-  },
-);
-
-const service = interpret(machine).start();
-
-export default service;

+ 0 - 143
src/store/trackTimeMachine2.tsx

@@ -1,143 +0,0 @@
-import { createMachine } from "xstate";
-
-export const machine = createMachine(
-  {
-    id: "trackTime",
-    initial: "choose",
-    states: {
-      choose: {
-        on: {
-          SLEEPING: {
-            target: "sleeping",
-          },
-          MIXED: {
-            target: "mixed",
-          },
-          FAST: {
-            target: "fasting",
-          },
-        },
-      },
-      sleeping: {
-        initial: "TO_START",
-        states: {
-          TO_START: {
-            on: {
-              start: {
-                target: "SLEEP_ON_GOING",
-              },
-            },
-          },
-          SLEEP_ON_GOING: {
-            on: {
-              abandon: {
-                target: "DONE",
-              },
-              end: {
-                target: "DONE",
-              },
-            },
-          },
-          DONE: {},
-        },
-      },
-      mixed: {
-        initial: "TO_START",
-        states: {
-          TO_START: {
-            on: {
-              start_fast: {
-                target: "IN_PROG1",
-              },
-            },
-          },
-          IN_PROG1: {
-            on: {
-              "abandon_fast": {
-                target: "DONE",
-              },
-              "start_sleep": {
-                target: "IN_PROG2",
-              },
-              "end fast(skip_start_sleep)": {
-                target: "DONE",
-              },
-            },
-          },
-          DONE: {},
-          IN_PROG2: {
-            on: {
-              "abandon_sleep": {
-                target: "DONE",
-              },
-              "end fast(skip_end_sleep)": {
-                target: "DONE",
-              },
-              "end_sleep": {
-                target: "IN_PROG3",
-              },
-            },
-          },
-          IN_PROG3: {
-            on: {
-              abandon_fast: {
-                target: "DONE",
-              },
-              end_fast: {
-                target: "DONE",
-              },
-            },
-          },
-        },
-      },
-      fasting: {
-        initial: "TO_START",
-        states: {
-          TO_START: {
-            on: {
-              start: {
-                target: "FAST_ON_GOING",
-              },
-            },
-          },
-          FAST_ON_GOING: {
-            on: {
-              end: {
-                target: "DONE",
-              },
-              abandon: {
-                target: "DONE",
-              },
-            },
-          },
-          DONE: {},
-        },
-      },
-    },
-    schema: {
-      events: {} as
-        | { type: "start" }
-        | { type: "abandon" }
-        | { type: "SLEEPING" }
-        | { type: "FAST" }
-        | { type: "MIXED" }
-        | { type: "end" }
-        | { type: "start_sleep" }
-        | { type: "end fast(skip_start_sleep)" }
-        | { type: "end fast(skip_end_sleep)" }
-        | { type: "end_sleep" }
-        | { type: "abandon_sleep" }
-        | { type: "abandon_fast" }
-        | { type: "start_fast" }
-        | { type: "end_fast" },
-    },
-    predictableActionArguments: true,
-    preserveActionOrder: true,
-  },
-  {
-    actions: {},
-    services: {},
-    guards: {},
-    delays: {},
-  },
-);

+ 16 - 1
src/utils/time_format.ts

@@ -52,7 +52,7 @@ export class TimeFormatter {
   }
 
   //计算时间间隔
-  static calculateTimeDifference(startTimestamp: number, endTimestamp: number): string {
+  static calculateTimeDifference(startTimestamp: number, endTimestamp: number,ingoreSeconds?:boolean): string {
     const diff = Math.abs(endTimestamp - startTimestamp);
     // 计算小时、分钟和秒数
     const hours = Math.floor(diff / (1000 * 60 * 60));
@@ -65,7 +65,22 @@ export class TimeFormatter {
     } else if (diff < 3600000) {
       return `${minutes}分${seconds}秒`;
     } else {
+      if (ingoreSeconds) return `${hours}小时${minutes}分`;
       return `${hours}小时${minutes}分${seconds}秒`;
     }
   }
+
+  //计算正计时
+  static formateTimeNow = (dt: number): string => {
+    const end = Date.now();
+    const time = end>dt?end-dt:dt-end;
+    const hours = Math.floor(time / 3600000);
+    const minutes = Math.floor((time % 3600000) / 60000);
+    const seconds = Math.floor((time % 60000) / 1000);
+    return `${TimeFormatter.padZero(hours)}:${TimeFormatter.padZero(minutes)}:${TimeFormatter.padZero(seconds)}`;
+  };
+
+  static padZero = (num: number): string => {
+    return num.toString().padStart(2, '0');
+  }; 
 }

Деякі файли не було показано, через те що забагато файлів було змінено