Leon 2 lat temu
rodzic
commit
7f367587bd

+ 21 - 1
config/dev.ts

@@ -4,6 +4,26 @@ module.exports = {
   },
   defineConstants: {
   },
-  mini: {},
+  mini: {
+    // webpackChain: (chain, webpack) => {
+    //   chain.merge({
+    //     plugin: {
+    //       install: {
+    //         plugin: require('terser-webpack-plugin'),
+    //         args: [
+    //           {
+    //             terserOptions: {
+    //               compress: true, // 默认使用terser压缩
+    //               // mangle: false,
+    //               keep_classnames: true, // 不改变class名称
+    //               keep_fnames: true, // 不改变函数名称
+    //             },
+    //           },
+    //         ],
+    //       },
+    //     },
+    //   })
+    // },
+  },
   h5: {}
 }

+ 55 - 0
dist/app.js

@@ -406,6 +406,61 @@ 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 = true; //action?true:false;
+      // 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":

Plik diff jest za duży
+ 0 - 0
dist/app.js.map


+ 149 - 68
dist/common.js

@@ -263,6 +263,140 @@ function Component(props) {
 
 /***/ }),
 
+/***/ "./src/components/TimePickers.tsx":
+/*!****************************************!*\
+  !*** ./src/components/TimePickers.tsx ***!
+  \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": function() { return /* binding */ Component; }
+/* harmony export */ });
+/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
+/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/container/remote/react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "webpack/container/remote/react/jsx-runtime");
+/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+
+
+function Component(props) {
+  var _props$time$split$map = props.time.split(':').map(function (x) {
+      return parseInt(x);
+    }),
+    _props$time$split$map2 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_props$time$split$map, 2),
+    hour = _props$time$split$map2[0],
+    minute = _props$time$split$map2[1];
+  var m = Math.round(minute / 5) * 5;
+  var v = [hour, m / 5];
+  var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(v),
+    _useState2 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2),
+    dt = _useState2[0],
+    setDt = _useState2[1];
+  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
+    var _props$time$split$map3 = props.time.split(':').map(function (x) {
+        return parseInt(x);
+      }),
+      _props$time$split$map4 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_props$time$split$map3, 2),
+      hour = _props$time$split$map4[0],
+      minute = _props$time$split$map4[1];
+    var m = Math.round(minute / 5) * 5;
+    var v = [hour, m / 5];
+    setDt(v);
+  }, [props.time]);
+  var hours = [];
+  for (var i = 0; i <= 23; i++) {
+    hours.push(i);
+  }
+  var minutes = [];
+  for (var _i = 0; _i <= 11; _i++) {
+    minutes.push(_i * 5);
+  }
+  function onPickerChange(e) {
+    var val = e.detail.value;
+    setDt(val);
+    var strHour = hours[val[0]] < 10 ? '0' + hours[val[0]] : hours[val[0]];
+    var strMinute = minutes[val[1]] < 10 ? '0' + minutes[val[1]] : minutes[val[1]];
+    console.log(strHour + ':' + strMinute);
+    props.change(strHour + ':' + strMinute);
+  }
+  if (props.isPickerView) {
+    return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.PickerView, {
+      value: dt,
+      onChange: onPickerChange,
+      indicatorStyle: "height: 50px;",
+      style: "width: 100%; height: 100px;",
+      children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.PickerViewColumn, {
+        children: hours.map(function (item) {
+          return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.View, {
+            style: {
+              display: 'flex',
+              alignItems: 'center',
+              justifyContent: 'center'
+            },
+            children: item
+          });
+        })
+      }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.PickerViewColumn, {
+        children: minutes.map(function (item) {
+          return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.View, {
+            style: {
+              display: 'flex',
+              alignItems: 'center',
+              justifyContent: 'center'
+            },
+            children: item
+          });
+        })
+      })]
+    });
+  }
+  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.Picker, {
+    mode: "multiSelector",
+    range: [hours, minutes],
+    onChange: onPickerChange,
+    value: dt,
+    children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.Text, {
+      children: props.content
+    })
+  });
+}
+
+/***/ }),
+
+/***/ "./src/services/common.tsx":
+/*!*********************************!*\
+  !*** ./src/services/common.tsx ***!
+  \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   staticResources: function() { return /* binding */ staticResources; }
+/* harmony export */ });
+/* harmony import */ var _store_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/store/common */ "./src/store/common.tsx");
+/* harmony import */ var _http_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./http/api */ "./src/services/http/api.js");
+/* harmony import */ var _http_request__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./http/request */ "./src/services/http/request.ts");
+
+
+
+var staticResources = function staticResources() {
+  return function (dispatch) {
+    (0,_http_request__WEBPACK_IMPORTED_MODULE_2__.request)({
+      url: _http_api__WEBPACK_IMPORTED_MODULE_1__.API_STATIC_RESOURCES,
+      method: 'GET',
+      data: {}
+    }).then(function (res) {
+      // resolve(res);
+      dispatch((0,_store_common__WEBPACK_IMPORTED_MODULE_0__.setResources)(res));
+    });
+  };
+};
+
+/***/ }),
+
 /***/ "./src/services/http/api.js":
 /*!**********************************!*\
   !*** ./src/services/http/api.js ***!
@@ -330,10 +464,12 @@ var API_WX_PUB_FOLLOWED = "".concat(baseUrl, "/api/fast/user/wx-pub-followed");
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
 /* harmony export */   request: function() { return /* binding */ request; }
 /* harmony export */ });
