From 9190eabe59efd18f66295f71825b8b957239b258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E9=BB=91?= <6585077+djjkai@user.noreply.gitee.com> Date: Wed, 7 Jan 2026 14:35:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=BC=94=E7=A4=BA=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E9=A6=96=E6=AC=A1=E9=99=A4=E6=B5=81=E7=A8=8B=E5=A4=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apaas-custom-mydemo.common.js | 140724 -------------- apaas-custom-mydemo/apaas-custom-mydemo.css | 1 - .../apaas-custom-mydemo.umd.js | 140734 --------------- .../apaas-custom-mydemo.umd.min.js | 19 - apaas-custom-mydemo/apaas.json | 146 - apaas-custom-mydemo/demo.html | 10 - .../static/custom/apaas-custom-mydemo/1.jpg | Bin 11989 -> 0 bytes src/api/demo/index.js | 16 + .../custom-page/approvalProgressDetail.vue | 4 +- .../batch-modify-responsible-modal.vue | 2 +- .../custom-page/engineCheck.vue | 12 +- .../custom-page/managerData.vue | 368 +- .../custom-page/model-query.vue | 790 +- .../custom-page/modelContorl.vue | 24 +- .../custom-page/modelDetail.vue | 35 +- .../custom-page/otherEnginedata.vue | 4 + .../custom-page/report.vue | 43 +- .../custom-page/reportDetail.vue | 52 +- .../custom-page/selfEnginedata.vue | 4 + .../apaas-custom-mydemo/custom-page/todo.vue | 11 +- 20 files changed, 1035 insertions(+), 281964 deletions(-) delete mode 100644 apaas-custom-mydemo/apaas-custom-mydemo.common.js delete mode 100644 apaas-custom-mydemo/apaas-custom-mydemo.css delete mode 100644 apaas-custom-mydemo/apaas-custom-mydemo.umd.js delete mode 100644 apaas-custom-mydemo/apaas-custom-mydemo.umd.min.js delete mode 100644 apaas-custom-mydemo/apaas.json delete mode 100644 apaas-custom-mydemo/demo.html delete mode 100644 apaas-custom-mydemo/static/custom/apaas-custom-mydemo/1.jpg diff --git a/apaas-custom-mydemo/apaas-custom-mydemo.common.js b/apaas-custom-mydemo/apaas-custom-mydemo.common.js deleted file mode 100644 index ab6b0b8..0000000 --- a/apaas-custom-mydemo/apaas-custom-mydemo.common.js +++ /dev/null @@ -1,140724 +0,0 @@ -module.exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "fb15"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "00a9": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "06d2": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportCheck_vue_vue_type_style_index_0_id_0edee6bf_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("f18a"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportCheck_vue_vue_type_style_index_0_id_0edee6bf_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportCheck_vue_vue_type_style_index_0_id_0edee6bf_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "06ed": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modelDetail_vue_vue_type_style_index_0_id_514e40eb_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("17fd"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modelDetail_vue_vue_type_style_index_0_id_514e40eb_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modelDetail_vue_vue_type_style_index_0_id_514e40eb_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "0753": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_search_number_vue_vue_type_style_index_0_id_38d0fcce_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("0b3e"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_search_number_vue_vue_type_style_index_0_id_38d0fcce_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_search_number_vue_vue_type_style_index_0_id_38d0fcce_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "07a4": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "0b3e": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "10d0": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selfEnginedata_vue_vue_type_style_index_0_id_538925cc_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("2cf4"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selfEnginedata_vue_vue_type_style_index_0_id_538925cc_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selfEnginedata_vue_vue_type_style_index_0_id_538925cc_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "17fd": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "18c7": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherEngineCheck_vue_vue_type_style_index_0_id_720ebc06_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("f3ba"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherEngineCheck_vue_vue_type_style_index_0_id_720ebc06_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherEngineCheck_vue_vue_type_style_index_0_id_720ebc06_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "1fb5": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -// Support decoding URL-safe base64 strings, as Node.js does. -// See: https://en.wikipedia.org/wiki/Base64#URL_applications -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function getLens (b64) { - var len = b64.length - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - var i - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} - - -/***/ }), - -/***/ "20a2": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "2153": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "22d1": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var Browser = (function () { - function Browser() { - this.firefox = false; - this.ie = false; - this.edge = false; - this.newEdge = false; - this.weChat = false; - } - return Browser; -}()); -var Env = (function () { - function Env() { - this.browser = new Browser(); - this.node = false; - this.wxa = false; - this.worker = false; - this.svgSupported = false; - this.touchEventsSupported = false; - this.pointerEventsSupported = false; - this.domSupported = false; - this.transformSupported = false; - this.transform3dSupported = false; - this.hasGlobalWindow = typeof window !== 'undefined'; - } - return Env; -}()); -var env = new Env(); -if (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') { - env.wxa = true; - env.touchEventsSupported = true; -} -else if (typeof document === 'undefined' && typeof self !== 'undefined') { - env.worker = true; -} -else if (typeof navigator === 'undefined' - || navigator.userAgent.indexOf('Node.js') === 0) { - env.node = true; - env.svgSupported = true; -} -else { - detect(navigator.userAgent, env); -} -function detect(ua, env) { - var browser = env.browser; - var firefox = ua.match(/Firefox\/([\d.]+)/); - var ie = ua.match(/MSIE\s([\d.]+)/) - || ua.match(/Trident\/.+?rv:(([\d.]+))/); - var edge = ua.match(/Edge?\/([\d.]+)/); - var weChat = (/micromessenger/i).test(ua); - if (firefox) { - browser.firefox = true; - browser.version = firefox[1]; - } - if (ie) { - browser.ie = true; - browser.version = ie[1]; - } - if (edge) { - browser.edge = true; - browser.version = edge[1]; - browser.newEdge = +edge[1].split('.')[0] > 18; - } - if (weChat) { - browser.weChat = true; - } - env.svgSupported = typeof SVGRect !== 'undefined'; - env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge; - env.pointerEventsSupported = 'onpointerdown' in window - && (browser.edge || (browser.ie && +browser.version >= 11)); - env.domSupported = typeof document !== 'undefined'; - var style = document.documentElement.style; - env.transform3dSupported = ((browser.ie && 'transition' in style) - || browser.edge - || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix())) - || 'MozPerspective' in style) - && !('OTransition' in style); - env.transformSupported = env.transform3dSupported - || (browser.ie && +browser.version >= 9); -} -/* harmony default export */ __webpack_exports__["a"] = (env); - - -/***/ }), - -/***/ "2335": -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; - - -/***/ }), - -/***/ "2399": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_approvalProgressDetail_vue_vue_type_style_index_0_id_142f64c9_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("b36b"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_approvalProgressDetail_vue_vue_type_style_index_0_id_142f64c9_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_approvalProgressDetail_vue_vue_type_style_index_0_id_142f64c9_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "2b0e": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_model_query_vue_vue_type_style_index_0_id_28f21638_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("fa36"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_model_query_vue_vue_type_style_index_0_id_28f21638_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_model_query_vue_vue_type_style_index_0_id_28f21638_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "2c30": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "2cbe": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selfEngineCheck_vue_vue_type_style_index_0_id_0b908756_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("f992"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selfEngineCheck_vue_vue_type_style_index_0_id_0b908756_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selfEngineCheck_vue_vue_type_style_index_0_id_0b908756_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "2cf4": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "371a": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "3840": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_modal_vue_vue_type_style_index_0_id_6111a3ea_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6f87"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_modal_vue_vue_type_style_index_0_id_6111a3ea_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_modal_vue_vue_type_style_index_0_id_6111a3ea_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "387d": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportDetail_vue_vue_type_style_index_0_id_6d4dc479_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("45b9"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportDetail_vue_vue_type_style_index_0_id_6d4dc479_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportDetail_vue_vue_type_style_index_0_id_6d4dc479_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "4019": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportList_vue_vue_type_style_index_0_id_0979a4e5_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("8b89"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportList_vue_vue_type_style_index_0_id_0979a4e5_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_reportList_vue_vue_type_style_index_0_id_0979a4e5_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "40b5": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "41d8": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "41ef": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return parse; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return lift; }); -/* unused harmony export toHex */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return fastLerp; }); -/* unused harmony export fastMapToColor */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return lerp; }); -/* unused harmony export mapToColor */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return modifyHSL; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return modifyAlpha; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return stringify; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return lum; }); -/* unused harmony export random */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return liftColor; }); -/* harmony import */ var _core_LRU_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d51b"); -/* harmony import */ var _core_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("6d8b"); - - -var kCSSColorTable = { - 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1], - 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1], - 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1], - 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1], - 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1], - 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1], - 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1], - 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1], - 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1], - 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1], - 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1], - 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1], - 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1], - 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1], - 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1], - 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1], - 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1], - 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1], - 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1], - 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1], - 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1], - 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1], - 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1], - 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1], - 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1], - 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1], - 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1], - 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1], - 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1], - 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1], - 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1], - 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1], - 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1], - 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1], - 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1], - 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1], - 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1], - 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1], - 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1], - 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1], - 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1], - 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1], - 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1], - 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1], - 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1], - 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1], - 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1], - 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1], - 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1], - 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1], - 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1], - 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1], - 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1], - 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1], - 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1], - 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1], - 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1], - 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1], - 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1], - 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1], - 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1], - 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1], - 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1], - 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1], - 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1], - 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1], - 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1], - 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1], - 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1], - 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1], - 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1], - 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1], - 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1], - 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1] -}; -function clampCssByte(i) { - i = Math.round(i); - return i < 0 ? 0 : i > 255 ? 255 : i; -} -function clampCssAngle(i) { - i = Math.round(i); - return i < 0 ? 0 : i > 360 ? 360 : i; -} -function clampCssFloat(f) { - return f < 0 ? 0 : f > 1 ? 1 : f; -} -function parseCssInt(val) { - var str = val; - if (str.length && str.charAt(str.length - 1) === '%') { - return clampCssByte(parseFloat(str) / 100 * 255); - } - return clampCssByte(parseInt(str, 10)); -} -function parseCssFloat(val) { - var str = val; - if (str.length && str.charAt(str.length - 1) === '%') { - return clampCssFloat(parseFloat(str) / 100); - } - return clampCssFloat(parseFloat(str)); -} -function cssHueToRgb(m1, m2, h) { - if (h < 0) { - h += 1; - } - else if (h > 1) { - h -= 1; - } - if (h * 6 < 1) { - return m1 + (m2 - m1) * h * 6; - } - if (h * 2 < 1) { - return m2; - } - if (h * 3 < 2) { - return m1 + (m2 - m1) * (2 / 3 - h) * 6; - } - return m1; -} -function lerpNumber(a, b, p) { - return a + (b - a) * p; -} -function setRgba(out, r, g, b, a) { - out[0] = r; - out[1] = g; - out[2] = b; - out[3] = a; - return out; -} -function copyRgba(out, a) { - out[0] = a[0]; - out[1] = a[1]; - out[2] = a[2]; - out[3] = a[3]; - return out; -} -var colorCache = new _core_LRU_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"](20); -var lastRemovedArr = null; -function putToCache(colorStr, rgbaArr) { - if (lastRemovedArr) { - copyRgba(lastRemovedArr, rgbaArr); - } - lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice())); -} -function parse(colorStr, rgbaArr) { - if (!colorStr) { - return; - } - rgbaArr = rgbaArr || []; - var cached = colorCache.get(colorStr); - if (cached) { - return copyRgba(rgbaArr, cached); - } - colorStr = colorStr + ''; - var str = colorStr.replace(/ /g, '').toLowerCase(); - if (str in kCSSColorTable) { - copyRgba(rgbaArr, kCSSColorTable[str]); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - var strLen = str.length; - if (str.charAt(0) === '#') { - if (strLen === 4 || strLen === 5) { - var iv = parseInt(str.slice(1, 4), 16); - if (!(iv >= 0 && iv <= 0xfff)) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - setRgba(rgbaArr, ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), (iv & 0xf0) | ((iv & 0xf0) >> 4), (iv & 0xf) | ((iv & 0xf) << 4), strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - else if (strLen === 7 || strLen === 9) { - var iv = parseInt(str.slice(1, 7), 16); - if (!(iv >= 0 && iv <= 0xffffff)) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - setRgba(rgbaArr, (iv & 0xff0000) >> 16, (iv & 0xff00) >> 8, iv & 0xff, strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - return; - } - var op = str.indexOf('('); - var ep = str.indexOf(')'); - if (op !== -1 && ep + 1 === strLen) { - var fname = str.substr(0, op); - var params = str.substr(op + 1, ep - (op + 1)).split(','); - var alpha = 1; - switch (fname) { - case 'rgba': - if (params.length !== 4) { - return params.length === 3 - ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1) - : setRgba(rgbaArr, 0, 0, 0, 1); - } - alpha = parseCssFloat(params.pop()); - case 'rgb': - if (params.length >= 3) { - setRgba(rgbaArr, parseCssInt(params[0]), parseCssInt(params[1]), parseCssInt(params[2]), params.length === 3 ? alpha : parseCssFloat(params[3])); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - else { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - case 'hsla': - if (params.length !== 4) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - params[3] = parseCssFloat(params[3]); - hsla2rgba(params, rgbaArr); - putToCache(colorStr, rgbaArr); - return rgbaArr; - case 'hsl': - if (params.length !== 3) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - hsla2rgba(params, rgbaArr); - putToCache(colorStr, rgbaArr); - return rgbaArr; - default: - return; - } - } - setRgba(rgbaArr, 0, 0, 0, 1); - return; -} -function hsla2rgba(hsla, rgba) { - var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360; - var s = parseCssFloat(hsla[1]); - var l = parseCssFloat(hsla[2]); - var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; - var m1 = l * 2 - m2; - rgba = rgba || []; - setRgba(rgba, clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), clampCssByte(cssHueToRgb(m1, m2, h) * 255), clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), 1); - if (hsla.length === 4) { - rgba[3] = hsla[3]; - } - return rgba; -} -function rgba2hsla(rgba) { - if (!rgba) { - return; - } - var R = rgba[0] / 255; - var G = rgba[1] / 255; - var B = rgba[2] / 255; - var vMin = Math.min(R, G, B); - var vMax = Math.max(R, G, B); - var delta = vMax - vMin; - var L = (vMax + vMin) / 2; - var H; - var S; - if (delta === 0) { - H = 0; - S = 0; - } - else { - if (L < 0.5) { - S = delta / (vMax + vMin); - } - else { - S = delta / (2 - vMax - vMin); - } - var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta; - var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta; - var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta; - if (R === vMax) { - H = deltaB - deltaG; - } - else if (G === vMax) { - H = (1 / 3) + deltaR - deltaB; - } - else if (B === vMax) { - H = (2 / 3) + deltaG - deltaR; - } - if (H < 0) { - H += 1; - } - if (H > 1) { - H -= 1; - } - } - var hsla = [H * 360, S, L]; - if (rgba[3] != null) { - hsla.push(rgba[3]); - } - return hsla; -} -function lift(color, level) { - var colorArr = parse(color); - if (colorArr) { - for (var i = 0; i < 3; i++) { - if (level < 0) { - colorArr[i] = colorArr[i] * (1 - level) | 0; - } - else { - colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0; - } - if (colorArr[i] > 255) { - colorArr[i] = 255; - } - else if (colorArr[i] < 0) { - colorArr[i] = 0; - } - } - return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb'); - } -} -function toHex(color) { - var colorArr = parse(color); - if (colorArr) { - return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1); - } -} -function fastLerp(normalizedValue, colors, out) { - if (!(colors && colors.length) - || !(normalizedValue >= 0 && normalizedValue <= 1)) { - return; - } - out = out || []; - var value = normalizedValue * (colors.length - 1); - var leftIndex = Math.floor(value); - var rightIndex = Math.ceil(value); - var leftColor = colors[leftIndex]; - var rightColor = colors[rightIndex]; - var dv = value - leftIndex; - out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)); - out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)); - out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)); - out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)); - return out; -} -var fastMapToColor = fastLerp; -function lerp(normalizedValue, colors, fullOutput) { - if (!(colors && colors.length) - || !(normalizedValue >= 0 && normalizedValue <= 1)) { - return; - } - var value = normalizedValue * (colors.length - 1); - var leftIndex = Math.floor(value); - var rightIndex = Math.ceil(value); - var leftColor = parse(colors[leftIndex]); - var rightColor = parse(colors[rightIndex]); - var dv = value - leftIndex; - var color = stringify([ - clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), - clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), - clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), - clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)) - ], 'rgba'); - return fullOutput - ? { - color: color, - leftIndex: leftIndex, - rightIndex: rightIndex, - value: value - } - : color; -} -var mapToColor = lerp; -function modifyHSL(color, h, s, l) { - var colorArr = parse(color); - if (color) { - colorArr = rgba2hsla(colorArr); - h != null && (colorArr[0] = clampCssAngle(h)); - s != null && (colorArr[1] = parseCssFloat(s)); - l != null && (colorArr[2] = parseCssFloat(l)); - return stringify(hsla2rgba(colorArr), 'rgba'); - } -} -function modifyAlpha(color, alpha) { - var colorArr = parse(color); - if (colorArr && alpha != null) { - colorArr[3] = clampCssFloat(alpha); - return stringify(colorArr, 'rgba'); - } -} -function stringify(arrColor, type) { - if (!arrColor || !arrColor.length) { - return; - } - var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2]; - if (type === 'rgba' || type === 'hsva' || type === 'hsla') { - colorStr += ',' + arrColor[3]; - } - return type + '(' + colorStr + ')'; -} -function lum(color, backgroundLum) { - var arr = parse(color); - return arr - ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255 - + (1 - arr[3]) * backgroundLum - : 0; -} -function random() { - return stringify([ - Math.round(Math.random() * 255), - Math.round(Math.random() * 255), - Math.round(Math.random() * 255) - ], 'rgb'); -} -var liftedColorCache = new _core_LRU_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"](100); -function liftColor(color) { - if (Object(_core_util_js__WEBPACK_IMPORTED_MODULE_1__[/* isString */ "C"])(color)) { - var liftedColor = liftedColorCache.get(color); - if (!liftedColor) { - liftedColor = lift(color, -0.1); - liftedColorCache.put(color, liftedColor); - } - return liftedColor; - } - else if (Object(_core_util_js__WEBPACK_IMPORTED_MODULE_1__[/* isGradientObject */ "x"])(color)) { - var ret = Object(_core_util_js__WEBPACK_IMPORTED_MODULE_1__[/* extend */ "m"])({}, color); - ret.colorStops = Object(_core_util_js__WEBPACK_IMPORTED_MODULE_1__[/* map */ "H"])(color.colorStops, function (stop) { return ({ - offset: stop.offset, - color: lift(stop.color, -0.1) - }); }); - return ret; - } - return color; -} - - -/***/ }), - -/***/ "4324": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_managerData_vue_vue_type_style_index_0_id_7f3030b4_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("9412"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_managerData_vue_vue_type_style_index_0_id_7f3030b4_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_managerData_vue_vue_type_style_index_0_id_7f3030b4_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "45b9": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "4923": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_batch_modify_responsible_modal_vue_vue_type_style_index_0_id_68a161fe_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("b2b1"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_batch_modify_responsible_modal_vue_vue_type_style_index_0_id_68a161fe_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_batch_modify_responsible_modal_vue_vue_type_style_index_0_id_68a161fe_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "4d01": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "5273": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "5581": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_style_index_0_id_987dc30c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6e70"); -/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_style_index_0_id_987dc30c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_style_index_0_id_987dc30c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "59cd": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "5a0c": -/***/ (function(module, exports, __webpack_require__) { - -!function(t,e){ true?module.exports=e():undefined}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)= 0) { - width = fontSize * text.length; - } - else { - for (var i = 0; i < text.length; i++) { - var preCalcWidth = DEFAULT_TEXT_WIDTH_MAP[text[i]]; - width += preCalcWidth == null ? fontSize : (preCalcWidth * fontSize); - } - } - return { width: width }; - } - }; - })(), - loadImage: function (src, onload, onerror) { - var image = new Image(); - image.onload = onload; - image.onerror = onerror; - image.src = src; - return image; - } -}; -function setPlatformAPI(newPlatformApis) { - for (var key in platformApi) { - if (newPlatformApis[key]) { - platformApi[key] = newPlatformApis[key]; - } - } -} - - -/***/ }), - -/***/ "7a29": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return normalizeColor; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return isAroundZero; }); -/* unused harmony export round3 */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return round4; }); -/* unused harmony export round1 */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return getMatrixStr; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TEXT_ALIGN_TO_ANCHOR; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return adjustTextY; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return hasShadow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return getShadowKey; }); -/* unused harmony export getClipPathsKey */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return isImagePattern; }); -/* unused harmony export isSVGPattern */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return isPattern; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return isLinearGradient; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return isRadialGradient; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return isGradient; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return getIdURL; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return getPathPrecision; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return getSRTTransformString; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return encodeBase64; }); -/* harmony import */ var _core_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6d8b"); -/* harmony import */ var _tool_color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("41ef"); -/* harmony import */ var _core_env_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("22d1"); - - - -var mathRound = Math.round; -function normalizeColor(color) { - var opacity; - if (!color || color === 'transparent') { - color = 'none'; - } - else if (typeof color === 'string' && color.indexOf('rgba') > -1) { - var arr = Object(_tool_color_js__WEBPACK_IMPORTED_MODULE_1__[/* parse */ "h"])(color); - if (arr) { - color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')'; - opacity = arr[3]; - } - } - return { - color: color, - opacity: opacity == null ? 1 : opacity - }; -} -var EPSILON = 1e-4; -function isAroundZero(transform) { - return transform < EPSILON && transform > -EPSILON; -} -function round3(transform) { - return mathRound(transform * 1e3) / 1e3; -} -function round4(transform) { - return mathRound(transform * 1e4) / 1e4; -} -function round1(transform) { - return mathRound(transform * 10) / 10; -} -function getMatrixStr(m) { - return 'matrix(' - + round3(m[0]) + ',' - + round3(m[1]) + ',' - + round3(m[2]) + ',' - + round3(m[3]) + ',' - + round4(m[4]) + ',' - + round4(m[5]) - + ')'; -} -var TEXT_ALIGN_TO_ANCHOR = { - left: 'start', - right: 'end', - center: 'middle', - middle: 'middle' -}; -function adjustTextY(y, lineHeight, textBaseline) { - if (textBaseline === 'top') { - y += lineHeight / 2; - } - else if (textBaseline === 'bottom') { - y -= lineHeight / 2; - } - return y; -} -function hasShadow(style) { - return style - && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY); -} -function getShadowKey(displayable) { - var style = displayable.style; - var globalScale = displayable.getGlobalScale(); - return [ - style.shadowColor, - (style.shadowBlur || 0).toFixed(2), - (style.shadowOffsetX || 0).toFixed(2), - (style.shadowOffsetY || 0).toFixed(2), - globalScale[0], - globalScale[1] - ].join(','); -} -function getClipPathsKey(clipPaths) { - var key = []; - if (clipPaths) { - for (var i = 0; i < clipPaths.length; i++) { - var clipPath = clipPaths[i]; - key.push(clipPath.id); - } - } - return key.join(','); -} -function isImagePattern(val) { - return val && (!!val.image); -} -function isSVGPattern(val) { - return val && (!!val.svgElement); -} -function isPattern(val) { - return isImagePattern(val) || isSVGPattern(val); -} -function isLinearGradient(val) { - return val.type === 'linear'; -} -function isRadialGradient(val) { - return val.type === 'radial'; -} -function isGradient(val) { - return val && (val.type === 'linear' - || val.type === 'radial'); -} -function getIdURL(id) { - return "url(#" + id + ")"; -} -function getPathPrecision(el) { - var scale = el.getGlobalScale(); - var size = Math.max(scale[0], scale[1]); - return Math.max(Math.ceil(Math.log(size) / Math.log(10)), 1); -} -function getSRTTransformString(transform) { - var x = transform.x || 0; - var y = transform.y || 0; - var rotation = (transform.rotation || 0) * _core_util_js__WEBPACK_IMPORTED_MODULE_0__[/* RADIAN_TO_DEGREE */ "a"]; - var scaleX = Object(_core_util_js__WEBPACK_IMPORTED_MODULE_0__[/* retrieve2 */ "P"])(transform.scaleX, 1); - var scaleY = Object(_core_util_js__WEBPACK_IMPORTED_MODULE_0__[/* retrieve2 */ "P"])(transform.scaleY, 1); - var skewX = transform.skewX || 0; - var skewY = transform.skewY || 0; - var res = []; - if (x || y) { - res.push("translate(" + x + "px," + y + "px)"); - } - if (rotation) { - res.push("rotate(" + rotation + ")"); - } - if (scaleX !== 1 || scaleY !== 1) { - res.push("scale(" + scaleX + "," + scaleY + ")"); - } - if (skewX || skewY) { - res.push("skew(" + mathRound(skewX * _core_util_js__WEBPACK_IMPORTED_MODULE_0__[/* RADIAN_TO_DEGREE */ "a"]) + "deg, " + mathRound(skewY * _core_util_js__WEBPACK_IMPORTED_MODULE_0__[/* RADIAN_TO_DEGREE */ "a"]) + "deg)"); - } - return res.join(' '); -} -var encodeBase64 = (function () { - if (_core_env_js__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].hasGlobalWindow && Object(_core_util_js__WEBPACK_IMPORTED_MODULE_0__[/* isFunction */ "w"])(window.btoa)) { - return function (str) { - return window.btoa(unescape(encodeURIComponent(str))); - }; - } - if (typeof Buffer !== 'undefined') { - return function (str) { - return Buffer.from(str).toString('base64'); - }; - } - return function (str) { - if (false) {} - return null; - }; -})(); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("b639").Buffer)) - -/***/ }), - -/***/ "8612": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "8875": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// addapted from the document.currentScript polyfill by Adam Miller -// MIT license -// source: https://github.com/amiller-gh/currentScript-polyfill - -// added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505 - -(function (root, factory) { - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -}(typeof self !== 'undefined' ? self : this, function () { - function getCurrentScript () { - var descriptor = Object.getOwnPropertyDescriptor(document, 'currentScript') - // for chrome - if (!descriptor && 'currentScript' in document && document.currentScript) { - return document.currentScript - } - - // for other browsers with native support for currentScript - if (descriptor && descriptor.get !== getCurrentScript && document.currentScript) { - return document.currentScript - } - - // IE 8-10 support script readyState - // IE 11+ & Firefox support stack trace - try { - throw new Error(); - } - catch (err) { - // Find the second match for the "at" string to get file src url from stack. - var ieStackRegExp = /.*at [^(]*\((.*):(.+):(.+)\)$/ig, - ffStackRegExp = /@([^@]*):(\d+):(\d+)\s*$/ig, - stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack), - scriptLocation = (stackDetails && stackDetails[1]) || false, - line = (stackDetails && stackDetails[2]) || false, - currentLocation = document.location.href.replace(document.location.hash, ''), - pageSource, - inlineScriptSourceRegExp, - inlineScriptSource, - scripts = document.getElementsByTagName('script'); // Live NodeList collection - - if (scriptLocation === currentLocation) { - pageSource = document.documentElement.outerHTML; - inlineScriptSourceRegExp = new RegExp('(?:[^\\n]+?\\n){0,' + (line - 2) + '}[^<]* - - - - - diff --git a/apaas-custom-mydemo/static/custom/apaas-custom-mydemo/1.jpg b/apaas-custom-mydemo/static/custom/apaas-custom-mydemo/1.jpg deleted file mode 100644 index 74b40b9b920874b3a8f2e8474d6c0d7bb4c03ba9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11989 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 Gj{Pq)w&qs= diff --git a/src/api/demo/index.js b/src/api/demo/index.js index 04ec370..05d22fa 100644 --- a/src/api/demo/index.js +++ b/src/api/demo/index.js @@ -442,8 +442,24 @@ export default { url: '/custom/todoTaskPojo/selectByresPersonCompletedPage', method: 'post' }, + GET_MODEL_QUERT_TABLE_BY_VERSION: { + url: '/custom/dataEntryEngineModel/selectVersionByPage', + method: 'get' + }, GET_MODEL_QUERT_DETAIL: { url: '/custom/tcDataQuery/tcDataSelectByVersion', method: 'post' }, + DOWNLOAD_MANAGER_DATA: { + url: '/custom/responsible/export', + method: 'get' + }, + UPLOAD_MANAGER_DATA: { + url: '/custom/responsible/import', + method: 'post' + }, + DOWNLOAD_DEMO_MANAGER_DATA: { + url: '/custom/responsible/getImportTemplate', + method: 'get' + }, } diff --git a/src/custom/apaas-custom-mydemo/custom-page/approvalProgressDetail.vue b/src/custom/apaas-custom-mydemo/custom-page/approvalProgressDetail.vue index f5ee707..c60a57e 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/approvalProgressDetail.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/approvalProgressDetail.vue @@ -334,8 +334,8 @@ export default { result = 'PASS' status = 'PASS' } else if (node.result === '待审批') { - result = 'STAY' - status = 'STAY' + result = '待审批' + status = '待审批' } } diff --git a/src/custom/apaas-custom-mydemo/custom-page/batch-modify-responsible-modal.vue b/src/custom/apaas-custom-mydemo/custom-page/batch-modify-responsible-modal.vue index 2f710fc..4fcc4cc 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/batch-modify-responsible-modal.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/batch-modify-responsible-modal.vue @@ -9,7 +9,7 @@ :modalVisible.sync="visible" :wrapper-class="'batch-modify-responsible-modal'" :title="modalTitle" - :width="600" + :width="680" >
- 退回 + 拒绝
发起人 - {{ progressDetail.applicant || '--' }} + {{ progressDetail.applicant|| progressDetail.createBy || '--' }}
@@ -165,7 +165,6 @@ { @@ -684,6 +684,7 @@ export default { operator: '同意', comment: '' } + this.approvalFormData.comment = '同意' this.approvalDialogVisible = true // 清除表单验证 this.$nextTick(() => { @@ -695,9 +696,6 @@ export default { handleApprovalSubmit() { // 表单验证 this.$refs.approvalForm.validate((valid) => { - if (!valid) { - return false - } if (!this.detail || !this.detail.id) { this.$message.error('缺少审批数据') return diff --git a/src/custom/apaas-custom-mydemo/custom-page/managerData.vue b/src/custom/apaas-custom-mydemo/custom-page/managerData.vue index 4c293f9..a47adf4 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/managerData.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/managerData.vue @@ -2,9 +2,20 @@
- - 新增 - +
+ + 新增 + + + 导入 + + + 下载导入模板 + + + 导出 + +
+ + + +
+ 将文件拖到此处,或点击上传 +
+
+ 仅支持Excel模板文件 +
+
+ + + 取消 + + + 开始导入 + + +
@@ -255,7 +304,12 @@ export default { departmentTreeFilterText: '', // 部门树搜索文本 selectedDepartmentId: '', // 选中的部门ID selectedDepartmentName: '', // 选中的部门名称 - selectedDepartmentNode: null // 选中的部门节点 + selectedDepartmentNode: null, // 选中的部门节点 + // 导入相关 + importDialogVisible: false, // 导入弹窗显示状态 + importFileList: [], // 导入文件列表 + selectedImportFile: null, // 选中的导入文件 + importing: false // 导入中状态 } }, computed: { @@ -784,7 +838,10 @@ export default { }) .asyncErrorCatch((err) => { console.error('删除失败:', err) - this.$message.error('删除失败') + this.$message({ + type: 'error', + message: '删除失败' + }) }) }) .catch(() => { @@ -822,6 +879,298 @@ export default { } // 否则显示全部 return normalizedDept + }, + // 下载导入模板 + handleDownloadTemplate() { + const { url, method = 'get', headers = {} } = api.DOWNLOAD_DEMO_MANAGER_DATA || {} + const requestConfig = { + url, + method, + responseType: 'blob', + headers, + disableSuccessMsg: true + } + if (!requestConfig.url) { + this.$message({ + type: 'error', + message: '未配置下载地址' + }) + return + } + this.$axios(requestConfig) + .then((response) => { + const blobData = response.data + if (!blobData) { + this.$message({ + type: 'error', + message: '下载失败,文件内容为空' + }) + return + } + const contentType = + response.headers && + (response.headers['content-type'] || response.headers['Content-Type']) + if (contentType && contentType.includes('application/json')) { + try { + const reader = new FileReader() + reader.onload = () => { + try { + const errorData = JSON.parse(reader.result) + this.$message({ + type: 'error', + message: errorData.message || '下载失败' + }) + } catch (e) { + this.$message({ + type: 'error', + message: '下载失败' + }) + } + } + reader.readAsText(blobData) + } catch (err) { + console.error('解析下载失败响应异常:', err) + this.$message({ + type: 'error', + message: '下载失败' + }) + } + return + } + const disposition = + response.headers && + (response.headers['content-disposition'] || response.headers['Content-Disposition']) + let filename = '导入模板.xlsx' + if (disposition) { + const filenameMatch = /filename\*=UTF-8''([^;]+)|filename="?([^";]+)"?/i.exec( + disposition + ) + const matchedName = filenameMatch ? filenameMatch[1] || filenameMatch[2] : '' + if (matchedName) { + try { + filename = decodeURIComponent(matchedName) + } catch (err) { + filename = matchedName + } + } + } + const downloadUrl = window.URL.createObjectURL(blobData) + const link = document.createElement('a') + link.href = downloadUrl + link.download = filename + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + window.URL.revokeObjectURL(downloadUrl) + this.$message({ + type: 'success', + message: '下载成功' + }) + }) + .catch((err) => { + console.error('下载模板失败:', err) + this.$message({ + type: 'error', + message: '下载模板失败,请稍后重试' + }) + }) + }, + // 导出 + handleExport() { + const { url, method = 'get', headers = {} } = api.DOWNLOAD_MANAGER_DATA || {} + const requestConfig = { + url, + method, + responseType: 'blob', + headers, + disableSuccessMsg: true + } + if (!requestConfig.url) { + this.$message({ + type: 'error', + message: '未配置下载地址' + }) + return + } + this.$axios(requestConfig) + .then((response) => { + const blobData = response.data + if (!blobData) { + this.$message({ + type: 'error', + message: '导出失败,文件内容为空' + }) + return + } + const contentType = + response.headers && + (response.headers['content-type'] || response.headers['Content-Type']) + if (contentType && contentType.includes('application/json')) { + try { + const reader = new FileReader() + reader.onload = () => { + try { + const errorData = JSON.parse(reader.result) + this.$message({ + type: 'error', + message: errorData.message || '导出失败' + }) + } catch (e) { + this.$message({ + type: 'error', + message: '导出失败' + }) + } + } + reader.readAsText(blobData) + } catch (err) { + console.error('解析导出失败响应异常:', err) + this.$message({ + type: 'error', + message: '导出失败' + }) + } + return + } + const disposition = + response.headers && + (response.headers['content-disposition'] || response.headers['Content-Disposition']) + let filename = '责任人管理数据.xlsx' + if (disposition) { + const filenameMatch = /filename\*=UTF-8''([^;]+)|filename="?([^";]+)"?/i.exec( + disposition + ) + const matchedName = filenameMatch ? filenameMatch[1] || filenameMatch[2] : '' + if (matchedName) { + try { + filename = decodeURIComponent(matchedName) + } catch (err) { + filename = matchedName + } + } + } + const downloadUrl = window.URL.createObjectURL(blobData) + const link = document.createElement('a') + link.href = downloadUrl + link.download = filename + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + window.URL.revokeObjectURL(downloadUrl) + this.$message({ + type: 'success', + message: '导出成功' + }) + }) + .catch((err) => { + console.error('导出失败:', err) + this.$message({ + type: 'error', + message: '导出失败,请稍后重试' + }) + }) + }, + // 打开导入弹窗 + handleImport() { + this.importDialogVisible = true + this.importFileList = [] + this.selectedImportFile = null + }, + // 关闭导入弹窗 + handleImportDialogClose() { + this.importDialogVisible = false + this.importFileList = [] + this.selectedImportFile = null + this.importing = false + if (this.$refs.importUpload) { + this.$refs.importUpload.clearFiles() + } + }, + // 导入文件选择变化 + handleImportFileChange(file, fileList) { + // 验证文件类型 + const allowedTypes = ['.xls', '.xlsx'] + const fileName = file.name || '' + const fileExtension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase() + + if (!allowedTypes.includes(fileExtension)) { + this.$message({ + type: 'error', + message: `文件类型不支持,仅支持 ${allowedTypes.join('、')} 格式的文件` + }) + this.selectedImportFile = null + this.importFileList = [] + if (this.$refs.importUpload) { + this.$refs.importUpload.clearFiles() + } + return + } + + // 只保留最后一个文件 + this.selectedImportFile = file.raw || file + this.importFileList = fileList.slice(-1) + }, + // 移除导入文件 + handleImportFileRemove(file, fileList) { + this.selectedImportFile = null + this.importFileList = [] + }, + // 确认导入 + handleImportSubmit() { + if (!this.selectedImportFile) { + this.$message({ + type: 'warning', + message: '请先选择要导入的文件' + }) + return + } + + const formData = new FormData() + formData.append('file', this.selectedImportFile) + formData.append('userId', getUserId()) + + const request = { + ...api.UPLOAD_MANAGER_DATA, + params: formData, + disableSuccessMsg: true + } + + this.importing = true + // 显示全屏 loading 提示 + const loadingInstance = this.$loading({ + lock: true, + text: '正在导入数据,请稍候...', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + + this.$upload(request, null, false) + .then((resp) => { + console.log('导入成功:', resp) + loadingInstance.close() + this.$message({ + type: 'success', + message: '导入成功' + }) + this.handleImportDialogClose() + // 导入成功后刷新列表 + this.loadManagerData() + }) + .catch((err) => { + console.error('导入失败:', err) + loadingInstance.close() + this.$message({ + type: 'error', + message: err.message || '导入失败,请稍后重试' + }) + }) + .finally(() => { + // 确保 loading 在所有情况下都能关闭 + if (loadingInstance) { + loadingInstance.close() + } + this.importing = false + }) } } } @@ -920,4 +1269,13 @@ export default { border-radius: 4px; padding: 8px; } +.import-uploader { + width: 100%; + .el-upload { + width: 100%; + } + .el-upload-dragger { + width: 100%; + } +} diff --git a/src/custom/apaas-custom-mydemo/custom-page/model-query.vue b/src/custom/apaas-custom-mydemo/custom-page/model-query.vue index cd3bbfb..df40ba6 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/model-query.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/model-query.vue @@ -19,15 +19,21 @@ :value="item.value" /> - 更新常用 - 新增常用 + 更新常用 + 新增常用 已隐藏参数 - ({{ hiddenParams.length }}) - - - 下载对比数据 - + ({{ hiddenParams.length }}) + + + 下载对比数据 +
@@ -66,7 +72,6 @@ -
@@ -76,13 +81,11 @@ 子系统名称 零部件名称 参数名称 - +
-
{{ model.name }}
+
{{ model.name }} V{{ model.parameterVersion }}
- + - - - + +
@@ -189,7 +192,11 @@ 全部恢复 - + 恢复已选择
@@ -203,7 +210,12 @@ > - + @@ -282,6 +294,8 @@ export default { loadingModelDetail: false, // 加载机型详情中 // 所有机型的详情数据,格式:{ modelId: { "子系统名称": [{ parameterName, parameterType, minorVersion, ... }] } } allModelDetailData: {}, + // 所有机型的原始数据(从表格中选择的机型数据),格式:{ modelId: { modelName, productNumber, plate, platform, ... } } + allModelRawData: {}, // 隐藏的参数列表,存储参数的唯一标识:`${subsystemName}-${parameterType}-${parameterName}` hiddenParams: [], hiddenParamsDialogVisible: false, // 已隐藏参数弹窗显示状态 @@ -312,7 +326,11 @@ export default { const paramMap = new Map() // 用于去重,key: `${subsystemName}-${parameterName}`,value: { parameterName, subsystemName, parameterId, parameterType } // 获取选中的子系统名称和零部件名称(参数类型) - const { subsystemNames, parameterTypes, subsystemTypes } = this.getSelectedSubsystemsAndTypes() + const { + subsystemNames, + parameterTypes, + subsystemTypes + } = this.getSelectedSubsystemsAndTypes() // 如果没有选中任何节点,返回空数组 if (subsystemNames.length === 0) { @@ -320,7 +338,7 @@ export default { } // 从 allParametersData 中获取参数列表(根据子系统和参数名称) - Object.keys(this.allParametersData).forEach(subsystemName => { + Object.keys(this.allParametersData).forEach((subsystemName) => { // 检查该子系统是否在选中的列表中 const isSubsystemSelected = subsystemNames.includes(subsystemName) if (!isSubsystemSelected) { @@ -333,51 +351,65 @@ export default { } // 遍历该子系统下的所有参数 - paramList.forEach(item => { + paramList.forEach((item) => { const parameterName = item.parameterName || '' const parameterId = item.parameterId || '' const partsName = item.partsName || '' - const subsystem = item.subsystem || subsystemName if (parameterName) { // 确定用于匹配和显示的零部件名称(partsName) - // 如果 partsName 是 `/`,则使用 subsystem 作为显示名称 - const displayPartsName = partsName === '/' ? subsystem : partsName + // 如果 partsName 是 `/`、空白或没有,都视为零部件名称为 `/` 的参数 + // 显示时为空,但匹配时使用 `/` 进行匹配 + const normalizedPartsName = + !partsName || partsName.trim() === '' || partsName === '/' ? '/' : partsName + const displayPartsName = normalizedPartsName // 检查是否匹配选中的零部件名称 // 如果选中了父节点(子系统),则显示该子系统下的所有参数 // 如果选中了子节点(零部件),则只显示匹配的零部件参数 let shouldInclude = false - if (parameterTypes.length === 0) { - // 如果只选中了父节点(子系统),显示该子系统下的所有参数 + + // 检查该子系统是否被直接选中(作为父节点,没有子节点被选中) + const isSubsystemDirectlySelected = this.checkedKeys.some((nodeId) => { + const nodeInfo = this.nodeMap[nodeId] + return ( + nodeInfo && + nodeInfo.isParent && + nodeInfo.label === subsystemName && + // 确保该子系统没有子节点被选中 + !this.checkedKeys.some((childNodeId) => { + const childNodeInfo = this.nodeMap[childNodeId] + return ( + childNodeInfo && + !childNodeInfo.isParent && + childNodeInfo.parentLabel === subsystemName + ) + }) + ) + }) + + if (isSubsystemDirectlySelected) { + // 如果子系统被直接选中(没有子节点被选中),显示该子系统下的所有参数 shouldInclude = true } else { - // 如果选中了子节点(零部件),检查是否匹配 + // 如果有子节点被选中,只显示匹配的零部件参数 // 检查是否在 parameterTypes 中,或者是否在 subsystemTypes 中(格式:子系统名称-零部件名称) - shouldInclude = parameterTypes.includes(displayPartsName) || - subsystemTypes.includes(`${subsystemName}-${displayPartsName}`) + // 对于 partsName 是 `/`、空白或没有的情况,都匹配到 label 为 `/` 的节点 + shouldInclude = false - // 如果该参数不匹配任何已选中的子节点,检查该子系统是否被直接选中(作为父节点) - // 如果子系统被直接选中,且该参数的 partsName 是 '/',也应该包含 + // 检查是否在 parameterTypes 中(直接匹配零部件名称) + if (parameterTypes.includes(normalizedPartsName)) { + shouldInclude = true + } + + // 检查是否在 subsystemTypes 中(格式:子系统名称-零部件名称) if (!shouldInclude) { - // 检查该子系统是否被直接选中(作为父节点,没有子节点被选中) - const isSubsystemDirectlySelected = this.checkedKeys.some(nodeId => { - const nodeInfo = this.nodeMap[nodeId] - return nodeInfo && - nodeInfo.isParent && - nodeInfo.label === subsystemName && - // 确保该子系统没有子节点被选中(或者该子系统本身没有子节点) - !this.checkedKeys.some(childNodeId => { - const childNodeInfo = this.nodeMap[childNodeId] - return childNodeInfo && - !childNodeInfo.isParent && - childNodeInfo.parentLabel === subsystemName - }) - }) - - // 如果子系统被直接选中,且该参数的 partsName 是 '/',包含该参数 - if (isSubsystemDirectlySelected && (partsName === '/' || displayPartsName === subsystemName)) { - shouldInclude = true + // 对于零部件名称为 `/`、空白或没有的情况,匹配 subsystemTypes 中的 `子系统名称-/` + if (normalizedPartsName === '/') { + shouldInclude = subsystemTypes.includes(`${subsystemName}-/`) + } else { + // 对于其他零部件名称,直接匹配 + shouldInclude = subsystemTypes.includes(`${subsystemName}-${normalizedPartsName}`) } } } @@ -391,7 +423,7 @@ export default { subsystemName: subsystemName, parameterId: parameterId, partsName: partsName, // 保存原始的 partsName - displayPartsName: displayPartsName // 保存用于显示的零部件名称(如果是 `/` 则使用 subsystem) + displayPartsName: displayPartsName // 保存用于显示的零部件名称 }) } } @@ -399,9 +431,30 @@ export default { }) }) - // 转换为数组并排序(按子系统名称和参数名称),然后过滤掉隐藏的参数和不在常用配置中的参数 + // 转换为数组并排序(按左侧树的子系统顺序和参数名称),然后过滤掉隐藏的参数和不在常用配置中的参数 + // 获取左侧树中子系统的顺序 + const subsystemOrderMap = new Map() + if (this.treeData && Array.isArray(this.treeData)) { + this.treeData.forEach((node, index) => { + if (node.label) { + subsystemOrderMap.set(node.label, index) + } + }) + } + const allParams = Array.from(paramMap.values()).sort((a, b) => { if (a.subsystemName !== b.subsystemName) { + // 按照左侧树的子系统顺序排序 + const orderA = subsystemOrderMap.has(a.subsystemName) + ? subsystemOrderMap.get(a.subsystemName) + : 9999 + const orderB = subsystemOrderMap.has(b.subsystemName) + ? subsystemOrderMap.get(b.subsystemName) + : 9999 + if (orderA !== orderB) { + return orderA - orderB + } + // 如果树中没有找到,则按名称排序 return a.subsystemName.localeCompare(b.subsystemName) } return a.parameterName.localeCompare(b.parameterName) @@ -409,7 +462,7 @@ export default { // 过滤:只过滤隐藏的参数(hiddenParams 中已经包含了根据常用配置应该隐藏的参数) // 不再在这里对常用配置进行过滤,因为 hideMissingParamsByNode 已经处理了 - return allParams.filter(param => { + return allParams.filter((param) => { // 过滤隐藏的参数(使用新的key格式:subsystemName-parameterName) const key = `${param.subsystemName}-${param.parameterName}` if (this.hiddenParams.includes(key)) { @@ -425,19 +478,19 @@ export default { const hiddenKeysSet = new Set(this.hiddenParams) // 遍历所有参数数据,收集隐藏的参数信息 - Object.keys(this.allParametersData).forEach(subsystemName => { + Object.keys(this.allParametersData).forEach((subsystemName) => { const paramList = this.allParametersData[subsystemName] if (!Array.isArray(paramList)) { return } - paramList.forEach(item => { + paramList.forEach((item) => { const parameterName = item.parameterName || '' const key = `${subsystemName}-${parameterName}` // 如果该参数在隐藏列表中,且还没有添加到 hiddenList if (hiddenKeysSet.has(key)) { - const exists = hiddenList.some(p => p.key === key) + const exists = hiddenList.some((p) => p.key === key) if (!exists) { hiddenList.push({ subsystemName: subsystemName, @@ -459,25 +512,35 @@ export default { }, // 过滤机型列表(排除已添加的机型,并根据搜索文本过滤) filteredModelList() { - const addedModelIds = new Set(this.comparisonModels.map(m => m.id)) - let filtered = this.modelList.filter(model => { + // 使用 id+版本 作为唯一标识来判断是否已添加 + const addedModelKeys = new Set( + this.comparisonModels.map((m) => { + const version = m.parameterVersion || 1 + return `${m.id}_${version}` + }) + ) + let filtered = this.modelList.filter((model) => { const modelId = model.id || model.rowId || model.engineModelID - return !addedModelIds.has(modelId) + const version = model.parameterVersion || 1 + const modelKey = `${modelId}_${version}` + return !addedModelKeys.has(modelKey) }) // 根据搜索文本过滤(支持 modelName、productNumber、platform、series 四个字段) if (this.modelSearchText) { const searchText = this.modelSearchText.toLowerCase() - filtered = filtered.filter(model => { + filtered = filtered.filter((model) => { const modelName = (model.modelName || model.productFullName || '').toLowerCase() const productNumber = (model.productNumber || '').toLowerCase() const platform = (model.platform || '').toLowerCase() const series = (model.series || '').toLowerCase() // 只要任一字段包含搜索关键字,就显示该机型 - return modelName.includes(searchText) || - productNumber.includes(searchText) || - platform.includes(searchText) || - series.includes(searchText) + return ( + modelName.includes(searchText) || + productNumber.includes(searchText) || + platform.includes(searchText) || + series.includes(searchText) + ) }) } @@ -563,7 +626,42 @@ export default { return '-' } - const modelData = this.allModelDetailData[model.id] + // 使用 id+版本 作为唯一标识 + const parameterVersion = model.parameterVersion || 1 + const modelKey = `${model.id}_${parameterVersion}` + + // 如果是"整车参数"子系统,且是特定的参数,直接从机型原始数据中获取 + if (param.subsystemName === '整车参数') { + const paramNameToFieldMap = { + 产品型号: 'modelName', + 状态代号: 'productNumber', + 板块: 'plate', + 平台: 'platform', + 系列: 'series', + 细节市场: 'marketSegment', + 项目名称: 'projectName', + 项目编号: 'projectNumber', + 标准参数: 'parameterNum' + } + + const fieldName = paramNameToFieldMap[param.parameterName] + if (fieldName) { + // 从机型原始数据中获取(使用 id+版本 作为key) + const modelRawData = this.allModelRawData[modelKey] + if ( + modelRawData && + modelRawData[fieldName] !== undefined && + modelRawData[fieldName] !== null && + modelRawData[fieldName] !== '' + ) { + return modelRawData[fieldName] + } + return '-' + } + } + + // 对于非整车参数,从接口返回的数据中获取 parameterValue(使用 id+版本 作为key) + const modelData = this.allModelDetailData[modelKey] if (!modelData || typeof modelData !== 'object') { return '-' } @@ -578,21 +676,27 @@ export default { // 优先使用 parameterId 匹配,其次使用 parameterName 匹配 let matchedParam = null if (param.parameterId) { - matchedParam = subsystemData.find(item => { - return item.subsystemName === param.subsystemName && - item.parameterId === param.parameterId + matchedParam = subsystemData.find((item) => { + return ( + item.subsystemName === param.subsystemName && item.parameterId === param.parameterId + ) }) } if (!matchedParam) { - matchedParam = subsystemData.find(item => { - return item.subsystemName === param.subsystemName && - item.parameterName === param.parameterName + matchedParam = subsystemData.find((item) => { + return ( + item.subsystemName === param.subsystemName && item.parameterName === param.parameterName + ) }) } if (matchedParam) { - // 只返回 parameterValue - if (matchedParam.parameterValue !== undefined && matchedParam.parameterValue !== null && matchedParam.parameterValue !== '') { + // 返回接口返回的 parameterValue + if ( + matchedParam.parameterValue !== undefined && + matchedParam.parameterValue !== null && + matchedParam.parameterValue !== '' + ) { return matchedParam.parameterValue } } @@ -674,10 +778,24 @@ export default { // } this.loadingModelDetail = true + // 获取当前选中的树节点对应的 subsystemTypes + const { subsystemTypes } = this.getSelectedSubsystemsAndTypes() // 批量加载选中机型的详情 - const loadPromises = this.selectedModels.map(model => { + const loadPromises = this.selectedModels.map((model) => { const modelId = model.id || model.rowId || model.engineModelID - return this.loadModelDetail(modelId, model, model.parameterVersion,subsystemTypes) + // 保存机型的原始数据(从表格中选择的数据),用于"整车参数"的参数值赋值 + this.$set(this.allModelRawData, modelId, { + modelName: model.modelName || model.productFullName || '', + productNumber: model.productNumber || '', + plate: model.plate || '', + platform: model.platform || '', + series: model.series || '', + marketSegment: model.marketSegment || '', + projectName: model.projectName || '', + projectNumber: model.projectNumber || '', + parameterNum: model.parameterNum || '' + }) + return this.loadModelDetail(modelId, model, model.parameterVersion, subsystemTypes) }) Promise.all(loadPromises) @@ -713,51 +831,62 @@ export default { // 保存机型的详情数据,格式:{ "子系统名称": [{ parameterName, parameterType, minorVersion, ... }] } // 为每个参数项添加 subsystemName(如果还没有) const processedData = {} - Object.keys(resp.data).forEach(subsystemName => { + Object.keys(resp.data).forEach((subsystemName) => { const paramList = resp.data[subsystemName] if (Array.isArray(paramList)) { - processedData[subsystemName] = paramList.map(item => ({ + processedData[subsystemName] = paramList.map((item) => ({ ...item, subsystemName: item.subsystemName || subsystemName })) } }) + // 使用 id+版本 作为唯一标识 + const modelKey = `${modelId}_${parameterVersion}` // 保存到 allModelDetailData(合并数据,而不是覆盖) - const existingData = this.allModelDetailData[modelId] || {} + const existingData = this.allModelDetailData[modelKey] || {} // 合并新旧数据,新数据覆盖旧数据 const mergedData = { ...existingData, ...processedData } - this.$set(this.allModelDetailData, modelId, mergedData) + this.$set(this.allModelDetailData, modelKey, mergedData) // 如果已选择常用配置,自动隐藏不在范围内的参数 if (this.currentCommonConfig) { // 不再调用 hideParamsNotInCommon,让 displayParams 自动过滤 } - // 检查机型是否已存在,如果不存在才添加 - const existingModel = this.comparisonModels.find(m => m.id === modelId) + // 检查机型是否已存在(使用 id+版本 判断),如果不存在才添加 + const existingModel = this.comparisonModels.find((m) => { + const mVersion = m.parameterVersion || 1 + return m.id === modelId && mVersion === parameterVersion + }) if (!existingModel) { // 将机型添加到对比列表 const newModel = { id: modelId, name: modelData.modelName || modelData.productFullName || '未知机型', - image: modelData.image || modelData.imageUrl || '' + image: modelData.image || modelData.imageUrl || '', + parameterVersion: parameterVersion } this.comparisonModels.push(newModel) } resolve() } else { // 即使没有数据,也保存空数据(参数为空) - const existingData = this.allModelDetailData[modelId] || {} - this.$set(this.allModelDetailData, modelId, existingData) + const modelKey = `${modelId}_${parameterVersion}` + const existingData = this.allModelDetailData[modelKey] || {} + this.$set(this.allModelDetailData, modelKey, existingData) - // 检查机型是否已存在,如果不存在才添加 - const existingModel = this.comparisonModels.find(m => m.id === modelId) + // 检查机型是否已存在(使用 id+版本 判断),如果不存在才添加 + const existingModel = this.comparisonModels.find((m) => { + const mVersion = m.parameterVersion || 1 + return m.id === modelId && mVersion === parameterVersion + }) if (!existingModel) { const newModel = { id: modelId, name: modelData.modelName || modelData.productFullName || '未知机型', - image: modelData.image || modelData.imageUrl || '' + image: modelData.image || modelData.imageUrl || '', + parameterVersion: parameterVersion || modelData.parameterVersion || 1 } this.comparisonModels.push(newModel) } @@ -766,17 +895,23 @@ export default { }) .asyncErrorCatch((err) => { console.error('获取机型详情失败:', err) + // 使用 id+版本 作为唯一标识 + const modelKey = `${modelId}_${parameterVersion}` // 即使失败,也保存空数据(参数为空) - const existingData = this.allModelDetailData[modelId] || {} - this.$set(this.allModelDetailData, modelId, existingData) + const existingData = this.allModelDetailData[modelKey] || {} + this.$set(this.allModelDetailData, modelKey, existingData) - // 检查机型是否已存在,如果不存在才添加 - const existingModel = this.comparisonModels.find(m => m.id === modelId) + // 检查机型是否已存在(使用 id+版本 判断),如果不存在才添加 + const existingModel = this.comparisonModels.find((m) => { + const mVersion = m.parameterVersion || 1 + return m.id === modelId && mVersion === parameterVersion + }) if (!existingModel) { const newModel = { id: modelId, name: modelData.modelName || modelData.productFullName || '未知机型', - image: modelData.image || modelData.imageUrl || '' + image: modelData.image || modelData.imageUrl || '', + parameterVersion: parameterVersion || modelData.parameterVersion || 1 } this.comparisonModels.push(newModel) } @@ -792,7 +927,11 @@ export default { } // 获取当前选中的树节点对应的 subsystemTypes - const { subsystemNames, parameterTypes, subsystemTypes } = this.getSelectedSubsystemsAndTypes() + const { + subsystemNames, + parameterTypes, + subsystemTypes + } = this.getSelectedSubsystemsAndTypes() // 如果没有选中任何节点,不加载数据 if (subsystemNames.length === 0 && parameterTypes.length === 0) { @@ -800,21 +939,21 @@ export default { } // 对于每个已添加的机型,重新加载参数数据 - const loadPromises = this.comparisonModels.map(model => { + const loadPromises = this.comparisonModels.map((model) => { const modelId = model.id + const parameterVersion = model.parameterVersion || 1 if (!modelId) { return Promise.resolve() } // 从 modelList 中查找对应的机型数据,如果找不到则使用 model 本身 - let modelData = this.modelList.find(m => - (m.id || m.rowId || m.engineModelID) === modelId - ) + let modelData = this.modelList.find((m) => (m.id || m.rowId || m.engineModelID) === modelId) if (!modelData) { // 如果 modelList 中找不到,使用 comparisonModels 中的 model 数据 modelData = { id: modelId, modelName: model.name, + parameterVersion: parameterVersion, productFullName: model.name, image: model.image, imageUrl: model.image @@ -822,7 +961,7 @@ export default { } // 重新加载该机型的参数数据 - return this.loadModelDetail(modelId, modelData, subsystemTypes) + return this.loadModelDetail(modelId, modelData, parameterVersion, subsystemTypes) }) // 等待所有机型数据加载完成 @@ -849,7 +988,7 @@ export default { paramList.forEach((item) => { const parameterName = item.parameterName || '' // 根据参数名称找到对应的 paramMap key - const paramKey = Object.keys(this.paramMap).find(key => { + const paramKey = Object.keys(this.paramMap).find((key) => { return this.paramMap[key].label === parameterName }) if (paramKey && item.parameterValue !== undefined && item.parameterValue !== null) { @@ -872,7 +1011,7 @@ export default { list.forEach((item) => { const parameterName = item.parameterName || '' // 根据参数名称找到对应的 paramMap key - const paramKey = Object.keys(this.paramMap).find(key => { + const paramKey = Object.keys(this.paramMap).find((key) => { return this.paramMap[key].label === parameterName }) // 机型列展示的参数值使用 minorVersion @@ -930,7 +1069,7 @@ export default { }) // 对于只选择了父节点(子系统)但没有选择子节点的情况,添加 `子系统-/` - subsystemNames.forEach(subsystemName => { + subsystemNames.forEach((subsystemName) => { if (!subsystemsWithChildren.has(subsystemName)) { const subsystemTypeStr = `${subsystemName}-/` if (!processedSubsystemTypes.has(subsystemTypeStr)) { @@ -947,6 +1086,8 @@ export default { if (removedModel && removedModel.id) { // 从 allModelDetailData 中删除该机型的数据 this.$delete(this.allModelDetailData, removedModel.id) + // 从 allModelRawData 中删除该机型的原始数据 + this.$delete(this.allModelRawData, removedModel.id) } this.comparisonModels.splice(index, 1) }, @@ -972,7 +1113,7 @@ export default { favoritesList = resp.data.data } - this.favoritesOptions = favoritesList.map(item => ({ + this.favoritesOptions = favoritesList.map((item) => ({ label: item.commonName || item.name || '', value: item.commonId || item.commonName || item.name || '', data: item // 保存完整数据,用于后续使用 @@ -1007,9 +1148,11 @@ export default { } // 查找选中的常用配置(优先使用 commonId 匹配,其次使用 commonName) - const selectedFavorite = this.favoritesOptions.find(item => { - return item.value === value || - (item.data && (item.data.commonId === value || item.data.commonName === value)) + const selectedFavorite = this.favoritesOptions.find((item) => { + return ( + item.value === value || + (item.data && (item.data.commonId === value || item.data.commonName === value)) + ) }) if (!selectedFavorite || !selectedFavorite.data) { this.$message({ @@ -1023,7 +1166,11 @@ export default { this.currentCommonConfig = selectedFavorite.data // 1. 先根据常用配置选中树节点 - if (this.allTreeData && this.allTreeData.length > 0 && Object.keys(this.allNodeMap).length > 0) { + if ( + this.allTreeData && + this.allTreeData.length > 0 && + Object.keys(this.allNodeMap).length > 0 + ) { this.updateCheckedKeysByDisplayParams() } else { // 如果树数据还没有加载,等待加载完成后再更新 @@ -1041,9 +1188,12 @@ export default { // 下载 handleDownloadComparisonData() { // 获取已添加在右侧的机型ID - const allSelectedIds = this.comparisonModels.map(item => item.id).filter(id => id) + const allSelectedIds = this.comparisonModels.map((item) => item.id).filter((id) => id) if (allSelectedIds.length === 0) { - this.$message.warning('请先添加机型') + this.$message({ + type: 'warning', + message: '请先添加机型' + }) return } // 获取选中的参数类型 @@ -1138,25 +1288,25 @@ export default { // 格式:{ subsystemName: Set } const subsystemPartsMap = new Map() - this.currentCommonConfig.subsystems.forEach(subsystemConfig => { + this.currentCommonConfig.subsystems.forEach((subsystemConfig) => { const subsystemName = subsystemConfig.subsystem if (!subsystemPartsMap.has(subsystemName)) { subsystemPartsMap.set(subsystemName, new Set()) } // 遍历常用配置中的参数,根据 partsName 统计零部件 - subsystemConfig.parameters.forEach(commonParam => { + subsystemConfig.parameters.forEach((commonParam) => { // 直接使用常用配置中的 partsName 字段 if (commonParam.partsName) { const partsName = commonParam.partsName // 如果 partsName 是 '/',表示选中整个子系统,使用子系统名称作为标识 - const displayPartsName = partsName === '/' ? subsystemName : partsName + const displayPartsName = partsName subsystemPartsMap.get(subsystemName).add(displayPartsName) } else { // 如果没有 partsName,尝试从 allParametersData 中查找匹配的参数 const subsystemData = this.allParametersData[subsystemName] if (Array.isArray(subsystemData)) { - const matchedParam = subsystemData.find(param => { + const matchedParam = subsystemData.find((param) => { if (commonParam.parameterId) { return param.parameterId === commonParam.parameterId } else if (commonParam.parameterName) { @@ -1168,7 +1318,7 @@ export default { if (matchedParam && matchedParam.partsName) { // 获取零部件名称(partsName),如果是 `/` 则使用子系统名称 const partsName = matchedParam.partsName - const displayPartsName = partsName === '/' ? subsystemName : partsName + const displayPartsName = partsName subsystemPartsMap.get(subsystemName).add(displayPartsName) } } @@ -1180,12 +1330,16 @@ export default { const keysToCheck = [] // 遍历完整的树数据 - this.allTreeData.forEach(node => { + this.allTreeData.forEach((node) => { // 检查是否是常用中包含的子系统(一级树节点) // 使用精确匹配和包含匹配两种方式 let matchedSubsystemName = null for (const [subsystemName] of subsystemPartsMap) { - if (node.label === subsystemName || node.label.includes(subsystemName) || subsystemName.includes(node.label)) { + if ( + node.label === subsystemName || + node.label.includes(subsystemName) || + subsystemName.includes(node.label) + ) { matchedSubsystemName = subsystemName break } @@ -1207,10 +1361,14 @@ export default { if (node.children && Array.isArray(node.children)) { if (partsNames.size > 0) { // 如果常用中指定了具体的零部件名称,只选中这些零部件节点(二级树节点) - node.children.forEach(child => { + node.children.forEach((child) => { // 检查子节点的 label 是否在 partsNames 中(支持精确匹配和包含匹配) for (const partsName of partsNames) { - if (child.label === partsName || child.label.includes(partsName) || partsName.includes(child.label)) { + if ( + child.label === partsName || + child.label.includes(partsName) || + partsName.includes(child.label) + ) { keysToCheck.push(child.id) break } @@ -1227,10 +1385,14 @@ export default { this.checkedKeys = keysToCheck // 设置默认展开的节点(包含所有一级节点和选中的二级节点) const expandedKeys = [] - this.allTreeData.forEach(node => { + this.allTreeData.forEach((node) => { // 检查是否是常用中包含的子系统 for (const [subsystemName] of subsystemPartsMap) { - if (node.label === subsystemName || node.label.includes(subsystemName) || subsystemName.includes(node.label)) { + if ( + node.label === subsystemName || + node.label.includes(subsystemName) || + subsystemName.includes(node.label) + ) { expandedKeys.push(node.id) break } @@ -1278,7 +1440,11 @@ export default { // 获取当前显示的参数(根据树节点和全部参数,不受常用配置影响) // 这里需要获取当前的 displayParams,但 displayParams 是一个 computed 属性 // 它会根据 hiddenParams 过滤,所以我们需要手动计算所有应该显示的参数 - const { subsystemNames, parameterTypes, subsystemTypes } = this.getSelectedSubsystemsAndTypes() + const { + subsystemNames, + parameterTypes, + subsystemTypes + } = this.getSelectedSubsystemsAndTypes() // 如果没有选中任何节点,不隐藏参数 if (subsystemNames.length === 0 && parameterTypes.length === 0) { @@ -1288,10 +1454,10 @@ export default { // 构建常用配置中的参数映射:subsystem -> Set // parameterKey 格式:优先使用 parameterId,如果没有则使用 parameterName const commonParamsMap = new Map() - this.currentCommonConfig.subsystems.forEach(subsystemConfig => { + this.currentCommonConfig.subsystems.forEach((subsystemConfig) => { const subsystemName = subsystemConfig.subsystem const paramKeys = new Set() - subsystemConfig.parameters.forEach(p => { + subsystemConfig.parameters.forEach((p) => { // 优先使用 parameterId,如果没有则使用 parameterName const key = p.parameterId || p.parameterName if (key) { @@ -1303,20 +1469,21 @@ export default { // 获取当前根据树节点应该显示的所有参数(不受常用配置影响) const currentDisplayParams = [] - subsystemNames.forEach(subsystemName => { + subsystemNames.forEach((subsystemName) => { const paramList = this.allParametersData[subsystemName] if (!Array.isArray(paramList) || paramList.length === 0) { return } - paramList.forEach(item => { + paramList.forEach((item) => { const parameterName = item.parameterName || '' const parameterId = item.parameterId || '' const partsName = item.partsName || '' - const subsystem = item.subsystem || subsystemName - // 确定用于匹配和显示的零部件名称(partsName) - const displayPartsName = partsName === '/' ? subsystem : partsName + // 确定用于匹配的零部件名称(partsName) + // 如果 partsName 是 `/`、空白或没有,都视为零部件名称为 `/` 的参数 + const normalizedPartsName = + !partsName || partsName.trim() === '' || partsName === '/' ? '/' : partsName // 检查该参数是否在当前选中的树节点下 let isInSelectedNodes = false @@ -1325,25 +1492,33 @@ export default { isInSelectedNodes = true } else { // 如果选中了子节点(零部件),检查是否匹配 - isInSelectedNodes = parameterTypes.includes(displayPartsName) || - subsystemTypes.includes(`${subsystemName}-${displayPartsName}`) + // 对于 partsName 是 `/`、空白或没有的情况,都匹配到 label 为 `/` 的节点 + isInSelectedNodes = + parameterTypes.includes(normalizedPartsName) || + subsystemTypes.includes(`${subsystemName}-${normalizedPartsName}`) || + subsystemTypes.includes(`${subsystemName}-/`) // 如果该参数不匹配任何已选中的子节点,检查该子系统是否被直接选中(作为父节点) if (!isInSelectedNodes) { - const isSubsystemDirectlySelected = this.checkedKeys.some(nodeId => { + const isSubsystemDirectlySelected = this.checkedKeys.some((nodeId) => { const nodeInfo = this.nodeMap[nodeId] - return nodeInfo && - nodeInfo.isParent && - nodeInfo.label === subsystemName && - !this.checkedKeys.some(childNodeId => { - const childNodeInfo = this.nodeMap[childNodeId] - return childNodeInfo && - !childNodeInfo.isParent && - childNodeInfo.parentLabel === subsystemName - }) + return ( + nodeInfo && + nodeInfo.isParent && + nodeInfo.label === subsystemName && + !this.checkedKeys.some((childNodeId) => { + const childNodeInfo = this.nodeMap[childNodeId] + return ( + childNodeInfo && + !childNodeInfo.isParent && + childNodeInfo.parentLabel === subsystemName + ) + }) + ) }) - if (isSubsystemDirectlySelected && (partsName === '/' || displayPartsName === subsystemName)) { + // 如果子系统被直接选中,且该参数的 partsName 是 `/`、空白或没有,包含该参数 + if (isSubsystemDirectlySelected && normalizedPartsName === '/') { isInSelectedNodes = true } } @@ -1363,7 +1538,7 @@ export default { // 比较当前显示的参数和常用配置中的参数,找出不在常用中的参数 const paramsToHide = [] - currentDisplayParams.forEach(param => { + currentDisplayParams.forEach((param) => { const subsystemName = param.subsystemName const parameterName = param.parameterName const parameterId = param.parameterId @@ -1399,25 +1574,21 @@ export default { // 构建常用配置中的参数映射:subsystem -> { parameterIds: Set, parameterNames: Set } const commonParamsMap = new Map() - this.currentCommonConfig.subsystems.forEach(subsystemConfig => { + this.currentCommonConfig.subsystems.forEach((subsystemConfig) => { const subsystemName = subsystemConfig.subsystem - const parameterIds = new Set( - subsystemConfig.parameters.map(p => p.parameterId) - ) - const parameterNames = new Set( - subsystemConfig.parameters.map(p => p.parameterName) - ) + const parameterIds = new Set(subsystemConfig.parameters.map((p) => p.parameterId)) + const parameterNames = new Set(subsystemConfig.parameters.map((p) => p.parameterName)) commonParamsMap.set(subsystemName, { parameterIds, parameterNames }) }) // 遍历所有参数数据,找出不在常用配置中的参数并隐藏 const paramsToHide = [] - Object.keys(this.allParametersData).forEach(subsystemName => { + Object.keys(this.allParametersData).forEach((subsystemName) => { // 如果该子系统不在常用配置中,隐藏该子系统下的所有参数 if (!commonParamsMap.has(subsystemName)) { const paramList = this.allParametersData[subsystemName] if (Array.isArray(paramList)) { - paramList.forEach(item => { + paramList.forEach((item) => { const parameterName = item.parameterName || '' const key = `${subsystemName}-${parameterName}` if (!paramsToHide.includes(key)) { @@ -1432,7 +1603,7 @@ export default { const commonParams = commonParamsMap.get(subsystemName) const paramList = this.allParametersData[subsystemName] if (Array.isArray(paramList)) { - paramList.forEach(item => { + paramList.forEach((item) => { const parameterName = item.parameterName || '' const parameterId = item.parameterId || '' @@ -1453,7 +1624,7 @@ export default { }) // 将不在常用配置中的参数添加到隐藏列表 - paramsToHide.forEach(key => { + paramsToHide.forEach((key) => { if (!this.hiddenParams.includes(key)) { this.hiddenParams.push(key) } @@ -1491,8 +1662,8 @@ export default { // 构建参数ID数组 let parameters = [] - saveData.subsystems.forEach(item => { - item.parameters.forEach(param => { + saveData.subsystems.forEach((item) => { + item.parameters.forEach((param) => { parameters.push(param.parameterId) }) }) @@ -1581,8 +1752,8 @@ export default { return } let parameters = [] - saveData.subsystems.forEach(item => { - item.parameters.forEach(param => { + saveData.subsystems.forEach((item) => { + item.parameters.forEach((param) => { parameters.push(param.parameterId) }) }) @@ -1622,7 +1793,7 @@ export default { const subsystemMap = new Map() // key: subsystemName, value: { subsystem, parameters: [] } // 遍历当前展示的参数 - this.displayParams.forEach(param => { + this.displayParams.forEach((param) => { const subsystemName = param.subsystemName // 如果该子系统还没有在 map 中,创建它 @@ -1640,7 +1811,7 @@ export default { if (!parameterId && this.allParametersData[subsystemName]) { const paramList = this.allParametersData[subsystemName] if (Array.isArray(paramList)) { - const matchedParam = paramList.find(item => { + const matchedParam = paramList.find((item) => { return item.parameterName === param.parameterName }) if (matchedParam && matchedParam.parameterId) { @@ -1652,7 +1823,7 @@ export default { // 如果找到了 parameterId,添加到参数列表(去重) if (parameterId) { const subsystemData = subsystemMap.get(subsystemName) - const exists = subsystemData.parameters.some(p => p.parameterId === parameterId) + const exists = subsystemData.parameters.some((p) => p.parameterId === parameterId) if (!exists) { subsystemData.parameters.push({ parameterId: parameterId, @@ -1662,7 +1833,9 @@ export default { } else { // 如果找不到 parameterId,使用 parameterName(去重) const subsystemData = subsystemMap.get(subsystemName) - const exists = subsystemData.parameters.some(p => p.parameterName === param.parameterName) + const exists = subsystemData.parameters.some( + (p) => p.parameterName === param.parameterName + ) if (!exists) { subsystemData.parameters.push({ parameterId: '', // 如果没有 parameterId,留空 @@ -1713,7 +1886,7 @@ export default { // 处理表格选择变化 handleHiddenParamsSelectionChange(selection) { // 将选中的行转换为 key 数组 - this.selectedParamsToRestore = selection.map(row => { + this.selectedParamsToRestore = selection.map((row) => { return row.key || `${row.subsystemName}-${row.parameterName}` }) }, @@ -1764,7 +1937,7 @@ export default { } // 从 hiddenParams 中移除选中的参数 - keysToRestore.forEach(key => { + keysToRestore.forEach((key) => { const index = this.hiddenParams.indexOf(key) if (index > -1) { this.hiddenParams.splice(index, 1) @@ -1793,53 +1966,68 @@ export default { this.$request(request) .asyncThen((resp) => { // 处理接口返回的数据 + let treeDataResult = [] if (resp && resp.data) { // 接口返回的是对象格式:{ "父节点名": ["子节点1", "子节点2", ...] } const data = resp.data - let treeDataResult = [] if (typeof data === 'object' && !Array.isArray(data)) { treeDataResult = this.convertObjectToTree(data) } else if (Array.isArray(data)) { // 如果已经是数组格式,尝试格式化 treeDataResult = this.formatTreeData(data) - } else { - treeDataResult = [] } - - // 保存完整的树数据(未过滤) - this.allTreeData = JSON.parse(JSON.stringify(treeDataResult)) - this.allNodeMap = JSON.parse(JSON.stringify(this.nodeMap)) - - // 始终使用完整的树数据 - this.treeData = JSON.parse(JSON.stringify(this.allTreeData)) - - // 加载所有参数数据(先加载参数数据,再根据常用配置更新选中状态) - this.loadAllParametersData().then(() => { - // 如果已选择常用配置,根据可显示的参数更新选中状态 - if (this.currentCommonConfig) { - // 1. 先根据常用配置选中树节点 - this.$nextTick(() => { - this.updateCheckedKeysByDisplayParams() - // 2. 然后比较当前显示的参数和常用配置中的参数,找出不在常用中的参数,隐藏它们 - this.$nextTick(() => { - this.hideParamsNotInCommonByDisplayParams() - }) - }) - } else { - // 否则全选 - const allKeys = this.getAllNodeKeys(this.treeData) - this.defaultExpandedKeys = allKeys - this.checkedKeys = allKeys - // 使用 $nextTick 确保树组件渲染完成后再设置选中状态 - this.$nextTick(() => { - // 使用 setCheckedKeys 方法设置全选状态 - if (this.$refs.paramTree && allKeys.length > 0) { - this.$refs.paramTree.setCheckedKeys(allKeys) - } - }) - } - }) } + + // 创建默认的"整车参数"子系统节点(放在第一位) + const wholeEngineParamsNode = { + id: 'parent-whole-engine-params', + label: '整车参数', + tip: '', + children: [] // 整车参数没有子节点(零部件名称) + } + // 保存"整车参数"节点映射 + this.nodeMap['parent-whole-engine-params'] = { + label: '整车参数', + parentLabel: null, + isParent: true + } + + // 将"整车参数"节点放在第一位,其他节点放在后面 + treeDataResult = [wholeEngineParamsNode, ...treeDataResult] + + // 保存完整的树数据(未过滤) + this.allTreeData = JSON.parse(JSON.stringify(treeDataResult)) + this.allNodeMap = JSON.parse(JSON.stringify(this.nodeMap)) + + // 始终使用完整的树数据 + this.treeData = JSON.parse(JSON.stringify(this.allTreeData)) + + // 加载所有参数数据(先加载参数数据,再根据常用配置更新选中状态) + this.loadAllParametersData().then(() => { + // 如果已选择常用配置,根据可显示的参数更新选中状态 + if (this.currentCommonConfig) { + // 1. 先根据常用配置选中树节点 + this.$nextTick(() => { + this.updateCheckedKeysByDisplayParams() + // 2. 然后比较当前显示的参数和常用配置中的参数,找出不在常用中的参数,隐藏它们 + this.$nextTick(() => { + this.hideParamsNotInCommonByDisplayParams() + }) + }) + } else { + // 否则全选 + const allKeys = this.getAllNodeKeys(this.treeData) + this.defaultExpandedKeys = allKeys + this.checkedKeys = allKeys + // 使用 $nextTick 确保树组件渲染完成后再设置选中状态 + this.$nextTick(() => { + // 使用 setCheckedKeys 方法设置全选状态 + if (this.$refs.paramTree && allKeys.length > 0) { + this.$refs.paramTree.setCheckedKeys(allKeys) + } + }) + } + }) }) .asyncErrorCatch((err) => { console.error('获取参数列表失败:', err) @@ -1854,41 +2042,87 @@ export default { } return this.$request(request) .asyncThen((resp) => { + // 处理返回的数据,将数组格式转换为对象格式 + // 输入格式: [{ subsystem: "子系统名称", parameters: [{ parameterId, parameterName, partsName }] }] + // 输出格式: { "子系统名称": [{ parameterId, parameterName, partsName, subsystem }] } + const result = {} + + // 先添加默认的"整车参数"子系统的参数列表 + result['整车参数'] = [ + { parameterName: '状态代号', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '产品型号', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '板块', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '平台', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '系列', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '细分市场', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '项目名称', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '项目编号', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '排放', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '燃烧类型', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '排量', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '标准参数', parameterId: '', partsName: '/', subsystem: '整车参数' } + ] + + // 然后添加接口返回的其他子系统参数 if (resp && resp.data) { - // 处理返回的数据,将数组格式转换为对象格式 - // 输入格式: [{ subsystem: "子系统名称", parameters: [{ parameterId, parameterName, partsName }] }] - // 输出格式: { "子系统名称": [{ parameterId, parameterName, partsName, subsystem }] } - const result = {} if (Array.isArray(resp.data)) { - resp.data.forEach(item => { + resp.data.forEach((item) => { if (item.subsystem && Array.isArray(item.parameters)) { - result[item.subsystem] = item.parameters.map(param => ({ - parameterId: param.parameterId || '', - parameterName: param.parameterName || '', - partsName: param.partsName || '', - subsystem: item.subsystem // 保存子系统名称 - })) + // 如果接口返回的数据中已经有"整车参数",则合并参数列表 + if (item.subsystem === '整车参数') { + // 合并参数,避免重复 + const existingParams = result['整车参数'] || [] + const existingParamNames = new Set(existingParams.map((p) => p.parameterName)) + item.parameters.forEach((param) => { + if (!existingParamNames.has(param.parameterName)) { + result['整车参数'].push({ + parameterId: param.parameterId || '', + parameterName: param.parameterName || '', + partsName: param.partsName || '/', + subsystem: '整车参数' + }) + } + }) + } else { + result[item.subsystem] = item.parameters.map((param) => ({ + parameterId: param.parameterId || '', + parameterName: param.parameterName || '', + partsName: param.partsName || '', + subsystem: item.subsystem // 保存子系统名称 + })) + } } }) } - this.allParametersData = result - // 首次进入页面时,保存完整的参数数据 - this.savedAllParametersData = JSON.parse(JSON.stringify(result)) - // 参数数据加载完成后,调用获取常用列表 - this.loadFavoritesList() - } else { - this.allParametersData = {} - // 首次进入页面时,保存完整的参数数据(即使是空对象) - this.savedAllParametersData = {} - // 即使没有数据,也调用获取常用列表 - this.loadFavoritesList() } + + this.allParametersData = result + // 首次进入页面时,保存完整的参数数据 + this.savedAllParametersData = JSON.parse(JSON.stringify(result)) + // 参数数据加载完成后,调用获取常用列表 + this.loadFavoritesList() }) .asyncErrorCatch((err) => { console.error('获取所有参数数据失败:', err) - this.allParametersData = {} + // 即使接口失败,也要添加默认的"整车参数"参数列表 + this.allParametersData = { + 整车参数: [ + { parameterName: '状态代号', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '产品型号', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '板块', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '平台', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '系列', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '细分市场', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '项目名称', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '项目编号', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '排放', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '燃烧类型', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '排量', parameterId: '', partsName: '/', subsystem: '整车参数' }, + { parameterName: '标准参数', parameterId: '', partsName: '/', subsystem: '整车参数' } + ] + } // 首次进入页面时,保存完整的参数数据(即使是空对象) - this.savedAllParametersData = {} + this.savedAllParametersData = JSON.parse(JSON.stringify(this.allParametersData)) // 即使失败,也调用获取常用列表 this.loadFavoritesList() }) @@ -1911,13 +2145,9 @@ export default { isParent: true } - // 处理子节点数组,去重(根据 label),过滤掉值为 `/` 的子节点 + // 处理子节点数组,去重(根据 label),不过滤值为 `/` 的子节点 if (Array.isArray(data[parentLabel])) { data[parentLabel].forEach((childLabel, childIdx) => { - // 过滤掉值为 `/` 的子节点 - if (childLabel === '/') { - return - } // 如果该 label 已经处理过,跳过 if (seenLabels.has(childLabel)) { return @@ -1977,7 +2207,7 @@ export default { // 获取所有节点的keys getAllNodeKeys(nodes) { let keys = [] - nodes.forEach(node => { + nodes.forEach((node) => { keys.push(node.id) if (node.children && node.children.length > 0) { keys = keys.concat(this.getAllNodeKeys(node.children)) @@ -2029,20 +2259,20 @@ export default { .update-favorite-button { background: white; - border: 1px solid #409EFF; - color: #409EFF; + border: 1px solid #409eff; + color: #409eff; padding: 8px 16px; border-radius: 4px; font-size: 14px; &:hover { - background: #ECF5FF; - border-color: #66B1FF; - color: #66B1FF; + background: #ecf5ff; + border-color: #66b1ff; + color: #66b1ff; } &:active { - background: #409EFF; + background: #409eff; color: white; } } @@ -2061,9 +2291,11 @@ export default { flex: 1; overflow: hidden; background: #f5f7fa; + /* 与左侧树同步高度,避免整体页面出现额外滚动条 */ + height: calc(100vh - 160px); .left-param-panel { - width: 280px; + width: 230px; background: white; border: 1px solid #ebeef5; padding: 12px; @@ -2072,6 +2304,7 @@ export default { display: flex; flex-direction: column; flex-shrink: 0; + height: 100%; .tree-search-header { margin-bottom: 8px; @@ -2106,12 +2339,15 @@ export default { .right-comparison-panel { flex: 1; - overflow: auto; + overflow: hidden; background: white; + height: 100%; .comparison-table-wrapper { width: 100%; - overflow-x: auto; + height: 100%; + max-height: 100%; + overflow: auto; .comparison-table { width: 100%; @@ -2128,24 +2364,47 @@ export default { font-weight: 500; font-size: 14px; color: #303133; + position: sticky; + top: 0; + background: #f5f7fa; + z-index: 8; + + &.subsystem-column { + width: 120px; + min-width: 120px; + left: 0; + z-index: 15; + } + + &.parts-column { + width: 140px; + min-width: 140px; + left: 120px; + z-index: 15; + } &.param-column { width: 200px; min-width: 200px; - position: sticky; - left: 0; - background: #f5f7fa; - z-index: 10; + left: 260px; + z-index: 15; } &.model-column { min-width: 180px; text-align: center; + z-index: 8; } &.add-column { min-width: 150px; text-align: center; + z-index: 8; + span { + font-size: 16px; + font-weight: bolder; + color: #000; + } } } @@ -2203,8 +2462,8 @@ export default { transition: all 0.3s; &:hover { - border-color: #409EFF; - color: #409EFF; + border-color: #409eff; + color: #409eff; background: #ecf5ff; } @@ -2214,7 +2473,9 @@ export default { } span { - font-size: 12px; + font-size: 14px; + color: #000; + font-weight: bolder; } } } @@ -2224,6 +2485,14 @@ export default { tr { &:hover { background: #f5f7fa; + + td { + &.subsystem-column, + &.parts-column, + &.param-column { + background: #f5f7fa; + } + } } td { @@ -2232,11 +2501,25 @@ export default { font-size: 14px; color: #606266; - &.param-column { + &.subsystem-column { position: sticky; left: 0; background: white; z-index: 5; + } + + &.parts-column { + position: sticky; + left: 120px; + background: white; + z-index: 5; + } + + &.param-column { + position: sticky; + left: 260px; + background: white; + z-index: 5; display: flex; align-items: center; gap: 8px; @@ -2251,7 +2534,7 @@ export default { font-size: 14px; &:hover { - color: #409EFF; + color: #409eff; } } } @@ -2262,6 +2545,11 @@ export default { &.add-column { background: #fafafa; + span { + font-size: 16px; + font-weight: bolder; + color: #000; + } } } } @@ -2314,7 +2602,7 @@ export default { } } } -.v-modal{ +.v-modal { display: none !important; } diff --git a/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue b/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue index aedbfbb..14c5640 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue @@ -13,6 +13,17 @@
参数模板管理
+
+ + 下载导入模板 + + + 导入参数模板 + + + 添加参数模板 + +
@@ -35,18 +46,6 @@ :value="item.value" /> - -
-
- - 下载导入模板 - - - 导入参数模板 - - - 添加参数模板 -
@@ -279,7 +278,6 @@ export default { colConfigs: [ { prop: 'templateName', - showOverflowTooltip: true, label: '模板名称', align: 'center' }, diff --git a/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue b/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue index 95eb3ce..f55825c 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue @@ -1432,7 +1432,40 @@ export default { // 处理部门搜索 handleDepartmentSearch() { // 搜索文本变化时,computed 属性 filteredDepartmentTreeData 会自动更新 - // 无需额外操作 + // 如果有搜索文本,展开所有节点以便查看搜索结果 + if (this.departmentSearchText && this.departmentSearchText.trim() !== '') { + this.$nextTick(() => { + if (this.$refs.departmentTree) { + // 获取所有节点的 key + const allKeys = this.getAllDepartmentNodeKeys(this.filteredDepartmentTreeData) + // 展开所有节点 + this.$refs.departmentTree.setExpandedKeys(allKeys) + } + }) + } else { + // 清空搜索时,收起所有节点 + this.$nextTick(() => { + if (this.$refs.departmentTree) { + this.$refs.departmentTree.setExpandedKeys([]) + } + }) + } + }, + // 递归获取所有部门节点的 key + getAllDepartmentNodeKeys(nodes) { + let keys = [] + if (!Array.isArray(nodes)) { + return keys + } + nodes.forEach(node => { + if (node.id) { + keys.push(node.id) + } + if (node.children && Array.isArray(node.children) && node.children.length > 0) { + keys = keys.concat(this.getAllDepartmentNodeKeys(node.children)) + } + }) + return keys }, // 处理树节点点击 handleDepartmentTreeNodeClick(data) { diff --git a/src/custom/apaas-custom-mydemo/custom-page/otherEnginedata.vue b/src/custom/apaas-custom-mydemo/custom-page/otherEnginedata.vue index 3ac9df3..2e1d3ac 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/otherEnginedata.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/otherEnginedata.vue @@ -341,6 +341,10 @@ export default { this.loadUserSelfRole() this.loadData() }, + mounted() { + this.loadUserSelfRole() + this.loadData() + }, methods: { // 检查是否是管理员(isAdmin === 1) isAdmin() { diff --git a/src/custom/apaas-custom-mydemo/custom-page/report.vue b/src/custom/apaas-custom-mydemo/custom-page/report.vue index 5ffc194..f036625 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/report.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/report.vue @@ -1,19 +1,22 @@