diff --git a/apaas-custom-mydemo.zip b/apaas-custom-mydemo.zip index 96ac243..f1c6f14 100644 Binary files a/apaas-custom-mydemo.zip and b/apaas-custom-mydemo.zip differ 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 3d93fcd..0000000 --- a/apaas-custom-mydemo/apaas-custom-mydemo.common.js +++ /dev/null @@ -1,135830 +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"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "01d4": -/***/ (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 * */ - - -/***/ }), - -/***/ "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 * */ - - -/***/ }), - -/***/ "0afe": -/***/ (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_approvalManagement_vue_vue_type_style_index_0_id_fa1fc10a_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("30d5"); -/* 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_approvalManagement_vue_vue_type_style_index_0_id_fa1fc10a_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_approvalManagement_vue_vue_type_style_index_0_id_fa1fc10a_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "0b3e": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "0e1f": -/***/ (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_modelContorl_vue_vue_type_style_index_0_id_64be2e2c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("9403"); -/* 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_modelContorl_vue_vue_type_style_index_0_id_64be2e2c_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_modelContorl_vue_vue_type_style_index_0_id_64be2e2c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "13c2": -/***/ (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_checkData_vue_vue_type_style_index_1_id_6bc4603f_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("f267"); -/* 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_checkData_vue_vue_type_style_index_1_id_6bc4603f_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_checkData_vue_vue_type_style_index_1_id_6bc4603f_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "146a": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "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 - -/***/ }), - -/***/ "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]'; -}; - - -/***/ }), - -/***/ "255c": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "2b36": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "2bef": -/***/ (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_524a3416_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d714"); -/* 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_524a3416_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_524a3416_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "301c": -/***/ (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_report_vue_vue_type_style_index_0_id_5c44e05c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d94a"); -/* 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_report_vue_vue_type_style_index_0_id_5c44e05c_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_report_vue_vue_type_style_index_0_id_5c44e05c_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "30d5": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "347f": -/***/ (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_af86862c_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("5dce"); -/* 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_af86862c_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_af86862c_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "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; -} - - -/***/ }), - -/***/ "4ad7": -/***/ (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_b8428bfa_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("255c"); -/* 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_b8428bfa_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_b8428bfa_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "4d00": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "4d0d": -/***/ (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_23127cf6_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("e12a"); -/* 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_23127cf6_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_23127cf6_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "53e7": -/***/ (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_checkData_vue_vue_type_style_index_0_id_6bc4603f_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("8eb5"); -/* 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_checkData_vue_vue_type_style_index_0_id_6bc4603f_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_checkData_vue_vue_type_style_index_0_id_6bc4603f_prod_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "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 * */ - - -/***/ }), - -/***/ "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]; - } - } -} - - -/***/ }), - -/***/ "7740": -/***/ (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_007ec22e_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d135"); -/* 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_007ec22e_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_007ec22e_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "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)) - -/***/ }), - -/***/ "7b34": -/***/ (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_7f2b7184_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("a11b"); -/* 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_7f2b7184_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_7f2b7184_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "7f91": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "8115": -/***/ (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_myDone_vue_vue_type_style_index_0_id_57b64d28_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("146a"); -/* 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_myDone_vue_vue_type_style_index_0_id_57b64d28_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_myDone_vue_vue_type_style_index_0_id_57b64d28_prod_lang_scss___WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - -/***/ }), - -/***/ "8719": -/***/ (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 5068d82..aac6b4f 100644 --- a/src/api/demo/index.js +++ b/src/api/demo/index.js @@ -413,6 +413,10 @@ export default { url: '/custom/tcDataQuery/tcDataSelectByPartsNames', method: 'post' }, + DOWNLOAD_MODEL_QUERY_DATA: { + url: '/custom/tcDataQuery/modelComparisonExport', + method: 'post' + }, GET_MY_SEND_LIST: { url: '/custom/todoTaskPojo/selectByPageByCreate', method: 'post' diff --git a/src/custom/apaas-custom-mydemo/apaas.json b/src/custom/apaas-custom-mydemo/apaas.json index 1fd5b5c..6e2e959 100644 --- a/src/custom/apaas-custom-mydemo/apaas.json +++ b/src/custom/apaas-custom-mydemo/apaas.json @@ -37,6 +37,13 @@ "title": "对标报告" } }, + "apaas-custom-reportList":{ + "name": "apaas-custom-reportList", + "path": "apaas-custom-reportList", + "meta": { + "title": "报告列表" + } + }, "apaas-custom-reportDetail":{ "name": "apaas-custom-reportDetail", "path": "apaas-custom-reportDetail", diff --git a/src/custom/apaas-custom-mydemo/custom-page/approvalManagement.vue b/src/custom/apaas-custom-mydemo/custom-page/approvalManagement.vue index 8df5468..18f6520 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/approvalManagement.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/approvalManagement.vue @@ -263,7 +263,7 @@ export default { } }, created() { - // this.loadUserSelfRole() + this.loadUserSelfRole() this.loadData() }, methods: { 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 3aa00d2..d041d67 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 @@ -34,13 +34,30 @@ /> + + + + + { @@ -295,7 +328,65 @@ export default { // 遍历该零部件下的所有参数 params.forEach((param) => { // 检查参数是否属于选中的子系统 - if (param.subsystemName === subsystem && param.department) { + if (param.subsystemName === subsystem) { + // 如果是批量修改填写人,收集零部件名称 + if (this.dispatchType === 'update_param') { + const paramPartsName = param.partsName || partsName + if (paramPartsName && paramPartsName !== '/') { + partsNameSet.add(paramPartsName) + } + } + // 收集部门名称 + if (param.department) { + departmentSet.add(param.department) + } + } + }) + }) + + // 如果是批量修改填写人,设置零部件名称列表 + if (this.dispatchType === 'update_param') { + this.availablePartsNames = Array.from(partsNameSet).sort() + } + + // 如果是批量修改责任人,直接设置部门列表(不依赖零部件名称) + if (this.dispatchType !== 'update_param') { + // 转换为数组格式 + this.availableDepartments = Array.from(departmentSet).map((dept) => ({ + department: dept + })) + } + } else { + this.availablePartsNames = [] + this.availableDepartments = [] + } + }, + // 处理零部件名称选择变化(仅用于批量修改填写人) + handlePartsNameChange(partsName) { + // 清空部门和填写人 + this.formData.department = '' + this.formData.userId = '' + this.formData.userNumber = '' + this.formData.username = '' + this.availableDepartments = [] + this.userOptions = [] + // 根据子系统和零部件名称筛选部门列表 + if (partsName && this.formData.subsystem) { + const departmentSet = new Set() + const currentVersionData = this.versionData[this.currentVersionId] || {} + + // 遍历所有零部件名称(partsName) + Object.keys(currentVersionData).forEach((dataPartsName) => { + const params = currentVersionData[dataPartsName] || [] + // 遍历该零部件下的所有参数 + params.forEach((param) => { + // 检查参数是否属于选中的子系统和零部件名称 + const paramPartsName = param.partsName || dataPartsName + if ( + param.subsystemName === this.formData.subsystem && + paramPartsName === partsName && + param.department + ) { departmentSet.add(param.department) } }) @@ -348,9 +439,18 @@ export default { }, // 远程搜索责任人 handleRemoteSearch(query) { - if (!this.formData.department) { - this.userOptions = [] - return + // 如果是批量修改填写人,需要检查零部件名称和部门 + if (this.dispatchType === 'update_param') { + if (!this.formData.partsName || !this.formData.department) { + this.userOptions = [] + return + } + } else { + // 批量修改责任人,只需要检查部门 + if (!this.formData.department) { + this.userOptions = [] + return + } } if (!query || query.trim() === '') { if (this.formData.userId) { @@ -461,12 +561,18 @@ export default { // 如果是批量修改填写人,不调用接口,直接触发确认事件 if (this.dispatchType === 'update_param') { + // 验证零部件名称 + if (!this.formData.partsName) { + this.$message.warning('请选择零部件名称') + return + } // 确保所有必要参数都有值 // 如果 userNumber 为空,使用 userId 作为 userNumber(降级处理) const confirmData = { subsystem: this.formData.subsystem, + partsName: this.formData.partsName, department: this.formData.department, - userId: this.formData.userId, + userId: this.formData.userId, // 确保传递userId userNumber: this.formData.userNumber || this.formData.userId, // 如果没有 userNumber,使用 userId username: this.formData.username || '' } diff --git a/src/custom/apaas-custom-mydemo/custom-page/engineDetail.vue b/src/custom/apaas-custom-mydemo/custom-page/engineDetail.vue index c91b8f9..8d7c044 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/engineDetail.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/engineDetail.vue @@ -1450,9 +1450,9 @@ export default { // 如果是批量修改填写人,直接更新页面数据 if (this.dispatchType === 'update_param') { - const { subsystem, department, userId, userNumber, username } = change - console.log(change, 'change', subsystem, department, userId, userNumber, username) - if (!subsystem || !department || !userId) { + const { subsystem, partsName, department, userId, userNumber, username } = change + console.log(change, 'change', subsystem, partsName, department, userId, userNumber, username) + if (!subsystem || !partsName || !department || !userId) { this.$message({ type: 'warning', message: '缺少必要参数' @@ -1476,21 +1476,29 @@ export default { } // 遍历所有零部件名称(partsName) - Object.keys(currentData).forEach((partsName) => { - const params = currentData[partsName] || [] + Object.keys(currentData).forEach((dataPartsName) => { + const params = currentData[dataPartsName] || [] // 遍历该零部件下的所有参数 params.forEach((param, index) => { // 标准化参数的部门路径(将 · 替换为 -) const normalizedParamDept = (param.department || '').replace(/·/g, '-') + // 获取参数的零部件名称(优先使用param.partsName,否则使用dataPartsName) + const paramPartsName = param.partsName || dataPartsName - // 检查参数是否匹配子系统和部门(使用标准化后的部门路径进行匹配) - if (param.subsystemName === subsystem && normalizedParamDept === normalizedDepartment) { + // 检查参数是否匹配子系统、零部件名称和部门(使用标准化后的部门路径进行匹配) + if ( + param.subsystemName === subsystem && + paramPartsName === partsName && + normalizedParamDept === normalizedDepartment + ) { // 更新填写人信息 param.filledBy = userId // 填写人ID(userId,用于提交) param.filledByUserId = userId // 填写人userId(用于 el-select 的 v-model) + // 同步更新部门信息 + param.department = department // 使用 Vue.set 确保响应式更新 - this.$set(currentData[partsName], index, param) + this.$set(currentData[dataPartsName], index, param) // 更新该行的填写人选项,确保选择框能正确显示 const rowId = param.id || `${param.subsystemName}-${param.parameterName}` diff --git a/src/custom/apaas-custom-mydemo/custom-page/fillerData.vue b/src/custom/apaas-custom-mydemo/custom-page/fillerData.vue index 090fe7d..2322895 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/fillerData.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/fillerData.vue @@ -68,17 +68,20 @@ > - + @click.native="handleOpenDepartmentDialog" + > + + + + + + + + + + + @@ -167,7 +209,7 @@ export default { dialogMode: 'add', // 'add' 或 'edit' currentEditIndex: -1, formData: { - department: '', // 级联选择器绑定的部门ID + department: '', // 部门ID(用于表单验证) subsystem: '', // 子系统(单选,字符串) partsName: '', // 零部件名称(单选,字符串) filler: [], // 填写人用户ID数组(多选,用于提交) @@ -193,15 +235,11 @@ export default { departmentList: [], searchTimer: null, // 防抖定时器 currentRequest: null, // 当前请求引用 - // 部门级联选择器相关 - departmentCascaderProps: { - value: 'id', - label: 'name', - children: 'children', - checkStrictly: true, // 允许选择任意一级(单选) - emitPath: false, // 只返回最后一级的值(单选时只返回选中的id) - multiple: false // 明确指定为单选 - } + departmentDialogVisible: false, // 部门选择弹窗显示状态 + departmentTreeFilterText: '', // 部门树搜索文本 + selectedDepartmentId: '', // 选中的部门ID + selectedDepartmentName: '', // 选中的部门名称 + selectedDepartmentNode: null // 选中的部门节点 } }, computed: { @@ -209,6 +247,13 @@ export default { return this.dialogMode === 'add' ? '新增' : '修改' } }, + watch: { + departmentTreeFilterText(val) { + if (this.$refs.departmentTree) { + this.$refs.departmentTree.filter(val) + } + } + }, mounted() { this.loadDepartmentList() this.loadFillerData() @@ -340,7 +385,7 @@ export default { if (resp && resp.data) { result = resp.data.result || resp.data.data || resp.data || [] } - // 格式化数据为级联选择器需要的格式 + // 格式化数据为树形结构格式 this.departmentList = this.formatDepartmentTreeData(result) }) .asyncErrorCatch((err) => { @@ -348,7 +393,7 @@ export default { this.departmentList = [] }) }, - // 格式化部门树数据为级联选择器格式 + // 格式化部门树数据为树形结构格式 formatDepartmentTreeData(data) { if (!Array.isArray(data)) { return [] @@ -457,7 +502,7 @@ export default { } this.formData = { - department: row.departmentId || '', // 级联选择器需要部门ID + department: row.departmentId || '', // 部门ID(用于表单验证) subsystem: subsystemValue, // 子系统改为单选,字符串 partsName: row.partsName || '', // 零部件名称 filler: userIds, // 填写人改为多选,数组 @@ -580,25 +625,70 @@ export default { } }) }, - // 处理部门选择变化 - handleDepartmentChange(value) { - if (value) { - // 获取最后一级的id - this.formData.selectDeptId = value - // 查找部门路径名称 - this.formData.selectDeptName = this.getDepartmentPathName(value) + // 打开部门选择弹窗 + handleOpenDepartmentDialog() { + // 如果有已选择的部门,设置树的高亮 + if (this.formData.selectDeptId) { + this.selectedDepartmentId = this.formData.selectDeptId + this.selectedDepartmentName = this.formData.selectDeptName + this.$nextTick(() => { + if (this.$refs.departmentTree) { + this.$refs.departmentTree.setCurrentKey(this.formData.selectDeptId) + } + }) + } else { + this.selectedDepartmentId = '' + this.selectedDepartmentName = '' + } + this.departmentTreeFilterText = '' + this.departmentDialogVisible = true + }, + // 关闭部门选择弹窗 + handleDepartmentDialogClose() { + this.departmentDialogVisible = false + this.departmentTreeFilterText = '' + // 如果取消,恢复之前的选择 + if (this.formData.selectDeptId) { + this.selectedDepartmentId = this.formData.selectDeptId + this.selectedDepartmentName = this.formData.selectDeptName + } else { + this.selectedDepartmentId = '' + this.selectedDepartmentName = '' + this.selectedDepartmentNode = null + } + }, + // 确认选择部门 + handleDepartmentDialogConfirm() { + if (this.selectedDepartmentId && this.selectedDepartmentNode) { + // 更新表单数据 + this.formData.selectDeptId = this.selectedDepartmentId + this.formData.selectDeptName = this.selectedDepartmentName + this.formData.department = this.selectedDepartmentId // 清空填写人选择(改为数组) this.formData.filler = [] this.formData.fillerName = '' - } else { - // 清空时重置 - this.formData.selectDeptId = '' - this.formData.selectDeptName = '' - this.formData.filler = [] - this.formData.fillerName = '' - this.fillerPersons = [] + this.userOptions = [] + // 关闭弹窗 + this.departmentDialogVisible = false + // 清除表单验证错误 + this.$nextTick(() => { + if (this.$refs.form) { + this.$refs.form.clearValidate('department') + } + }) } }, + // 处理部门树节点点击 + handleDepartmentNodeClick(data) { + this.selectedDepartmentId = data.id + this.selectedDepartmentName = this.getDepartmentPathName(data.id) + this.selectedDepartmentNode = data + }, + // 过滤部门树节点 + filterDepartmentNode(value, data) { + if (!value) return true + return (data.name || '').toLowerCase().includes(value.toLowerCase()) + }, // 远程搜索填写人(用于 el-select) handleRemoteSearch(query) { // 如果查询为空,保留已选择的人员信息 @@ -888,4 +978,14 @@ export default { margin-left: 20px; text-align: right !important; } +.department-tree-search { + margin-bottom: 16px; +} +.department-tree { + max-height: 400px; + overflow-y: auto; + border: 1px solid #ebeef5; + border-radius: 4px; + padding: 8px; +} 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 c560fb4..d757dd0 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/model-query.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/model-query.vue @@ -25,6 +25,9 @@ 已隐藏参数 ({{ hiddenParams.length }}) + + 下载对比数据 + @@ -132,7 +135,7 @@
{ const modelName = (model.modelName || model.productFullName || '').toLowerCase() - return modelName.includes(searchText) + 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) }) } @@ -692,6 +702,7 @@ export default { ...api.GET_MODEL_QUERY, params: { engineModelID: modelId, + userID: getUserId(), subsystemParts: subsystemTypes // 格式:["子系统名称-参数类型"] }, disableSuccessMsg: true @@ -1025,6 +1036,84 @@ export default { console.log('树数据还未加载完成,等待加载完成后再更新选中状态') } }, + // 下载 + handleDownloadComparisonData() { + // 获取已添加在右侧的机型ID + const allSelectedIds = this.comparisonModels.map(item => item.id).filter(id => id) + if (allSelectedIds.length === 0) { + this.$message.warning('请先添加机型') + return + } + // 获取选中的参数类型 + const { subsystemTypes } = this.getSelectedSubsystemsAndTypes() + const { url, method = 'post', headers = {} } = api.DOWNLOAD_MODEL_QUERY_DATA || {} + const requestConfig = { + url, + method, + data: { + userID: getUserId(), + modelIds: allSelectedIds, + subsystemParts: subsystemTypes + }, + responseType: 'blob', + headers, + disableSuccessMsg: true + } + this.$axios(requestConfig) + .then((response) => { + const blobData = response.data + if (!blobData) { + console.log('下载失败,文件内容为空') + 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 = () => { + console.log(`下载失败: ${reader.result}`) + } + reader.readAsText(blobData) + } catch (err) { + console.error('解析下载失败响应异常:', err) + } + 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) + console.log('下载开始,请查看浏览器下载列表') + }) + .catch((err) => { + console.error('下载失败:', err) + console.log('下载失败,请稍后重试') + }) + + }, // 根据可显示的参数更新树节点选中状态(不改变树数据) updateCheckedKeysByDisplayParams() { // 确保使用完整的树数据和节点映射 @@ -1549,9 +1638,6 @@ export default { return } - // 保存要恢复的参数数量 - const restoreCount = keysToRestore.length - // 从 hiddenParams 中移除选中的参数 keysToRestore.forEach(key => { const index = this.hiddenParams.indexOf(key) diff --git a/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue b/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue index 4402d2d..8b99885 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/modelContorl.vue @@ -16,21 +16,22 @@
模板名称 - - - + +
@@ -172,6 +173,7 @@ :template-version="currentVersion" :version-list="versionList" :detail="currentDetail" + :template-management-permissions="templateManagementPermissions" class="model-detail-wrapper" @back="handleBackFromDetail" /> @@ -260,7 +262,8 @@ export default { downloadingRowId: '', tenantId: '1764149921900', userId: getUserId(), - errorDialogVisible: false + errorDialogVisible: false, + templateManagementPermissions: [] // 暂存 menuPath 为 "数据录入/模板管理" 的权限数组 } }, computed: { @@ -322,11 +325,13 @@ export default { }, mounted() { // this.loadUserSelfRole() + this.loadTemplateOptions() this.loadData() }, methods: { // 加载用户自身角色权限 loadUserSelfRole() { + localStorage.setItem('user_self_role', []) const request = { ...api.GET_USER_SELF_ROLE, params: { @@ -343,12 +348,41 @@ export default { } catch (err) { console.error('存储权限数据到 localStorage 失败:', err) } + + // 遍历 user_self_role 数组,查找 menuPath 为 "数据录入/模板管理" 的内容 + this.filterTemplateManagementPermissions() } }) .asyncErrorCatch((err) => { console.error('获取用户自身角色失败:', err) }) }, + // 过滤模板管理相关的权限 + filterTemplateManagementPermissions() { + try { + const permissionDataStr = localStorage.getItem('user_self_role') + if (!permissionDataStr) { + this.templateManagementPermissions = [] + return + } + + const permissionData = JSON.parse(permissionDataStr) + if (!Array.isArray(permissionData)) { + this.templateManagementPermissions = [] + return + } + + // 查找 menuPath 为 "数据录入/模板管理" 的所有权限项 + this.templateManagementPermissions = permissionData.filter((perm) => { + return perm.menuPath === '数据录入/模板管理' + }) + + console.log('模板管理权限数据:', this.templateManagementPermissions) + } catch (err) { + console.error('过滤模板管理权限失败:', err) + this.templateManagementPermissions = [] + } + }, // 检查权限 // menuPath: 模块路径,如 "数据录入/模板管理" // subsystem: 子系统名称(可选,如果提供则检查该子系统的权限) @@ -449,6 +483,10 @@ export default { } // 获取版本列表 this.loadVersionList(row) + // 确保权限数据已加载 + if (this.templateManagementPermissions.length === 0) { + this.loadUserSelfRole() + } this.showModelDetail = true }, loadVersionList(row) { @@ -838,7 +876,7 @@ export default { }, resetSearch() { Object.assign(this.searchPanelValue, createDefaultSearch()) - this.templateOptions = [] + this.handleSearch() }, handleSearch() { @@ -871,18 +909,14 @@ export default { console.error('查询失败:', err) }) }, - remoteSearchTemplate(query, callback) { - if (!query) { - callback([]) - return - } + // 加载模板名称下拉框数据 + loadTemplateOptions() { this.templateSelectLoading = true const request = { ...api.GET_MODEL_LIST, params: { pageNumber: 1, - pageSize: 10, - templateName: query + pageSize: 999 }, disableSuccessMsg: true } @@ -890,7 +924,7 @@ export default { .asyncThen((resp) => { const list = resp.data.result || [] const seen = new Set() - const suggestions = list + const options = list .map((item) => item.templateName || item.po_name || '') .filter((name) => { if (!name || seen.has(name)) { @@ -900,15 +934,16 @@ export default { return true }) .map((name) => ({ + label: name, value: name })) + this.templateOptions = options this.templateSelectLoading = false - callback(suggestions) }) .asyncErrorCatch((err) => { - console.error('搜索模板失败:', err) + console.error('加载模板列表失败:', err) + this.templateOptions = [] this.templateSelectLoading = false - callback([]) }) }, // 生成UUID diff --git a/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue b/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue index 59d055f..d8a5552 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/modelDetail.vue @@ -132,21 +132,23 @@ 已删除
@@ -480,6 +482,10 @@ export default { detail: { type: Object, default: () => ({}) + }, + templateManagementPermissions: { + type: Array, + default: () => [] } }, data: function() { @@ -595,7 +601,20 @@ export default { // 检查是否应该显示维护参数按钮(在 DRAFT 或 COMPLETED 状态下都显示,且当前版本是最新版本) shouldShowMaintainButton() { const status = this.currentStatus || (this.detail && this.detail.status) || '' - return (status === 'DRAFT' || status === 'COMPLETE') && this.isLatestVersion + const baseCondition = (status === 'DRAFT' || status === 'COMPLETE') && this.isLatestVersion + if (!baseCondition) { + return false + } + // 检查是否有对应子系统的权限 + const templateName = this.displayTemplateName + if (!templateName || !this.templateManagementPermissions || this.templateManagementPermissions.length === 0) { + return false + } + // 查找是否有匹配的子系统权限 + const hasSubsystemPermission = this.templateManagementPermissions.some((perm) => { + return perm.subsystem === templateName + }) + return hasSubsystemPermission }, // 判断当前版本是否是最新版本 isLatestVersion() { @@ -1050,6 +1069,27 @@ export default { if (!parameterName) { return false } + // 优先使用传入的权限数组 + if (this.templateManagementPermissions && this.templateManagementPermissions.length > 0) { + const templateName = this.displayTemplateName + const matchedPermissions = this.templateManagementPermissions.filter((perm) => { + // 检查 subsystem 是否匹配 templateName + if (templateName && perm.subsystem !== templateName) { + return false + } + + // 检查 parameterName 是否匹配 + if (perm.parameterName !== parameterName) { + return false + } + + // 检查权限类型是否为"编辑" + return perm.parameterPer === '编辑' + }) + + return matchedPermissions.length > 0 + } + // 如果没有传入权限数组,从 localStorage 读取 try { const permissionDataStr = localStorage.getItem('user_self_role') if (!permissionDataStr) { @@ -1089,6 +1129,22 @@ export default { return false } }, + // 检查是否可以编辑或删除某一行 + canEditOrDeleteRow(row) { + if (!row) { + return false + } + // 如果该行的 createdBy 等于当前用户ID,可以编辑/删除 + if (row.createdBy === getUserId()) { + return true + } + // 如果参数名称在权限数组中,且权限类型为"编辑",可以编辑/删除 + const parameterName = row.parameterName + if (parameterName && this.hasParameterEditPermission(parameterName)) { + return true + } + return false + }, loadDepartmentList() { const request = { ...api.QUERY_ORG_TREE, diff --git a/src/custom/apaas-custom-mydemo/custom-page/permissionManagement.vue b/src/custom/apaas-custom-mydemo/custom-page/permissionManagement.vue index 386d421..6dfba13 100644 --- a/src/custom/apaas-custom-mydemo/custom-page/permissionManagement.vue +++ b/src/custom/apaas-custom-mydemo/custom-page/permissionManagement.vue @@ -136,7 +136,7 @@ 子系统 参数类型 --> - + + :value="item.userNumber" + > + {{ item.username }} + {{ item.userNumber }} + @@ -371,7 +375,7 @@ export default { menuList: [ '模板管理', '玉柴发动机数据', - '竞品发动机数据', + '竞品发动机数据' ], // 人员配置相关 personConfigDialogVisible: false, @@ -379,7 +383,7 @@ export default { personConfigFormData: { configType: 'person', // 配置类型:'person' 配置人员,'department' 配置部门 department: '', // 级联选择器绑定的部门ID(配置人员时为单个,配置部门时为数组) - person: [], // 人员数组(用于提交,包含 {userId, username} 对象) + person: [], // 人员工号数组(用于 el-select 的 v-model,存储 userNumber) selectDeptId: '', // 选中的部门ID(用于搜索人员,配置人员模式使用) selectDeptName: '', // 选中的部门名称(用于提交) selectDeptIds: [], // 选中的部门ID数组(配置部门模式使用) @@ -503,10 +507,19 @@ export default { }, // 验证权限 validatePermissions(rule, value, callback) { - const hasPermission = this.allParameterNodes.some(node => { + // 检查是否有参数节点被选中 + const hasParameterPermission = this.allParameterNodes.some(node => { return node.permissions.view || node.permissions.edit }) - if (!hasPermission) { + + // 检查是否有子系统节点被选中 + const hasSubsystemPermission = Object.keys(this.nodeMap).some(nodeId => { + const node = this.nodeMap[nodeId] + return node && node.type === 'subsystem' && node.permissions && + (node.permissions.view || node.permissions.edit) + }) + + if (!hasParameterPermission && !hasSubsystemPermission) { callback(new Error('请至少分配一个权限')) } else { callback() @@ -626,6 +639,10 @@ export default { type: 'subsystem', menuName: menuNode.label, subsystem: subsystemNameStr, + permissions: { + view: false, + edit: false + }, children: null, // 初始为 null,懒加载时加载 isLeaf: false // 明确标记为非叶子节点,让 el-tree 显示展开按钮 } @@ -723,6 +740,10 @@ export default { parameterNodes.forEach(node => { this.applyPendingPermissionsToNode(node) }) + // 更新子系统权限状态(如果有参数节点) + if (parameterNodes.length > 0) { + this.updateSubsystemPermissionFromChildren(parameterNodes[0]) + } }) }) .asyncErrorCatch((err) => { @@ -739,6 +760,15 @@ export default { // 使用 $set 确保响应式更新 this.$set(this.nodeMap[data.id].permissions, permissionType, data.permissions[permissionType]) } + + // 如果是子系统节点,全选/取消全选其下所有参数 + if (data.type === 'subsystem') { + this.updateSubsystemChildParameters(data, permissionType) + } else if (data.type === 'parameter') { + // 如果是参数节点,更新其父子系统节点的权限状态 + this.updateSubsystemPermissionFromChildren(data) + } + // 触发验证 this.$nextTick(() => { if (this.$refs.form) { @@ -746,6 +776,77 @@ export default { } }) }, + // 更新子系统下所有参数的权限 + updateSubsystemChildParameters(subsystemNode, permissionType) { + const subsystemId = subsystemNode.id + const newValue = subsystemNode.permissions[permissionType] + + // 查找该子系统下的所有参数节点 + Object.keys(this.nodeMap).forEach(nodeId => { + const node = this.nodeMap[nodeId] + if (node && node.type === 'parameter' && node.id && node.id.startsWith(subsystemId + '-param-')) { + // 确保权限对象存在 + if (!node.permissions) { + this.$set(node, 'permissions', { view: false, edit: false }) + } + // 更新参数节点的权限 + this.$set(node.permissions, permissionType, newValue) + } + }) + }, + // 根据子参数节点的权限状态更新子系统节点的权限状态 + updateSubsystemPermissionFromChildren(parameterNode) { + if (!parameterNode || !parameterNode.id) { + return + } + + // 查找该参数节点的父子系统节点 + const subsystemId = parameterNode.id.split('-param-')[0] + const subsystemNode = this.nodeMap[subsystemId] + + if (!subsystemNode || subsystemNode.type !== 'subsystem') { + return + } + + // 确保子系统权限对象存在 + if (!subsystemNode.permissions) { + this.$set(subsystemNode, 'permissions', { view: false, edit: false }) + } + + // 查找该子系统下的所有参数节点 + const childParameterNodes = [] + Object.keys(this.nodeMap).forEach(nodeId => { + const node = this.nodeMap[nodeId] + if (node && node.type === 'parameter' && node.id && node.id.startsWith(subsystemId + '-param-')) { + childParameterNodes.push(node) + } + }) + + if (childParameterNodes.length === 0) { + return + } + + // 计算查看权限状态:如果所有参数都有查看权限,则子系统也选中;如果都没有,则不选中;否则保持当前状态 + const allViewSelected = childParameterNodes.every(node => node.permissions && node.permissions.view) + const noneViewSelected = childParameterNodes.every(node => !node.permissions || !node.permissions.view) + + // 计算编辑权限状态 + const allEditSelected = childParameterNodes.every(node => node.permissions && node.permissions.edit) + const noneEditSelected = childParameterNodes.every(node => !node.permissions || !node.permissions.edit) + + // 更新子系统权限 + if (allViewSelected) { + this.$set(subsystemNode.permissions, 'view', true) + } else if (noneViewSelected) { + this.$set(subsystemNode.permissions, 'view', false) + } + + if (allEditSelected) { + this.$set(subsystemNode.permissions, 'edit', true) + } else if (noneEditSelected) { + this.$set(subsystemNode.permissions, 'edit', false) + } + }, // 加载权限数据 loadPermissionData() { const request = { @@ -802,11 +903,11 @@ export default { : { roleName: this.addRoleFormData.roleName, roleDescription: this.addRoleFormData.roleDescription - } + }, + disableSuccessMsg: true } this.$request(request) .asyncThen((resp) => { - this.handleAddRoleDialogClose() this.loadPermissionData() }) @@ -919,13 +1020,33 @@ export default { this.$request(request) .asyncThen((resp) => { if (resp && resp.data) { - this.personOptions = resp.data + // 处理返回的数据,转换为选项格式 + let result = [] + if (Array.isArray(resp.data)) { + result = resp.data + } else if (resp.data.result && Array.isArray(resp.data.result)) { + result = resp.data.result + } else if (resp.data.data && Array.isArray(resp.data.data)) { + result = resp.data.data + } + // 转换为选项格式:{userId: user.userId, username: user.username, userNumber: user.userNumber} + this.personOptions = result.map((user) => ({ + userId: user.userId || user.id, + username: user.username || user.name, + userNumber: user.userNumber || user.userId || user.id + })) + // 设置已选择的人员 userNumber 数组 + this.personConfigFormData.person = this.personOptions.map(opt => opt.userNumber) + } else { + this.personOptions = [] + this.personConfigFormData.person = [] } }) .asyncErrorCatch((err) => { console.error('加载人员列表失败:', err) + this.personOptions = [] + this.personConfigFormData.person = [] }) - this.personOptions = [] this.personConfigDialogVisible = true this.$nextTick(() => { if (this.$refs.personConfigForm) { @@ -1047,20 +1168,14 @@ export default { }, // 远程搜索人员(用于 el-select) queryPersonByDepartment(queryString) { + // 如果查询为空,保留已选择的人员信息 if (!queryString || queryString.trim() === '') { - // 空查询时,只保留已选择的人员在选项中 if (this.personConfigFormData.person && this.personConfigFormData.person.length > 0) { - const selectedOptions = this.personOptions.filter(opt => - this.personConfigFormData.person.some(p => p.userId === opt.userId) + // 从现有 options 中查找已选择的人员信息 + const selectedOptions = this.personOptions.filter((opt) => + this.personConfigFormData.person.includes(opt.userNumber) ) - const missingIds = this.personConfigFormData.person.filter(p => - !selectedOptions.some(opt => opt.userId === p.userId) - ) - if (missingIds.length > 0) { - this.personOptions = [...selectedOptions, ...missingIds] - } else { - this.personOptions = selectedOptions - } + this.personOptions = selectedOptions } else { this.personOptions = [] } @@ -1104,36 +1219,38 @@ export default { result = respData.data } - // 转换为选项格式:{userId: user.userId, username: user.username} + // 转换为选项格式:{userId: user.userId, username: user.username, userNumber: user.userNumber} const users = result - .map(user => ({ + .map((user) => ({ userId: user.userId || user.id, - username: user.username || user.name + username: user.username || user.name, + userNumber: user.userNumber || user.userId || user.id })) - .filter(user => user.userId && user.username) // 过滤掉没有 userId 或 username 的数据 + .filter((user) => user.userId && user.userNumber) // 过滤掉没有 userId 或 userNumber 的数据 - // personConfigFormData.person 现在是对象数组(包含 {userId, username}) - const existingIds = new Set( - (this.personConfigFormData.person || []).map(p => p.userId) + // personConfigFormData.person 现在是 userNumber 数组 + const existingUserNumbers = new Set( + (this.personConfigFormData.person || []).map(p => p) ) // 过滤掉已选择的人员 - const filteredUsers = users.filter(user => !existingIds.has(user.userId)) + const filteredUsers = users.filter(user => !existingUserNumbers.has(user.userNumber)) // 合并:已选择的人员信息(从现有 options 中获取)+ 新的搜索结果 - const selectedOptions = (this.personOptions || []).filter(opt => - opt.userId && this.personConfigFormData.person && this.personConfigFormData.person.some(p => p.userId === opt.userId) + const selectedOptions = this.personOptions.filter( + (opt) => opt.userNumber && this.personConfigFormData.person && this.personConfigFormData.person.includes(opt.userNumber) ) - // 去重:使用 Map 确保每个 userId 只出现一次 + + // 去重:使用 Map 确保每个 userNumber 只出现一次 const optionsMap = new Map() // 先添加已选择的选项 - selectedOptions.forEach(opt => { - if (opt.userId) { - optionsMap.set(opt.userId, opt) + selectedOptions.forEach((opt) => { + if (opt.userNumber) { + optionsMap.set(opt.userNumber, opt) } }) // 再添加新的搜索结果 - filteredUsers.forEach(user => { - if (user.userId && !optionsMap.has(user.userId)) { - optionsMap.set(user.userId, user) + filteredUsers.forEach((user) => { + if (user.userNumber && !optionsMap.has(user.userNumber)) { + optionsMap.set(user.userNumber, user) } }) this.personOptions = Array.from(optionsMap.values()) @@ -1144,8 +1261,8 @@ export default { console.error('搜索人员失败:', err) // 搜索失败时,保留已选择的人员信息 if (this.personConfigFormData.person && this.personConfigFormData.person.length > 0) { - const selectedOptions = this.personOptions.filter(opt => - this.personConfigFormData.person.some(p => p.userId === opt.userId) + const selectedOptions = this.personOptions.filter((opt) => + this.personConfigFormData.person.includes(opt.userNumber) ) this.personOptions = selectedOptions } else { @@ -1218,7 +1335,12 @@ export default { } else { // 配置人员模式:传人员ID数组 isDept = 0 - userOrDeptId = this.personConfigFormData.person.map(p => p.userId || p.id).filter(id => id) + // personConfigFormData.person 是 userNumber 数组,需要转换为 userId 数组 + userOrDeptId = this.personConfigFormData.person.map(userNumber => { + // 从 personOptions 中查找对应的 userId + const option = this.personOptions.find(opt => opt.userNumber === userNumber) + return option ? option.userId : null + }).filter(id => id) if (userOrDeptId.length === 0) { this.$message.warning('请至少选择一个人员') this.personConfigSubmitting = false @@ -1240,12 +1362,12 @@ export default { roleId: this.personConfigFormData.roleId, userOrDeptIds: userOrDeptId, isDept: isDept - } + }, + disableSuccessMsg: true } this.$request(request) .asyncThen((resp) => { - this.handlePersonConfigDialogClose() this.loadPermissionData() }) @@ -1305,14 +1427,24 @@ export default { if (node && node.permissions) { node.permissions.view = false node.permissions.edit = false + } else if (node && (node.type === 'subsystem' || node.type === 'parameter')) { + // 如果节点没有权限对象,创建一个 + this.$set(node, 'permissions', { view: false, edit: false }) } }) }, // 从 menuPath 中提取第一级菜单名 // menuPath 格式: "数据录入/模板管理" -> 提取 "模板管理" + // 根据 menuList 中的菜单名来匹配 menuPath 中的内容 extractMenuNameFromPath(menuPath) { if (!menuPath) return '' - // 按 "/" 分割,取最后一部分作为菜单名 + // 首先尝试从 menuList 中匹配 + for (const menuName of this.menuList) { + if (menuPath.includes(menuName)) { + return menuName + } + } + // 如果没有匹配到,按 "/" 分割,取最后一部分作为菜单名 const parts = menuPath.split('/') return parts.length > 0 ? parts[parts.length - 1].trim() : menuPath.trim() }, @@ -1320,7 +1452,7 @@ export default { setPermissionsFromData(permissions) { // permissions 格式是数组,每个元素包含: // { id, menuPath, subsystem, parameterName, parameterId, parameterPer } - // parameterPer 是字符串:"查看" 或 "编辑" + // parameterPer 可能是字符串:"查看" 或 "编辑",也可能是数字:1(查看)或 2(编辑) const permArray = Array.isArray(permissions) ? permissions : [] // 先重置所有权限 @@ -1331,33 +1463,74 @@ export default { // 处理权限数据,提取第一级菜单名并转换权限类型 const processedPerms = permArray.map(perm => { + // 根据 menuPath 提取第一级菜单名(匹配 menuList 中的菜单) const menuName = this.extractMenuNameFromPath(perm.menuPath || '') + + // 处理 parameterPer:支持字符串和数字格式 + let isView = false + let isEdit = false + const parameterPer = perm.parameterPer + if (typeof parameterPer === 'string') { + isView = parameterPer === '查看' + isEdit = parameterPer === '编辑' + } else if (typeof parameterPer === 'number') { + isView = parameterPer === 1 + isEdit = parameterPer === 2 + } + return { ...perm, menuName: menuName, // 提取的第一级菜单名 - view: perm.parameterPer === '查看', - edit: perm.parameterPer === '编辑' + view: isView, + edit: isEdit } }) // 根据 menuName、subsystem、parameterName 匹配节点并设置权限(只设置已加载的节点) + // 先按参数分组,合并同一个参数的所有权限记录 + const parameterPermMap = new Map() processedPerms.forEach(perm => { + const key = `${perm.menuName || ''}_${perm.subsystem || ''}_${perm.parameterName || ''}` + if (!parameterPermMap.has(key)) { + parameterPermMap.set(key, { + menuName: perm.menuName, + subsystem: perm.subsystem, + parameterName: perm.parameterName, + view: false, + edit: false + }) + } + const paramPerm = parameterPermMap.get(key) + if (perm.view) { + paramPerm.view = true + } + if (perm.edit) { + paramPerm.edit = true + } + }) + + // 设置已加载节点的权限 + parameterPermMap.forEach((paramPerm, key) => { Object.keys(this.nodeMap).forEach(nodeId => { const node = this.nodeMap[nodeId] if (node && node.type === 'parameter') { // 匹配第一级:menuPath 中包含第一级菜单名 - const menuMatch = perm.menuName && node.menuName && perm.menuName === node.menuName + const menuMatch = paramPerm.menuName && node.menuName && paramPerm.menuName === node.menuName // 匹配第二级:subsystem - const subsystemMatch = perm.subsystem && node.subsystem && perm.subsystem === node.subsystem + const subsystemMatch = paramPerm.subsystem && node.subsystem && paramPerm.subsystem === node.subsystem // 匹配第三级:parameterName - const parameterNameMatch = perm.parameterName && (node.parameterName || node.label) && - perm.parameterName === (node.parameterName || node.label) + const parameterNameMatch = paramPerm.parameterName && (node.parameterName || node.label) && + paramPerm.parameterName === (node.parameterName || node.label) if (menuMatch && subsystemMatch && parameterNameMatch) { - // 使用 $set 确保响应式更新,直接替换整个权限对象 + // 确保权限对象存在 + if (!node.permissions) { + this.$set(node, 'permissions', { view: false, edit: false }) + } + // 合并权限:如果已有权限,则合并(取或运算) const newPermissions = { - view: perm.view || false, - edit: perm.edit || false + view: node.permissions.view || paramPerm.view, + edit: node.permissions.edit || paramPerm.edit } this.$set(node, 'permissions', newPermissions) console.log('设置已加载节点权限:', node.id, node.label, { @@ -1370,6 +1543,23 @@ export default { }) }) + // 更新所有子系统权限状态 + this.$nextTick(() => { + Object.keys(this.nodeMap).forEach(nodeId => { + const node = this.nodeMap[nodeId] + if (node && node.type === 'subsystem') { + // 查找该子系统下的任意一个参数节点来触发更新 + const childParameterNode = Object.keys(this.nodeMap).find(id => { + const childNode = this.nodeMap[id] + return childNode && childNode.type === 'parameter' && childNode.id && childNode.id.startsWith(nodeId + '-param-') + }) + if (childParameterNode) { + this.updateSubsystemPermissionFromChildren(this.nodeMap[childParameterNode]) + } + } + }) + }) + console.log('权限数据已保存,待应用权限数量:', this.pendingPermissions.length, '处理后的权限:', processedPerms) }, // 将待应用的权限应用到新加载的节点 @@ -1399,14 +1589,23 @@ export default { this.$set(node, 'permissions', { view: false, edit: false }) } - // 应用权限:parameterPer 是字符串 "查看" 或 "编辑" + // 应用权限:parameterPer 可能是字符串 "查看" 或 "编辑",也可能是数字 1(查看)或 2(编辑) let hasView = false let hasEdit = false matchingPerms.forEach(perm => { - if (perm.parameterPer === '查看') { - hasView = true - } else if (perm.parameterPer === '编辑') { - hasEdit = true + const parameterPer = perm.parameterPer + if (typeof parameterPer === 'string') { + if (parameterPer === '查看') { + hasView = true + } else if (parameterPer === '编辑') { + hasEdit = true + } + } else if (typeof parameterPer === 'number') { + if (parameterPer === 1) { + hasView = true + } else if (parameterPer === 2) { + hasEdit = true + } } }) @@ -1435,14 +1634,27 @@ export default { const roleId = this.formData.rowId || '' const userId = getUserId() - // 直接从 nodeMap 中收集所有参数节点,确保包含所有已加载的节点 + // 收集所有参数节点的权限 + // 如果子系统权限被选中,其下所有参数都会被收集(无论参数是否单独选中) Object.keys(this.nodeMap).forEach(nodeId => { const node = this.nodeMap[nodeId] if (node && node.type === 'parameter') { // 确保权限对象存在 const nodePermissions = node.permissions || { view: false, edit: false } + + // 检查该参数所属的子系统权限状态 + const subsystemId = node.id.split('-param-')[0] + const subsystemNode = this.nodeMap[subsystemId] + const subsystemPermissions = subsystemNode && subsystemNode.permissions + ? subsystemNode.permissions + : { view: false, edit: false } + + // 如果子系统权限被选中,或者参数本身被选中,都需要收集 + const shouldCollectView = nodePermissions.view || subsystemPermissions.view + const shouldCollectEdit = nodePermissions.edit || subsystemPermissions.edit + // 如果选中了查看权限,添加一条记录(parameterPer = 1) - if (nodePermissions.view) { + if (shouldCollectView) { permissions.push({ roleId: roleId, menuName: node.menuName || '', @@ -1452,7 +1664,7 @@ export default { }) } // 如果选中了控制权限,添加一条记录(parameterPer = 2) - if (nodePermissions.edit) { + if (shouldCollectEdit) { permissions.push({ roleId: roleId, menuName: node.menuName || '', @@ -1501,7 +1713,6 @@ export default { } this.$request(request) .asyncThen((resp) => { - this.handleDialogClose() this.loadPermissionData() }) @@ -1532,7 +1743,6 @@ export default { this.$request(request) .asyncThen((resp) => { this.loadPermissionData() - }) .asyncErrorCatch((err) => { console.error('删除失败:', err) @@ -1703,4 +1913,30 @@ export default { .page-content { width: calc(100% - 80px) !important; } + +.person-select { + width: 100%; +} + +::v-deep .person-select { + .el-select-dropdown__item { + display: flex !important; + justify-content: space-between !important; + padding-right: 20px !important; + } +} + +.username-text { + color: #303133 !important; + display: inline-block; + text-align: right !important; +} + +.user-id-text { + color: #909399 !important; + display: inline-block; + margin-left: 20px; + margin-right: 30px; + text-align: right !important; +} diff --git a/src/custom/apaas-custom-mydemo/custom-page/reportList.vue b/src/custom/apaas-custom-mydemo/custom-page/reportList.vue new file mode 100644 index 0000000..9267fdf --- /dev/null +++ b/src/custom/apaas-custom-mydemo/custom-page/reportList.vue @@ -0,0 +1,1660 @@ + + + + + + \ No newline at end of file diff --git a/src/custom/apaas-custom-mydemo/index.js b/src/custom/apaas-custom-mydemo/index.js index 6f70f7c..a10811d 100644 --- a/src/custom/apaas-custom-mydemo/index.js +++ b/src/custom/apaas-custom-mydemo/index.js @@ -8,6 +8,7 @@ import ApaasCustomOtherEnginedata from './custom-page/otherEnginedata.vue' import ApaasCustomCheckData from './custom-page/checkData.vue' import ApaasCustomReportCheck from './custom-page/reportCheck.vue' import ApaasCustomReport from './custom-page/report.vue' +import ApaasCustomReportList from './custom-page/reportList.vue' import ApaasSelfEngineCheck from './custom-page/selfEngineCheck.vue' import ApaasOtherEngineCheck from './custom-page/otherEngineCheck.vue' import ApaasCustomManagerData from './custom-page/managerData.vue' @@ -34,6 +35,7 @@ const install = function(Vue, opts) { Vue.component('apaas-custom-reportCheck', ApaasCustomReportCheck) Vue.component('apaas-custom-engineDetail', ApaasCustomEngineDetail) Vue.component('apaas-custom-report', ApaasCustomReport) + Vue.component('apaas-custom-reportList', ApaasCustomReportList) Vue.component('apaas-custom-reportDetail', ApaasCustomReportDetail) Vue.component('apaas-custom-approvalManagement', ApaasCustomApprovalManagement) Vue.component('apaas-custom-toDoList', ApaasCustomTodoList)