-/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js */ "./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js");
-/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js");
-/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tarojs/taro */ "webpack/container/remote/@tarojs/taro");
-/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tarojs_taro__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js */ "./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js");
+/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js");
+/* harmony import */ var _store_user__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/store/user */ "./src/store/user.tsx");
+/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tarojs/taro */ "webpack/container/remote/@tarojs/taro");
+/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tarojs_taro__WEBPACK_IMPORTED_MODULE_1__);
+
 
 
 
@@ -342,14 +478,14 @@ function getStorage(_x) {
   return _getStorage.apply(this, arguments);
 }
 function _getStorage() {
-  _getStorage = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/(0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee(key) {
+  _getStorage = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_2__["default"])( /*#__PURE__*/(0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_3__["default"])().mark(function _callee(key) {
     var res;
-    return (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee$(_context) {
+    return (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_3__["default"])().wrap(function _callee$(_context) {
       while (1) switch (_context.prev = _context.next) {
         case 0:
           _context.prev = 0;
           _context.next = 3;
-          return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().getStorage({
+          return _tarojs_taro__WEBPACK_IMPORTED_MODULE_1___default().getStorage({
             key: key
           });
         case 3:
@@ -433,9 +569,9 @@ function request(_x2) {
 //     }
 // };
 function _request() {
-  _request = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/(0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee2(param) {
+  _request = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_2__["default"])( /*#__PURE__*/(0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_3__["default"])().mark(function _callee2(param) {
     var url, method, data, header, token, split, timeZoneFormatted;
-    return (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee2$(_context2) {
+    return (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_regeneratorRuntime_js__WEBPACK_IMPORTED_MODULE_3__["default"])().wrap(function _callee2$(_context2) {
       while (1) switch (_context2.prev = _context2.next) {
         case 0:
           url = param.url, method = param.method, data = param.data;
@@ -457,7 +593,7 @@ function _request() {
           // header['Authorization'] = 'Bearer ' + wx.getStorageSync('token');
           // header['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQ5OWNlYzI0ZDFlMzE0Y2U1MjhlODM4MWMzYzk0MzgiLCJpc3MiOiJDT0RFUEFBUy5DT00iLCJuaWNrbmFtZSI6IueOi-a4nSIsInR5cCI6IkJlYXJlciIsInNlc3Npb25fc3RhdGUiOiIyN2RjNmU4ZDdjMWU1MTVmNDQwNzVjZTFlODk2ZmUzNCIsImV4cCI6MTcxNjY0Mzk5MSwiaWF0IjoxNjg1MDIxNTkxfQ.fmFj0OVNRzjLkdebSyGJyk8EScPJFpDiz0L25W35zoA'
           return _context2.abrupt("return", new Promise(function (resolve, reject) {
-            _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().request({
+            _tarojs_taro__WEBPACK_IMPORTED_MODULE_1___default().request({
               url: url,
               method: method,
               header: header,
@@ -471,7 +607,9 @@ function _request() {
                     resp = response.data;
                   }
                   resolve(resp);
-                } else if (statusCode == 401) {} else {
+                } else if (statusCode == 401) {
+                  __webpack_require__.g.dispatch((0,_store_user__WEBPACK_IMPORTED_MODULE_0__.logoutSuccess)());
+                } else {
                   reject(data);
                 }
                 // if (statusCode == 204){
@@ -801,63 +939,6 @@ 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":

Plik diff jest za duży
+ 0 - 0
dist/common.js.map


Plik diff jest za duży
+ 424 - 193
dist/pages/Clock.js


Plik diff jest za duży
+ 0 - 0
dist/pages/Clock.js.map


+ 1 - 0
dist/pages/Clock.wxss

@@ -359,6 +359,7 @@
 .title_bg {
   padding-top: 9rpx;
   position: relative;
+  width: 100rpx;
 }
 
 .badge {

+ 28 - 33
dist/pages/SetSchedule.js

@@ -41,19 +41,20 @@ function Page() {
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
 /* harmony export */   "default": function() { return /* binding */ Component; }
 /* harmony export */ });
-/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
+/* harmony import */ var _Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
 /* harmony import */ var _components_Buttons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/Buttons */ "./src/components/Buttons.tsx");
 /* harmony import */ var _services_trackTimeDuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/services/trackTimeDuration */ "./src/services/trackTimeDuration.tsx");
 /* harmony import */ var _store_scenario__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/scenario */ "./src/store/scenario.tsx");
-/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
+/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
 /* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @tarojs/taro */ "webpack/container/remote/@tarojs/taro");
 /* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tarojs_taro__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "webpack/container/remote/react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-redux */ "webpack/container/remote/react-redux");
-/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "webpack/container/remote/react/jsx-runtime");
-/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var _components_TimePickers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/TimePickers */ "./src/components/TimePickers.tsx");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "webpack/container/remote/react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-redux */ "webpack/container/remote/react-redux");
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "webpack/container/remote/react/jsx-runtime");
+/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);
 
 
 
@@ -67,8 +68,8 @@ function Page() {
 
 
 function Component() {
-  var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_5__.useDispatch)();
-  var scenario = (0,react_redux__WEBPACK_IMPORTED_MODULE_5__.useSelector)(function (state) {
+  var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_6__.useDispatch)();
+  var scenario = (0,react_redux__WEBPACK_IMPORTED_MODULE_6__.useSelector)(function (state) {
     return state.scenario;
   });
   var scheduleObj;
@@ -83,12 +84,12 @@ function Component() {
       scheduleObj = scenario.schedule.sleep;
     }
   }
-  var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(scheduleObj.start_time),
-    _useState2 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_7__["default"])(_useState, 2),
+  var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(scheduleObj.start_time),
+    _useState2 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_useState, 2),
     startTime = _useState2[0],
     setStartTime = _useState2[1];
-  var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(scheduleObj.end_time),
-    _useState4 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_7__["default"])(_useState3, 2),
+  var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(scheduleObj.end_time),
+    _useState4 = (0,_Users_Work_hola_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_useState3, 2),
     endTime = _useState4[0],
     setEndTime = _useState4[1];
   function start() {
@@ -147,29 +148,23 @@ function Component() {
     }
   }
   function onStartTimeChange(e) {
-    setStartTime(e.detail.value);
+    setStartTime(e);
   }
   function onEndTimeChange(e) {
-    setEndTime(e.detail.value);
+    setEndTime(e);
   }
-  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
-    children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
+  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
+    children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
       children: ["\u573A\u666F\u540D\u79F0", scenario.name]
-    }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Picker, {
-      mode: "time",
-      value: startTime,
-      onChange: onStartTimeChange,
-      children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
-        children: ["\u5F00\u59CB\u65F6\u95F4", startTime]
-      })
-    }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Picker, {
-      mode: "time",
-      value: endTime,
-      onChange: onEndTimeChange,
-      children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
-        children: ["\u7ED3\u675F\u65F6\u95F4", endTime]
-      })
-    }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_components_Buttons__WEBPACK_IMPORTED_MODULE_0__["default"], {
+    }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_TimePickers__WEBPACK_IMPORTED_MODULE_4__["default"], {
+      time: startTime,
+      content: '开始时间' + startTime,
+      change: onStartTimeChange
+    }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_TimePickers__WEBPACK_IMPORTED_MODULE_4__["default"], {
+      time: endTime,
+      content: '结束时间' + endTime,
+      change: onEndTimeChange
+    }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_Buttons__WEBPACK_IMPORTED_MODULE_0__["default"], {
       title: "Start",
       onClick: function onClick() {
         return start();

Plik diff jest za duży
+ 0 - 0
dist/pages/SetSchedule.js.map


+ 0 - 30
dist/pages/index/index.js

@@ -243,36 +243,6 @@ var inst = Page((0,_tarojs_runtime__WEBPACK_IMPORTED_MODULE_0__.createPageConfig
 /* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_ruleSet_1_rules_5_use_0_index_tsx__WEBPACK_IMPORTED_MODULE_1__["default"]);
 
 
-/***/ }),
-
-/***/ "./src/services/common.tsx":
-/*!*********************************!*\
-  !*** ./src/services/common.tsx ***!
-  \*********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   staticResources: function() { return /* binding */ staticResources; }
-/* harmony export */ });
-/* harmony import */ var _store_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/store/common */ "./src/store/common.tsx");
-/* harmony import */ var _http_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./http/api */ "./src/services/http/api.js");
-/* harmony import */ var _http_request__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./http/request */ "./src/services/http/request.ts");
-
-
-
-var staticResources = function staticResources() {
-  return function (dispatch) {
-    (0,_http_request__WEBPACK_IMPORTED_MODULE_2__.request)({
-      url: _http_api__WEBPACK_IMPORTED_MODULE_1__.API_STATIC_RESOURCES,
-      method: 'GET',
-      data: {}
-    }).then(function (res) {
-      // resolve(res);
-      dispatch((0,_store_common__WEBPACK_IMPORTED_MODULE_0__.setResources)(res));
-    });
-  };
-};
-
 /***/ })
 
 },

Plik diff jest za duży
+ 0 - 0
dist/pages/index/index.js.map


+ 6 - 6
dist/prebundle/remoteEntry.js

@@ -30,12 +30,12 @@ var moduleMap = {
 	"./xstate": 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_xstate_js")]).then(function() { return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/xstate.js */ "./node_modules/.taro/weapp/prebundle/xstate.js")); }; });
 	},
-	"./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")); }; });
 	},
+	"./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")); }; });
+	},
 	"./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")); }; });
 	},
