(global["webpackJsonp"] = global["webpackJsonp"] || []).push([["pagesA/dashboard/dashboard"],{ /***/ 517: /*!******************************************************************************!*\ !*** D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dashboard.vue?vue&type=template&id=06a22555&scoped=true& */ 518); /* harmony import */ var _dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dashboard.vue?vue&type=script&lang=js& */ 520); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony import */ var _dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dashboard.vue?vue&type=style&index=0&id=06a22555&lang=scss&scoped=true& */ 524); /* harmony import */ var _tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js */ 32); var renderjs /* normalize component */ var component = Object(_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])( _dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"], _dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, "06a22555", null, false, _dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["components"], renderjs ) component.options.__file = "pagesA/dashboard/dashboard.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ 518: /*!*************************************************************************************************************************!*\ !*** D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue?vue&type=template&id=06a22555&scoped=true& ***! \*************************************************************************************************************************/ /*! exports provided: render, staticRenderFns, recyclableRender, components */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--17-0!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/template.js!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./dashboard.vue?vue&type=template&id=06a22555&scoped=true& */ 519); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "recyclableRender", function() { return _tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["recyclableRender"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "components", function() { return _tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_17_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_template_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_uni_app_loader_page_meta_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_template_id_06a22555_scoped_true___WEBPACK_IMPORTED_MODULE_0__["components"]; }); /***/ }), /***/ 519: /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--17-0!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/template.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue?vue&type=template&id=06a22555&scoped=true& ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns, recyclableRender, components */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recyclableRender", function() { return recyclableRender; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "components", function() { return components; }); var components try { components = { uIcon: function () { return Promise.all(/*! import() | uni_modules/uview-ui/components/u-icon/u-icon */[__webpack_require__.e("common/vendor"), __webpack_require__.e("uni_modules/uview-ui/components/u-icon/u-icon")]).then(__webpack_require__.bind(null, /*! @/uni_modules/uview-ui/components/u-icon/u-icon.vue */ 633)) }, qiunDataCharts: function () { return Promise.all(/*! import() | uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts */[__webpack_require__.e("common/vendor"), __webpack_require__.e("uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts")]).then(__webpack_require__.bind(null, /*! @/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue */ 784)) }, uPopup: function () { return Promise.all(/*! import() | uni_modules/uview-ui/components/u-popup/u-popup */[__webpack_require__.e("common/vendor"), __webpack_require__.e("uni_modules/uview-ui/components/u-popup/u-popup")]).then(__webpack_require__.bind(null, /*! @/uni_modules/uview-ui/components/u-popup/u-popup.vue */ 802)) }, } } catch (e) { if ( e.message.indexOf("Cannot find module") !== -1 && e.message.indexOf(".vue") !== -1 ) { console.error(e.message) console.error("1. 排查组件名称拼写是否正确") console.error( "2. 排查组件是否符合 easycom 规范,文档:https://uniapp.dcloud.net.cn/collocation/pages?id=easycom" ) console.error( "3. 若组件不符合 easycom 规范,需手动引入,并在 components 中注册该组件" ) } else { throw e } } var render = function () { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h var l0 = _vm.__map(_vm.kpiListTop.slice(0, 2), function (kpi, index) { var $orig = _vm.__get_orig(kpi) var m0 = _vm.getKpiIconName(kpi.key) var g0 = kpi.isMoney ? kpi.value.toString().replace(/[^\d\.]/g, "") : null return { $orig: $orig, m0: m0, g0: g0, } }) var l1 = _vm.__map(_vm.kpiListTop.slice(2, 4), function (kpi, index) { var $orig = _vm.__get_orig(kpi) var m1 = _vm.getKpiIconName(kpi.key) return { $orig: $orig, m1: m1, } }) var l2 = _vm.__map(_vm.kpiListBottom, function (kpi, index) { var $orig = _vm.__get_orig(kpi) var m2 = _vm.getKpiIconName(kpi.key) var g1 = kpi.isMoney ? kpi.value.toString().replace(/[^\d\.]/g, "") : null return { $orig: $orig, m2: m2, g1: g1, } }) var m3 = _vm.memberStatistics.totalMembers > 0 ? _vm.formatNumber(_vm.memberStatistics.totalMembers) : null var m4 = _vm.memberStatistics.totalMembers > 0 ? _vm.formatNumber(_vm.memberStatistics.activeMembers) : null var m5 = _vm.memberStatistics.totalMembers > 0 ? _vm.formatMoney(_vm.memberStatistics.totalRemainingAmount) : null var m6 = _vm.memberStatistics.totalMembers > 0 ? _vm.formatNumber(_vm.memberStatistics.totalSleepMembers) : null var g2 = _vm.memberTypeDistribution.length var l3 = g2 > 0 ? _vm.__map(_vm.memberTypeDistribution, function (item, index) { var $orig = _vm.__get_orig(item) var m7 = _vm.getMemberTypeColor(index) var m8 = _vm.formatNumber(item.Count || 0) return { $orig: $orig, m7: m7, m8: m8, } }) : null var m9 = _vm.memberStatistics.beautyMembers > 0 || _vm.memberStatistics.medicalMembers > 0 || _vm.memberStatistics.techMembers > 0 ? _vm.formatNumber(_vm.memberStatistics.beautyMembers) : null var m10 = _vm.memberStatistics.beautyMembers > 0 || _vm.memberStatistics.medicalMembers > 0 || _vm.memberStatistics.techMembers > 0 ? _vm.formatNumber(_vm.memberStatistics.medicalMembers) : null var m11 = _vm.memberStatistics.beautyMembers > 0 || _vm.memberStatistics.medicalMembers > 0 || _vm.memberStatistics.techMembers > 0 ? _vm.formatNumber(_vm.memberStatistics.techMembers) : null var g3 = _vm.trendData.length var g4 = _vm.storeRanking.length var l4 = g4 > 0 ? _vm.__map(_vm.storeRanking.slice(0, 10), function (item, index) { var $orig = _vm.__get_orig(item) var m12 = _vm.formatMoney(item.TotalPerformance) return { $orig: $orig, m12: m12, } }) : null var g5 = _vm.coachRanking.length var l5 = g5 > 0 ? _vm.__map(_vm.coachRanking.slice(0, 10), function (item, index) { var $orig = _vm.__get_orig(item) var g6 = item.HealthCoachName ? item.HealthCoachName.substring(0, 1) : null var m13 = _vm.formatMoney(item.Amount) return { $orig: $orig, g6: g6, m13: m13, } }) : null var g7 = _vm.goldTriangleRankings.length var l6 = g7 > 0 ? _vm.__map(_vm.goldTriangleRankingTop10, function (item, index) { var $orig = _vm.__get_orig(item) var m14 = _vm.formatMoney(item.TotalPerformance) return { $orig: $orig, m14: m14, } }) : null var g8 = _vm.customerVisitFrequencyData.length var g9 = _vm.consumeItemTop10.length var l7 = g9 > 0 ? _vm.__map(_vm.consumeItemTop10, function (item, index) { var $orig = _vm.__get_orig(item) var m15 = _vm.formatMoney(item.Amount) return { $orig: $orig, m15: m15, } }) : null var g10 = _vm.billingItemTop10.length var l8 = g10 > 0 ? _vm.__map(_vm.billingItemTop10, function (item, index) { var $orig = _vm.__get_orig(item) var m16 = _vm.formatMoney(item.Amount) return { $orig: $orig, m16: m16, } }) : null var m17 = _vm.tkStatisticsData ? _vm.formatPercent(_vm.getTkInviteRate()) : null var m18 = _vm.tkStatisticsData ? _vm.formatPercent(_vm.getInviteStoreRate()) : null if (!_vm._isMounted) { _vm.e0 = function ($event, item) { var _temp = arguments[arguments.length - 1].currentTarget.dataset, _temp2 = _temp.eventParams || _temp["event-params"], item = _temp2.item var _temp, _temp2 return _vm.handleStoreClick(item) } } _vm.$mp.data = Object.assign( {}, { $root: { l0: l0, l1: l1, l2: l2, m3: m3, m4: m4, m5: m5, m6: m6, g2: g2, l3: l3, m9: m9, m10: m10, m11: m11, g3: g3, g4: g4, l4: l4, g5: g5, l5: l5, g7: g7, l6: l6, g8: g8, g9: g9, l7: l7, g10: g10, l8: l8, m17: m17, m18: m18, }, } ) } var recyclableRender = false var staticRenderFns = [] render._withStripped = true /***/ }), /***/ 520: /*!*******************************************************************************************************!*\ !*** D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue?vue&type=script&lang=js& ***! \*******************************************************************************************************/ /*! no static exports found */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tool_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--13-1!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./dashboard.vue?vue&type=script&lang=js& */ 521); /* harmony import */ var _tool_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tool_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _tool_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _tool_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_tool_HBuilderX_plugins_uniapp_cli_node_modules_babel_loader_lib_index_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_13_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_script_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), /***/ 521: /*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--13-1!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue?vue&type=script&lang=js& ***! \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(uni) { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 4); var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 13); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 43)); var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ 5)); var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 45)); var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ 18)); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 11)); var _ucharts = _interopRequireDefault(__webpack_require__(/*! @qiun/ucharts */ 522)); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // uCharts 图表工具类 var ChartUtil = { // 绘制折线图 drawLineChart: function drawLineChart(vueInstance, canvasId, categories, series) { var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; if (!categories || categories.length === 0 || !series || series.length === 0) { return; } var chartData = { categories: categories, series: series.map(function (s, index) { return { name: s.name || "\u7CFB\u5217".concat(index + 1), data: s.data, color: s.color || ['#409EFF', '#67C23A', '#E6A23C', '#F56C6C'][index] }; }) }; // 如果是趋势图表,添加x轴标签倾斜设置 var isTrendChart = canvasId === 'trendChart'; var opts = { type: 'line', fontSize: 10, dataLabel: false, dataPointShape: true, legend: { show: false }, xAxis: _objectSpread({ disableGrid: false, itemCount: categories.length > 12 ? 12 : categories.length }, isTrendChart ? { rotateLabel: true, rotateAngle: 45, marginTop: 5 } : {}), yAxis: { gridType: 'dash', dashLength: 2, format: function format(val) { return val >= 10000 ? (val / 10000).toFixed(1) + '万' : val.toString(); } }, extra: { line: { type: 'curve', width: 2 }, tooltip: { showBox: true, showArrow: true, showCategory: true } } }; var query = uni.createSelectorQuery().in(vueInstance); query.select("#".concat(canvasId)).boundingClientRect(function (rect) { if (!rect || !rect.width || !rect.height) { console.warn("\u56FE\u8868\u5BB9\u5668 ".concat(canvasId, " \u5C3A\u5BF8\u83B7\u53D6\u5931\u8D25"), rect); return; } var ctx = uni.createCanvasContext(canvasId, vueInstance); var systemInfo = uni.getSystemInfoSync(); var pixelRatio = systemInfo.pixelRatio || 1; var chartWidth = Math.floor(uni.upx2px(rect.width) * pixelRatio) || options.width || 700; var chartHeight = Math.floor(uni.upx2px(rect.height) * pixelRatio) || options.height || 400; var chart = new _ucharts.default({ type: 'line', context: ctx, width: chartWidth, height: chartHeight, categories: chartData.categories, series: chartData.series, animation: true, background: 'none', color: chartData.series.map(function (s) { return s.color; }), padding: isTrendChart ? [20, 10, 10, 10] : [20, 10, 0, 10], enableScroll: false, legend: opts.legend, xAxis: opts.xAxis, yAxis: opts.yAxis, extra: opts.extra }); }).exec(); }, // 绘制柱状图 drawColumnChart: function drawColumnChart(vueInstance, canvasId, categories, series) { var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; if (!categories || categories.length === 0 || !series || series.length === 0) { return; } var chartData = { categories: categories, series: series.map(function (s, index) { return { name: s.name || "\u7CFB\u5217".concat(index + 1), data: s.data, color: s.color || ['#409EFF', '#67C23A', '#E6A23C', '#F56C6C'][index] }; }) }; var opts = { type: 'column', fontSize: 10, dataLabel: true, legend: { show: false }, xAxis: { disableGrid: false, itemCount: categories.length > 12 ? 12 : categories.length }, yAxis: { gridType: 'dash', dashLength: 2, format: function format(val) { return val >= 10000 ? (val / 10000).toFixed(1) + '万' : val.toString(); } }, extra: { column: { type: 'group', width: 0.6, activeBgColor: '#000000', activeBgOpacity: 0.08 }, tooltip: { showBox: true, showArrow: true, showCategory: true } } }; var query = uni.createSelectorQuery().in(vueInstance); query.select("#".concat(canvasId)).boundingClientRect(function (rect) { if (!rect || !rect.width || !rect.height) { console.warn("\u56FE\u8868\u5BB9\u5668 ".concat(canvasId, " \u5C3A\u5BF8\u83B7\u53D6\u5931\u8D25"), rect); return; } var ctx = uni.createCanvasContext(canvasId, vueInstance); var systemInfo = uni.getSystemInfoSync(); var pixelRatio = systemInfo.pixelRatio || 1; var chartWidth = Math.floor(uni.upx2px(rect.width) * pixelRatio) || options.width || 700; var chartHeight = Math.floor(uni.upx2px(rect.height) * pixelRatio) || options.height || 400; var chart = new _ucharts.default({ type: 'column', context: ctx, width: chartWidth, height: chartHeight, categories: chartData.categories, series: chartData.series, animation: true, background: 'none', color: chartData.series.map(function (s) { return s.color; }), padding: [20, 10, 0, 10], enableScroll: false, legend: opts.legend, xAxis: opts.xAxis, yAxis: opts.yAxis, extra: opts.extra }); }).exec(); }, // 绘制饼图 drawPieChart: function drawPieChart(vueInstance, canvasId, data) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; if (!data || data.length === 0) { return; } var chartData = { series: [{ data: data.map(function (item) { return { name: item.name, value: item.value, color: item.color }; }) }] }; var opts = { type: 'pie', fontSize: 10, dataLabel: true, legend: { show: false }, extra: { pie: { activeOpacity: 0.5, activeRadius: 10, offsetAngle: 0, labelWidth: 15, border: true, borderWidth: 3, borderColor: '#FFFFFF', ringWidth: 30 }, tooltip: { showBox: true, showArrow: true } } }; var query = uni.createSelectorQuery().in(vueInstance); query.select("#".concat(canvasId)).boundingClientRect(function (rect) { if (!rect || !rect.width || !rect.height) { console.warn("\u56FE\u8868\u5BB9\u5668 ".concat(canvasId, " \u5C3A\u5BF8\u83B7\u53D6\u5931\u8D25"), rect); return; } var ctx = uni.createCanvasContext(canvasId, vueInstance); var systemInfo = uni.getSystemInfoSync(); var pixelRatio = systemInfo.pixelRatio || 1; var chartWidth = Math.floor(uni.upx2px(rect.width) * pixelRatio) || options.width || 400; var chartHeight = Math.floor(uni.upx2px(rect.height) * pixelRatio) || options.height || 400; var chart = new _ucharts.default({ type: 'pie', context: ctx, width: chartWidth, height: chartHeight, series: chartData.series, animation: true, background: 'none', color: chartData.series[0].data.map(function (d) { return d.color; }), padding: 0, enableScroll: false, legend: opts.legend, extra: opts.extra }); }).exec(); }, // 绘制雷达图 drawRadarChart: function drawRadarChart(vueInstance, canvasId, indicators, data) { var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; if (!indicators || indicators.length === 0 || !data || data.length === 0) { return; } var chartData = { categories: indicators.map(function (ind) { return ind.name; }), series: [{ name: data.name || '数据', data: indicators.map(function (ind) { var _data$value$find; var indicatorName = ind.name; return ((_data$value$find = data.value.find(function (item) { return item.name === indicatorName; })) === null || _data$value$find === void 0 ? void 0 : _data$value$find.value) || 0; }), color: data.color || '#409EFF' }] }; var opts = { type: 'radar', fontSize: 10, dataLabel: true, legend: { show: false }, extra: { radar: { gridType: 'radar', gridCount: 4, opacity: 0.2, labelOffset: 10, gridColor: 'rgba(64, 158, 255, 0.2)', gridBorderColor: 'rgba(64, 158, 255, 0.3)' }, tooltip: { showBox: true, showArrow: true } } }; var query = uni.createSelectorQuery().in(vueInstance); query.select("#".concat(canvasId)).boundingClientRect(function (rect) { if (!rect || !rect.width || !rect.height) { console.warn("\u56FE\u8868\u5BB9\u5668 ".concat(canvasId, " \u5C3A\u5BF8\u83B7\u53D6\u5931\u8D25"), rect); return; } var ctx = uni.createCanvasContext(canvasId, vueInstance); var systemInfo = uni.getSystemInfoSync(); var pixelRatio = systemInfo.pixelRatio || 1; var chartWidth = Math.floor(uni.upx2px(rect.width) * pixelRatio) || options.width || 400; var chartHeight = Math.floor(uni.upx2px(rect.height) * pixelRatio) || options.height || 400; var chart = new _ucharts.default({ type: 'radar', context: ctx, width: chartWidth, height: chartHeight, categories: chartData.categories, series: chartData.series, animation: true, background: 'none', color: [chartData.series[0].color], padding: [15, 15, 0, 15], enableScroll: false, legend: opts.legend, extra: opts.extra }); }).exec(); }, // 绘制漏斗图 drawFunnelChart: function drawFunnelChart(vueInstance, canvasId, data) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; if (!data || data.length === 0) { return; } // uCharts 漏斗图数据格式:series 中的 data 应该是对象数组 var sortedData = (0, _toConsumableArray2.default)(data).sort(function (a, b) { return (b.value || 0) - (a.value || 0); }); var chartData = { series: [{ data: sortedData.map(function (item) { return { name: item.name || '', centerText: String(item.value || 0), value: Number(item.value) || 0 }; }) }] }; var opts = { type: 'funnel', fontSize: 10, dataLabel: true, padding: [15, 15, 0, 15], enableScroll: false, color: sortedData.map(function (item) { return item.color; }), extra: { funnel: { activeOpacity: 0.3, activeWidth: 10, border: true, borderWidth: 2, borderColor: '#FFFFFF', fillOpacity: 1, labelAlign: 'right' }, tooltip: { showBox: true, showArrow: true } } }; var query = uni.createSelectorQuery().in(vueInstance); query.select("#".concat(canvasId)).boundingClientRect(function (rect) { if (!rect || !rect.width || !rect.height) { console.warn("\u56FE\u8868\u5BB9\u5668 ".concat(canvasId, " \u5C3A\u5BF8\u83B7\u53D6\u5931\u8D25"), rect); return; } var ctx = uni.createCanvasContext(canvasId, vueInstance); var systemInfo = uni.getSystemInfoSync(); var pixelRatio = systemInfo.pixelRatio || 1; var chartWidth = Math.floor(uni.upx2px(rect.width) * pixelRatio) || options.width || 700; var chartHeight = Math.floor(uni.upx2px(rect.height) * pixelRatio) || options.height || 500; var chart = new _ucharts.default({ type: 'funnel', context: ctx, width: chartWidth, height: chartHeight, series: chartData.series, animation: true, background: 'none', color: opts.color, padding: opts.padding, enableScroll: opts.enableScroll, extra: opts.extra }); }).exec(); } }; var _default = { data: function data() { return { loading: false, screenshotLoading: false, // 截图加载状态 showScreenshotBtn: true, // 是否显示截图按钮 selectedMonth: '', trendType: 'day', // month/day/week coachRankType: 'billing', // billing/consume/refund pageScrollTop: 0, // 页面滚动位置 // 会员详情弹窗 showMemberDetailModal: false, detailModalType: '', // total/active/remaining/sleep // 核心KPI数据 kpiData: {}, // 会员统计数据 memberStatistics: { totalMembers: 0, newMembers: 0, newMembersLastMonth: 0, active_0_3: 0, active_4_59: 0, activeMembers: 0, activeRate: 0, activeRate30: 0, totalRemainingAmount: 0, avgRemainingAmount: 0, topRemainingMemberId: '', topRemainingMemberName: '', topRemainingAmount: 0, topBillingMemberId: '', topBillingMemberName: '', topBillingAmount: 0, topConsumeMemberId: '', topConsumeMemberName: '', topConsumeAmount: 0, totalSleepMembers: 0, sleep_60_89: 0, sleep_90_179: 0, sleep_180_359: 0, sleep_360_plus: 0, beautyMembers: 0, medicalMembers: 0, techMembers: 0, educationMembers: 0 }, memberTypeDistribution: [], // 会员类型分布 customerVisitFrequencyData: [], // 客户到店频次数据 // 趋势数据 trendData: [], // 排行榜数据 storeRanking: [], coachRankings: { billing: [], consume: [], refund: [] }, goldTriangleRankings: [], // 品项数据 consumeItemTop10: [], billingItemTop10: [], // 拓客漏斗数据 tkStatisticsData: null, // 会员类型分布图表数据 memberTypeChartData: {}, memberTypeChartOpts: { color: ["#F56C6C", "#67C23A", "#409EFF", "#E6A23C"], padding: [15, 15, 0, 15], dataLabel: false, legend: { show: false }, extra: { pie: { activeOpacity: 0.5, activeRadius: 10, offsetAngle: 0, labelWidth: 15, border: true, borderWidth: 3, borderColor: '#FFFFFF', ringWidth: 30 }, tooltip: { showBox: true, showArrow: true, format: function format(item) { return item.name + ': ' + (item.data || 0) + '人'; } } } }, // 会员价值分层图表数据 memberCategoryChartData: {}, memberCategoryChartOpts: { color: ["#409EFF"], padding: [0, 0, 0, 0], dataLabel: false, legend: { show: false }, extra: { radar: { gridType: 'radar', gridCount: 4, opacity: 0.2, labelOffset: 0, gridColor: 'rgba(64, 158, 255, 0.2)', gridBorderColor: 'rgba(64, 158, 255, 0.3)' }, tooltip: { showBox: true, showArrow: true, format: function format(item) { return item.name + ': ' + (item.data || 0) + '人'; } } } }, // 经营效能趋势图表数据 trendChartData: {}, trendChartOpts: { color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", "#ea7ccc"], padding: [15, 10, 0, 15], enableScroll: true, dataLabel: false, dataPointShape: true, legend: {}, xAxis: { disableGrid: true, scrollShow: true, itemCount: 4 }, yAxis: { gridType: "dash", dashLength: 2, format: function format(val) { return val >= 10000 ? (val / 10000).toFixed(1) + '万' : val.toString(); } }, extra: { line: { type: "straight", width: 2, activeType: "hollow" }, tooltip: { showBox: true, showArrow: true, showCategory: true, format: function format(item, category) { var val = item.data >= 10000 ? (item.data / 10000).toFixed(1) + '万' : item.data.toString(); return category + '\n' + item.name + ': ' + val; } } } }, // 客户活跃度分析图表数据 visitFrequencyChartData: {}, visitFrequencyChartOpts: { color: ["#409EFF"], padding: [20, 10, 0, 10], dataLabel: true, legend: { show: false }, xAxis: { disableGrid: false, itemCount: 8 }, yAxis: { gridType: 'dash', dashLength: 2, format: function format(val) { return val >= 10000 ? (val / 10000).toFixed(1) + '万' : val.toString(); } }, extra: { column: { type: 'group', width: 20, activeBgColor: '#000000', activeBgOpacity: 0.08 }, tooltip: { showBox: true, showArrow: true, showCategory: true, format: function format(item, category) { return category + '\n' + item.name + ': ' + (item.data || 0) + '人'; } } } }, // 客户获取转化链图表数据 funnelChartData: {}, funnelChartOpts: { color: ["#409EFF", "#67C23A", "#E6A23C", "#F56C6C"], padding: [15, 15, 0, 15], dataLabel: true, extra: { funnel: { activeOpacity: 0.3, activeWidth: 10, border: true, borderWidth: 2, borderColor: '#FFFFFF', fillOpacity: 1, labelAlign: 'right' }, tooltip: { showBox: true, showArrow: true, format: function format(item) { return item.name + ': ' + (item.data || 0); } } } } }; }, computed: { selectedMonthText: function selectedMonthText() { if (!this.selectedMonth) return '请选择月份'; var date = new Date(this.selectedMonth); return "".concat(date.getFullYear(), "\u5E74").concat(String(date.getMonth() + 1).padStart(2, '0'), "\u6708"); }, // 6大核心KPI列表 kpiList: function kpiList() { var d = this.kpiData || {}; var tkCount = this.tkStatisticsData && this.tkStatisticsData.TkCount ? this.tkStatisticsData.TkCount : 0; return [{ tooltip: '本月现金业绩,不包含退款业绩', key: 'billing', label: '开单金额', value: this.formatMoney(d.TotalBillingAmount), raw: d.TotalBillingAmount || 0, type: 'green', isMoney: true }, { tooltip: '实际退卡金额', key: 'refund', label: '退卡', value: this.formatMoney(d.TotalRefundAmount), raw: d.TotalRefundAmount || 0, type: 'red', isMoney: true }, { tooltip: '', key: 'tk', label: '人头数', value: tkCount, raw: tkCount, type: 'light-blue', isPercent: false, unit: '人头' }, { tooltip: '', key: 'visit', label: '人次数', value: 0, raw: 0, type: 'purple', isPercent: false, unit: '人次' }, { tooltip: '', key: 'consume', label: '消耗金额', value: this.formatMoney(d.TotalConsumeAmount), raw: d.TotalConsumeAmount || 0, type: 'light-blue', isMoney: true }, { tooltip: '', key: 'manual', label: '手工费', value: this.formatMoney(0), raw: 0, type: 'orange', isMoney: true }, { tooltip: '', key: 'item', label: '项目数', value: 0, raw: 0, type: 'pink', isPercent: false }]; }, // 上方4个KPI(2x2布局) kpiListTop: function kpiListTop() { return this.kpiList.slice(0, 4); }, // 下方3个KPI(1x3布局) kpiListBottom: function kpiListBottom() { return this.kpiList.slice(4, 7); }, // 健康师排行榜当前类型 coachRanking: function coachRanking() { var list = this.coachRankings[this.coachRankType] || []; var max = list.length > 0 ? Math.max.apply(Math, (0, _toConsumableArray2.default)(list.map(function (i) { return i.Amount || 1; })).concat([1])) : 100; return list.map(function (item) { return _objectSpread(_objectSpread({}, item), {}, { Percent: Math.min(100, Math.round(item.Amount / max * 100)) }); }).slice(0, 10); }, // 金三角排行榜Top10 goldTriangleRankingTop10: function goldTriangleRankingTop10() { if (!this.goldTriangleRankings || this.goldTriangleRankings.length === 0) { return []; } return (0, _toConsumableArray2.default)(this.goldTriangleRankings).sort(function (a, b) { return (b.F_TotalPerformance || b.TotalPerformance || 0) - (a.F_TotalPerformance || a.TotalPerformance || 0); }).slice(0, 10).map(function (item) { return { GoldTriangleName: item.F_GoldTriangleName || item.GoldTriangleName || '未知', TotalPerformance: item.F_TotalPerformance || item.TotalPerformance || 0 }; }); }, // 详情弹窗标题 detailModalTitle: function detailModalTitle() { var titleMap = { total: '总会员数', active: '活跃会员', remaining: '剩余权益', sleep: '沉睡会员' }; return titleMap[this.detailModalType] || '会员'; }, // 详情弹窗数据 detailModalData: function detailModalData() { var ms = this.memberStatistics; var dataMap = { total: [{ label: '总会员数', value: this.formatNumber(ms.totalMembers) }, { label: '本月新增', value: this.formatNumber(ms.newMembers) }].concat((0, _toConsumableArray2.default)(ms.newMembersLastMonth > 0 ? [{ label: '上月新增', value: this.formatNumber(ms.newMembersLastMonth) }] : [])), active: [{ label: '活跃会员总数', value: this.formatNumber(ms.activeMembers) }, { label: '活跃(≤3天)', value: this.formatNumber(ms.active_0_3) }, { label: '常到店(4-59天)', value: this.formatNumber(ms.active_4_59) }, { label: '60天活跃率', value: ms.activeRate + '%' }, { label: '30天活跃率', value: ms.activeRate30 + '%' }], remaining: [{ label: '总剩余权益', value: '¥' + this.formatMoney(ms.totalRemainingAmount) }, { label: '人均剩余权益', value: this.formatMoney(ms.avgRemainingAmount) + '元' }].concat((0, _toConsumableArray2.default)(ms.topRemainingAmount > 0 ? [{ label: '最高剩余权益', value: (ms.topRemainingMemberName || '无') + ' ¥' + this.formatMoney(ms.topRemainingAmount) }] : []), (0, _toConsumableArray2.default)(ms.topBillingAmount > 0 ? [{ label: '本月开单最高', value: (ms.topBillingMemberName || '无') + ' ¥' + this.formatMoney(ms.topBillingAmount) }] : []), (0, _toConsumableArray2.default)(ms.topConsumeAmount > 0 ? [{ label: '本月消耗最高', value: (ms.topConsumeMemberName || '无') + ' ¥' + this.formatMoney(ms.topConsumeAmount) }] : [])), sleep: [{ label: '沉睡会员总数', value: this.formatNumber(ms.totalSleepMembers) }, { label: '60-89天', value: this.formatNumber(ms.sleep_60_89) }, { label: '90-179天', value: this.formatNumber(ms.sleep_90_179) }, { label: '180-359天', value: this.formatNumber(ms.sleep_180_359) }, { label: '360天+', value: this.formatNumber(ms.sleep_360_plus) }] }; return dataMap[this.detailModalType] || []; } }, onLoad: function onLoad() { // 默认选择当前月份 var now = new Date(); this.selectedMonth = "".concat(now.getFullYear(), "-").concat(String(now.getMonth() + 1).padStart(2, '0')); this.search(); }, // 组件挂载时调用(作为组件使用时) mounted: function mounted() { // this.init() }, onPullDownRefresh: function onPullDownRefresh() { this.search().finally(function () { uni.stopPullDownRefresh(); }); }, onPageScroll: function onPageScroll(e) { this.pageScrollTop = e.scrollTop || 0; }, methods: { // 初始化方法(供父组件调用) init: function init() { // 默认选择当前月份 var now = new Date(); this.selectedMonth = "".concat(now.getFullYear(), "-").concat(String(now.getMonth() + 1).padStart(2, '0')); this.search(); }, // 月份选择变化 onMonthChange: function onMonthChange(e) { this.selectedMonth = e.detail.value; this.search(); }, // 切换趋势类型 switchTrendType: function switchTrendType(type) { this.trendType = type; this.search(); }, // 切换健康师排行类型 switchCoachRankType: function switchCoachRankType(type) { this.coachRankType = type; }, // 主搜索方法 search: function search() { var _this = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { var statisticsMonth, year, month, startDate, endDate, startTime, endTime; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; _this.loading = true; // 格式化月份 statisticsMonth = _this.selectedMonth.replace(/-/, ''); year = parseInt(_this.selectedMonth.substring(0, 4)); month = parseInt(_this.selectedMonth.substring(5, 7)); startDate = new Date(year, month - 1, 1); endDate = new Date(year, month, 0, 23, 59, 59); startTime = _this.formatDateTime(startDate); endTime = _this.formatDateTime(endDate); // 并行加载所有数据 _context.next = 11; return Promise.all([_this.loadKPIs({ startTime: startTime, endTime: endTime }), _this.loadTrends({ statisticsMonth: statisticsMonth, trendType: _this.trendType }), _this.loadTkFunnel({ startTime: startTime, endTime: endTime }), _this.loadRankings({ statisticsMonth: statisticsMonth, startTime: startTime, endTime: endTime }), _this.loadInsights({ startTime: startTime, endTime: endTime }), _this.loadMemberStatistics({ statisticsMonth: statisticsMonth })]); case 11: _context.next = 17; break; case 13: _context.prev = 13; _context.t0 = _context["catch"](0); console.error('加载数据失败:', _context.t0); uni.showToast({ title: '网络错误,请重试', icon: 'none' }); case 17: _context.prev = 17; _this.loading = false; return _context.finish(17); case 20: case "end": return _context.stop(); } } }, _callee, null, [[0, 13, 17, 20]]); }))(); }, // 加载KPI数据 loadKPIs: function loadKPIs(p) { var _this2 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() { var res, data; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.prev = 0; _context2.next = 3; return _this2.API.getBusinessStatistics({ startTime: p.startTime, endTime: p.endTime, storeIds: [] }); case 3: res = _context2.sent; if (res.code === 200 && res.data) { data = res.data; _this2.kpiData = { TotalBillingAmount: data.TotalBillingAmount || 0, TotalConsumeAmount: data.TotalConsumeAmount || 0, CompletedBillingAmount: (data.TotalBillingAmount || 0) - (data.TotalRefundAmount || 0), BillingCompletionRate: data.BillingCompletionRate || 0, TargetBillingAmount: data.TargetBillingAmount || 0, TotalRefundAmount: data.TotalRefundAmount || 0 }; } _context2.next = 10; break; case 7: _context2.prev = 7; _context2.t0 = _context2["catch"](0); console.error('加载KPI数据失败:', _context2.t0); case 10: case "end": return _context2.stop(); } } }, _callee2, null, [[0, 7]]); }))(); }, // 加载趋势数据 loadTrends: function loadTrends(p) { var _this3 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() { var params, startMonth, dateRange, _dateRange, weekStart, res, data, allData, grouped; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.prev = 0; // 根据趋势类型构建参数 params = {}; if (p.trendType === 'month') { // 最近12个月 startMonth = _this3.getMonthsAgo(11, p.statisticsMonth); params = { startMonth: startMonth, endMonth: p.statisticsMonth, periodType: 'month', storeIds: [] }; } else if (p.trendType === 'day') { // 本月按天 dateRange = _this3.getMonthDateRange(p.statisticsMonth); params = { startMonth: dateRange.startDate, endMonth: dateRange.endDate, periodType: 'day', storeIds: [] }; } else if (p.trendType === 'week') { // 最近4周 _dateRange = _this3.getMonthDateRange(p.statisticsMonth); weekStart = _this3.getDaysAgo(27, _dateRange.startDate); params = { startMonth: weekStart, endMonth: _dateRange.endDate, periodType: 'week', storeIds: [] }; } _context3.next = 5; return _this3.API.getStorePerformanceTrend(params); case 5: res = _context3.sent; if (res.code === 200 && res.data) { data = res.data.Data || res.data || []; if (res.data.Success) { data = res.data.Data || []; } // 处理趋势数据 allData = []; if (Array.isArray(data)) { data.forEach(function (store) { if (store && store.Data && Array.isArray(store.Data)) { store.Data.forEach(function (item) { if (item && item.Month) { allData.push({ Date: item.Month, BillingAmount: parseFloat(item.TotalPerformance || 0), ConsumeAmount: parseFloat(item.ConsumeAmount || 0) }); } }); } }); } // 按日期分组汇总 grouped = {}; allData.forEach(function (item) { if (!grouped[item.Date]) { grouped[item.Date] = { Date: item.Date, BillingAmount: 0, ConsumeAmount: 0 }; } grouped[item.Date].BillingAmount += item.BillingAmount; grouped[item.Date].ConsumeAmount += item.ConsumeAmount; }); _this3.trendData = Object.values(grouped).sort(function (a, b) { return a.Date.localeCompare(b.Date); }); // 渲染图表 _this3.$nextTick(function () { _this3.drawTrendChart(); }); } _context3.next = 12; break; case 9: _context3.prev = 9; _context3.t0 = _context3["catch"](0); console.error('加载趋势数据失败:', _context3.t0); case 12: case "end": return _context3.stop(); } } }, _callee3, null, [[0, 9]]); }))(); }, // 加载拓客漏斗数据 loadTkFunnel: function loadTkFunnel(p) { var _this4 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() { var res; return _regenerator.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.prev = 0; _context4.next = 3; return _this4.API.getTkStatistics({ startTime: p.startTime, endTime: p.endTime, storeId: [] }); case 3: res = _context4.sent; if (res.code === 200 && res.data) { _this4.tkStatisticsData = res.data; // 绘制漏斗图 _this4.$nextTick(function () { _this4.drawFunnelChart(); }); } _context4.next = 10; break; case 7: _context4.prev = 7; _context4.t0 = _context4["catch"](0); console.error('加载拓客漏斗数据失败:', _context4.t0); case 10: case "end": return _context4.stop(); } } }, _callee4, null, [[0, 7]]); }))(); }, // 加载排行榜数据 loadRankings: function loadRankings(p) { var _this5 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() { var _yield$Promise$all, _yield$Promise$all2, store, bill, cons, refu, gold, storeData, goldData; return _regenerator.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.prev = 0; _context5.next = 3; return Promise.all([_this5.API.getStorePerformanceRanking({ statisticsMonth: p.statisticsMonth, topCount: 10 }), _this5.API.getHealthCoachBillingRanking({ startTime: p.startTime, endTime: p.endTime, storeIds: [] }), _this5.API.getHealthCoachConsumeRanking({ startTime: p.startTime, endTime: p.endTime, storeIds: [] }), _this5.API.getHealthCoachRefundRanking({ startTime: p.startTime, endTime: p.endTime, storeIds: [] }), _this5.API.getGoldTrianglePerformanceRanking({ statisticsMonth: p.statisticsMonth, topCount: 10 })]); case 3: _yield$Promise$all = _context5.sent; _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 5); store = _yield$Promise$all2[0]; bill = _yield$Promise$all2[1]; cons = _yield$Promise$all2[2]; refu = _yield$Promise$all2[3]; gold = _yield$Promise$all2[4]; // 处理门店排行榜 if (store.code === 200 && store.data) { storeData = store.data.Data || store.data || []; if (store.data.Success) { storeData = store.data.Data || []; } _this5.storeRanking = storeData.map(function (item) { return { StoreId: item.StoreId, StoreName: item.StoreName, TotalPerformance: item.TotalPerformance || 0 }; }); } // 处理健康师排行榜 _this5.coachRankings.billing = _this5.parseCoachRanking(bill, 'BillingPerformance'); _this5.coachRankings.consume = _this5.parseCoachRanking(cons, 'ConsumePerformance'); _this5.coachRankings.refund = _this5.parseCoachRanking(refu, 'RefundPerformance'); // 处理金三角排行榜 if (gold.code === 200 && gold.data) { goldData = gold.data.Data || gold.data || []; if (gold.data.Success) { goldData = gold.data.Data || []; } _this5.goldTriangleRankings = goldData.map(function (item) { return { F_GoldTriangleName: item.GoldTriangleName, F_TotalPerformance: item.TotalPerformance || 0 }; }); } _context5.next = 20; break; case 17: _context5.prev = 17; _context5.t0 = _context5["catch"](0); console.error('加载排行榜数据失败:', _context5.t0); case 20: case "end": return _context5.stop(); } } }, _callee5, null, [[0, 17]]); }))(); }, // 解析健康师排行榜数据 parseCoachRanking: function parseCoachRanking(res, performanceKey) { if (res.code === 200 && res.data) { var data = res.data.Data || res.data || []; if (res.data.Success) { data = res.data.Data || []; } return data.map(function (i) { return { HealthCoachName: i.HealthCoachName || i.Name || '未知', Amount: i[performanceKey] || i.Performance || 0 }; }); } return []; }, // 加载洞察数据(到店频次、品项统计) loadInsights: function loadInsights(p) { var _this6 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() { var _yield$Promise$all3, _yield$Promise$all4, freq, item, raw, _raw, consumeMax, billingMax; return _regenerator.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.prev = 0; _context6.next = 3; return Promise.all([_this6.API.getCustomerVisitFrequency({ startTime: p.startTime, endTime: p.endTime, storeIds: [] }), _this6.API.getItemStatistics({ startTime: p.startTime, endTime: p.endTime, storeIds: [] })]); case 3: _yield$Promise$all3 = _context6.sent; _yield$Promise$all4 = (0, _slicedToArray2.default)(_yield$Promise$all3, 2); freq = _yield$Promise$all4[0]; item = _yield$Promise$all4[1]; // 处理客户到店频次数据 if (freq.code === 200 && freq.data) { raw = Array.isArray(freq.data) ? freq.data : freq.data.Data || []; _this6.customerVisitFrequencyData = raw.map(function (item) { return { VisitCount: item.VisitCount || 0, CustomerCount: item.CustomerCount || 0 }; }); // 渲染到店频次图表 _this6.$nextTick(function () { _this6.drawVisitFrequencyChart(); }); } // 处理品项统计数据 if (item.code === 200 && item.data) { _raw = Array.isArray(item.data) ? item.data : item.data.Data || []; // 消耗品项TOP10 consumeMax = _raw.length ? Math.max.apply(Math, (0, _toConsumableArray2.default)(_raw.map(function (i) { return i.ConsumeAmount || 0; })).concat([1])) : 100; _this6.consumeItemTop10 = _raw.filter(function (i) { return (i.ConsumeAmount || 0) > 0; }).sort(function (a, b) { return (b.ConsumeAmount || 0) - (a.ConsumeAmount || 0); }).slice(0, 10).map(function (i) { return { ItemName: i.ItemName || '未知品项', Amount: i.ConsumeAmount || 0, Percent: Math.round((i.ConsumeAmount || 0) / consumeMax * 100) }; }); // 开单品项TOP10 billingMax = _raw.length ? Math.max.apply(Math, (0, _toConsumableArray2.default)(_raw.map(function (i) { return i.BillingAmount || 0; })).concat([1])) : 100; _this6.billingItemTop10 = _raw.filter(function (i) { return (i.BillingAmount || 0) > 0; }).sort(function (a, b) { return (b.BillingAmount || 0) - (a.BillingAmount || 0); }).slice(0, 10).map(function (i) { return { ItemName: i.ItemName || '未知品项', Amount: i.BillingAmount || 0, Percent: Math.round((i.BillingAmount || 0) / billingMax * 100) }; }); } _context6.next = 14; break; case 11: _context6.prev = 11; _context6.t0 = _context6["catch"](0); console.error('加载洞察数据失败:', _context6.t0); case 14: case "end": return _context6.stop(); } } }, _callee6, null, [[0, 11]]); }))(); }, // 加载会员统计数据 loadMemberStatistics: function loadMemberStatistics(p) { var _this7 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() { var res, data, ms, active_0_3, active_4_59, totalMembers, active30, active60, activeRate60, activeRate30; return _regenerator.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: _context7.prev = 0; _context7.next = 3; return _this7.API.getDashboardData({ statisticsMonth: p.statisticsMonth }); case 3: res = _context7.sent; if (res.code === 200 && res.data) { data = null; if (res.data.Success && res.data.Data) { data = res.data.Data; } else if (res.data) { data = res.data; } if (data && data.MemberStatistics) { ms = data.MemberStatistics; active_0_3 = ms.ActiveMembers0_3 || 0; active_4_59 = ms.ActiveMembers4_59 || 0; totalMembers = ms.TotalMembers || 0; active30 = ms.ActiveMembers || 0; active60 = active_0_3 + active_4_59; activeRate60 = totalMembers > 0 ? Math.round(active60 / totalMembers * 10000) / 100 : 0; activeRate30 = totalMembers > 0 ? Math.round(active30 / totalMembers * 10000) / 100 : 0; _this7.memberStatistics = { totalMembers: totalMembers, newMembers: ms.NewMembersThisMonth || 0, newMembersLastMonth: ms.NewMembersLastMonth || 0, active_0_3: active_0_3, active_4_59: active_4_59, activeMembers: active60, activeRate: activeRate60, activeRate30: activeRate30, totalRemainingAmount: ms.TotalRemainingAmount || 0, avgRemainingAmount: ms.AvgRemainingAmount || 0, topRemainingMemberId: ms.TopRemainingMemberId || '', topRemainingMemberName: ms.TopRemainingMemberName || '', topRemainingAmount: ms.TopRemainingAmount || 0, topBillingMemberId: ms.TopBillingMemberId || '', topBillingMemberName: ms.TopBillingMemberName || '', topBillingAmount: ms.TopBillingAmount || 0, topConsumeMemberId: ms.TopConsumeMemberId || '', topConsumeMemberName: ms.TopConsumeMemberName || '', topConsumeAmount: ms.TopConsumeAmount || 0, totalSleepMembers: ms.TotalSleepMembers || 0, sleep_60_89: ms.SleepMembers60_89 || 0, sleep_90_179: ms.SleepMembers90_179 || 0, sleep_180_359: ms.SleepMembers180_359 || 0, sleep_360_plus: ms.SleepMembers360Plus || 0, beautyMembers: ms.BeautyMembers || 0, medicalMembers: ms.MedicalMembers || 0, techMembers: ms.TechMembers || 0, educationMembers: ms.EducationMembers || 0 }; _this7.memberTypeDistribution = ms.MemberTypeDistribution || []; // 等待DOM更新后渲染图表 _this7.$nextTick(function () { _this7.drawMemberTypeChart(); _this7.drawMemberCategoryChart(); }); } } _context7.next = 10; break; case 7: _context7.prev = 7; _context7.t0 = _context7["catch"](0); console.error('加载会员统计数据失败:', _context7.t0); case 10: case "end": return _context7.stop(); } } }, _callee7, null, [[0, 7]]); }))(); }, // 格式化趋势日期 formatTrendDate: function formatTrendDate(dateStr) { if (!dateStr) return ''; // 如果是YYYYMM格式 if (dateStr.length === 6) { var year = dateStr.substring(0, 4); var month = dateStr.substring(4, 6); return "".concat(year, "-").concat(month); } // 如果是YYYY-MM-DD格式 if (dateStr.length === 10) { return dateStr; } return dateStr; }, // 处理KPI点击 handleKpiClick: function handleKpiClick(kpi) { // KPI穿透功能,可以后续实现 uni.showToast({ title: kpi.label, icon: 'none' }); }, // 处理门店点击 handleStoreClick: function handleStoreClick(store) { // 门店详情功能 uni.showToast({ title: store.StoreName, icon: 'none' }); }, // 获取KPI图标名称(使用uview图标) getKpiIconName: function getKpiIconName(key) { var iconMap = { billing: 'grid', consume: 'star', net: 'red-packet', target: 'red-packet', tk: 'account', refund: 'warning', visit: 'account', manual: 'star', item: 'grid' }; return iconMap[key] || 'chart'; }, // 获取KPI图标颜色 getKpiIconColor: function getKpiIconColor(type) { var colorMap = { primary: '#1976d2', success: '#388e3c', warning: '#f57c00', info: '#7b1fa2', error: '#d32f2f' }; return colorMap[type] || '#1976d2'; }, // 获取KPI颜色 getKpiColor: function getKpiColor(type) { var colorMap = { primary: '#409EFF', success: '#67C23A', warning: '#E6A23C', info: '#909399', error: '#F56C6C', danger: '#F56C6C' }; return colorMap[type] || '#409EFF'; }, // 格式化数字 formatNumber: function formatNumber(num) { if (num === null || num === undefined) return '0'; if (typeof num === 'string') num = parseFloat(num); if (isNaN(num)) return '0'; if (num >= 10000) { return (num / 10000).toFixed(2) + '万'; } return num.toLocaleString(); }, // 格式化金额 formatMoney: function formatMoney(amount) { if (amount === null || amount === undefined) return '0.00'; if (typeof amount === 'string') amount = parseFloat(amount); if (isNaN(amount)) return '0.00'; if (amount >= 10000) { return (amount / 10000).toFixed(2) + '万'; } return amount.toFixed(2); }, // 格式化百分比 formatPercent: function formatPercent(percent) { return Math.round(percent * 100) / 100; }, // 获取邀约率 getTkInviteRate: function getTkInviteRate() { if (!this.tkStatisticsData || !this.tkStatisticsData.TkCount) return 0; return (this.tkStatisticsData.YaoyCount || 0) / this.tkStatisticsData.TkCount * 100; }, // 获取到店率 getInviteStoreRate: function getInviteStoreRate() { if (!this.tkStatisticsData || !this.tkStatisticsData.YaoyCount) return 0; return (this.tkStatisticsData.DdCount || 0) / this.tkStatisticsData.YaoyCount * 100; }, // 格式化日期时间 formatDateTime: function formatDateTime(date) { var year = date.getFullYear(); var month = String(date.getMonth() + 1).padStart(2, '0'); var day = String(date.getDate()).padStart(2, '0'); var hours = String(date.getHours()).padStart(2, '0'); var minutes = String(date.getMinutes()).padStart(2, '0'); var seconds = String(date.getSeconds()).padStart(2, '0'); return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, ":").concat(seconds); }, // 获取月份日期范围 getMonthDateRange: function getMonthDateRange(monthStr) { var year = parseInt(monthStr.substring(0, 4)); var month = parseInt(monthStr.substring(4, 6)); var startDate = new Date(year, month - 1, 1); var endDate = new Date(year, month, 0, 23, 59, 59); return { startDate: this.formatDateTime(startDate).split(' ')[0], endDate: this.formatDateTime(endDate).split(' ')[0] }; }, // 获取N个月前的月份(YYYYMM格式) getMonthsAgo: function getMonthsAgo(n, monthStr) { var year = parseInt(monthStr.substring(0, 4)); var month = parseInt(monthStr.substring(4, 6)); var date = new Date(year, month - 1 - n, 1); return "".concat(date.getFullYear()).concat(String(date.getMonth() + 1).padStart(2, '0')); }, // 获取N天前的日期(YYYY-MM-DD格式) getDaysAgo: function getDaysAgo(n, dateStr) { var date = new Date(dateStr); date.setDate(date.getDate() - n); return date.toISOString().split('T')[0]; }, // 初始化图表 initChart: function initChart() { // uCharts 不需要初始化,图表会在数据加载后自动绘制 }, // 保存截图 saveScreenshot: function saveScreenshot() { var _this8 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() { return _regenerator.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: // 隐藏截图按钮 _this8.showScreenshotBtn = false; // 显示加载提示 uni.showLoading({ title: '截图中' }); _this8.screenshotLoading = true; _context8.prev = 3; _context8.next = 6; return _this8.saveScreenshotMiniProgram(); case 6: _context8.next = 12; break; case 8: _context8.prev = 8; _context8.t0 = _context8["catch"](3); console.error('截图生成失败:', _context8.t0); uni.showToast({ title: '截图生成失败: ' + (_context8.t0.message || '未知错误'), icon: 'none', duration: 3000 }); case 12: _context8.prev = 12; _this8.screenshotLoading = false; // 隐藏加载提示 uni.hideLoading(); // 恢复显示截图按钮 _this8.showScreenshotBtn = true; return _context8.finish(12); case 17: case "end": return _context8.stop(); } } }, _callee8, null, [[3, 8, 12, 17]]); }))(); }, // H5平台截图 saveScreenshotH5: function saveScreenshotH5() { var _this9 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() { var html2canvas, element, originalBg, options, canvas, fallbackOptions, dataUrl, link, fileName; return _regenerator.default.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: _context9.prev = 0; _context9.next = 3; return Promise.resolve().then(function () { return _interopRequireWildcard(__webpack_require__(/*! html2canvas */ 523)); }); case 3: html2canvas = _context9.sent; // 获取要截图的容器 element = document.querySelector('.warpbox'); if (!element) { element = document.querySelector('.page'); } if (element) { _context9.next = 8; break; } throw new Error('未找到要截图的内容'); case 8: _context9.next = 10; return new Promise(function (resolve) { return setTimeout(resolve, 1000); }); case 10: // 滚动到页面顶部确保所有内容可见 window.scrollTo(0, 0); _context9.next = 13; return new Promise(function (resolve) { return setTimeout(resolve, 500); }); case 13: // 临时修改背景色为白色,确保截图效果 originalBg = element.style.background; element.style.background = '#ffffff'; // 等待样式生效 _context9.next = 17; return new Promise(function (resolve) { return setTimeout(resolve, 200); }); case 17: // 配置截图选项 options = { allowTaint: true, useCORS: true, scale: 2.0, backgroundColor: '#ffffff', logging: false, imageTimeout: 30000, scrollX: 0, scrollY: 0, onclone: function onclone(clonedDoc) { clonedDoc.body.style.backgroundColor = '#ffffff'; clonedDoc.documentElement.style.backgroundColor = '#ffffff'; } }; // 生成截图 _context9.prev = 18; _context9.next = 21; return html2canvas.default(element, options); case 21: canvas = _context9.sent; _context9.next = 31; break; case 24: _context9.prev = 24; _context9.t0 = _context9["catch"](18); console.warn('第一次截图失败,尝试备选方案:', _context9.t0); fallbackOptions = { allowTaint: true, useCORS: true, scale: 2.0, backgroundColor: '#ffffff', logging: false, imageTimeout: 30000 }; _context9.next = 30; return html2canvas.default(element, fallbackOptions); case 30: canvas = _context9.sent; case 31: // 转换为DataURL dataUrl = canvas.toDataURL('image/png', 1.0); // 创建下载链接 link = document.createElement('a'); fileName = "\u96C6\u56E2\u9A7E\u9A76\u8231_".concat(_this9.selectedMonth, "_").concat(new Date().toISOString().slice(0, 19).replace(/:/g, '-'), ".png"); link.download = fileName; link.href = dataUrl; // 触发下载 document.body.appendChild(link); link.click(); document.body.removeChild(link); // 恢复原始背景色 element.style.background = originalBg; uni.showToast({ title: '截图保存成功', icon: 'success', duration: 2000 }); _context9.next = 47; break; case 43: _context9.prev = 43; _context9.t1 = _context9["catch"](0); console.error('H5截图失败:', _context9.t1); throw _context9.t1; case 47: case "end": return _context9.stop(); } } }, _callee9, null, [[0, 43], [18, 24]]); }))(); }, // 微信小程序截图 saveScreenshotMiniProgram: function saveScreenshotMiniProgram() { var _this10 = this; return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() { var systemInfo; return _regenerator.default.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: _context10.prev = 0; // 获取系统信息 systemInfo = uni.getSystemInfoSync(); // 使用页面截图API uni.canvasToTempFilePath({ canvasId: 'screenshot-canvas', success: function success(res) { // 保存到相册 uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function success() { uni.showToast({ title: '截图已保存到相册', icon: 'success', duration: 2000 }); }, fail: function fail(err) { console.error('保存到相册失败:', err); // 如果用户拒绝授权,提供预览 uni.previewImage({ urls: [res.tempFilePath], current: res.tempFilePath }); } }); }, fail: function fail(err) { console.error('导出图片失败:', err); throw new Error('导出图片失败'); } }, _this10); _context10.next = 9; break; case 5: _context10.prev = 5; _context10.t0 = _context10["catch"](0); console.error('小程序截图失败:', _context10.t0); throw _context10.t0; case 9: case "end": return _context10.stop(); } } }, _callee10, null, [[0, 5]]); }))(); }, // 兜底截图方案 saveScreenshotFallback: function saveScreenshotFallback() { return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() { return _regenerator.default.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: _context11.next = 2; return new Promise(function (resolve) { return setTimeout(resolve, 2000); }); case 2: uni.showToast({ title: '截图功能暂不支持当前平台', icon: 'none', duration: 2000 }); case 3: case "end": return _context11.stop(); } } }, _callee11); }))(); }, // 绘制趋势图表 drawTrendChart: function drawTrendChart() { var _this11 = this; if (!this.trendData || this.trendData.length === 0) { this.trendChartData = {}; return; } // 格式化日期 var categories = this.trendData.map(function (item) { var date = item.Date; if (!date) return ''; if (_this11.trendType === 'month') { if (date.length === 6) { return date.substring(0, 4) + '-' + date.substring(4, 6); } } else if (_this11.trendType === 'day') { if (date.length >= 10) { return date.substring(5, 10); // MM-DD } } else if (_this11.trendType === 'week') { if (date.includes('-W')) { return date.replace('-W', ' 第') + '周'; } } return date; }); var series = [{ name: '成交额', data: this.trendData.map(function (item) { return parseFloat(parseFloat(item.BillingAmount || 0).toFixed(2)); }) }, { name: '服务产出', data: this.trendData.map(function (item) { return parseFloat(parseFloat(item.ConsumeAmount || 0).toFixed(2)); }) }]; // 更新图表数据 this.trendChartData = { categories: categories, series: series }; }, // 绘制会员类型分布饼图 drawMemberTypeChart: function drawMemberTypeChart() { if (!this.memberTypeDistribution || this.memberTypeDistribution.length === 0) { this.memberTypeChartData = {}; return; } var colors = ['#F56C6C', '#67C23A', '#409EFF', '#E6A23C']; var data = this.memberTypeDistribution.map(function (item, index) { return { name: item.MemberType || '未知', value: item.Count || 0, color: colors[index % colors.length] }; }); // 更新图表数据 this.memberTypeChartData = { series: [{ data: data }] }; }, // 绘制会员价值分层雷达图 drawMemberCategoryChart: function drawMemberCategoryChart() { if (!this.memberStatistics) { this.memberCategoryChartData = {}; return; } var beautyMembers = this.memberStatistics.beautyMembers || 0; var medicalMembers = this.memberStatistics.medicalMembers || 0; var techMembers = this.memberStatistics.techMembers || 0; var categories = ['生美会员', '医美会员', '科技部会员']; var series = [{ name: '会员分布', data: [beautyMembers, medicalMembers, techMembers] }]; // 更新图表数据 this.memberCategoryChartData = { categories: categories, series: series }; }, // 绘制客户活跃度分析图表 drawVisitFrequencyChart: function drawVisitFrequencyChart() { if (!this.customerVisitFrequencyData || this.customerVisitFrequencyData.length === 0) { this.visitFrequencyChartData = {}; return; } // 排序数据(按到店次数) var sortedData = (0, _toConsumableArray2.default)(this.customerVisitFrequencyData).sort(function (a, b) { return (a.VisitCount || 0) - (b.VisitCount || 0); }).slice(0, 8); if (sortedData.length === 0) { this.visitFrequencyChartData = {}; return; } var categories = sortedData.map(function (item) { return (item.VisitCount || 0) + '次'; }); var series = [{ name: '客户数', data: sortedData.map(function (item) { return item.CustomerCount || 0; }) }]; // 更新图表数据 this.visitFrequencyChartData = { categories: categories, series: series }; }, // 获取会员类型颜色 getMemberTypeColor: function getMemberTypeColor(index) { var colors = ['#F56C6C', '#67C23A', '#409EFF', '#E6A23C']; return colors[index % colors.length]; }, // 绘制漏斗图 drawFunnelChart: function drawFunnelChart() { if (!this.tkStatisticsData) { this.funnelChartData = {}; return; } var d = this.tkStatisticsData; var funnelData = [{ value: d.TkCount || 0, name: '获客', color: '#409EFF' }, { value: d.YaoyCount || 0, name: '邀约', color: '#67C23A' }, { value: d.DdCount || 0, name: '到店', color: '#E6A23C' }, { value: d.XfCount || 0, name: '成交', color: '#F56C6C' }]; // 更新图表数据 this.funnelChartData = { series: [{ data: funnelData.map(function (item) { return { name: item.name, value: item.value, color: item.color }; }) }] }; }, // 打开会员详情弹窗 openMemberDetailModal: function openMemberDetailModal(type) { this.detailModalType = type; this.showMemberDetailModal = true; }, // 关闭会员详情弹窗 closeMemberDetailModal: function closeMemberDetailModal() { this.showMemberDetailModal = false; this.detailModalType = ''; } } }; exports.default = _default; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["default"])) /***/ }), /***/ 524: /*!****************************************************************************************************************************************!*\ !*** D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue?vue&type=style&index=0&id=06a22555&lang=scss&scoped=true& ***! \****************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tool_HBuilderX_plugins_uniapp_cli_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_2_tool_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_3_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_sass_loader_dist_cjs_js_ref_8_oneOf_1_4_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_5_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-2!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src??ref--8-oneOf-1-3!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-5!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!../../../../../tool/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./dashboard.vue?vue&type=style&index=0&id=06a22555&lang=scss&scoped=true& */ 525); /* harmony import */ var _tool_HBuilderX_plugins_uniapp_cli_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_2_tool_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_3_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_sass_loader_dist_cjs_js_ref_8_oneOf_1_4_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_5_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tool_HBuilderX_plugins_uniapp_cli_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_2_tool_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_3_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_sass_loader_dist_cjs_js_ref_8_oneOf_1_4_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_5_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _tool_HBuilderX_plugins_uniapp_cli_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_2_tool_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_3_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_sass_loader_dist_cjs_js_ref_8_oneOf_1_4_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_5_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _tool_HBuilderX_plugins_uniapp_cli_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_2_tool_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_3_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_sass_loader_dist_cjs_js_ref_8_oneOf_1_4_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_5_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_tool_HBuilderX_plugins_uniapp_cli_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_tool_HBuilderX_plugins_uniapp_cli_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_loaders_stylePostLoader_js_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_2_tool_HBuilderX_plugins_uniapp_cli_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_3_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_sass_loader_dist_cjs_js_ref_8_oneOf_1_4_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_webpack_preprocess_loader_index_js_ref_8_oneOf_1_5_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_vue_cli_plugin_uni_packages_vue_loader_lib_index_js_vue_loader_options_tool_HBuilderX_plugins_uniapp_cli_node_modules_dcloudio_webpack_uni_mp_loader_lib_style_js_dashboard_vue_vue_type_style_index_0_id_06a22555_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), /***/ 525: /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!./node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-2!./node_modules/postcss-loader/src??ref--8-oneOf-1-3!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader??ref--8-oneOf-1-5!./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib??vue-loader-options!./node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/pagesA/dashboard/dashboard.vue?vue&type=style&index=0&id=06a22555&lang=scss&scoped=true& ***! \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin if(false) { var cssReload; } /***/ }), /***/ 559: /*!*************************************************************************************************!*\ !*** D:/work/daima/lvqianmeiye_ERP/绿纤uni-app/main.js?{"page":"pagesA%2Fdashboard%2Fdashboard"} ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(wx, createPage) { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 4); __webpack_require__(/*! uni-pages */ 26); var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 25)); var _dashboard = _interopRequireDefault(__webpack_require__(/*! ./pagesA/dashboard/dashboard.vue */ 517)); // @ts-ignore wx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__; createPage(_dashboard.default); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/wx.js */ 1)["default"], __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["createPage"])) /***/ }) },[[559,"common/runtime","common/vendor"]]]); //# sourceMappingURL=../../../.sourcemap/mp-weixin/pagesA/dashboard/dashboard.js.map