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 74b40b9..0000000 Binary files a/apaas-custom-mydemo/static/custom/apaas-custom-mydemo/1.jpg and /dev/null differ 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 @@