@@ -101,12 +101,12 @@ var taroModuleMap = {
 	"./xstate": function() {
 		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/xstate.js */ "./node_modules/.taro/weapp/prebundle/xstate.js")); };
 	},
-	"./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")); };
 	},
+	"./i18next": function() {
+		return function() { return (__webpack_require__(/*! ./node_modules/.taro/weapp/prebundle/i18next.js */ "./node_modules/.taro/weapp/prebundle/i18next.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")); };
 	},

+ 68 - 0
src/components/TimePickers.tsx

@@ -0,0 +1,68 @@
+import { Picker, Text, PickerView, PickerViewColumn, View } from "@tarojs/components";
+
+import { useEffect, useState } from "react";
+
+export default function Component(props: { time: string, content: string, change: Function, isPickerView?: boolean }) {
+    var [hour, minute] = props.time.split(':').map(x => parseInt(x))
+    const m = Math.round(minute / 5) * 5;
+    const v = [hour, m / 5];
+
+    const [dt, setDt] = useState(v)
+
+    useEffect(() => {
+        var [hour, minute] = props.time.split(':').map(x => parseInt(x))
+        const m = Math.round(minute / 5) * 5;
+        const v = [hour, m / 5];
+        setDt(v)
+    }, [props.time])
+
+
+    const hours: number[] = [];
+
+
+    for (let i = 0; i <= 23; i++) {
+        hours.push(i);
+    }
+
+    const minutes: number[] = [];
+    for (let i = 0; i <= 11; i++) {
+        minutes.push(i * 5);
+    }
+
+    function onPickerChange(e) {
+
+        const val = e.detail.value
+        setDt(val)
+        var strHour = hours[val[0]] < 10 ? '0' + hours[val[0]] : hours[val[0]]
+        var strMinute = minutes[val[1]] < 10 ? '0' + minutes[val[1]] : minutes[val[1]]
+        console.log(strHour + ':' + strMinute)
+        props.change(strHour + ':' + strMinute)
+    }
+
+    if (props.isPickerView) {
+        return <PickerView
+            value={dt}
+            onChange={onPickerChange}
+            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>
+    }
+
+
+    return <Picker mode="multiSelector" range={[hours, minutes]} onChange={onPickerChange} value={dt}>
+        <Text>{props.content}</Text>
+    </Picker>
+}

+ 15 - 11
src/features/trackTimeDuration/components/Clock.tsx

@@ -39,7 +39,6 @@ export default function Component() {
         if (timerId) {
             return;
         }
-
         const id = setInterval(() => {
             setCounter((prevCounter) => prevCounter + 1);
         }, 1000);
@@ -55,45 +54,50 @@ export default function Component() {
     };
 
     if (!checkData)
-        return <View>
+        return <View style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', width: '100%', marginTop: 20 }}>
             <Rings radius={50} />
-            <Text style={{ opacity: 0 }}>{counter}</Text>
+            {/* <Text style={{ color: '#AAFF00' }}>00:00:00</Text> */}
+            {/* <View style={{ position: 'absolute' }}> */}
+                <Text style={{ opacity: 0 }}>{counter}</Text>
+            {/* </View> */}
+
         </View>
     return (
-        <View>
+        <View style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', width: '100%', marginTop: 20 }}>
             <Rings radius={50} />
             {
-                (checkData as any).current_record.status == 'WAIT_FOR_START' && <Text style={{color:'#AAFF00'}}>00:00:00</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'}}>
+                (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'}}>
+                (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'}}>
+                (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'}}>
+                    <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'}}>
+                    <Text style={{ color: '#AAFF00' }}>
                         {TimeFormatter.formateTimeNow((checkData as any).current_record.fast.real_start_time)}
                     </Text>
                 </Text>
             }
+            {/* <Text style={{ opacity: 1 }}>{counter}</Text> */}
         </View>
     )
 }

+ 174 - 61
src/features/trackTimeDuration/components/Console.tsx

@@ -3,6 +3,9 @@ import { View, Text, PickerView, PickerViewColumn, Picker } from "@tarojs/compon
 import trackTimeService, { machine } from "@/store/trackTimeMachine"
 import { useEffect, useState } from "react";
 import { TimeFormatter } from "@/utils/time_format";
+import TimePickers from '@/components/TimePickers'
+import { useSelector } from "react-redux";
+import Taro from "@tarojs/taro";
 
 export default function Component() {
     // const [current,send] = useService(machine)
@@ -13,30 +16,17 @@ export default function Component() {
     const [value, setValue] = useState('');
     const [counter, setCounter] = useState(0)
     const [timerId, setTimerId] = useState(null)
-
-
-    const hours: number[] = [];
+    const user = useSelector((state: any) => state.user);
 
     const [isFast, setIsFast] = useState(true);
-    const [fastValues, setFastValues] = useState<number[]>([15, 0]);
-    const [sleepValues, setSleepValues] = useState<number[]>([7, 0]);
+    const [fastValues, setFastValues] = useState<number[]>([0, 0]);
+    const [sleepValues, setSleepValues] = useState<number[]>([0, 0]);
+    const [fastStr,setFastStr] = useState('00:00');
+    const [sleepStr,setSleepStr] = useState('00:00');
 
-    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();
@@ -108,6 +98,25 @@ export default function Component() {
             setIsFast(false);
         }
 
+        var checkData = machine.context.checkData;
+        if (checkData){
+            var fastTime = TimeFormatter.formateHourMinute((checkData as any).current_record.fast.target_start_time,
+            (checkData as any).current_record.fast.target_end_time);
+            var sleepTime = TimeFormatter.formateHourMinute((checkData as any).current_record.sleep.target_start_time,
+            (checkData as any).current_record.sleep.target_end_time);
+
+            setFastValues(fastTime.split(':').map(x => parseInt(x)));
+            setSleepValues(sleepTime.split(':').map(x => parseInt(x)));
+            setFastStr(fastTime);
+            setSleepStr(sleepTime);
+            console.log(fastTime);
+            console.log(sleepTime)
+            console.log(fastValues)
+            console.log(sleepValues)
+            console.log('--------------')
+        }
+        
+
     }
 
     function isMap(obj: any): obj is Map<any, any> {
@@ -115,7 +124,7 @@ export default function Component() {
     }
 
     function startFast(start_time: number) {
-        const duration = hours[fastValues[0]] * 3600 * 1000 + minutes[fastValues[1]] * 5 * 60 * 1000//8 * 3600 * 1000;
+        const duration = fastValues[0] * 3600 * 1000 + fastValues[1] * 5 * 60 * 1000//8 * 3600 * 1000;
         const extra = {
             set_time: start_time - 20 * 1000,
             confirm_time: start_time + 50 * 1000,
@@ -132,7 +141,7 @@ export default function Component() {
         // dispatch(startFast());
     }
     function startSleep(start_time: number) {
-        const duration = 8 * 3600 * 1000;
+        const duration = sleepValues[0] * 3600 * 1000 + sleepValues[1] * 5 * 60 * 1000
         const extra = {
             set_time: start_time - 20 * 1000,
             confirm_time: start_time + 50 * 1000,
@@ -148,9 +157,7 @@ export default function Component() {
         });
         // dispatch(startSleep());
     }
-    function endSleep() {
-
-        const start_time = new Date().getTime();
+    function endSleep(start_time: number) {
         // const duration = 8 * 3600 * 1000;
         const extra = {
             set_time: start_time - 20 * 1000,
@@ -165,10 +172,7 @@ export default function Component() {
             trackTimeService.send({ type: 'END_SLEEP' });
         });
     }
-    function endFast() {
-
-        const start_time = new Date().getTime();
-        // const duration = 8 * 3600 * 1000;
+    function endFast(start_time: number) {
         const extra = {
             set_time: start_time - 20 * 1000,
             confirm_time: start_time + 50 * 1000,
@@ -186,7 +190,7 @@ export default function Component() {
     }
 
     function minTime() {
-        if (value == 'WAIT_FOR_START') {
+        if (value == 'WAIT_FOR_START' || !(machine.context.checkData as any).current_record.fast.real_start_time) {
             return '00:00'
         }
         var time = new Date((machine.context.checkData as any).current_record.fast.real_start_time);
@@ -198,6 +202,36 @@ export default function Component() {
         return formatter.format(time);
     }
 
+    function sleepEndMinTime(){
+        if (!(machine.context.checkData as any).current_record.sleep.real_start_time){
+            return '00:00'
+        }
+        var time = new Date((machine.context.checkData as any).current_record.sleep.real_start_time);
+        
+        const formatter = new Intl.DateTimeFormat('en-US', {
+            hour: '2-digit',
+            minute: '2-digit',
+        });
+        debugger
+        return formatter.format(time);
+    }
+
+    function fastEndMinTime(){
+        if (value == 'ONGOING'||!(machine.context.checkData as any).current_record.sleep.real_end_time){
+            return '00:00'
+        }
+        var time = new Date((machine.context.checkData as any).current_record.sleep.real_end_time);
+        if (!time){
+            return '00:00'
+        }
+        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', {
@@ -215,15 +249,20 @@ export default function Component() {
                 <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 == 'ONGOING'/* ||value == 'ONGOING1' || value == 'ONGOING2'*/ || value == 'ONGOING3') &&
+                <Picker mode="time" onChange={timePickerChange} value={currentTime()} start={fastEndMinTime()} end={currentTime()}>
+                    <Text>End Fast</Text>
+                </Picker>
             }
             {
-                value == 'ONGOING1' && <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}>
+                value == 'ONGOING1' && <Picker mode="time" onChange={timePickerChange} value={currentTime()} start={minTime()} end={currentTime()}>
                     <Text style={{ color: '#00ffff' }}>Start Sleep</Text>
                 </Picker>
             }
             {
-                value == 'ONGOING2' && <Text onClick={endSleep}>End Sleep</Text>
+                value == 'ONGOING2' && <Picker mode="time" onChange={timePickerChange} value={currentTime()} start={sleepEndMinTime()} end={currentTime()}>
+                    <Text>End Sleep</Text>
+                </Picker>
             }
         </View>
     }
@@ -232,8 +271,12 @@ export default function Component() {
         return <View>
             {
                 value == 'ONGOING' ?
-                    <Text onClick={endFast}>End Fast</Text> :
-                    <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}><Text style={{ color: '#AAFF00' }}>Start Fast</Text></Picker>
+                    <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}>
+                        <Text>End Fast</Text>
+                    </Picker> :
+                    <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}>
+                        <Text style={{ color: '#AAFF00' }}>Start Fast</Text>
+                    </Picker>
             }
         </View>
     }
@@ -242,8 +285,10 @@ export default function Component() {
         return <View>
             {
                 value == 'ONGOING' ?
-                    <Text onClick={endSleep}>End Sleep</Text> :
-                    <Picker mode="time" onChange={timePickerChange} value={currentTime()}  end={currentTime()}>
+                    <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}>
+                        <Text >End Sleep</Text>
+                    </Picker> :
+                    <Picker mode="time" onChange={timePickerChange} value={currentTime()} end={currentTime()}>
                         <Text style={{ color: '#00ffff' }}>Start Sleep</Text></Picker>
             }
         </View>
@@ -256,48 +301,115 @@ export default function Component() {
         var dt = new Date();
         dt.setHours(hour);
         dt.setMinutes(minute);
+        if (value == 'ONGOING2') {
+            endSleep(dt.getTime());
+            return;
+        }
+        else if (value == 'ONGOING3') {
+            endFast(dt.getTime());
+            return;
+        }
         if (isFast) {
-            startFast(dt.getTime())
+            if (value == 'ONGOING') {
+                endFast(dt.getTime());
+            }
+            else {
+                startFast(dt.getTime())
+            }
+
         }
         else {
-            startSleep(dt.getTime())
+            if (value == 'ONGOING') {
+                endSleep(dt.getTime());
+            }
+            else {
+                startSleep(dt.getTime())
+            }
+
         }
 
     }
+
+    const handlePickerChange = (e: string) => {
+        var [hour, minute] = e.split(':').map(x => parseInt(x))
+        isFast ? setFastValues([hour, minute]) : setSleepValues([hour, minute]);
+        debugger
+    };
+
+    function login(){
+        Taro.navigateTo({
+            url: '/pages/ChooseAuth'
+          })
+    }
+
+    if (!user.isLogin) {
+        return <View style={{ display: 'flex', flexDirection: 'column', width: '100%', alignItems: 'center' }}>
+            <TimePickers time={isFast ? fastStr : sleepStr} content="" change={handlePickerChange} isPickerView={true}/>
+            {/* <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> */}
+            <Text style={{ color: '#AAFF00' }} onClick={login}>Start Fast</Text>
+        </View>
+    }
     return (
         <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>
+                value == 'ONGOING' && <View>
+                    <Text>{(machine.context.checkData as any).current_record.scenario=='FAST'?
+                    TimeFormatter.countdown((machine.context.checkData as any).current_record.fast.target_end_time):
+                    TimeFormatter.countdown((machine.context.checkData as any).current_record.sleep.target_end_time)}</Text>
+                </View>
+            }
+            {
+                (value == 'ONGOING1' || value == 'WAIT_FOR_START') &&
+                <TimePickers time={isFast ? fastStr : sleepStr} content="" change={handlePickerChange} isPickerView={true}/>
+                // <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>
+                    <Text>{TimeFormatter.countdown((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>
+                    <Text>{TimeFormatter.countdown((machine.context.checkData as any).current_record.fast.target_end_time)}</Text>
                 </View>
             }
 
@@ -312,6 +424,7 @@ export default function Component() {
                     key === 'SLEEP' && sleepBtns()
                 }
             </View>
+            {/* <TimePickers time="00:10"/> */}
         </View>
     )
 }

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

@@ -9,6 +9,7 @@ import { recordCheck } from "@/services/trackTimeDuration";
 export default function Component() {
     const { t } = useTranslation()
     const scenario = useSelector((state: any) => state.scenario);
+    const user = useSelector((state: any) => state.user);
 
     useEffect(() => {
         var value = trackTimeService.getSnapshot().value
@@ -20,6 +21,12 @@ export default function Component() {
         });
     }, []);
 
+    function login(){
+        Taro.navigateTo({
+            url: '/pages/ChooseAuth'
+          })
+    }
+
     function waitActionSheet() {
         Taro.showActionSheet({
             itemList: [t('feature.track_time_duration.action_sheet.change_schedule'), t('feature.track_time_duration.action_sheet.switch_scenario')]
@@ -94,6 +101,9 @@ export default function Component() {
     }
 
     function checkActionSheetData() {
+        if (!user.isLogin){
+            return login()
+        }
         var state = trackTimeService.getSnapshot().value
         if ((state as any).FAST_SLEEP === 'WAIT_FOR_START' ||
             (state as any).FAST === 'WAIT_FOR_START' ||
@@ -114,7 +124,7 @@ export default function Component() {
     }
 
     return (
-        <View>
+        <View style={{width:'100%',marginTop:20,marginBottom:20,display:'flex',alignItems:'center',justifyContent:'center'}}>
             <Text onClick={checkActionSheetData}>More Component</Text>
         </View>
     )

+ 2 - 3
src/features/trackTimeDuration/components/Schedule.tsx

@@ -13,7 +13,7 @@ export default function Component(props: { type?: string }) {
     const [key, setKey] = useState('');
     const [value, setValue] = useState('');
     const [isOpen, setIsOpen] = useState(false);
-    const [isLatest, setIsLatest] = useState(false);
+    const [isLatest, setIsLatest] = useState(props.type=='latest');
 
     const [timerId, setTimerId] = useState(null)
     const [counter, setCounter] = useState(0)
@@ -107,7 +107,6 @@ export default function Component(props: { type?: string }) {
     }
 
     function getStepATime(obj) {
-        // if (obj.status == 'WAIT_FOR_START') return TimeFormatter.calculateTimeDifference(obj.sleep.)
         if (obj.status == 'COMPLETED' && obj.sleep.status == 'NOT_STARTED') {
             return '未知'
         }
@@ -138,7 +137,7 @@ export default function Component(props: { type?: string }) {
     function layoutContent() {
         //当前断食阶段
         var obj = isLatest ? (checkData as any).latest_record : (checkData as any).current_record
-        return <View style={{ flexDirection: 'column', display: 'flex' }}>
+        return <View style={{ flexDirection: 'column', display: 'flex',color:'#000' }}>
             {
                 obj.status == 'WAIT_FOR_START' ? <Text>断食阶段目标</Text> :
                     obj.status == 'COMPLETED' ? <Text>断食阶段</Text> :

+ 9 - 18
src/features/trackTimeDuration/components/SetSchedule.tsx

@@ -4,6 +4,7 @@ import { setScenario, setStep } from "@/store/scenario";
 import { View, Text } from "@tarojs/components";
 import { Picker } from '@tarojs/components'
 import Taro from "@tarojs/taro";
+import TimePickers from "@/components/TimePickers";
 // import { AtList, AtListItem } from 'taro-ui'
 import { useState } from "react";
 import { useDispatch, useSelector } from "react-redux";
@@ -60,7 +61,7 @@ export default function Component() {
         dispatch(setStep('sleep'))
         dispatch(setScenario(obj))
         Taro.navigateTo({
-          url:'/pages/SetSchedule'
+          url: '/pages/SetSchedule'
         })
       }
       else {
@@ -70,7 +71,7 @@ export default function Component() {
             fast: {
               start_time: scenario.schedule.fast.start_time,
               end_time: scenario.schedule.fast.end_time,
-            },sleep: {
+            }, sleep: {
               start_time: startTime,
               end_time: endTime,
             }
@@ -83,29 +84,19 @@ export default function Component() {
     }
   }
 
-  function onStartTimeChange(e: any) {
-    setStartTime(e.detail.value)
+  function onStartTimeChange(e: string) {
+    setStartTime(e)
   }
 
-  function onEndTimeChange(e: any) {
-    setEndTime(e.detail.value)
+  function onEndTimeChange(e: string) {
+    setEndTime(e)
   }
 
   return <View >
     <Text>场景名称{scenario.name}</Text>
-    <Picker mode='time' value={startTime} onChange={onStartTimeChange}>
-      <Text>开始时间{startTime}</Text>
-      {/* <AtList>
-        <AtListItem title='请选择时间' extraText={timeSel} />
-      </AtList> */}
-    </Picker>
+    <TimePickers time={startTime} content={'开始时间' + startTime} change={onStartTimeChange} />
+    <TimePickers time={endTime} content={'结束时间' + endTime} change={onEndTimeChange} />
 
-    <Picker mode='time' value={endTime} onChange={onEndTimeChange}>
-      <Text>结束时间{endTime}</Text>
-      {/* <AtList>
-        <AtListItem title='请选择时间' extraText={timeSel} />
-      </AtList> */}
-    </Picker>
     <Buttons title="Start" onClick={() => start()}></Buttons>
   </View>;
 }

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

@@ -33,6 +33,7 @@
 .title_bg{
     padding-top: 9px;
     position: relative;
+    width: 100px;
 }
 
 .badge{

+ 21 - 7
src/features/trackTimeDuration/components/TitleBar.tsx

@@ -6,10 +6,12 @@ import { TimeFormatter } from "@/utils/time_format";
 import Taro from "@tarojs/taro";
 import { recordCheck } from "@/services/trackTimeDuration";
 import { useTranslation } from "react-i18next";
+import { useSelector } from "react-redux";
 
 export default function Component() {
     const { t } = useTranslation()
     const [checkData, setCheckData] = useState(null)
+    const user = useSelector((state: any) => state.user);
     useEffect(() => {
         if (machine.context.checkData) {
             setCheckData(machine.context.checkData as any);
@@ -25,6 +27,12 @@ export default function Component() {
     }, []);
 
     function more() {
+        if (user.isLogin == false) {
+            Taro.navigateTo({
+                url: '/pages/ChooseAuth'
+            })
+            return
+        }
         var state = trackTimeService.getSnapshot().value
         if ((state as any).FAST_SLEEP === 'WAIT_FOR_START' ||
             (state as any).FAST === 'WAIT_FOR_START' ||
@@ -104,17 +112,23 @@ export default function Component() {
             })
     }
 
+    if (!user.isLogin) {
+        return <View className="detail" onClick={more}>
+            <View className="detail_item">
+                <View className="title_bg">
+                    <Text className="title">断食</Text>
+                </View>
+                <Text className="time">16:00</Text>
+            </View>
+        </View>
+    }
+
     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' &&
+            ((checkData as any).current_record.scenario == 'FAST' || (checkData as any).current_record.scenario == 'FAST_SLEEP') &&
             <View className="detail_item">
                 <View className="title_bg">
                     <Text className="title">断食</Text>
@@ -130,7 +144,7 @@ export default function Component() {
             </View>
         }
         {
-            ((checkData as any).scenaro != 'FAST') &&
+            ((checkData as any).current_record.scenario == 'SLEEP' || (checkData as any).current_record.scenario == 'FAST_SLEEP') &&
             <View className="detail_item">
                 <View className="title_bg">
                     <Text className="title">睡眠</Text>

+ 75 - 32
src/pages/clock.tsx

@@ -1,5 +1,5 @@
-import { Component, PropsWithChildren, useEffect } from 'react'
-import { View, Text, Button, Input } from '@tarojs/components'
+import { Component, PropsWithChildren, useEffect, useState } from 'react'
+import { View, Text, Button, Input, Picker } from '@tarojs/components'
 import './index/index.scss'
 import './Clock.scss'
 import Taro, { useDidShow, useReady, useRouter } from '@tarojs/taro'
@@ -27,18 +27,23 @@ import { setWXPubFollow } from '@/store/permission';
 export default function IndexPage() {
   const dispatch = useDispatch();
   const array: any[] = []
+  const [isFollowed, setIsFollowed] = useState(false)
+  const [checkData, setCheckData] = useState(null)
   const user = useSelector((state: any) => state.user);
   const permission = useSelector((state: any) => state.permission);
   const common = useSelector((state: any) => state.common);
+  const [counter, setCounter] = useState(0)
+  const [timerId, setTimerId] = useState(null)
   array.push('ffff');
   array.push(<Text>ffff</Text>)
   // array.push(<Rings radius={50}/>)
-
+  global.dispatch = dispatch;
   useEffect(() => {
+    dispatch(staticResources() as any);
     trackTimeService.onTransition(state => {
-      // console.log(state.value);
-      // console.log('aaaa')
       if ((state.value as any).FAST_SLEEP == 'COMPLETED' ||
+        (state.value as any).FAST == 'ONGOING' ||
+        (state.value as any).SLEEP == 'ONGOING' ||
         (state.value as any).FAST_SLEEP == 'ONGOING1' ||
         (state.value as any).FAST_SLEEP == 'ONGOING2' ||
         (state.value as any).FAST_SLEEP == 'ONGOING3' ||
@@ -49,6 +54,29 @@ export default function IndexPage() {
     })
   }, [])
 
+  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);
+  };
+
 
   useReady(async () => {
     const userData = await getStorage('userData');
@@ -63,18 +91,21 @@ export default function IndexPage() {
   })
 
   useDidShow(() => {
-    if (user.isLogin)
+    if (user.isLogin) {
+      checkWXPubFollow()
       getCheckData();
+    }
+
   })
 
   function getCheckData() {
     getClocks().then(res => {
+      dispatch(setScenario((res as any).scenario));
       machine.context.checkData = res as any;
 
       global.scenario = (res as any).current_record.scenario;
-      trackTimeService.send({ type: 'RESET' });
-
-      trackTimeService.send({ type: (res as any).current_record.scenario });
+      // trackTimeService.send({ type: 'RESET' });
+      // trackTimeService.send({ type: (res as any).current_record.scenario });
       const currentState = trackTimeService.getSnapshot();
       let json = {};
       var key = (res as any).current_record.scenario
@@ -83,8 +114,7 @@ export default function IndexPage() {
       currentState.value = json;
       // debugger
       machine.context.currentStatus = `${key}.${status}`;//'mixed.ON_GOING2'
-
-      console.log(machine.context.checkData)
+      setCheckData(res as any)
     })
     return
     getChecks().then(res => {
@@ -139,14 +169,15 @@ export default function IndexPage() {
   }
 
   function checkWXPubFollow() {
-    console.log('9527');
     wxPubFollow().then(res => {
-      if ((res as any).wx_pub_followed == true) {
-        setTimeout(() => {
-          dispatch(setWXPubFollow(true));
-        }, 1000)
-        // dispatch(setWXPubFollow(true));
-      }
+      setIsFollowed((res as any).wx_pub_followed)
+      // if ((res as any).wx_pub_followed == true) {
+      //   // setTimeout(() => {
+      //   //   dispatch(setWXPubFollow(true));
+      //   // }, 1000)
+      //   // dispatch(setWXPubFollow(true));
+      //   setIsFollowed((res as any).wx_pub_followed)
+      // }
     })
   }
 
@@ -200,32 +231,44 @@ export default function IndexPage() {
     }
 
   }
+
+  function schedule() {
+    if (!user.isLogin) {
+      return <View />
+    }
+    // if (!isFollowed){
+    //   return <Text onClick={() => followWxPub()}>去关注公众号</Text>
+    // }
+
+    if ((checkData as any).current_record.scenario == 'FAST_SLEEP') {
+      return <Schedule />
+    }
+    return <View />
+  }
   return (
-    <View style={{ flex: 1, flexDirection: 'column', display: 'flex', backgroundColor: '#fff' }}>
+    <View style={{ flex: 1, flexDirection: 'column', display: 'flex', backgroundColor: '#000', color: '#fff' }}>
       <TitleBar />
-      {
-        permission.wxPubFollow == false ? <Text onClick={() => followWxPub()}>去关注公众号</Text> : <Text>已关注</Text>
-      }
-      {/* <ComponentA value="ABBBB" /> */}
-      <Button onClick={() => goDetail()}>go detail</Button>
-      {/* <SingleSelect items={array}></SingleSelect> */}
-
-      {/* <Input placeholder="请输入用户名1" style={{ textAlign: 'left', backgroundColor: 'pink' }} /> */}
-      <Text className='login' onClick={() => login()}>sss</Text>
-      {/* <TabBar /> */}
       <Clocks />
       <View className='console_box'>
         <Console />
       </View>
 
       <More />
-      <Schedule />
-
       {
-        machine.context.checkData && (machine.context.checkData as any).latest_record && <Schedule type='latest' />
+        !isFollowed && user.isLogin && <Text style={{ textAlign: 'center', width: '100%' }} onClick={() => followWxPub()}>去关注公众号</Text>
+      }
+      {
+        checkData && (checkData as any).current_record.scenario == 'FAST_SLEEP' && schedule()
       }
 
 
+      {
+        checkData && (checkData as any).latest_record && <Schedule type='latest' />
+      }
+      {/* <Picker mode="time" start="07:00" end="20:00">
+        <Text style="color: #fff;">test picker</Text>
+      </Picker> */}
+      <View style={{ height: 100 }} />
     </View>
   )
 }

+ 3 - 1
src/services/http/request.ts

@@ -1,4 +1,6 @@
+import { logoutSuccess } from "@/store/user";
 import Taro from "@tarojs/taro";
+import { useDispatch } from "react-redux";
 
 
 interface RequestParam {
@@ -64,7 +66,7 @@ export async function request<T>(param: RequestParam): Promise<T> {
                     resolve(resp);
                 }
                 else if (statusCode == 401) {
-
+                    global.dispatch(logoutSuccess());
                 }
                 else {
                     reject(data);

+ 2 - 1
src/store/permission.tsx

@@ -24,7 +24,8 @@ const permissionSlice = createSlice({
     initialState,
     reducers: {
         setWXPubFollow(state, action) {
-            state.wxPubFollow = action.payload;
+            state.wxPubFollow = true//action?true:false;
+            // state.wxPubFollow = action.payload;
         },
         setPushAllow(state, action) {
             state.pushAllow = action.payload;

+ 21 - 4
src/utils/time_format.ts

@@ -70,13 +70,30 @@ export class TimeFormatter {
     }
   }
 
+  static formateHourMinute(startTimestamp: number, endTimestamp: number): string {
+    const diff = Math.abs(endTimestamp - startTimestamp);
+    // 计算小时、分钟和秒数
+    const hours = Math.floor(diff / (1000 * 60 * 60));
+    const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
+    return (hours<10?`0${hours}`:`${hours}`)+':'+(minutes<10?`0${minutes}`:`${minutes}`);
+  }
+
+  static countdown=(dt: number): string => {
+    const end = Date.now();
+    const time = Math.ceil((end>dt?end-dt:dt-end)/1000);
+    const hours = Math.floor(time / 3600);
+    const minutes = Math.floor((time % 3600) / 60);
+    const seconds = Math.floor(time % 60);
+    return `${TimeFormatter.padZero(hours)}:${TimeFormatter.padZero(minutes)}:${TimeFormatter.padZero(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);
+    const time = Math.floor((end>dt?end-dt:dt-end)/1000);
+    const hours = Math.floor(time / 3600);
+    const minutes = Math.floor((time % 3600) / 60);
+    const seconds = Math.floor(time % 60);
     return `${TimeFormatter.padZero(hours)}:${TimeFormatter.padZero(minutes)}:${TimeFormatter.padZero(seconds)}`;
   };
 

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików