@ecan-bi/indicator-library 1.1.13 → 1.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-b30b7617.mjs","sources":["../node_modules/@ant-design/icons-svg/es/asn/AppstoreAddOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/AppstoreAddOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CloseOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CodeOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CodeOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CopyOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CopyOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/DeleteOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/DeleteOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/DoubleRightOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/DoubleRightOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/DownOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/DownOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/InfoCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/InfoCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/MenuOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/MenuOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/MinusCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/MinusCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/PlusCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/PlusCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/PlusOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/PlusOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/QuestionCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/QuestionCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/ReloadOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/ReloadOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/SettingOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/SettingOutlined.js","../src/directives/focus.ts","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomSortModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomSortModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomGroupModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomGroupModal.vue","../node_modules/nanoid/index.prod.js","../node_modules/dayjs/plugin/quarterOfYear.js","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/Condition.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/Condition.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/ConditionList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/ConditionList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/TruncationList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/TruncationList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/FilterModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/FilterModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/config-name/ConfigName.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/config-name/ConfigName.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/sort-by-cpnt/SortByCpnt.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/sort-by-cpnt/SortByCpnt.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/dim-by-count/DimByCount.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/dim-by-count/DimByCount.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/FormulaCalculation.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/FormulaCalculation.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/CalculationModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/CalculationModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/DataConfigCard.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/DataConfigCard.vue","../src/indicator/indicator-library/data-config/data-config-group/data.ts","../src/indicator/indicator-library/data-config/data-config-group/DataConfigGroup.vue","../src/indicator/indicator-library/data-config/data-config-group/DataConfigGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/data.ts","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/data.tsx","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input/Input.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input/Input.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input-number/InputNumber.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input-number/InputNumber.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/radio-group/RadioGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/select/Select.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/select/Select.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/switch/Switch.vue","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/vue-pick-colors/dist/index.esm.js","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-pick/ColorPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-pick/ColorPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-group-pick/ColorGroupPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-group-pick/ColorGroupPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/form-group/FormGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/form-group/FormGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/textarea/Textarea.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/textarea/Textarea.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/slider/Slider.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/slider/Slider.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/PropsToForm.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/PropsToForm.vue","../src/indicator/editor/Editor.vue","../src/indicator/editor/Editor.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/Condition.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/Condition.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionList.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionList.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionWrap.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionWrap.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionsTable.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionsTable.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/TableColumnConfig.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/TableColumnConfig.vue","../src/indicator/indicator-library/data-config/style-config-group/indicator-container/IndicatorContainer.vue","../src/indicator/indicator-library/data-config/style-config-group/indicator-container/IndicatorContainer.vue","../src/indicator/indicator-library/data-config/style-config-group/StyleConfigGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/StyleConfigGroup.vue","../src/indicator/indicator-library/data-config/control-group/ControlCard.vue","../src/indicator/indicator-library/data-config/control-group/ControlCard.vue","../src/indicator/indicator-library/data-config/control-group/ControlList.vue","../src/indicator/indicator-library/data-config/control-group/ControlList.vue","../src/indicator/indicator-library/data-config/control-group/ControlGroup.vue","../src/indicator/indicator-library/data-config/control-group/ControlGroup.vue","../src/indicator/indicator-library/data-config/variable-group/VariableItem.vue","../src/indicator/indicator-library/data-config/variable-group/VariableItem.vue","../src/indicator/indicator-library/data-config/variable-group/VariableGroup.vue","../src/indicator/indicator-library/data-config/variable-group/VariableGroup.vue","../src/indicator/table-graph/TableGraph.vue","../src/indicator/table-graph/TableGraph.vue","../src/indicator/indicator-library/data-config/DataConfig.vue","../src/indicator/indicator-library/data-config/DataConfig.vue"],"sourcesContent":["// This icon file is generated automatically.\nvar AppstoreAddOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zm52 132H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200zM424 712H296V584c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v128H104c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h128v128c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V776h128c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"appstore-add\", \"theme\": \"outlined\" };\nexport default AppstoreAddOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport AppstoreAddOutlinedSvg from \"@ant-design/icons-svg/es/asn/AppstoreAddOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar AppstoreAddOutlined = function AppstoreAddOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": AppstoreAddOutlinedSvg\n }), null);\n};\n\nAppstoreAddOutlined.displayName = 'AppstoreAddOutlined';\nAppstoreAddOutlined.inheritAttrs = false;\nexport default AppstoreAddOutlined;","// This icon file is generated automatically.\nvar CloseOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z\" } }] }, \"name\": \"close\", \"theme\": \"outlined\" };\nexport default CloseOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CloseOutlined = function CloseOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CloseOutlinedSvg\n }), null);\n};\n\nCloseOutlined.displayName = 'CloseOutlined';\nCloseOutlined.inheritAttrs = false;\nexport default CloseOutlined;","// This icon file is generated automatically.\nvar CodeOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z\" } }] }, \"name\": \"code\", \"theme\": \"outlined\" };\nexport default CodeOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CodeOutlinedSvg from \"@ant-design/icons-svg/es/asn/CodeOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CodeOutlined = function CodeOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CodeOutlinedSvg\n }), null);\n};\n\nCodeOutlined.displayName = 'CodeOutlined';\nCodeOutlined.inheritAttrs = false;\nexport default CodeOutlined;","// This icon file is generated automatically.\nvar CopyOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z\" } }] }, \"name\": \"copy\", \"theme\": \"outlined\" };\nexport default CopyOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CopyOutlinedSvg from \"@ant-design/icons-svg/es/asn/CopyOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CopyOutlined = function CopyOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CopyOutlinedSvg\n }), null);\n};\n\nCopyOutlined.displayName = 'CopyOutlined';\nCopyOutlined.inheritAttrs = false;\nexport default CopyOutlined;","// This icon file is generated automatically.\nvar DeleteOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z\" } }] }, \"name\": \"delete\", \"theme\": \"outlined\" };\nexport default DeleteOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport DeleteOutlinedSvg from \"@ant-design/icons-svg/es/asn/DeleteOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DeleteOutlined = function DeleteOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": DeleteOutlinedSvg\n }), null);\n};\n\nDeleteOutlined.displayName = 'DeleteOutlined';\nDeleteOutlined.inheritAttrs = false;\nexport default DeleteOutlined;","// This icon file is generated automatically.\nvar DoubleRightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z\" } }] }, \"name\": \"double-right\", \"theme\": \"outlined\" };\nexport default DoubleRightOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport DoubleRightOutlinedSvg from \"@ant-design/icons-svg/es/asn/DoubleRightOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DoubleRightOutlined = function DoubleRightOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": DoubleRightOutlinedSvg\n }), null);\n};\n\nDoubleRightOutlined.displayName = 'DoubleRightOutlined';\nDoubleRightOutlined.inheritAttrs = false;\nexport default DoubleRightOutlined;","// This icon file is generated automatically.\nvar DownOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" } }] }, \"name\": \"down\", \"theme\": \"outlined\" };\nexport default DownOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport DownOutlinedSvg from \"@ant-design/icons-svg/es/asn/DownOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DownOutlined = function DownOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": DownOutlinedSvg\n }), null);\n};\n\nDownOutlined.displayName = 'DownOutlined';\nDownOutlined.inheritAttrs = false;\nexport default DownOutlined;","// This icon file is generated automatically.\nvar InfoCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"info-circle\", \"theme\": \"outlined\" };\nexport default InfoCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport InfoCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/InfoCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar InfoCircleOutlined = function InfoCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": InfoCircleOutlinedSvg\n }), null);\n};\n\nInfoCircleOutlined.displayName = 'InfoCircleOutlined';\nInfoCircleOutlined.inheritAttrs = false;\nexport default InfoCircleOutlined;","// This icon file is generated automatically.\nvar MenuOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M904 160H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8zm0 624H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8zm0-312H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"menu\", \"theme\": \"outlined\" };\nexport default MenuOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport MenuOutlinedSvg from \"@ant-design/icons-svg/es/asn/MenuOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar MenuOutlined = function MenuOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": MenuOutlinedSvg\n }), null);\n};\n\nMenuOutlined.displayName = 'MenuOutlined';\nMenuOutlined.inheritAttrs = false;\nexport default MenuOutlined;","// This icon file is generated automatically.\nvar MinusCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M696 480H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }] }, \"name\": \"minus-circle\", \"theme\": \"outlined\" };\nexport default MinusCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport MinusCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/MinusCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar MinusCircleOutlined = function MinusCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": MinusCircleOutlinedSvg\n }), null);\n};\n\nMinusCircleOutlined.displayName = 'MinusCircleOutlined';\nMinusCircleOutlined.inheritAttrs = false;\nexport default MinusCircleOutlined;","// This icon file is generated automatically.\nvar PlusCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }] }, \"name\": \"plus-circle\", \"theme\": \"outlined\" };\nexport default PlusCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PlusCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/PlusCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PlusCircleOutlined = function PlusCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PlusCircleOutlinedSvg\n }), null);\n};\n\nPlusCircleOutlined.displayName = 'PlusCircleOutlined';\nPlusCircleOutlined.inheritAttrs = false;\nexport default PlusCircleOutlined;","// This icon file is generated automatically.\nvar PlusOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z\" } }] }, \"name\": \"plus\", \"theme\": \"outlined\" };\nexport default PlusOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PlusOutlinedSvg from \"@ant-design/icons-svg/es/asn/PlusOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PlusOutlined = function PlusOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PlusOutlinedSvg\n }), null);\n};\n\nPlusOutlined.displayName = 'PlusOutlined';\nPlusOutlined.inheritAttrs = false;\nexport default PlusOutlined;","// This icon file is generated automatically.\nvar QuestionCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z\" } }] }, \"name\": \"question-circle\", \"theme\": \"outlined\" };\nexport default QuestionCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport QuestionCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/QuestionCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar QuestionCircleOutlined = function QuestionCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": QuestionCircleOutlinedSvg\n }), null);\n};\n\nQuestionCircleOutlined.displayName = 'QuestionCircleOutlined';\nQuestionCircleOutlined.inheritAttrs = false;\nexport default QuestionCircleOutlined;","// This icon file is generated automatically.\nvar ReloadOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z\" } }] }, \"name\": \"reload\", \"theme\": \"outlined\" };\nexport default ReloadOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport ReloadOutlinedSvg from \"@ant-design/icons-svg/es/asn/ReloadOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar ReloadOutlined = function ReloadOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": ReloadOutlinedSvg\n }), null);\n};\n\nReloadOutlined.displayName = 'ReloadOutlined';\nReloadOutlined.inheritAttrs = false;\nexport default ReloadOutlined;","// This icon file is generated automatically.\nvar SettingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z\" } }] }, \"name\": \"setting\", \"theme\": \"outlined\" };\nexport default SettingOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport SettingOutlinedSvg from \"@ant-design/icons-svg/es/asn/SettingOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar SettingOutlined = function SettingOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": SettingOutlinedSvg\n }), null);\n};\n\nSettingOutlined.displayName = 'SettingOutlined';\nSettingOutlined.inheritAttrs = false;\nexport default SettingOutlined;","export default {\n mounted (el: HTMLElement) {\n // 自动聚焦\n el.focus()\n }\n}\n","<template>\n <a-modal\n title=\"排序配置\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n @cancel=\"onCancel\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n >\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane key=\"1\" tab=\"组合排序\">\n <div class=\"button-wrapper\">\n <a-button primary @click=\"onAddSort\">\n 新增\n </a-button>\n </div>\n <div class=\"list-wrapper\">\n <div\n class=\"sort-row\"\n v-for=\"(item, index) in combSortList\"\n :key=\"index\"\n >\n <a-select\n v-model:value=\"item.columnName\"\n style=\"width: 200px;\"\n placeholder=\"维度/指标\"\n :options=\"getSortOptions(item)\"\n :fieldNames=\"{\n label: 'label',\n value: 'name'\n }\"\n @change=\"onColumnChange\"\n >\n </a-select>\n <a-select\n v-model:value=\"item.order\"\n style=\"margin-left: 10px;width: 100px;\"\n placeholder=\"升/降序\"\n >\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </a-select>\n <delete-outlined style=\"color: red;margin-left: 10px;\" @click=\"handleDeleteSort(index)\" />\n </div>\n </div>\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"自定义排序\" force-render>\n <div class=\"button-wrapper\">\n <a-button danger @click=\"onDeleteConfig\">\n 删除配置\n </a-button>\n </div>\n <draggable\n v-model=\"customSortList\"\n class=\"custom-sort-list\"\n item-key=\"id\"\n :put=\"false\"\n @change=\"onChange\"\n >\n <template #item=\"{element}\">\n <div class=\"sort-item\">\n {{ element }}\n </div>\n </template>\n </draggable>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject, PropType } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Select as ASelect,\n SelectOption as ASelectOption\n} from 'ant-design-vue'\nimport Draggable from 'vuedraggable'\nimport { REQUEST, INDICATOR_TOKEN, INDICATOR_URL, GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { DeleteOutlined } from '@ant-design/icons-vue'\nexport default defineComponent({\n name: 'CustomSortModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 组合排序用到的选项\n sortList: {\n type: Array as PropType<{ [key: string]: any }[]>,\n default: () => ([])\n }\n },\n components: {\n Draggable,\n AModal,\n AButton,\n ASelect,\n ASelectOption,\n DeleteOutlined\n },\n setup (props, { expose }) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as Function\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const customSortList = ref([])\n const activeKey = ref('1')\n const combSortList = ref([])\n\n const getSortOptions = (item: { [key: string]: any }) => {\n const list = props.sortList.filter(v => !unref(combSortList).find(c => c.columnName === v.name) || item.columnName === v.name)\n const names = []\n list.forEach((item, index) => {\n if (names.includes(item.name)) {\n // 处理多个一样的指标或维度\n item.name = `${item.name}_ecanrepeat_${index}`\n } else {\n names.push(item.name)\n }\n })\n return list\n }\n\n const handleCustomSortList = async () => {\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n customSortList.value = data?.slice(0, 200)\n }\n } catch (e) {\n console.error(e)\n }\n }\n const updateCustomSortList = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n const { label, name } = props.item\n if (unref(activeKey) === '2') {\n // 自定义排序\n item.sort = {\n label,\n columnName: name,\n type: 'CUSTOM',\n customOrderColumns: unref(customSortList)\n }\n } else if (unref(activeKey) === '1') {\n // 组合排序\n if (unref(combSortList)?.length) {\n item.sort = cloneDeep(unref(combSortList))\n } else {\n delete item.sort\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n // 数据是否改变\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const visible = ref(false)\n const showModal = (data: { [key: string]: any }) => {\n const { sort } = data\n // 设置排序列表\n if (sort) {\n if (Array.isArray(sort)) {\n // 设置tab\n activeKey.value = sort[0]?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = cloneDeep(sort)\n } else {\n combSortList.value = []\n }\n } else {\n // 设置tab\n activeKey.value = sort?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = [cloneDeep(sort)]\n } else {\n combSortList.value = []\n }\n }\n } else {\n combSortList.value = []\n }\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n if (unref(activeKey) === '2') {\n // 改变才更新\n if (isDataChange) updateCustomSortList()\n isDataChange = false\n } else {\n updateCustomSortList()\n }\n // 隐藏弹窗\n hideModal()\n }\n expose({\n showModal\n })\n // 弹窗数据初始化\n watch(visible, (visible) => {\n if (visible) {\n const customOrderColumns = props.item?.sort?.customOrderColumns\n if (customOrderColumns == null) {\n handleCustomSortList()\n } else {\n customSortList.value = customOrderColumns\n }\n } else {\n // 关闭时清空数据\n customSortList.value = []\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n\n const onDeleteConfig = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n // const { label, name } = props.item\n // // 自定义排序\n // item.sort = {\n // label,\n // columnName: name\n // }\n delete item.sort\n updateGraphicConfig({\n [props.type]: list\n })\n hideModal()\n }\n\n const onAddSort = () => {\n unref(combSortList).push({\n label: '',\n columnName: null,\n type: 'COMBINATION',\n order: null\n })\n }\n\n const handleDeleteSort = (index: number) => {\n combSortList.value.splice(index, 1)\n }\n\n const onColumnChange = (columnName: string) => {\n const target = unref(combSortList).find(v => v.columnName === columnName)\n if (target) {\n const option = props.sortList.find(v => v.name === columnName)\n if (option) {\n target.label = option.label\n if (option.defaultCode) {\n target.defaultCode = option.defaultCode\n } else {\n delete target.defaultCode\n }\n }\n }\n }\n\n return {\n visible,\n customSortList,\n activeKey,\n combSortList,\n getSortOptions,\n onChange,\n onDeleteConfig,\n onCancel,\n onAddSort,\n handleDeleteSort,\n onColumnChange\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.button-wrapper {\n width: 100%;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 10px;\n}\n\n.custom-sort-list {\n width: 100%;\n overflow: auto;\n height: calc(70vh - 124px);\n list-style: none;\n padding-bottom: 60px;\n padding-right: 10px;\n}\n\n.sort-item {\n border: 1px dashed #aaa;\n margin-bottom: 5px;\n padding: 5px;\n font-size: 14px;\n}\n\n.sort-row {\n margin-bottom: 10px;\n}\n</style>\n","<template>\n <a-modal\n title=\"排序配置\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n @cancel=\"onCancel\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n >\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane key=\"1\" tab=\"组合排序\">\n <div class=\"button-wrapper\">\n <a-button primary @click=\"onAddSort\">\n 新增\n </a-button>\n </div>\n <div class=\"list-wrapper\">\n <div\n class=\"sort-row\"\n v-for=\"(item, index) in combSortList\"\n :key=\"index\"\n >\n <a-select\n v-model:value=\"item.columnName\"\n style=\"width: 200px;\"\n placeholder=\"维度/指标\"\n :options=\"getSortOptions(item)\"\n :fieldNames=\"{\n label: 'label',\n value: 'name'\n }\"\n @change=\"onColumnChange\"\n >\n </a-select>\n <a-select\n v-model:value=\"item.order\"\n style=\"margin-left: 10px;width: 100px;\"\n placeholder=\"升/降序\"\n >\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </a-select>\n <delete-outlined style=\"color: red;margin-left: 10px;\" @click=\"handleDeleteSort(index)\" />\n </div>\n </div>\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"自定义排序\" force-render>\n <div class=\"button-wrapper\">\n <a-button danger @click=\"onDeleteConfig\">\n 删除配置\n </a-button>\n </div>\n <draggable\n v-model=\"customSortList\"\n class=\"custom-sort-list\"\n item-key=\"id\"\n :put=\"false\"\n @change=\"onChange\"\n >\n <template #item=\"{element}\">\n <div class=\"sort-item\">\n {{ element }}\n </div>\n </template>\n </draggable>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject, PropType } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Select as ASelect,\n SelectOption as ASelectOption\n} from 'ant-design-vue'\nimport Draggable from 'vuedraggable'\nimport { REQUEST, INDICATOR_TOKEN, INDICATOR_URL, GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { DeleteOutlined } from '@ant-design/icons-vue'\nexport default defineComponent({\n name: 'CustomSortModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 组合排序用到的选项\n sortList: {\n type: Array as PropType<{ [key: string]: any }[]>,\n default: () => ([])\n }\n },\n components: {\n Draggable,\n AModal,\n AButton,\n ASelect,\n ASelectOption,\n DeleteOutlined\n },\n setup (props, { expose }) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as Function\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const customSortList = ref([])\n const activeKey = ref('1')\n const combSortList = ref([])\n\n const getSortOptions = (item: { [key: string]: any }) => {\n const list = props.sortList.filter(v => !unref(combSortList).find(c => c.columnName === v.name) || item.columnName === v.name)\n const names = []\n list.forEach((item, index) => {\n if (names.includes(item.name)) {\n // 处理多个一样的指标或维度\n item.name = `${item.name}_ecanrepeat_${index}`\n } else {\n names.push(item.name)\n }\n })\n return list\n }\n\n const handleCustomSortList = async () => {\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n customSortList.value = data?.slice(0, 200)\n }\n } catch (e) {\n console.error(e)\n }\n }\n const updateCustomSortList = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n const { label, name } = props.item\n if (unref(activeKey) === '2') {\n // 自定义排序\n item.sort = {\n label,\n columnName: name,\n type: 'CUSTOM',\n customOrderColumns: unref(customSortList)\n }\n } else if (unref(activeKey) === '1') {\n // 组合排序\n if (unref(combSortList)?.length) {\n item.sort = cloneDeep(unref(combSortList))\n } else {\n delete item.sort\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n // 数据是否改变\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const visible = ref(false)\n const showModal = (data: { [key: string]: any }) => {\n const { sort } = data\n // 设置排序列表\n if (sort) {\n if (Array.isArray(sort)) {\n // 设置tab\n activeKey.value = sort[0]?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = cloneDeep(sort)\n } else {\n combSortList.value = []\n }\n } else {\n // 设置tab\n activeKey.value = sort?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = [cloneDeep(sort)]\n } else {\n combSortList.value = []\n }\n }\n } else {\n combSortList.value = []\n }\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n if (unref(activeKey) === '2') {\n // 改变才更新\n if (isDataChange) updateCustomSortList()\n isDataChange = false\n } else {\n updateCustomSortList()\n }\n // 隐藏弹窗\n hideModal()\n }\n expose({\n showModal\n })\n // 弹窗数据初始化\n watch(visible, (visible) => {\n if (visible) {\n const customOrderColumns = props.item?.sort?.customOrderColumns\n if (customOrderColumns == null) {\n handleCustomSortList()\n } else {\n customSortList.value = customOrderColumns\n }\n } else {\n // 关闭时清空数据\n customSortList.value = []\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n\n const onDeleteConfig = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n // const { label, name } = props.item\n // // 自定义排序\n // item.sort = {\n // label,\n // columnName: name\n // }\n delete item.sort\n updateGraphicConfig({\n [props.type]: list\n })\n hideModal()\n }\n\n const onAddSort = () => {\n unref(combSortList).push({\n label: '',\n columnName: null,\n type: 'COMBINATION',\n order: null\n })\n }\n\n const handleDeleteSort = (index: number) => {\n combSortList.value.splice(index, 1)\n }\n\n const onColumnChange = (columnName: string) => {\n const target = unref(combSortList).find(v => v.columnName === columnName)\n if (target) {\n const option = props.sortList.find(v => v.name === columnName)\n if (option) {\n target.label = option.label\n if (option.defaultCode) {\n target.defaultCode = option.defaultCode\n } else {\n delete target.defaultCode\n }\n }\n }\n }\n\n return {\n visible,\n customSortList,\n activeKey,\n combSortList,\n getSortOptions,\n onChange,\n onDeleteConfig,\n onCancel,\n onAddSort,\n handleDeleteSort,\n onColumnChange\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.button-wrapper {\n width: 100%;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 10px;\n}\n\n.custom-sort-list {\n width: 100%;\n overflow: auto;\n height: calc(70vh - 124px);\n list-style: none;\n padding-bottom: 60px;\n padding-right: 10px;\n}\n\n.sort-item {\n border: 1px dashed #aaa;\n margin-bottom: 5px;\n padding: 5px;\n font-size: 14px;\n}\n\n.sort-row {\n margin-bottom: 10px;\n}\n</style>\n","<template>\n <a-modal\n :title=\"title\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <div class=\"custom-group-header\">\n <div class=\"move-and-create\">\n <div>\n <span class=\"select-tip\">\n 已选<span class=\"select-count\">{{ selectCount }}</span\n >个\n </span>\n <a-select\n v-model:value=\"selectGroupIndex\"\n class=\"select-group\"\n placeholder=\"请选择移入分组\"\n >\n <a-select-option\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n {{ customGroup.title }}\n </a-select-option>\n </a-select>\n <a-button @click=\"onMoveInGroup\">移入分组</a-button>\n </div>\n <a-checkbox\n v-model:checked=\"useOtherGroup\"\n @change=\"onUseOtherGroup\"\n >\n 将未分组设为其他分组\n </a-checkbox>\n </div>\n <div style=\"display: flex;align-items: center;\">\n <div class=\"create-group\">\n 创建分组:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createGroupTitle\"\n placeholder=\"请输入创建分组名\"\n @pressEnter=\"onAddGroup\"\n />\n </div>\n <div class=\"create-group\" style=\"margin-left: 40px;\">\n 新建值:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createValueTitle\"\n placeholder=\"请输入名称\"\n @pressEnter=\"onAddValue\"\n />\n </div>\n </div>\n </div>\n <div class=\"custom-group-content\">\n <a-collapse\n v-model:activeKey=\"activeKey\"\n ghost\n >\n <a-collapse-panel\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n <template #header>\n <div\n @click.prevent.stop=\"onEditTitle(index)\"\n v-if=\"!customGroupEditTitleList[index]\"\n >\n {{ customGroup.title }}\n </div>\n <a-input\n class=\"edit-title-input\"\n :value=\"customGroup.title\"\n size=\"small\"\n v-focus\n v-else\n @change=\"onTitleChange($event, index)\"\n @blur=\"onFinishEditTitle(index)\"\n @pressEnter=\"onFinishEditTitle(index)\"\n />\n </template>\n <template #extra>\n <div class=\"extra\">\n <template v-if=\"index === 0 && useOtherGroup\">\n <a-tag\n class=\"tag\"\n color=\"blue\"\n >\n 其他组\n </a-tag>\n </template>\n <template v-if=\"index !== 0\">\n <a-tag\n class=\"tag\"\n color=\"green\"\n >\n 自定义组\n </a-tag>\n <close-outlined @click.prevent.stop=\"onDeleteGroup(index)\" />\n </template>\n </div>\n </template>\n <div class=\"custom-group-list\">\n <a-checkable-tag\n color=\"red\"\n v-model:checked=\"item.checked\"\n class=\"custom-group\"\n v-for=\"(item, i) in customGroup.data\"\n :key=\"i\"\n >\n <span class=\"text\">{{ item.label }}</span>\n </a-checkable-tag>\n </div>\n </a-collapse-panel>\n </a-collapse>\n </div>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject } from 'vue'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport { CloseOutlined } from '@ant-design/icons-vue'\nimport {\n Modal as AModal,\n Select as ASelect,\n SelectOption as ASelectOption,\n Button as AButton,\n Input as AInput,\n Checkbox as ACheckbox,\n Collapse as ACollapse,\n CollapsePanel as ACollapsePanel,\n Tag as ATag,\n CheckableTag as ACheckableTag,\n message\n} from 'ant-design-vue'\nimport focus from '@/directives/focus'\nexport default defineComponent({\n name: 'CustomGroupModal',\n directives: {\n focus\n },\n components: {\n CloseOutlined,\n AModal,\n ASelect,\n ASelectOption,\n AButton,\n AInput,\n ACheckbox,\n ACollapse,\n ACollapsePanel,\n ATag,\n ACheckableTag\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const request = inject(REQUEST) as any\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n let isDataChange = false\n const title = computed(() => `自定义分组-${props.item.label}`)\n const createGroupTitle = ref<string | null>(null)\n const createValueTitle = ref<string | null>(null)\n const activeKey = ref([])\n interface CustomGroup {\n title: string\n data: {\n label: string\n checked: boolean\n }[]\n }\n const customGroupList = ref<CustomGroup[]>([])\n const customGroupTitleSet = computed(() => {\n const customGroupTitleList = unref(customGroupList).map(\n (item) => item.title\n )\n return new Set(customGroupTitleList)\n })\n const customGroupEditTitleList = ref<boolean[]>([])\n watch(\n () => unref(customGroupList).length,\n (length: number) => {\n customGroupEditTitleList.value = new Array(length).fill(false)\n }\n )\n const selectCount = computed(() => {\n let count = 0\n unref(customGroupList).forEach((customGroup) => {\n customGroup.data?.forEach((item) => {\n if (item.checked) {\n count++\n }\n })\n })\n return count\n })\n const onAddGroup = () => {\n const title = unref(createGroupTitle)\n if (!title) {\n message.error('创建分组名不能空')\n return\n }\n if (!unref(customGroupTitleSet).has(title)) {\n unref(customGroupList).push({\n title,\n data: []\n })\n isDataChange = true\n createGroupTitle.value = ''\n } else {\n message.error('分组名已存在,请重新命名')\n }\n }\n const onAddValue = () => {\n const title = unref(createValueTitle)\n if (!title) {\n message.error('值名称不能空')\n return\n }\n let isAllow = true\n if (unref(customGroupList)?.length) {\n for (const group of unref(customGroupList)) {\n if (group?.data?.length) {\n for (const item of group.data) {\n if (item.label === title) {\n isAllow = false\n break\n }\n }\n }\n if (!isAllow) {\n break\n }\n }\n }\n if (isAllow) {\n unref(customGroupList)[0].data.push({\n label: title,\n checked: false\n })\n isDataChange = true\n createValueTitle.value = ''\n } else {\n message.error('名称已存在,请重新命名')\n }\n }\n const onDeleteGroup = (index: number) => {\n unref(customGroupList).splice(index, 1)\n isDataChange = true\n }\n const selectGroupIndex = ref<number | null>(null)\n const onMoveInGroup = () => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n const index = unref(selectGroupIndex)\n if (index == null) {\n message.error('请选择移入分组')\n return\n }\n if (!unref(customGroupList)[index]) {\n message.error('移入分组不存在,请重新选择')\n return\n }\n const selectList: { label: string; checked: boolean }[] = []\n const len = unref(customGroupList).length\n for (let i = 0; i < len; i++) {\n const customGroup = unref(customGroupList)[i]\n unref(customGroupList)[i].data = customGroup.data.filter((item) => {\n if (item.checked) {\n selectList.push({\n ...item,\n checked: false\n })\n }\n return !item.checked\n })\n }\n unref(customGroupList)[index].data = [\n ...selectList,\n ...unref(customGroupList)[index].data\n ]\n isDataChange = true\n }\n const onEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = true\n }\n const onFinishEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = false\n }\n const onTitleChange = (event: Event, index: number) => {\n const value = (event.target as any).value\n if (unref(customGroupTitleSet).has(value)) {\n message.error('组名不能相同,请修改')\n }\n unref(customGroupList)[index].title = value\n isDataChange = true\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const useOtherGroup = ref(false)\n const updateCustomGroup = () => {\n const customGroups = unref(customGroupList)\n let otherGroupName = ''\n if (unref(useOtherGroup)) {\n otherGroupName = customGroups[0]?.title\n }\n const len = customGroups?.length\n const groupInfoMap: { [key: string]: any } = {}\n for (let i = 1; i < len; i++) {\n const customGroup = customGroups[i] || {}\n const { title, data } = customGroup as any\n groupInfoMap[title] = data?.map((item) => item.label) || []\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const item = list[props.index]\n // 更新其他组名称\n item.customGroup = {\n groupInfoMap,\n otherGroupName\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const visible = ref(false)\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n // 隐藏弹窗\n hideModal()\n // 更新数据\n if (isDataChange) updateCustomGroup()\n isDataChange = false\n }\n const onUseOtherGroup = () => {\n isDataChange = true\n }\n const allLabelSet = new Set()\n const handleInitData = async () => {\n const customGroup = props.item.customGroup || {}\n const otherGroupName = customGroup.otherGroupName\n const groupInfoMap = customGroup.groupInfoMap\n if (otherGroupName === '' || otherGroupName == null) {\n useOtherGroup.value = false\n }\n unref(customGroupList)[0] = {\n title: otherGroupName || '未分组',\n data: []\n }\n let i = 1\n for (const key in groupInfoMap) {\n if (Object.prototype.hasOwnProperty.call(groupInfoMap, key)) {\n const values = groupInfoMap[key] as string[]\n const data = values.map((item) => {\n allLabelSet.add(item)\n return {\n label: item,\n checked: false\n }\n })\n // 其他项\n unref(customGroupList)[i] = {\n title: key as string,\n data\n }\n i++\n }\n }\n await handleCustomGroupList() // 处理 customGroupList\n }\n const handleCustomGroupList = async () => {\n try {\n const res = await request.post(\n `${INDICATOR_URL}/diagram/groupvalue`,\n {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n const { success, data = [] } = res.data\n if (success) {\n // 截取200\n const rows: { label: string; checked: boolean }[] = []\n data?.slice(0, 200)?.forEach((item: string) => {\n if (!allLabelSet.has(item)) {\n rows.push({\n label: item,\n checked: false\n })\n }\n })\n unref(customGroupList)[0].data = rows\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n watch(\n visible,\n (visible) => {\n if (visible) {\n handleInitData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n },\n {\n flush: 'post'\n }\n )\n\n expose({\n showModal\n })\n return {\n visible,\n title,\n activeKey,\n customGroupList,\n onCancel,\n useOtherGroup,\n selectCount,\n createGroupTitle,\n createValueTitle,\n onAddGroup,\n onDeleteGroup,\n onMoveInGroup,\n selectGroupIndex,\n onEditTitle,\n onTitleChange,\n onFinishEditTitle,\n onUseOtherGroup,\n onAddValue,\n customGroupEditTitleList\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.move-and-create {\n display: flex;\n justify-content: space-between;\n margin-bottom: 15px;\n}\n\n.create-group {\n display: flex;\n align-items: center;\n font-size: 15px;\n}\n\n.create-group-name {\n width: 140px;\n margin-left: 10px;\n}\n\n.custom-group-content {\n overflow-y: auto;\n}\n\n.tag {\n margin-right: 10px;\n}\n\n.edit-title-input {\n width: 150px;\n}\n\n.extra {\n width: 90px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n}\n\n.custom-group {\n margin: 5px;\n padding: 3px 5px;\n}\n\n.text {\n font-size: 14px;\n}\n\n.select-tip {\n margin-right: 10px;\n font-size: 15px;\n}\n\n.select-count {\n color: red;\n margin: 0 3px;\n}\n\n.select-group {\n margin-right: 15px;\n width: 140px;\n}\n\n.cancel-button {\n margin-right: 20px;\n}\n\n.footer {\n display: flex;\n}\n</style>\n\n<style lang=\"less\">\n.custom-group-content {\n .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 0;\n }\n}\n</style>\n","<template>\n <a-modal\n :title=\"title\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <div class=\"custom-group-header\">\n <div class=\"move-and-create\">\n <div>\n <span class=\"select-tip\">\n 已选<span class=\"select-count\">{{ selectCount }}</span\n >个\n </span>\n <a-select\n v-model:value=\"selectGroupIndex\"\n class=\"select-group\"\n placeholder=\"请选择移入分组\"\n >\n <a-select-option\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n {{ customGroup.title }}\n </a-select-option>\n </a-select>\n <a-button @click=\"onMoveInGroup\">移入分组</a-button>\n </div>\n <a-checkbox\n v-model:checked=\"useOtherGroup\"\n @change=\"onUseOtherGroup\"\n >\n 将未分组设为其他分组\n </a-checkbox>\n </div>\n <div style=\"display: flex;align-items: center;\">\n <div class=\"create-group\">\n 创建分组:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createGroupTitle\"\n placeholder=\"请输入创建分组名\"\n @pressEnter=\"onAddGroup\"\n />\n </div>\n <div class=\"create-group\" style=\"margin-left: 40px;\">\n 新建值:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createValueTitle\"\n placeholder=\"请输入名称\"\n @pressEnter=\"onAddValue\"\n />\n </div>\n </div>\n </div>\n <div class=\"custom-group-content\">\n <a-collapse\n v-model:activeKey=\"activeKey\"\n ghost\n >\n <a-collapse-panel\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n <template #header>\n <div\n @click.prevent.stop=\"onEditTitle(index)\"\n v-if=\"!customGroupEditTitleList[index]\"\n >\n {{ customGroup.title }}\n </div>\n <a-input\n class=\"edit-title-input\"\n :value=\"customGroup.title\"\n size=\"small\"\n v-focus\n v-else\n @change=\"onTitleChange($event, index)\"\n @blur=\"onFinishEditTitle(index)\"\n @pressEnter=\"onFinishEditTitle(index)\"\n />\n </template>\n <template #extra>\n <div class=\"extra\">\n <template v-if=\"index === 0 && useOtherGroup\">\n <a-tag\n class=\"tag\"\n color=\"blue\"\n >\n 其他组\n </a-tag>\n </template>\n <template v-if=\"index !== 0\">\n <a-tag\n class=\"tag\"\n color=\"green\"\n >\n 自定义组\n </a-tag>\n <close-outlined @click.prevent.stop=\"onDeleteGroup(index)\" />\n </template>\n </div>\n </template>\n <div class=\"custom-group-list\">\n <a-checkable-tag\n color=\"red\"\n v-model:checked=\"item.checked\"\n class=\"custom-group\"\n v-for=\"(item, i) in customGroup.data\"\n :key=\"i\"\n >\n <span class=\"text\">{{ item.label }}</span>\n </a-checkable-tag>\n </div>\n </a-collapse-panel>\n </a-collapse>\n </div>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject } from 'vue'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport { CloseOutlined } from '@ant-design/icons-vue'\nimport {\n Modal as AModal,\n Select as ASelect,\n SelectOption as ASelectOption,\n Button as AButton,\n Input as AInput,\n Checkbox as ACheckbox,\n Collapse as ACollapse,\n CollapsePanel as ACollapsePanel,\n Tag as ATag,\n CheckableTag as ACheckableTag,\n message\n} from 'ant-design-vue'\nimport focus from '@/directives/focus'\nexport default defineComponent({\n name: 'CustomGroupModal',\n directives: {\n focus\n },\n components: {\n CloseOutlined,\n AModal,\n ASelect,\n ASelectOption,\n AButton,\n AInput,\n ACheckbox,\n ACollapse,\n ACollapsePanel,\n ATag,\n ACheckableTag\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const request = inject(REQUEST) as any\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n let isDataChange = false\n const title = computed(() => `自定义分组-${props.item.label}`)\n const createGroupTitle = ref<string | null>(null)\n const createValueTitle = ref<string | null>(null)\n const activeKey = ref([])\n interface CustomGroup {\n title: string\n data: {\n label: string\n checked: boolean\n }[]\n }\n const customGroupList = ref<CustomGroup[]>([])\n const customGroupTitleSet = computed(() => {\n const customGroupTitleList = unref(customGroupList).map(\n (item) => item.title\n )\n return new Set(customGroupTitleList)\n })\n const customGroupEditTitleList = ref<boolean[]>([])\n watch(\n () => unref(customGroupList).length,\n (length: number) => {\n customGroupEditTitleList.value = new Array(length).fill(false)\n }\n )\n const selectCount = computed(() => {\n let count = 0\n unref(customGroupList).forEach((customGroup) => {\n customGroup.data?.forEach((item) => {\n if (item.checked) {\n count++\n }\n })\n })\n return count\n })\n const onAddGroup = () => {\n const title = unref(createGroupTitle)\n if (!title) {\n message.error('创建分组名不能空')\n return\n }\n if (!unref(customGroupTitleSet).has(title)) {\n unref(customGroupList).push({\n title,\n data: []\n })\n isDataChange = true\n createGroupTitle.value = ''\n } else {\n message.error('分组名已存在,请重新命名')\n }\n }\n const onAddValue = () => {\n const title = unref(createValueTitle)\n if (!title) {\n message.error('值名称不能空')\n return\n }\n let isAllow = true\n if (unref(customGroupList)?.length) {\n for (const group of unref(customGroupList)) {\n if (group?.data?.length) {\n for (const item of group.data) {\n if (item.label === title) {\n isAllow = false\n break\n }\n }\n }\n if (!isAllow) {\n break\n }\n }\n }\n if (isAllow) {\n unref(customGroupList)[0].data.push({\n label: title,\n checked: false\n })\n isDataChange = true\n createValueTitle.value = ''\n } else {\n message.error('名称已存在,请重新命名')\n }\n }\n const onDeleteGroup = (index: number) => {\n unref(customGroupList).splice(index, 1)\n isDataChange = true\n }\n const selectGroupIndex = ref<number | null>(null)\n const onMoveInGroup = () => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n const index = unref(selectGroupIndex)\n if (index == null) {\n message.error('请选择移入分组')\n return\n }\n if (!unref(customGroupList)[index]) {\n message.error('移入分组不存在,请重新选择')\n return\n }\n const selectList: { label: string; checked: boolean }[] = []\n const len = unref(customGroupList).length\n for (let i = 0; i < len; i++) {\n const customGroup = unref(customGroupList)[i]\n unref(customGroupList)[i].data = customGroup.data.filter((item) => {\n if (item.checked) {\n selectList.push({\n ...item,\n checked: false\n })\n }\n return !item.checked\n })\n }\n unref(customGroupList)[index].data = [\n ...selectList,\n ...unref(customGroupList)[index].data\n ]\n isDataChange = true\n }\n const onEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = true\n }\n const onFinishEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = false\n }\n const onTitleChange = (event: Event, index: number) => {\n const value = (event.target as any).value\n if (unref(customGroupTitleSet).has(value)) {\n message.error('组名不能相同,请修改')\n }\n unref(customGroupList)[index].title = value\n isDataChange = true\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const useOtherGroup = ref(false)\n const updateCustomGroup = () => {\n const customGroups = unref(customGroupList)\n let otherGroupName = ''\n if (unref(useOtherGroup)) {\n otherGroupName = customGroups[0]?.title\n }\n const len = customGroups?.length\n const groupInfoMap: { [key: string]: any } = {}\n for (let i = 1; i < len; i++) {\n const customGroup = customGroups[i] || {}\n const { title, data } = customGroup as any\n groupInfoMap[title] = data?.map((item) => item.label) || []\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const item = list[props.index]\n // 更新其他组名称\n item.customGroup = {\n groupInfoMap,\n otherGroupName\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const visible = ref(false)\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n // 隐藏弹窗\n hideModal()\n // 更新数据\n if (isDataChange) updateCustomGroup()\n isDataChange = false\n }\n const onUseOtherGroup = () => {\n isDataChange = true\n }\n const allLabelSet = new Set()\n const handleInitData = async () => {\n const customGroup = props.item.customGroup || {}\n const otherGroupName = customGroup.otherGroupName\n const groupInfoMap = customGroup.groupInfoMap\n if (otherGroupName === '' || otherGroupName == null) {\n useOtherGroup.value = false\n }\n unref(customGroupList)[0] = {\n title: otherGroupName || '未分组',\n data: []\n }\n let i = 1\n for (const key in groupInfoMap) {\n if (Object.prototype.hasOwnProperty.call(groupInfoMap, key)) {\n const values = groupInfoMap[key] as string[]\n const data = values.map((item) => {\n allLabelSet.add(item)\n return {\n label: item,\n checked: false\n }\n })\n // 其他项\n unref(customGroupList)[i] = {\n title: key as string,\n data\n }\n i++\n }\n }\n await handleCustomGroupList() // 处理 customGroupList\n }\n const handleCustomGroupList = async () => {\n try {\n const res = await request.post(\n `${INDICATOR_URL}/diagram/groupvalue`,\n {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n const { success, data = [] } = res.data\n if (success) {\n // 截取200\n const rows: { label: string; checked: boolean }[] = []\n data?.slice(0, 200)?.forEach((item: string) => {\n if (!allLabelSet.has(item)) {\n rows.push({\n label: item,\n checked: false\n })\n }\n })\n unref(customGroupList)[0].data = rows\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n watch(\n visible,\n (visible) => {\n if (visible) {\n handleInitData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n },\n {\n flush: 'post'\n }\n )\n\n expose({\n showModal\n })\n return {\n visible,\n title,\n activeKey,\n customGroupList,\n onCancel,\n useOtherGroup,\n selectCount,\n createGroupTitle,\n createValueTitle,\n onAddGroup,\n onDeleteGroup,\n onMoveInGroup,\n selectGroupIndex,\n onEditTitle,\n onTitleChange,\n onFinishEditTitle,\n onUseOtherGroup,\n onAddValue,\n customGroupEditTitleList\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.move-and-create {\n display: flex;\n justify-content: space-between;\n margin-bottom: 15px;\n}\n\n.create-group {\n display: flex;\n align-items: center;\n font-size: 15px;\n}\n\n.create-group-name {\n width: 140px;\n margin-left: 10px;\n}\n\n.custom-group-content {\n overflow-y: auto;\n}\n\n.tag {\n margin-right: 10px;\n}\n\n.edit-title-input {\n width: 150px;\n}\n\n.extra {\n width: 90px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n}\n\n.custom-group {\n margin: 5px;\n padding: 3px 5px;\n}\n\n.text {\n font-size: 14px;\n}\n\n.select-tip {\n margin-right: 10px;\n font-size: 15px;\n}\n\n.select-count {\n color: red;\n margin: 0 3px;\n}\n\n.select-group {\n margin-right: 15px;\n width: 140px;\n}\n\n.cancel-button {\n margin-right: 20px;\n}\n\n.footer {\n display: flex;\n}\n</style>\n\n<style lang=\"less\">\n.custom-group-content {\n .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 0;\n }\n}\n</style>\n","import { urlAlphabet } from './url-alphabet/index.js'\nif (false) {\n if (\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative' &&\n typeof crypto === 'undefined'\n ) {\n throw new Error(\n 'React Native does not have a built-in secure random generator. ' +\n 'If you don’t need unpredictable IDs use `nanoid/non-secure`. ' +\n 'For secure IDs, import `react-native-get-random-values` ' +\n 'before Nano ID.'\n )\n }\n if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {\n throw new Error(\n 'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +\n ' before importing Nano ID to fix IE 11 support'\n )\n }\n if (typeof crypto === 'undefined') {\n throw new Error(\n 'Your browser does not have secure random generator. ' +\n 'If you don’t need unpredictable IDs, you can use nanoid/non-secure.'\n )\n }\n}\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, size, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * size) / alphabet.length)\n return () => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n while (size--) {\n let byte = bytes[size] & 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte < 63) {\n id += '_'\n } else {\n id += '-'\n }\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","<template>\n <div class=\"condition\">\n <a-select\n class=\"field-name\"\n :value=\"condition.fieldName\"\n @change=\"onFieldChange\"\n >\n <template v-for=\"(option, _index) in fieldOptions\" :key=\"_index\">\n <a-select-option :value=\"option.value\">\n <span :title=\"option.label\">{{ option.label }}</span>\n </a-select-option>\n </template>\n </a-select>\n <div class=\"rule\">\n <a-dropdown class=\"dropdown\" v-if=\"isDateType\" :trigger=\"['click']\">\n <template #overlay>\n <a-menu @click=\"handleMenuClick\">\n <a-sub-menu\n v-for=\"item in ruleOptions\"\n :key=\"item.value\">\n <template #title>\n <span :style=\"condition.rule === item.value ? 'color: #1890FF;' : ''\">{{ item.label }}</span>\n </template>\n <a-sub-menu\n v-for=\"mr in menuRule\"\n :key=\"mr.value\"\n :disabled=\"mr.value === 'component' && !controlList?.length\">\n <template #title>\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value ? 'color: #1890FF;' : ''\">\n {{ mr.label }}\n </span>\n </template>\n <a-menu-item\n v-for=\"fl in formatList\"\n :key=\"fl.value\">\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value && condition.dateFormat === fl.value ? 'color: #1890FF;' : ''\">\n {{ fl.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n </a-sub-menu>\n </a-menu>\n </template>\n <a-button>\n {{ dateBtnLabel }}\n <DownOutlined :style=\"downIconStyle\"/>\n </a-button>\n </a-dropdown>\n <a-select\n v-else\n style=\"width: 100%;\"\n :value=\"condition.rule\"\n :options=\"ruleOptions\"\n @change=\"onRuleChange\"\n >\n </a-select>\n </div>\n <div class=\"data-type\" v-show=\"(!condition.fieldType || ['TEXT', 'NUMBER'].includes(condition.fieldType)) && isShowCustomDataType\">\n <a-select\n style=\"width: 100%;\"\n :value=\"condition.dataType\"\n @change=\"onDataTypeChange\"\n >\n <template v-for=\"(option, _index) in dataTypeList\" :key=\"_index\">\n <a-select-option :value=\"option.value\">{{ option.label }}</a-select-option>\n </template>\n </a-select>\n </div>\n <div class=\"field-value\" v-if=\"isDateType\" style=\"display: flex;align-items: center;\">\n <template v-if=\"condition.dataType === 'time'\">\n <a-date-picker\n v-if=\"isUseCurrentTime\"\n disabled\n style=\"width: calc(100% - 35px);margin-right: 10px;\"\n :value=\"currentTime\"\n :format=\"condition.dateFormat\"\n />\n <a-date-picker\n v-else\n style=\"width: calc(100% - 35px);margin-right: 10px;\"\n v-model:value=\"condition.fieldValue\"\n :format=\"condition.dateFormat\"\n />\n </template>\n <a-select\n show-search\n v-else-if=\"typeof condition.fieldValue === 'string'\"\n :style=\"{\n width: condition.fieldValue === 'PARENT' ? '' : 'calc(100% - 35px)',\n marginRight: '10px'\n }\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <template v-if=\"condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\n <template #content>\n <div class=\"popover-content-wrap\">\n <div class=\"use-current-time\" v-if=\"condition.dataType !== 'component'\">\n <a-checkbox v-model:checked=\"isUseCurrentTime\">使用当前时间</a-checkbox>\n </div>\n <a-tabs :defaultActiveKey=\"condition.activeKey\" @change=\"changeTabInitDate\">\n <a-tab-pane v-for=\"(tabItem, tabIndex) in tabDateList\" :key=\"tabIndex\" :tab=\"tabItem.label\">\n <div class=\"tabFilterRadio\">\n <a-radio-group v-model:value=\"tabItem.radioValue\" @change=\"changeRadioValue($event,tabItem)\">\n <div v-if=\"showTime\">相对当前时间:{{tabItem.value}}</div>\n <div v-else>相对当前时间:{{getFieldValue(tabIndex)}}</div>\n <a-radio :style=\"dateRadioStyle\" value=\"1\">\n <a-input-number v-model:value=\"tabItem.beforeNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'-','1')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.beforeLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"2\">\n <a-input-number v-model:value=\"tabItem.afterNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'+','2')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.afterLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"3\" v-if=\"tabItem.beforeText\">\n {{tabItem.beforeText}}\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"4\" v-if=\"tabItem.afterText\">\n {{tabItem.afterText}}\n </a-radio>\n </a-radio-group>\n <div style=\"position: absolute;bottom: 10px;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okDatePickConfig(tabItem,tabIndex)\">确定</a-button>\n </div>\n </div>\n </a-tab-pane>\n <!-- 自定义 -->\n <a-tab-pane tab=\"自定义\" :key=\"5\">\n <div style=\"display: flex;\">\n <a-select\n v-model:value=\"customTabData.expression\"\n allowClear\n style=\"width: 120px;margin-right: 10px;\"\n >\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.unit\" style=\"margin-right: 10px;\">\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"QUARTER\">季度</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"WEEK\">周</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.around\">\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n </div>\n <div style=\"position: absolute;bottom: 10px;left: 0;text-align: center;width: 100%;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okCustomConfig\">确定</a-button>\n </div>\n </a-tab-pane>\n </a-tabs>\n </div>\n </template>\n <div class=\"calendar-wrap\" @click=\"popoverVisible = true;\">\n <appstore-add-outlined />\n </div>\n </a-popover>\n </div>\n <a-select\n class=\"field-value\"\n v-else-if=\"['IN', 'NOT_IN'].includes(condition.rule || '')\"\n :value=\"fieldValues\"\n mode=\"multiple\"\n :options=\"valueOptions\"\n @change=\"onFieldValueSelectChange\"\n >\n </a-select>\n <a-select\n class=\"field-value\"\n show-search\n v-else-if=\"(!condition.fieldType || ['TEXT', 'NUMBER'].includes(condition.fieldType)) && isShowCustomDataType && condition.dataType === 'component'\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <a-input\n v-else\n class=\"field-value\"\n v-model:value=\"condition.fieldValue\"\n />\n <template v-if=\"!isDateType && condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, ref, watch, onMounted } from 'vue'\nimport { CloseOutlined, DownOutlined, AppstoreAddOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n Select as ASelect,\n SelectOption as ASelectOption,\n Input as AInput,\n DatePicker as ADatePicker,\n Button as AButton,\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n SubMenu as ASubMenu,\n Popover as APopover,\n Tabs as ATabs,\n TabPane as ATabPane,\n RadioGroup as ARadioGroup,\n Radio as ARadio,\n InputNumber as AInputNumber\n} from 'ant-design-vue'\nimport 'ant-design-vue/es/popover/style'\nimport 'ant-design-vue/es/dropdown/style'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport { nanoid } from 'nanoid'\nimport dayjs, { Dayjs } from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\nimport { cloneDeep } from 'lodash-es'\ndayjs.extend(quarterOfYear)\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n DownOutlined,\n AppstoreAddOutlined,\n ASelect,\n AInput,\n ADatePicker,\n AButton,\n ADropdown,\n AMenu,\n AMenuItem,\n ASubMenu,\n APopover,\n ATabs,\n ATabPane,\n ARadioGroup,\n ARadio,\n AInputNumber,\n ASelectOption,\n MenuOutlined\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const dataViewColumns = inject(DATA_VIEW_COLUMNS) as any\n const renderComponents = inject(RENDER_USED_COMPONENTS) as any\n const isUseCurrentTime = ref(false)\n const currentTime = dayjs()\n const controlList = computed(() => {\n const result = []\n unref(renderComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`,\n id\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`,\n id\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`,\n id\n })\n }\n })\n return result\n })\n const keyNameOptions = computed(() => {\n return [\n {\n label: '父页面',\n value: 'PARENT',\n id: 'PARENT',\n keyName: 'PARENT'\n },\n ...unref(controlList)\n ]\n })\n const dataViewId = computed(() => unref(graphicConfig)?.dataViewId)\n const source = computed(() => unref(graphicConfig)?.source)\n // const isDataViewMode = computed(() => unref(source) === 'SQL_VIEW')\n const showTime = ref(false)\n const dateRadioStyle = {\n display: 'block',\n height: '34px',\n lineHeight: '34px',\n marginTop: '3px'\n }\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n const customTabData = ref({\n expression: 'rangeValue',\n unit: 'YEAR',\n around: 'before'\n })\n const tabDateList = ref([\n { key: 0, value: '', label: '年', type: 'years', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '年前', afterLabel: '年后', beforeText: '年初', afterText: '年末' },\n { key: 1, value: '', label: '季度', type: 'quarters', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个季度前', afterLabel: '个季度后', beforeText: '季度初', afterText: '季度末' },\n { key: 2, value: '', label: '月', type: 'months', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个月前', afterLabel: '个月后', beforeText: '月初', afterText: '月末' },\n { key: 3, value: '', label: '周', type: 'weeks', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '周前', afterLabel: '周后', beforeText: '', afterText: '' },\n { key: 4, value: '', label: '天', type: 'days', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '天前', afterLabel: '天后', beforeText: '今天', afterText: '' }\n ])\n const compareList = [\n { label: '年份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '季的季度', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '月的月份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '周的周', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '天的日期', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' }\n ]\n const menuRule = [\n { label: '时间值', value: 'time' },\n { label: '过滤组件值', value: 'component' }\n ]\n const dataTypeList = [\n { label: '自定义值', value: '' },\n { label: '组件值', value: 'component' }\n ]\n // const { getDataList } = inject(DATA_LIST, {\n // getDataList: () => ([] as { key:string } [])\n // })\n interface Condition {\n fieldName: undefined | string\n fieldType: undefined | string\n rule: undefined | string\n id: undefined | string\n fieldValue: undefined | string | Dayjs\n label: string\n targetSource: string\n typeGuid: string\n indexCode: string\n indexCodeNum: string\n dateFormat?: string\n dataType?: string\n activeKey?: number\n radioValue?: string\n calcWays?: any\n dateCalcTypes?: any\n componentId?: string\n useCurrentTime?: boolean\n keyValue?: string\n modelKey?: string\n prop?: string\n edvDataSetId?: string\n }\n const condition = ref<Condition>({\n fieldName: props.data?.fieldName,\n fieldType: props.data?.fieldType,\n rule: props.data?.rule,\n id: props.data?.id,\n fieldValue: getDefaultFieldValue(),\n label: props.data?.label,\n // 暂时传空\n targetSource: '',\n typeGuid: props.data?.typeGuid,\n indexCode: props.data?.indexCode,\n indexCodeNum: props.data?.indexCodeNum,\n dataType: props.data?.dataType || '',\n componentId: props.data?.componentId || '',\n useCurrentTime: !!props.data?.useCurrentTime,\n keyValue: props.data?.keyValue,\n modelKey: props.data?.modelKey,\n prop: props.data?.prop\n })\n\n function getDefaultFieldValue () {\n const { fieldType = '', dataType = '', fieldValue = '' } = props.data\n if (fieldType === 'DATE' && dataType === 'time') {\n return fieldValue ? dayjs(fieldValue) : fieldValue\n } else if (dataType === 'component') {\n const target = unref(controlList).find(v => v.keyName === fieldValue)\n if (target) {\n return target.value\n } else {\n return fieldValue\n }\n } else {\n return fieldValue\n }\n }\n const dataSetfieldOptions = ref([])\n\n const popoverVisible = ref(false)\n const isDateType = computed(() => condition.value.fieldType === 'DATE')\n const fieldOptions = computed(() => {\n const type = props.type\n const { source } = unref(graphicConfig)\n let result = []\n const dims = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const otherList = ['controlList', 'sqlConditions', 'variableList', 'variableConditions']\n if (source === 'EDV_DATA_SET') {\n // 获取当前使用数据集列表数据\n // const dataSetList = JSON.parse(sessionStorage.getItem('dataSetList'))\n // if (Array.isArray(dataSetList.dataViewColumns)) {\n // result = dataSetList.dataViewColumns.map(v => {\n // return {\n // datato: dataSetList.datato,\n // dataSetParams: dataSetList.dataSetParams,\n // ...v\n // }\n // })\n // }\n result = dataSetfieldOptions.value\n\n // eslint-disable-next-line vue/no-async-in-computed-properties\n // aw request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n // headers: {\n // Authentication: indicatorToken,\n // operateContext: 'ygt'\n // }\n // }).then((res: any) => {\n // if (res.data.success) {\n // console.log(res.data)\n // // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n // setTimeout(() => {\n // result = res.data.data.column.map((v:any) => {\n // return {\n // ...v,\n // genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n // edvDataSetId: res.data.data.id,\n // name: v.columnName,\n // label: v.columnName\n\n // }\n // })\n // })\n\n // console.log(result)\n // }\n // }).catch((err) => {\n // console.error(err)\n // })\n } else if (dims.includes(type)) {\n let options = [] as { key:string } []\n for (const key in unref(graphicConfig)) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), key) && !otherList.includes(key)) {\n const value = unref(graphicConfig)[key]\n if (Array.isArray(value)) {\n if (dims.includes(key)) {\n options = options.concat(value.filter(v => v.show))\n } else {\n options = options.concat(value)\n }\n }\n }\n }\n result = options\n } else if (['leftAxisList', 'rightAxisList', 'indicators'].includes(type)) {\n // return unref(getDataList())\n result = unref(dataViewColumns)\n }\n return result.map((v: any) => {\n return {\n ...v,\n label: v.label || v.title,\n value: v.name\n }\n })\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any}, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n watch(condition, (condition) => {\n const result = cloneDeep(condition)\n if (condition.fieldType === 'DATE' && condition.dataType !== 'component' && condition.fieldValue) {\n result.fieldValue = (condition.fieldValue as Dayjs).format(condition.dateFormat)\n }\n updateCondition(result, props.index, props.path)\n }, {\n deep: true\n })\n\n watch(isUseCurrentTime, (value: boolean) => {\n condition.value.fieldValue = ''\n condition.value.useCurrentTime = value\n })\n\n const onFieldChange = (value: string) => {\n const option = unref(fieldOptions).find(v => v.value === value) || {}\n const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n condition.value = {\n id,\n fieldName: name,\n fieldType: genericType,\n label,\n // 重置规则\n rule: '',\n fieldValue: genericType === 'DATE' ? null : undefined,\n targetSource: '',\n typeGuid,\n indexCode,\n edvDataSetId,\n indexCodeNum,\n dataType: '',\n useCurrentTime: false,\n keyValue: unref(condition)?.keyValue || nanoid(),\n modelKey: '',\n prop: ''\n }\n }\n const onChangeComponent = (value: string) => {\n const option = unref(controlList).find(v => v.value === value) || {}\n unref(condition).componentId = option.id || ''\n }\n const ruleOptions = computed(() => {\n const type = unref(condition).fieldType\n\n if (type === 'TEXT') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'NUMBER') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'DATE') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n }\n })\n const dateBtnLabel = computed(() => {\n let result = ''\n const obj = unref(ruleOptions).find(item => item.value === unref(condition).rule)\n if (obj) {\n result = obj.label\n }\n return result\n })\n const downIconStyle = computed(() => {\n let style: any = {\n fontSize: '12px'\n }\n if (!unref(dateBtnLabel)) {\n style = {\n ...style,\n position: 'absolute',\n right: '11px',\n top: '9px'\n }\n }\n return style\n })\n const valueOptions = ref< { [key:string]: any } []>([])\n const handleValueOptions = async () => {\n if (unref(valueOptions).length > 0) return\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: unref(condition).fieldName,\n hrpIndexTypeGuid: unref(condition).typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(condition).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n valueOptions.value = data?.slice(0, 200)?.map((item: string) => ({ label: item, value: item }))\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onRuleChange = (value: string) => {\n unref(condition).rule = value\n unref(condition).fieldValue = unref(condition).fieldType === 'DATE' ? null : undefined\n if (['IN', 'NOT_IN'].includes(value)) {\n handleValueOptions()\n }\n }\n const onDataTypeChange = (value: string) => {\n unref(condition).dataType = value\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n const fieldValues = ref<string []>()\n const onFieldValueSelectChange = (values: string []) => {\n fieldValues.value = values\n unref(condition).fieldValue = values?.join(',') || ''\n }\n\n const handleMenuClick = (data: any) => {\n const { keyPath } = data\n unref(condition).rule = keyPath[0]\n unref(condition).dataType = keyPath[1]\n unref(condition).dateFormat = keyPath[2]\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n\n onMounted(async () => {\n condition.value.dataType = props.data?.dataType || ''\n condition.value.componentId = props.data?.componentId || ''\n condition.value.keyValue = props.data?.keyValue\n condition.value.modelKey = props.data?.modelKey\n condition.value.prop = props.data?.prop\n if (unref(condition).fieldType === 'DATE') {\n const { activeKey, dateCalcTypes = [] } = props.data || {}\n unref(condition).dateFormat = props.data?.dateFormat\n unref(condition).activeKey = activeKey\n unref(condition).calcWays = props.data?.calcWays || []\n unref(condition).dateCalcTypes = dateCalcTypes\n if (unref(condition).useCurrentTime && unref(condition).dataType !== 'component') {\n // 使用当前时间\n isUseCurrentTime.value = true\n }\n if (activeKey === 5) {\n // 范围差值\n const calcWay = unref(condition).calcWays[0]\n if (calcWay) {\n const vals = calcWay.split('-')\n unref(customTabData).expression = vals[0]\n unref(customTabData).around = vals[1]\n }\n unref(customTabData).unit = dateCalcTypes[0] || 'YEAR'\n } else {\n unref(condition).radioValue = props.data?.radioValue || ''\n const tabItem = unref(tabDateList).find(item => item.key === props.data?.activeKey)\n if (tabItem) {\n setTabItemData(tabItem, props.data)\n }\n }\n } else {\n fieldValues.value = props.data?.fieldValue?.split(',') || []\n }\n const { fieldType, fieldName, rule } = condition.value\n if (fieldType !== 'DATE' && fieldName && rule && ['IN', 'NOT_IN'].includes(rule)) {\n handleValueOptions()\n }\n const { source } = unref(graphicConfig)\n if (source === 'EDV_DATA_SET') {\n await request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }).then((res: any) => {\n if (res.data.success) {\n console.log(res.data)\n // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n\n dataSetfieldOptions.value = res.data.data.column.map((v:any) => {\n return {\n ...v,\n genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n edvDataSetId: res.data.data.id,\n name: v.columnName,\n label: v.columnName\n\n }\n })\n }\n }).catch((err) => {\n console.error(err)\n })\n }\n })\n\n // 时间相对配置Tab切换\n const changeTabInitDate = (activeKey: any) => {\n if (unref(condition).activeKey === activeKey) {\n unref(tabDateList)[activeKey].radioValue = unref(condition).radioValue\n if (unref(tabDateList)[unref(condition).activeKey]) {\n unref(tabDateList)[unref(condition).activeKey].radioValue = unref(condition).radioValue\n if (unref(condition).radioValue === '1') {\n unref(tabDateList)[activeKey].beforeNum = unref(condition).calcWays[0]\n } else if (unref(condition).radioValue === '2') {\n unref(tabDateList)[activeKey].afterNum = unref(condition).calcWays[0]\n }\n }\n return\n }\n unref(tabDateList).forEach(row => {\n row.beforeNum = 0\n row.afterNum = 0\n row.radioValue = '1'\n row.value = ''\n })\n }\n\n // 时间相对配置选中值改变\n const changeRadioValue = (e: any, tabItem: any) => {\n showTime.value = true\n const value = e.target.value\n const type = tabItem.type\n const format = unref(condition).dateFormat\n const beforeNum = Math.abs(tabItem.beforeNum)\n const afterNum = tabItem.afterNum\n tabItem.value = getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n const getFieldValue = (tabIndex: number) => {\n const activeKey = unref(condition).activeKey\n if (tabIndex !== activeKey) {\n return\n }\n let type = ''\n if (activeKey === 0) {\n type = 'years'\n } else if (activeKey === 1) {\n type = 'quarters'\n } else if (activeKey === 2) {\n type = 'months'\n } else if (activeKey === 3) {\n type = 'weeks'\n } else if (activeKey === 4) {\n type = 'days'\n }\n const format = unref(condition).dateFormat\n const value = unref(condition).radioValue\n let beforeNum = 0\n let afterNum = 0\n if (value === '1') {\n beforeNum = Math.abs(unref(condition).calcWays[0])\n } else if (value === '2') {\n afterNum = unref(condition).calcWays[0]\n }\n return getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n // 时间相对配置中的比较失焦\n const blurCompare = (e: any, tabItem: any, flag: any, key: any) => {\n showTime.value = true\n if (tabItem.radioValue === key) {\n const value = e.target.value\n if (flag === '+') {\n tabItem.value = dayjs().add(value, tabItem.type).format(unref(condition).dateFormat)\n } else {\n tabItem.value = dayjs().subtract(value, tabItem.type).format(unref(condition).dateFormat)\n }\n }\n }\n\n // 保存时间相对配置\n const okDatePickConfig = (tabItem: any, tabIndex: any) => {\n // if (unref(condition).fieldType !== 'DATE' || unref(condition).dataType !== 'component') {\n // condition.value.fieldValue = dayjs(tabItem.value, unref(condition).dateFormat)\n // }\n if (!unref(condition).calcWays) {\n unref(condition).calcWays = []\n }\n // condition.value.absoluteBool = true\n unref(condition).activeKey = tabIndex\n unref(condition).radioValue = tabItem.radioValue\n if (tabItem.radioValue === '1') {\n unref(condition).calcWays[0] = '-' + tabItem.beforeNum\n } else if (tabItem.radioValue === '2') {\n unref(condition).calcWays[0] = tabItem.afterNum\n } else if (tabItem.radioValue === '3') {\n if (tabIndex === 4) {\n unref(condition).calcWays[0] = '0'// 今天\n } else {\n unref(condition).calcWays[0] = 'BEGIN'\n }\n } else if (tabItem.radioValue === '4') {\n unref(condition).calcWays[0] = 'END'\n }\n if (tabIndex === 0) {\n unref(condition).dateCalcTypes = ['YEAR']\n } else if (tabIndex === 1) {\n unref(condition).dateCalcTypes = ['QUARTER']\n } else if (tabIndex === 2) {\n unref(condition).dateCalcTypes = ['MONTH']\n } else if (tabIndex === 3) {\n unref(condition).dateCalcTypes = ['WEEK']\n } else if (tabIndex === 4) {\n unref(condition).dateCalcTypes = ['DAY']\n }\n popoverVisible.value = false\n }\n\n const okCustomConfig = () => {\n unref(condition).activeKey = 5\n unref(condition).dateCalcTypes = [unref(customTabData).unit]\n unref(condition).calcWays[0] = `${unref(customTabData).expression}-${unref(customTabData).around}`\n popoverVisible.value = false\n }\n\n function setTabItemData (tabItem: any, source: any) {\n const { radioValue = '', calcWays = [] } = source\n tabItem.radioValue = radioValue\n if (calcWays?.length) {\n if (radioValue === '1') {\n tabItem.beforeNum = Math.abs(calcWays[0])\n } else if (radioValue === '2') {\n tabItem.afterNum = calcWays[0]\n }\n }\n }\n\n // 相对时间设置\n function getDateValue (value: any, type: any, format: any, beforeNum: any, afterNum: any) {\n if (value === '1') {\n return dayjs().subtract(beforeNum, type).format(format)\n } else if (value === '2') {\n return dayjs().add(afterNum, type).format(format)\n } else if (value === '3') {\n if (type === 'years') {\n return dayjs().startOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().startOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().startOf('month').format(format)\n } else if (type === 'days') {\n return dayjs().format(format)\n }\n } else if (value === '4') {\n if (type === 'years') {\n return dayjs().endOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().endOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().endOf('month').format(format)\n }\n }\n return ''\n }\n\n const filterOption = (input: string, option: any) => {\n return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n\n const isShowCustomDataType = computed(() => !['IN', 'NOT_IN'].includes(unref(condition).rule))\n\n const clickConditionMenu = ({ key }) => {\n addCondition(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n return {\n fieldOptions,\n ruleOptions,\n onFieldChange,\n condition,\n valueOptions,\n onRuleChange,\n onDataTypeChange,\n onFieldValueSelectChange,\n fieldValues,\n onDelete,\n isDateType,\n formatList,\n tabDateList,\n compareList,\n menuRule,\n dateBtnLabel,\n downIconStyle,\n popoverVisible,\n dateRadioStyle,\n showTime,\n controlList,\n keyNameOptions,\n dataTypeList,\n customTabData,\n isUseCurrentTime,\n currentTime,\n isShowCustomDataType,\n handleMenuClick,\n changeTabInitDate,\n changeRadioValue,\n getFieldValue,\n blurCompare,\n okDatePickConfig,\n onChangeComponent,\n filterOption,\n okCustomConfig,\n clickConditionMenu,\n dataSetfieldOptions\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 20%;\n margin-right: 20px;\n}\n\n.field-value {\n flex: 1;\n margin-left: 20px;\n margin-right: 20px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 20px;\n}\n\n.rule {\n width: 20%;\n}\n\n.delete-icon,\n.more-icon {\n margin-right: 10px;\n}\n\n.dropdown {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n width: 100%;\n padding-left: 11px;\n padding-right: 11px;\n}\n\n.calendar-wrap {\n width: 25px;\n border: 1px solid #d9d9d9;\n border-radius: 50%;\n height: 25px;\n text-align: center;\n cursor: pointer;\n &:hover {\n border-color: rgb(24, 144, 255);\n }\n}\n\n.popover-content-wrap {\n width: 400px;\n height: 300px;\n padding: 0 12px;\n .ant-tabs{\n height: 100%;\n .tabFilterRadio{\n display: flex;\n justify-content: center;\n height: 100%;\n }\n }\n}\n</style>\n<style lang=\"less\">\n.ant-dropdown-menu-title-content {\n white-space: nowrap;\n}\n</style>\n","<template>\n <div class=\"condition\">\n <a-select\n class=\"field-name\"\n :value=\"condition.fieldName\"\n @change=\"onFieldChange\"\n >\n <template v-for=\"(option, _index) in fieldOptions\" :key=\"_index\">\n <a-select-option :value=\"option.value\">\n <span :title=\"option.label\">{{ option.label }}</span>\n </a-select-option>\n </template>\n </a-select>\n <div class=\"rule\">\n <a-dropdown class=\"dropdown\" v-if=\"isDateType\" :trigger=\"['click']\">\n <template #overlay>\n <a-menu @click=\"handleMenuClick\">\n <a-sub-menu\n v-for=\"item in ruleOptions\"\n :key=\"item.value\">\n <template #title>\n <span :style=\"condition.rule === item.value ? 'color: #1890FF;' : ''\">{{ item.label }}</span>\n </template>\n <a-sub-menu\n v-for=\"mr in menuRule\"\n :key=\"mr.value\"\n :disabled=\"mr.value === 'component' && !controlList?.length\">\n <template #title>\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value ? 'color: #1890FF;' : ''\">\n {{ mr.label }}\n </span>\n </template>\n <a-menu-item\n v-for=\"fl in formatList\"\n :key=\"fl.value\">\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value && condition.dateFormat === fl.value ? 'color: #1890FF;' : ''\">\n {{ fl.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n </a-sub-menu>\n </a-menu>\n </template>\n <a-button>\n {{ dateBtnLabel }}\n <DownOutlined :style=\"downIconStyle\"/>\n </a-button>\n </a-dropdown>\n <a-select\n v-else\n style=\"width: 100%;\"\n :value=\"condition.rule\"\n :options=\"ruleOptions\"\n @change=\"onRuleChange\"\n >\n </a-select>\n </div>\n <div class=\"data-type\" v-show=\"(!condition.fieldType || ['TEXT', 'NUMBER'].includes(condition.fieldType)) && isShowCustomDataType\">\n <a-select\n style=\"width: 100%;\"\n :value=\"condition.dataType\"\n @change=\"onDataTypeChange\"\n >\n <template v-for=\"(option, _index) in dataTypeList\" :key=\"_index\">\n <a-select-option :value=\"option.value\">{{ option.label }}</a-select-option>\n </template>\n </a-select>\n </div>\n <div class=\"field-value\" v-if=\"isDateType\" style=\"display: flex;align-items: center;\">\n <template v-if=\"condition.dataType === 'time'\">\n <a-date-picker\n v-if=\"isUseCurrentTime\"\n disabled\n style=\"width: calc(100% - 35px);margin-right: 10px;\"\n :value=\"currentTime\"\n :format=\"condition.dateFormat\"\n />\n <a-date-picker\n v-else\n style=\"width: calc(100% - 35px);margin-right: 10px;\"\n v-model:value=\"condition.fieldValue\"\n :format=\"condition.dateFormat\"\n />\n </template>\n <a-select\n show-search\n v-else-if=\"typeof condition.fieldValue === 'string'\"\n :style=\"{\n width: condition.fieldValue === 'PARENT' ? '' : 'calc(100% - 35px)',\n marginRight: '10px'\n }\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <template v-if=\"condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\n <template #content>\n <div class=\"popover-content-wrap\">\n <div class=\"use-current-time\" v-if=\"condition.dataType !== 'component'\">\n <a-checkbox v-model:checked=\"isUseCurrentTime\">使用当前时间</a-checkbox>\n </div>\n <a-tabs :defaultActiveKey=\"condition.activeKey\" @change=\"changeTabInitDate\">\n <a-tab-pane v-for=\"(tabItem, tabIndex) in tabDateList\" :key=\"tabIndex\" :tab=\"tabItem.label\">\n <div class=\"tabFilterRadio\">\n <a-radio-group v-model:value=\"tabItem.radioValue\" @change=\"changeRadioValue($event,tabItem)\">\n <div v-if=\"showTime\">相对当前时间:{{tabItem.value}}</div>\n <div v-else>相对当前时间:{{getFieldValue(tabIndex)}}</div>\n <a-radio :style=\"dateRadioStyle\" value=\"1\">\n <a-input-number v-model:value=\"tabItem.beforeNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'-','1')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.beforeLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"2\">\n <a-input-number v-model:value=\"tabItem.afterNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'+','2')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.afterLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"3\" v-if=\"tabItem.beforeText\">\n {{tabItem.beforeText}}\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"4\" v-if=\"tabItem.afterText\">\n {{tabItem.afterText}}\n </a-radio>\n </a-radio-group>\n <div style=\"position: absolute;bottom: 10px;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okDatePickConfig(tabItem,tabIndex)\">确定</a-button>\n </div>\n </div>\n </a-tab-pane>\n <!-- 自定义 -->\n <a-tab-pane tab=\"自定义\" :key=\"5\">\n <div style=\"display: flex;\">\n <a-select\n v-model:value=\"customTabData.expression\"\n allowClear\n style=\"width: 120px;margin-right: 10px;\"\n >\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.unit\" style=\"margin-right: 10px;\">\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"QUARTER\">季度</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"WEEK\">周</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.around\">\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n </div>\n <div style=\"position: absolute;bottom: 10px;left: 0;text-align: center;width: 100%;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okCustomConfig\">确定</a-button>\n </div>\n </a-tab-pane>\n </a-tabs>\n </div>\n </template>\n <div class=\"calendar-wrap\" @click=\"popoverVisible = true;\">\n <appstore-add-outlined />\n </div>\n </a-popover>\n </div>\n <a-select\n class=\"field-value\"\n v-else-if=\"['IN', 'NOT_IN'].includes(condition.rule || '')\"\n :value=\"fieldValues\"\n mode=\"multiple\"\n :options=\"valueOptions\"\n @change=\"onFieldValueSelectChange\"\n >\n </a-select>\n <a-select\n class=\"field-value\"\n show-search\n v-else-if=\"(!condition.fieldType || ['TEXT', 'NUMBER'].includes(condition.fieldType)) && isShowCustomDataType && condition.dataType === 'component'\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <a-input\n v-else\n class=\"field-value\"\n v-model:value=\"condition.fieldValue\"\n />\n <template v-if=\"!isDateType && condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, ref, watch, onMounted } from 'vue'\nimport { CloseOutlined, DownOutlined, AppstoreAddOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n Select as ASelect,\n SelectOption as ASelectOption,\n Input as AInput,\n DatePicker as ADatePicker,\n Button as AButton,\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n SubMenu as ASubMenu,\n Popover as APopover,\n Tabs as ATabs,\n TabPane as ATabPane,\n RadioGroup as ARadioGroup,\n Radio as ARadio,\n InputNumber as AInputNumber\n} from 'ant-design-vue'\nimport 'ant-design-vue/es/popover/style'\nimport 'ant-design-vue/es/dropdown/style'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport { nanoid } from 'nanoid'\nimport dayjs, { Dayjs } from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\nimport { cloneDeep } from 'lodash-es'\ndayjs.extend(quarterOfYear)\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n DownOutlined,\n AppstoreAddOutlined,\n ASelect,\n AInput,\n ADatePicker,\n AButton,\n ADropdown,\n AMenu,\n AMenuItem,\n ASubMenu,\n APopover,\n ATabs,\n ATabPane,\n ARadioGroup,\n ARadio,\n AInputNumber,\n ASelectOption,\n MenuOutlined\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const dataViewColumns = inject(DATA_VIEW_COLUMNS) as any\n const renderComponents = inject(RENDER_USED_COMPONENTS) as any\n const isUseCurrentTime = ref(false)\n const currentTime = dayjs()\n const controlList = computed(() => {\n const result = []\n unref(renderComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`,\n id\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`,\n id\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`,\n id\n })\n }\n })\n return result\n })\n const keyNameOptions = computed(() => {\n return [\n {\n label: '父页面',\n value: 'PARENT',\n id: 'PARENT',\n keyName: 'PARENT'\n },\n ...unref(controlList)\n ]\n })\n const dataViewId = computed(() => unref(graphicConfig)?.dataViewId)\n const source = computed(() => unref(graphicConfig)?.source)\n // const isDataViewMode = computed(() => unref(source) === 'SQL_VIEW')\n const showTime = ref(false)\n const dateRadioStyle = {\n display: 'block',\n height: '34px',\n lineHeight: '34px',\n marginTop: '3px'\n }\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n const customTabData = ref({\n expression: 'rangeValue',\n unit: 'YEAR',\n around: 'before'\n })\n const tabDateList = ref([\n { key: 0, value: '', label: '年', type: 'years', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '年前', afterLabel: '年后', beforeText: '年初', afterText: '年末' },\n { key: 1, value: '', label: '季度', type: 'quarters', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个季度前', afterLabel: '个季度后', beforeText: '季度初', afterText: '季度末' },\n { key: 2, value: '', label: '月', type: 'months', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个月前', afterLabel: '个月后', beforeText: '月初', afterText: '月末' },\n { key: 3, value: '', label: '周', type: 'weeks', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '周前', afterLabel: '周后', beforeText: '', afterText: '' },\n { key: 4, value: '', label: '天', type: 'days', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '天前', afterLabel: '天后', beforeText: '今天', afterText: '' }\n ])\n const compareList = [\n { label: '年份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '季的季度', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '月的月份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '周的周', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '天的日期', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' }\n ]\n const menuRule = [\n { label: '时间值', value: 'time' },\n { label: '过滤组件值', value: 'component' }\n ]\n const dataTypeList = [\n { label: '自定义值', value: '' },\n { label: '组件值', value: 'component' }\n ]\n // const { getDataList } = inject(DATA_LIST, {\n // getDataList: () => ([] as { key:string } [])\n // })\n interface Condition {\n fieldName: undefined | string\n fieldType: undefined | string\n rule: undefined | string\n id: undefined | string\n fieldValue: undefined | string | Dayjs\n label: string\n targetSource: string\n typeGuid: string\n indexCode: string\n indexCodeNum: string\n dateFormat?: string\n dataType?: string\n activeKey?: number\n radioValue?: string\n calcWays?: any\n dateCalcTypes?: any\n componentId?: string\n useCurrentTime?: boolean\n keyValue?: string\n modelKey?: string\n prop?: string\n edvDataSetId?: string\n }\n const condition = ref<Condition>({\n fieldName: props.data?.fieldName,\n fieldType: props.data?.fieldType,\n rule: props.data?.rule,\n id: props.data?.id,\n fieldValue: getDefaultFieldValue(),\n label: props.data?.label,\n // 暂时传空\n targetSource: '',\n typeGuid: props.data?.typeGuid,\n indexCode: props.data?.indexCode,\n indexCodeNum: props.data?.indexCodeNum,\n dataType: props.data?.dataType || '',\n componentId: props.data?.componentId || '',\n useCurrentTime: !!props.data?.useCurrentTime,\n keyValue: props.data?.keyValue,\n modelKey: props.data?.modelKey,\n prop: props.data?.prop\n })\n\n function getDefaultFieldValue () {\n const { fieldType = '', dataType = '', fieldValue = '' } = props.data\n if (fieldType === 'DATE' && dataType === 'time') {\n return fieldValue ? dayjs(fieldValue) : fieldValue\n } else if (dataType === 'component') {\n const target = unref(controlList).find(v => v.keyName === fieldValue)\n if (target) {\n return target.value\n } else {\n return fieldValue\n }\n } else {\n return fieldValue\n }\n }\n const dataSetfieldOptions = ref([])\n\n const popoverVisible = ref(false)\n const isDateType = computed(() => condition.value.fieldType === 'DATE')\n const fieldOptions = computed(() => {\n const type = props.type\n const { source } = unref(graphicConfig)\n let result = []\n const dims = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const otherList = ['controlList', 'sqlConditions', 'variableList', 'variableConditions']\n if (source === 'EDV_DATA_SET') {\n // 获取当前使用数据集列表数据\n // const dataSetList = JSON.parse(sessionStorage.getItem('dataSetList'))\n // if (Array.isArray(dataSetList.dataViewColumns)) {\n // result = dataSetList.dataViewColumns.map(v => {\n // return {\n // datato: dataSetList.datato,\n // dataSetParams: dataSetList.dataSetParams,\n // ...v\n // }\n // })\n // }\n result = dataSetfieldOptions.value\n\n // eslint-disable-next-line vue/no-async-in-computed-properties\n // aw request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n // headers: {\n // Authentication: indicatorToken,\n // operateContext: 'ygt'\n // }\n // }).then((res: any) => {\n // if (res.data.success) {\n // console.log(res.data)\n // // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n // setTimeout(() => {\n // result = res.data.data.column.map((v:any) => {\n // return {\n // ...v,\n // genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n // edvDataSetId: res.data.data.id,\n // name: v.columnName,\n // label: v.columnName\n\n // }\n // })\n // })\n\n // console.log(result)\n // }\n // }).catch((err) => {\n // console.error(err)\n // })\n } else if (dims.includes(type)) {\n let options = [] as { key:string } []\n for (const key in unref(graphicConfig)) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), key) && !otherList.includes(key)) {\n const value = unref(graphicConfig)[key]\n if (Array.isArray(value)) {\n if (dims.includes(key)) {\n options = options.concat(value.filter(v => v.show))\n } else {\n options = options.concat(value)\n }\n }\n }\n }\n result = options\n } else if (['leftAxisList', 'rightAxisList', 'indicators'].includes(type)) {\n // return unref(getDataList())\n result = unref(dataViewColumns)\n }\n return result.map((v: any) => {\n return {\n ...v,\n label: v.label || v.title,\n value: v.name\n }\n })\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any}, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n watch(condition, (condition) => {\n const result = cloneDeep(condition)\n if (condition.fieldType === 'DATE' && condition.dataType !== 'component' && condition.fieldValue) {\n result.fieldValue = (condition.fieldValue as Dayjs).format(condition.dateFormat)\n }\n updateCondition(result, props.index, props.path)\n }, {\n deep: true\n })\n\n watch(isUseCurrentTime, (value: boolean) => {\n condition.value.fieldValue = ''\n condition.value.useCurrentTime = value\n })\n\n const onFieldChange = (value: string) => {\n const option = unref(fieldOptions).find(v => v.value === value) || {}\n const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n condition.value = {\n id,\n fieldName: name,\n fieldType: genericType,\n label,\n // 重置规则\n rule: '',\n fieldValue: genericType === 'DATE' ? null : undefined,\n targetSource: '',\n typeGuid,\n indexCode,\n edvDataSetId,\n indexCodeNum,\n dataType: '',\n useCurrentTime: false,\n keyValue: unref(condition)?.keyValue || nanoid(),\n modelKey: '',\n prop: ''\n }\n }\n const onChangeComponent = (value: string) => {\n const option = unref(controlList).find(v => v.value === value) || {}\n unref(condition).componentId = option.id || ''\n }\n const ruleOptions = computed(() => {\n const type = unref(condition).fieldType\n\n if (type === 'TEXT') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'NUMBER') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'DATE') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n }\n })\n const dateBtnLabel = computed(() => {\n let result = ''\n const obj = unref(ruleOptions).find(item => item.value === unref(condition).rule)\n if (obj) {\n result = obj.label\n }\n return result\n })\n const downIconStyle = computed(() => {\n let style: any = {\n fontSize: '12px'\n }\n if (!unref(dateBtnLabel)) {\n style = {\n ...style,\n position: 'absolute',\n right: '11px',\n top: '9px'\n }\n }\n return style\n })\n const valueOptions = ref< { [key:string]: any } []>([])\n const handleValueOptions = async () => {\n if (unref(valueOptions).length > 0) return\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: unref(condition).fieldName,\n hrpIndexTypeGuid: unref(condition).typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(condition).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n valueOptions.value = data?.slice(0, 200)?.map((item: string) => ({ label: item, value: item }))\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onRuleChange = (value: string) => {\n unref(condition).rule = value\n unref(condition).fieldValue = unref(condition).fieldType === 'DATE' ? null : undefined\n if (['IN', 'NOT_IN'].includes(value)) {\n handleValueOptions()\n }\n }\n const onDataTypeChange = (value: string) => {\n unref(condition).dataType = value\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n const fieldValues = ref<string []>()\n const onFieldValueSelectChange = (values: string []) => {\n fieldValues.value = values\n unref(condition).fieldValue = values?.join(',') || ''\n }\n\n const handleMenuClick = (data: any) => {\n const { keyPath } = data\n unref(condition).rule = keyPath[0]\n unref(condition).dataType = keyPath[1]\n unref(condition).dateFormat = keyPath[2]\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n\n onMounted(async () => {\n condition.value.dataType = props.data?.dataType || ''\n condition.value.componentId = props.data?.componentId || ''\n condition.value.keyValue = props.data?.keyValue\n condition.value.modelKey = props.data?.modelKey\n condition.value.prop = props.data?.prop\n if (unref(condition).fieldType === 'DATE') {\n const { activeKey, dateCalcTypes = [] } = props.data || {}\n unref(condition).dateFormat = props.data?.dateFormat\n unref(condition).activeKey = activeKey\n unref(condition).calcWays = props.data?.calcWays || []\n unref(condition).dateCalcTypes = dateCalcTypes\n if (unref(condition).useCurrentTime && unref(condition).dataType !== 'component') {\n // 使用当前时间\n isUseCurrentTime.value = true\n }\n if (activeKey === 5) {\n // 范围差值\n const calcWay = unref(condition).calcWays[0]\n if (calcWay) {\n const vals = calcWay.split('-')\n unref(customTabData).expression = vals[0]\n unref(customTabData).around = vals[1]\n }\n unref(customTabData).unit = dateCalcTypes[0] || 'YEAR'\n } else {\n unref(condition).radioValue = props.data?.radioValue || ''\n const tabItem = unref(tabDateList).find(item => item.key === props.data?.activeKey)\n if (tabItem) {\n setTabItemData(tabItem, props.data)\n }\n }\n } else {\n fieldValues.value = props.data?.fieldValue?.split(',') || []\n }\n const { fieldType, fieldName, rule } = condition.value\n if (fieldType !== 'DATE' && fieldName && rule && ['IN', 'NOT_IN'].includes(rule)) {\n handleValueOptions()\n }\n const { source } = unref(graphicConfig)\n if (source === 'EDV_DATA_SET') {\n await request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }).then((res: any) => {\n if (res.data.success) {\n console.log(res.data)\n // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n\n dataSetfieldOptions.value = res.data.data.column.map((v:any) => {\n return {\n ...v,\n genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n edvDataSetId: res.data.data.id,\n name: v.columnName,\n label: v.columnName\n\n }\n })\n }\n }).catch((err) => {\n console.error(err)\n })\n }\n })\n\n // 时间相对配置Tab切换\n const changeTabInitDate = (activeKey: any) => {\n if (unref(condition).activeKey === activeKey) {\n unref(tabDateList)[activeKey].radioValue = unref(condition).radioValue\n if (unref(tabDateList)[unref(condition).activeKey]) {\n unref(tabDateList)[unref(condition).activeKey].radioValue = unref(condition).radioValue\n if (unref(condition).radioValue === '1') {\n unref(tabDateList)[activeKey].beforeNum = unref(condition).calcWays[0]\n } else if (unref(condition).radioValue === '2') {\n unref(tabDateList)[activeKey].afterNum = unref(condition).calcWays[0]\n }\n }\n return\n }\n unref(tabDateList).forEach(row => {\n row.beforeNum = 0\n row.afterNum = 0\n row.radioValue = '1'\n row.value = ''\n })\n }\n\n // 时间相对配置选中值改变\n const changeRadioValue = (e: any, tabItem: any) => {\n showTime.value = true\n const value = e.target.value\n const type = tabItem.type\n const format = unref(condition).dateFormat\n const beforeNum = Math.abs(tabItem.beforeNum)\n const afterNum = tabItem.afterNum\n tabItem.value = getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n const getFieldValue = (tabIndex: number) => {\n const activeKey = unref(condition).activeKey\n if (tabIndex !== activeKey) {\n return\n }\n let type = ''\n if (activeKey === 0) {\n type = 'years'\n } else if (activeKey === 1) {\n type = 'quarters'\n } else if (activeKey === 2) {\n type = 'months'\n } else if (activeKey === 3) {\n type = 'weeks'\n } else if (activeKey === 4) {\n type = 'days'\n }\n const format = unref(condition).dateFormat\n const value = unref(condition).radioValue\n let beforeNum = 0\n let afterNum = 0\n if (value === '1') {\n beforeNum = Math.abs(unref(condition).calcWays[0])\n } else if (value === '2') {\n afterNum = unref(condition).calcWays[0]\n }\n return getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n // 时间相对配置中的比较失焦\n const blurCompare = (e: any, tabItem: any, flag: any, key: any) => {\n showTime.value = true\n if (tabItem.radioValue === key) {\n const value = e.target.value\n if (flag === '+') {\n tabItem.value = dayjs().add(value, tabItem.type).format(unref(condition).dateFormat)\n } else {\n tabItem.value = dayjs().subtract(value, tabItem.type).format(unref(condition).dateFormat)\n }\n }\n }\n\n // 保存时间相对配置\n const okDatePickConfig = (tabItem: any, tabIndex: any) => {\n // if (unref(condition).fieldType !== 'DATE' || unref(condition).dataType !== 'component') {\n // condition.value.fieldValue = dayjs(tabItem.value, unref(condition).dateFormat)\n // }\n if (!unref(condition).calcWays) {\n unref(condition).calcWays = []\n }\n // condition.value.absoluteBool = true\n unref(condition).activeKey = tabIndex\n unref(condition).radioValue = tabItem.radioValue\n if (tabItem.radioValue === '1') {\n unref(condition).calcWays[0] = '-' + tabItem.beforeNum\n } else if (tabItem.radioValue === '2') {\n unref(condition).calcWays[0] = tabItem.afterNum\n } else if (tabItem.radioValue === '3') {\n if (tabIndex === 4) {\n unref(condition).calcWays[0] = '0'// 今天\n } else {\n unref(condition).calcWays[0] = 'BEGIN'\n }\n } else if (tabItem.radioValue === '4') {\n unref(condition).calcWays[0] = 'END'\n }\n if (tabIndex === 0) {\n unref(condition).dateCalcTypes = ['YEAR']\n } else if (tabIndex === 1) {\n unref(condition).dateCalcTypes = ['QUARTER']\n } else if (tabIndex === 2) {\n unref(condition).dateCalcTypes = ['MONTH']\n } else if (tabIndex === 3) {\n unref(condition).dateCalcTypes = ['WEEK']\n } else if (tabIndex === 4) {\n unref(condition).dateCalcTypes = ['DAY']\n }\n popoverVisible.value = false\n }\n\n const okCustomConfig = () => {\n unref(condition).activeKey = 5\n unref(condition).dateCalcTypes = [unref(customTabData).unit]\n unref(condition).calcWays[0] = `${unref(customTabData).expression}-${unref(customTabData).around}`\n popoverVisible.value = false\n }\n\n function setTabItemData (tabItem: any, source: any) {\n const { radioValue = '', calcWays = [] } = source\n tabItem.radioValue = radioValue\n if (calcWays?.length) {\n if (radioValue === '1') {\n tabItem.beforeNum = Math.abs(calcWays[0])\n } else if (radioValue === '2') {\n tabItem.afterNum = calcWays[0]\n }\n }\n }\n\n // 相对时间设置\n function getDateValue (value: any, type: any, format: any, beforeNum: any, afterNum: any) {\n if (value === '1') {\n return dayjs().subtract(beforeNum, type).format(format)\n } else if (value === '2') {\n return dayjs().add(afterNum, type).format(format)\n } else if (value === '3') {\n if (type === 'years') {\n return dayjs().startOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().startOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().startOf('month').format(format)\n } else if (type === 'days') {\n return dayjs().format(format)\n }\n } else if (value === '4') {\n if (type === 'years') {\n return dayjs().endOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().endOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().endOf('month').format(format)\n }\n }\n return ''\n }\n\n const filterOption = (input: string, option: any) => {\n return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n\n const isShowCustomDataType = computed(() => !['IN', 'NOT_IN'].includes(unref(condition).rule))\n\n const clickConditionMenu = ({ key }) => {\n addCondition(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n return {\n fieldOptions,\n ruleOptions,\n onFieldChange,\n condition,\n valueOptions,\n onRuleChange,\n onDataTypeChange,\n onFieldValueSelectChange,\n fieldValues,\n onDelete,\n isDateType,\n formatList,\n tabDateList,\n compareList,\n menuRule,\n dateBtnLabel,\n downIconStyle,\n popoverVisible,\n dateRadioStyle,\n showTime,\n controlList,\n keyNameOptions,\n dataTypeList,\n customTabData,\n isUseCurrentTime,\n currentTime,\n isShowCustomDataType,\n handleMenuClick,\n changeTabInitDate,\n changeRadioValue,\n getFieldValue,\n blurCompare,\n okDatePickConfig,\n onChangeComponent,\n filterOption,\n okCustomConfig,\n clickConditionMenu,\n dataSetfieldOptions\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 20%;\n margin-right: 20px;\n}\n\n.field-value {\n flex: 1;\n margin-left: 20px;\n margin-right: 20px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 20px;\n}\n\n.rule {\n width: 20%;\n}\n\n.delete-icon,\n.more-icon {\n margin-right: 10px;\n}\n\n.dropdown {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n width: 100%;\n padding-left: 11px;\n padding-right: 11px;\n}\n\n.calendar-wrap {\n width: 25px;\n border: 1px solid #d9d9d9;\n border-radius: 50%;\n height: 25px;\n text-align: center;\n cursor: pointer;\n &:hover {\n border-color: rgb(24, 144, 255);\n }\n}\n\n.popover-content-wrap {\n width: 400px;\n height: 300px;\n padding: 0 12px;\n .ant-tabs{\n height: 100%;\n .tabFilterRadio{\n display: flex;\n justify-content: center;\n height: 100%;\n }\n }\n}\n</style>\n<style lang=\"less\">\n.ant-dropdown-menu-title-content {\n white-space: nowrap;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n :type=\"type\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.keyValue || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n :type=\"type\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n :type=\"type\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.keyValue || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n :type=\"type\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\r\n <div class=\"truncations\">\r\n <!-- <div class=\"title\">截断配置</div> -->\r\n <div\r\n class=\"item\"\r\n v-for=\"(item, _index) in truncationList\"\r\n :key=\"_index\"\r\n >\r\n <div class=\"rule\">\r\n <a-select\r\n style=\"width: 100%;\"\r\n v-model:value=\"item.rule\"\r\n :options=\"ruleOptions\"\r\n >\r\n </a-select>\r\n </div>\r\n <div class=\"field-value\">\r\n N=\r\n <a-input-number v-model:value=\"item.num\" :min=\"0\" />\r\n </div>\r\n <div class=\"field-value\">\r\n <div class=\"text\">将其余项设为</div>\r\n <a-input v-model:value=\"item.name\" style=\"width: 100px;margin: 0 10px;\"/>\r\n <div class=\"text\">分组</div>\r\n </div>\r\n <div class=\"clear-truncation\" @click=\"clearData(item)\">清空</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent, onMounted, ref, watch } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Input as AInput,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'TruncationList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AInput,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const ruleOptions = [\r\n { label: '前N个', value: 'TOP' },\r\n { label: '后N个', value: 'BOTTOM' }\r\n ]\r\n const truncationList = ref<any[]>([])\r\n watch(truncationList, (val) => {\r\n if (val?.length) {\r\n emit('update', val)\r\n }\r\n }, {\r\n deep: true\r\n })\r\n onMounted(() => {\r\n if (props.list?.length) {\r\n truncationList.value = cloneDeep(props.list)\r\n } else {\r\n truncationList.value = [{\r\n num: 0,\r\n rule: '',\r\n name: '其他'\r\n }]\r\n }\r\n })\r\n\r\n const clearData = (item: any) => {\r\n item.rule = ''\r\n item.num = 0\r\n item.name = ''\r\n }\r\n return {\r\n ruleOptions,\r\n truncationList,\r\n clearData\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.truncations {\r\n width: 100%;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n border: 1px solid #e8e8e8;\r\n padding: 8px;\r\n .title {\r\n font-size: 16px;\r\n color: #333;\r\n padding-bottom: 8px;\r\n }\r\n .item {\r\n display: flex;\r\n align-items: center;\r\n }\r\n .field-value {\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n .text {\r\n word-break: keep-all;\r\n }\r\n }\r\n\r\n .rule {\r\n width: 180px;\r\n }\r\n\r\n .clear-truncation {\r\n margin: auto 0 auto auto;\r\n color: red;\r\n cursor: pointer;\r\n opacity: 0.7;\r\n &:hover {\r\n opacity: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"truncations\">\r\n <!-- <div class=\"title\">截断配置</div> -->\r\n <div\r\n class=\"item\"\r\n v-for=\"(item, _index) in truncationList\"\r\n :key=\"_index\"\r\n >\r\n <div class=\"rule\">\r\n <a-select\r\n style=\"width: 100%;\"\r\n v-model:value=\"item.rule\"\r\n :options=\"ruleOptions\"\r\n >\r\n </a-select>\r\n </div>\r\n <div class=\"field-value\">\r\n N=\r\n <a-input-number v-model:value=\"item.num\" :min=\"0\" />\r\n </div>\r\n <div class=\"field-value\">\r\n <div class=\"text\">将其余项设为</div>\r\n <a-input v-model:value=\"item.name\" style=\"width: 100px;margin: 0 10px;\"/>\r\n <div class=\"text\">分组</div>\r\n </div>\r\n <div class=\"clear-truncation\" @click=\"clearData(item)\">清空</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent, onMounted, ref, watch } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Input as AInput,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'TruncationList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AInput,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const ruleOptions = [\r\n { label: '前N个', value: 'TOP' },\r\n { label: '后N个', value: 'BOTTOM' }\r\n ]\r\n const truncationList = ref<any[]>([])\r\n watch(truncationList, (val) => {\r\n if (val?.length) {\r\n emit('update', val)\r\n }\r\n }, {\r\n deep: true\r\n })\r\n onMounted(() => {\r\n if (props.list?.length) {\r\n truncationList.value = cloneDeep(props.list)\r\n } else {\r\n truncationList.value = [{\r\n num: 0,\r\n rule: '',\r\n name: '其他'\r\n }]\r\n }\r\n })\r\n\r\n const clearData = (item: any) => {\r\n item.rule = ''\r\n item.num = 0\r\n item.name = ''\r\n }\r\n return {\r\n ruleOptions,\r\n truncationList,\r\n clearData\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.truncations {\r\n width: 100%;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n border: 1px solid #e8e8e8;\r\n padding: 8px;\r\n .title {\r\n font-size: 16px;\r\n color: #333;\r\n padding-bottom: 8px;\r\n }\r\n .item {\r\n display: flex;\r\n align-items: center;\r\n }\r\n .field-value {\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n .text {\r\n word-break: keep-all;\r\n }\r\n }\r\n\r\n .rule {\r\n width: 180px;\r\n }\r\n\r\n .clear-truncation {\r\n margin: auto 0 auto auto;\r\n color: red;\r\n cursor: pointer;\r\n opacity: 0.7;\r\n &:hover {\r\n opacity: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\n <a-modal\n :title=\"handleTitle()\"\n :visible=\"visible\"\n destroy-on-close\n width=\"55%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n paddingTop: '10px'\n }\"\n :closable=\"false\"\n @ok=\"onOk\"\n @cancel=\"onCancel\"\n >\n <a-tabs v-model:activeKey=\"activeKey\" v-if=\"['classificationList', 'rowHeaderList', 'dimensionList'].includes(type)\">\n <a-tab-pane key=\"1\" tab=\"过滤条件\" style=\"overflow: auto;\">\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"截断配置\">\n <truncation-list\n :list=\"truncationList\"\n @update=\"onUpdatetruncation\"\n />\n </a-tab-pane>\n </a-tabs>\n <template v-else>\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </template>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, provide, watch, inject, computed } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Tabs as ATabs,\n TabPane as ATabPane\n} from 'ant-design-vue'\nimport ConditionList from './ConditionList.vue'\nimport TruncationList from './TruncationList.vue'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n SOURCE_TYPE\n} from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { getConditions, getEventName, getSqlConditions } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'FilterModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n components: {\n ConditionList,\n TruncationList,\n AModal,\n AButton,\n ATabs,\n ATabPane\n },\n setup (props, { expose }) {\n const activeKey = ref('1')\n const handleTitle = () => `添加过滤条件-${props.item?.label || ''}`\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const dataSourceId = computed(() => unref(graphicConfig)?.dataSourceId)\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const conditionList = ref<{ [key: string]: any } []>([])\n const truncationList = ref<{ [key: string]: any } []>([])\n const visible = ref(false)\n const source = inject(SOURCE_TYPE)\n const addKeyValue = (conditions: { [key: string]: any } []) => {\n for (const item of conditions) {\n if (item.conditions?.length) {\n addKeyValue(item.conditions)\n } else {\n item.keyValue = nanoid()\n }\n }\n }\n\n watch(visible, (visible) => {\n if (visible) {\n if (Array.isArray(props.item?.conditions)) {\n const conditions = cloneDeep(props.item?.conditions || [])\n addKeyValue(conditions)\n conditionList.value = conditions\n }\n if (Array.isArray(props.item?.truncations)) {\n truncationList.value = cloneDeep(props.item?.truncations) || []\n } else {\n truncationList.value = [{\n rule: '',\n num: 0,\n name: '其他'\n }]\n }\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n let isDataChange = false\n const addCondition = (join?: '||' | '&&') => {\n isDataChange = true\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\n conditionList.value = [{}]\n } else if (unref(conditionList)[0] != null) {\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\n conditionList.value = [{\n join,\n conditions: [\n unref(conditionList)[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\n conditionList.value[0].conditions.push({\n keyValue: nanoid()\n })\n }\n }\n }\n provide(CHANGE_CONDITION, {\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = condition\n }\n },\n deleteCondition (index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = unref(conditionList)\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n conditionList.value = []\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // if (Array.isArray(conditions) && conditions[index]) {\n // conditions.splice(index, 1)\n // if (conditions.length === 1) {\n // let wrapperConditions = unref(conditionList)\n // const wrapperLevel = level - 2 > 0 ? level - 2 : 0\n // for (let i = 0; i < wrapperLevel; i++) {\n // if (wrapperConditions[0]) {\n // wrapperConditions = wrapperConditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // // 合并\n // if (wrapperConditions[0].join === conditions[0].join) {\n // // 最外层合并 (需要搞清数据结构)\n // wrapperConditions[0].conditions = [\n // ...conditions[0].conditions,\n // ...wrapperConditions[0].conditions.slice(1)\n // ]\n // } else {\n // // 当前 conditions[0].join 无条件说明是第一层,直接替换\n // wrapperConditions[0] = conditions[0]\n // }\n // }\n // }\n },\n addCondition (path: string, index: number, join: '||' | '&&') {\n isDataChange = true\n let conditions = unref(conditionList)\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n }\n }\n })\n const onUpdatetruncation = (list: any[]) => {\n isDataChange = true\n truncationList.value = list\n }\n const renderControlList = computed(() => {\n const result = []\n unref(renderUsedComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`\n })\n }\n })\n return result\n })\n const updateFilter = () => {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const oldConditions = getConditions(cloneDeep(list[props.index].conditions))\n list[props.index].conditions = unref(conditionList)\n if (['classificationList', 'rowHeaderList', 'dimensionList'].includes(props.type) && unref(truncationList)?.length) {\n list[props.index].truncations = unref(truncationList)\n }\n const conditions = getConditions(unref(conditionList))\n for (const item of conditions) {\n if (item.dataType === 'component' && item.fieldValue) {\n const target = unref(renderControlList).find(v => v.value === item.fieldValue)\n if (target) {\n item.fieldValue = target.keyName\n }\n }\n }\n // 待删除的交互组件\n const pendingDelete =\n oldConditions\n .filter(v => !conditions.find(f => f.componentId === v.componentId))\n .filter(v => !controlList.find(f => f.id === v.componentId))\n // 待新增的交互组件\n const pendingAdd =\n conditions\n .filter(v => !oldConditions.find(f => f.componentId === v.componentId))\n setEvent(pendingDelete, pendingAdd)\n updateGraphicConfig({\n [props.type]: list,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n [props.type]: list\n }, unref(renderUsedComponents))\n })\n }\n\n // 设置目标组件的交互,刷新当前选中组件\n function setEvent (deletes: any, adds: any) {\n const result = deletes.map(v => {\n return {\n ...v,\n delete: true\n }\n }).concat(adds.map(v => {\n return {\n ...v,\n add: true\n }\n }))\n for (const item of result) {\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n if (item.add) {\n if (!events.find((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n } else if (item.delete) {\n const index = events.findIndex((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n }\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n conditionList.value = []\n visible.value = false\n }\n const onOk = () => {\n if (isDataChange) updateFilter()\n isDataChange = false\n hideModal()\n }\n const onCancel = () => {\n hideModal()\n }\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n const dataViewColumns = ref([])\n provide(DATA_VIEW_COLUMNS, dataViewColumns)\n const getHrpIndexWithComplex = async (indtData: any) => {\n if (!['leftAxisList', 'rightAxisList', 'indicators', 'queryColumnList'].includes(props.type)) return\n try {\n const { id: indexGuid, indexCode } = indtData\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n pageId: PAGE_ID,\n dataSourceId: unref(dataSourceId),\n // hrpIndexGuid: indexGuid,\n indexGuid,\n indexCode\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n dataViewColumns.value = data.dataViewColumns\n .map((column: { [key: string]: any }) => {\n return {\n ...column,\n label: column.title || column.label\n }\n })\n }\n } catch (e) {\n console.error(e)\n }\n }\n watch(() => props.item, (data: any) => {\n if (data && visible.value && unref(source) !== 'EDV_DATA_SET') {\n getHrpIndexWithComplex(data)\n }\n })\n expose({\n showModal\n })\n return {\n visible,\n onOk,\n onCancel,\n handleTitle,\n conditionList,\n truncationList,\n addCondition,\n onUpdatetruncation,\n activeKey,\n source\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.header {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 30px;\n}\n.add-and-condition {\n width: 100px;\n margin-right: 15px;\n}\n.add-or-condition {\n width: 100px;\n}\n\n</style>\n","<template>\n <a-modal\n :title=\"handleTitle()\"\n :visible=\"visible\"\n destroy-on-close\n width=\"55%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n paddingTop: '10px'\n }\"\n :closable=\"false\"\n @ok=\"onOk\"\n @cancel=\"onCancel\"\n >\n <a-tabs v-model:activeKey=\"activeKey\" v-if=\"['classificationList', 'rowHeaderList', 'dimensionList'].includes(type)\">\n <a-tab-pane key=\"1\" tab=\"过滤条件\" style=\"overflow: auto;\">\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"截断配置\">\n <truncation-list\n :list=\"truncationList\"\n @update=\"onUpdatetruncation\"\n />\n </a-tab-pane>\n </a-tabs>\n <template v-else>\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </template>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, provide, watch, inject, computed } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Tabs as ATabs,\n TabPane as ATabPane\n} from 'ant-design-vue'\nimport ConditionList from './ConditionList.vue'\nimport TruncationList from './TruncationList.vue'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n SOURCE_TYPE\n} from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { getConditions, getEventName, getSqlConditions } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'FilterModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n components: {\n ConditionList,\n TruncationList,\n AModal,\n AButton,\n ATabs,\n ATabPane\n },\n setup (props, { expose }) {\n const activeKey = ref('1')\n const handleTitle = () => `添加过滤条件-${props.item?.label || ''}`\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const dataSourceId = computed(() => unref(graphicConfig)?.dataSourceId)\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const conditionList = ref<{ [key: string]: any } []>([])\n const truncationList = ref<{ [key: string]: any } []>([])\n const visible = ref(false)\n const source = inject(SOURCE_TYPE)\n const addKeyValue = (conditions: { [key: string]: any } []) => {\n for (const item of conditions) {\n if (item.conditions?.length) {\n addKeyValue(item.conditions)\n } else {\n item.keyValue = nanoid()\n }\n }\n }\n\n watch(visible, (visible) => {\n if (visible) {\n if (Array.isArray(props.item?.conditions)) {\n const conditions = cloneDeep(props.item?.conditions || [])\n addKeyValue(conditions)\n conditionList.value = conditions\n }\n if (Array.isArray(props.item?.truncations)) {\n truncationList.value = cloneDeep(props.item?.truncations) || []\n } else {\n truncationList.value = [{\n rule: '',\n num: 0,\n name: '其他'\n }]\n }\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n let isDataChange = false\n const addCondition = (join?: '||' | '&&') => {\n isDataChange = true\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\n conditionList.value = [{}]\n } else if (unref(conditionList)[0] != null) {\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\n conditionList.value = [{\n join,\n conditions: [\n unref(conditionList)[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\n conditionList.value[0].conditions.push({\n keyValue: nanoid()\n })\n }\n }\n }\n provide(CHANGE_CONDITION, {\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = condition\n }\n },\n deleteCondition (index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = unref(conditionList)\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n conditionList.value = []\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // if (Array.isArray(conditions) && conditions[index]) {\n // conditions.splice(index, 1)\n // if (conditions.length === 1) {\n // let wrapperConditions = unref(conditionList)\n // const wrapperLevel = level - 2 > 0 ? level - 2 : 0\n // for (let i = 0; i < wrapperLevel; i++) {\n // if (wrapperConditions[0]) {\n // wrapperConditions = wrapperConditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // // 合并\n // if (wrapperConditions[0].join === conditions[0].join) {\n // // 最外层合并 (需要搞清数据结构)\n // wrapperConditions[0].conditions = [\n // ...conditions[0].conditions,\n // ...wrapperConditions[0].conditions.slice(1)\n // ]\n // } else {\n // // 当前 conditions[0].join 无条件说明是第一层,直接替换\n // wrapperConditions[0] = conditions[0]\n // }\n // }\n // }\n },\n addCondition (path: string, index: number, join: '||' | '&&') {\n isDataChange = true\n let conditions = unref(conditionList)\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n }\n }\n })\n const onUpdatetruncation = (list: any[]) => {\n isDataChange = true\n truncationList.value = list\n }\n const renderControlList = computed(() => {\n const result = []\n unref(renderUsedComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`\n })\n }\n })\n return result\n })\n const updateFilter = () => {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const oldConditions = getConditions(cloneDeep(list[props.index].conditions))\n list[props.index].conditions = unref(conditionList)\n if (['classificationList', 'rowHeaderList', 'dimensionList'].includes(props.type) && unref(truncationList)?.length) {\n list[props.index].truncations = unref(truncationList)\n }\n const conditions = getConditions(unref(conditionList))\n for (const item of conditions) {\n if (item.dataType === 'component' && item.fieldValue) {\n const target = unref(renderControlList).find(v => v.value === item.fieldValue)\n if (target) {\n item.fieldValue = target.keyName\n }\n }\n }\n // 待删除的交互组件\n const pendingDelete =\n oldConditions\n .filter(v => !conditions.find(f => f.componentId === v.componentId))\n .filter(v => !controlList.find(f => f.id === v.componentId))\n // 待新增的交互组件\n const pendingAdd =\n conditions\n .filter(v => !oldConditions.find(f => f.componentId === v.componentId))\n setEvent(pendingDelete, pendingAdd)\n updateGraphicConfig({\n [props.type]: list,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n [props.type]: list\n }, unref(renderUsedComponents))\n })\n }\n\n // 设置目标组件的交互,刷新当前选中组件\n function setEvent (deletes: any, adds: any) {\n const result = deletes.map(v => {\n return {\n ...v,\n delete: true\n }\n }).concat(adds.map(v => {\n return {\n ...v,\n add: true\n }\n }))\n for (const item of result) {\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n if (item.add) {\n if (!events.find((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n } else if (item.delete) {\n const index = events.findIndex((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n }\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n conditionList.value = []\n visible.value = false\n }\n const onOk = () => {\n if (isDataChange) updateFilter()\n isDataChange = false\n hideModal()\n }\n const onCancel = () => {\n hideModal()\n }\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n const dataViewColumns = ref([])\n provide(DATA_VIEW_COLUMNS, dataViewColumns)\n const getHrpIndexWithComplex = async (indtData: any) => {\n if (!['leftAxisList', 'rightAxisList', 'indicators', 'queryColumnList'].includes(props.type)) return\n try {\n const { id: indexGuid, indexCode } = indtData\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n pageId: PAGE_ID,\n dataSourceId: unref(dataSourceId),\n // hrpIndexGuid: indexGuid,\n indexGuid,\n indexCode\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n dataViewColumns.value = data.dataViewColumns\n .map((column: { [key: string]: any }) => {\n return {\n ...column,\n label: column.title || column.label\n }\n })\n }\n } catch (e) {\n console.error(e)\n }\n }\n watch(() => props.item, (data: any) => {\n if (data && visible.value && unref(source) !== 'EDV_DATA_SET') {\n getHrpIndexWithComplex(data)\n }\n })\n expose({\n showModal\n })\n return {\n visible,\n onOk,\n onCancel,\n handleTitle,\n conditionList,\n truncationList,\n addCondition,\n onUpdatetruncation,\n activeKey,\n source\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.header {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 30px;\n}\n.add-and-condition {\n width: 100px;\n margin-right: 15px;\n}\n.add-or-condition {\n width: 100px;\n}\n\n</style>\n","<template>\r\n <a-modal\r\n title=\"配置展示名称\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"config-name\">\r\n <div style=\"word-break: keep-all;\">名称:</div>\r\n <a-input v-model:value=\"fieldName\" />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Input as AInput,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'ConfigName',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n AInput,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const showModal = (item: any) => {\r\n const { showLabel = '', label = '' } = item\r\n fieldName.value = showLabel || label || ''\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].showLabel = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n fieldName\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-name {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置展示名称\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"config-name\">\r\n <div style=\"word-break: keep-all;\">名称:</div>\r\n <a-input v-model:value=\"fieldName\" />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Input as AInput,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'ConfigName',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n AInput,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const showModal = (item: any) => {\r\n const { showLabel = '', label = '' } = item\r\n fieldName.value = showLabel || label || ''\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].showLabel = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n fieldName\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-name {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联组件排序\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"sort-by-cpnt\">\r\n <div style=\"word-break: keep-all;\">控件:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n mode=\"multiple\"\r\n style=\"width: 100%;\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref, computed } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n RENDER_USED_COMPONENTS,\r\n SELECTED_COMPONENT,\r\n UPDATE_USED_COMPONENT\r\n} from '@/utils/constant'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { getEventName, getConditions } from '@/utils/util'\r\nexport default defineComponent({\r\n name: 'SortByCpnt',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\r\n const fieldName = ref()\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n let oldData = []\r\n const showModal = (item: any) => {\r\n const { sortCpnts = [] } = item\r\n oldData = cloneDeep(sortCpnts)\r\n fieldName.value = cloneDeep(sortCpnts)\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n // 设置关联组件的交互事件\r\n const setEvent = () => {\r\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\r\n // 待删除的交互组件\r\n const pendingDelete =\r\n oldData\r\n .filter(v => !unref(fieldName).includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n // 待新增的交互组件\r\n const pendingAdd =\r\n unref(fieldName)\r\n .filter(v => !oldData.includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n const result: any = pendingDelete.map(v => {\r\n return {\r\n componentId: v,\r\n delete: true\r\n }\r\n }).concat(pendingAdd.map(v => {\r\n return {\r\n componentId: v,\r\n add: true\r\n }\r\n }))\r\n for (const item of result) {\r\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\r\n if (component) {\r\n const { type, id, events = [] } = component\r\n const event = getEventName(type)\r\n if (item.add) {\r\n if (!events.find((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\r\n updateUsedComponent({\r\n id,\r\n events: [...events, {\r\n on: event,\r\n target: unref(selectedComponent)?.id,\r\n emit: 'refreshData'\r\n }].reverse()\r\n })\r\n }\r\n } else if (item.delete) {\r\n const index = events.findIndex((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\r\n if (index !== -1) {\r\n events.splice(index, 1)\r\n updateUsedComponent({\r\n id,\r\n events\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onOk = () => {\r\n setEvent()\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].sortCpnts = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n usedComponentList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.sort-by-cpnt {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联组件排序\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"sort-by-cpnt\">\r\n <div style=\"word-break: keep-all;\">控件:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n mode=\"multiple\"\r\n style=\"width: 100%;\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref, computed } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n RENDER_USED_COMPONENTS,\r\n SELECTED_COMPONENT,\r\n UPDATE_USED_COMPONENT\r\n} from '@/utils/constant'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { getEventName, getConditions } from '@/utils/util'\r\nexport default defineComponent({\r\n name: 'SortByCpnt',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\r\n const fieldName = ref()\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n let oldData = []\r\n const showModal = (item: any) => {\r\n const { sortCpnts = [] } = item\r\n oldData = cloneDeep(sortCpnts)\r\n fieldName.value = cloneDeep(sortCpnts)\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n // 设置关联组件的交互事件\r\n const setEvent = () => {\r\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\r\n // 待删除的交互组件\r\n const pendingDelete =\r\n oldData\r\n .filter(v => !unref(fieldName).includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n // 待新增的交互组件\r\n const pendingAdd =\r\n unref(fieldName)\r\n .filter(v => !oldData.includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n const result: any = pendingDelete.map(v => {\r\n return {\r\n componentId: v,\r\n delete: true\r\n }\r\n }).concat(pendingAdd.map(v => {\r\n return {\r\n componentId: v,\r\n add: true\r\n }\r\n }))\r\n for (const item of result) {\r\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\r\n if (component) {\r\n const { type, id, events = [] } = component\r\n const event = getEventName(type)\r\n if (item.add) {\r\n if (!events.find((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\r\n updateUsedComponent({\r\n id,\r\n events: [...events, {\r\n on: event,\r\n target: unref(selectedComponent)?.id,\r\n emit: 'refreshData'\r\n }].reverse()\r\n })\r\n }\r\n } else if (item.delete) {\r\n const index = events.findIndex((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\r\n if (index !== -1) {\r\n events.splice(index, 1)\r\n updateUsedComponent({\r\n id,\r\n events\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onOk = () => {\r\n setEvent()\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].sortCpnts = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n usedComponentList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.sort-by-cpnt {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联维度\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"dim-by-count\">\r\n <div style=\"word-break: keep-all;\">维度:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n style=\"width: 100%;\"\r\n :options=\"dimensionList\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG\r\n} from '@/utils/constant'\r\n// import { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'DimByCount',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const dimensionList = ref([])\r\n\r\n const showModal = (item: any, columns: any) => {\r\n const { dimByCount = '' } = item\r\n fieldName.value = dimByCount\r\n dimensionList.value = columns\r\n .filter((v: any) => ['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(v.scope))\r\n .map((v: any) => ({\r\n label: v.title || v.name,\r\n value: v.typeGuid\r\n }))\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].dimByCount = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n dimensionList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.dim-by-count {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联维度\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"dim-by-count\">\r\n <div style=\"word-break: keep-all;\">维度:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n style=\"width: 100%;\"\r\n :options=\"dimensionList\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG\r\n} from '@/utils/constant'\r\n// import { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'DimByCount',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const dimensionList = ref([])\r\n\r\n const showModal = (item: any, columns: any) => {\r\n const { dimByCount = '' } = item\r\n fieldName.value = dimByCount\r\n dimensionList.value = columns\r\n .filter((v: any) => ['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(v.scope))\r\n .map((v: any) => ({\r\n label: v.title || v.name,\r\n value: v.typeGuid\r\n }))\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].dimByCount = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n dimensionList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.dim-by-count {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\n <div class=\"formula-calculation\">\n <a-row style=\"height: 100%\">\n <a-col :span=\"6\">\n <div class=\"field-area\">\n <div style=\"text-align: center;padding: 10px 0;\">\n <a-radio-group v-model:value=\"activeKey\" size=\"small\">\n <a-radio-button value=\"1\">数值字段({{ fieldList.length }})</a-radio-button>\n <a-radio-button value=\"2\">全局变量({{ varList.length }})</a-radio-button>\n </a-radio-group>\n </div>\n <template v-if=\"activeKey === '1'\">\n <div\n class=\"field\"\n v-for=\"(field, index) in fieldList\"\n :key=\"index\"\n @click=\"selectedElem(field.label, 'name')\"\n >\n {{ field.label }}\n </div>\n </template>\n <template v-if=\"activeKey === '2'\">\n <div\n class=\"field\"\n v-for=\"(variabled, index) in varList\"\n :key=\"index\"\n @click=\"selectedElem(variabled.variableName, 'name')\"\n >\n {{ variabled.variableName }}\n </div>\n </template>\n </div>\n </a-col>\n <a-col :span=\"18\">\n <a-textarea\n class=\"textarea\"\n id=\"calTextArea\"\n v-model:value=\"myValue\"\n :autoSize=\"{\n minRows: 13,\n maxRows: 13\n }\"\n placeholder=\"示例: ${指标} * 3\"\n />\n <div class=\"cal_right_bottom\">\n <ul class=\"cal_fu\">\n <li\n v-for=\"(item, index) in calculMethods\"\n @click=\"selectedElem(item, 'symbol')\"\n :key=\"index\"\n >\n {{ item }}\n </li>\n </ul>\n <a-popover\n placement=\"topRight\"\n trigger=\"click\"\n overlayClassName=\"func-popover\">\n <template #content>\n <div class=\"function-wrap\">\n <div class=\"wrap-search\">\n <a-input-search\n v-model:value=\"searchFuncValue\"\n style=\"margin-bottom: 8px\"\n placeholder=\"请输入关键字搜索\"\n />\n </div>\n <div class=\"tree-box\">\n <a-tree\n :expanded-keys=\"expandedKeys\"\n :auto-expand-parent=\"autoExpandParent\"\n :tree-data=\"funcDescsData\"\n @expand=\"onExpand\"\n >\n <template #title=\"{ title, leaf, describe, exp }\">\n <a-tooltip placement=\"top\">\n <template #title v-if=\"leaf\">\n <div>\n <span style=\"font-weight: bold;\">描述:</span>\n <span>{{ describe }}</span>\n </div>\n <div>\n <span style=\"font-weight: bold;\">示例:</span>\n <span>{{ exp }}</span>\n </div>\n </template>\n <span v-if=\"title.indexOf(searchFuncValue) > -1\">\n {{ title.substr(0, title.indexOf(searchFuncValue)) }}\n <span style=\"color: #f50\">{{ searchFuncValue }}</span>\n {{ title.substr(title.indexOf(searchFuncValue) + searchFuncValue.length) }}\n </span>\n <span v-else>{{ title }}</span>\n <span\n v-if=\"leaf\"\n class=\"insertsty\"\n @click=\"selectedElem(title, 'function')\"\n >插入</span>\n </a-tooltip>\n </template>\n </a-tree>\n </div>\n </div>\n </template>\n <span class=\"cal_a\">\n 更多函数\n <double-right-outlined style=\"font-size: 12px;margin: 2px 0 0 2px;color: #1890ff;\"/>\n </span>\n </a-popover>\n </div>\n </a-col>\n </a-row>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, inject, ref, onMounted, watch, PropType } from 'vue'\nimport { GRAPHIC_CONFIG, REQUEST, INDICATOR_URL, INDICATOR_TOKEN } from '@/utils/constant'\nimport {\n RadioGroup as ARadioGroup,\n RadioButton as ARadioButton,\n Row as ARow,\n Col as ACol,\n Textarea as ATextarea,\n Popover as APopover,\n InputSearch as AInputSearch,\n Tree as ATree,\n type TreeProps\n} from 'ant-design-vue'\nimport { DoubleRightOutlined } from '@ant-design/icons-vue'\nconst getParentKey = (\n key: string | number,\n tree: TreeProps['treeData']\n): string | number | undefined => {\n let parentKey\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some(item => item.key === key)) {\n parentKey = node.key\n } else if (getParentKey(key, node.children)) {\n parentKey = getParentKey(key, node.children)\n }\n }\n }\n return parentKey\n}\n\nexport default defineComponent({\n name: 'FormulaCalculation',\n props: {\n value: {\n type: String,\n default: ''\n },\n item: {\n type: Object,\n default: () => ({})\n },\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n }\n },\n components: {\n ARow,\n ACol,\n ATextarea,\n APopover,\n AInputSearch,\n ATree,\n ARadioGroup,\n ARadioButton,\n DoubleRightOutlined\n },\n emits: ['update:value', 'change'],\n setup (props, { emit }) {\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const leftAxisList = computed(() => unref(graphicConfig).leftAxisList || [])\n const variableList = computed(() => unref(graphicConfig).variableList || [])\n const rightAxisList = computed(\n () => unref(graphicConfig).rightAxisList || []\n )\n const indicators = computed(() => unref(graphicConfig).indicators || [])\n const queryColumnList = computed(\n () => unref(graphicConfig).queryColumnList || []\n )\n const indexLibColumns = computed(() => unref(graphicConfig).indexLibColumns || [])\n const fieldList = computed(() => {\n let fieldList = unref(leftAxisList)\n .concat(unref(rightAxisList))\n .concat(unref(indicators))\n .concat(unref(queryColumnList)) as { [key: string]: any }[]\n if (unref(indexLibColumns)?.length) {\n fieldList = unref(queryColumnList)\n .concat(unref(indexLibColumns)) as { [key: string]: any }[]\n }\n // 公式计算需要过滤不是数字类型的字段\n // return fieldList?.filter((field) => field.genericType === 'NUMBER') || []\n if (props.mode === 'edit') {\n return fieldList?.filter((field) => field.id !== props.item?.id) || []\n }\n return fieldList || []\n })\n\n const varList = computed(() =>\n variableList.value.filter((v: any) => !v.randomKey))\n\n const myValue = computed({\n get: () => props.value || '',\n set: (value) => {\n emit('update:value', value)\n emit('change', value)\n }\n })\n const activeKey = ref('1')\n const searchFuncValue = ref('')\n const insertText = (str: string) => {\n const obj: any = document.getElementById('calTextArea')\n let tmpStr = myValue.value\n if ((document as any).selection) {\n const sel = (document as any).selection.createRange()\n sel.text = str\n } else if (\n typeof obj.selectionStart === 'number' &&\n typeof obj.selectionEnd === 'number'\n ) {\n const startPos = obj.selectionStart\n const endPos = obj.selectionEnd\n let cursorPos = startPos\n tmpStr =\n tmpStr.substring(0, startPos) +\n str +\n tmpStr.substring(endPos, tmpStr.length)\n cursorPos += str.length\n obj.selectionStart = obj.selectionEnd = cursorPos\n } else {\n tmpStr += str\n }\n myValue.value = tmpStr\n }\n const calculMethods = ['+', '-', '*', '/', '(', ')']\n const selectedElem = (value: string, type: string) => {\n let inputVal = ''\n switch (type) {\n case 'name': {\n // 名称\n inputVal = '${' + value + '}'\n break\n }\n case 'function': {\n // 函数\n inputVal = value + '()'\n break\n }\n default: {\n // 加减符号\n inputVal = value\n }\n }\n insertText(inputVal)\n }\n const dataList: TreeProps['treeData'] = []\n const expandedKeys = ref<(string | number)[]>([])\n const autoExpandParent = ref<boolean>(true)\n const funcDescsData = ref([])\n const setDataList = (data: any) => {\n for (const item of data) {\n if (item?.children?.length) {\n setDataList(item.children)\n } else {\n dataList.push({\n key: item.key,\n title: item.title\n })\n }\n }\n }\n const getFuncDescs = async () => {\n try {\n const res = await request.get(`${INDICATOR_URL}/diagram/funcdescs`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.length) {\n setDataList(data)\n funcDescsData.value = data\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onExpand = (keys: string[]) => {\n expandedKeys.value = keys\n autoExpandParent.value = false\n }\n watch(searchFuncValue, value => {\n const expanded = dataList\n .map((item: any) => {\n if (item.title.indexOf(value) > -1) {\n return getParentKey(item.key, funcDescsData.value)\n }\n return null\n })\n .filter((item, i, self) => item && self.indexOf(item) === i)\n expandedKeys.value = expanded\n searchFuncValue.value = value\n autoExpandParent.value = true\n })\n onMounted(() => {\n getFuncDescs()\n })\n return {\n fieldList,\n varList,\n myValue,\n calculMethods,\n funcDescsData,\n searchFuncValue,\n expandedKeys,\n autoExpandParent,\n activeKey,\n selectedElem,\n onExpand\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.formula-calculation {\n // border: 1px solid #ccc;\n width: 100%;\n}\n\n[theme='dark'] .formula-calculation {\n border: 1px solid #333;\n}\n\n.field-area {\n height: 100%;\n // padding-left: 20px;\n // padding-top: 20px;\n background: #eff1f4;\n border: 1px solid #d9d9d9;\n border-right: none;\n}\n[theme='dark'] .field-area {\n background: #333;\n}\n.field {\n margin-bottom: 10px;\n padding-left: 15px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.textarea {\n height: 100%;\n border-radius: 0;\n}\n.cal_right_bottom {\n height: 26px;\n width: 100%;\n border: 1px solid #d9d9d9;\n border-top: none;\n line-height: 26px;\n .cal_fu {\n padding: 0;\n width: 200px;\n float: left;\n margin: 0;\n li {\n width: 20px;\n float: left;\n text-align: center;\n margin: 0 5px;\n cursor: pointer;\n &:hover {\n background: #eff1f4;\n }\n }\n }\n .cal_a {\n color: #1890ff;\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n float: right;\n margin-right: 10px;\n height: 13px;\n margin-top: 6px;\n &:hover {\n color: #40a9ff;\n }\n }\n}\n.function-wrap {\n width: 260px;\n height: 200px;\n .wrap-search {\n height: 40px;\n background-color: #ffffff;\n border-bottom: 1px solid #d9d9d9;\n padding: 0 10px;\n }\n .tree-box {\n height: calc(100% - 40px);\n overflow: auto;\n }\n}\n</style>\n<style lang=\"less\">\n.func-popover {\n .ant-popover-inner-content {\n padding: 12px 0;\n }\n .insertsty {\n color: #1890ff;\n margin-left: 6px;\n display: none;\n &:hover {\n color: red;\n }\n }\n .ant-tree-title {\n &:hover {\n .insertsty {\n display: inline-block;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"formula-calculation\">\n <a-row style=\"height: 100%\">\n <a-col :span=\"6\">\n <div class=\"field-area\">\n <div style=\"text-align: center;padding: 10px 0;\">\n <a-radio-group v-model:value=\"activeKey\" size=\"small\">\n <a-radio-button value=\"1\">数值字段({{ fieldList.length }})</a-radio-button>\n <a-radio-button value=\"2\">全局变量({{ varList.length }})</a-radio-button>\n </a-radio-group>\n </div>\n <template v-if=\"activeKey === '1'\">\n <div\n class=\"field\"\n v-for=\"(field, index) in fieldList\"\n :key=\"index\"\n @click=\"selectedElem(field.label, 'name')\"\n >\n {{ field.label }}\n </div>\n </template>\n <template v-if=\"activeKey === '2'\">\n <div\n class=\"field\"\n v-for=\"(variabled, index) in varList\"\n :key=\"index\"\n @click=\"selectedElem(variabled.variableName, 'name')\"\n >\n {{ variabled.variableName }}\n </div>\n </template>\n </div>\n </a-col>\n <a-col :span=\"18\">\n <a-textarea\n class=\"textarea\"\n id=\"calTextArea\"\n v-model:value=\"myValue\"\n :autoSize=\"{\n minRows: 13,\n maxRows: 13\n }\"\n placeholder=\"示例: ${指标} * 3\"\n />\n <div class=\"cal_right_bottom\">\n <ul class=\"cal_fu\">\n <li\n v-for=\"(item, index) in calculMethods\"\n @click=\"selectedElem(item, 'symbol')\"\n :key=\"index\"\n >\n {{ item }}\n </li>\n </ul>\n <a-popover\n placement=\"topRight\"\n trigger=\"click\"\n overlayClassName=\"func-popover\">\n <template #content>\n <div class=\"function-wrap\">\n <div class=\"wrap-search\">\n <a-input-search\n v-model:value=\"searchFuncValue\"\n style=\"margin-bottom: 8px\"\n placeholder=\"请输入关键字搜索\"\n />\n </div>\n <div class=\"tree-box\">\n <a-tree\n :expanded-keys=\"expandedKeys\"\n :auto-expand-parent=\"autoExpandParent\"\n :tree-data=\"funcDescsData\"\n @expand=\"onExpand\"\n >\n <template #title=\"{ title, leaf, describe, exp }\">\n <a-tooltip placement=\"top\">\n <template #title v-if=\"leaf\">\n <div>\n <span style=\"font-weight: bold;\">描述:</span>\n <span>{{ describe }}</span>\n </div>\n <div>\n <span style=\"font-weight: bold;\">示例:</span>\n <span>{{ exp }}</span>\n </div>\n </template>\n <span v-if=\"title.indexOf(searchFuncValue) > -1\">\n {{ title.substr(0, title.indexOf(searchFuncValue)) }}\n <span style=\"color: #f50\">{{ searchFuncValue }}</span>\n {{ title.substr(title.indexOf(searchFuncValue) + searchFuncValue.length) }}\n </span>\n <span v-else>{{ title }}</span>\n <span\n v-if=\"leaf\"\n class=\"insertsty\"\n @click=\"selectedElem(title, 'function')\"\n >插入</span>\n </a-tooltip>\n </template>\n </a-tree>\n </div>\n </div>\n </template>\n <span class=\"cal_a\">\n 更多函数\n <double-right-outlined style=\"font-size: 12px;margin: 2px 0 0 2px;color: #1890ff;\"/>\n </span>\n </a-popover>\n </div>\n </a-col>\n </a-row>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, inject, ref, onMounted, watch, PropType } from 'vue'\nimport { GRAPHIC_CONFIG, REQUEST, INDICATOR_URL, INDICATOR_TOKEN } from '@/utils/constant'\nimport {\n RadioGroup as ARadioGroup,\n RadioButton as ARadioButton,\n Row as ARow,\n Col as ACol,\n Textarea as ATextarea,\n Popover as APopover,\n InputSearch as AInputSearch,\n Tree as ATree,\n type TreeProps\n} from 'ant-design-vue'\nimport { DoubleRightOutlined } from '@ant-design/icons-vue'\nconst getParentKey = (\n key: string | number,\n tree: TreeProps['treeData']\n): string | number | undefined => {\n let parentKey\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some(item => item.key === key)) {\n parentKey = node.key\n } else if (getParentKey(key, node.children)) {\n parentKey = getParentKey(key, node.children)\n }\n }\n }\n return parentKey\n}\n\nexport default defineComponent({\n name: 'FormulaCalculation',\n props: {\n value: {\n type: String,\n default: ''\n },\n item: {\n type: Object,\n default: () => ({})\n },\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n }\n },\n components: {\n ARow,\n ACol,\n ATextarea,\n APopover,\n AInputSearch,\n ATree,\n ARadioGroup,\n ARadioButton,\n DoubleRightOutlined\n },\n emits: ['update:value', 'change'],\n setup (props, { emit }) {\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const leftAxisList = computed(() => unref(graphicConfig).leftAxisList || [])\n const variableList = computed(() => unref(graphicConfig).variableList || [])\n const rightAxisList = computed(\n () => unref(graphicConfig).rightAxisList || []\n )\n const indicators = computed(() => unref(graphicConfig).indicators || [])\n const queryColumnList = computed(\n () => unref(graphicConfig).queryColumnList || []\n )\n const indexLibColumns = computed(() => unref(graphicConfig).indexLibColumns || [])\n const fieldList = computed(() => {\n let fieldList = unref(leftAxisList)\n .concat(unref(rightAxisList))\n .concat(unref(indicators))\n .concat(unref(queryColumnList)) as { [key: string]: any }[]\n if (unref(indexLibColumns)?.length) {\n fieldList = unref(queryColumnList)\n .concat(unref(indexLibColumns)) as { [key: string]: any }[]\n }\n // 公式计算需要过滤不是数字类型的字段\n // return fieldList?.filter((field) => field.genericType === 'NUMBER') || []\n if (props.mode === 'edit') {\n return fieldList?.filter((field) => field.id !== props.item?.id) || []\n }\n return fieldList || []\n })\n\n const varList = computed(() =>\n variableList.value.filter((v: any) => !v.randomKey))\n\n const myValue = computed({\n get: () => props.value || '',\n set: (value) => {\n emit('update:value', value)\n emit('change', value)\n }\n })\n const activeKey = ref('1')\n const searchFuncValue = ref('')\n const insertText = (str: string) => {\n const obj: any = document.getElementById('calTextArea')\n let tmpStr = myValue.value\n if ((document as any).selection) {\n const sel = (document as any).selection.createRange()\n sel.text = str\n } else if (\n typeof obj.selectionStart === 'number' &&\n typeof obj.selectionEnd === 'number'\n ) {\n const startPos = obj.selectionStart\n const endPos = obj.selectionEnd\n let cursorPos = startPos\n tmpStr =\n tmpStr.substring(0, startPos) +\n str +\n tmpStr.substring(endPos, tmpStr.length)\n cursorPos += str.length\n obj.selectionStart = obj.selectionEnd = cursorPos\n } else {\n tmpStr += str\n }\n myValue.value = tmpStr\n }\n const calculMethods = ['+', '-', '*', '/', '(', ')']\n const selectedElem = (value: string, type: string) => {\n let inputVal = ''\n switch (type) {\n case 'name': {\n // 名称\n inputVal = '${' + value + '}'\n break\n }\n case 'function': {\n // 函数\n inputVal = value + '()'\n break\n }\n default: {\n // 加减符号\n inputVal = value\n }\n }\n insertText(inputVal)\n }\n const dataList: TreeProps['treeData'] = []\n const expandedKeys = ref<(string | number)[]>([])\n const autoExpandParent = ref<boolean>(true)\n const funcDescsData = ref([])\n const setDataList = (data: any) => {\n for (const item of data) {\n if (item?.children?.length) {\n setDataList(item.children)\n } else {\n dataList.push({\n key: item.key,\n title: item.title\n })\n }\n }\n }\n const getFuncDescs = async () => {\n try {\n const res = await request.get(`${INDICATOR_URL}/diagram/funcdescs`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.length) {\n setDataList(data)\n funcDescsData.value = data\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onExpand = (keys: string[]) => {\n expandedKeys.value = keys\n autoExpandParent.value = false\n }\n watch(searchFuncValue, value => {\n const expanded = dataList\n .map((item: any) => {\n if (item.title.indexOf(value) > -1) {\n return getParentKey(item.key, funcDescsData.value)\n }\n return null\n })\n .filter((item, i, self) => item && self.indexOf(item) === i)\n expandedKeys.value = expanded\n searchFuncValue.value = value\n autoExpandParent.value = true\n })\n onMounted(() => {\n getFuncDescs()\n })\n return {\n fieldList,\n varList,\n myValue,\n calculMethods,\n funcDescsData,\n searchFuncValue,\n expandedKeys,\n autoExpandParent,\n activeKey,\n selectedElem,\n onExpand\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.formula-calculation {\n // border: 1px solid #ccc;\n width: 100%;\n}\n\n[theme='dark'] .formula-calculation {\n border: 1px solid #333;\n}\n\n.field-area {\n height: 100%;\n // padding-left: 20px;\n // padding-top: 20px;\n background: #eff1f4;\n border: 1px solid #d9d9d9;\n border-right: none;\n}\n[theme='dark'] .field-area {\n background: #333;\n}\n.field {\n margin-bottom: 10px;\n padding-left: 15px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.textarea {\n height: 100%;\n border-radius: 0;\n}\n.cal_right_bottom {\n height: 26px;\n width: 100%;\n border: 1px solid #d9d9d9;\n border-top: none;\n line-height: 26px;\n .cal_fu {\n padding: 0;\n width: 200px;\n float: left;\n margin: 0;\n li {\n width: 20px;\n float: left;\n text-align: center;\n margin: 0 5px;\n cursor: pointer;\n &:hover {\n background: #eff1f4;\n }\n }\n }\n .cal_a {\n color: #1890ff;\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n float: right;\n margin-right: 10px;\n height: 13px;\n margin-top: 6px;\n &:hover {\n color: #40a9ff;\n }\n }\n}\n.function-wrap {\n width: 260px;\n height: 200px;\n .wrap-search {\n height: 40px;\n background-color: #ffffff;\n border-bottom: 1px solid #d9d9d9;\n padding: 0 10px;\n }\n .tree-box {\n height: calc(100% - 40px);\n overflow: auto;\n }\n}\n</style>\n<style lang=\"less\">\n.func-popover {\n .ant-popover-inner-content {\n padding: 12px 0;\n }\n .insertsty {\n color: #1890ff;\n margin-left: 6px;\n display: none;\n &:hover {\n color: red;\n }\n }\n .ant-tree-title {\n &:hover {\n .insertsty {\n display: inline-block;\n }\n }\n }\n}\n</style>\n","<template>\n <a-modal\n :title=\"`${mode === 'add' ? '新增' : '编辑'}计算指标`\"\n :visible=\"visible\"\n width=\"50%\"\n :bodyStyle=\"{\n height: '55vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :closable=\"false\"\n @Ok=\"onOK\"\n @cancel=\"onCancel\"\n >\n <a-form :model=\"formState\" :rules=\"formRules\" ref=\"formRef\">\n <a-form-item\n label=\"指标名\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"label\"\n >\n <a-input\n v-model:value=\"formState.label\"\n @change=\"onChange\"\n />\n </a-form-item>\n <a-form-item\n label=\"计算方式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-show=\"type !== 'indexLibColumns'\"\n >\n <a-select\n v-model:value=\"formState.calcType\"\n @change=\"onChange\"\n >\n <a-select-option value=\"FORMULA\">公式</a-select-option>\n <a-select-option value=\"BUILT_IN\">内置公式</a-select-option>\n <a-select-option value=\"COMPONENT\">固定值</a-select-option>\n </a-select>\n </a-form-item>\n <template v-if=\"formState.calcType === 'FORMULA'\">\n <formula-calculation\n v-model:value=\"formState.formula\"\n :item=\"item\"\n :mode=\"mode\"\n @change=\"onChange\"\n />\n </template>\n <template v-if=\"formState.calcType === 'BUILT_IN'\">\n <a-form-item\n label=\"内置公式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInFormula\"\n >\n <a-select\n v-model:value=\"formState.builtInFormula\"\n @change=\"onChangeBuiltInFormula\"\n >\n <a-select-option value=\"BUILT_IN_ALL_VALUE\">所有值</a-select-option>\n <a-select-option value=\"BUILT_IN_ALL_VALUE_IN_GROUPO\"\n >组内所有值</a-select-option\n >\n <a-select-option value=\"BUILT_IN_RANK\">排名</a-select-option>\n <a-select-option value=\"BUILT_IN_RANK_IN_GROUPO\"\n >组内排名</a-select-option\n >\n <a-select-option value=\"FIRST_ROW_RATE\"\n >首行占比</a-select-option\n >\n <a-select-option value=\"DATE_OFFSET\"\n >日期偏移</a-select-option\n >\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n v-model:value=\"formState.builtInValueSource\"\n @change=\"onChange\"\n >\n <a-select-option\n v-for=\"(builtInValueSource, index) in builtInValueSourceList\"\n :key=\"index\"\n :value=\"builtInValueSource.label\"\n :disabled=\"mode === 'edit' && item.label === builtInValueSource.name\"\n >\n {{ builtInValueSource.label }}\n </a-select-option>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数原则\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <a-select\n v-model:value=\"formState.builtInCalcWay\"\n @change=\"onChange\"\n >\n <template\n v-if=\"\n ['BUILT_IN_ALL_VALUE', 'BUILT_IN_ALL_VALUE_IN_GROUPO'].includes(\n formState.builtInFormula || ''\n )\n \"\n >\n <!-- 所有值/组内所有值 -->\n <a-select-option value=\"SUM\">求和</a-select-option>\n <a-select-option value=\"AVG\">求平均</a-select-option>\n <a-select-option value=\"MAX\">求最大值</a-select-option>\n <a-select-option value=\"MIN\">求最小值</a-select-option>\n </template>\n <template v-else>\n <!-- 排名/组内排名 -->\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </template>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数逻辑\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <div\n class=\"accesstip\"\n v-if=\"[\n 'BUILT_IN_RANK_IN_GROUPO',\n 'BUILT_IN_ALL_VALUE_IN_GROUPO'\n ].includes(formState.builtInFormula) && formState.builtInValueSource\"\n >\n 蓝色字段跟随您后续维度设置的顺序而变化,以获取相应的{{ formState.builtInValueSource }}\n </div>\n <a-textarea\n :value=\"accessLogic\"\n :rows=\"6\"\n disabled\n />\n </a-form-item>\n </template>\n <template v-if=\"formState.calcType === 'COMPONENT'\">\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n show-search\n v-model:value=\"formState.builtInValueSource\"\n :filter-option=\"filterOption\"\n :options=\"componentList\"\n :fieldNames=\"{ value: 'id', label: 'keyName' }\"\n @change=\"onChangeComponent\"\n ></a-select>\n </a-form-item>\n </template>\n <template v-if=\"formState.builtInFormula === 'DATE_OFFSET'\">\n <a-form-item\n label=\"偏移设置\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n >\n <div style=\"display: flex;align-items: center;\">\n <a-input-number\n v-model:value=\"offsetConfig.value\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n ></a-input-number>\n <a-select\n v-model:value=\"offsetConfig.unit\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select\n v-model:value=\"offsetConfig.around\"\n style=\"width: 120px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n <a-tooltip\n title=\"内置公式【日期偏移】,依赖于【全局过滤】中的时间条件,若没有配置则不会进行偏移计算\"\n overlayClassName=\"question-tooltip\"\n color=\"#fff\"\n >\n <question-circle-outlined class=\"icon\" style=\"color: #40a9ff;font-size: 18px;cursor: pointer;margin-left: 10px;\"/>\n </a-tooltip>\n </div>\n </a-form-item>\n </template>\n </a-form>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n unref,\n PropType,\n watch,\n inject\n} from 'vue'\nimport { nanoid } from 'nanoid'\nimport FormulaCalculation from './FormulaCalculation.vue'\nimport {\n Form as AForm,\n Modal as AModal,\n FormItem as AFormItem,\n Input as AInput,\n InputNumber as AInputNumber,\n Select as ASelect,\n SelectOption as ASelectOption,\n Textarea as ATextarea,\n Tooltip as ATooltip\n} from 'ant-design-vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SELECTED_COMPONENT } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport type { Rule } from 'ant-design-vue/es/form'\nimport { QuestionCircleOutlined } from '@ant-design/icons-vue'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'CalculationModal',\n components: {\n FormulaCalculation,\n AForm,\n AModal,\n AFormItem,\n AInput,\n ASelect,\n ASelectOption,\n ATextarea,\n AInputNumber,\n ATooltip,\n QuestionCircleOutlined\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 模式\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n }\n },\n setup (props, { expose }) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG)\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const componentList = computed(() => unref(renderUsedComponents))\n const builtInValueSourceList = computed(\n () => unref(graphicConfig)[props.type] || []\n )\n const allValueSourceList = computed(() => {\n const values = ['leftAxisList', 'rightAxisList', 'queryColumnList', 'indicators']\n let list = []\n for (const item of values) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), item)) {\n list = list.concat(unref(graphicConfig)[item])\n }\n }\n return list\n })\n const labelCol = { span: 4 }\n const wrapperCol = { span: 18 }\n const formDefaultValue = {\n label: '',\n calcType: 'FORMULA',\n formula: undefined,\n builtInValueSource: undefined,\n builtInFormula: undefined,\n builtInCalcWay: undefined\n }\n const defaultConfig = {\n value: 0,\n unit: 'YEAR',\n around: 'before'\n }\n const offsetConfig = ref<any>({})\n const formRef = ref()\n const visible = ref(false)\n const formState = ref()\n watch(\n visible,\n (value: boolean) => {\n if (value) {\n if (props.mode === 'edit') {\n const {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n } = props.item\n formState.value = {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n }\n if (builtInFormula === 'DATE_OFFSET') {\n // 日期偏移\n const list = builtInCalcWay.split('-')\n if (list?.length === 3) {\n offsetConfig.value = {\n value: list[0],\n unit: list[1],\n around: list[2]\n }\n }\n }\n } else if (props.mode === 'add') {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n } else {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n },\n {\n immediate: true,\n deep: true\n }\n )\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const onChangeComponent = (value: string) => {\n const option = unref(componentList).find(v => v.id === value)\n if (option) {\n formState.value.builtInCalcWay = option.keyName\n }\n isDataChange = true\n }\n // 保存指标库\n const saveIndicator = () => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const { label, builtInFormula } = unref(formState) || {}\n const offset: any = {}\n if (builtInFormula === 'DATE_OFFSET') {\n offset.builtInCalcWay = `${unref(offsetConfig).value}-${unref(offsetConfig).unit}-${unref(offsetConfig).around}`\n }\n if (props.mode === 'add') {\n const id = nanoid()\n if (lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])) {\n list.forEach((v: any) => {\n v.show = false\n })\n }\n list.push({\n ...unref(formState),\n ...offset,\n id,\n show: true,\n name: label\n })\n } else if (props.mode === 'edit') {\n list[props.index] = {\n ...list[props.index],\n ...unref(formState),\n ...offset,\n name: label\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const validateLabel = async (_rule: Rule, value: string) => {\n if (value === '') {\n return Promise.reject(new Error('请输入指标名'))\n } else {\n const source = unref(allValueSourceList).find(v => v.label === value)\n if (source) {\n if (source.id === props.item.id) {\n return Promise.resolve()\n }\n return Promise.reject(new Error('指标名不能重复'))\n }\n return Promise.resolve()\n }\n }\n const formRules = computed(() => {\n let result: any = {\n label: [\n {\n required: true,\n validator: validateLabel,\n trigger: 'change'\n }\n ]\n }\n if (formState.value.calcType === 'BUILT_IN') {\n result = {\n ...result,\n builtInFormula: [\n {\n required: true,\n message: '请选择内置公式'\n }\n ],\n builtInValueSource: [\n {\n required: true,\n message: '请选择数值来自'\n }\n ],\n builtInCalcWay: [\n {\n required: true,\n message: '请选择取数原则'\n }\n ]\n }\n }\n return result\n })\n const onOK = () => {\n formRef.value.validate().then(() => {\n if (isDataChange) saveIndicator()\n isDataChange = false\n // 重置\n hideModal()\n })\n }\n const onCancel = () => {\n // 重置\n formRef.value.clearValidate()\n hideModal()\n }\n // 改变计算方式\n const onChangeBuiltInFormula = () => {\n isDataChange = true\n unref(formState).builtInCalcWay = ''\n }\n // 取数逻辑值\n const accessLogic = computed(() => {\n let data = ''\n const principle = unref(formState).builtInCalcWay\n const comefrom = unref(formState).builtInValueSource\n if (!comefrom || !principle) {\n return data\n }\n switch (unref(formState).builtInFormula) {\n case 'BUILT_IN_RANK': {\n // 排名\n if (principle === 'ASC') {\n // 升序\n data = '【' + comefrom + '】' + '由小到大在所有值中的排名'\n } else {\n // 降序\n data = '【' + comefrom + '】' + '由大到小在所有值中的排名'\n }\n break\n }\n case 'BUILT_IN_RANK_IN_GROUPO': {\n // 组内排名\n data = '所有【】的' + '\\n'\n if (principle === 'ASC') {\n // 升序\n data = data + '【' + comefrom + '】' + '由小到大的组内的排名'\n } else {\n // 降序\n data = data + '【' + comefrom + '】' + '由大到小的组内的排名'\n }\n break\n }\n case 'BUILT_IN_ALL_VALUE': {\n // 所有值\n let str = ''\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = '将所有【' + comefrom + '】' + str\n break\n }\n case 'BUILT_IN_ALL_VALUE_IN_GROUPO': {\n let str = ''\n data = '所有【】的' + '\\n'\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = data + '将所有【' + comefrom + '】' + str\n break\n }\n }\n return data\n })\n const filterOption = (input: string, option: any) => {\n return option.keyName.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n expose({\n showModal\n })\n return {\n visible,\n onCancel,\n labelCol,\n wrapperCol,\n formState,\n builtInValueSourceList,\n onOK,\n onChange,\n formRules,\n accessLogic,\n formRef,\n onChangeBuiltInFormula,\n componentList,\n onChangeComponent,\n filterOption,\n offsetConfig\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.accesstip{\n color: #3f8ce8;\n}\n</style>\n<style lang=\"less\">\n.question-tooltip .ant-tooltip-inner {\n color: #333;\n}\n</style>\n","<template>\n <a-modal\n :title=\"`${mode === 'add' ? '新增' : '编辑'}计算指标`\"\n :visible=\"visible\"\n width=\"50%\"\n :bodyStyle=\"{\n height: '55vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :closable=\"false\"\n @Ok=\"onOK\"\n @cancel=\"onCancel\"\n >\n <a-form :model=\"formState\" :rules=\"formRules\" ref=\"formRef\">\n <a-form-item\n label=\"指标名\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"label\"\n >\n <a-input\n v-model:value=\"formState.label\"\n @change=\"onChange\"\n />\n </a-form-item>\n <a-form-item\n label=\"计算方式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-show=\"type !== 'indexLibColumns'\"\n >\n <a-select\n v-model:value=\"formState.calcType\"\n @change=\"onChange\"\n >\n <a-select-option value=\"FORMULA\">公式</a-select-option>\n <a-select-option value=\"BUILT_IN\">内置公式</a-select-option>\n <a-select-option value=\"COMPONENT\">固定值</a-select-option>\n </a-select>\n </a-form-item>\n <template v-if=\"formState.calcType === 'FORMULA'\">\n <formula-calculation\n v-model:value=\"formState.formula\"\n :item=\"item\"\n :mode=\"mode\"\n @change=\"onChange\"\n />\n </template>\n <template v-if=\"formState.calcType === 'BUILT_IN'\">\n <a-form-item\n label=\"内置公式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInFormula\"\n >\n <a-select\n v-model:value=\"formState.builtInFormula\"\n @change=\"onChangeBuiltInFormula\"\n >\n <a-select-option value=\"BUILT_IN_ALL_VALUE\">所有值</a-select-option>\n <a-select-option value=\"BUILT_IN_ALL_VALUE_IN_GROUPO\"\n >组内所有值</a-select-option\n >\n <a-select-option value=\"BUILT_IN_RANK\">排名</a-select-option>\n <a-select-option value=\"BUILT_IN_RANK_IN_GROUPO\"\n >组内排名</a-select-option\n >\n <a-select-option value=\"FIRST_ROW_RATE\"\n >首行占比</a-select-option\n >\n <a-select-option value=\"DATE_OFFSET\"\n >日期偏移</a-select-option\n >\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n v-model:value=\"formState.builtInValueSource\"\n @change=\"onChange\"\n >\n <a-select-option\n v-for=\"(builtInValueSource, index) in builtInValueSourceList\"\n :key=\"index\"\n :value=\"builtInValueSource.label\"\n :disabled=\"mode === 'edit' && item.label === builtInValueSource.name\"\n >\n {{ builtInValueSource.label }}\n </a-select-option>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数原则\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <a-select\n v-model:value=\"formState.builtInCalcWay\"\n @change=\"onChange\"\n >\n <template\n v-if=\"\n ['BUILT_IN_ALL_VALUE', 'BUILT_IN_ALL_VALUE_IN_GROUPO'].includes(\n formState.builtInFormula || ''\n )\n \"\n >\n <!-- 所有值/组内所有值 -->\n <a-select-option value=\"SUM\">求和</a-select-option>\n <a-select-option value=\"AVG\">求平均</a-select-option>\n <a-select-option value=\"MAX\">求最大值</a-select-option>\n <a-select-option value=\"MIN\">求最小值</a-select-option>\n </template>\n <template v-else>\n <!-- 排名/组内排名 -->\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </template>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数逻辑\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <div\n class=\"accesstip\"\n v-if=\"[\n 'BUILT_IN_RANK_IN_GROUPO',\n 'BUILT_IN_ALL_VALUE_IN_GROUPO'\n ].includes(formState.builtInFormula) && formState.builtInValueSource\"\n >\n 蓝色字段跟随您后续维度设置的顺序而变化,以获取相应的{{ formState.builtInValueSource }}\n </div>\n <a-textarea\n :value=\"accessLogic\"\n :rows=\"6\"\n disabled\n />\n </a-form-item>\n </template>\n <template v-if=\"formState.calcType === 'COMPONENT'\">\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n show-search\n v-model:value=\"formState.builtInValueSource\"\n :filter-option=\"filterOption\"\n :options=\"componentList\"\n :fieldNames=\"{ value: 'id', label: 'keyName' }\"\n @change=\"onChangeComponent\"\n ></a-select>\n </a-form-item>\n </template>\n <template v-if=\"formState.builtInFormula === 'DATE_OFFSET'\">\n <a-form-item\n label=\"偏移设置\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n >\n <div style=\"display: flex;align-items: center;\">\n <a-input-number\n v-model:value=\"offsetConfig.value\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n ></a-input-number>\n <a-select\n v-model:value=\"offsetConfig.unit\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select\n v-model:value=\"offsetConfig.around\"\n style=\"width: 120px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n <a-tooltip\n title=\"内置公式【日期偏移】,依赖于【全局过滤】中的时间条件,若没有配置则不会进行偏移计算\"\n overlayClassName=\"question-tooltip\"\n color=\"#fff\"\n >\n <question-circle-outlined class=\"icon\" style=\"color: #40a9ff;font-size: 18px;cursor: pointer;margin-left: 10px;\"/>\n </a-tooltip>\n </div>\n </a-form-item>\n </template>\n </a-form>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n unref,\n PropType,\n watch,\n inject\n} from 'vue'\nimport { nanoid } from 'nanoid'\nimport FormulaCalculation from './FormulaCalculation.vue'\nimport {\n Form as AForm,\n Modal as AModal,\n FormItem as AFormItem,\n Input as AInput,\n InputNumber as AInputNumber,\n Select as ASelect,\n SelectOption as ASelectOption,\n Textarea as ATextarea,\n Tooltip as ATooltip\n} from 'ant-design-vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SELECTED_COMPONENT } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport type { Rule } from 'ant-design-vue/es/form'\nimport { QuestionCircleOutlined } from '@ant-design/icons-vue'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'CalculationModal',\n components: {\n FormulaCalculation,\n AForm,\n AModal,\n AFormItem,\n AInput,\n ASelect,\n ASelectOption,\n ATextarea,\n AInputNumber,\n ATooltip,\n QuestionCircleOutlined\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 模式\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n }\n },\n setup (props, { expose }) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG)\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const componentList = computed(() => unref(renderUsedComponents))\n const builtInValueSourceList = computed(\n () => unref(graphicConfig)[props.type] || []\n )\n const allValueSourceList = computed(() => {\n const values = ['leftAxisList', 'rightAxisList', 'queryColumnList', 'indicators']\n let list = []\n for (const item of values) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), item)) {\n list = list.concat(unref(graphicConfig)[item])\n }\n }\n return list\n })\n const labelCol = { span: 4 }\n const wrapperCol = { span: 18 }\n const formDefaultValue = {\n label: '',\n calcType: 'FORMULA',\n formula: undefined,\n builtInValueSource: undefined,\n builtInFormula: undefined,\n builtInCalcWay: undefined\n }\n const defaultConfig = {\n value: 0,\n unit: 'YEAR',\n around: 'before'\n }\n const offsetConfig = ref<any>({})\n const formRef = ref()\n const visible = ref(false)\n const formState = ref()\n watch(\n visible,\n (value: boolean) => {\n if (value) {\n if (props.mode === 'edit') {\n const {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n } = props.item\n formState.value = {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n }\n if (builtInFormula === 'DATE_OFFSET') {\n // 日期偏移\n const list = builtInCalcWay.split('-')\n if (list?.length === 3) {\n offsetConfig.value = {\n value: list[0],\n unit: list[1],\n around: list[2]\n }\n }\n }\n } else if (props.mode === 'add') {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n } else {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n },\n {\n immediate: true,\n deep: true\n }\n )\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const onChangeComponent = (value: string) => {\n const option = unref(componentList).find(v => v.id === value)\n if (option) {\n formState.value.builtInCalcWay = option.keyName\n }\n isDataChange = true\n }\n // 保存指标库\n const saveIndicator = () => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const { label, builtInFormula } = unref(formState) || {}\n const offset: any = {}\n if (builtInFormula === 'DATE_OFFSET') {\n offset.builtInCalcWay = `${unref(offsetConfig).value}-${unref(offsetConfig).unit}-${unref(offsetConfig).around}`\n }\n if (props.mode === 'add') {\n const id = nanoid()\n if (lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])) {\n list.forEach((v: any) => {\n v.show = false\n })\n }\n list.push({\n ...unref(formState),\n ...offset,\n id,\n show: true,\n name: label\n })\n } else if (props.mode === 'edit') {\n list[props.index] = {\n ...list[props.index],\n ...unref(formState),\n ...offset,\n name: label\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const validateLabel = async (_rule: Rule, value: string) => {\n if (value === '') {\n return Promise.reject(new Error('请输入指标名'))\n } else {\n const source = unref(allValueSourceList).find(v => v.label === value)\n if (source) {\n if (source.id === props.item.id) {\n return Promise.resolve()\n }\n return Promise.reject(new Error('指标名不能重复'))\n }\n return Promise.resolve()\n }\n }\n const formRules = computed(() => {\n let result: any = {\n label: [\n {\n required: true,\n validator: validateLabel,\n trigger: 'change'\n }\n ]\n }\n if (formState.value.calcType === 'BUILT_IN') {\n result = {\n ...result,\n builtInFormula: [\n {\n required: true,\n message: '请选择内置公式'\n }\n ],\n builtInValueSource: [\n {\n required: true,\n message: '请选择数值来自'\n }\n ],\n builtInCalcWay: [\n {\n required: true,\n message: '请选择取数原则'\n }\n ]\n }\n }\n return result\n })\n const onOK = () => {\n formRef.value.validate().then(() => {\n if (isDataChange) saveIndicator()\n isDataChange = false\n // 重置\n hideModal()\n })\n }\n const onCancel = () => {\n // 重置\n formRef.value.clearValidate()\n hideModal()\n }\n // 改变计算方式\n const onChangeBuiltInFormula = () => {\n isDataChange = true\n unref(formState).builtInCalcWay = ''\n }\n // 取数逻辑值\n const accessLogic = computed(() => {\n let data = ''\n const principle = unref(formState).builtInCalcWay\n const comefrom = unref(formState).builtInValueSource\n if (!comefrom || !principle) {\n return data\n }\n switch (unref(formState).builtInFormula) {\n case 'BUILT_IN_RANK': {\n // 排名\n if (principle === 'ASC') {\n // 升序\n data = '【' + comefrom + '】' + '由小到大在所有值中的排名'\n } else {\n // 降序\n data = '【' + comefrom + '】' + '由大到小在所有值中的排名'\n }\n break\n }\n case 'BUILT_IN_RANK_IN_GROUPO': {\n // 组内排名\n data = '所有【】的' + '\\n'\n if (principle === 'ASC') {\n // 升序\n data = data + '【' + comefrom + '】' + '由小到大的组内的排名'\n } else {\n // 降序\n data = data + '【' + comefrom + '】' + '由大到小的组内的排名'\n }\n break\n }\n case 'BUILT_IN_ALL_VALUE': {\n // 所有值\n let str = ''\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = '将所有【' + comefrom + '】' + str\n break\n }\n case 'BUILT_IN_ALL_VALUE_IN_GROUPO': {\n let str = ''\n data = '所有【】的' + '\\n'\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = data + '将所有【' + comefrom + '】' + str\n break\n }\n }\n return data\n })\n const filterOption = (input: string, option: any) => {\n return option.keyName.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n expose({\n showModal\n })\n return {\n visible,\n onCancel,\n labelCol,\n wrapperCol,\n formState,\n builtInValueSourceList,\n onOK,\n onChange,\n formRules,\n accessLogic,\n formRef,\n onChangeBuiltInFormula,\n componentList,\n onChangeComponent,\n filterOption,\n offsetConfig\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.accesstip{\n color: #3f8ce8;\n}\n</style>\n<style lang=\"less\">\n.question-tooltip .ant-tooltip-inner {\n color: #333;\n}\n</style>\n","<template>\n <a-card\n v-if=\"type === 'formFields'\"\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">{{ title }}</div>\n </div>\n </template>\n <div class=\"field-wrap\">\n <div class=\"field-item\">\n <div class=\"item-label\">名称:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.labelField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'labelField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\">\n <div class=\"item-label\">值:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.valueField\"\n :options=\"fieldOptions\"\n :mode=\"lowerCaseIncludes(selectedComponent.type, 'valueline') ? 'multiple' : undefined\"\n @change=\"onFieldChange($event, 'valueField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\" v-if=\"selectedComponent.type === 'ecanSelect'\">\n <div class=\"item-label\" style=\"width: 20px;\"></div>\n <a-checkbox v-model:checked=\"fieldData.hasAllOption\">\n 显示【全部】选项\n </a-checkbox>\n </div>\n </div>\n </a-card>\n <a-card\n v-else\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">\n {{ title }}\n <template v-if=\"type === 'dimensionList'\">\n <a-popover title=\"提示\" placement=\"topLeft\">\n <template #content>\n <p>配置了维度后,会使用返回数据的第一条中以【维度名】为key的值作为显示值</p>\n </template>\n <info-circle-outlined style=\"color: #919191;cursor: pointer;\" />\n </a-popover>\n </template>\n </div>\n <div\n class=\"add-calculation\"\n v-if=\"isShowCalcBtn\"\n @click.prevent.stop=\"onShowCalculationModal('add')\"\n >\n <plus-outlined class=\"add-calculation-icon\" />\n <span>添加计算指标</span>\n </div>\n <a-checkbox\n v-else-if=\"isIndexSet\"\n v-model:checked=\"compositeIndicator\"\n >复合指标</a-checkbox>\n </div>\n </template>\n <div :class=\"type + '-list'\" style=\"height: 100%;padding: 10px;\">\n <draggable\n v-model=\"cardItemList\"\n class=\"chart-column\"\n :id=\"type\"\n :disabled=\"type === 'indexLibColumns'\"\n group=\"cardItem\"\n item-key=\"index\"\n @add=\"onDragItemAdd\"\n @sort=\"onDragItemSort\"\n @end=\"onDragItemEnd\"\n @start=\"onDragItemStart($event, cardItemList)\"\n >\n <template #item=\"{ element: cardItem, index }\">\n <div class=\"card-item-wrap\">\n <a-checkbox\n class=\"card-item\"\n :checked=\"cardItem.show\"\n @change=\"onCheckboxChange($event, index)\"\n >\n <!-- editLabelList 和 labelList 都为 cardItemList 映射列表,用于修改label交互 -->\n <!-- editLabelList 是否修改名字, 变为输入框,值为 boolean -->\n <!-- labelList,label 列表 -->\n <div class=\"card-item-inner\">\n <div\n class=\"name\"\n v-if=\"!editLabelList[index] && cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n {{ cardItem.label }}\n </div>\n <div\n class=\"name placeholder\"\n v-if=\"!editLabelList[index] && !cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n 请点击填入名字\n </div>\n <a-input\n :default-value=\"cardItem.label\"\n size=\"small\"\n v-if=\"editLabelList[index]\"\n v-focus\n @blur=\"onCommitLabelChange($event, index, cardItem.label)\"\n @pressEnter=\"onCommitLabelChange($event, index, cardItem.label)\"\n @change=\"onLabelChange\"\n />\n <span\n class=\"calculation-icon\"\n @click.prevent.stop=\"\n onShowCalculationModal('edit', cardItem, index)\n \"\n v-if=\"['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n >\n fx\n </span>\n <a-dropdown :trigger=\"['click']\" @visibleChange=\"onVisibleChange($event, cardItem)\" v-if=\"type !== 'indexLibColumns'\">\n <setting-outlined class=\"setting-icon\" @click=\"onClickSetting(cardItem)\"/>\n <template #overlay>\n <a-menu>\n <!-- 仅在分类、系列中设置 -->\n <template\n v-if=\"dimensionType.includes(type)\"\n >\n <!-- 升序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'ASC')\"\n key=\"0\"\n >\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'ASC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 降序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'DESC')\"\n key=\"1\"\n >\n <a-menu-item\n class=\"menu-item\"\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'DESC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 自定义排序 -->\n <a-menu-item @click=\"showCustomSortModal(cardItem, index)\">\n {{ handleCustomSortTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 自定义分组 -->\n <a-menu-item @click=\"showCustomGroupModal(cardItem, index)\">\n {{ handleCustomGroupTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 日期维度的格式化 -->\n <template v-if=\"cardItem.genericType === 'DATE'\">\n <a-sub-menu title=\"日期格式化\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"format in formatList\"\n :key=\"format.value\"\n @click=\"onDateFormatChange(format.value, index)\"\n >\n <span\n :style=\"(cardItem.dateFormat === format.value) ||\n (!cardItem.dateFormat && format.value === 'YYYY-MM-DD') ? 'color: #1890FF;' : ''\">\n {{ format.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n </template>\n <!-- 过滤 -->\n <a-menu-item @click=\"showFilterModal(cardItem, index)\">\n {{ handleFilterTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <template v-if=\"!dimensionType.includes(type)\">\n <!-- 指标排序 -->\n <a-sub-menu :title=\"handleIndSortTitle(cardItem.sort)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sort in indSortList\"\n :key=\"sort.value\"\n @click=\"onIndSortChange(sort.value, index)\"\n >\n <span\n :style=\"cardItem.sort && cardItem.sort === sort.value ? 'color: #1890FF;' : ''\">\n {{ sort.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n\n <template\n v-if=\"!['classificationList', 'seriesList'].includes(type)\"\n >\n <!-- 汇总方式 -->\n <a-sub-menu :title=\"handleAggregateTitle(cardItem.aggregate)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"aggregate in aggregateList\"\n :key=\"aggregate.value\"\n @click=\"onAggregateChange(aggregate.value, index)\"\n >\n {{ aggregate.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <!-- 展示名称 -->\n <template v-if=\"isShowConfigName\">\n <a-menu-item @click=\"showConfigNameModal(cardItem, index)\">\n 修改展示名称\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 关联组件排序 -->\n <template v-if=\"isShowSortByCpnt\">\n <a-menu-item @click=\"showSortByCpntModal(cardItem, index)\">\n 关联组件排序\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 计数(内置)指标关联维度 -->\n <template v-if=\"cardItem.name === 'the_count'\">\n <a-menu-item @click=\"showDimByCountModal(cardItem, index)\">\n 关联维度\n </a-menu-item>\n <a-menu-divider />\n <a-sub-menu :title=\"handleDistinctTitle(cardItem.distinct)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"distinct in distinctList\"\n :key=\"distinct.value\"\n @click=\"onDistinctChange(distinct.value, index)\"\n >\n {{ distinct.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <!-- 指标名 -->\n <template v-if=\"!dimensionType.includes(type)\">\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].name)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].name\">\n <span style=\"font-weight: bold;\">指标名:</span>\n {{ dataViewMap[cardItem.name].name }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].code)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].code\">\n <span style=\"font-weight: bold;\">指标编码:</span>\n {{ dataViewMap[cardItem.name].code }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n </template>\n </a-menu>\n </template>\n </a-dropdown>\n <delete-outlined\n v-if=\"type !== 'indexLibColumns' || cardItem.calcType === 'FORMULA'\"\n class=\"delete-icon\"\n @click.prevent=\"onDelete(index)\"\n />\n </div>\n </a-checkbox>\n </div>\n </template>\n </draggable>\n </div>\n <custom-sort-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n :sortList=\"sortList\"\n ref=\"customSortModalRef\"\n />\n <custom-group-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"customGroupModalRef\"\n />\n <filter-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"filterModalRef\"\n />\n <config-name\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"configNameRef\"\n />\n <sort-by-cpnt\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"sortByCpntRef\"\n />\n <dim-by-count\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"dimByCountRef\"\n />\n <calculation-modal\n :type=\"type\"\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :mode=\"calculationModalMode\"\n ref=\"calculationModalRef\"\n />\n </a-card>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, watch, inject, onMounted } from 'vue'\nimport {\n Card as ACard,\n Checkbox as ACheckbox,\n Input as AInput,\n Dropdown as ADropdown,\n Menu as AMenu,\n SubMenu as ASubMenu,\n MenuItem as AMenuItem,\n MenuDivider as AMenuDivider,\n Select as ASelect,\n Popover as APopover,\n message\n} from 'ant-design-vue'\nimport {\n SettingOutlined,\n DeleteOutlined,\n PlusOutlined,\n CopyOutlined,\n InfoCircleOutlined\n} from '@ant-design/icons-vue'\nimport focus from '@/directives/focus'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n SOURCE_TYPE,\n SELECTED_COMPONENT,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport CustomSortModal from './CustomSortModal.vue'\nimport CustomGroupModal from './CustomGroupModal.vue'\nimport FilterModal from './filter-modal'\nimport ConfigName from './config-name'\nimport SortByCpnt from './sort-by-cpnt'\nimport DimByCount from './dim-by-count'\nimport CalculationModal from './calculation-modal'\nimport Draggable from 'vuedraggable'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'DataConfigCard',\n directives: {\n focus\n },\n components: {\n CalculationModal,\n FilterModal,\n CustomGroupModal,\n SettingOutlined,\n DeleteOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n CustomSortModal,\n PlusOutlined,\n ACard,\n ACheckbox,\n AInput,\n ADropdown,\n AMenu,\n ASubMenu,\n AMenuItem,\n AMenuDivider,\n ASelect,\n APopover,\n Draggable,\n ConfigName,\n SortByCpnt,\n DimByCount\n },\n props: {\n title: {\n type: String,\n default: ''\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' }\n ]\n const indSortList = [\n { label: '升序', value: 'ASC' },\n { label: '降序', value: 'DESC' },\n { label: '无', value: '' }\n ]\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const idxList = ['leftAxisList', 'rightAxisList', 'indicators']\n const dimList = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const indexSetList = ['CURRENT', 'LAST_CYCLE', 'LAST_YEAR', 'PERIOD_ON_PERIOD', 'YEAR_ON_YEAR', 'DW']\n const source = inject(SOURCE_TYPE)\n const currentCardItem = ref()\n // const variableList = computed(() => {\n // const list = unref(graphicConfig)?.variableList || []\n // return list\n // })\n\n const compositeIndicator = computed({\n get () {\n return unref(graphicConfig)?.compositeIndicator || false\n },\n set (val: boolean) {\n updateGraphicConfig({\n compositeIndicator: val\n })\n }\n })\n\n const isAllowAdd = (data: any = {}) => {\n const { type } = props\n if (unref(source) === 'SQL_VIEW') {\n // 视图不需要判断\n return true\n }\n if (unref(source) === 'EDV_DATA_SET') {\n // 数据集需要多传一个edvDataSetId\n updateGraphicConfig({ edvDataSetId: data.parentId })\n }\n let result = false\n if (data.scope === 'FIELD') {\n // 数据集没有维度指标区分,指标库-数据集配置时,列信息需要真是字段类型(字符串0,数字1,日期2),字符串不可以拉到值轴上\n result = true\n if (data.genericType === '0' && idxList.includes(type)) {\n result = false\n }\n }\n if (['IDX', 'BUILT_IN_IDX'].includes(data.scope)) {\n if (idxList.includes(type)) {\n result = true\n }\n } else if (['DIM', 'BUILT_IN_DIM'].includes(data.scope)) {\n if (dimList.includes(type)) {\n result = true\n }\n }\n if (type === 'dimensionList') {\n // 只能拖一个维度\n const list = unref(graphicConfig)[type]?.slice() || []\n if (list?.length === 1) {\n result = false\n }\n }\n return result\n }\n const dataSelectIndicators = computed(() =>\n lowerCaseIncludes(unref(selectedComponent)?.type, ['dataSelect']) && props.type === 'indicators')\n const handleListItemData = (listData: string = '{}') => {\n try {\n const data = JSON.parse(listData)\n if (!isAllowAdd(data)) {\n return\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate', 'scatter'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n reNameSame(list, data)\n // 新增一个随机值作为唯一值,用于指标的内置变量的处理\n data.randomKey = nanoid()\n list.push(data)\n const { type } = props\n const varConfig: { [key: string]: any } = {}\n if (['IDX', 'BUILT_IN_IDX', 'FIELD'].includes(data.scope)) {\n const varList = unref(graphicConfig)?.variableList || []\n let variates = sessionStorage.getItem('indicator-variates')\n if (data.scope === 'FIELD' && !idxList.includes(type)) {\n variates = '[]'\n }\n if (variates) {\n const variableList = JSON.parse(variates)\n if (variableList?.length) {\n for (const val of variableList) {\n varList.unshift({\n ...val,\n dataType: '',\n id: null,\n variableValue: unref(source) === 'EDV_DATA_SET' ? val.defaultValue : null,\n dateTypeValue: null,\n format: val.valueFormat ? (val.valueFormat.toUpperCase() || null) : null,\n variableName: val.name,\n variableType: val.valueType,\n label: data.label,\n randomKey: data.randomKey,\n keyValue: nanoid(),\n disabled: unref(source) === 'EDV_DATA_SET'\n })\n }\n }\n }\n varConfig.variableList = varList\n varConfig.variableConditions = handleVariableList(varList, renderUsedComponents)\n }\n updateGraphicConfig({\n [props.type]: list,\n ...varConfig\n })\n sessionStorage.setItem('indicator-list-item', '')\n sessionStorage.setItem('indicator-variates', '')\n } catch (e) {\n console.error(e)\n }\n }\n const handleCardItemData = (cardData: string = '{}') => {\n try {\n const { cardItem, type, index } = JSON.parse(cardData)\n if (!isAllowAdd(cardItem)) {\n return\n }\n if (type === props.type) return\n // 添加新元素\n const currentList = unref(graphicConfig)[props.type]?.slice() || []\n reNameSame(currentList, cardItem)\n currentList.push(cardItem)\n // 删除原先的元素\n const originalList = unref(graphicConfig)[type].slice() || []\n originalList.splice(index, 1)\n // 更新\n updateGraphicConfig({\n [props.type]: currentList,\n [type]: originalList\n })\n } catch (e) {\n console.error(e)\n }\n }\n function reNameSame (list: any, addItem: any) {\n const sameNums = []\n list.forEach((checkItem: any) => {\n if (checkItem.label.includes(addItem.label)) {\n sameNums.push(checkItem.label.split(addItem.label)[1])\n }\n })\n if (sameNums.length >= 1) {\n for (let i = 1; i <= sameNums.length; i++) {\n if (!sameNums.includes(i + '')) {\n addItem.label = addItem.label + i\n break\n }\n }\n }\n }\n const onCheckboxChange = (event, index: number) => {\n const value = (event.target as any)?.checked\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n list[index].show = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDropEnd = (index: string) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDragItemEnd = () => {\n sessionStorage.setItem('indicator-card-item', '')\n }\n const onDragItemAdd = (e) => {\n const listItemData = sessionStorage.getItem('indicator-list-item')\n const cardItemData = sessionStorage.getItem('indicator-card-item')\n if (listItemData) {\n handleListItemData(listItemData)\n } else if (cardItemData) {\n handleCardItemData(cardItemData)\n }\n }\n const onDragItemSort = (event: any) => {\n const { newIndex, oldIndex, from, to } = event\n const fromType = from.id\n const toType = to.id\n if (newIndex >= 0 && oldIndex >= 0) {\n if (fromType === toType) {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const currItem = list.splice(oldIndex, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n } else if (props.type === toType) {\n const list = unref(graphicConfig)[toType]?.slice() || []\n if (list?.length) {\n const currItem = list.splice(list.length - 1, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n }\n }\n }\n }\n const onDragItemStart = (event: any, dataViews: { [key: string]: any }[]) => {\n const index = event.oldIndex\n const dataView = dataViews[index]\n if (dataView) {\n sessionStorage.setItem('indicator-card-item', JSON.stringify({\n cardItem: dataView,\n type: props.type,\n index\n }))\n }\n }\n const cardItemList = computed(() => unref(graphicConfig)[props.type] || [])\n const editLabelList = ref<boolean[]>([])\n let isLabelChange = false\n watch(\n () => unref(cardItemList).length,\n (length) => {\n editLabelList.value = new Array(length).fill(false)\n },\n {\n flush: 'post',\n immediate: true\n }\n )\n const onDelete = (index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n for (let i = varList.length - 1; i >= 0; i--) {\n if (varList[i].randomKey === list[index].randomKey) {\n varList.splice(i, 1)\n }\n }\n updateGraphicConfig({\n variableConditions: handleVariableList(varList, renderUsedComponents),\n variableList: varList\n })\n }\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onEdit = (index: number) => {\n editLabelList.value[index] = true\n }\n const onLabelChange = () => {\n isLabelChange = true\n }\n const onCommitLabelChange = (event: Event, index: number, oldLabel: string) => {\n editLabelList.value[index] = false\n if (isLabelChange) {\n const value = (event.target as any)?.value\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 计算公式中有包含旧值的数据\n const aboutFormulaIds = list.filter((v: any) => v?.formula?.includes(oldLabel)).map((v: any) => v.id)\n // 数值来源中有包含旧值的数据\n const aboutSourceIds = list.filter((v: any) => v?.builtInValueSource?.includes(oldLabel)).map((v: any) => v.id)\n if (aboutFormulaIds?.length) {\n for (const id of aboutFormulaIds) {\n const item = list.find((v: any) => v.id === id)\n item.formula = item.formula.replaceAll(oldLabel, value)\n }\n }\n if (aboutSourceIds?.length) {\n for (const id of aboutSourceIds) {\n const item = list.find((v: any) => v.id === id)\n item.builtInValueSource = item.builtInValueSource.replaceAll(oldLabel, value)\n }\n }\n // 限定单选\n list[index].label = value\n\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n const targetList = varList.filter(v => v.randomKey === list[index].randomKey)\n if (targetList?.length) {\n targetList.forEach((item: any) => {\n item.label = value\n })\n }\n updateGraphicConfig({\n variableConditions: handleVariableList(varList, renderUsedComponents),\n variableList: varList\n })\n }\n\n updateGraphicConfig({\n [props.type]: list\n })\n }\n isLabelChange = false\n }\n const DEFAULT = 'DEFAULT'\n const sortList = computed(() => {\n const codeDim = []\n const { scope } = unref(currentCardItem) || {}\n // 自身分类加指标\n const list = unref(graphicConfig)[props.type] || []\n // if (['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(scope)) {\n // // 当前想要排序的是维度\n // list = list.filter((v: any) => v.label === label)\n // }\n if (scope === 'DIM' && !unref(currentCardItem).typeGuid.includes('_code')) {\n const cloneDim = cloneDeep(unref(currentCardItem))\n delete cloneDim.show\n delete cloneDim.truncations\n delete cloneDim.conditions\n cloneDim.hrpIndexComplexid += '_code'\n cloneDim.id += '_code'\n cloneDim.typeGuid += '_code'\n cloneDim.label = cloneDim.name + '_编码'\n cloneDim.name = cloneDim.typeGuid\n cloneDim.defaultCode = cloneDim.typeGuid\n codeDim.push(cloneDim)\n }\n const {\n leftAxisList = [],\n rightAxisList = [],\n indicators = []\n } = unref(graphicConfig) || {}\n return [\n // {\n // id: DEFAULT,\n // label: '默认',\n // name: '默认'\n // },\n ...list,\n ...codeDim,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators\n ]\n })\n // 升降序\n const onSort = (\n item: { [key: string]: any } = {},\n index: number,\n order: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const { label, name, id, defaultCode } = item\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (id === DEFAULT) {\n delete list[index].sort\n } else {\n list[index].sort = {\n label,\n columnName: name,\n type: 'NORMAL',\n order,\n defaultCode\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleSortTitle = (\n item: { [key: string]: any } = {},\n type: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n const text = map[type]\n const { sort } = item\n const { label, order } = sort || {}\n return label && order === type ? `${text}(${label})` : text\n }\n const currentItem = ref()\n const currentIndex = ref()\n const customSortModalRef = ref()\n const customGroupModalRef = ref()\n const showCustomSortModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customSortModalRef)?.showModal(item)\n }\n const handleCustomSortTitle = (item: { [key: string]: any }) => {\n // return '自定义排序' + (item?.sort?.type === 'CUSTOM' ? '(已配置)' : '')\n return '排序' + (item?.sort ? '(已配置)' : '')\n }\n const showCustomGroupModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customGroupModalRef)?.showModal()\n }\n const handleCustomGroupTitle = (item: { [key: string]: any }) => {\n return '自定义分组' + (item?.customGroup != null ? '(已配置)' : '')\n }\n // 汇总方式\n const aggregateList = [\n {\n name: '总和',\n value: 'SUM'\n },\n {\n name: '平均数',\n value: 'AVG'\n },\n {\n name: '最小值',\n value: 'MIN'\n },\n {\n name: '最大值',\n value: 'MAX'\n },\n {\n name: '计数',\n value: 'COUNT'\n }\n ]\n // 是否去重\n const distinctList = [\n {\n name: '是',\n value: 1\n },\n {\n name: '否',\n value: 0\n }\n ]\n const onAggregateChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].aggregate = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDistinctChange = (value: number, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].distinct = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDateFormatChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].dateFormat = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndSortChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].sort = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleAggregateTitle = (\n key: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' = 'SUM'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数'\n }\n return `汇总方式(${map[key]})`\n }\n\n const handleIndSortTitle = (key: string) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n if (key) {\n return `排序(${map[key]})`\n } else {\n return '排序'\n }\n }\n\n const handleDistinctTitle = (\n key: 0 | 1\n ) => {\n const map = {\n 0: '否',\n 1: '是'\n }\n return `是否去重(${map[key] || '否'})`\n }\n\n const handleFilterTitle = (item: { [key: string]: any } = {}) => {\n return (\n '过滤' +\n (item?.conditions && item?.conditions?.length > 0 ? '(已配置)' : '')\n )\n }\n const filterModalRef = ref()\n const configNameRef = ref()\n const sortByCpntRef = ref()\n const dimByCountRef = ref()\n const showFilterModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(filterModalRef).showModal()\n }\n const showConfigNameModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(configNameRef).showModal(item)\n }\n const showSortByCpntModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(sortByCpntRef).showModal(item)\n }\n const showDimByCountModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(dimByCountRef).showModal(item, unref(dataViewColumns))\n }\n const calculationModalRef = ref()\n const calculationModalMode = ref<'add' | 'edit'>('add')\n const onShowCalculationModal = (\n mode: 'add' | 'edit',\n item?: { [key: string]: any },\n index?: number\n ) => {\n calculationModalMode.value = mode\n if (mode === 'edit') {\n currentItem.value = item\n currentIndex.value = index\n }\n unref(calculationModalRef)?.showModal()\n }\n\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const fieldOptions = ref<any[]>([])\n const fieldData = computed<any>(() => unref(graphicConfig)[props.type] || {})\n watch(graphicConfig, () => {\n if (lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline']) && unref(graphicConfig)?.indicators) {\n fieldOptions.value = unref(graphicConfig).indicators.map((v: any) => ({\n label: v.label,\n value: v.label\n }))\n }\n })\n\n watch(() => graphicConfig.value.classificationList, () => {\n getEdvFieldData()\n })\n\n const currentEdvId = ref('')\n const getEdvFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (source !== 'EDV_DATA_SET') {\n return\n }\n if (!lowerCaseIncludes(unref(selectedComponent).type, 'select')) {\n return\n }\n const { classificationList = [] } = unref(graphicConfig)\n const target = classificationList.find((v: any) => v.show)\n if (target?.parentId) {\n if (unref(currentEdvId) === target.parentId) {\n return\n } else {\n currentEdvId.value = target.parentId\n }\n } else {\n unref(graphicConfig).selectFieldOptions = []\n fieldOptions.value = []\n currentEdvId.value = ''\n return\n }\n const res = await request.get(`${INDICATOR_URL}/dataset/` + target.parentId, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n const columnList = data.column.map(v => {\n return {\n label: v.columnName,\n value: v.columnName\n }\n })\n unref(graphicConfig).selectFieldOptions = columnList\n fieldOptions.value = columnList\n }\n }\n\n const getFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (!lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline'])) {\n try {\n if (source === 'EDV_DATA_SET') {\n await getEdvFieldData()\n } else {\n const res = await request.post(`${INDICATOR_URL}/diagram/dimFields`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n unref(graphicConfig).selectFieldOptions = data || []\n fieldOptions.value = data\n }\n }\n } catch (e) {\n console.error(e)\n }\n }\n }\n const onFieldChange = (value: any, type: string) => {\n const formFields = unref(graphicConfig)[props.type] || {}\n formFields[type] = value\n updateGraphicConfig({\n [props.type]: formFields\n })\n }\n const dimensionType = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const dataViewMap = ref({})\n const dataViewColumns = ref([])\n const onVisibleChange = async (visible: boolean, cardItem: any) => {\n const { name: itemName } = cardItem\n if (!dimensionType.includes(props.type) && visible && hasOwn(cardItem, 'indexCode')) {\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n dataSourceId: '',\n indexGuid: cardItem.id,\n indexCode: cardItem.indexCode,\n pageId: (window as any)?.config?.pageId\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data } = res.data\n if (success && data) {\n dataViewColumns.value = data?.dataViewColumns || []\n dataViewMap.value[itemName] = {\n name: data.name,\n code: data.indexCode\n }\n }\n }\n }\n const onClickSetting = (cardItem: any) => {\n currentCardItem.value = cardItem\n }\n // 复制指标名\n const copyDataViewName = (text: string) => {\n const input = document.createElement('input')\n document.body.appendChild(input)\n input.setAttribute('value', text)\n input.select()\n document.execCommand('copy')\n document.body.removeChild(input)\n message.success('复制成功')\n }\n\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n // 是否需要显示展示名称的配置\n const isShowConfigName = computed(() => {\n if (props.type === 'indicators' && unref(selectedComponent).type === 'ecanTable') {\n return true\n } else {\n return false\n }\n })\n // 是否显示关联控件排序\n const isShowSortByCpnt = computed(() => {\n if (['indicators', 'classificationList', 'leftAxisList', 'rightAxisList'].includes(props.type)) {\n return true\n } else {\n return false\n }\n })\n\n const isIndexSet = computed(() => lowerCaseIncludes(unref(selectedComponent)?.type, ['table']) && unref(graphicConfig)?.isIndexSet)\n\n // 是否显示添加计算指标按钮\n const isShowCalcBtn = computed(() => {\n return !dimensionType.includes(props.type) && !unref(dataSelectIndicators) && (!unref(isIndexSet) || props.type !== 'indicators')\n })\n\n onMounted(() => {\n if (props.type === 'formFields') {\n if (unref(selectedComponent).type === 'ecanDataSelect') {\n fieldOptions.value = [\n {\n label: '维度编码',\n value: '_code'\n },\n {\n label: '维度值',\n value: '_value'\n }\n ]\n } else {\n getFieldData()\n }\n }\n })\n return {\n onCheckboxChange,\n onDropEnd,\n onDragItemEnd,\n onDragItemAdd,\n onDragItemSort,\n onDragItemStart,\n cardItemList,\n onDelete,\n onEdit,\n onCommitLabelChange,\n sortList,\n onSort,\n handleSortTitle,\n showCustomSortModal,\n customSortModalRef,\n currentItem,\n currentIndex,\n handleCustomSortTitle,\n handleCustomGroupTitle,\n customGroupModalRef,\n showCustomGroupModal,\n editLabelList,\n onLabelChange,\n aggregateList,\n distinctList,\n onAggregateChange,\n onDistinctChange,\n onDateFormatChange,\n onIndSortChange,\n handleAggregateTitle,\n handleDistinctTitle,\n onShowCalculationModal,\n handleFilterTitle,\n filterModalRef,\n configNameRef,\n sortByCpntRef,\n dimByCountRef,\n showFilterModal,\n calculationModalRef,\n calculationModalMode,\n formatList,\n indSortList,\n fieldOptions,\n fieldData,\n onFieldChange,\n onVisibleChange,\n onClickSetting,\n copyDataViewName,\n dataViewMap,\n isShowConfigName,\n showConfigNameModal,\n dimensionType,\n isShowSortByCpnt,\n showSortByCpntModal,\n dataSelectIndicators,\n showDimByCountModal,\n selectedComponent,\n lowerCaseIncludes,\n isShowCalcBtn,\n isIndexSet,\n indexSetList,\n compositeIndicator,\n handleIndSortTitle\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config-card {\n display: flex;\n flex-direction: column;\n height: 280px;\n}\n\n.card-item {\n background-color: rgba(161, 212, 230, 0.3);\n width: 100%;\n height: 100%;\n padding: 5px;\n margin: 3px 0;\n}\n\n.title {\n display: flex;\n justify-content: space-between;\n}\n\n.add-calculation {\n cursor: pointer;\n font-size: 13px;\n color: #3f8ce8;\n line-height: 24px;\n}\n\n.add-calculation-icon {\n color: #3f8ce8;\n margin-right: 3px;\n}\n\n.ant-checkbox + span {\n width: 100% !important;\n}\n\n.card-item-inner {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.name {\n width: 100%;\n}\n\n.placeholder {\n color: red;\n}\n\n.setting-icon {\n color: #545;\n margin-left: 5px;\n}\n\n.delete-icon {\n color: #ff0000;\n margin-left: 5px;\n}\n\n.calculation-icon {\n font-weight: bold;\n font-style: italic;\n}\n\n.menu-item {\n white-space: nowrap;\n}\n\n.chart-column {\n height: 100%;\n}\n\n.data-view-name {\n display: inline-block;\n max-width: 200px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n</style>\n\n<style lang=\"less\">\n.data-config-card {\n .ant-card-body {\n overflow-y: auto;\n }\n}\n\n.card-item {\n .ant-checkbox + span {\n width: 100%;\n }\n}\n\n.field-wrap {\n padding: 10px 0;\n .field-item {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n .item-label {\n width: 45px;\n font-size: 14px;\n text-align: right;\n }\n }\n}\n</style>\n","<template>\n <a-card\n v-if=\"type === 'formFields'\"\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">{{ title }}</div>\n </div>\n </template>\n <div class=\"field-wrap\">\n <div class=\"field-item\">\n <div class=\"item-label\">名称:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.labelField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'labelField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\">\n <div class=\"item-label\">值:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.valueField\"\n :options=\"fieldOptions\"\n :mode=\"lowerCaseIncludes(selectedComponent.type, 'valueline') ? 'multiple' : undefined\"\n @change=\"onFieldChange($event, 'valueField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\" v-if=\"selectedComponent.type === 'ecanSelect'\">\n <div class=\"item-label\" style=\"width: 20px;\"></div>\n <a-checkbox v-model:checked=\"fieldData.hasAllOption\">\n 显示【全部】选项\n </a-checkbox>\n </div>\n </div>\n </a-card>\n <a-card\n v-else\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">\n {{ title }}\n <template v-if=\"type === 'dimensionList'\">\n <a-popover title=\"提示\" placement=\"topLeft\">\n <template #content>\n <p>配置了维度后,会使用返回数据的第一条中以【维度名】为key的值作为显示值</p>\n </template>\n <info-circle-outlined style=\"color: #919191;cursor: pointer;\" />\n </a-popover>\n </template>\n </div>\n <div\n class=\"add-calculation\"\n v-if=\"isShowCalcBtn\"\n @click.prevent.stop=\"onShowCalculationModal('add')\"\n >\n <plus-outlined class=\"add-calculation-icon\" />\n <span>添加计算指标</span>\n </div>\n <a-checkbox\n v-else-if=\"isIndexSet\"\n v-model:checked=\"compositeIndicator\"\n >复合指标</a-checkbox>\n </div>\n </template>\n <div :class=\"type + '-list'\" style=\"height: 100%;padding: 10px;\">\n <draggable\n v-model=\"cardItemList\"\n class=\"chart-column\"\n :id=\"type\"\n :disabled=\"type === 'indexLibColumns'\"\n group=\"cardItem\"\n item-key=\"index\"\n @add=\"onDragItemAdd\"\n @sort=\"onDragItemSort\"\n @end=\"onDragItemEnd\"\n @start=\"onDragItemStart($event, cardItemList)\"\n >\n <template #item=\"{ element: cardItem, index }\">\n <div class=\"card-item-wrap\">\n <a-checkbox\n class=\"card-item\"\n :checked=\"cardItem.show\"\n @change=\"onCheckboxChange($event, index)\"\n >\n <!-- editLabelList 和 labelList 都为 cardItemList 映射列表,用于修改label交互 -->\n <!-- editLabelList 是否修改名字, 变为输入框,值为 boolean -->\n <!-- labelList,label 列表 -->\n <div class=\"card-item-inner\">\n <div\n class=\"name\"\n v-if=\"!editLabelList[index] && cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n {{ cardItem.label }}\n </div>\n <div\n class=\"name placeholder\"\n v-if=\"!editLabelList[index] && !cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n 请点击填入名字\n </div>\n <a-input\n :default-value=\"cardItem.label\"\n size=\"small\"\n v-if=\"editLabelList[index]\"\n v-focus\n @blur=\"onCommitLabelChange($event, index, cardItem.label)\"\n @pressEnter=\"onCommitLabelChange($event, index, cardItem.label)\"\n @change=\"onLabelChange\"\n />\n <span\n class=\"calculation-icon\"\n @click.prevent.stop=\"\n onShowCalculationModal('edit', cardItem, index)\n \"\n v-if=\"['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n >\n fx\n </span>\n <a-dropdown :trigger=\"['click']\" @visibleChange=\"onVisibleChange($event, cardItem)\" v-if=\"type !== 'indexLibColumns'\">\n <setting-outlined class=\"setting-icon\" @click=\"onClickSetting(cardItem)\"/>\n <template #overlay>\n <a-menu>\n <!-- 仅在分类、系列中设置 -->\n <template\n v-if=\"dimensionType.includes(type)\"\n >\n <!-- 升序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'ASC')\"\n key=\"0\"\n >\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'ASC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 降序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'DESC')\"\n key=\"1\"\n >\n <a-menu-item\n class=\"menu-item\"\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'DESC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 自定义排序 -->\n <a-menu-item @click=\"showCustomSortModal(cardItem, index)\">\n {{ handleCustomSortTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 自定义分组 -->\n <a-menu-item @click=\"showCustomGroupModal(cardItem, index)\">\n {{ handleCustomGroupTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 日期维度的格式化 -->\n <template v-if=\"cardItem.genericType === 'DATE'\">\n <a-sub-menu title=\"日期格式化\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"format in formatList\"\n :key=\"format.value\"\n @click=\"onDateFormatChange(format.value, index)\"\n >\n <span\n :style=\"(cardItem.dateFormat === format.value) ||\n (!cardItem.dateFormat && format.value === 'YYYY-MM-DD') ? 'color: #1890FF;' : ''\">\n {{ format.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n </template>\n <!-- 过滤 -->\n <a-menu-item @click=\"showFilterModal(cardItem, index)\">\n {{ handleFilterTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <template v-if=\"!dimensionType.includes(type)\">\n <!-- 指标排序 -->\n <a-sub-menu :title=\"handleIndSortTitle(cardItem.sort)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sort in indSortList\"\n :key=\"sort.value\"\n @click=\"onIndSortChange(sort.value, index)\"\n >\n <span\n :style=\"cardItem.sort && cardItem.sort === sort.value ? 'color: #1890FF;' : ''\">\n {{ sort.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n\n <template\n v-if=\"!['classificationList', 'seriesList'].includes(type)\"\n >\n <!-- 汇总方式 -->\n <a-sub-menu :title=\"handleAggregateTitle(cardItem.aggregate)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"aggregate in aggregateList\"\n :key=\"aggregate.value\"\n @click=\"onAggregateChange(aggregate.value, index)\"\n >\n {{ aggregate.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <!-- 展示名称 -->\n <template v-if=\"isShowConfigName\">\n <a-menu-item @click=\"showConfigNameModal(cardItem, index)\">\n 修改展示名称\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 关联组件排序 -->\n <template v-if=\"isShowSortByCpnt\">\n <a-menu-item @click=\"showSortByCpntModal(cardItem, index)\">\n 关联组件排序\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 计数(内置)指标关联维度 -->\n <template v-if=\"cardItem.name === 'the_count'\">\n <a-menu-item @click=\"showDimByCountModal(cardItem, index)\">\n 关联维度\n </a-menu-item>\n <a-menu-divider />\n <a-sub-menu :title=\"handleDistinctTitle(cardItem.distinct)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"distinct in distinctList\"\n :key=\"distinct.value\"\n @click=\"onDistinctChange(distinct.value, index)\"\n >\n {{ distinct.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <!-- 指标名 -->\n <template v-if=\"!dimensionType.includes(type)\">\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].name)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].name\">\n <span style=\"font-weight: bold;\">指标名:</span>\n {{ dataViewMap[cardItem.name].name }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].code)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].code\">\n <span style=\"font-weight: bold;\">指标编码:</span>\n {{ dataViewMap[cardItem.name].code }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n </template>\n </a-menu>\n </template>\n </a-dropdown>\n <delete-outlined\n v-if=\"type !== 'indexLibColumns' || cardItem.calcType === 'FORMULA'\"\n class=\"delete-icon\"\n @click.prevent=\"onDelete(index)\"\n />\n </div>\n </a-checkbox>\n </div>\n </template>\n </draggable>\n </div>\n <custom-sort-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n :sortList=\"sortList\"\n ref=\"customSortModalRef\"\n />\n <custom-group-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"customGroupModalRef\"\n />\n <filter-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"filterModalRef\"\n />\n <config-name\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"configNameRef\"\n />\n <sort-by-cpnt\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"sortByCpntRef\"\n />\n <dim-by-count\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"dimByCountRef\"\n />\n <calculation-modal\n :type=\"type\"\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :mode=\"calculationModalMode\"\n ref=\"calculationModalRef\"\n />\n </a-card>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, watch, inject, onMounted } from 'vue'\nimport {\n Card as ACard,\n Checkbox as ACheckbox,\n Input as AInput,\n Dropdown as ADropdown,\n Menu as AMenu,\n SubMenu as ASubMenu,\n MenuItem as AMenuItem,\n MenuDivider as AMenuDivider,\n Select as ASelect,\n Popover as APopover,\n message\n} from 'ant-design-vue'\nimport {\n SettingOutlined,\n DeleteOutlined,\n PlusOutlined,\n CopyOutlined,\n InfoCircleOutlined\n} from '@ant-design/icons-vue'\nimport focus from '@/directives/focus'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n SOURCE_TYPE,\n SELECTED_COMPONENT,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport CustomSortModal from './CustomSortModal.vue'\nimport CustomGroupModal from './CustomGroupModal.vue'\nimport FilterModal from './filter-modal'\nimport ConfigName from './config-name'\nimport SortByCpnt from './sort-by-cpnt'\nimport DimByCount from './dim-by-count'\nimport CalculationModal from './calculation-modal'\nimport Draggable from 'vuedraggable'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'DataConfigCard',\n directives: {\n focus\n },\n components: {\n CalculationModal,\n FilterModal,\n CustomGroupModal,\n SettingOutlined,\n DeleteOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n CustomSortModal,\n PlusOutlined,\n ACard,\n ACheckbox,\n AInput,\n ADropdown,\n AMenu,\n ASubMenu,\n AMenuItem,\n AMenuDivider,\n ASelect,\n APopover,\n Draggable,\n ConfigName,\n SortByCpnt,\n DimByCount\n },\n props: {\n title: {\n type: String,\n default: ''\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' }\n ]\n const indSortList = [\n { label: '升序', value: 'ASC' },\n { label: '降序', value: 'DESC' },\n { label: '无', value: '' }\n ]\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const idxList = ['leftAxisList', 'rightAxisList', 'indicators']\n const dimList = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const indexSetList = ['CURRENT', 'LAST_CYCLE', 'LAST_YEAR', 'PERIOD_ON_PERIOD', 'YEAR_ON_YEAR', 'DW']\n const source = inject(SOURCE_TYPE)\n const currentCardItem = ref()\n // const variableList = computed(() => {\n // const list = unref(graphicConfig)?.variableList || []\n // return list\n // })\n\n const compositeIndicator = computed({\n get () {\n return unref(graphicConfig)?.compositeIndicator || false\n },\n set (val: boolean) {\n updateGraphicConfig({\n compositeIndicator: val\n })\n }\n })\n\n const isAllowAdd = (data: any = {}) => {\n const { type } = props\n if (unref(source) === 'SQL_VIEW') {\n // 视图不需要判断\n return true\n }\n if (unref(source) === 'EDV_DATA_SET') {\n // 数据集需要多传一个edvDataSetId\n updateGraphicConfig({ edvDataSetId: data.parentId })\n }\n let result = false\n if (data.scope === 'FIELD') {\n // 数据集没有维度指标区分,指标库-数据集配置时,列信息需要真是字段类型(字符串0,数字1,日期2),字符串不可以拉到值轴上\n result = true\n if (data.genericType === '0' && idxList.includes(type)) {\n result = false\n }\n }\n if (['IDX', 'BUILT_IN_IDX'].includes(data.scope)) {\n if (idxList.includes(type)) {\n result = true\n }\n } else if (['DIM', 'BUILT_IN_DIM'].includes(data.scope)) {\n if (dimList.includes(type)) {\n result = true\n }\n }\n if (type === 'dimensionList') {\n // 只能拖一个维度\n const list = unref(graphicConfig)[type]?.slice() || []\n if (list?.length === 1) {\n result = false\n }\n }\n return result\n }\n const dataSelectIndicators = computed(() =>\n lowerCaseIncludes(unref(selectedComponent)?.type, ['dataSelect']) && props.type === 'indicators')\n const handleListItemData = (listData: string = '{}') => {\n try {\n const data = JSON.parse(listData)\n if (!isAllowAdd(data)) {\n return\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate', 'scatter'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n reNameSame(list, data)\n // 新增一个随机值作为唯一值,用于指标的内置变量的处理\n data.randomKey = nanoid()\n list.push(data)\n const { type } = props\n const varConfig: { [key: string]: any } = {}\n if (['IDX', 'BUILT_IN_IDX', 'FIELD'].includes(data.scope)) {\n const varList = unref(graphicConfig)?.variableList || []\n let variates = sessionStorage.getItem('indicator-variates')\n if (data.scope === 'FIELD' && !idxList.includes(type)) {\n variates = '[]'\n }\n if (variates) {\n const variableList = JSON.parse(variates)\n if (variableList?.length) {\n for (const val of variableList) {\n varList.unshift({\n ...val,\n dataType: '',\n id: null,\n variableValue: unref(source) === 'EDV_DATA_SET' ? val.defaultValue : null,\n dateTypeValue: null,\n format: val.valueFormat ? (val.valueFormat.toUpperCase() || null) : null,\n variableName: val.name,\n variableType: val.valueType,\n label: data.label,\n randomKey: data.randomKey,\n keyValue: nanoid(),\n disabled: unref(source) === 'EDV_DATA_SET'\n })\n }\n }\n }\n varConfig.variableList = varList\n varConfig.variableConditions = handleVariableList(varList, renderUsedComponents)\n }\n updateGraphicConfig({\n [props.type]: list,\n ...varConfig\n })\n sessionStorage.setItem('indicator-list-item', '')\n sessionStorage.setItem('indicator-variates', '')\n } catch (e) {\n console.error(e)\n }\n }\n const handleCardItemData = (cardData: string = '{}') => {\n try {\n const { cardItem, type, index } = JSON.parse(cardData)\n if (!isAllowAdd(cardItem)) {\n return\n }\n if (type === props.type) return\n // 添加新元素\n const currentList = unref(graphicConfig)[props.type]?.slice() || []\n reNameSame(currentList, cardItem)\n currentList.push(cardItem)\n // 删除原先的元素\n const originalList = unref(graphicConfig)[type].slice() || []\n originalList.splice(index, 1)\n // 更新\n updateGraphicConfig({\n [props.type]: currentList,\n [type]: originalList\n })\n } catch (e) {\n console.error(e)\n }\n }\n function reNameSame (list: any, addItem: any) {\n const sameNums = []\n list.forEach((checkItem: any) => {\n if (checkItem.label.includes(addItem.label)) {\n sameNums.push(checkItem.label.split(addItem.label)[1])\n }\n })\n if (sameNums.length >= 1) {\n for (let i = 1; i <= sameNums.length; i++) {\n if (!sameNums.includes(i + '')) {\n addItem.label = addItem.label + i\n break\n }\n }\n }\n }\n const onCheckboxChange = (event, index: number) => {\n const value = (event.target as any)?.checked\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n list[index].show = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDropEnd = (index: string) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDragItemEnd = () => {\n sessionStorage.setItem('indicator-card-item', '')\n }\n const onDragItemAdd = (e) => {\n const listItemData = sessionStorage.getItem('indicator-list-item')\n const cardItemData = sessionStorage.getItem('indicator-card-item')\n if (listItemData) {\n handleListItemData(listItemData)\n } else if (cardItemData) {\n handleCardItemData(cardItemData)\n }\n }\n const onDragItemSort = (event: any) => {\n const { newIndex, oldIndex, from, to } = event\n const fromType = from.id\n const toType = to.id\n if (newIndex >= 0 && oldIndex >= 0) {\n if (fromType === toType) {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const currItem = list.splice(oldIndex, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n } else if (props.type === toType) {\n const list = unref(graphicConfig)[toType]?.slice() || []\n if (list?.length) {\n const currItem = list.splice(list.length - 1, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n }\n }\n }\n }\n const onDragItemStart = (event: any, dataViews: { [key: string]: any }[]) => {\n const index = event.oldIndex\n const dataView = dataViews[index]\n if (dataView) {\n sessionStorage.setItem('indicator-card-item', JSON.stringify({\n cardItem: dataView,\n type: props.type,\n index\n }))\n }\n }\n const cardItemList = computed(() => unref(graphicConfig)[props.type] || [])\n const editLabelList = ref<boolean[]>([])\n let isLabelChange = false\n watch(\n () => unref(cardItemList).length,\n (length) => {\n editLabelList.value = new Array(length).fill(false)\n },\n {\n flush: 'post',\n immediate: true\n }\n )\n const onDelete = (index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n for (let i = varList.length - 1; i >= 0; i--) {\n if (varList[i].randomKey === list[index].randomKey) {\n varList.splice(i, 1)\n }\n }\n updateGraphicConfig({\n variableConditions: handleVariableList(varList, renderUsedComponents),\n variableList: varList\n })\n }\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onEdit = (index: number) => {\n editLabelList.value[index] = true\n }\n const onLabelChange = () => {\n isLabelChange = true\n }\n const onCommitLabelChange = (event: Event, index: number, oldLabel: string) => {\n editLabelList.value[index] = false\n if (isLabelChange) {\n const value = (event.target as any)?.value\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 计算公式中有包含旧值的数据\n const aboutFormulaIds = list.filter((v: any) => v?.formula?.includes(oldLabel)).map((v: any) => v.id)\n // 数值来源中有包含旧值的数据\n const aboutSourceIds = list.filter((v: any) => v?.builtInValueSource?.includes(oldLabel)).map((v: any) => v.id)\n if (aboutFormulaIds?.length) {\n for (const id of aboutFormulaIds) {\n const item = list.find((v: any) => v.id === id)\n item.formula = item.formula.replaceAll(oldLabel, value)\n }\n }\n if (aboutSourceIds?.length) {\n for (const id of aboutSourceIds) {\n const item = list.find((v: any) => v.id === id)\n item.builtInValueSource = item.builtInValueSource.replaceAll(oldLabel, value)\n }\n }\n // 限定单选\n list[index].label = value\n\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n const targetList = varList.filter(v => v.randomKey === list[index].randomKey)\n if (targetList?.length) {\n targetList.forEach((item: any) => {\n item.label = value\n })\n }\n updateGraphicConfig({\n variableConditions: handleVariableList(varList, renderUsedComponents),\n variableList: varList\n })\n }\n\n updateGraphicConfig({\n [props.type]: list\n })\n }\n isLabelChange = false\n }\n const DEFAULT = 'DEFAULT'\n const sortList = computed(() => {\n const codeDim = []\n const { scope } = unref(currentCardItem) || {}\n // 自身分类加指标\n const list = unref(graphicConfig)[props.type] || []\n // if (['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(scope)) {\n // // 当前想要排序的是维度\n // list = list.filter((v: any) => v.label === label)\n // }\n if (scope === 'DIM' && !unref(currentCardItem).typeGuid.includes('_code')) {\n const cloneDim = cloneDeep(unref(currentCardItem))\n delete cloneDim.show\n delete cloneDim.truncations\n delete cloneDim.conditions\n cloneDim.hrpIndexComplexid += '_code'\n cloneDim.id += '_code'\n cloneDim.typeGuid += '_code'\n cloneDim.label = cloneDim.name + '_编码'\n cloneDim.name = cloneDim.typeGuid\n cloneDim.defaultCode = cloneDim.typeGuid\n codeDim.push(cloneDim)\n }\n const {\n leftAxisList = [],\n rightAxisList = [],\n indicators = []\n } = unref(graphicConfig) || {}\n return [\n // {\n // id: DEFAULT,\n // label: '默认',\n // name: '默认'\n // },\n ...list,\n ...codeDim,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators\n ]\n })\n // 升降序\n const onSort = (\n item: { [key: string]: any } = {},\n index: number,\n order: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const { label, name, id, defaultCode } = item\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (id === DEFAULT) {\n delete list[index].sort\n } else {\n list[index].sort = {\n label,\n columnName: name,\n type: 'NORMAL',\n order,\n defaultCode\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleSortTitle = (\n item: { [key: string]: any } = {},\n type: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n const text = map[type]\n const { sort } = item\n const { label, order } = sort || {}\n return label && order === type ? `${text}(${label})` : text\n }\n const currentItem = ref()\n const currentIndex = ref()\n const customSortModalRef = ref()\n const customGroupModalRef = ref()\n const showCustomSortModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customSortModalRef)?.showModal(item)\n }\n const handleCustomSortTitle = (item: { [key: string]: any }) => {\n // return '自定义排序' + (item?.sort?.type === 'CUSTOM' ? '(已配置)' : '')\n return '排序' + (item?.sort ? '(已配置)' : '')\n }\n const showCustomGroupModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customGroupModalRef)?.showModal()\n }\n const handleCustomGroupTitle = (item: { [key: string]: any }) => {\n return '自定义分组' + (item?.customGroup != null ? '(已配置)' : '')\n }\n // 汇总方式\n const aggregateList = [\n {\n name: '总和',\n value: 'SUM'\n },\n {\n name: '平均数',\n value: 'AVG'\n },\n {\n name: '最小值',\n value: 'MIN'\n },\n {\n name: '最大值',\n value: 'MAX'\n },\n {\n name: '计数',\n value: 'COUNT'\n }\n ]\n // 是否去重\n const distinctList = [\n {\n name: '是',\n value: 1\n },\n {\n name: '否',\n value: 0\n }\n ]\n const onAggregateChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].aggregate = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDistinctChange = (value: number, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].distinct = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDateFormatChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].dateFormat = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndSortChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].sort = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleAggregateTitle = (\n key: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' = 'SUM'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数'\n }\n return `汇总方式(${map[key]})`\n }\n\n const handleIndSortTitle = (key: string) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n if (key) {\n return `排序(${map[key]})`\n } else {\n return '排序'\n }\n }\n\n const handleDistinctTitle = (\n key: 0 | 1\n ) => {\n const map = {\n 0: '否',\n 1: '是'\n }\n return `是否去重(${map[key] || '否'})`\n }\n\n const handleFilterTitle = (item: { [key: string]: any } = {}) => {\n return (\n '过滤' +\n (item?.conditions && item?.conditions?.length > 0 ? '(已配置)' : '')\n )\n }\n const filterModalRef = ref()\n const configNameRef = ref()\n const sortByCpntRef = ref()\n const dimByCountRef = ref()\n const showFilterModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(filterModalRef).showModal()\n }\n const showConfigNameModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(configNameRef).showModal(item)\n }\n const showSortByCpntModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(sortByCpntRef).showModal(item)\n }\n const showDimByCountModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(dimByCountRef).showModal(item, unref(dataViewColumns))\n }\n const calculationModalRef = ref()\n const calculationModalMode = ref<'add' | 'edit'>('add')\n const onShowCalculationModal = (\n mode: 'add' | 'edit',\n item?: { [key: string]: any },\n index?: number\n ) => {\n calculationModalMode.value = mode\n if (mode === 'edit') {\n currentItem.value = item\n currentIndex.value = index\n }\n unref(calculationModalRef)?.showModal()\n }\n\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const fieldOptions = ref<any[]>([])\n const fieldData = computed<any>(() => unref(graphicConfig)[props.type] || {})\n watch(graphicConfig, () => {\n if (lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline']) && unref(graphicConfig)?.indicators) {\n fieldOptions.value = unref(graphicConfig).indicators.map((v: any) => ({\n label: v.label,\n value: v.label\n }))\n }\n })\n\n watch(() => graphicConfig.value.classificationList, () => {\n getEdvFieldData()\n })\n\n const currentEdvId = ref('')\n const getEdvFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (source !== 'EDV_DATA_SET') {\n return\n }\n if (!lowerCaseIncludes(unref(selectedComponent).type, 'select')) {\n return\n }\n const { classificationList = [] } = unref(graphicConfig)\n const target = classificationList.find((v: any) => v.show)\n if (target?.parentId) {\n if (unref(currentEdvId) === target.parentId) {\n return\n } else {\n currentEdvId.value = target.parentId\n }\n } else {\n unref(graphicConfig).selectFieldOptions = []\n fieldOptions.value = []\n currentEdvId.value = ''\n return\n }\n const res = await request.get(`${INDICATOR_URL}/dataset/` + target.parentId, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n const columnList = data.column.map(v => {\n return {\n label: v.columnName,\n value: v.columnName\n }\n })\n unref(graphicConfig).selectFieldOptions = columnList\n fieldOptions.value = columnList\n }\n }\n\n const getFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (!lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline'])) {\n try {\n if (source === 'EDV_DATA_SET') {\n await getEdvFieldData()\n } else {\n const res = await request.post(`${INDICATOR_URL}/diagram/dimFields`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n unref(graphicConfig).selectFieldOptions = data || []\n fieldOptions.value = data\n }\n }\n } catch (e) {\n console.error(e)\n }\n }\n }\n const onFieldChange = (value: any, type: string) => {\n const formFields = unref(graphicConfig)[props.type] || {}\n formFields[type] = value\n updateGraphicConfig({\n [props.type]: formFields\n })\n }\n const dimensionType = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const dataViewMap = ref({})\n const dataViewColumns = ref([])\n const onVisibleChange = async (visible: boolean, cardItem: any) => {\n const { name: itemName } = cardItem\n if (!dimensionType.includes(props.type) && visible && hasOwn(cardItem, 'indexCode')) {\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n dataSourceId: '',\n indexGuid: cardItem.id,\n indexCode: cardItem.indexCode,\n pageId: (window as any)?.config?.pageId\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data } = res.data\n if (success && data) {\n dataViewColumns.value = data?.dataViewColumns || []\n dataViewMap.value[itemName] = {\n name: data.name,\n code: data.indexCode\n }\n }\n }\n }\n const onClickSetting = (cardItem: any) => {\n currentCardItem.value = cardItem\n }\n // 复制指标名\n const copyDataViewName = (text: string) => {\n const input = document.createElement('input')\n document.body.appendChild(input)\n input.setAttribute('value', text)\n input.select()\n document.execCommand('copy')\n document.body.removeChild(input)\n message.success('复制成功')\n }\n\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n // 是否需要显示展示名称的配置\n const isShowConfigName = computed(() => {\n if (props.type === 'indicators' && unref(selectedComponent).type === 'ecanTable') {\n return true\n } else {\n return false\n }\n })\n // 是否显示关联控件排序\n const isShowSortByCpnt = computed(() => {\n if (['indicators', 'classificationList', 'leftAxisList', 'rightAxisList'].includes(props.type)) {\n return true\n } else {\n return false\n }\n })\n\n const isIndexSet = computed(() => lowerCaseIncludes(unref(selectedComponent)?.type, ['table']) && unref(graphicConfig)?.isIndexSet)\n\n // 是否显示添加计算指标按钮\n const isShowCalcBtn = computed(() => {\n return !dimensionType.includes(props.type) && !unref(dataSelectIndicators) && (!unref(isIndexSet) || props.type !== 'indicators')\n })\n\n onMounted(() => {\n if (props.type === 'formFields') {\n if (unref(selectedComponent).type === 'ecanDataSelect') {\n fieldOptions.value = [\n {\n label: '维度编码',\n value: '_code'\n },\n {\n label: '维度值',\n value: '_value'\n }\n ]\n } else {\n getFieldData()\n }\n }\n })\n return {\n onCheckboxChange,\n onDropEnd,\n onDragItemEnd,\n onDragItemAdd,\n onDragItemSort,\n onDragItemStart,\n cardItemList,\n onDelete,\n onEdit,\n onCommitLabelChange,\n sortList,\n onSort,\n handleSortTitle,\n showCustomSortModal,\n customSortModalRef,\n currentItem,\n currentIndex,\n handleCustomSortTitle,\n handleCustomGroupTitle,\n customGroupModalRef,\n showCustomGroupModal,\n editLabelList,\n onLabelChange,\n aggregateList,\n distinctList,\n onAggregateChange,\n onDistinctChange,\n onDateFormatChange,\n onIndSortChange,\n handleAggregateTitle,\n handleDistinctTitle,\n onShowCalculationModal,\n handleFilterTitle,\n filterModalRef,\n configNameRef,\n sortByCpntRef,\n dimByCountRef,\n showFilterModal,\n calculationModalRef,\n calculationModalMode,\n formatList,\n indSortList,\n fieldOptions,\n fieldData,\n onFieldChange,\n onVisibleChange,\n onClickSetting,\n copyDataViewName,\n dataViewMap,\n isShowConfigName,\n showConfigNameModal,\n dimensionType,\n isShowSortByCpnt,\n showSortByCpntModal,\n dataSelectIndicators,\n showDimByCountModal,\n selectedComponent,\n lowerCaseIncludes,\n isShowCalcBtn,\n isIndexSet,\n indexSetList,\n compositeIndicator,\n handleIndSortTitle\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config-card {\n display: flex;\n flex-direction: column;\n height: 280px;\n}\n\n.card-item {\n background-color: rgba(161, 212, 230, 0.3);\n width: 100%;\n height: 100%;\n padding: 5px;\n margin: 3px 0;\n}\n\n.title {\n display: flex;\n justify-content: space-between;\n}\n\n.add-calculation {\n cursor: pointer;\n font-size: 13px;\n color: #3f8ce8;\n line-height: 24px;\n}\n\n.add-calculation-icon {\n color: #3f8ce8;\n margin-right: 3px;\n}\n\n.ant-checkbox + span {\n width: 100% !important;\n}\n\n.card-item-inner {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.name {\n width: 100%;\n}\n\n.placeholder {\n color: red;\n}\n\n.setting-icon {\n color: #545;\n margin-left: 5px;\n}\n\n.delete-icon {\n color: #ff0000;\n margin-left: 5px;\n}\n\n.calculation-icon {\n font-weight: bold;\n font-style: italic;\n}\n\n.menu-item {\n white-space: nowrap;\n}\n\n.chart-column {\n height: 100%;\n}\n\n.data-view-name {\n display: inline-block;\n max-width: 200px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n</style>\n\n<style lang=\"less\">\n.data-config-card {\n .ant-card-body {\n overflow-y: auto;\n }\n}\n\n.card-item {\n .ant-checkbox + span {\n width: 100%;\n }\n}\n\n.field-wrap {\n padding: 10px 0;\n .field-item {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n .item-label {\n width: 45px;\n font-size: 14px;\n text-align: right;\n }\n }\n}\n</style>\n","export const cardTypeMap = {\n classificationList: {\n title: '分类'\n },\n seriesList: {\n title: '系列'\n },\n leftAxisList: {\n title: '左值轴'\n },\n rightAxisList: {\n title: '右值轴'\n },\n indicators: {\n title: '数值'\n },\n queryColumnList: {\n title: '查询列'\n },\n rowHeaderList: {\n title: '行表头'\n },\n formFields: {\n title: '字段'\n },\n dimensionList: {\n title: '维度'\n },\n indexLibColumns: {\n title: '查询列'\n }\n}\n","<template>\n <div class=\"data-group\">\n <template v-for=\"card in cards\" :key=\"card.type\">\n <data-config-card class=\"data-config-card\" :type=\"card.type\" v-bind=\"card\" />\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { computed, defineComponent, reactive, ref, unref, inject, watch } from 'vue'\nimport DataConfigCard from './data-config-card'\nimport { cardTypeMap } from './data'\nimport { SELECTED_COMPONENT, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { hasOwn } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'DataConfigGroup',\n components: {\n DataConfigCard\n },\n setup () {\n const allMap = ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList', 'indicators', 'rowHeaderList', 'queryColumnList']\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const selectedComponentType = computed(() => unref(selectedComponent)?.type)\n const isGroupTable = computed(() => !!unref(selectedComponent)?.isGroupTable)\n const cardsMap = ref({})\n const cards = reactive<{ [key: string]: any }[]>([])\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const handleGraphicConfigMap = () => {\n const graphicConfig = cloneDeep(unref(selectedComponent)?.graphicConfig)\n const graphicConfigMap = {\n // leftAxisList + rightAxisList = indicatorList,只是 location 是 LEFT,RIGHT\n card: ['rowHeaderList', 'indicators'],\n pie: ['classificationList', 'indicators'],\n circulate: ['classificationList', 'indicators'],\n bar: ['classificationList', 'seriesList', 'leftAxisList'],\n line: ['classificationList', 'seriesList', 'leftAxisList'],\n comboGraph: ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList'],\n radar: ['classificationList', 'seriesList', 'leftAxisList'],\n table: isGroupTable.value ? ['rowHeaderList', 'indicators'] : [graphicConfig.isIndexSet ? 'indexLibColumns' : 'queryColumnList', 'indicators'],\n text: ['dimensionList', 'indicators'],\n proportion: ['indicators'],\n select: ['classificationList', 'formFields'],\n dataSelect: ['classificationList', 'indicators', 'formFields'],\n checkbox: ['classificationList', 'formFields'],\n radio: ['classificationList', 'formFields'],\n list: ['classificationList', 'indicators'],\n counter: ['indicators'],\n scatter: ['classificationList', 'indicators', 'formFields'],\n pivotTable: ['queryColumnList', 'indicators'],\n valueLine: ['classificationList', 'indicators', 'formFields'],\n indexPanel: ['indicators']\n } as { [key: string]: any }\n const startStr = 'ecan'\n let type = unref(selectedComponentType) as string\n if (type.startsWith(startStr)) {\n const startIndex = startStr.length\n type = type.slice(startIndex, startIndex + 1)?.toLowerCase() + type.slice(startIndex + 1)\n }\n const componentMapKeys = graphicConfigMap[type]\n const map = cardTypeMap as { [key: string]: any }\n const len = componentMapKeys?.length || 0\n for (let i = 0; i < len; i++) {\n const componentMapKey = (componentMapKeys[i]) as string\n // 为空直接跳过\n if (!componentMapKey) break\n cards.push({\n ...map[componentMapKey],\n type: componentMapKey\n })\n }\n\n // 用于切换graphicConfig变量后清空无效的变量,比如table切到分组表的时候,要把queryColumnList=[]\n for (const item of allMap) {\n if (hasOwn(graphicConfig, item) && !componentMapKeys.find((v: string) => v === item)) {\n graphicConfig[item] = []\n } else {\n delete graphicConfig[item]\n }\n }\n updateGraphicConfig(graphicConfig)\n }\n // xiaohua\n handleGraphicConfigMap()\n watch(() => selectedComponentType.value, () => {\n cards.length = 0\n handleGraphicConfigMap()\n })\n\n return {\n cardsMap,\n cards\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-group {\n display: flex;\n}\n\n.data-config-card {\n width: 25%;\n\n &:not(:last-child) {\n margin-right: 15px;\n }\n}\n</style>\n\n<style lang=\"less\">\n.data-group {\n .ant-card-body {\n padding: 0;\n height: calc(100% - 58px);\n }\n}\n</style>\n","<template>\n <div class=\"data-group\">\n <template v-for=\"card in cards\" :key=\"card.type\">\n <data-config-card class=\"data-config-card\" :type=\"card.type\" v-bind=\"card\" />\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { computed, defineComponent, reactive, ref, unref, inject, watch } from 'vue'\nimport DataConfigCard from './data-config-card'\nimport { cardTypeMap } from './data'\nimport { SELECTED_COMPONENT, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { hasOwn } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'DataConfigGroup',\n components: {\n DataConfigCard\n },\n setup () {\n const allMap = ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList', 'indicators', 'rowHeaderList', 'queryColumnList']\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const selectedComponentType = computed(() => unref(selectedComponent)?.type)\n const isGroupTable = computed(() => !!unref(selectedComponent)?.isGroupTable)\n const cardsMap = ref({})\n const cards = reactive<{ [key: string]: any }[]>([])\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const handleGraphicConfigMap = () => {\n const graphicConfig = cloneDeep(unref(selectedComponent)?.graphicConfig)\n const graphicConfigMap = {\n // leftAxisList + rightAxisList = indicatorList,只是 location 是 LEFT,RIGHT\n card: ['rowHeaderList', 'indicators'],\n pie: ['classificationList', 'indicators'],\n circulate: ['classificationList', 'indicators'],\n bar: ['classificationList', 'seriesList', 'leftAxisList'],\n line: ['classificationList', 'seriesList', 'leftAxisList'],\n comboGraph: ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList'],\n radar: ['classificationList', 'seriesList', 'leftAxisList'],\n table: isGroupTable.value ? ['rowHeaderList', 'indicators'] : [graphicConfig.isIndexSet ? 'indexLibColumns' : 'queryColumnList', 'indicators'],\n text: ['dimensionList', 'indicators'],\n proportion: ['indicators'],\n select: ['classificationList', 'formFields'],\n dataSelect: ['classificationList', 'indicators', 'formFields'],\n checkbox: ['classificationList', 'formFields'],\n radio: ['classificationList', 'formFields'],\n list: ['classificationList', 'indicators'],\n counter: ['indicators'],\n scatter: ['classificationList', 'indicators', 'formFields'],\n pivotTable: ['queryColumnList', 'indicators'],\n valueLine: ['classificationList', 'indicators', 'formFields'],\n indexPanel: ['indicators']\n } as { [key: string]: any }\n const startStr = 'ecan'\n let type = unref(selectedComponentType) as string\n if (type.startsWith(startStr)) {\n const startIndex = startStr.length\n type = type.slice(startIndex, startIndex + 1)?.toLowerCase() + type.slice(startIndex + 1)\n }\n const componentMapKeys = graphicConfigMap[type]\n const map = cardTypeMap as { [key: string]: any }\n const len = componentMapKeys?.length || 0\n for (let i = 0; i < len; i++) {\n const componentMapKey = (componentMapKeys[i]) as string\n // 为空直接跳过\n if (!componentMapKey) break\n cards.push({\n ...map[componentMapKey],\n type: componentMapKey\n })\n }\n\n // 用于切换graphicConfig变量后清空无效的变量,比如table切到分组表的时候,要把queryColumnList=[]\n for (const item of allMap) {\n if (hasOwn(graphicConfig, item) && !componentMapKeys.find((v: string) => v === item)) {\n graphicConfig[item] = []\n } else {\n delete graphicConfig[item]\n }\n }\n updateGraphicConfig(graphicConfig)\n }\n // xiaohua\n handleGraphicConfigMap()\n watch(() => selectedComponentType.value, () => {\n cards.length = 0\n handleGraphicConfigMap()\n })\n\n return {\n cardsMap,\n cards\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-group {\n display: flex;\n}\n\n.data-config-card {\n width: 25%;\n\n &:not(:last-child) {\n margin-right: 15px;\n }\n}\n</style>\n\n<style lang=\"less\">\n.data-group {\n .ant-card-body {\n padding: 0;\n height: calc(100% - 58px);\n }\n}\n</style>\n","export interface PropsGroup {\r\n title?: string // 标题\r\n enableProps?: string // 是否能使用(禁用)\r\n showSwitch?: boolean\r\n onlyType?: string | string[],\r\n excludeType?: string | string[]\r\n props: (string | { value: string, onlyType?: string | string[], excludeType?: string | string[] })[] // 属性组\r\n}\r\n\r\nexport type PropsGroups = PropsGroup[]\r\n\r\nexport interface DetailPropsGroup {\r\n title?: string\r\n enableProps?: boolean\r\n onlyType?: string | string[]\r\n excludeType?: string | string[]\r\n showSwitch?: boolean\r\n // enablePropsName 就是 PropsGroup 的 enableProps\r\n enablePropsName?: string\r\n props: {\r\n [key: string]: any\r\n }\r\n}\r\n\r\nexport type DetailPropsGroups = DetailPropsGroup[]\r\n\r\n// 没有title属性直接展示属性\r\n// 有tilt属性才有折叠面板\r\n// 此属性控制属性配置面板的顺序\r\nexport const propsGroups: PropsGroups = [\r\n {\r\n title: '基本属性',\r\n props: [\r\n 'keyName',\r\n 'left',\r\n 'top',\r\n 'width',\r\n 'height',\r\n 'colors',\r\n 'textShadow',\r\n 'backgroundColor',\r\n 'backgroundImage',\r\n 'backgroundSize',\r\n 'theme',\r\n 'pageFontFamily',\r\n 'contextRequestUrl',\r\n 'graphicType'\r\n ]\r\n },\r\n {\r\n title: '定时跳转',\r\n props: [\r\n 'jumpType',\r\n 'jumpTime',\r\n 'jumpPage',\r\n 'jumpLink'\r\n ]\r\n },\r\n // {\r\n // title: '文本',\r\n // props: [\r\n // 'text',\r\n // {\r\n // value: 'format',\r\n // excludeType: ['date', 'range', 'time']\r\n // },\r\n // 'color',\r\n // 'title',\r\n // {\r\n // excludeType: ['table'],\r\n // value: 'fontSize'\r\n // },\r\n // 'fontFamily',\r\n // {\r\n // excludeType: ['table'],\r\n // value: 'fontWeight'\r\n // },\r\n // 'fontStyle',\r\n // 'lineHeight',\r\n // 'textAlign',\r\n // 'strokeTextWidth',\r\n // 'justifyContent',\r\n // 'alignItems',\r\n // 'titleFontSize',\r\n // 'titleColor',\r\n // 'decimalFormat',\r\n // 'variableColor',\r\n // 'variableFontSize',\r\n // 'variableDefaultValue',\r\n // 'strokeTextShow',\r\n // 'percentageSide',\r\n // 'increaseColor',\r\n // 'declineColor',\r\n // 'minusSignShow',\r\n // 'exceedConfig',\r\n // 'showAnimation'\r\n // ]\r\n // },\r\n {\r\n title: '弹窗',\r\n onlyType: 'modal',\r\n props: [\r\n 'position',\r\n 'fullModal',\r\n 'isShowCloseBtn',\r\n 'centered',\r\n 'destroyOnClose',\r\n 'closeBtnColor',\r\n 'borderRadius',\r\n 'borderWidth',\r\n 'borderColor',\r\n 'boxShadow'\r\n ]\r\n },\r\n {\r\n title: '图片',\r\n props: [\r\n 'borderRadius',\r\n 'isAnimation',\r\n 'animationSource',\r\n 'isHoverStyle',\r\n 'imgUrl'\r\n ]\r\n },\r\n {\r\n title: '链接',\r\n props: [\r\n 'linkPage',\r\n 'href',\r\n 'target',\r\n 'transParams'\r\n ]\r\n },\r\n {\r\n title: '系列',\r\n props: [\r\n 'seriesTypes'\r\n ]\r\n },\r\n {\r\n title: '折线图',\r\n onlyType: ['line', 'comboGraph'],\r\n props: [\r\n 'areaStyleOpacity',\r\n 'areaGradientShow',\r\n 'areaGradientColor',\r\n 'smooth',\r\n 'lineStyleWidth',\r\n 'symbolSize',\r\n 'shadowColor',\r\n 'shadowBlur',\r\n 'shadowOffsetX',\r\n 'shadowOffsetY'\r\n ]\r\n },\r\n {\r\n title: '散点图',\r\n onlyType: ['scatter'],\r\n props: [\r\n 'symbolSize',\r\n 'symbolColor'\r\n ]\r\n },\r\n {\r\n title: '雷达图',\r\n onlyType: ['radar'],\r\n props: [\r\n 'areaStyleOpacity',\r\n 'lineStyleWidth',\r\n 'symbolSize',\r\n 'labelShow',\r\n 'axisNameColor'\r\n ]\r\n },\r\n {\r\n title: '单选框',\r\n onlyType: ['radio'],\r\n props: [\r\n 'value',\r\n 'optionType',\r\n 'tabFontSize',\r\n 'tabHorizontalPadding',\r\n 'tabBarGutter',\r\n 'tabFlexDirection',\r\n 'tabTextAlign',\r\n 'tabColor',\r\n 'activeTabColor',\r\n 'tabBackgroundImage',\r\n 'activeTabBackgroundImage'\r\n ]\r\n },\r\n {\r\n title: '柱状图',\r\n onlyType: ['bar', 'comboGraph'],\r\n props: [\r\n 'barWidth',\r\n 'barBorderRadius',\r\n 'isUseHorizontalAxis',\r\n 'axisInverse',\r\n 'isStack',\r\n 'stackColumns',\r\n 'labelShow',\r\n 'showBarBackground'\r\n ]\r\n },\r\n {\r\n title: '饼图',\r\n onlyType: 'pie',\r\n props: [\r\n 'centerTop',\r\n 'centerLeft',\r\n 'innerRadius',\r\n 'outerRadius',\r\n 'roseType',\r\n 'minAngle'\r\n ]\r\n },\r\n {\r\n title: '布局',\r\n props: [\r\n 'gridTop',\r\n 'gridBottom',\r\n 'gridLeft',\r\n 'gridRight',\r\n 'gridContainLabel'\r\n ]\r\n },\r\n {\r\n title: '标签边距',\r\n props: [\r\n 'gridTopPx',\r\n 'gridBottomPx',\r\n 'gridLeftPx',\r\n 'gridRightPx'\r\n ]\r\n },\r\n {\r\n title: '标题',\r\n onlyType: ['bar', 'combo-graph', 'line', 'pie', 'radar', 'scatter'],\r\n props: [\r\n 'titleText',\r\n 'titleFontSize',\r\n 'titleColor',\r\n 'fontWeight',\r\n 'textAlign'\r\n ]\r\n },\r\n {\r\n title: 'x轴',\r\n props: [\r\n 'xAxisLabelColor',\r\n 'xAxisLineStyleColor',\r\n 'xAxisLabelWidth',\r\n 'xAxisLabelOverflow',\r\n 'xAxisLabelRotate',\r\n 'xAxisTickShow',\r\n 'xAxisSplitLineShow',\r\n 'xAxisSplitLineType',\r\n 'xAxisSplitAreaShow',\r\n 'xAxisLineShow',\r\n 'isBoundaryGap',\r\n 'xAxisSplitLineInterval',\r\n 'xAxisSplitLineStyleColor',\r\n 'xAxisLabelFormatter',\r\n 'xAxisInverse',\r\n 'xAxisMinInterval',\r\n 'xAxisLabelInterval',\r\n 'xAxisLabelFontSize',\r\n 'xAxisName',\r\n 'xAxisMaxValue',\r\n 'showXAxisLineArrow',\r\n 'xAxisLineInverse'\r\n ]\r\n },\r\n {\r\n title: 'y轴',\r\n props: [\r\n 'yAxisLabelColor',\r\n 'yAxisLineStyleColor',\r\n 'yAxisLineAlwaysDisplay',\r\n 'yAxisLabelWidth',\r\n 'yAxisLabelOverflow',\r\n 'yAxisLabelRotate',\r\n 'yAxisTickShow',\r\n 'yAxisSplitLineShow',\r\n\r\n 'yAxisSplitLineType',\r\n 'yAxisLeftSplitLineShow',\r\n 'yAxisLeftSplitLineType',\r\n 'yAxisRightSplitLineShow',\r\n 'yAxisRightSplitLineType',\r\n 'yAxisSplitAreaShow',\r\n 'yAxisLabelShow',\r\n 'yAxisSplitLineStyleColor',\r\n 'yAxisLabelFormatter',\r\n 'yAxisInverse',\r\n 'yAxisMinInterval',\r\n 'yAxis',\r\n 'yAxisLabelFontSize',\r\n 'yAxisName',\r\n 'yAxisLeftName',\r\n 'yAxisRightName',\r\n 'yAxisMaxValue',\r\n 'showYAxisLineArrow',\r\n 'yAxisLineInverse'\r\n ]\r\n },\r\n {\r\n title: '标签',\r\n enableProps: 'labelShow',\r\n excludeType: 'map',\r\n props: [\r\n 'labelFormatter',\r\n 'labelWidth',\r\n 'labelColor',\r\n 'isUseLabelColors',\r\n 'labelFontSize',\r\n 'labelPosition',\r\n 'labelOverflow'\r\n ]\r\n },\r\n {\r\n title: '标签引导线',\r\n enableProps: 'labelLineShow',\r\n props: [\r\n 'labelLineLength',\r\n 'labelLineLength2'\r\n ]\r\n },\r\n {\r\n title: '图例',\r\n enableProps: 'legendShow',\r\n props: [\r\n 'legendFormatter',\r\n 'legendWidth',\r\n 'legendHeight',\r\n 'legendTextWidth',\r\n 'legendTextStyleColor',\r\n 'legendFontSize',\r\n 'legendTop',\r\n 'legendLeft',\r\n 'legendOrient',\r\n 'legendType',\r\n 'legendItemGap',\r\n 'legendItemWidth',\r\n 'legendItemHeight',\r\n 'legendScroll'\r\n ]\r\n },\r\n {\r\n title: '提示框',\r\n enableProps: 'tooltipShow',\r\n props: [\r\n 'tooltipTrigger',\r\n 'tooltipFormatter',\r\n 'tooltipTextStyleColor',\r\n 'tooltipBackgroundColor',\r\n 'tooltipRequestData',\r\n 'tooltipPosition'\r\n ]\r\n },\r\n // {\r\n // title: '工具栏',\r\n // enableProps: 'toolboxShow',\r\n // props: [\r\n // 'toolboxOrient',\r\n // 'toolboxItemSize',\r\n // 'toolboxItemGap',\r\n // 'toolboxLeft',\r\n // 'toolboxTop',\r\n // 'toolboxIconStyleBorderColor',\r\n // 'toolboxLocation',\r\n // 'toolboxDownloadShow',\r\n // 'toolboxDataZoomShow',\r\n // 'toolboxInfoShow',\r\n // 'toolboxDownloadUrl',\r\n // 'toolboxInfoText'\r\n // ]\r\n // },\r\n {\r\n title: '渐变',\r\n enableProps: 'gradientShow',\r\n showSwitch: true,\r\n onlyType: ['bar', 'proportion', 'border', 'comboGraph', 'text', 'radar'],\r\n props: [\r\n 'isTransparent',\r\n 'gradientColor',\r\n 'gradientColors',\r\n 'gradientOffset',\r\n 'gradientAngle'\r\n ]\r\n },\r\n {\r\n title: '图表标线',\r\n enableProps: 'isShowMarkLine',\r\n showSwitch: true,\r\n onlyType: ['line', 'bar', 'comboGraph', 'scatter'],\r\n props: [\r\n 'markLineType'\r\n ]\r\n },\r\n {\r\n title: '图表标线',\r\n onlyType: ['scatter'],\r\n props: [\r\n 'xAxisMarkLineValue',\r\n 'yAxisMarkLineValue'\r\n ]\r\n },\r\n {\r\n title: '图表标域',\r\n onlyType: ['scatter'],\r\n props: [\r\n 'axisMarkArea'\r\n ]\r\n },\r\n {\r\n title: '默认范围值',\r\n enableProps: 'defaultRangeValue',\r\n showSwitch: true,\r\n onlyType: ['bar', 'comboGraph'],\r\n props: [\r\n 'startValue',\r\n 'endValue'\r\n ]\r\n },\r\n {\r\n title: '单位',\r\n enableProps: 'unitShow',\r\n onlyType: ['text'],\r\n props: [\r\n 'unitText',\r\n 'unitFontSize',\r\n 'unitFontWeight',\r\n 'unitColor',\r\n 'unitTop',\r\n 'unitLeft'\r\n ]\r\n },\r\n {\r\n title: '目标值',\r\n enableProps: 'targetShow',\r\n onlyType: ['text'],\r\n props: [\r\n 'targetRule',\r\n 'targetValue',\r\n 'notExpectColor'\r\n ]\r\n },\r\n {\r\n title: '时间',\r\n onlyType: ['date', 'time', 'range'],\r\n props: [\r\n 'picker',\r\n 'optionFontSize',\r\n 'format',\r\n 'show',\r\n 'limitInterval',\r\n 'startTime',\r\n 'endTime',\r\n 'value',\r\n 'showTime',\r\n 'useCurrentTime',\r\n 'isAllowSpanYear',\r\n 'interval',\r\n 'intervalUnit',\r\n 'updateInterval',\r\n 'operate',\r\n 'limitStartTime',\r\n 'limitEndTime'\r\n ]\r\n },\r\n {\r\n title: '选择器',\r\n onlyType: 'select',\r\n props: [\r\n 'value',\r\n 'mode',\r\n 'multiple',\r\n 'treeCheckable',\r\n 'maxTagCount',\r\n 'autoClearSearchValue',\r\n 'isAllowClear',\r\n 'placeholder',\r\n // 'selectFirstOption',\r\n 'valueType',\r\n 'optionFontSize'\r\n ]\r\n },\r\n {\r\n title: '表格',\r\n onlyType: 'table',\r\n props: [\r\n 'size',\r\n 'allOverflow',\r\n 'hoverRow',\r\n 'hoverColor',\r\n 'boderList',\r\n 'columnDropEnable',\r\n 'showTotalBool',\r\n 'totalName',\r\n 'expandAll'\r\n ]\r\n },\r\n {\r\n title: '列表',\r\n onlyType: 'list',\r\n props: [\r\n 'columns',\r\n 'sliceCount',\r\n // 'columnCount',\r\n 'itemWidth',\r\n 'itemHeight',\r\n 'itemColSpan',\r\n 'itemPadding',\r\n 'itemRowSpan',\r\n // 'useRanking',\r\n 'useTitle',\r\n 'isAutoScroll',\r\n 'scrollSpeed'\r\n ]\r\n },\r\n {\r\n title: '小计',\r\n onlyType: 'table',\r\n props: [\r\n 'subTotalName',\r\n 'subTotalColumn'\r\n ]\r\n },\r\n {\r\n title: '序号列',\r\n onlyType: ['table', 'list'],\r\n enableProps: 'isUseSeq',\r\n props: [\r\n 'seqWidth',\r\n 'seqName',\r\n 'seqIcon',\r\n 'seqFontSize',\r\n 'seqIndexFormatter'\r\n ]\r\n },\r\n {\r\n title: '序号图标',\r\n onlyType: ['list'],\r\n enableProps: 'seqIcon',\r\n props: [\r\n 'seqIconConfig',\r\n 'seqIconWidth',\r\n 'seqIconHeight',\r\n 'seqIconOffsetX',\r\n 'seqIconOffsetY'\r\n ]\r\n },\r\n {\r\n title: '操作列',\r\n onlyType: 'table',\r\n enableProps: 'isUseAction',\r\n props: [\r\n 'actionList',\r\n 'actionColumnWidth'\r\n ]\r\n },\r\n {\r\n title: '分页',\r\n enableProps: 'paginationShow',\r\n props: [\r\n 'paginationPageSize',\r\n 'simple',\r\n 'pageSizeShow',\r\n 'showQuickJumper',\r\n 'paginationPosition',\r\n 'isPageBottom',\r\n 'isShowTotal',\r\n 'paginationColor',\r\n 'paginationBgColor',\r\n 'activePaginationColor',\r\n 'activePaginationBgColor'\r\n ]\r\n },\r\n {\r\n title: '循环列表',\r\n onlyType: 'circulate',\r\n props: [\r\n 'colNum',\r\n 'unitInterval',\r\n 'isAutoScroll',\r\n 'scrollSpeed',\r\n 'scrollDirection',\r\n 'keyFieldMap'\r\n ]\r\n },\r\n {\r\n title: '计数器',\r\n onlyType: 'counter',\r\n props: [\r\n 'digits',\r\n 'unitInterval',\r\n 'unitWidth',\r\n 'unitHeight',\r\n 'counterBackgroundImage'\r\n ]\r\n },\r\n {\r\n title: '边框',\r\n onlyType: ['border', 'circulate'],\r\n props: [\r\n 'mode',\r\n 'borderWidth',\r\n 'borderRadius',\r\n 'borderColor',\r\n 'useBorderModify',\r\n 'borderStyle',\r\n 'titleMode'\r\n ]\r\n },\r\n {\r\n title: '标签页',\r\n onlyType: 'tabs',\r\n props: [\r\n 'tabType',\r\n 'tabWidth',\r\n 'activeKey',\r\n 'tabFontSize',\r\n 'tabFontWeight',\r\n 'tabHorizontalPadding',\r\n 'tabBarGutter',\r\n 'tabOuterMargin',\r\n 'tabFlexDirection',\r\n 'tabAlignItems',\r\n 'tabJustifyContent',\r\n 'tabColor',\r\n 'activeTabColor',\r\n 'tabBackgroundImage',\r\n 'activeTabBackgroundImage',\r\n 'autoSwitch',\r\n 'autoSwitchInterval',\r\n 'hideTabs'\r\n // 'isAutoScroll',\r\n // 'scrollSpeed'\r\n ]\r\n },\r\n {\r\n title: '进度条',\r\n onlyType: 'proportion',\r\n props: [\r\n 'strokeWidth',\r\n 'strokeType',\r\n 'strokeLinecap',\r\n 'strokeColor',\r\n 'trailColor'\r\n ]\r\n },\r\n {\r\n title: '地图数据',\r\n onlyType: 'map',\r\n props: [\r\n 'mapJson',\r\n 'geoCenter'\r\n ]\r\n },\r\n {\r\n title: '地图样式',\r\n onlyType: 'map',\r\n props: [\r\n 'geoRoam',\r\n 'geoZoom',\r\n 'geoLabelColor',\r\n 'geoLabelShow',\r\n 'geoLabelFontSize',\r\n 'geoBackgroundImage',\r\n 'geoBackgroundImageRepeat',\r\n 'geoItemStyleAreaColor',\r\n 'geoItemStyleBorderColor',\r\n 'geoItemStyleBorderWidth',\r\n 'geoItemStyleShadowColor',\r\n 'geoItemStyleShadowOffsetX',\r\n 'geoItemStyleShadowOffsetY',\r\n 'geoItemStyleShadowBlur',\r\n 'symbolImage',\r\n 'symbolWidth',\r\n 'symbolHeight'\r\n ]\r\n },\r\n {\r\n title: '悬停地图样式',\r\n onlyType: 'map',\r\n props: [\r\n 'geoEmphasisDisabled',\r\n 'geoEmphasisLabelColor',\r\n 'geoEmphasisItemStyleAreaColor',\r\n 'geoEmphasisItemStyleBorderColor'\r\n ]\r\n },\r\n {\r\n title: '按钮',\r\n onlyType: 'button',\r\n props: [\r\n 'mode',\r\n 'danger',\r\n 'shape',\r\n 'tooltipTextStyleColor',\r\n 'borderColor',\r\n 'buttonBackgroundColor'\r\n ]\r\n },\r\n {\r\n title: '输入框',\r\n onlyType: 'input',\r\n props: [\r\n 'value',\r\n 'placeholder',\r\n 'optionFontSize'\r\n ]\r\n },\r\n {\r\n title: '网页',\r\n onlyType: 'iframe',\r\n props: [\r\n 'link',\r\n 'linkType'\r\n ]\r\n }\r\n]\r\n","import { VNode } from 'vue'\n\nexport interface PropToAttributeConfig {\n label: string // 标题\n component: string // 需要转化的组件,如 width 由 numberInput 控制\n style?: string // 组件样式\n valueProp?: any // 值的属性字段\n value?: string // 值\n changeValueEventName?: string // 改变值的事件\n options?: { value: any; label?: any }[] // 子组件option\n updateMode?: 'page' | 'component' // 修改页面、组件页面供属性\n props?: { [key: string]: any } // 组件的 v-bind\n events?: { [key: string]: (e: any) => void } // 组件的 v-on\n onlyType?: string | string[] // 限定数组类型 onlyType\n excludeType?: string | string[]\n layout?: 'horizontal' | 'vertical'\n show?: { [key: string]: any }[]\n effect?: any\n effectVal?: any\n}\n\ntype PropToAttributeConfigList = PropToAttributeConfig[]\n\n// 属性转换配置(表单)\nexport type PropsToAttributeConfig = {\n [key: string]: PropToAttributeConfig | PropToAttributeConfigList\n}\n\nconst fontFamilyArr = [\n { label: '思源黑体', value: '\"SansSc\"' },\n { label: '黑体', value: '\"SimHei\",\"STHeiti\"' },\n { label: '楷体', value: '\"KaiTi\",\"STKaiti\"' },\n { label: '宋体', value: '\"SimSun\",\"STSong\"' },\n { label: '仿宋', value: '\"FangSong\",\"STFangsong\"' }\n]\n// 内嵌样式 jsx 转 template\nconst fontFamilyOptions = fontFamilyArr.map((font) => {\n return {\n value: font.value,\n label: (<span style={{ fontFamily: font.value }}>{font.label}</span>) as VNode\n }\n})\n\n// 属性转表单的字典映射\nexport const mapAttributeProps: PropsToAttributeConfig = {\n keyName: {\n label: '控件别名',\n component: 'input',\n props: {\n isKeyName: true\n }\n },\n text: {\n label: '文本',\n component: 'textarea'\n },\n title: {\n label: '标题',\n component: 'input'\n },\n textShadow: {\n label: '阴影',\n component: 'input'\n },\n width: [\n {\n label: '页面宽度',\n updateMode: 'page',\n component: 'input-number',\n onlyType: 'page',\n props: {\n suffix: 'px',\n disabled: false\n }\n },\n {\n label: '弹窗宽度',\n onlyType: 'modal',\n component: 'input-number',\n props: {\n suffix: 'px',\n max: 1920,\n min: 0\n }\n },\n {\n label: '宽度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n }\n ],\n height: [\n {\n label: '页面高度',\n updateMode: 'page',\n onlyType: 'page',\n component: 'input-number',\n props: {\n suffix: 'px',\n disabled: false\n }\n },\n {\n label: '弹窗高度',\n onlyType: 'modal',\n component: 'input-number',\n props: {\n suffix: 'px',\n max: 1080,\n min: 10\n }\n },\n {\n label: '高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 1\n }\n }\n ],\n backgroundImage: [\n {\n label: '背景图',\n component: 'image-pick',\n updateMode: 'page',\n onlyType: 'page'\n },\n {\n label: '背景图',\n component: 'image-pick'\n }\n ],\n backgroundSize: [\n {\n label: '背景尺寸',\n component: 'radio-group',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n options: [\n {\n label: '覆盖',\n value: 'cover'\n },\n {\n label: '铺满',\n value: '100% 100%'\n }\n ]\n }\n }\n ],\n backgroundColor: [\n {\n label: '背景颜色',\n component: 'color-pick',\n updateMode: 'page',\n onlyType: 'page'\n },\n {\n label: '背景颜色',\n component: 'color-pick'\n }\n ],\n contextRequestUrl: {\n label: '请求地址',\n component: 'input',\n updateMode: 'page'\n },\n theme: {\n label: '主题',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: 'light'\n },\n {\n label: '暗蓝',\n value: 'darkBlue'\n }\n ]\n },\n updateMode: 'page'\n },\n pageFontFamily: {\n label: '字体',\n component: 'select',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n ...fontFamilyOptions\n ]\n }\n },\n value: [\n {\n label: '时间值',\n component: 'time-pick',\n onlyType: 'date'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'select'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'tabs'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'input'\n },\n {\n label: '默认值',\n component: 'checkbox',\n onlyType: 'checkbox'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'radio'\n }\n ],\n placeholder: [\n {\n label: '占位文字',\n component: 'input'\n }\n ],\n imgUrl: {\n label: '图片',\n component: 'image-pick',\n show: [\n {\n match: 'isAnimation',\n value: false\n }\n ]\n },\n linkUrl: {\n label: '链接地址',\n component: 'input'\n },\n linkMethod: {\n label: '打开方式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '本窗口',\n value: '_self'\n },\n {\n label: '新窗口',\n value: '_blank'\n }\n ]\n }\n },\n linkPage: {\n label: '链接项目页面',\n component: 'page-pick'\n },\n fontSize: {\n label: '字号',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n variableFontSize: {\n label: '变量字号',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n percentageSide: {\n label: '涨跌幅图标',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '左',\n value: 'left'\n },\n {\n label: '右',\n value: 'right'\n }\n ]\n }\n },\n left: {\n label: 'x轴',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n top: {\n label: 'y轴',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n textAlign: {\n label: '水平对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '左',\n value: 'left'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'right'\n }\n ]\n }\n },\n verticalAlign: {\n label: '垂直对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '上',\n value: 'top'\n },\n {\n label: '中',\n value: 'middle'\n },\n {\n label: '下',\n value: 'bottom'\n }\n ]\n }\n },\n justifyContent: {\n label: '水平对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '左',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'flex-end'\n }\n ]\n }\n },\n alignItems: {\n label: '垂直对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '上',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '下',\n value: 'flex-end'\n }\n ]\n }\n },\n fontFamily: {\n label: '字体',\n component: 'select',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n ...fontFamilyOptions\n ]\n }\n },\n tabFontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n headerFontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n fontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n fontStyle: {\n label: '字体风格',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '正常',\n value: 'normal'\n },\n {\n label: '倾斜',\n value: 'italic'\n }\n ],\n isTransformNumber: true\n }\n },\n color: {\n label: '颜色',\n component: 'color-pick'\n },\n colors: {\n label: '颜色',\n component: 'color-group-pick'\n },\n centerLeft: {\n label: '水平位置',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n centerTop: {\n label: '垂直位置',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n lineHeight: {\n label: '行高',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0,\n step: 0.1\n }\n },\n innerRadius: {\n label: '内半径',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n outerRadius: {\n label: '外半径',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n titleText: {\n label: '标题',\n component: 'input'\n },\n titleSubtext: {\n label: '副标题',\n component: 'input'\n },\n tooltipTrigger: {\n label: '触发条件',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '图形',\n value: 'item'\n },\n {\n label: '坐标轴',\n value: 'axis'\n },\n {\n label: '无',\n value: 'none'\n }\n ]\n }\n },\n tooltipTextStyleColor: {\n label: '文字颜色',\n component: 'color-pick'\n },\n tooltipFormatter: {\n label: '格式化',\n component: 'textarea'\n },\n legendTextStyleColor: {\n label: '颜色',\n component: 'color-pick'\n },\n legendTop: {\n label: '垂直位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '上',\n value: 'top'\n },\n {\n label: '中',\n value: 'middle'\n },\n {\n label: '下',\n value: 'bottom'\n }\n ]\n }\n },\n legendLeft: {\n label: '水平位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '左',\n value: 'left'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'right'\n }\n ]\n }\n },\n legendOrient: {\n label: '布局',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '垂直',\n value: 'vertical'\n },\n {\n label: '水平',\n value: 'horizontal'\n }\n ]\n }\n },\n labelFormatter: {\n label: '格式化',\n component: 'input'\n },\n labelColor: {\n label: '标签颜色',\n component: 'color-pick'\n },\n isUseLabelColors: {\n label: '系列色',\n component: 'switch'\n },\n labelFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 12,\n suffix: 'px'\n }\n },\n labelPosition: [\n {\n label: '位置',\n component: 'radio-group',\n onlyType: 'pie',\n props: {\n options: [\n {\n label: '外侧',\n value: 'outside'\n },\n {\n label: '内侧',\n value: 'inside'\n },\n {\n label: '中心',\n value: 'center'\n }\n ]\n }\n },\n {\n label: '位置',\n component: 'select',\n onlyType: ['bar', 'radar'],\n props: {\n options: [\n {\n label: '上',\n value: 'top'\n },\n {\n label: '中',\n value: 'inside'\n },\n {\n label: '下',\n value: 'bottom'\n },\n {\n label: '右',\n value: 'right'\n },\n {\n label: '左',\n value: 'left'\n }\n ]\n }\n }\n ],\n labelLineLength: {\n label: '第一段',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n labelLineLength2: {\n label: '第二段',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n symbolSize: {\n label: '标记点尺寸',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n symbolColor: {\n label: '标记点颜色',\n component: 'color-pick'\n },\n symbolWidth: {\n label: '图标宽',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n symbolHeight: {\n label: '图标高',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n smooth: {\n label: '线条光滑',\n component: 'switch'\n },\n lineStyleWidth: {\n label: '线条宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n picker: {\n label: '选择类型',\n component: 'select',\n props: {\n options: [\n {\n label: '日期',\n value: 'date'\n },\n {\n label: '年份',\n value: 'year'\n },\n {\n label: '月份',\n value: 'month'\n },\n {\n label: '星期',\n value: 'week'\n },\n {\n label: '季度',\n value: 'quarter'\n }\n ]\n }\n },\n format: [\n {\n label: '格式化',\n onlyType: 'text',\n component: 'select',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n {\n label: '百分比',\n value: 'percent'\n },\n {\n label: '涨跌幅',\n value: 'percentage'\n },\n {\n label: '金额',\n value: 'money'\n },\n {\n label: '千分位',\n value: 'thousands'\n }\n ]\n }\n },\n {\n label: '格式化',\n component: 'input',\n onlyType: ['date', 'range', 'time']\n }\n ],\n showTime: {\n label: '展示时间',\n component: 'switch'\n },\n xAxisSplitLineShow: {\n label: '分割线',\n component: 'switch'\n },\n xAxisSplitAreaShow: {\n label: '分隔区域',\n component: 'switch'\n },\n xAxisLineShow: {\n label: '显示轴线',\n component: 'switch'\n },\n isBoundaryGap: {\n label: '两边留白',\n component: 'switch'\n },\n xAxisSplitLineInterval: {\n label: '分割线间隔',\n component: 'input-number',\n props: {\n suffix: '',\n min: 0\n }\n },\n xAxisSplitLineStyleColor: {\n label: '分割线颜色',\n component: 'color-pick'\n },\n xAxisLabelColor: {\n label: '名称颜色',\n component: 'color-pick'\n },\n xAxisLineStyleColor: {\n label: '横边颜色',\n component: 'color-pick'\n },\n xAxisTickShow: {\n label: '显示刻度',\n component: 'switch'\n },\n yAxisTickShow: {\n label: '显示刻度',\n component: 'switch'\n },\n xAxisLabelFormatter: {\n label: '格式化',\n component: 'input'\n },\n yAxisSplitLineShow: {\n label: '分割线',\n component: 'switch'\n },\n yAxisLeftSplitLineShow: {\n label: '分割线-左轴',\n component: 'switch'\n },\n yAxisRightSplitLineShow: {\n label: '分割线-右轴',\n component: 'switch'\n },\n yAxisSplitLineType: {\n label: '分割线类型',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n yAxisLeftSplitLineType: {\n label: '分割线类型-左轴',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n yAxisRightSplitLineType: {\n label: '分割线类型-左轴',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n xAxisSplitLineType: {\n label: '分割线类型',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n yAxisSplitAreaShow: {\n label: '分隔区域',\n component: 'switch'\n },\n yAxisLabelShow: {\n label: '刻度标签',\n component: 'switch'\n },\n yAxisLineAlwaysDisplay: {\n label: '显示轴线',\n component: 'switch'\n },\n yAxisSplitLineStyleColor: {\n label: '分割线颜色',\n component: 'color-pick'\n },\n yAxisLabelColor: {\n label: '名称颜色',\n component: 'color-pick'\n },\n yAxisLineStyleColor: {\n label: '竖边颜色',\n component: 'color-pick'\n },\n yAxisLabelFormatter: {\n label: '格式化',\n component: 'input'\n },\n roseType: {\n label: '玫瑰图',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '不展示',\n value: ''\n },\n {\n label: '圆心角',\n value: 'area'\n },\n {\n label: '半径',\n value: 'radius'\n }\n ]\n }\n },\n fullModal: {\n label: '全屏',\n component: 'switch'\n },\n seqIconConfig: [\n {\n label: '图标索引',\n component: 'icon-config',\n layout: 'vertical',\n onlyType: 'list'\n }\n ],\n columns: [\n {\n label: '表格列',\n component: 'form-collapse',\n onlyType: 'table',\n props: {\n format: [\n {\n label: '名称',\n value: 'title',\n type: 'input'\n },\n {\n label: '索引',\n value: 'dataIndex',\n type: 'input'\n },\n {\n label: '宽度',\n value: 'width',\n type: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n {\n label: '头部对齐',\n value: 'headerCellAlign',\n type: 'select',\n defaultValue: 'center',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n {\n label: '单元格对齐',\n value: 'cellAlign',\n type: 'select',\n defaultValue: 'center',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n // {\n // label: '头部字体',\n // value: 'headerCellColor',\n // type: 'color',\n // defaultValue: ''\n // },\n // {\n // label: '单元格字体',\n // value: 'cellColor',\n // type: 'color',\n // defaultValue: ''\n // },\n {\n label: '格式化',\n value: 'format',\n type: 'select',\n defaultValue: '',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n {\n label: '金额',\n value: 'money'\n },\n {\n label: '百分比',\n value: 'percentage'\n },\n {\n label: '布尔值',\n value: 'boolean'\n },\n {\n label: '对比',\n value: 'contrast'\n },\n {\n label: '进度条',\n value: 'progress'\n },\n {\n label: '保留小数',\n value: 'decimals'\n },\n {\n label: '自定义',\n value: 'custom'\n }\n ]\n }\n },\n {\n label: '保留位数',\n value: 'retentiondigit',\n type: 'input-number',\n show: {\n match: 'format',\n value: 'decimals'\n },\n props: {\n min: 0\n }\n },\n {\n label: '自定义格式化',\n value: 'customFormatter',\n type: 'input',\n defaultValue: '{value}',\n show: {\n match: 'format',\n value: ['custom', 'contrast']\n }\n },\n {\n label: '涨幅颜色',\n value: 'increaseColor',\n type: 'color',\n defaultValue: '#ff512e',\n show: {\n match: 'format',\n value: 'contrast'\n }\n },\n {\n label: '跌幅颜色',\n value: 'declineColor',\n type: 'color',\n defaultValue: '#39cf93',\n show: {\n match: 'format',\n value: 'contrast'\n }\n },\n {\n label: '进度条颜色',\n value: 'progressColor',\n type: 'color',\n defaultValue: '#1890ff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条文字颜色',\n value: 'progressTextColor',\n type: 'color',\n defaultValue: '#333',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条完成文字颜色',\n value: 'progressFinishedTextColor',\n type: 'color',\n defaultValue: '#fff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条文字保留小数位',\n value: 'progressTextDecimalPlaces',\n type: 'input-number',\n defaultValue: '2',\n props: {\n min: 0\n },\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条线宽度',\n value: 'progressWidth',\n type: 'input-number',\n defaultValue: '18',\n props: {\n suffix: 'px',\n min: 0\n },\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '默认值',\n value: 'defaultVal',\n type: 'input',\n defaultValue: ''\n },\n {\n label: '内容超出时',\n value: 'overflow',\n type: 'select',\n defaultValue: 'wrap',\n props: {\n options: [\n {\n label: '换行',\n value: 'wrap'\n },\n {\n label: '省略号',\n value: 'ellipsis'\n }\n ]\n }\n },\n {\n label: '排序',\n value: 'sorter',\n type: 'switch',\n typeValue: 'checked'\n },\n {\n label: '小计',\n value: 'isCalcTotal',\n type: 'switch',\n typeValue: 'checked'\n },\n {\n label: '过滤',\n value: 'tableFilter',\n type: 'switch',\n typeValue: 'checked'\n },\n {\n label: '隐藏',\n value: 'isHidden',\n type: 'switch',\n typeValue: 'checked'\n }\n ]\n }\n },\n {\n label: '列索引',\n component: 'form-group',\n layout: 'vertical',\n onlyType: 'list',\n props: {\n format: [\n {\n label: '索引',\n value: 'key',\n type: 'input'\n },\n {\n label: '标题',\n value: 'title',\n type: 'input'\n },\n {\n label: '宽度',\n value: 'width',\n type: 'input-number',\n props: {\n suffix: '%',\n min: 1\n }\n },\n {\n label: '对齐',\n value: 'align',\n type: 'select',\n defaultValue: 'left',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n {\n label: '内容对齐',\n value: 'cellAlign',\n type: 'select',\n defaultValue: 'left',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n {\n label: '背景颜色',\n value: 'cellColor',\n type: 'color',\n defaultValue: ''\n },\n {\n label: '字体大小',\n value: 'fontSize',\n type: 'input-number',\n props: {\n suffix: 'px',\n min: 12\n }\n },\n {\n label: '字体颜色',\n value: 'color',\n type: 'color',\n defaultValue: ''\n },\n {\n label: '字体粗细',\n value: 'fontWeight',\n type: 'select',\n defaultValue: 'normal',\n props: {\n options: [\n {\n label: '较细',\n value: 'lighter'\n },\n {\n label: '正常',\n value: 'normal'\n },\n {\n label: '较粗',\n value: 'bold'\n }\n ]\n }\n },\n {\n label: '标题字体颜色',\n value: 'titleColor',\n type: 'color',\n defaultValue: ''\n },\n {\n label: '格式化',\n value: 'format',\n type: 'select',\n defaultValue: '',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n {\n label: '金额',\n value: 'money'\n },\n {\n label: '百分比',\n value: 'percentage'\n },\n {\n label: '对比',\n value: 'contrast'\n },\n {\n label: '进度条',\n value: 'progress'\n },\n {\n label: '自定义',\n value: 'custom'\n }\n ]\n }\n },\n {\n label: '进度条颜色',\n value: 'progressColor',\n type: 'color',\n defaultValue: '#1890ff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条渐变色',\n value: 'progressGradientColor',\n type: 'color',\n defaultValue: '#1890ff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条底色',\n value: 'progressBaseColor',\n type: 'color',\n defaultValue: '',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条线宽度',\n value: 'progressWidth',\n type: 'input-number',\n defaultValue: '14',\n props: {\n suffix: 'px',\n min: 0\n },\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '自定义格式化',\n value: 'customFormatter',\n type: 'input',\n defaultValue: '{value}',\n show: {\n match: 'format',\n value: ['custom']\n }\n }\n ]\n }\n }\n ],\n bordered: {\n label: '边框',\n component: 'switch'\n },\n size: [\n {\n label: '尺寸',\n onlyType: 'table',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '中等',\n value: 'middle'\n },\n {\n label: '小号',\n value: 'small'\n }\n ]\n }\n }\n ],\n allOverflow: {\n label: '表内容超出',\n onlyType: 'table',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '换行',\n value: 'false'\n },\n {\n label: '省略号',\n value: 'ellipsis'\n },\n {\n label: '省略号+title显示',\n value: 'title'\n },\n {\n label: '省略号+tooltip显示',\n value: 'tooltip'\n }\n ]\n }\n },\n hoverRow: {\n onlyType: 'table',\n label: '点击行高亮',\n component: 'switch'\n },\n hoverColor: {\n onlyType: 'table',\n label: 'hover行颜色',\n component: 'color-pick'\n },\n boderList: {\n label: '边框不显示',\n component: 'select',\n onlyType: 'table',\n props: {\n mode: 'multiple',\n options: [\n {\n label: '表格上边框',\n value: 'top'\n },\n {\n label: '表格下边框',\n value: 'bottom'\n },\n {\n label: '表格左边框',\n value: 'left'\n },\n {\n label: '表格右边框',\n value: 'right'\n },\n {\n label: '表格内容边框',\n value: 'middle'\n },\n {\n label: '列按钮边框',\n value: 'button'\n }\n ]\n }\n },\n columnDropEnable: {\n onlyType: 'table',\n label: '列拖拽',\n component: 'switch'\n },\n showTotalBool: {\n onlyType: 'table',\n label: '显示汇总行',\n component: 'switch'\n },\n totalName: {\n onlyType: 'table',\n label: '汇总行名',\n component: 'input'\n },\n expandAll: {\n onlyType: 'table',\n label: '展开所有节点',\n component: 'switch'\n },\n isUseSeq: {\n label: '使用序列',\n component: 'switch'\n },\n centered: {\n label: '居中',\n component: 'switch'\n },\n columnsFixedNum: {\n label: '左固定列数',\n component: 'input-number',\n props: {\n min: 0,\n step: 1\n }\n },\n scrollX: {\n label: '滚动宽度',\n component: 'input-number',\n props: {\n min: 0,\n step: 1\n }\n },\n variableColor: {\n label: '变量颜色',\n component: 'color-pick'\n },\n mode: [\n {\n label: '类型',\n component: 'select',\n onlyType: 'border',\n props: {\n options: [\n // { label: '默认', value: 'only-border' },\n {\n label: '无标题',\n value: 'no-title'\n },\n {\n label: '上标题',\n value: 'top-title'\n },\n {\n label: '左标题',\n value: 'left-title'\n }\n ]\n }\n },\n {\n label: '类型',\n component: 'radio-group',\n onlyType: 'tabs',\n props: {\n options: [\n {\n label: '线条',\n value: 'line'\n },\n {\n label: '卡片',\n value: 'card'\n }\n ]\n }\n },\n {\n label: '类型',\n component: 'select',\n onlyType: 'button',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '主要',\n value: 'primary'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '链接',\n value: 'link'\n },\n {\n label: '文本',\n value: 'text'\n }\n ]\n }\n },\n {\n label: '模式',\n onlyType: 'select',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '单选',\n value: ''\n },\n {\n label: '多选',\n value: 'multiple'\n }\n ]\n }\n }\n ],\n tabColor: {\n label: '字体颜色',\n component: 'color-pick'\n },\n activeTabColor: {\n label: '激活颜色',\n component: 'color-pick'\n },\n tabBackgroundImage: {\n label: '背景图',\n component: 'image-pick'\n },\n activeTabBackgroundImage: {\n label: '激活背景图',\n component: 'image-pick'\n },\n tabBarGutter: {\n label: '标签间隔',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n tabFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12\n }\n },\n simple: {\n label: '简单分页',\n component: 'switch'\n },\n pageSizeShow: {\n label: '每页条数',\n component: 'switch'\n },\n sliceCount: {\n label: '截取条数',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n useRanking: {\n label: '使用排行',\n component: 'switch'\n },\n headerBackgroundColor: {\n label: '表头背景',\n component: 'color-pick'\n },\n cellBackgroundColor: {\n label: '单元格背景',\n component: 'color-pick'\n },\n borderColor: {\n label: '边框颜色',\n component: 'color-pick'\n },\n useBorderModify: {\n label: '边框(四角)',\n component: 'switch'\n },\n useTitle: {\n label: '使用标题',\n component: 'switch'\n },\n paginationPosition: {\n label: '位置',\n component: 'select',\n props: {\n options: [\n {\n label: '上左',\n value: 'topLeft'\n },\n {\n label: '上中',\n value: 'topCenter'\n },\n {\n label: '上右',\n value: 'topRight'\n },\n {\n label: '下左',\n value: 'bottomLeft'\n },\n {\n label: '下中',\n value: 'bottomCenter'\n },\n {\n label: '下右',\n value: 'bottomRight'\n }\n ]\n }\n },\n paginationPageSize: {\n label: '分页数',\n component: 'input-number'\n },\n destroyOnClose: {\n label: '关闭销毁',\n component: 'switch'\n },\n position: [\n {\n label: '位置',\n onlyType: 'modal',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '顶部',\n value: 'top'\n },\n {\n label: '居中',\n value: 'middle'\n },\n {\n label: '底部',\n value: 'bottom'\n }\n ]\n }\n }\n ],\n yAxis: {\n label: '系列',\n component: 'form-group',\n layout: 'vertical',\n props: {\n max: 2,\n format: [\n {\n label: ['左轴', '右轴'],\n type: 'input',\n value: 'axisLabelFormatter',\n props: {\n options: [\n {\n label: '柱状图',\n value: 'bar'\n },\n {\n label: '折线图',\n value: 'line'\n }\n ]\n }\n }\n ]\n }\n },\n seriesTypes: {\n label: '系列',\n component: 'form-group',\n layout: 'vertical',\n props: {\n format: [\n {\n label: '系列',\n type: 'select',\n value: 'type',\n useLabelIndex: true,\n props: {\n options: [\n {\n label: '柱状图',\n value: 'bar'\n },\n {\n label: '折线图',\n value: 'line'\n }\n ]\n }\n },\n {\n label: '对应轴',\n type: 'select',\n value: 'axisIndex',\n props: {\n options: [\n {\n label: '左轴',\n value: 0\n },\n {\n label: '右轴',\n value: 1\n }\n ]\n }\n },\n {\n label: '提示框格式化',\n type: 'input',\n value: 'tooltipFormatter'\n }\n ]\n }\n },\n startTime: {\n label: '开始时间值',\n component: 'time-pick'\n },\n endTime: {\n label: '结束时间值',\n component: 'time-pick'\n },\n limitStartTime: {\n label: '限制开始时间',\n component: 'time-pick'\n },\n limitEndTime: {\n label: '限制结束时间',\n component: 'time-pick'\n },\n strokeColor: {\n label: '完成颜色',\n component: 'color-pick'\n },\n trailColor: {\n label: '未完成颜色',\n component: 'color-pick'\n },\n strokeType: {\n label: '类型',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '环形',\n value: 'circle'\n },\n {\n label: '仪表盘',\n value: 'dashboard'\n },\n {\n label: '直线',\n value: 'line'\n }\n ]\n }\n },\n strokeLinecap: {\n label: '进度条样式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '圆形',\n value: 'round'\n },\n {\n label: '方角',\n value: 'square'\n }\n ]\n }\n },\n strokeWidth: {\n label: '进度条宽度',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n strokeTextWidth: {\n label: '文本宽度',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 20\n }\n },\n geoBackgroundImage: {\n label: '填充背景',\n component: 'image-pick'\n },\n geoItemStyleAreaColor: {\n label: '板块颜色',\n component: 'color-pick'\n },\n geoItemStyleBorderColor: {\n label: '边框颜色',\n component: 'color-pick'\n },\n geoEmphasisLabelColor: {\n label: '字体颜色',\n component: 'color-pick'\n },\n geoEmphasisItemStyleAreaColor: {\n label: '板块颜色',\n component: 'color-pick'\n },\n geoEmphasisItemStyleBorderColor: {\n label: '边框颜色',\n component: 'color-pick'\n },\n symbolImage: {\n label: '坐标点图标',\n component: 'image-pick'\n },\n mapJson: {\n label: '上传数据',\n component: 'file-pick'\n },\n barWidth: {\n label: '宽度',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0\n }\n },\n columnCount: {\n label: '并行数',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n itemHeight: {\n label: '高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n itemColSpan: {\n label: '边距',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n itemPadding: {\n label: '内填充',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n itemRowSpan: {\n label: '行距',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n geoLabelColor: {\n label: '标签颜色',\n component: 'color-pick'\n },\n geoLabelFontSize: {\n label: '标签大小',\n component: 'input-number',\n props: {\n min: 12,\n max: 100\n }\n },\n geoItemStyleShadowColor: {\n label: '阴影颜色',\n component: 'color-pick'\n },\n geoItemStyleBorderWidth: {\n label: '边框宽度',\n component: 'input-number'\n },\n geoItemStyleShadowBlur: {\n label: '阴影模糊',\n component: 'input-number'\n },\n geoItemStyleShadowOffsetX: {\n label: '阴影水平偏移',\n component: 'input-number'\n },\n geoItemStyleShadowOffsetY: {\n label: '阴影垂直偏移',\n component: 'input-number'\n },\n geoZoom: {\n label: '缩放大小',\n component: 'input-number'\n },\n geoRoam: {\n label: '手动缩放',\n component: 'switch'\n },\n geoCenter: {\n label: '中心位置',\n component: 'input'\n },\n geoBackgroundImageRepeat: {\n label: '背景图片',\n component: 'select',\n props: {\n options: [\n {\n label: '重复',\n value: 'repeat'\n },\n {\n label: '水平重复',\n value: 'repeat-x'\n },\n {\n label: '垂直重复',\n value: 'repeat-y'\n },\n {\n label: '不重复',\n value: 'no-repeat'\n }\n ]\n }\n },\n titleColor: {\n label: '字体颜色',\n component: 'color-pick'\n },\n titleFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n headerFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n geoEmphasisDisabled: {\n label: '禁用',\n component: 'switch'\n },\n gridTop: {\n label: '上侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridBottom: {\n label: '下侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridLeft: {\n label: '左侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridRight: {\n label: '右侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridContainLabel: {\n label: '包含刻度标签',\n component: 'switch'\n },\n geoLabelShow: {\n label: '展示文字',\n component: 'switch'\n },\n toolboxOrient: {\n label: '排版',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '水平',\n value: 'horizontal'\n },\n {\n label: '垂直',\n value: 'vertical'\n }\n ]\n }\n },\n toolboxItemSize: {\n label: '图标大小',\n component: 'input-number'\n },\n toolboxItemGap: {\n label: '图标间距',\n component: 'input-number'\n },\n toolboxLeft: {\n label: '水平位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n toolboxTop: {\n label: '垂直位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '顶部',\n value: 'top'\n },\n {\n label: '居中',\n value: 'middle'\n },\n {\n label: '底部',\n value: 'bottom'\n }\n ]\n }\n },\n toolboxDownloadUrl: {\n label: '下载文件地址',\n component: 'input'\n },\n toolboxInfoText: {\n label: '说明信息内容',\n component: 'input'\n },\n shape: {\n label: '形状',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '角圆',\n value: 'round'\n },\n {\n label: '圆形',\n value: 'circle'\n }\n ]\n }\n },\n danger: {\n label: '危险模式',\n component: 'switch'\n },\n href: {\n label: '链接',\n component: 'textarea',\n show: [\n {\n match: 'linkPage',\n value: ''\n }\n ]\n },\n target: {\n label: '链接方式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '当前窗口',\n value: 'self'\n },\n {\n label: '新窗口',\n value: 'blank'\n },\n {\n label: '事件',\n value: 'event'\n }\n ]\n }\n },\n transParams: {\n label: '传递参数',\n component: 'unit-config',\n layout: 'vertical',\n props: {\n indexTip: `【参数名】是跳转链接上携带参数的key值;\n 【参数值】是跳转链接上携带参数的value值。`,\n keyName: '参数名',\n fieldName: '参数值',\n layout: 'vertical'\n }\n },\n borderWidth: {\n label: '边框宽度',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n borderRadius: {\n label: '圆角',\n component: 'input'\n },\n activeKey: {\n label: '激活标签页',\n component: 'input-number'\n },\n isUseAction: {\n label: '使用操作列',\n component: 'switch'\n },\n actionColumnWidth: {\n label: '操作列宽',\n component: 'input-number'\n },\n actionList: {\n label: '操作列',\n component: 'form-group',\n layout: 'vertical',\n props: {\n format: [\n {\n label: '名称',\n value: 'title',\n type: 'input'\n },\n {\n label: '链接地址',\n value: 'href',\n type: 'input'\n },\n {\n label: '链接方式',\n value: 'target',\n type: 'select',\n props: {\n options: [\n {\n label: '本窗口',\n value: 'self'\n },\n {\n label: '新窗口',\n value: 'blank'\n },\n {\n label: '事件',\n value: 'event'\n }\n ]\n }\n },\n {\n label: '颜色',\n value: 'color',\n type: 'color'\n }\n ]\n }\n },\n barBorderRadius: {\n label: '圆角',\n component: 'input'\n },\n isUseHorizontalAxis: {\n label: '横向排列',\n component: 'switch'\n },\n axisInverse: {\n label: '倒叙排列',\n component: 'switch'\n },\n xAxisInverse: {\n label: '图形反转',\n component: 'switch'\n },\n yAxisInverse: {\n label: '图形反转',\n component: 'switch'\n },\n decimalFormat: {\n label: '保留小数',\n component: 'switch'\n },\n variableDefaultValue: {\n label: '变量默认值',\n component: 'input'\n },\n strokeTextShow: {\n label: '显示文本',\n component: 'switch'\n },\n areaStyleOpacity: {\n label: '面积透明度',\n component: 'input-number',\n props: {\n step: 0.1,\n min: 0,\n max: 1\n }\n },\n areaGradientShow: {\n label: '面积渐变',\n component: 'switch'\n },\n areaGradientColor: {\n label: '渐变颜色',\n component: 'color-pick'\n },\n tabHorizontalPadding: {\n label: '内水平边距',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n xAxisLabelWidth: {\n label: '名称宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n xAxisLabelOverflow: {\n label: '名称溢出',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '无',\n value: 'none'\n },\n {\n label: '换行',\n value: 'break'\n },\n {\n label: '省略号',\n value: 'truncate'\n }\n ]\n }\n },\n xAxisLabelRotate: {\n label: '名称旋转',\n component: 'input-number'\n },\n yAxisLabelWidth: {\n label: '名称宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n yAxisLabelOverflow: {\n label: '名称溢出',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '无',\n value: 'none'\n },\n {\n label: '换行',\n value: 'break'\n },\n {\n label: '省略号',\n value: 'truncate'\n }\n ]\n }\n },\n yAxisLabelRotate: {\n label: '名称旋转',\n component: 'input-number'\n },\n isStack: {\n label: '是否堆叠',\n component: 'switch',\n effectVal (key, value, updateOptions, graphicConfig) {\n const { leftAxisList = [] } = graphicConfig\n const stackColumns = value ? leftAxisList.map(i => i.label) : []\n updateOptions({ stackColumns })\n }\n },\n stackColumns: {\n label: '堆叠列配置',\n component: 'select',\n props: {\n mode: 'multiple',\n options: (graphicConfig) => {\n const { leftAxisList = [] } = graphicConfig\n return leftAxisList.map(i => ({ label: i.label, value: i.label }))\n }\n },\n effect: {\n hide: {\n props: [\n {\n props: 'isStack',\n value: false,\n rule: '==='\n }\n ]\n }\n }\n },\n clickHighlight: {\n label: '点击高亮',\n component: 'switch'\n },\n labelShow: {\n label: '展示标签',\n component: 'switch'\n },\n isReverse: {\n label: '是否反转',\n component: 'switch'\n },\n link: {\n label: '链接',\n component: 'textarea'\n },\n linkType: {\n onlyType: 'iframe',\n label: '链接类型',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '网页',\n value: 'web'\n },\n {\n label: '报表工程',\n value: 'erd'\n }\n ]\n }\n },\n maxTagCount: {\n label: '显示最大数',\n component: 'input-number'\n },\n tabAlignItems: {\n label: '垂直位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '上',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '下',\n value: 'flex-end'\n }\n ]\n }\n },\n tabJustifyContent: {\n label: '水平位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '左',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'flex-end'\n }\n ]\n }\n },\n tabFlexDirection: {\n label: '布局',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '水平',\n value: 'row'\n },\n {\n label: '垂直',\n value: 'column'\n }\n ]\n }\n },\n filterDropdownHeight: {\n label: '过滤面板高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n stripedShow: {\n label: '斑马线条纹',\n component: 'switch'\n },\n useCurrentTime: {\n label: '使用当前时间',\n component: 'switch'\n },\n interval: {\n label: '时间间隔',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n intervalUnit: {\n label: '时间间隔单位',\n component: 'select',\n props: {\n options: [\n {\n label: '年',\n value: 'year'\n },\n {\n label: '月',\n value: 'month'\n },\n {\n label: '周',\n value: 'week'\n },\n {\n label: '日',\n value: 'day'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '分',\n value: 'minute'\n }\n ]\n }\n },\n operate: {\n label: '操作',\n component: 'input-number',\n props: {\n min: 0,\n prefixValueKey: 'type',\n prefix: [\n {\n label: '加',\n value: 'add'\n },\n {\n label: '减',\n value: 'minus'\n }\n ],\n suffixValueKey: 'mode',\n suffix: [\n {\n label: '年',\n value: 'year'\n },\n {\n label: '月',\n value: 'month'\n },\n {\n label: '周',\n value: 'week'\n },\n {\n label: '日',\n value: 'day'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '分',\n value: 'minute'\n }\n ]\n }\n },\n updateInterval: {\n label: '更新间隔',\n component: 'input-number',\n props: {\n min: 1,\n suffixValueKey: 'mode',\n suffix: [\n {\n label: '秒',\n value: 'second'\n },\n {\n label: '分',\n value: 'minute'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '天',\n value: 'day'\n }\n ]\n }\n },\n xAxisMinInterval: {\n label: '最小间距',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n yAxisMinInterval: {\n label: '最小间距',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n minAngle: {\n label: '最小角度',\n component: 'input-number',\n props: {\n min: 0,\n max: 360\n }\n },\n autoSwitch: {\n label: '自动切换',\n component: 'switch'\n },\n autoSwitchInterval: {\n label: '切换间隔',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n xAxisLabelInterval: {\n label: '标签间隔',\n component: 'input-number',\n props: {\n min: -1\n }\n },\n isUseExport: {\n label: '导出数据',\n component: 'switch'\n },\n autoClearSearchValue: {\n label: '选中清空搜索',\n component: 'switch'\n },\n toolboxLocation: {\n label: '快速定位',\n component: 'switch'\n },\n toolboxDownloadShow: {\n label: '使用数据下载',\n component: 'switch'\n },\n toolboxDataZoomShow: {\n label: '使用放大',\n component: 'switch'\n },\n toolboxInfoShow: {\n label: '使用说明信息',\n component: 'switch'\n },\n multiple: {\n label: '多选模式',\n component: 'switch'\n },\n treeCheckable: {\n label: '复选框模式',\n component: 'switch'\n },\n selectFirstOption: {\n label: '选择首选项',\n component: 'switch'\n },\n gradientColor: {\n label: '渐变颜色',\n component: 'color-pick'\n },\n gradientOffset: {\n label: '渐变度',\n component: 'slider'\n },\n legendItemGap: {\n label: '图例项间隔',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n legendItemWidth: {\n label: '图例图形宽度',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n legendItemHeight: {\n label: '图例图形高度',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n showBarBackground: {\n label: '背景色',\n component: 'switch'\n },\n gradientColors: {\n label: '颜色',\n onlyType: 'bar',\n component: 'color-group-pick'\n },\n increaseColor: {\n label: '涨幅颜色 ',\n component: 'color-pick'\n },\n declineColor: {\n label: '跌幅颜色',\n component: 'color-pick'\n },\n legendType: {\n label: '图例类型 ',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '圆形',\n value: 'circle'\n },\n {\n label: '矩形',\n value: 'rect'\n },\n {\n label: '圆角矩形',\n value: 'roundRect'\n },\n {\n label: '三角形',\n value: 'triangle'\n },\n {\n label: '菱形',\n value: 'diamond'\n },\n {\n label: '箭头',\n value: 'arrow'\n }\n ]\n }\n },\n optionType: {\n label: '单选类型',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '框组',\n value: 'button'\n }\n ]\n }\n },\n minusSignShow: {\n label: '涨跌幅负号',\n component: 'switch'\n },\n gradientAngle: {\n label: '渐变角度',\n component: 'input-number',\n props: {\n suffix: 'deg'\n }\n },\n stripedColor: {\n label: '条纹颜色',\n component: 'color-pick'\n },\n axisNameColor: {\n label: '名称颜色',\n component: 'color-pick'\n },\n shadowColor: {\n label: '阴影颜色',\n component: 'color-pick'\n },\n shadowBlur: {\n label: '阴影模糊度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n shadowOffsetX: {\n label: '阴影偏移(X)',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n shadowOffsetY: {\n label: '阴影偏移(Y)',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n borderStyle: {\n label: '边框线类型',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n unitText: {\n label: '文本',\n component: 'input'\n },\n unitFontSize: {\n label: '字号',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n unitFontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n unitColor: {\n label: '颜色',\n component: 'color-pick'\n },\n unitTop: {\n label: '上侧距离',\n component: 'input-number',\n props: {\n suffix: '%'\n }\n },\n unitLeft: {\n label: '左侧距离',\n component: 'input-number',\n props: {\n suffix: '%'\n }\n },\n legendFormatter: {\n label: '格式化',\n component: 'textarea'\n },\n titleMode: {\n label: '标题背景',\n component: 'select',\n props: {\n options: [\n {\n label: '类型一',\n value: 'type-1'\n },\n {\n label: '类型二',\n value: 'type-2'\n }\n ]\n }\n },\n legendFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n valueType: {\n label: '传值类型',\n component: 'select',\n props: {\n options: [\n {\n label: '值',\n value: 'value'\n },\n {\n label: '名称',\n value: 'label'\n }\n ]\n }\n },\n isGroupTable: {\n label: '分组表格',\n component: 'switch'\n },\n xAxisLabelFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n yAxisLabelFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n tooltipRequestData: {\n label: '配置请求',\n component: 'tooltip-request'\n },\n tooltipBackgroundColor: {\n label: '背景颜色',\n component: 'color-pick'\n },\n seqWidth: {\n label: '宽度',\n component: 'input-number',\n props: {\n min: 0,\n max: 100,\n suffix: '%'\n }\n },\n isAllowClear: {\n label: '支持清除',\n component: 'switch'\n },\n isSummaryFixed: {\n label: '固定小计行',\n component: 'switch'\n },\n labelWidth: {\n label: '标签宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n labelOverflow: {\n label: '标签溢出',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '无',\n value: 'none'\n },\n {\n label: '换行',\n value: 'break'\n },\n {\n label: '省略号',\n value: 'truncate'\n }\n ]\n }\n },\n isPageBottom: {\n label: '固定在底部',\n component: 'switch'\n },\n optionFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 12,\n suffix: 'px'\n }\n },\n isShowTotal: {\n label: '显示总数',\n component: 'switch'\n },\n graphicType: {\n label: '图表类型',\n component: 'select',\n props: {\n options: [\n {\n label: '饼图',\n value: 'ecanPie'\n },\n {\n label: '折线图',\n value: 'ecanLine'\n },\n {\n label: '柱状图',\n value: 'ecanBar'\n },\n {\n label: '散点图',\n value: 'ecanScatter'\n },\n {\n label: '组合图表',\n value: 'ecanComboGraph'\n },\n {\n label: '自定义图表',\n value: 'ecanCustomGraph'\n },\n {\n label: '雷达图',\n value: 'ecanRadar'\n }\n ],\n graphic: true\n }\n },\n isAllowSpanYear: {\n label: '允许跨年',\n component: 'switch'\n },\n tabType: {\n label: '类型',\n component: 'select',\n props: {\n options: [\n {\n label: '标签',\n value: 'tabs'\n },\n {\n label: '下拉框',\n value: 'select'\n }\n ]\n }\n },\n targetRule: {\n label: '规则',\n component: 'select',\n props: {\n options: [\n {\n label: '等于',\n value: 'equal'\n },\n {\n label: '大于',\n value: 'greater'\n },\n {\n label: '大于等于',\n value: 'greater_equal'\n },\n {\n label: '小于',\n value: 'less'\n },\n {\n label: '小于等于',\n value: 'less_equal'\n }\n ]\n }\n },\n targetValue: {\n label: '值',\n component: 'input'\n },\n notExpectColor: {\n label: '颜色',\n component: 'color-pick'\n },\n buttonBackgroundColor: {\n label: '背景色',\n component: 'color-pick'\n },\n tabWidth: {\n label: '标签宽度',\n component: 'input-number',\n props: {\n min: 50,\n suffix: 'px'\n }\n },\n headerFontColor: {\n label: '文字颜色',\n component: 'color-pick'\n },\n cellFontColor: {\n label: '文字颜色',\n component: 'color-pick'\n },\n isTransparent: {\n label: '透明色',\n component: 'switch'\n },\n hideTableHeader: {\n label: '隐藏',\n component: 'switch'\n },\n closeBtnColor: {\n label: '关闭按钮颜色',\n component: 'color-pick'\n },\n paginationColor: {\n label: '页码颜色',\n component: 'color-pick'\n },\n paginationBgColor: {\n label: '页码背景色',\n component: 'color-pick'\n },\n activePaginationColor: {\n label: '当前页颜色',\n component: 'color-pick'\n },\n activePaginationBgColor: {\n label: '当前页背景色',\n component: 'color-pick'\n },\n hoverBackgroundColor: {\n label: 'hover行颜色',\n component: 'color-pick'\n },\n tooltipPosition: {\n label: '位置',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '左侧',\n value: 'left'\n },\n {\n label: '右侧',\n value: 'right'\n }\n ]\n }\n },\n tabTextAlign: {\n label: '对齐方式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '居中',\n value: 'center'\n }\n ]\n }\n },\n seqName: {\n label: '名称',\n component: 'input'\n },\n seqIcon: {\n label: '显示图标',\n component: 'switch'\n },\n isShowCloseBtn: {\n label: '显示关闭按钮',\n component: 'switch'\n },\n markLineType: {\n label: '标线类型',\n component: 'select',\n props: {\n options: [\n {\n label: '平均值',\n value: 'average'\n },\n {\n label: '最小值',\n value: 'min'\n },\n {\n label: '最大值',\n value: 'max'\n },\n {\n label: '中位数',\n value: 'median'\n }\n ]\n }\n },\n seqFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n isAutoScroll: {\n label: '循环滚动',\n component: 'switch'\n },\n scrollSpeed: {\n label: '滚动速度',\n component: 'input-number',\n props: {\n min: 0.1\n }\n },\n isHoverStyle: {\n label: '悬浮效果',\n component: 'switch',\n show: [\n {\n match: 'isAnimation',\n value: false\n }\n ]\n },\n isAnimation: {\n label: 'JSON动画',\n component: 'switch'\n },\n animationSource: {\n label: '资源文件',\n component: 'zip-pick',\n style: 'width: auto;',\n show: [\n {\n match: 'isAnimation',\n value: true\n }\n ]\n },\n subTotalColumn: {\n label: '放置列',\n component: 'select',\n props: {\n options: [],\n dynamics: true\n }\n },\n subTotalName: {\n label: '名称',\n component: 'input'\n },\n isSortByFront: {\n label: '是否前端排序',\n component: 'switch'\n },\n legendWidth: {\n label: '区域宽度',\n component: 'input-number'\n },\n legendHeight: {\n label: '区域高度',\n component: 'input-number'\n },\n legendTextWidth: {\n label: '文字宽度',\n component: 'input-number'\n },\n legendScroll: {\n label: '分页',\n component: 'switch'\n },\n boxShadow: {\n label: '阴影',\n component: 'textarea'\n },\n limitInterval: {\n label: '限制范围',\n component: 'input-number',\n props: {\n min: 0,\n suffixValueKey: 'mode',\n suffix: [\n {\n label: '年',\n value: 'year'\n },\n {\n label: '月',\n value: 'month'\n },\n {\n label: '周',\n value: 'week'\n },\n {\n label: '日',\n value: 'day'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '分',\n value: 'minute'\n }\n ]\n }\n },\n xAxisName: {\n label: '坐标轴名称',\n component: 'input'\n },\n yAxisName: {\n label: '坐标轴名称',\n component: 'input'\n },\n yAxisLeftName: {\n label: '坐标轴名称-左轴',\n component: 'input'\n },\n yAxisRightName: {\n label: '坐标轴名称-右轴',\n component: 'input'\n },\n seqIconWidth: {\n label: '图标宽度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n seqIconHeight: {\n label: '图标高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n seqIconOffsetX: {\n label: '横向偏移',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n seqIconOffsetY: {\n label: '纵向偏移',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n seqIndexFormatter: {\n label: '格式化',\n component: 'textarea'\n },\n unitInterval: {\n label: '单位间隔',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n keyFieldMap: {\n label: '数据配置',\n component: 'unit-config',\n layout: 'vertical',\n onlyType: 'circulate',\n props: {\n indexTip: `【别名】是循环列表内部要循环的组件别名;\n 【字段】是接口返回的数据字段;`,\n keyName: '别名',\n fieldName: '字段'\n }\n },\n itemWidth: {\n label: '宽度',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 1,\n max: 100\n }\n },\n startValue: {\n label: '开始值',\n component: 'textarea'\n },\n endValue: {\n label: '结束值',\n component: 'textarea'\n },\n colNum: {\n label: '列数量',\n component: 'input-number'\n },\n digits: {\n label: '位数',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n unitWidth: {\n label: '单位宽度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 10\n }\n },\n unitHeight: {\n label: '单位高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 10\n }\n },\n counterBackgroundImage: {\n label: '背景图',\n component: 'image-pick'\n },\n showEllipsis: {\n label: '超出省略号',\n component: 'switch'\n },\n exceedConfig: {\n label: '内容超出时',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '换行',\n value: 'wrap'\n },\n {\n label: '省略号',\n value: 'ellipsis'\n }\n ]\n }\n },\n xAxisMaxValue: {\n label: '最大值',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n yAxisMaxValue: {\n label: '最大值',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n scrollDirection: {\n label: '滚动方向',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '竖直',\n value: 'vertical'\n },\n {\n label: '水平',\n value: 'horizontal'\n }\n ]\n }\n },\n hideTabs: {\n label: '隐藏标签',\n component: 'switch'\n },\n jumpType: {\n label: '跳转类型',\n component: 'select',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n options: [\n {\n label: '当前项目页面',\n value: 'page'\n },\n {\n label: '外部链接页面',\n value: 'link'\n }\n ]\n }\n },\n jumpTime: {\n label: '定时',\n component: 'input-number',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n min: 0,\n suffix: [\n {\n label: '时',\n value: 'hours'\n },\n {\n label: '分',\n value: 'minute'\n },\n {\n label: '秒',\n value: 'seconds'\n }\n ]\n }\n },\n jumpPage: {\n label: '项目页面',\n component: 'page-pick',\n updateMode: 'page',\n onlyType: 'page',\n show: [\n {\n match: 'jumpType',\n value: 'page'\n }\n ]\n },\n jumpLink: {\n label: '链接',\n component: 'textarea',\n updateMode: 'page',\n onlyType: 'page',\n show: [\n {\n match: 'jumpType',\n value: 'link'\n }\n ]\n },\n gridTopPx: {\n label: '上侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n gridBottomPx: {\n label: '下侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n gridLeftPx: {\n label: '左侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n gridRightPx: {\n label: '右侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n showAnimation: {\n label: '动画',\n component: 'switch',\n style: 'width: auto;',\n props: {\n tooltip: '文本组件的值会以动画的形式发生变化(只有值为数字类型的时候才生效)'\n }\n },\n showXAxisLineArrow: {\n label: '显示箭头',\n component: 'switch'\n },\n showYAxisLineArrow: {\n label: '显示箭头',\n component: 'switch'\n },\n xAxisLineInverse: {\n label: '倒序',\n component: 'switch'\n },\n yAxisLineInverse: {\n label: '倒序',\n component: 'switch'\n },\n xAxisMarkLineValue: {\n label: 'x轴标线',\n component: 'mark-link-config',\n layout: 'vertical',\n onlyType: 'scatter',\n props: {\n indexTip: `【值】代表标线在x轴上的刻度。固定的值直接输入数字;动态的值可以输入表达式,系统提供了两个变量:max和min,\n max表示x轴刻度最大值,min表示x轴刻度最小值。使用变量的时候需要用“{}”符号包裹变量,例如添加一根位于x轴正中间的标线可以这么写:({max} + {min}) / 2`\n }\n },\n yAxisMarkLineValue: {\n label: 'y轴标线',\n component: 'mark-link-config',\n layout: 'vertical',\n onlyType: 'scatter',\n props: {\n indexTip: `【值】代表标线在y轴上的刻度。固定的值直接输入数字;动态的值可以输入表达式,系统提供了两个变量:max和min,\n max表示y轴刻度最大值,min表示y轴刻度最小值。使用变量的时候需要用“{}”符号包裹变量,例如添加一根位于y轴正中间的标线可以这么写:({max} + {min}) / 2`\n }\n },\n axisMarkArea: {\n label: '标域设置',\n component: 'mark-area-config',\n layout: 'vertical',\n onlyType: 'scatter',\n props: {\n indexTip: `每个标域需要配置两个坐标点才能确定区域,所以需要填写两个坐标的x和y的值,即(x1, y1)、(x2, y2),这两个点需要配置为区域的对角两个点才能\n 正确的标出区域。如果不设置标域颜色将会使用图表默认颜色。系统提供四个变量:xMax、xMin、yMax、yMin,xMax表示x轴刻度最大值,xMin表示x轴刻度最小值,\n yMax表示y轴刻度最大值,yMin表示y轴刻度最小值。使用变量的时候需要用“{}”符号包裹变量`\n }\n }\n}\n","<template>\n <a-input\n :value=\"value\"\n :disabled=\"disabled\"\n @change=\"onInputChange\"\n v-focus\n />\n</template>\n\n<script lang=\"ts\">\nimport { Input as AInput } from 'ant-design-vue'\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'Input',\n directives: {\n focus\n },\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n AInput\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onInputChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onInputChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-input\n :value=\"value\"\n :disabled=\"disabled\"\n @change=\"onInputChange\"\n v-focus\n />\n</template>\n\n<script lang=\"ts\">\nimport { Input as AInput } from 'ant-design-vue'\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'Input',\n directives: {\n focus\n },\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n AInput\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onInputChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onInputChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-input-number\n :value=\"inputValue\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :parser=\"parser\"\n :addon-before=\"Array.isArray(prefix) ? undefined : prefix\"\n :addon-after=\"Array.isArray(suffix) ? undefined : prefix\"\n @change=\"onInputChange\"\n @blur=\"onInputBlur\"\n >\n <template #addonBefore v-if=\"Array.isArray(prefix) && prefix.length > 0\">\n <a-select v-model:value=\"prefixValue\" @change=\"onPrefixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in prefix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n <template #addonAfter v-if=\"Array.isArray(suffix) && suffix.length > 0\">\n <a-select v-model:value=\"suffixValue\" @change=\"onSuffixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in suffix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, PropType } from 'vue'\nimport { InputNumber as AInputNumber, Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'InputNumber',\n props: {\n value: {\n type: [String, Number, Object],\n default: ''\n },\n valueKey: {\n type: String,\n default: 'value'\n },\n prefixValueKey: {\n type: String,\n default: 'prefix'\n },\n prefix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n suffixValueKey: {\n type: String,\n default: 'suffix'\n },\n suffix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n min: {\n type: Number,\n default: -Infinity\n },\n max: {\n type: Number,\n default: Infinity\n },\n step: {\n type: [String, Number],\n default: 1\n },\n useBlurEvent: {\n type: Boolean,\n default: true\n }\n },\n components: {\n AInputNumber,\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const inputValue = computed(() => {\n const value = props.value\n if (typeof value === 'string') {\n return parseFloat(value)\n } else if (typeof value === 'object' && value != null) {\n return value[props.valueKey]\n }\n return value\n })\n const getPrefixOrSuffixValue = (type: 'prefix' | 'suffix') => {\n if (props.value != null && typeof props.value === 'object') {\n return props.value[props[`${type}ValueKey`]]\n } else if (Array.isArray(props[type])) {\n return props[type][0] && (props[type][0] as any).value\n }\n return null\n }\n const prefixValue = ref(getPrefixOrSuffixValue('prefix'))\n const suffixValue = ref(getPrefixOrSuffixValue('suffix'))\n const onInputChange = (value: string) => {\n const suffix = props.suffix\n // 如果后缀不传\n if (Array.isArray(props.prefix) || Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: value,\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n } else if (suffix === '' || value == null) {\n emit('change', value)\n } else {\n emit('change', `${value}${suffix}`)\n }\n }\n\n const onPrefixChange = () => {\n if (Array.isArray(props.prefix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const onSuffixChange = () => {\n if (Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const parser = (value: string) => {\n if (typeof props.suffix === 'string') {\n return value.replace(props.suffix, '')\n } else if (\n Array.isArray(props.suffix) &&\n props.value != null &&\n typeof props.value === 'object'\n ) {\n return value.replace(props.value[props.suffixValueKey], '')\n }\n return value\n }\n const onInputBlur = () => {\n if (props.useBlurEvent) {\n emit('change', null, false)\n }\n }\n return {\n inputValue,\n onInputChange,\n parser,\n onInputBlur,\n prefixValue,\n suffixValue,\n onPrefixChange,\n onSuffixChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-input-number\n :value=\"inputValue\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :parser=\"parser\"\n :addon-before=\"Array.isArray(prefix) ? undefined : prefix\"\n :addon-after=\"Array.isArray(suffix) ? undefined : prefix\"\n @change=\"onInputChange\"\n @blur=\"onInputBlur\"\n >\n <template #addonBefore v-if=\"Array.isArray(prefix) && prefix.length > 0\">\n <a-select v-model:value=\"prefixValue\" @change=\"onPrefixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in prefix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n <template #addonAfter v-if=\"Array.isArray(suffix) && suffix.length > 0\">\n <a-select v-model:value=\"suffixValue\" @change=\"onSuffixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in suffix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, PropType } from 'vue'\nimport { InputNumber as AInputNumber, Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'InputNumber',\n props: {\n value: {\n type: [String, Number, Object],\n default: ''\n },\n valueKey: {\n type: String,\n default: 'value'\n },\n prefixValueKey: {\n type: String,\n default: 'prefix'\n },\n prefix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n suffixValueKey: {\n type: String,\n default: 'suffix'\n },\n suffix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n min: {\n type: Number,\n default: -Infinity\n },\n max: {\n type: Number,\n default: Infinity\n },\n step: {\n type: [String, Number],\n default: 1\n },\n useBlurEvent: {\n type: Boolean,\n default: true\n }\n },\n components: {\n AInputNumber,\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const inputValue = computed(() => {\n const value = props.value\n if (typeof value === 'string') {\n return parseFloat(value)\n } else if (typeof value === 'object' && value != null) {\n return value[props.valueKey]\n }\n return value\n })\n const getPrefixOrSuffixValue = (type: 'prefix' | 'suffix') => {\n if (props.value != null && typeof props.value === 'object') {\n return props.value[props[`${type}ValueKey`]]\n } else if (Array.isArray(props[type])) {\n return props[type][0] && (props[type][0] as any).value\n }\n return null\n }\n const prefixValue = ref(getPrefixOrSuffixValue('prefix'))\n const suffixValue = ref(getPrefixOrSuffixValue('suffix'))\n const onInputChange = (value: string) => {\n const suffix = props.suffix\n // 如果后缀不传\n if (Array.isArray(props.prefix) || Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: value,\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n } else if (suffix === '' || value == null) {\n emit('change', value)\n } else {\n emit('change', `${value}${suffix}`)\n }\n }\n\n const onPrefixChange = () => {\n if (Array.isArray(props.prefix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const onSuffixChange = () => {\n if (Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const parser = (value: string) => {\n if (typeof props.suffix === 'string') {\n return value.replace(props.suffix, '')\n } else if (\n Array.isArray(props.suffix) &&\n props.value != null &&\n typeof props.value === 'object'\n ) {\n return value.replace(props.value[props.suffixValueKey], '')\n }\n return value\n }\n const onInputBlur = () => {\n if (props.useBlurEvent) {\n emit('change', null, false)\n }\n }\n return {\n inputValue,\n onInputChange,\n parser,\n onInputBlur,\n prefixValue,\n suffixValue,\n onPrefixChange,\n onSuffixChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-radio-group\n :value=\"value\"\n :optionType=\"optionType\"\n @change=\"onRadioChange\"\n >\n <a-radio-button\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-radio-button>\n </a-radio-group>\n</template>\n\n<script>\nimport { defineComponent } from 'vue'\nimport { RadioGroup as ARadioGroup, RadioButton as ARadioButton } from 'ant-design-vue'\nexport default defineComponent({\n name: 'RadioGroup',\n props: {\n value: {\n type: [String, Number],\n default: ''\n },\n options: {\n type: Array,\n default: () => []\n },\n optionType: {\n type: String,\n default: 'default'\n },\n size: {\n type: String,\n default: 'default'\n }\n },\n components: {\n ARadioGroup,\n ARadioButton\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onRadioChange = (e) => {\n emit('change', e.target.value)\n }\n return {\n onRadioChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-select\n :value=\"value\"\n @change=\"onSelectChange\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-select-option>\n </a-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport { Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Select',\n props: {\n value: {\n type: [String, Number, Array<String>, Array<Number>],\n default: ''\n },\n options: {\n type: Array as PropType<any>,\n default: () => []\n },\n customOption: {\n type: Function\n }\n },\n components: {\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onSelectChange = (value: string | number) => {\n emit('change', value)\n }\n return {\n onSelectChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-select\n :value=\"value\"\n @change=\"onSelectChange\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-select-option>\n </a-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport { Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Select',\n props: {\n value: {\n type: [String, Number, Array<String>, Array<Number>],\n default: ''\n },\n options: {\n type: Array as PropType<any>,\n default: () => []\n },\n customOption: {\n type: Function\n }\n },\n components: {\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onSelectChange = (value: string | number) => {\n emit('change', value)\n }\n return {\n onSelectChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <div :style=\"{ width: `${width}px` }\">\n <a-switch :disabled=\"disabled\" :checked=\"value\" @change=\"onSwitchChange\"/>\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue'\nimport { Switch as ASwitch } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Switch',\n props: {\n value: {\n type: Boolean,\n default: false\n },\n width: {\n type: [String, Number],\n default: 150\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ASwitch\n },\n emit: ['change'],\n setup (props, { emit }) {\n const onSwitchChange = (value) => {\n emit('change', value)\n }\n return {\n onSwitchChange\n }\n }\n})\n</script>\n\n<style scoped></style>\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import{defineComponent as e,computed as t,openBlock as r,createElementBlock as n,normalizeStyle as o,withModifiers as a,createElementVNode as i,pushScopeId as l,popScopeId as c,ref as u,onMounted as s,watch as f,toDisplayString as d,withKeys as p,inject as h,unref as v,resolveComponent as m,Fragment as g,renderList as y,createBlock as b,createVNode as w,createCommentVNode as x,nextTick as S,onBeforeUnmount as k,provide as C,onUnmounted as O,toRaw as I,Teleport as A,Transition as P,withCtx as j}from\"vue\";import{createPopper as _}from\"@popperjs/core\";function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function E(e,t){if(e){if(\"string\"==typeof e)return N(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?N(e,t):void 0}}function F(e){return function(e){if(Array.isArray(e))return N(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||E(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function L(e){return L=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},L(e)}function z(e,t,r,n,o,a,i){try{var l=e[a](i),c=l.value}catch(e){return void r(e)}l.done?t(c):Promise.resolve(c).then(n,o)}function M(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){z(a,n,o,i,l,\"next\",e)}function l(e){z(a,n,o,i,l,\"throw\",e)}i(void 0)}))}}var R={exports:{}},B={exports:{}};!function(e){function t(r){return e.exports=t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(B),function(e){var t=B.exports.default;function r(){e.exports=r=function(){return o},e.exports.__esModule=!0,e.exports.default=e.exports;var n,o={},a=Object.prototype,i=a.hasOwnProperty,l=Object.defineProperty||function(e,t,r){e[t]=r.value},c=\"function\"==typeof Symbol?Symbol:{},u=c.iterator||\"@@iterator\",s=c.asyncIterator||\"@@asyncIterator\",f=c.toStringTag||\"@@toStringTag\";function d(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},\"\")}catch(n){d=function(e,t,r){return e[t]=r}}function p(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return l(a,\"_invoke\",{value:j(e,r,i)}),a}function h(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}o.wrap=p;var v=\"suspendedStart\",m=\"suspendedYield\",g=\"executing\",y=\"completed\",b={};function w(){}function x(){}function S(){}var k={};d(k,u,(function(){return this}));var C=Object.getPrototypeOf,O=C&&C(C(L([])));O&&O!==a&&i.call(O,u)&&(k=O);var I=S.prototype=w.prototype=Object.create(k);function A(e){[\"next\",\"throw\",\"return\"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function P(e,r){function n(o,a,l,c){var u=h(e[o],e,a);if(\"throw\"!==u.type){var s=u.arg,f=s.value;return f&&\"object\"==t(f)&&i.call(f,\"__await\")?r.resolve(f.__await).then((function(e){n(\"next\",e,l,c)}),(function(e){n(\"throw\",e,l,c)})):r.resolve(f).then((function(e){s.value=e,l(s)}),(function(e){return n(\"throw\",e,l,c)}))}c(u.arg)}var o;l(this,\"_invoke\",{value:function(e,t){function a(){return new r((function(r,o){n(e,t,r,o)}))}return o=o?o.then(a,a):a()}})}function j(e,t,r){var o=v;return function(a,i){if(o===g)throw new Error(\"Generator is already running\");if(o===y){if(\"throw\"===a)throw i;return{value:n,done:!0}}for(r.method=a,r.arg=i;;){var l=r.delegate;if(l){var c=_(l,r);if(c){if(c===b)continue;return c}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(o===v)throw o=y,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);o=g;var u=h(e,t,r);if(\"normal\"===u.type){if(o=r.done?y:m,u.arg===b)continue;return{value:u.arg,done:r.done}}\"throw\"===u.type&&(o=y,r.method=\"throw\",r.arg=u.arg)}}}function _(e,t){var r=t.method,o=e.iterator[r];if(o===n)return t.delegate=null,\"throw\"===r&&e.iterator.return&&(t.method=\"return\",t.arg=n,_(e,t),\"throw\"===t.method)||\"return\"!==r&&(t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a '\"+r+\"' method\")),b;var a=h(o,e.iterator,t.arg);if(\"throw\"===a.type)return t.method=\"throw\",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=n),t.delegate=null,b):i:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,b)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(N,this),this.reset(!0)}function L(e){if(e||\"\"===e){var r=e[u];if(r)return r.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function t(){for(;++o<e.length;)if(i.call(e,o))return t.value=e[o],t.done=!1,t;return t.value=n,t.done=!0,t};return a.next=a}}throw new TypeError(t(e)+\" is not iterable\")}return x.prototype=S,l(I,\"constructor\",{value:S,configurable:!0}),l(S,\"constructor\",{value:x,configurable:!0}),x.displayName=d(S,f,\"GeneratorFunction\"),o.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===x||\"GeneratorFunction\"===(t.displayName||t.name))},o.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,d(e,f,\"GeneratorFunction\")),e.prototype=Object.create(I),e},o.awrap=function(e){return{__await:e}},A(P.prototype),d(P.prototype,s,(function(){return this})),o.AsyncIterator=P,o.async=function(e,t,r,n,a){void 0===a&&(a=Promise);var i=new P(p(e,t,r,n),a);return o.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(I),d(I,f,\"Generator\"),d(I,u,(function(){return this})),d(I,\"toString\",(function(){return\"[object Generator]\"})),o.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},o.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=n,this.tryEntries.forEach(E),!e)for(var t in this)\"t\"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(r,o){return l.type=\"throw\",l.arg=e,t.next=r,o&&(t.method=\"next\",t.arg=n),!!o}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],l=a.completion;if(\"root\"===a.tryLoc)return r(\"end\");if(a.tryLoc<=this.prev){var c=i.call(a,\"catchLoc\"),u=i.call(a,\"finallyLoc\");if(c&&u){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,\"finallyLoc\")&&this.prev<n.finallyLoc){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method=\"next\",this.next=o.finallyLoc,b):this.complete(a)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),b},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),b}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;E(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,r){return this.delegate={iterator:L(e),resultName:t,nextLoc:r},\"next\"===this.method&&(this.arg=n),b}},o}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(R);var D=R.exports(),T=D;try{regeneratorRuntime=D}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=D:Function(\"r\",\"regeneratorRuntime = r\")(D)}function H(e){var t=function(e,t){if(\"object\"!==L(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||\"default\");if(\"object\"!==L(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===L(t)?t:String(t)}function G(e,t,r){return(t=H(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var $=e({name:\"Saturation\",props:{size:{type:Number,default:160},hue:{type:Number,default:0},saturation:{type:Number,default:0},value:{type:Number,default:0}},emits:[\"change\"],setup:function(e,r){var n=r.emit,o=t((function(){return{width:\"\".concat(e.size,\"px\"),height:\"\".concat(e.size,\"px\"),background:\"hsl(\".concat(e.hue,\", 100%, 50%)\")}}));return{saturationStyle:o,sliderStyle:t((function(){return{top:\"\".concat((100-e.value)/100*e.size-5,\"px\"),left:\"\".concat(e.saturation*e.size/100-5,\"px\"),width:\"\".concat(10,\"px\"),height:\"\".concat(10,\"px\")}})),onSelect:function(t){var r=t.target.getBoundingClientRect(),o=r.left,a=r.top,i=function(t){var r=t.clientX,i=t.clientY,l=r-o,c=i-a;l<0&&(l=0),c<0&&(c=0),l>e.size&&(l=e.size),c>e.size&&(c=e.size);var u=l/e.size*100,s=100-c/e.size*100;n(\"change\",u,s)};i(t),document.addEventListener(\"mousemove\",i),document.addEventListener(\"mouseup\",(function e(){document.removeEventListener(\"mousemove\",i),document.removeEventListener(\"mouseup\",e)}))}}}}),V=function(e){return l(\"data-v-24517fec\"),e=e(),c(),e},Y=V((function(){return i(\"div\",{class:\"saturation-white\"},null,-1)})),J=V((function(){return i(\"div\",{class:\"saturation-black\"},null,-1)}));function W(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&\"undefined\"!=typeof document){var n=document.head||document.getElementsByTagName(\"head\")[0],o=document.createElement(\"style\");o.type=\"text/css\",\"top\"===r&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}W(\".saturation[data-v-24517fec]{position:relative}.saturation-black[data-v-24517fec],.saturation-white[data-v-24517fec]{cursor:pointer;height:100%;left:0;position:absolute;top:0;width:100%}.saturation-white[data-v-24517fec]{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.saturation-black[data-v-24517fec]{background:linear-gradient(0deg,#000,transparent)}.slider[data-v-24517fec]{border:1px solid #fff;border-radius:50%;box-shadow:0 0 1px 1px rgba(0,0,0,.3);left:0;pointer-events:none;position:absolute;top:0;z-index:1}\"),$.render=function(e,t,l,c,u,s){return r(),n(\"div\",{class:\"saturation\",style:o(e.saturationStyle),onMousedown:t[0]||(t[0]=a((function(){return e.onSelect&&e.onSelect.apply(e,arguments)}),[\"prevent\",\"stop\"]))},[Y,J,i(\"div\",{class:\"slider\",style:o(e.sliderStyle)},null,4)],36)},$.__scopeId=\"data-v-24517fec\",$.__file=\"src/picker/Saturation.vue\";var X=e({name:\"Hue\",props:{width:{type:Number,default:15},height:{type:Number,default:160},hue:{type:Number,default:0}},emits:[\"change\"],setup:function(e,r){var n=r.emit,o=t((function(){return{top:\"\".concat((1-e.hue/360)*e.height-2,\"px\"),height:\"\".concat(4,\"px\")}})),a=u();s((function(){!function(){a.value.width=e.width,a.value.height=e.height;var t=a.value.getContext(\"2d\"),r=t.createLinearGradient(0,0,0,e.height);r.addColorStop(0,\"#FF0000\"),r.addColorStop(.17,\"#FF00FF\"),r.addColorStop(.34,\"#0000FF\"),r.addColorStop(.51,\"#00FFFF\"),r.addColorStop(.68,\"#00FF00\"),r.addColorStop(.17*5,\"#FFFF00\"),r.addColorStop(1,\"#FF0000\"),t.fillStyle=r,t.fillRect(0,0,e.width,e.height)}()}));return{canvas:a,sliderStyle:o,onSelect:function(t){var r=t.target.getBoundingClientRect().top,o=function(t){var o=t.clientY-r;o<0&&(o=0),o>e.height&&(o=e.height);var a=-100*o/e.height+100;n(\"change\",360*a/100)};o(t),document.addEventListener(\"mousemove\",o),document.addEventListener(\"mouseup\",(function e(){document.removeEventListener(\"mousemove\",o),document.removeEventListener(\"mouseup\",e)}))}}}}),q={ref:\"canvas\"};W(\".hue[data-v-78b9f4f0]{position:relative}.slider[data-v-78b9f4f0]{background:#fff;box-shadow:0 0 1px 0 rgba(0,0,0,.3);left:0;pointer-events:none;position:absolute;width:100%;z-index:1}\"),X.render=function(e,t,l,c,u,s){return r(),n(\"div\",{class:\"hue\",onMousedown:t[0]||(t[0]=a((function(){return e.onSelect&&e.onSelect.apply(e,arguments)}),[\"prevent\",\"stop\"]))},[i(\"canvas\",q,null,512),i(\"div\",{class:\"slider\",style:o(e.sliderStyle)},null,4)],32)},X.__scopeId=\"data-v-78b9f4f0\",X.__file=\"src/picker/Hue.vue\";var U=e({name:\"Alpha\",props:{width:{type:Number,default:15},height:{type:Number,default:160},color:{type:String,default:\"#000000\"},alpha:{type:Number,default:1}},setup:function(e,r){var n=r.emit,o=t((function(){return{top:\"\".concat(e.alpha*e.height-2,\"px\"),height:\"\".concat(4,\"px\")}})),a=u(),i=function(){var t=a.value.getContext(\"2d\");a.value.width=e.width,a.value.height=e.height;var r=function(e){var t=document.createElement(\"canvas\"),r=t.getContext(\"2d\"),n=2*e;return t.width=n,t.height=n,r.fillStyle=\"#ffffff\",r.fillRect(0,0,n,n),r.fillStyle=\"#ccd5db\",r.fillRect(0,0,e,e),r.fillRect(e,e,e,e),t}(5);t.fillStyle=t.createPattern(r,\"repeat\"),t.fillRect(0,0,e.width,e.height);var n=t.createLinearGradient(0,0,0,e.height);n.addColorStop(.01,\"rgba(255,255,255,0)\"),n.addColorStop(.99,e.color),t.fillStyle=n,t.fillRect(0,0,e.width,e.height)};f((function(){return e.color}),(function(){i()})),s((function(){i()}));return{canvas:a,sliderStyle:o,onSelect:function(t){var r=t.target.getBoundingClientRect().top,o=function(t){var o=t.clientY-r;o<0&&(o=0),o>e.height&&(o=e.height);var a=parseFloat((o/e.height).toFixed(2));n(\"change\",a)};o(t),document.addEventListener(\"mousemove\",o),document.addEventListener(\"mouseup\",(function e(){document.removeEventListener(\"mousemove\",o),document.removeEventListener(\"mouseup\",e)}))}}}}),K={ref:\"canvas\"};W(\".alpha[data-v-24dc9656]{position:relative}.slider[data-v-24dc9656]{background:#fff;box-shadow:0 0 1px 0 rgba(0,0,0,.3);left:0;pointer-events:none;position:absolute;width:100%;z-index:1}\"),U.render=function(e,t,l,c,u,s){return r(),n(\"div\",{class:\"alpha\",onMousedown:t[0]||(t[0]=a((function(){return e.onSelect&&e.onSelect.apply(e,arguments)}),[\"prevent\",\"stop\"]))},[i(\"canvas\",K,null,512),i(\"div\",{class:\"slider\",style:o(e.sliderStyle)},null,4)],32)},U.__scopeId=\"data-v-24dc9656\",U.__file=\"src/picker/Alpha.vue\";var Q=e({name:\"Input\",props:{label:{type:String,default:\"RGBA\"},value:{type:String,default:\"\"},width:{type:Number,default:168}},emits:[\"change\",\"focus\",\"blur\",\"enter\"],setup:function(e,r){var n=r.emit;return{onInput:function(e){var t;n(\"change\",null===(t=e.target)||void 0===t?void 0:t.value)},valueStyle:t((function(){return{minWidth:\"\".concat(e.width,\"px\"),maxWidth:\"\".concat(e.width,\"px\"),width:\"\".concat(e.width,\"px\")}})),onFocus:function(){n(\"focus\")},onBlur:function(){n(\"blur\")},onEnter:function(){n(\"enter\")}}}}),Z={class:\"input\"},ee={class:\"label\"},te=[\".value\"];function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,a,i,l=[],c=!0,u=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||E(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ne(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function oe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ne(Object(r),!0).forEach((function(t){G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ne(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}W(\".input[data-v-d52a4d02]{display:inline-block;font-size:12px}.label[data-v-d52a4d02]{align-items:center;background:#e7e8e9;color:#999;display:flex;float:left;font-weight:500;height:30px;justify-content:center;width:45px}[pick-colors-theme=dark] .label[data-v-d52a4d02]{background:#252930;color:#999}.value[data-v-d52a4d02]{background:#eceef0;border:1px solid #eceef0;box-sizing:border-box;color:#666;flex:1;height:30px;text-align:center}[pick-colors-theme=dark] .value[data-v-d52a4d02]{background:#2e333a;border:1px solid #2e333a;color:#fff}.value[data-v-d52a4d02]:focus{border:1px solid #1890ff;outline:none}\"),Q.render=function(e,t,a,l,c,u){return r(),n(\"div\",Z,[i(\"span\",ee,d(e.label),1),i(\"input\",{class:\"value\",style:o(e.valueStyle),\".value\":e.value,onFocus:t[0]||(t[0]=function(){return e.onFocus&&e.onFocus.apply(e,arguments)}),onInput:t[1]||(t[1]=function(){return e.onInput&&e.onInput.apply(e,arguments)}),onBlur:t[2]||(t[2]=function(){return e.onBlur&&e.onBlur.apply(e,arguments)}),onKeydown:t[3]||(t[3]=p((function(){return e.onEnter&&e.onEnter.apply(e,arguments)}),[\"enter\"]))},null,44,te)])},Q.__scopeId=\"data-v-d52a4d02\",Q.__file=\"src/picker/InputValue.vue\";var ae=function(e,t,r){return[e,t*r/((e=(2-t)*r)<1?e:2-e)||0,e/2]},ie={10:\"A\",11:\"B\",12:\"C\",13:\"D\",14:\"E\",15:\"F\"},le=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),r=e%16;return\"\".concat(ie[t]||t).concat(ie[r]||r)},ce=function(e){var t=e.r,r=e.g,n=e.b;return isNaN(t)||isNaN(r)||isNaN(n)?\"\":\"#\".concat(le(t)).concat(le(r)).concat(le(n))},ue=function(e,t){var r;\"string\"==typeof(r=e)&&-1!==r.indexOf(\".\")&&1===parseFloat(r)&&(e=\"100%\");var n=function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"%\")}(e);return e=Math.min(t,Math.max(0,parseFloat(\"\".concat(e)))),n&&(e=parseInt(\"\".concat(e*t),10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},se=function(e,t,r){e=6*ue(e,360),t=ue(t,100),r=ue(r,100);var n=Math.floor(e),o=e-n,a=r*(1-t),i=r*(1-o*t),l=r*(1-(1-o)*t),c=n%6,u=[r,i,a,a,l,r][c],s=[l,r,r,i,a,a][c],f=[a,a,l,r,r,i][c];return{r:Math.round(255*u),g:Math.round(255*s),b:Math.round(255*f)}},fe=function(e,t,r){var n=e.h,o=e.s,a=e.v,i=e.a;if(r)switch(t){case\"hsl\":var l=ae(n,o/100,a/100);return\"hsla(\".concat(n.toFixed(0),\", \").concat(Math.round(100*l[1]),\"%, \").concat(Math.round(100*l[2]),\"%, \").concat(i,\")\");case\"hsv\":return\"hsva(\".concat(n.toFixed(0),\", \").concat(Math.round(o),\"%, \").concat(Math.round(a),\"%, \").concat(i,\")\");case\"rgb\":var c=se(n,o,a),u=c.r,s=c.g,f=c.b;return\"rgba(\".concat(u,\", \").concat(s,\", \").concat(f,\", \").concat(i,\")\");default:return\"\".concat(ce(se(n,o,a))).concat(le(255*i))}else switch(t){case\"hsl\":var d=ae(n,o/100,a/100);return\"hsl(\".concat(n.toFixed(0),\", \").concat(Math.round(100*d[1]),\"%, \").concat(Math.round(100*d[2]),\"%)\");case\"hsv\":return\"hsv(\".concat(n.toFixed(0),\", \").concat(Math.round(o),\"%, \").concat(Math.round(a),\"%)\");case\"rgb\":var p=se(n,o,a),h=p.r,v=p.g,m=p.b;return\"rgb(\".concat(h,\", \").concat(v,\", \").concat(m,\")\");default:return ce(se(n,o,a))}},de=function(e){var t=e.r,r=e.g,n=e.b;t=ue(t,255),r=ue(r,255),n=ue(n,255);var o,a=Math.max(t,r,n),i=Math.min(t,r,n),l=a,c=a-i,u=0===a?0:c/a;if(a===i)o=0;else{switch(a){case t:o=(r-n)/c+(r<n?6:0);break;case r:o=(n-t)/c+2;break;case n:o=(t-r)/c+4}o/=6}return{h:360*o,s:100*u,v:100*l}},pe=function(e){var t=e.h,r=e.s,n=e.l;n/=100;var o=r/=100,a=Math.max(n,.01);return r*=(n*=2)<=1?n:2-n,o*=a<=1?a:2-a,{h:+t,s:100*(0===n?2*o/(a+o):2*r/(n+r)),v:100*((n+r)/2)}},he=function(e){var t=[];if(e.match(/^#([0-9a-fA-f]{3,4})$/g))for(var r=1;r<e.length;r++)t.push(parseInt(\"0x\"+e[r].repeat(2)));else if(e.match(/^#([0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/g))for(var n=1;n<e.length;n+=2)t.push(parseInt(\"0x\"+e.slice(n,n+2)));return{r:t[0],g:t[1],b:t[2],a:t[3]}},ve=function(e,t,r){if(\"string\"==typeof e&&\"\"!==e){var n=be(e,we(e),r),o=xe(n);return fe(o,t,r)}return\"\"},me=function(e){var t=re(e.match(/(\\d(\\.\\d+)?)+/g),4);return{r:t[0],g:t[1],b:t[2],a:t[3]}},ge=function(e){var t=re(e.match(/(\\d(\\.\\d+)?)+/g),4),r=t[0],n=t[1],o=t[2],a=t[3];return{h:r,s:parseFloat(n),l:parseFloat(o),a:a}},ye=function(e){var t=re(e.match(/(\\d(\\.\\d+)?)+/g),4),r=t[0],n=t[1],o=t[2],a=t[3];return{h:parseFloat(r),s:parseFloat(n),v:parseFloat(o),a:parseFloat(a)}},be=function(e,t){if(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])switch(t){case\"rgb\":var r=me(e),n=r.r,o=r.g,a=r.b,i=r.a;return oe(oe({},de({r:n,g:o,b:a})),{},{a:+i});case\"hsv\":var l=ye(e);return{h:l.h,s:l.s,v:l.v,a:l.a};case\"hsl\":var c=ge(e),u=c.h,s=c.s,f=c.l,d=c.a;return oe(oe({},pe({h:u,s:s,l:f})),{},{a:+d});default:var p=he(e),h=p.r,v=p.g,m=p.b,g=p.a;return oe(oe({},de({r:h,g:v,b:m})),{},{a:g/255})}else{switch(t){case\"rgb\":return oe(oe({},de(me(e))),{},{a:1});case\"hsv\":var y=ye(e);return{h:y.h,s:y.s,v:y.v,a:1};case\"hsl\":return oe(oe({},pe(ge(e))),{},{a:1});default:return oe(oe({},de(he(e))),{},{a:1})}}},we=function(e){return e.match(/^#/)?\"hex\":e.match(/^rgb/)?\"rgb\":e.match(/^hsl/)?\"hsl\":e.match(/^hsv/)?\"hsv\":\"hex\"},xe=function(e){var t=e.h,r=e.s,n=e.v,o=e.a;return isNaN(t)&&(t=0),isNaN(r)&&(r=0),isNaN(n)&&(n=0),isNaN(o)&&(o=1),{h:t,s:r,v:n,a:o}},Se=e({name:\"ColorItem\",props:{size:{type:[Number,String],default:20},width:{type:[Number,String]},height:{type:[Number,String]},value:{type:String,default:\"\"},border:{type:Boolean,default:!0},borderRadius:{type:Number,default:5},selected:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1}},emits:[\"select\"],setup:function(e){var r=u(),n=h(\"theme\",{theme:\"light\"}).theme,o=t((function(){return parseFloat((e.width||e.size)+\"\")})),a=t((function(){return parseFloat((e.height||e.size)+\"\")})),i=t((function(){return{width:\"\".concat(v(o),\"px\"),height:\"\".concat(v(a),\"px\"),border:e.border?\"1px solid \".concat(\"dark\"===v(n)?\"#434345\":\"#d9d9d9\"):\"\",borderRadius:\"\".concat(e.borderRadius,\"px\"),boxShadow:e.selected?\"0 0 3px 2px \".concat(\"dark\"===v(n)?\"#2681ff\":\"#1890ff\"):\"\"}})),l=function(){var t=r.value.getContext(\"2d\");r.value.width=v(o),r.value.height=v(a);var n=function(e){var t=document.createElement(\"canvas\"),r=t.getContext(\"2d\"),n=2*e;return t.width=n,t.height=n,r.fillStyle=\"#ffffff\",r.fillRect(0,0,n,n),r.fillStyle=\"#ccd5db\",r.fillRect(0,0,e,e),r.fillRect(e,e,e,e),t}(5);t.fillStyle=t.createPattern(n,\"repeat\"),t.fillRect(0,0,v(o),v(a)),t.fillStyle=e.value,t.fillRect(0,0,v(o),v(a))};return f((function(){return e.value}),(function(){l()})),s((function(){l()})),{canvas:r,colorItemStyle:i}}}),ke=[\"draggable\"];W(\".color-item[data-v-02da71fd]{display:inline-block;vertical-align:top}\"),Se.render=function(e,t,a,i,l,c){return r(),n(\"canvas\",{class:\"color-item\",style:o(e.colorItemStyle),ref:\"canvas\",draggable:e.draggable},null,12,ke)},Se.__scopeId=\"data-v-02da71fd\",Se.__file=\"src/color-item/ColorItem.vue\";var Ce=e({name:\"Colors\",components:{ColorItem:Se},props:{colors:{type:Array,default:function(){return[]}},selectedIndex:{type:Number,default:-1}},emits:[\"change\"],setup:function(e,r){var n=r.emit;return{onSelectColor:function(e,t){n(\"change\",e,t)},useColors:t((function(){return e.colors.map((function(e){return ve(e,\"hex\",!0)}))}))}}}),Oe={class:\"colors\"};function Ie(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ae(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ie(Object(r),!0).forEach((function(t){G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ie(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}W(\".colors[data-v-0f8b52a8]{align-items:center;display:flex;flex-wrap:wrap;margin-top:5px}.color-item[data-v-0f8b52a8]{margin:5px}\"),Ce.render=function(e,t,o,i,l,c){var u=m(\"color-item\");return r(),n(\"div\",Oe,[(r(!0),n(g,null,y(e.useColors,(function(t,n){return r(),b(u,{key:n,class:\"color-item\",size:16,value:t,border:!1,\"border-radius\":3,selected:e.selectedIndex===n,onClick:a((function(r){return e.onSelectColor(t,+n)}),[\"stop\",\"prevent\"])},null,8,[\"value\",\"selected\",\"onClick\"])})),128))])},Ce.__scopeId=\"data-v-0f8b52a8\",Ce.__file=\"src/picker/Colors.vue\";var Pe=e({name:\"Picker\",components:{Colors:Ce,Saturation:$,Hue:X,Alpha:U,InputValue:Q},props:{format:{type:String,default:\"hex\"},showAlpha:{type:Boolean,default:!1},value:{type:String,default:\"\"},colors:{type:Array,default:function(){return[]}},style:{type:Object,default:function(){return{}}}},emits:[\"change\",\"update:value\"],setup:function(e,r){var n=r.emit,o=t((function(){return Ae(Ae({},e.style),{},{width:e.showAlpha?\"230px\":\"205px\"})})),a=t((function(){return e.showAlpha?165:140})),i=u(),l=u(),c=u(),s=function(){var t,r=null===(t=e.value)||void 0===t?void 0:t.trim();if(null!=r&&\"\"!==r){var n=we(r);return xe(be(r,n,e.showAlpha))}return null};f((function(){return e.value}),(function(){e.value!==v(c)&&(i.value=s())}),{immediate:!0}),f(i,(function(t,r){var o=\"\";null!=t?(o=fe(Ae({},t),e.format,e.showAlpha),l.value=Ae({},t)):l.value=null,c.value=o;var a=s();JSON.stringify(t)!==JSON.stringify(a)&&JSON.stringify(t)!==JSON.stringify(r)&&n(\"change\",o)}),{immediate:!0});var d=t((function(){var e;return(null===(e=v(i))||void 0===e?void 0:e.h)||0})),p=t((function(){var e;return(null===(e=v(i))||void 0===e?void 0:e.s)||0})),h=t((function(){var e;return(null===(e=v(i))||void 0===e?void 0:e.v)||0})),m=t((function(){var e,t;return null!=(null===(e=v(i))||void 0===e?void 0:e.a)?null===(t=v(i))||void 0===t?void 0:t.a:1})),g=t((function(){return se(v(d),v(p),v(h))})),y=t((function(){return\"rgb(\".concat(v(g).r,\", \").concat(v(g).g,\", \").concat(v(g).b,\")\")})),b=t((function(){var t=e.format;if(e.showAlpha)switch(t){case\"hsv\":return\"HSVA\";case\"hsl\":return\"HSLA\";case\"rgb\":return\"RGBA\";default:return\"HEX\"}else switch(t){case\"hsv\":return\"HSV\";case\"hsl\":return\"HSL\";case\"rgb\":return\"RGB\";default:return\"HEX\"}})),w=u(-1),x=function(e,t,r){if(0!==e.length){var n=be(e,t,r),o=n.h,a=n.s,l=n.v;if(!(isNaN(o)||isNaN(a)||isNaN(l))){var c=1,u=n.a;isNaN(u)||(c=u),i.value={h:o,s:a,v:l,a:c}}}};return{h:d,s:p,v:h,a:m,rgbStr:y,onSelectSaturation:function(e,t){w.value=-1,null==v(i)?i.value={h:v(d),s:e,v:t,a:v(m)}:i.value=Ae(Ae({},v(i)),{},{s:e,v:t})},onSelectHue:function(e){w.value=-1,null==v(i)&&(i.value={h:e,s:v(p),v:v(h),a:v(m)}),i.value=Ae(Ae({},v(i)),{},{h:e})},onSelectAlpha:function(e){w.value=-1,null==v(i)?i.value={h:v(d),s:v(p),v:v(h),a:e}:i.value=Ae(Ae({},v(i)),{},{a:e})},label:b,colorValue:c,pickerStyle:o,inputWidth:a,onInputChange:function(e){w.value=-1,c.value=e},handleChange:function(){var t,r=null===(t=v(c))||void 0===t?void 0:t.trim();if(\"\"!==r){var n=e.showAlpha,o=e.format,a=function(e,t,r){if(r)switch(t){case\"rgb\":return/^[rR][gG][Bb][Aa][(]([\\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\\s]*,){3}[\\s]*(1|1.0|0|0.[0-9]|0.[0-9][0-9])[\\s]*[)]{1}$/.test(e);case\"hsv\":return/^[hH][Ss][Vv][Aa][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,){2}([\\s]*(1|1.0|0|0.[0-9]|0.[0-9][0-9])[\\s]*)[)]$/.test(e);case\"hsl\":return/^[hH][Ss][Ll][Aa][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,){2}([\\s]*(1|1.0|0|0.[0-9]|0.[0-9][0-9])[\\s]*)[)]$/.test(e);default:return/^#([0-9a-fA-f]{4}|[0-9a-fA-F]{8})$/g.test(e)}else switch(t){case\"rgb\":return/^[rR][gG][Bb][(]([\\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\\s]*,){2}[\\s]*(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)[\\s]*[)]{1}$/.test(e);case\"hsv\":return/^[hH][Ss][Vv][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*)[)]$/.test(e);case\"hsl\":return/^[hH][Ss][Ll][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*)[)]$/.test(e);default:return/^#([0-9a-fA-f]{3}|[0-9a-fA-F]{6})$/g.test(e)}}(r,o,n);a?x(r,o,n):null!=v(l)?i.value=v(l):c.value=\"\"}else i.value=null},selectColorIndex:w,onSelectColor:function(e,t){if(w.value=t,\"\"===(e=e.trim()))i.value=null;else{var r=we(e);r?x(e,r,!0):i.value=null}}}}}),je={class:\"picker-inner\"},_e={class:\"picker-header\"};W(\".picker[data-v-6ceadec6]{background:#f7f8f9;border-radius:4px;box-shadow:0 0 16px 0 rgba(0,0,0,.16)}.picker-inner[data-v-6ceadec6]{padding:10px}[pick-colors-theme=dark] .picker-inner[data-v-6ceadec6]{background:#1d2024;box-shadow:0 0 16px 0 rgba(0,0,0,.16)}.picker-header[data-v-6ceadec6]{display:flex;margin-bottom:5px}.alpha[data-v-6ceadec6],.hue[data-v-6ceadec6]{margin-left:10px}.colors[data-v-6ceadec6]{margin-top:5px}\"),Pe.render=function(e,t,a,l,c,u){var s=m(\"saturation\"),f=m(\"hue\"),d=m(\"alpha\"),p=m(\"input-value\"),h=m(\"Colors\");return r(),n(\"div\",{class:\"picker\",style:o(e.pickerStyle)},[i(\"div\",je,[i(\"div\",_e,[w(s,{class:\"saturation\",hue:e.h,saturation:e.s,value:e.v,onChange:e.onSelectSaturation},null,8,[\"hue\",\"saturation\",\"value\",\"onChange\"]),w(f,{class:\"hue\",hue:e.h,onChange:e.onSelectHue},null,8,[\"hue\",\"onChange\"]),e.showAlpha?(r(),b(d,{key:0,class:\"alpha\",alpha:e.a,color:e.rgbStr,onChange:e.onSelectAlpha},null,8,[\"alpha\",\"color\",\"onChange\"])):x(\"v-if\",!0)]),w(p,{label:e.label,value:e.colorValue,width:e.inputWidth,onChange:e.onInputChange,onBlur:e.handleChange,onEnter:e.handleChange},null,8,[\"label\",\"value\",\"width\",\"onChange\",\"onBlur\",\"onEnter\"]),e.colors.length>0?(r(),b(h,{key:0,class:\"colors\",colors:e.colors,\"selected-index\":e.selectColorIndex,onChange:e.onSelectColor},null,8,[\"colors\",\"selected-index\",\"onChange\"])):x(\"v-if\",!0)])],4)},Pe.__scopeId=\"data-v-6ceadec6\",Pe.__file=\"src/picker/Picker.vue\";var Ne=e({name:\"AddColorItem\",props:{size:{type:Number,default:20},selected:{type:Boolean,default:!1}},setup:function(e){var r=h(\"theme\",{theme:\"light\"}).theme;return{addColorItemStyle:t((function(){return{width:\"\".concat(e.size,\"px\"),height:\"\".concat(e.size,\"px\"),lineHeight:\"\".concat(e.size,\"px\"),boxShadow:e.selected?\"0 0 3px 2px \".concat(\"dark\"===v(r)?\"#2681ff\":\"#1890ff\"):\"\"}}))}}}),Ee=[function(e){return l(\"data-v-ceb1719c\"),e=e(),c(),e}((function(){return i(\"g\",{class:\"container\"},[i(\"path\",{d:\"M544 464V160h-80v304H160v80h304v304h80V544h304v-80z\"})],-1)}))];function Fe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Le(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(r),!0).forEach((function(t){G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Fe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}W(\".add-color-item[data-v-ceb1719c]{background:#fff;border:1px solid #d9d9d9;border-radius:5px;vertical-align:top}.container[data-v-ceb1719c]{pointer-events:none;transform:scale(.9);transform-origin:center}[pick-colors-theme=dark] .add-color-item[data-v-ceb1719c]{background:#141414;border:1px solid #434343}path[data-v-ceb1719c]{fill:#000}[pick-colors-theme=dark] path[data-v-ceb1719c]{fill:#fff}\"),Ne.render=function(e,t,a,i,l,c){return r(),n(\"svg\",{style:o(e.addColorItemStyle),class:\"add-color-item\",viewBox:\"0 0 1024 1024\",xmlns:\"http://www.w3.org/2000/svg\"},[].concat(Ee),4)},Ne.__scopeId=\"data-v-ceb1719c\",Ne.__file=\"src/add-color-item/AddColorItem.vue\";var ze=null,Me=e({name:\"ColorPicker\",components:{ColorItem:Se,Picker:Pe,AddColorItem:Ne},props:{value:{type:[String,Array]},theme:{type:String,default:\"light\"},size:{type:[Number,String],default:20},width:{type:[Number,String]},height:{type:[Number,String]},format:{type:String,default:\"hex\"},showPicker:{type:Boolean,default:void 0},showAlpha:{type:Boolean,default:!1},addColor:{type:Boolean,default:!1},deleteColor:{type:Boolean,default:!0},max:{type:Number,default:13},popupContainer:{type:[String,Object,Boolean]},zIndex:{type:Number,default:1e3},colors:{type:Array,default:function(){return[\"#ff4500\",\"#ff8c00\",\"#ffd700\",\"#90ee90\",\"#00ced1\",\"#1e90ff\",\"#c71585\",\"#ff4500\",\"#ff7d4d\",\"#00babd\",\"#1f93ff\",\"#fa64c3\"]}}},emits:[\"change\",\"update:value\",\"update:showPicker\",\"overflowMax\",\"closePicker\"],setup:function(e,r){var n=r.emit,o=u([]),a=t((function(){return v(o).map((function(t){return ve(t,\"hex\",e.showAlpha)}))}));f((function(){return e.value}),(function(){var t=e.value||\"\",r=Array.isArray(t)?t:[t];o.value=r.map((function(t){return ve(t,e.format,e.showAlpha)}))}),{immediate:!0});var i=u(void 0),l=t((function(){return v(o)[v(i)]})),c=u(!1);f((function(){return e.showPicker}),(function(){c.value=e.showPicker}),{immediate:!0});var d,p,h,m,g,y,b,w=u(null),x=u(null),A=(d=w,p=x,h={zIndex:e.zIndex},m=u({}),g={strategy:\"absolute\",placement:\"auto\",onFirstUpdate:function(){ze.update()},modifiers:[{name:\"offset\",options:{offset:[0,5]}},{name:\"computeStyles\",options:{gpuAcceleration:!1,adaptive:!0}},{name:\"flip\",options:{fallbackPlacements:[\"top\"],allowedAutoPlacements:[\"top\",\"bottom\"]}},{name:\"applyStyles\",enabled:!1},{name:\"updateState\",enabled:!0,phase:\"write\",requires:[\"computeStyles\"],fn:function(e){var t=e.state,r=t.styles,n=t.placement,o=r.popper;m.value=Le(Le(Le({},o),h),{},{transformOrigin:\"top\"===n?\"center bottom\":\"\"})}}]},f((function(){return[v(d),v(p)]}),(function(e,t){var r,n=re(e,2),o=n[0],a=n[1],i=re(t,2),l=i[0],c=i[1];if(o&&a&&(l!==o||c!==l)){null===(r=ze)||void 0===r||r.destroy();var u=o.$el||o,s=a.$el||a;S((function(){ze=_(u,s,g)}))}})),k((function(){var e;ze&&(null===(e=ze)||void 0===e||e.destroy(),ze=null)})),{instance:ze,style:m}),P=A.style,j=function(){null==v(w)&&(w.value=v(V)[0],i.value=0),void 0===e.showPicker?c.value=!0:n(\"update:showPicker\",!0)},N=function(){i.value=void 0,void 0===e.showPicker?c.value=!1:n(\"update:showPicker\",!1),n(\"closePicker\",I(Array.isArray(e.value)||e.addColor?v(o):v(o)[0]))},E=u(),z=function(){var e=M(T.mark((function e(t){var r,n,o,a;return T.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.target,null!=(o=null===(r=n.dataset)||void 0===r?void 0:r.index)&&\"\"!==o){e.next=4;break}return e.abrupt(\"return\");case 4:if(a=+o,v(i)!==a){e.next=7;break}return e.abrupt(\"return\");case 7:null!=v(i)&&v(i)!==a?(N(),y&&clearTimeout(y),y=setTimeout((function(){j(),clearTimeout(y)}),100)):j(),i.value=a,w.value=n;case 10:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),R=function(){var e=M(T.mark((function e(t){var r,n,o,a,i;return T.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=t.target,!(!(null!==(r=v(E))&&void 0!==r&&r.isEqualNode(a))&&(null===(n=v(E))||void 0===n?void 0:n.contains(a)))){e.next=4;break}return e.abrupt(\"return\");case 4:if(i=null===(o=v(x))||void 0===o?void 0:o.$el,!((null==i?void 0:i.contains(a))||!1)){e.next=8;break}return e.abrupt(\"return\");case 8:b&&clearTimeout(b),b=setTimeout((function(){v(c)&&N()}),0);case 10:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();f(c,(function(){v(c)&&(j(),clearTimeout(b))}));var B,D=u(e.max>v(o).length),H=t((function(){return\"string\"==typeof e.popupContainer||\"object\"===L(e.popupContainer)&&null!=e.popupContainer?e.popupContainer:\"body\"})),G=t((function(){return\"boolean\"==typeof e.popupContainer&&!1===e.popupContainer})),$=t((function(){return e.theme}));f((function(){return[e.theme,v(x)]}),(function(){S((function(){var e,t;null===(e=v(E))||void 0===e||e.setAttribute(\"pick-colors-theme\",v($)),null===(t=v(x))||void 0===t||null===(t=t.$el)||void 0===t||t.setAttribute(\"pick-colors-theme\",v($))}))}),{immediate:!0}),C(\"theme\",{theme:$});var V=u([]);return s((function(){document.addEventListener(\"mouseup\",R,!1),e.showPicker&&j()})),O((function(){document.removeEventListener(\"mouseup\",R,!1),y&&(clearTimeout(y),y=null),b&&(clearTimeout(b),b=null)})),{valueList:o,colorItemSelected:function(t){return(e.addColor?v(o).length>0:v(o).length>1)&&v(i)===t},selectedColor:l,selectedIndex:i,isShowPicker:c,addColorItemShow:D,onPickerChange:function(t){var r=v(i),a=v(o).slice(),l=v(o).length;if(null!=r){r>=0?a[r]=t:(i.value=l,a.push(t));var c=\"\";c=Array.isArray(e.value)||e.addColor?a:t,void 0===e.value?o.value=Array.isArray(c)?c:[c]:(n(\"update:value\",c),n(\"change\",c,t,r)),e.addColor&&l>=e.max&&(D.value=!1,n(\"overflowMax\"))}},colorPicker:E,onColorClick:z,pickerRef:x,onColorItemDragStart:function(e){e.dataTransfer.effectAllowed=\"move\";var t=e.target;B=+t.dataset.index},onColorItemDragOver:function(e){},onColorItemDrop:function(e){var t=+e.target.dataset.index,r=F(v(o)),a=r[B];r.splice(B,1);var i=r.slice(0,t),l=r.splice(t),c=i.concat([a]).concat(l);n(\"update:value\",c),n(\"change\",c,c[B],B)},colorItemsRef:V,pickerStyle:P,values:a,teleportDisabled:G,toPopupContainer:H}}});W(\".color-picker[data-v-3c43ade8]{display:inline-block}.color-item[data-v-3c43ade8]{margin:5px}.add-color-item[data-v-3c43ade8]{display:inline-block;margin:5px}.picker[data-v-3c43ade8]{overflow:hidden}.v-enter-active[data-v-3c43ade8],.v-leave-active[data-v-3c43ade8]{opacity:1;transform:scaleY(1);transform-origin:center top;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.v-enter-from[data-v-3c43ade8],.v-leave-to[data-v-3c43ade8]{opacity:0;transform:scaleY(0)}\"),Me.render=function(e,t,i,l,c,u){var s=m(\"color-item\"),f=m(\"add-color-item\"),d=m(\"picker\");return r(),n(\"div\",{class:\"color-picker\",ref:\"colorPicker\",onDragstart:t[0]||(t[0]=a((function(){return e.onColorItemDragStart&&e.onColorItemDragStart.apply(e,arguments)}),[\"stop\"])),onDragover:t[1]||(t[1]=a((function(){return e.onColorItemDragOver&&e.onColorItemDragOver.apply(e,arguments)}),[\"prevent\",\"stop\"])),onDrop:t[2]||(t[2]=a((function(){return e.onColorItemDrop&&e.onColorItemDrop.apply(e,arguments)}),[\"prevent\",\"stop\"])),onClick:t[3]||(t[3]=a((function(){return e.onColorClick&&e.onColorClick.apply(e,arguments)}),[\"stop\"]))},[(r(!0),n(g,null,y(e.values,(function(t,n){return r(),b(s,{class:\"color-item\",key:n,ref_for:!0,ref:function(t){return e.colorItemsRef[n]=t},size:e.size,width:e.width,height:e.height,value:t,selected:e.colorItemSelected(n),\"data-index\":n,draggable:e.valueList.length>1,format:e.format},null,8,[\"size\",\"width\",\"height\",\"value\",\"selected\",\"data-index\",\"draggable\",\"format\"])})),128)),e.addColor&&e.addColorItemShow?(r(),b(f,{key:0,class:\"add-color-item\",ref:\"addColorItem\",selected:e.colorItemSelected(-1),\"data-index\":-1},null,8,[\"selected\"])):x(\"v-if\",!0),(r(),b(A,{to:e.toPopupContainer,disabled:e.teleportDisabled},[w(P,null,{default:j((function(){return[e.isShowPicker?(r(),b(d,{key:0,class:\"picker\",style:o(e.pickerStyle),ref:\"pickerRef\",value:e.selectedColor,format:e.format,\"show-alpha\":e.showAlpha,colors:e.colors,onChange:e.onPickerChange},null,8,[\"style\",\"value\",\"format\",\"show-alpha\",\"colors\",\"onChange\"])):x(\"v-if\",!0)]})),_:1})],8,[\"to\",\"disabled\"]))],544)},Me.__scopeId=\"data-v-3c43ade8\",Me.__file=\"src/ColorPicker.vue\";export{Me as default};\n","<template>\n <div class=\"color-pick\">\n <a-input class=\"input\" v-model:value=\"colorValue\" />\n <pick-colors class=\"pick-colors\" v-model:value=\"colorValue\" :size=\"25\" :showAlpha=\"true\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport { Input as AInput } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorPick',\n components: {\n PickColors,\n AInput\n },\n props: {\n value: {\n type: String,\n require: true\n }\n },\n emits: ['change'],\n setup (props, context) {\n const colorValue = computed({\n get: () => props.value,\n set: (value) => {\n context.emit('change', value)\n }\n })\n const onChangColor = (e: any) => {\n colorValue.value = e.hex\n }\n return {\n colorValue,\n onChangColor\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-pick {\n display: flex;\n}\n.input {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"color-pick\">\n <a-input class=\"input\" v-model:value=\"colorValue\" />\n <pick-colors class=\"pick-colors\" v-model:value=\"colorValue\" :size=\"25\" :showAlpha=\"true\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport { Input as AInput } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorPick',\n components: {\n PickColors,\n AInput\n },\n props: {\n value: {\n type: String,\n require: true\n }\n },\n emits: ['change'],\n setup (props, context) {\n const colorValue = computed({\n get: () => props.value,\n set: (value) => {\n context.emit('change', value)\n }\n })\n const onChangColor = (e: any) => {\n colorValue.value = e.hex\n }\n return {\n colorValue,\n onChangColor\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-pick {\n display: flex;\n}\n.input {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"color-group-pick\">\n <pick-colors\n :value=\"value\"\n add-color\n :max=\"max\"\n @change=\"onColorsChange\"\n @overflow-max=\"onOverflowMax\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorGroupPick',\n components: {\n PickColors\n },\n props: {\n value: {\n type: Array as PropType<string[]>,\n default: () => ([])\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onColorsChange = (value: string[]) => {\n emit('change', value)\n }\n const max = ref(13)\n const onOverflowMax = () => {\n message.warn(`已经超出最大添加个数:${max.value}`)\n }\n return {\n onColorsChange,\n max,\n onOverflowMax\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-group-pick {\n padding: 10px;\n}\n</style>\n","<template>\n <div class=\"color-group-pick\">\n <pick-colors\n :value=\"value\"\n add-color\n :max=\"max\"\n @change=\"onColorsChange\"\n @overflow-max=\"onOverflowMax\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorGroupPick',\n components: {\n PickColors\n },\n props: {\n value: {\n type: Array as PropType<string[]>,\n default: () => ([])\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onColorsChange = (value: string[]) => {\n emit('change', value)\n }\n const max = ref(13)\n const onOverflowMax = () => {\n message.warn(`已经超出最大添加个数:${max.value}`)\n }\n return {\n onColorsChange,\n max,\n onOverflowMax\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-group-pick {\n padding: 10px;\n}\n</style>\n","<template>\n <div class=\"form-group\">\n <appstore-add-outlined\n class=\"icon add\"\n @click=\"onAdd\"\n />\n <draggable class=\"form\" v-model=\"myValue\" item-key=\"id\">\n <template #item=\"{ element: e, index: i}\">\n <div class=\"form-row\">\n <div class=\"form-item\" v-for=\"(f, j) in format\" :key=\"j\">\n <template v-if=\"Array.isArray(f.label)\">\n <span class=\"label\">\n {{ f.useLabelIndex ? f.label[i] + (i + 1) : f.label[i] }}\n </span>\n </template>\n <span class=\"label\" v-else>\n {{ f.useLabelIndex ? f.label + (i + 1) : f.label }}\n </span>\n <component\n class=\"value\"\n :[formatTypeValue(f.typeValue)]=\"typeof e === 'string' ? e : (e[f.value] ?? f.defaultValue)\"\n :is=\"useComponentType(f.type)\"\n :style=\"{\n width: !['color', 'switch'].includes(f.type) && format.length > 1 ? '110px' : ''\n }\"\n v-bind=\"f.props\"\n :theme=\"theme\"\n :use-blur-event=\"false\"\n @change=\"onValueChange($event, i, f.value)\"\n />\n </div>\n </div>\n </template>\n </draggable>\n <div class=\"icon-group\">\n <div class=\"icon-item\" v-for=\"(e, i) in myValue\" :key=\"i\">\n <!-- <plus-circle-outlined class=\"icon add-children-icon\" /> -->\n <minus-circle-outlined class=\"icon delete\" @click=\"onDelete(i)\" />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue'\nimport Draggable from 'vuedraggable'\nimport { AppstoreAddOutlined, MinusCircleOutlined, PlusCircleOutlined } from '@ant-design/icons-vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nimport InputNumber from '../input-number'\nexport default defineComponent({\n name: 'FormGroup',\n components: {\n Draggable,\n AppstoreAddOutlined,\n MinusCircleOutlined,\n PickColors,\n InputNumber,\n PlusCircleOutlined\n },\n props: {\n value: {\n type: Array,\n default: () => []\n },\n // 格式化 (映射)\n format: {\n type: Array as PropType<{ [key: string]: any } []>,\n default: () => []\n },\n useLabelIndex: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: -1\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const myValue = computed({\n get: () => props.value,\n set: (value) => {\n emit('change', value)\n }\n })\n\n const onValueChange = (e: Event, index: number, key: string) => {\n const temp = props.value?.slice()\n if (Array.isArray(temp)) {\n const target = e?.target as any\n const value = target?.value != null ? target?.value : e\n if (key) {\n temp[index][key] = value\n } else {\n temp[index] = value\n }\n myValue.value = temp\n }\n }\n\n const onAdd = () => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n const len = temp.length\n if (props.max === -1 || props.max > len) {\n const firstItem = temp[0]\n if (Object.prototype.toString.call(firstItem) === '[object Object]') {\n const keys = Object.keys(firstItem)\n const obj = {} as { [key:string]: string}\n keys.forEach((key) => {\n obj[key] = ''\n })\n temp.push(obj)\n } else if (typeof firstItem === 'string') {\n temp.push(firstItem)\n }\n myValue.value = temp\n } else {\n message.warn('已达到最大上限')\n }\n }\n const onDelete = (index: number) => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n if (temp.length === 1) {\n message.warn('已经是最后一条数据,无法删除')\n return\n }\n temp.splice(index, 1)\n myValue.value = temp\n }\n\n const useComponentType = (type: 'input' | 'select' | 'color' | 'switch') => {\n const map = {\n input: 'aInput',\n select: 'aSelect',\n color: 'pickColors',\n 'input-number': 'inputNumber',\n switch: 'aSwitch'\n }\n return map[type]\n }\n\n const theme = 'light'\n const formatTypeValue = (v: string) => v || 'value'\n return {\n myValue,\n onAdd,\n useComponentType,\n onValueChange,\n onDelete,\n theme,\n formatTypeValue\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.form-group {\n position: relative;\n display: flex;\n width: 100%;\n}\n\n.form {\n flex: 1;\n overflow-x: hidden;\n &:hover {\n overflow: overlay;\n }\n}\n\n.form-row {\n display: flex;\n align-items: center;\n}\n\n.form-row:not(:last-child) {\n margin-bottom: 15px;\n\n}\n\n.form-item {\n display: flex;\n align-items: center;\n width: 100%;\n margin-bottom: 10px;\n}\n\n.label {\n width: max-content;\n padding-right: 5px;\n}\n\n.value {\n flex: 1;\n margin-right: 10px;\n}\n\n.icon {\n color: rgba(0, 0, 0, 0.65);\n}\n\n.add {\n position: absolute;\n top: -30px;\n right: 0;\n font-size: 20px;\n}\n\n.icon-group {\n display: flex;\n flex-direction: column;\n}\n\n.delete {\n width: 30px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: 18px;\n}\n.icon-item {\n display: flex;\n width: 30px;\n height: 40px;\n justify-content: center;\n align-items: center;\n}\n.icon-item:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.add-children-icon {\n font-size: 18px;\n margin-right: 10px;\n}\n\n// .delete:not(:last-child) {\n// margin-bottom: 15px;\n// }\n\n.fixed {\n font-size: 18px;\n}\n\n.use-font-size {\n display: flex;\n align-items: center;\n}\n\n.use-color {\n margin: 5px;\n}\n</style>\n","<template>\n <div class=\"form-group\">\n <appstore-add-outlined\n class=\"icon add\"\n @click=\"onAdd\"\n />\n <draggable class=\"form\" v-model=\"myValue\" item-key=\"id\">\n <template #item=\"{ element: e, index: i}\">\n <div class=\"form-row\">\n <div class=\"form-item\" v-for=\"(f, j) in format\" :key=\"j\">\n <template v-if=\"Array.isArray(f.label)\">\n <span class=\"label\">\n {{ f.useLabelIndex ? f.label[i] + (i + 1) : f.label[i] }}\n </span>\n </template>\n <span class=\"label\" v-else>\n {{ f.useLabelIndex ? f.label + (i + 1) : f.label }}\n </span>\n <component\n class=\"value\"\n :[formatTypeValue(f.typeValue)]=\"typeof e === 'string' ? e : (e[f.value] ?? f.defaultValue)\"\n :is=\"useComponentType(f.type)\"\n :style=\"{\n width: !['color', 'switch'].includes(f.type) && format.length > 1 ? '110px' : ''\n }\"\n v-bind=\"f.props\"\n :theme=\"theme\"\n :use-blur-event=\"false\"\n @change=\"onValueChange($event, i, f.value)\"\n />\n </div>\n </div>\n </template>\n </draggable>\n <div class=\"icon-group\">\n <div class=\"icon-item\" v-for=\"(e, i) in myValue\" :key=\"i\">\n <!-- <plus-circle-outlined class=\"icon add-children-icon\" /> -->\n <minus-circle-outlined class=\"icon delete\" @click=\"onDelete(i)\" />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue'\nimport Draggable from 'vuedraggable'\nimport { AppstoreAddOutlined, MinusCircleOutlined, PlusCircleOutlined } from '@ant-design/icons-vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nimport InputNumber from '../input-number'\nexport default defineComponent({\n name: 'FormGroup',\n components: {\n Draggable,\n AppstoreAddOutlined,\n MinusCircleOutlined,\n PickColors,\n InputNumber,\n PlusCircleOutlined\n },\n props: {\n value: {\n type: Array,\n default: () => []\n },\n // 格式化 (映射)\n format: {\n type: Array as PropType<{ [key: string]: any } []>,\n default: () => []\n },\n useLabelIndex: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: -1\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const myValue = computed({\n get: () => props.value,\n set: (value) => {\n emit('change', value)\n }\n })\n\n const onValueChange = (e: Event, index: number, key: string) => {\n const temp = props.value?.slice()\n if (Array.isArray(temp)) {\n const target = e?.target as any\n const value = target?.value != null ? target?.value : e\n if (key) {\n temp[index][key] = value\n } else {\n temp[index] = value\n }\n myValue.value = temp\n }\n }\n\n const onAdd = () => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n const len = temp.length\n if (props.max === -1 || props.max > len) {\n const firstItem = temp[0]\n if (Object.prototype.toString.call(firstItem) === '[object Object]') {\n const keys = Object.keys(firstItem)\n const obj = {} as { [key:string]: string}\n keys.forEach((key) => {\n obj[key] = ''\n })\n temp.push(obj)\n } else if (typeof firstItem === 'string') {\n temp.push(firstItem)\n }\n myValue.value = temp\n } else {\n message.warn('已达到最大上限')\n }\n }\n const onDelete = (index: number) => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n if (temp.length === 1) {\n message.warn('已经是最后一条数据,无法删除')\n return\n }\n temp.splice(index, 1)\n myValue.value = temp\n }\n\n const useComponentType = (type: 'input' | 'select' | 'color' | 'switch') => {\n const map = {\n input: 'aInput',\n select: 'aSelect',\n color: 'pickColors',\n 'input-number': 'inputNumber',\n switch: 'aSwitch'\n }\n return map[type]\n }\n\n const theme = 'light'\n const formatTypeValue = (v: string) => v || 'value'\n return {\n myValue,\n onAdd,\n useComponentType,\n onValueChange,\n onDelete,\n theme,\n formatTypeValue\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.form-group {\n position: relative;\n display: flex;\n width: 100%;\n}\n\n.form {\n flex: 1;\n overflow-x: hidden;\n &:hover {\n overflow: overlay;\n }\n}\n\n.form-row {\n display: flex;\n align-items: center;\n}\n\n.form-row:not(:last-child) {\n margin-bottom: 15px;\n\n}\n\n.form-item {\n display: flex;\n align-items: center;\n width: 100%;\n margin-bottom: 10px;\n}\n\n.label {\n width: max-content;\n padding-right: 5px;\n}\n\n.value {\n flex: 1;\n margin-right: 10px;\n}\n\n.icon {\n color: rgba(0, 0, 0, 0.65);\n}\n\n.add {\n position: absolute;\n top: -30px;\n right: 0;\n font-size: 20px;\n}\n\n.icon-group {\n display: flex;\n flex-direction: column;\n}\n\n.delete {\n width: 30px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: 18px;\n}\n.icon-item {\n display: flex;\n width: 30px;\n height: 40px;\n justify-content: center;\n align-items: center;\n}\n.icon-item:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.add-children-icon {\n font-size: 18px;\n margin-right: 10px;\n}\n\n// .delete:not(:last-child) {\n// margin-bottom: 15px;\n// }\n\n.fixed {\n font-size: 18px;\n}\n\n.use-font-size {\n display: flex;\n align-items: center;\n}\n\n.use-color {\n margin: 5px;\n}\n</style>\n","<template>\n <a-textarea\n :value=\"value\"\n :disabled=\"disabled\"\n :autoSize=\"{\n minRows: 3\n }\"\n @change=\"onTextareaChange\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { Textarea as ATextarea } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Textarea',\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ATextarea\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onTextareaChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onTextareaChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-textarea\n :value=\"value\"\n :disabled=\"disabled\"\n :autoSize=\"{\n minRows: 3\n }\"\n @change=\"onTextareaChange\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { Textarea as ATextarea } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Textarea',\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ATextarea\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onTextareaChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onTextareaChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\r\n <a-row>\r\n <a-col :span=\"16\">\r\n <a-slider\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n <a-col :span=\"8\" style=\"padding-left: 10px;\">\r\n <a-input-number\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n style=\"width: 100%;\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n </a-row>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent } from 'vue'\r\nimport { Slider as ASlider, InputNumber as AInputNumber } from 'ant-design-vue'\r\nexport default defineComponent({\r\n name: 'Slider',\r\n components: {\r\n ASlider,\r\n AInputNumber\r\n },\r\n props: {\r\n value: {\r\n type: Number,\r\n default: 1\r\n }\r\n },\r\n emits: ['change'],\r\n setup (props, { emit }) {\r\n const onChange = (value: number) => {\r\n emit('change', value)\r\n }\r\n return {\r\n onChange\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","<template>\r\n <a-row>\r\n <a-col :span=\"16\">\r\n <a-slider\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n <a-col :span=\"8\" style=\"padding-left: 10px;\">\r\n <a-input-number\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n style=\"width: 100%;\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n </a-row>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent } from 'vue'\r\nimport { Slider as ASlider, InputNumber as AInputNumber } from 'ant-design-vue'\r\nexport default defineComponent({\r\n name: 'Slider',\r\n components: {\r\n ASlider,\r\n AInputNumber\r\n },\r\n props: {\r\n value: {\r\n type: Number,\r\n default: 1\r\n }\r\n },\r\n emits: ['change'],\r\n setup (props, { emit }) {\r\n const onChange = (value: number) => {\r\n emit('change', value)\r\n }\r\n return {\r\n onChange\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","<template>\n <div class=\"props-to-form\">\n <template\n v-for=\"(formProp, key) in formProps\"\n :key=\"key\"\n >\n <!--限定特定组件修改属性,formProp 为对象 -->\n <div class=\"prop-item\" v-if=\"formProp.hide !== true\">\n <span class=\"label\">\n {{ formProp.label }}\n </span>\n <div class=\"component-wrapper\">\n <template v-if=\"Array.isArray(formProp)\">\n <template\n v-for=\"(v, k) in formProp\"\n :key=\"k\"\n >\n <component\n class=\"component\"\n :is=\"v.component\"\n :style=\"v.style\"\n :disabled=\"disabled || v.disabled\"\n v-bind=\"v.props\"\n v-on=\"v.events\"\n />\n </template>\n </template>\n <template v-if=\"!Array.isArray(formProp)\">\n <component\n class=\"component\"\n v-if=\"formProp.component\"\n :is=\"formProp.component\"\n :[formProp.valueProp]=\"formProp.value\"\n :style=\"formProp.style\"\n :disabled=\"disabled || formProp.disabled\"\n v-bind=\"formProp.props\"\n v-on=\"formProp.events\"\n />\n </template>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, unref, inject } from 'vue'\nimport { reduce } from 'lodash-es'\nimport {\n CHARTS_OPTIONS,\n UPDATE_CHARTS_OPTIONS,\n UPDATE_TABLE_OPTIONS\n , GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport {\n PropsToAttributeConfig,\n mapAttributeProps,\n PropToAttributeConfig\n} from './data'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nimport Input from './input'\nimport InputNumber from './input-number'\nimport RadioGroup from './radio-group'\nimport Select from './select'\nimport Switch from './switch'\nimport ColorPick from './color-pick'\nimport ColorGroupPick from './color-group-pick'\nimport FormGroup from './form-group'\nimport Textarea from './textarea'\nimport Slider from './slider'\nexport default defineComponent({\n name: 'PropsToForm',\n components: {\n Input,\n InputNumber,\n RadioGroup,\n Select,\n Switch,\n ColorPick,\n ColorGroupPick,\n FormGroup,\n Textarea,\n Slider\n },\n props: {\n props: {\n type: Object,\n require: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n componentType: {\n // 控件类型\n type: String,\n default: ''\n }\n },\n setup (props) {\n interface SetOptions {\n mapAttributeProp: PropToAttributeConfig\n result: PropsToAttributeConfig\n key: string\n value: any\n }\n const chartsOptions = inject(CHARTS_OPTIONS) as {\n [key: string]: any\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\n const type = computed(() => unref(chartsOptions)?.type)\n const updateOptions = (options: any) => {\n if (props.componentType && props.componentType === 'table') {\n updateTableOptions(options)\n } else {\n updateChartsOptions(options)\n }\n }\n const setFormProps = (setOptions: SetOptions) => {\n const { result, mapAttributeProp, key, value } = setOptions\n if (result == null || typeof result !== 'object') {\n return\n }\n const {\n valueProp = 'value',\n changeValueEventName = 'change',\n events,\n effect,\n effectVal,\n props\n } = mapAttributeProp\n\n result[key] = {\n ...mapAttributeProp,\n // 值属性\n valueProp,\n value,\n events: {\n [changeValueEventName]: (value: any, updateValue: boolean = true) => {\n // 值改变后回调\n if (updateValue) {\n updateOptions({ [key]: value })\n if (effectVal) {\n effectVal(key, value, updateOptions, unref(graphicConfig))\n }\n } else {\n updateOptions({})\n }\n },\n ...events\n },\n ...effectProps(effect),\n props: { ...props, ...getFunProps(props, unref(graphicConfig)) }\n }\n }\n const formProps = computed(() => {\n const attrs = props.props\n if (attrs == null || typeof attrs !== 'object') {\n return {}\n }\n return reduce(\n attrs,\n (result, value, key) => {\n const mapAttributeProp = mapAttributeProps[key]\n if (Array.isArray(mapAttributeProp)) {\n const item = mapAttributeProp.find((item) => {\n const { onlyType, excludeType } = item\n if (onlyType == null && excludeType == null) {\n return true\n } else if (onlyType) {\n return lowerCaseIncludes(unref(type), onlyType)\n } else if (excludeType) {\n return !lowerCaseIncludes(unref(type), excludeType)\n }\n return false\n })\n if (item) {\n setFormProps({ result, value, key, mapAttributeProp: item })\n }\n } else {\n setFormProps({ result, value, key, mapAttributeProp })\n }\n return result\n },\n {} as { [key: string]: any }\n )\n })\n // 受其他组件影响的 属性生成\n const effectProps = (effect: any) => {\n const nProps: any = {}\n for (const key in effect) {\n nProps[key] = reduce(\n effect[key].props,\n (status: boolean, item: any) => effect[key].joinType === '&&' ? (status && calcSingleItemRes(item)) : (status || calcSingleItemRes(item)),\n Boolean(effect[key].default))\n }\n return nProps\n }\n // 值变更影响其他属性-其他组件作用的结果\n const calcSingleItemRes = (item) => {\n // 影响他的属性的 其他组件的值\n const effectVal = props.props[item.props]\n let result\n switch (item.rule) {\n case '!==':\n result = effectVal !== item.value\n break\n case 'includes':\n result = effectVal.includes(item.value)\n break\n case 'action':\n result = item.value(item, props.props)\n break\n default:\n result = effectVal === item.value\n }\n return result\n }\n // 函数获取属性的值\n function getFunProps (props = {}, graphicConfig) {\n // 当前选择的元素\n const otherProps = {}\n for (const prop in props) {\n if (typeof props[prop] === 'function') {\n otherProps[prop] = props[prop](graphicConfig)\n }\n }\n return otherProps\n }\n return {\n formProps,\n lowerCaseIncludes\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 28%;\n display: flex;\n justify-content: center;\n}\n\n.label-vertical {\n justify-content: flex-start;\n padding-bottom: 4px;\n}\n\n.component-wrapper {\n width: 72%;\n}\n\n.component {\n width: 100%;\n}\n\n.layout {\n align-items: flex-start;\n flex-direction: column;\n padding: 10px 5px 10px 10px;\n\n .label {\n text-align: left;\n margin-bottom: 5px;\n }\n\n .component-wrapper {\n width: 100%;\n }\n}\n</style>\n","<template>\n <div class=\"props-to-form\">\n <template\n v-for=\"(formProp, key) in formProps\"\n :key=\"key\"\n >\n <!--限定特定组件修改属性,formProp 为对象 -->\n <div class=\"prop-item\" v-if=\"formProp.hide !== true\">\n <span class=\"label\">\n {{ formProp.label }}\n </span>\n <div class=\"component-wrapper\">\n <template v-if=\"Array.isArray(formProp)\">\n <template\n v-for=\"(v, k) in formProp\"\n :key=\"k\"\n >\n <component\n class=\"component\"\n :is=\"v.component\"\n :style=\"v.style\"\n :disabled=\"disabled || v.disabled\"\n v-bind=\"v.props\"\n v-on=\"v.events\"\n />\n </template>\n </template>\n <template v-if=\"!Array.isArray(formProp)\">\n <component\n class=\"component\"\n v-if=\"formProp.component\"\n :is=\"formProp.component\"\n :[formProp.valueProp]=\"formProp.value\"\n :style=\"formProp.style\"\n :disabled=\"disabled || formProp.disabled\"\n v-bind=\"formProp.props\"\n v-on=\"formProp.events\"\n />\n </template>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, unref, inject } from 'vue'\nimport { reduce } from 'lodash-es'\nimport {\n CHARTS_OPTIONS,\n UPDATE_CHARTS_OPTIONS,\n UPDATE_TABLE_OPTIONS\n , GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport {\n PropsToAttributeConfig,\n mapAttributeProps,\n PropToAttributeConfig\n} from './data'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nimport Input from './input'\nimport InputNumber from './input-number'\nimport RadioGroup from './radio-group'\nimport Select from './select'\nimport Switch from './switch'\nimport ColorPick from './color-pick'\nimport ColorGroupPick from './color-group-pick'\nimport FormGroup from './form-group'\nimport Textarea from './textarea'\nimport Slider from './slider'\nexport default defineComponent({\n name: 'PropsToForm',\n components: {\n Input,\n InputNumber,\n RadioGroup,\n Select,\n Switch,\n ColorPick,\n ColorGroupPick,\n FormGroup,\n Textarea,\n Slider\n },\n props: {\n props: {\n type: Object,\n require: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n componentType: {\n // 控件类型\n type: String,\n default: ''\n }\n },\n setup (props) {\n interface SetOptions {\n mapAttributeProp: PropToAttributeConfig\n result: PropsToAttributeConfig\n key: string\n value: any\n }\n const chartsOptions = inject(CHARTS_OPTIONS) as {\n [key: string]: any\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\n const type = computed(() => unref(chartsOptions)?.type)\n const updateOptions = (options: any) => {\n if (props.componentType && props.componentType === 'table') {\n updateTableOptions(options)\n } else {\n updateChartsOptions(options)\n }\n }\n const setFormProps = (setOptions: SetOptions) => {\n const { result, mapAttributeProp, key, value } = setOptions\n if (result == null || typeof result !== 'object') {\n return\n }\n const {\n valueProp = 'value',\n changeValueEventName = 'change',\n events,\n effect,\n effectVal,\n props\n } = mapAttributeProp\n\n result[key] = {\n ...mapAttributeProp,\n // 值属性\n valueProp,\n value,\n events: {\n [changeValueEventName]: (value: any, updateValue: boolean = true) => {\n // 值改变后回调\n if (updateValue) {\n updateOptions({ [key]: value })\n if (effectVal) {\n effectVal(key, value, updateOptions, unref(graphicConfig))\n }\n } else {\n updateOptions({})\n }\n },\n ...events\n },\n ...effectProps(effect),\n props: { ...props, ...getFunProps(props, unref(graphicConfig)) }\n }\n }\n const formProps = computed(() => {\n const attrs = props.props\n if (attrs == null || typeof attrs !== 'object') {\n return {}\n }\n return reduce(\n attrs,\n (result, value, key) => {\n const mapAttributeProp = mapAttributeProps[key]\n if (Array.isArray(mapAttributeProp)) {\n const item = mapAttributeProp.find((item) => {\n const { onlyType, excludeType } = item\n if (onlyType == null && excludeType == null) {\n return true\n } else if (onlyType) {\n return lowerCaseIncludes(unref(type), onlyType)\n } else if (excludeType) {\n return !lowerCaseIncludes(unref(type), excludeType)\n }\n return false\n })\n if (item) {\n setFormProps({ result, value, key, mapAttributeProp: item })\n }\n } else {\n setFormProps({ result, value, key, mapAttributeProp })\n }\n return result\n },\n {} as { [key: string]: any }\n )\n })\n // 受其他组件影响的 属性生成\n const effectProps = (effect: any) => {\n const nProps: any = {}\n for (const key in effect) {\n nProps[key] = reduce(\n effect[key].props,\n (status: boolean, item: any) => effect[key].joinType === '&&' ? (status && calcSingleItemRes(item)) : (status || calcSingleItemRes(item)),\n Boolean(effect[key].default))\n }\n return nProps\n }\n // 值变更影响其他属性-其他组件作用的结果\n const calcSingleItemRes = (item) => {\n // 影响他的属性的 其他组件的值\n const effectVal = props.props[item.props]\n let result\n switch (item.rule) {\n case '!==':\n result = effectVal !== item.value\n break\n case 'includes':\n result = effectVal.includes(item.value)\n break\n case 'action':\n result = item.value(item, props.props)\n break\n default:\n result = effectVal === item.value\n }\n return result\n }\n // 函数获取属性的值\n function getFunProps (props = {}, graphicConfig) {\n // 当前选择的元素\n const otherProps = {}\n for (const prop in props) {\n if (typeof props[prop] === 'function') {\n otherProps[prop] = props[prop](graphicConfig)\n }\n }\n return otherProps\n }\n return {\n formProps,\n lowerCaseIncludes\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 28%;\n display: flex;\n justify-content: center;\n}\n\n.label-vertical {\n justify-content: flex-start;\n padding-bottom: 4px;\n}\n\n.component-wrapper {\n width: 72%;\n}\n\n.component {\n width: 100%;\n}\n\n.layout {\n align-items: flex-start;\n flex-direction: column;\n padding: 10px 5px 10px 10px;\n\n .label {\n text-align: left;\n margin-bottom: 5px;\n }\n\n .component-wrapper {\n width: 100%;\n }\n}\n</style>\n","<template>\n <div class=\"editor\" ref=\"dom\">\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onUnmounted, watch, PropType } from 'vue'\nimport { debounce } from 'lodash-es'\nimport { editor as monacoEditor } from 'monaco-editor'\nimport EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'\nimport JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'\n// 暂时不引入ts,后面需要可以开启\nimport TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker'\nexport type LanguageType = 'json' | 'typescript' | 'javascript'\nexport default defineComponent({\n name: 'Editor',\n props: {\n valueData: {\n type: String,\n default: ''\n },\n options: {\n type: Object,\n default: () => ({})\n },\n language: {\n type: String as PropType<LanguageType>,\n default: 'json'\n },\n // 是否使用小地图\n isUseMinimap: {\n type: Boolean,\n default: false\n },\n // 是否开启提示\n UseSuggestions: {\n type: Boolean,\n default: false\n },\n // 是否自动格式化\n autoFormat: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n }\n },\n emits: ['change', 'update:valueData'],\n setup (props, { emit }) {\n /* eslint-disable */\n // @ts-ignore\n window.MonacoEnvironment = {\n getWorker (workerId: string, label: string) {\n if (label === 'json') {\n return new JsonWorker()\n }\n if (label === 'typescript' || label === 'javascript') {\n return new TsWorker()\n }\n return new EditorWorker()\n }\n }\n /* eslint-enable */\n\n // dom\n const dom = ref()\n // 实例\n let editor = null as monacoEditor.IStandaloneCodeEditor | null\n\n // 主题设置\n const themeMap = {\n light: 'vs',\n dark: 'vs-dark'\n }\n onMounted(() => {\n editor = monacoEditor.create(dom.value, {\n language: props.language,\n tabSize: 2,\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: themeMap.light,\n wordWrap: 'off',\n lineDecorationsWidth: 3,\n lineHeight: 15,\n lineNumbersMinChars: 3,\n formatOnPaste: true,\n formatOnType: true,\n wordBasedSuggestions: false,\n // 代码提示\n quickSuggestions: props.UseSuggestions,\n snippetSuggestions: 'none',\n suggestOnTriggerCharacters: false,\n scrollbar: {\n verticalScrollbarSize: 6,\n horizontalScrollbarSize: 6,\n alwaysConsumeMouseWheel: false,\n arrowSize: 0\n },\n autoIndent: 'advanced',\n glyphMargin: false,\n fontSize: 13,\n // 关闭右键菜单\n contextmenu: false,\n // 小地图\n minimap: {\n enabled: props.isUseMinimap\n },\n readOnly: props.readonly,\n ...props.options\n })\n // 初始化需要延迟格式化\n editor?.setValue(props.valueData)\n // 如果发现 json 格式化无用\n // 请尝试使用 JSON.stringify(ob, null, 2) 进行格式化\n if (props.autoFormat) {\n setTimeout(() => {\n editor?.getAction('editor.action.formatDocument').run()\n }, 200)\n }\n editor.onDidChangeModelContent(debounce(() => {\n // const selection = editor?.getSelection()\n // const = selection?.getSelectionStart()\n const value = editor?.getValue()\n emit('change', value)\n }, 300))\n\n // 由于 change 会实时改变光标,所以v-model在失去焦点时完成\n editor.onDidBlurEditorText(() => {\n const value = editor?.getValue()\n emit('update:valueData', value)\n })\n })\n // 监听值变化\n watch(() => props.valueData, (code) => {\n if (editor) {\n // 保留光标位置\n const position = editor.getPosition()\n editor.setValue(code)\n // 格式化\n if (props.autoFormat) {\n editor.getAction('editor.action.formatDocument').run()\n }\n if (position != null) {\n // 重新赋值光标位置\n editor.setPosition(position)\n }\n }\n })\n\n onUnmounted(() => {\n editor?.dispose()\n })\n return {\n dom\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.editor {\n width: 100%;\n height: 100%;\n}\n:deep(.overlayWidgets) {\n .find-widget {\n min-width: 220px !important;\n }\n}\n</style>\n","<template>\n <div class=\"editor\" ref=\"dom\">\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onUnmounted, watch, PropType } from 'vue'\nimport { debounce } from 'lodash-es'\nimport { editor as monacoEditor } from 'monaco-editor'\nimport EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'\nimport JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'\n// 暂时不引入ts,后面需要可以开启\nimport TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker'\nexport type LanguageType = 'json' | 'typescript' | 'javascript'\nexport default defineComponent({\n name: 'Editor',\n props: {\n valueData: {\n type: String,\n default: ''\n },\n options: {\n type: Object,\n default: () => ({})\n },\n language: {\n type: String as PropType<LanguageType>,\n default: 'json'\n },\n // 是否使用小地图\n isUseMinimap: {\n type: Boolean,\n default: false\n },\n // 是否开启提示\n UseSuggestions: {\n type: Boolean,\n default: false\n },\n // 是否自动格式化\n autoFormat: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n }\n },\n emits: ['change', 'update:valueData'],\n setup (props, { emit }) {\n /* eslint-disable */\n // @ts-ignore\n window.MonacoEnvironment = {\n getWorker (workerId: string, label: string) {\n if (label === 'json') {\n return new JsonWorker()\n }\n if (label === 'typescript' || label === 'javascript') {\n return new TsWorker()\n }\n return new EditorWorker()\n }\n }\n /* eslint-enable */\n\n // dom\n const dom = ref()\n // 实例\n let editor = null as monacoEditor.IStandaloneCodeEditor | null\n\n // 主题设置\n const themeMap = {\n light: 'vs',\n dark: 'vs-dark'\n }\n onMounted(() => {\n editor = monacoEditor.create(dom.value, {\n language: props.language,\n tabSize: 2,\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: themeMap.light,\n wordWrap: 'off',\n lineDecorationsWidth: 3,\n lineHeight: 15,\n lineNumbersMinChars: 3,\n formatOnPaste: true,\n formatOnType: true,\n wordBasedSuggestions: false,\n // 代码提示\n quickSuggestions: props.UseSuggestions,\n snippetSuggestions: 'none',\n suggestOnTriggerCharacters: false,\n scrollbar: {\n verticalScrollbarSize: 6,\n horizontalScrollbarSize: 6,\n alwaysConsumeMouseWheel: false,\n arrowSize: 0\n },\n autoIndent: 'advanced',\n glyphMargin: false,\n fontSize: 13,\n // 关闭右键菜单\n contextmenu: false,\n // 小地图\n minimap: {\n enabled: props.isUseMinimap\n },\n readOnly: props.readonly,\n ...props.options\n })\n // 初始化需要延迟格式化\n editor?.setValue(props.valueData)\n // 如果发现 json 格式化无用\n // 请尝试使用 JSON.stringify(ob, null, 2) 进行格式化\n if (props.autoFormat) {\n setTimeout(() => {\n editor?.getAction('editor.action.formatDocument').run()\n }, 200)\n }\n editor.onDidChangeModelContent(debounce(() => {\n // const selection = editor?.getSelection()\n // const = selection?.getSelectionStart()\n const value = editor?.getValue()\n emit('change', value)\n }, 300))\n\n // 由于 change 会实时改变光标,所以v-model在失去焦点时完成\n editor.onDidBlurEditorText(() => {\n const value = editor?.getValue()\n emit('update:valueData', value)\n })\n })\n // 监听值变化\n watch(() => props.valueData, (code) => {\n if (editor) {\n // 保留光标位置\n const position = editor.getPosition()\n editor.setValue(code)\n // 格式化\n if (props.autoFormat) {\n editor.getAction('editor.action.formatDocument').run()\n }\n if (position != null) {\n // 重新赋值光标位置\n editor.setPosition(position)\n }\n }\n })\n\n onUnmounted(() => {\n editor?.dispose()\n })\n return {\n dom\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.editor {\n width: 100%;\n height: 100%;\n}\n:deep(.overlayWidgets) {\n .find-widget {\n min-width: 220px !important;\n }\n}\n</style>\n","<template>\n <div class=\"condition\">\n <a-select class=\"field-name\" v-model:value=\"condition.rule\" :options=\"ruleOptions\" @change=\"onRuleChange\">\n </a-select>\n <a-input class=\"field-value\" v-model:value=\"condition.value\" placeholder=\"请输入值\" />\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, unref, ref, watch, onMounted, inject } from 'vue'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { CHANGE_CONDITION } from '@/utils/constant'\nimport {\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput,\n Select as ASelect,\n Dropdown as ADropdown\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n MenuOutlined,\n AMenu,\n AMenuItem,\n AInput,\n ASelect,\n ADropdown\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const ruleOptions = [\n {\n label: '大于',\n value: '>'\n },\n {\n label: '大于等于',\n value: '>='\n },\n {\n label: '小于',\n value: '<'\n },\n {\n label: '小于等于',\n value: '<='\n },\n {\n label: '等于',\n value: '=='\n },\n {\n label: '不等于',\n value: '!='\n }\n ]\n\n const condition = ref({\n rule: '==',\n value: '',\n key: ''\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any }, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n\n watch(\n condition,\n (condition) => {\n updateCondition(cloneDeep(condition), props.index, props.path)\n },\n {\n deep: true\n }\n )\n\n const onRuleChange = () => {\n // unref(condition).value = ''\n }\n\n const clickConditionMenu = (data: any) => {\n addCondition(props.path, props.index, data.key === '2' ? '||' : '&&')\n }\n\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n\n onMounted(() => {\n unref(condition).rule = props.data?.rule || ''\n unref(condition).value = props.data?.value || ''\n unref(condition).key = props.data?.key || nanoid()\n })\n\n return {\n ruleOptions,\n condition,\n onRuleChange,\n clickConditionMenu,\n onDelete\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 25%;\n margin-right: 10px;\n}\n\n.field-value {\n width: 75%;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 20px;\n}\n\n.rule {\n width: 20%;\n}\n\n.delete-icon,\n.more-icon {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"condition\">\n <a-select class=\"field-name\" v-model:value=\"condition.rule\" :options=\"ruleOptions\" @change=\"onRuleChange\">\n </a-select>\n <a-input class=\"field-value\" v-model:value=\"condition.value\" placeholder=\"请输入值\" />\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, unref, ref, watch, onMounted, inject } from 'vue'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { CHANGE_CONDITION } from '@/utils/constant'\nimport {\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput,\n Select as ASelect,\n Dropdown as ADropdown\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n MenuOutlined,\n AMenu,\n AMenuItem,\n AInput,\n ASelect,\n ADropdown\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const ruleOptions = [\n {\n label: '大于',\n value: '>'\n },\n {\n label: '大于等于',\n value: '>='\n },\n {\n label: '小于',\n value: '<'\n },\n {\n label: '小于等于',\n value: '<='\n },\n {\n label: '等于',\n value: '=='\n },\n {\n label: '不等于',\n value: '!='\n }\n ]\n\n const condition = ref({\n rule: '==',\n value: '',\n key: ''\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any }, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n\n watch(\n condition,\n (condition) => {\n updateCondition(cloneDeep(condition), props.index, props.path)\n },\n {\n deep: true\n }\n )\n\n const onRuleChange = () => {\n // unref(condition).value = ''\n }\n\n const clickConditionMenu = (data: any) => {\n addCondition(props.path, props.index, data.key === '2' ? '||' : '&&')\n }\n\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n\n onMounted(() => {\n unref(condition).rule = props.data?.rule || ''\n unref(condition).value = props.data?.value || ''\n unref(condition).key = props.data?.key || nanoid()\n })\n\n return {\n ruleOptions,\n condition,\n onRuleChange,\n clickConditionMenu,\n onDelete\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 25%;\n margin-right: 10px;\n}\n\n.field-value {\n width: 75%;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 20px;\n}\n\n.rule {\n width: 20%;\n}\n\n.delete-icon,\n.more-icon {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.key || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.key || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\r\n <a-modal\r\n width=\"60%\"\r\n v-model:visible=\"visible\"\r\n :title=\"`条件设置`\"\r\n :destroyOnClose=\"true\"\r\n :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n @ok=\"handleOk\"\r\n >\r\n\r\n <div class=\"config-wrap\">\r\n <div class=\"wrap-item left\">\r\n <div class=\"title\">\r\n 条件配置\r\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\r\n <a-button\r\n class=\"add-and-condition\"\r\n @click=\"addCondition('&&')\"\r\n >\r\n 添加且条件\r\n </a-button>\r\n <a-button\r\n class=\"add-or-condition\"\r\n @click=\"addCondition('||')\"\r\n >\r\n 添加或条件\r\n </a-button>\r\n </template>\r\n <a-button style=\"margin-left: 15px;\" @click=\"addCondition()\" v-else>\r\n 添加条件\r\n </a-button>\r\n </div>\r\n <div class=\"border\">\r\n <condition-list\r\n class=\"condition-list\"\r\n :list=\"conditionList\"\r\n :level=\"0\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"wrap-item right\">\r\n <div class=\"title\">属性配置</div>\r\n <div class=\"border\">\r\n <div class=\"row\">\r\n <div>字体颜色:</div>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.color\"\r\n :size=\"25\"\r\n />\r\n </div>\r\n <div class=\"row\">\r\n <div>图标:</div>\r\n <div style=\"display: flex; align-items: center;justify-items: center;\">\r\n <!-- fff -->\r\n <!-- <image-picker\r\n :value=\"attribute.icon\"\r\n :mini=\"true\"\r\n @change=\"onUploadChange\"\r\n /> -->\r\n <!-- <img class=\"image\" v-if=\" attribute.icon\" :src=\"imgBaseUrl + attribute.icon\" style=\"width: 16px;height: 16px\"/> -->\r\n <!-- <svg-icon v-if=\"attribute.icon\" :iSrc=\"attribute.icon\"></svg-icon> -->\r\n <a-select v-model:value=\"attribute.icon\" :options=\"iconOptions\" style=\"width: 160px\"></a-select>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.iconColor\"\r\n :size=\"25\"\r\n />\r\n <!-- </div> -->\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\" v-if=\"attribute.icon\">\r\n <div>图标位置:</div>\r\n <a-radio-group v-model:value=\"attribute.iconAlign\">\r\n <a-radio-button value=\"left\">靠左</a-radio-button>\r\n <a-radio-button value=\"right\">靠右</a-radio-button>\r\n </a-radio-group>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch, unref, provide, computed } from 'vue'\r\nimport ConditionList from './ConditionList.vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { nanoid } from 'nanoid'\r\nimport { CHANGE_CONDITION } from '@/utils/constant'\r\nimport PickColors from 'vue-pick-colors'\r\n// import SvgIcon from '@/components/SvgIcon.vue'\r\n// import ImagePicker from './ImagePicker.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n message,\r\n Select as ASelect\r\n // Select as ASelect\r\n} from 'ant-design-vue'\r\nexport default defineComponent({\r\n components: {\r\n ConditionList,\r\n PickColors,\r\n // ImagePicker,\r\n AButton,\r\n AModal,\r\n ASelect\r\n // SvgIcon\r\n },\r\n props: {\r\n data: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n default: -1\r\n }\r\n },\r\n setup (props, { emit, expose }) {\r\n const visible = ref(false)\r\n const conditionList = ref<{ [key: string]: any } []>([])\r\n const attribute = ref<{ [key: string]: any }>({})\r\n const params = computed(() => ({\r\n pageId: unref('pageId')\r\n }))\r\n const getSameLevelList = (list: { [key: string]: any } []): { [key: string]: any } [] => {\r\n const result: { [key: string]: any } [] = []\r\n for (const l of list) {\r\n if (l.conditions) {\r\n result.push(...getSameLevelList(l.conditions))\r\n } else {\r\n result.push(l)\r\n }\r\n }\r\n return result\r\n }\r\n const handleOk = () => {\r\n const sameLevelList = getSameLevelList(unref(conditionList))\r\n if (sameLevelList.find((v: any) => !v.value || !v.rule)) {\r\n message.error('条件值或规则不能为空')\r\n return\r\n }\r\n emit('save', {\r\n conditions: unref(conditionList),\r\n attribute: unref(attribute)\r\n })\r\n visible.value = false\r\n }\r\n\r\n const addKeyValue = (conditions: { [key: string]: any } []) => {\r\n for (const item of conditions) {\r\n if (item.conditions?.length) {\r\n addKeyValue(item.conditions)\r\n } else {\r\n item.key = nanoid()\r\n }\r\n }\r\n }\r\n\r\n watch(visible, (visible) => {\r\n if (visible) {\r\n if (Array.isArray(props.data?.conditions)) {\r\n const conditions = cloneDeep(props.data?.conditions || [])\r\n addKeyValue(conditions)\r\n conditionList.value = conditions\r\n }\r\n attribute.value = cloneDeep(props.data?.attribute || {})\r\n if (!unref(attribute).color) {\r\n attribute.value.color = ''\r\n }\r\n if (!unref(attribute).iconColor) {\r\n attribute.value.iconColor = ''\r\n }\r\n } else {\r\n conditionList.value = []\r\n attribute.value = {}\r\n }\r\n }, {\r\n flush: 'post'\r\n })\r\n\r\n const showModal = () => {\r\n visible.value = true\r\n }\r\n\r\n const addCondition = (join?: '||' | '&&') => {\r\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\r\n conditionList.value = [{\r\n key: nanoid()\r\n }]\r\n } else if (unref(conditionList)[0] != null) {\r\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\r\n conditionList.value = [{\r\n join,\r\n conditions: [\r\n unref(conditionList)[0],\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }]\r\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\r\n conditionList.value[0].conditions.push({\r\n key: nanoid()\r\n })\r\n }\r\n }\r\n }\r\n\r\n provide(CHANGE_CONDITION, {\r\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\r\n let conditions = conditionList.value\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions[index] = condition\r\n }\r\n },\r\n deleteCondition (index: number, path: string) {\r\n if (!path) {\r\n conditionList.value = []\r\n return\r\n }\r\n let conditions = unref(conditionList)\r\n const pathArr = path.split('-')\r\n if (pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions.splice(index, 1)\r\n if (conditions.length === 1) {\r\n if (pathArr.length > 0) {\r\n const lastIndex = pathArr.length - 1\r\n const lastPath = pathArr[lastIndex]\r\n const wrapperPath = pathArr.slice(0, lastIndex)\r\n let wrapperConditions = unref(conditionList)\r\n let wrapperJoin = ''\r\n for (const j of wrapperPath) {\r\n if (wrapperConditions[+j]) {\r\n wrapperJoin = wrapperConditions[+j]?.join\r\n wrapperConditions = wrapperConditions[+j]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n // 合并\r\n if (wrapperJoin === conditions[0].join) {\r\n if (Array.isArray(conditions[0].conditions)) {\r\n const temp = cloneDeep(conditions[0].conditions)\r\n wrapperConditions.splice(+lastPath, 1)\r\n wrapperConditions.splice(+lastPath, 0, ...temp)\r\n }\r\n } else {\r\n wrapperConditions[+lastPath] = conditions[0]\r\n }\r\n }\r\n } else if (conditions.length === 0) {\r\n conditionList.value = []\r\n }\r\n }\r\n }\r\n },\r\n addCondition (path: string, index: number, join: '||' | '&&') {\r\n let conditions = unref(conditionList)\r\n let cdJoin = ''\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n cdJoin = conditions[+i]?.join\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (cdJoin === join) {\r\n conditions.splice(index + 1, 0, {\r\n key: nanoid()\r\n })\r\n } else {\r\n const temp = cloneDeep(conditions[index])\r\n conditions[index] = {\r\n join,\r\n conditions: [\r\n temp,\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n })\r\n\r\n const onUploadChange = (imgSrc: string) => {\r\n attribute.value.icon = imgSrc\r\n // if (!unref(attribute).iconAlign) {\r\n // attribute.value.iconAlign = 'left'\r\n // }\r\n }\r\n\r\n const imgBaseUrl = computed(() => (window.config as any).imgBaseUrl)\r\n\r\n const iconOptions = ref([\r\n { label: '向下箭头', value: '/static/img/indicator-icon/arrow-down.svg' },\r\n { label: '向上箭头', value: '/static/img/indicator-icon/arrow-up.svg' }])\r\n\r\n expose({\r\n showModal\r\n })\r\n\r\n return {\r\n params,\r\n visible,\r\n conditionList,\r\n attribute,\r\n handleOk,\r\n addCondition,\r\n onUploadChange,\r\n imgBaseUrl,\r\n iconOptions\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-wrap {\r\n display: flex;\r\n align-items: center;\r\n .wrap-item {\r\n .title {\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n }\r\n .border {\r\n width: 100%;\r\n height: 400px;\r\n border: 1px solid #e8e8e8;\r\n overflow: auto;\r\n .row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n }\r\n }\r\n &.left {\r\n width: calc(60% - 20px);\r\n margin-right: 20px;\r\n }\r\n &.right {\r\n width: 40%;\r\n .border {\r\n padding: 10px;\r\n }\r\n }\r\n }\r\n\r\n .add-and-condition {\r\n margin-left: 15px;\r\n margin-right: 15px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n width=\"60%\"\r\n v-model:visible=\"visible\"\r\n :title=\"`条件设置`\"\r\n :destroyOnClose=\"true\"\r\n :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n @ok=\"handleOk\"\r\n >\r\n\r\n <div class=\"config-wrap\">\r\n <div class=\"wrap-item left\">\r\n <div class=\"title\">\r\n 条件配置\r\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\r\n <a-button\r\n class=\"add-and-condition\"\r\n @click=\"addCondition('&&')\"\r\n >\r\n 添加且条件\r\n </a-button>\r\n <a-button\r\n class=\"add-or-condition\"\r\n @click=\"addCondition('||')\"\r\n >\r\n 添加或条件\r\n </a-button>\r\n </template>\r\n <a-button style=\"margin-left: 15px;\" @click=\"addCondition()\" v-else>\r\n 添加条件\r\n </a-button>\r\n </div>\r\n <div class=\"border\">\r\n <condition-list\r\n class=\"condition-list\"\r\n :list=\"conditionList\"\r\n :level=\"0\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"wrap-item right\">\r\n <div class=\"title\">属性配置</div>\r\n <div class=\"border\">\r\n <div class=\"row\">\r\n <div>字体颜色:</div>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.color\"\r\n :size=\"25\"\r\n />\r\n </div>\r\n <div class=\"row\">\r\n <div>图标:</div>\r\n <div style=\"display: flex; align-items: center;justify-items: center;\">\r\n <!-- fff -->\r\n <!-- <image-picker\r\n :value=\"attribute.icon\"\r\n :mini=\"true\"\r\n @change=\"onUploadChange\"\r\n /> -->\r\n <!-- <img class=\"image\" v-if=\" attribute.icon\" :src=\"imgBaseUrl + attribute.icon\" style=\"width: 16px;height: 16px\"/> -->\r\n <!-- <svg-icon v-if=\"attribute.icon\" :iSrc=\"attribute.icon\"></svg-icon> -->\r\n <a-select v-model:value=\"attribute.icon\" :options=\"iconOptions\" style=\"width: 160px\"></a-select>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.iconColor\"\r\n :size=\"25\"\r\n />\r\n <!-- </div> -->\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\" v-if=\"attribute.icon\">\r\n <div>图标位置:</div>\r\n <a-radio-group v-model:value=\"attribute.iconAlign\">\r\n <a-radio-button value=\"left\">靠左</a-radio-button>\r\n <a-radio-button value=\"right\">靠右</a-radio-button>\r\n </a-radio-group>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch, unref, provide, computed } from 'vue'\r\nimport ConditionList from './ConditionList.vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { nanoid } from 'nanoid'\r\nimport { CHANGE_CONDITION } from '@/utils/constant'\r\nimport PickColors from 'vue-pick-colors'\r\n// import SvgIcon from '@/components/SvgIcon.vue'\r\n// import ImagePicker from './ImagePicker.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n message,\r\n Select as ASelect\r\n // Select as ASelect\r\n} from 'ant-design-vue'\r\nexport default defineComponent({\r\n components: {\r\n ConditionList,\r\n PickColors,\r\n // ImagePicker,\r\n AButton,\r\n AModal,\r\n ASelect\r\n // SvgIcon\r\n },\r\n props: {\r\n data: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n default: -1\r\n }\r\n },\r\n setup (props, { emit, expose }) {\r\n const visible = ref(false)\r\n const conditionList = ref<{ [key: string]: any } []>([])\r\n const attribute = ref<{ [key: string]: any }>({})\r\n const params = computed(() => ({\r\n pageId: unref('pageId')\r\n }))\r\n const getSameLevelList = (list: { [key: string]: any } []): { [key: string]: any } [] => {\r\n const result: { [key: string]: any } [] = []\r\n for (const l of list) {\r\n if (l.conditions) {\r\n result.push(...getSameLevelList(l.conditions))\r\n } else {\r\n result.push(l)\r\n }\r\n }\r\n return result\r\n }\r\n const handleOk = () => {\r\n const sameLevelList = getSameLevelList(unref(conditionList))\r\n if (sameLevelList.find((v: any) => !v.value || !v.rule)) {\r\n message.error('条件值或规则不能为空')\r\n return\r\n }\r\n emit('save', {\r\n conditions: unref(conditionList),\r\n attribute: unref(attribute)\r\n })\r\n visible.value = false\r\n }\r\n\r\n const addKeyValue = (conditions: { [key: string]: any } []) => {\r\n for (const item of conditions) {\r\n if (item.conditions?.length) {\r\n addKeyValue(item.conditions)\r\n } else {\r\n item.key = nanoid()\r\n }\r\n }\r\n }\r\n\r\n watch(visible, (visible) => {\r\n if (visible) {\r\n if (Array.isArray(props.data?.conditions)) {\r\n const conditions = cloneDeep(props.data?.conditions || [])\r\n addKeyValue(conditions)\r\n conditionList.value = conditions\r\n }\r\n attribute.value = cloneDeep(props.data?.attribute || {})\r\n if (!unref(attribute).color) {\r\n attribute.value.color = ''\r\n }\r\n if (!unref(attribute).iconColor) {\r\n attribute.value.iconColor = ''\r\n }\r\n } else {\r\n conditionList.value = []\r\n attribute.value = {}\r\n }\r\n }, {\r\n flush: 'post'\r\n })\r\n\r\n const showModal = () => {\r\n visible.value = true\r\n }\r\n\r\n const addCondition = (join?: '||' | '&&') => {\r\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\r\n conditionList.value = [{\r\n key: nanoid()\r\n }]\r\n } else if (unref(conditionList)[0] != null) {\r\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\r\n conditionList.value = [{\r\n join,\r\n conditions: [\r\n unref(conditionList)[0],\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }]\r\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\r\n conditionList.value[0].conditions.push({\r\n key: nanoid()\r\n })\r\n }\r\n }\r\n }\r\n\r\n provide(CHANGE_CONDITION, {\r\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\r\n let conditions = conditionList.value\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions[index] = condition\r\n }\r\n },\r\n deleteCondition (index: number, path: string) {\r\n if (!path) {\r\n conditionList.value = []\r\n return\r\n }\r\n let conditions = unref(conditionList)\r\n const pathArr = path.split('-')\r\n if (pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions.splice(index, 1)\r\n if (conditions.length === 1) {\r\n if (pathArr.length > 0) {\r\n const lastIndex = pathArr.length - 1\r\n const lastPath = pathArr[lastIndex]\r\n const wrapperPath = pathArr.slice(0, lastIndex)\r\n let wrapperConditions = unref(conditionList)\r\n let wrapperJoin = ''\r\n for (const j of wrapperPath) {\r\n if (wrapperConditions[+j]) {\r\n wrapperJoin = wrapperConditions[+j]?.join\r\n wrapperConditions = wrapperConditions[+j]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n // 合并\r\n if (wrapperJoin === conditions[0].join) {\r\n if (Array.isArray(conditions[0].conditions)) {\r\n const temp = cloneDeep(conditions[0].conditions)\r\n wrapperConditions.splice(+lastPath, 1)\r\n wrapperConditions.splice(+lastPath, 0, ...temp)\r\n }\r\n } else {\r\n wrapperConditions[+lastPath] = conditions[0]\r\n }\r\n }\r\n } else if (conditions.length === 0) {\r\n conditionList.value = []\r\n }\r\n }\r\n }\r\n },\r\n addCondition (path: string, index: number, join: '||' | '&&') {\r\n let conditions = unref(conditionList)\r\n let cdJoin = ''\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n cdJoin = conditions[+i]?.join\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (cdJoin === join) {\r\n conditions.splice(index + 1, 0, {\r\n key: nanoid()\r\n })\r\n } else {\r\n const temp = cloneDeep(conditions[index])\r\n conditions[index] = {\r\n join,\r\n conditions: [\r\n temp,\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n })\r\n\r\n const onUploadChange = (imgSrc: string) => {\r\n attribute.value.icon = imgSrc\r\n // if (!unref(attribute).iconAlign) {\r\n // attribute.value.iconAlign = 'left'\r\n // }\r\n }\r\n\r\n const imgBaseUrl = computed(() => (window.config as any).imgBaseUrl)\r\n\r\n const iconOptions = ref([\r\n { label: '向下箭头', value: '/static/img/indicator-icon/arrow-down.svg' },\r\n { label: '向上箭头', value: '/static/img/indicator-icon/arrow-up.svg' }])\r\n\r\n expose({\r\n showModal\r\n })\r\n\r\n return {\r\n params,\r\n visible,\r\n conditionList,\r\n attribute,\r\n handleOk,\r\n addCondition,\r\n onUploadChange,\r\n imgBaseUrl,\r\n iconOptions\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-wrap {\r\n display: flex;\r\n align-items: center;\r\n .wrap-item {\r\n .title {\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n }\r\n .border {\r\n width: 100%;\r\n height: 400px;\r\n border: 1px solid #e8e8e8;\r\n overflow: auto;\r\n .row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n }\r\n }\r\n &.left {\r\n width: calc(60% - 20px);\r\n margin-right: 20px;\r\n }\r\n &.right {\r\n width: 40%;\r\n .border {\r\n padding: 10px;\r\n }\r\n }\r\n }\r\n\r\n .add-and-condition {\r\n margin-left: 15px;\r\n margin-right: 15px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-modal width=\"60%\" v-model:visible=\"visible\" :title=\"`条件列表`\" :destroyOnClose=\"true\" :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\" @ok=\"close\">\r\n\r\n <a-button @click=\"addRule\">新增条件</a-button>\r\n <a-table class=\"column-table\" size=\"small\" :columns=\"configColumns\" :data-source=\"rules\" :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\" bordered>\r\n <template #bodyCell=\"{ column, record, index }\">\r\n <template v-if=\"column.dataIndex === 'name'\">\r\n <a-input size=\"small\" v-model:value=\"record.name\"></a-input>\r\n </template>\r\n <template v-if=\"column.dataIndex === 'operation'\">\r\n <a-button size=\"small\" @click=\"openRuleModal(record, index)\">编辑</a-button>\r\n <a-button size=\"small\" @click=\"deleteRule(index)\" style=\"margin-left: 6px\">删除</a-button>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-modal>\r\n <condition-wrap\r\n ref=\"conditionsRef\"\r\n :data=\"currentData\"\r\n :index=\"currentIndex\"\r\n @save=\"closeRuleModal\"\r\n />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, unref } from 'vue'\r\nimport ConditionWrap from '../components/ConditionWrap.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n Table as ATable,\r\n Input as AInput\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\ninterface TRule {\r\n conditionCode: string,\r\n name: string,\r\n condition: any[],\r\n attribute: any\r\n}\r\ntype TRuleArr = TRule[]\r\nexport default defineComponent({\r\n components: {\r\n AModal,\r\n AButton,\r\n ATable,\r\n ConditionWrap,\r\n AInput\r\n },\r\n setup (props, { expose, emit }) {\r\n console.log(props)\r\n const visible = ref(false)\r\n const conditionsRef = ref()\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const configColumns: any = [\r\n {\r\n title: '条件标题',\r\n dataIndex: 'name',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '条件内容',\r\n dataIndex: 'conditionCode',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 250\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'operation',\r\n ellipsis: true,\r\n width: 160\r\n }\r\n ]\r\n const rules = ref<TRuleArr>([])\r\n const curTableCompColumn = ref<any>()\r\n // 把条件配置转成表达式\r\n const handleConditions = (conditions: any, join: any = '') => {\r\n let result = ''\r\n conditions.forEach((condition, index) => {\r\n const { value, rule } = condition\r\n if (condition.conditions) {\r\n result += `(${handleConditions(condition.conditions, condition.join)})`\r\n } else if (value && rule) {\r\n result += `value ${rule} '${value}'`\r\n }\r\n result += `${index === conditions.length - 1 ? '' : join ? ' ' + join + ' ' : ''}`\r\n })\r\n return result\r\n }\r\n // 打开弹窗初始化\r\n const open = (tableCompColumn: any) => {\r\n rules.value = []\r\n curTableCompColumn.value = tableCompColumn\r\n const { rules: oldRules, conditionCode, conditions, attribute } = tableCompColumn\r\n if (oldRules) {\r\n rules.value = cloneDeep(oldRules)\r\n } else {\r\n if (conditionCode) {\r\n const newRules = { conditionCode, conditions, attribute, name: '新条件' } as any\r\n rules.value.push(cloneDeep(newRules))\r\n delete tableCompColumn.conditionCode\r\n delete tableCompColumn.conditions\r\n delete tableCompColumn.attribute\r\n }\r\n }\r\n visible.value = true\r\n }\r\n // 关闭弹窗提交\r\n const close = () => {\r\n visible.value = false\r\n for (const rule of rules.value) {\r\n if (rule.conditionCode === '') return '不能条件为空!'\r\n }\r\n emit('confirm', unref(rules))\r\n }\r\n // 新建规则\r\n const addRule = () => {\r\n rules.value.push({\r\n conditionCode: '',\r\n name: '新条件',\r\n condition: [],\r\n attribute: {}\r\n })\r\n }\r\n // 关闭编辑规则弹窗\r\n const closeRuleModal = (data: any) => {\r\n data.conditionCode = handleConditions(data.conditions)\r\n Object.assign(rules.value[currentIndex.value], data)\r\n }\r\n // 打开编辑规则弹窗\r\n const openRuleModal = (record: any, index: number) => {\r\n unref(conditionsRef).showModal()\r\n currentData.value = cloneDeep(record)\r\n currentIndex.value = index\r\n }\r\n const deleteRule = (index: number) => { rules.value.splice(index, 1) }\r\n expose({\r\n open\r\n })\r\n\r\n return {\r\n visible,\r\n currentData,\r\n currentIndex,\r\n configColumns,\r\n conditionsRef,\r\n rules,\r\n open,\r\n close,\r\n addRule,\r\n openRuleModal,\r\n closeRuleModal,\r\n deleteRule\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\"></style>\r\n","<template>\r\n <a-modal width=\"60%\" v-model:visible=\"visible\" :title=\"`条件列表`\" :destroyOnClose=\"true\" :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\" @ok=\"close\">\r\n\r\n <a-button @click=\"addRule\">新增条件</a-button>\r\n <a-table class=\"column-table\" size=\"small\" :columns=\"configColumns\" :data-source=\"rules\" :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\" bordered>\r\n <template #bodyCell=\"{ column, record, index }\">\r\n <template v-if=\"column.dataIndex === 'name'\">\r\n <a-input size=\"small\" v-model:value=\"record.name\"></a-input>\r\n </template>\r\n <template v-if=\"column.dataIndex === 'operation'\">\r\n <a-button size=\"small\" @click=\"openRuleModal(record, index)\">编辑</a-button>\r\n <a-button size=\"small\" @click=\"deleteRule(index)\" style=\"margin-left: 6px\">删除</a-button>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-modal>\r\n <condition-wrap\r\n ref=\"conditionsRef\"\r\n :data=\"currentData\"\r\n :index=\"currentIndex\"\r\n @save=\"closeRuleModal\"\r\n />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, unref } from 'vue'\r\nimport ConditionWrap from '../components/ConditionWrap.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n Table as ATable,\r\n Input as AInput\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\ninterface TRule {\r\n conditionCode: string,\r\n name: string,\r\n condition: any[],\r\n attribute: any\r\n}\r\ntype TRuleArr = TRule[]\r\nexport default defineComponent({\r\n components: {\r\n AModal,\r\n AButton,\r\n ATable,\r\n ConditionWrap,\r\n AInput\r\n },\r\n setup (props, { expose, emit }) {\r\n console.log(props)\r\n const visible = ref(false)\r\n const conditionsRef = ref()\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const configColumns: any = [\r\n {\r\n title: '条件标题',\r\n dataIndex: 'name',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '条件内容',\r\n dataIndex: 'conditionCode',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 250\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'operation',\r\n ellipsis: true,\r\n width: 160\r\n }\r\n ]\r\n const rules = ref<TRuleArr>([])\r\n const curTableCompColumn = ref<any>()\r\n // 把条件配置转成表达式\r\n const handleConditions = (conditions: any, join: any = '') => {\r\n let result = ''\r\n conditions.forEach((condition, index) => {\r\n const { value, rule } = condition\r\n if (condition.conditions) {\r\n result += `(${handleConditions(condition.conditions, condition.join)})`\r\n } else if (value && rule) {\r\n result += `value ${rule} '${value}'`\r\n }\r\n result += `${index === conditions.length - 1 ? '' : join ? ' ' + join + ' ' : ''}`\r\n })\r\n return result\r\n }\r\n // 打开弹窗初始化\r\n const open = (tableCompColumn: any) => {\r\n rules.value = []\r\n curTableCompColumn.value = tableCompColumn\r\n const { rules: oldRules, conditionCode, conditions, attribute } = tableCompColumn\r\n if (oldRules) {\r\n rules.value = cloneDeep(oldRules)\r\n } else {\r\n if (conditionCode) {\r\n const newRules = { conditionCode, conditions, attribute, name: '新条件' } as any\r\n rules.value.push(cloneDeep(newRules))\r\n delete tableCompColumn.conditionCode\r\n delete tableCompColumn.conditions\r\n delete tableCompColumn.attribute\r\n }\r\n }\r\n visible.value = true\r\n }\r\n // 关闭弹窗提交\r\n const close = () => {\r\n visible.value = false\r\n for (const rule of rules.value) {\r\n if (rule.conditionCode === '') return '不能条件为空!'\r\n }\r\n emit('confirm', unref(rules))\r\n }\r\n // 新建规则\r\n const addRule = () => {\r\n rules.value.push({\r\n conditionCode: '',\r\n name: '新条件',\r\n condition: [],\r\n attribute: {}\r\n })\r\n }\r\n // 关闭编辑规则弹窗\r\n const closeRuleModal = (data: any) => {\r\n data.conditionCode = handleConditions(data.conditions)\r\n Object.assign(rules.value[currentIndex.value], data)\r\n }\r\n // 打开编辑规则弹窗\r\n const openRuleModal = (record: any, index: number) => {\r\n unref(conditionsRef).showModal()\r\n currentData.value = cloneDeep(record)\r\n currentIndex.value = index\r\n }\r\n const deleteRule = (index: number) => { rules.value.splice(index, 1) }\r\n expose({\r\n open\r\n })\r\n\r\n return {\r\n visible,\r\n currentData,\r\n currentIndex,\r\n configColumns,\r\n conditionsRef,\r\n rules,\r\n open,\r\n close,\r\n addRule,\r\n openRuleModal,\r\n closeRuleModal,\r\n deleteRule\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\"></style>\r\n","<template>\r\n <div class=\"table-column-config\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"configData\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, text, record, index }\">\r\n <template v-if=\"column.dataIndex === 'style'\">\r\n <a-checkbox\r\n @change=\"changeRenderBool(record, $event)\"\r\n :checked=\"record.style\"\r\n ></a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'width'\">\r\n <a-input v-model:value.trim=\"record.width\" />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'renderText'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.renderText\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'renderText', '列自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerTemplate'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.headerTemplate\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'headerTemplate', '列表头自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerAlign'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.headerAlign\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'align'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.align\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'fixed'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.fixed\"\r\n >\r\n <a-select-option value=\"\">不固定</a-select-option>\r\n <a-select-option value=\"left\">靠左</a-select-option>\r\n <a-select-option value=\"right\">靠右</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'dataFormat'\">\r\n <a-select\r\n v-model:value=\"record.dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit'\">\r\n <a-input-number\r\n v-if=\"record.dataFormat && record.dataFormat.includes('#.00')\"\r\n v-model:value=\"record.retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'calculateShow'\">\r\n <a-checkbox v-model:checked=\"record.calculateShow.sum\">合计</a-checkbox>\r\n <a-checkbox v-model:checked=\"record.calculateShow.avg\">平均</a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'conditions'\">\r\n <code-outlined class=\"icon\" @click.stop=\"openConditions(index)\"/>\r\n </template>\r\n </template>\r\n </a-table>\r\n <a-modal\r\n :title=\"editorTitle\"\r\n v-model:visible=\"editorVisible\"\r\n destroy-on-close\r\n width=\"700px\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n centered\r\n :zIndex=\"1020\"\r\n okText=\"保存\"\r\n cancelText=\"取消\"\r\n @ok=\"handleOk\"\r\n >\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"optionCode\"\r\n @change=\"onEditorChange\"\r\n />\r\n </a-modal>\r\n <conditions-table\r\n @confirm=\"confirmConditions\"\r\n ref=\"conditionsTableRef\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n defineComponent,\r\n ref,\r\n inject,\r\n watch,\r\n onMounted,\r\n unref,\r\n computed\r\n} from 'vue'\r\nimport {\r\n Table as ATable,\r\n Modal as AModal,\r\n Checkbox as ACheckbox,\r\n Input as AInput,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport { CodeOutlined } from '@ant-design/icons-vue'\r\nimport 'ant-design-vue/es/table/style'\r\nimport Editor from '@/indicator/editor'\r\nimport ConditionsTable from './components/ConditionsTable.vue'\r\n\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义',\r\n dataIndex: 'style',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '列宽度(px/%)',\r\n dataIndex: 'width',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义函数',\r\n dataIndex: 'renderText',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '列表头自定义函数',\r\n dataIndex: 'headerTemplate',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '表头/表尾列对齐方式',\r\n dataIndex: 'headerAlign',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '内容列对齐方式',\r\n dataIndex: 'align',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '固定当前列',\r\n dataIndex: 'fixed',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '计算行',\r\n dataIndex: 'calculateShow',\r\n ellipsis: true,\r\n width: 180\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'conditions',\r\n ellipsis: true,\r\n width: 120\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AModal,\r\n ACheckbox,\r\n AInput,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n Editor,\r\n CodeOutlined,\r\n ConditionsTable\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n\r\n const isGroupTable = computed(\r\n () => !!unref(selectedComponent)?.isGroupTable\r\n )\r\n const tableColumns = computed(() => {\r\n return unref(selectedComponent)?.tableColumns || []\r\n })\r\n const configData = ref([])\r\n let saveObj = null\r\n let saveKey = ''\r\n const optionCode = ref<string>('')\r\n const editorTitle = ref<String>('')\r\n const editorVisible = ref<any>(false)\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n const handleTableData = () => {\r\n let columns = []\r\n configData.value = []\r\n if (!isGroupTable.value) {\r\n const queryColumnList = unref(graphicConfig)?.queryColumnList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...queryColumnList, ...indicators]\r\n } else {\r\n const rowHeaderList = unref(graphicConfig)?.rowHeaderList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...rowHeaderList, ...indicators]\r\n }\r\n console.log('columns', columns, tableColumns)\r\n columns.forEach((column) => {\r\n let tableColumn = unref(tableColumns)?.find((item: any) => item.label === column.label)\r\n if (!tableColumn) {\r\n tableColumn = {\r\n label: column.label,\r\n prop: column.label,\r\n style: false,\r\n width: '',\r\n renderText: '',\r\n headerTemplate: '',\r\n headerAlign: 'left',\r\n align: 'left',\r\n fixed: '',\r\n dataFormat: [],\r\n retentiondigit: null,\r\n calculateShow: { // 表格计算显示哪些行\r\n sum: false, // 求和\r\n avg: false // 求平均\r\n },\r\n conditions: [], // 条件配置\r\n attribute: {} // 条件属性\r\n }\r\n }\r\n if (!tableColumn.calculateShow) {\r\n tableColumn.calculateShow = {\r\n sum: false,\r\n avg: false\r\n }\r\n }\r\n configData.value.push(tableColumn)\r\n })\r\n selectedComponent.value.tableColumns = configData.value\r\n }\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n // 是否开启列自定义函数\r\n const changeRenderBool = (row, e) => {\r\n row.style = e.target.checked\r\n if (row.style) {\r\n if (row.renderBool === undefined) {\r\n row.renderBool = false\r\n }\r\n } else {\r\n delete row.renderBool\r\n }\r\n }\r\n const renderSave = (obj: any, key: string, title: string) => {\r\n if (obj && key) {\r\n saveObj = obj\r\n saveKey = key\r\n optionCode.value = obj[key] || ''\r\n editorVisible.value = true\r\n editorTitle.value = title\r\n }\r\n }\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const handleOk = () => {\r\n if (saveObj && saveKey) {\r\n saveObj[saveKey] = optionCode.value\r\n }\r\n optionCode.value = ''\r\n editorVisible.value = false\r\n }\r\n // 条件属性设置弹窗\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const conditionsTableRef = ref()\r\n const openConditions = (index: number) => {\r\n currentIndex.value = index\r\n currentData.value = configData.value[index]\r\n unref(conditionsTableRef).open(configData.value[index])\r\n }\r\n const confirmConditions = (rules: any) => {\r\n currentData.value.rules = rules\r\n }\r\n return {\r\n configColumns,\r\n configData,\r\n editorTitle,\r\n editorVisible,\r\n optionCode,\r\n handleOk,\r\n renderSave,\r\n onEditorChange,\r\n changeRenderBool,\r\n openConditions,\r\n confirmConditions,\r\n conditionsTableRef\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"table-column-config\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"configData\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, text, record, index }\">\r\n <template v-if=\"column.dataIndex === 'style'\">\r\n <a-checkbox\r\n @change=\"changeRenderBool(record, $event)\"\r\n :checked=\"record.style\"\r\n ></a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'width'\">\r\n <a-input v-model:value.trim=\"record.width\" />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'renderText'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.renderText\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'renderText', '列自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerTemplate'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.headerTemplate\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'headerTemplate', '列表头自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerAlign'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.headerAlign\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'align'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.align\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'fixed'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.fixed\"\r\n >\r\n <a-select-option value=\"\">不固定</a-select-option>\r\n <a-select-option value=\"left\">靠左</a-select-option>\r\n <a-select-option value=\"right\">靠右</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'dataFormat'\">\r\n <a-select\r\n v-model:value=\"record.dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit'\">\r\n <a-input-number\r\n v-if=\"record.dataFormat && record.dataFormat.includes('#.00')\"\r\n v-model:value=\"record.retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'calculateShow'\">\r\n <a-checkbox v-model:checked=\"record.calculateShow.sum\">合计</a-checkbox>\r\n <a-checkbox v-model:checked=\"record.calculateShow.avg\">平均</a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'conditions'\">\r\n <code-outlined class=\"icon\" @click.stop=\"openConditions(index)\"/>\r\n </template>\r\n </template>\r\n </a-table>\r\n <a-modal\r\n :title=\"editorTitle\"\r\n v-model:visible=\"editorVisible\"\r\n destroy-on-close\r\n width=\"700px\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n centered\r\n :zIndex=\"1020\"\r\n okText=\"保存\"\r\n cancelText=\"取消\"\r\n @ok=\"handleOk\"\r\n >\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"optionCode\"\r\n @change=\"onEditorChange\"\r\n />\r\n </a-modal>\r\n <conditions-table\r\n @confirm=\"confirmConditions\"\r\n ref=\"conditionsTableRef\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n defineComponent,\r\n ref,\r\n inject,\r\n watch,\r\n onMounted,\r\n unref,\r\n computed\r\n} from 'vue'\r\nimport {\r\n Table as ATable,\r\n Modal as AModal,\r\n Checkbox as ACheckbox,\r\n Input as AInput,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport { CodeOutlined } from '@ant-design/icons-vue'\r\nimport 'ant-design-vue/es/table/style'\r\nimport Editor from '@/indicator/editor'\r\nimport ConditionsTable from './components/ConditionsTable.vue'\r\n\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义',\r\n dataIndex: 'style',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '列宽度(px/%)',\r\n dataIndex: 'width',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义函数',\r\n dataIndex: 'renderText',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '列表头自定义函数',\r\n dataIndex: 'headerTemplate',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '表头/表尾列对齐方式',\r\n dataIndex: 'headerAlign',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '内容列对齐方式',\r\n dataIndex: 'align',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '固定当前列',\r\n dataIndex: 'fixed',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '计算行',\r\n dataIndex: 'calculateShow',\r\n ellipsis: true,\r\n width: 180\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'conditions',\r\n ellipsis: true,\r\n width: 120\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AModal,\r\n ACheckbox,\r\n AInput,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n Editor,\r\n CodeOutlined,\r\n ConditionsTable\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n\r\n const isGroupTable = computed(\r\n () => !!unref(selectedComponent)?.isGroupTable\r\n )\r\n const tableColumns = computed(() => {\r\n return unref(selectedComponent)?.tableColumns || []\r\n })\r\n const configData = ref([])\r\n let saveObj = null\r\n let saveKey = ''\r\n const optionCode = ref<string>('')\r\n const editorTitle = ref<String>('')\r\n const editorVisible = ref<any>(false)\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n const handleTableData = () => {\r\n let columns = []\r\n configData.value = []\r\n if (!isGroupTable.value) {\r\n const queryColumnList = unref(graphicConfig)?.queryColumnList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...queryColumnList, ...indicators]\r\n } else {\r\n const rowHeaderList = unref(graphicConfig)?.rowHeaderList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...rowHeaderList, ...indicators]\r\n }\r\n console.log('columns', columns, tableColumns)\r\n columns.forEach((column) => {\r\n let tableColumn = unref(tableColumns)?.find((item: any) => item.label === column.label)\r\n if (!tableColumn) {\r\n tableColumn = {\r\n label: column.label,\r\n prop: column.label,\r\n style: false,\r\n width: '',\r\n renderText: '',\r\n headerTemplate: '',\r\n headerAlign: 'left',\r\n align: 'left',\r\n fixed: '',\r\n dataFormat: [],\r\n retentiondigit: null,\r\n calculateShow: { // 表格计算显示哪些行\r\n sum: false, // 求和\r\n avg: false // 求平均\r\n },\r\n conditions: [], // 条件配置\r\n attribute: {} // 条件属性\r\n }\r\n }\r\n if (!tableColumn.calculateShow) {\r\n tableColumn.calculateShow = {\r\n sum: false,\r\n avg: false\r\n }\r\n }\r\n configData.value.push(tableColumn)\r\n })\r\n selectedComponent.value.tableColumns = configData.value\r\n }\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n // 是否开启列自定义函数\r\n const changeRenderBool = (row, e) => {\r\n row.style = e.target.checked\r\n if (row.style) {\r\n if (row.renderBool === undefined) {\r\n row.renderBool = false\r\n }\r\n } else {\r\n delete row.renderBool\r\n }\r\n }\r\n const renderSave = (obj: any, key: string, title: string) => {\r\n if (obj && key) {\r\n saveObj = obj\r\n saveKey = key\r\n optionCode.value = obj[key] || ''\r\n editorVisible.value = true\r\n editorTitle.value = title\r\n }\r\n }\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const handleOk = () => {\r\n if (saveObj && saveKey) {\r\n saveObj[saveKey] = optionCode.value\r\n }\r\n optionCode.value = ''\r\n editorVisible.value = false\r\n }\r\n // 条件属性设置弹窗\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const conditionsTableRef = ref()\r\n const openConditions = (index: number) => {\r\n currentIndex.value = index\r\n currentData.value = configData.value[index]\r\n unref(conditionsTableRef).open(configData.value[index])\r\n }\r\n const confirmConditions = (rules: any) => {\r\n currentData.value.rules = rules\r\n }\r\n return {\r\n configColumns,\r\n configData,\r\n editorTitle,\r\n editorVisible,\r\n optionCode,\r\n handleOk,\r\n renderSave,\r\n onEditorChange,\r\n changeRenderBool,\r\n openConditions,\r\n confirmConditions,\r\n conditionsTableRef\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <a-collapse-panel key=\"cardFormat\" header=\"数据格式化\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"graphicConfig.indicators || []\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.dataIndex === 'dataFormat' && columnsConfigMap[record.label]\">\r\n <a-select\r\n v-model:value=\"columnsConfigMap[record.label].dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit' && columnsConfigMap[record.label]\">\r\n <a-input-number\r\n v-if=\"\r\n columnsConfigMap[record.label].dataFormat && columnsConfigMap[record.label].dataFormat.includes('#.00')\r\n \"\r\n v-model:value=\"columnsConfigMap[record.label].retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-collapse-panel>\r\n </a-collapse>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, inject, watch, onMounted, unref, computed, ref } from 'vue'\r\nimport {\r\n Table as ATable,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport 'ant-design-vue/es/table/style'\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const activePanel = ref<string[]>(['cardFormat'])\r\n\r\n const handleTableData = () => {\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n const columnsConfigMap = selectedComponent.value.columnsConfigMap || {}\r\n const defaultConfig = { dataFormat: [], retentiondigit: '' }\r\n const newColumnsConfig = indicators.reduce(\r\n (a: any, b: any) => ({ ...a, [b.label]: { ...defaultConfig, ...(columnsConfigMap[b.label] || {}) } }),\r\n {}\r\n )\r\n selectedComponent.value.columnsConfigMap = newColumnsConfig\r\n }\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n const columnsConfigMap = computed(() => selectedComponent.value.columnsConfigMap || {})\r\n return {\r\n selectedComponent,\r\n configColumns,\r\n graphicConfig,\r\n columnsConfigMap,\r\n activePanel\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <a-collapse-panel key=\"cardFormat\" header=\"数据格式化\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"graphicConfig.indicators || []\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.dataIndex === 'dataFormat' && columnsConfigMap[record.label]\">\r\n <a-select\r\n v-model:value=\"columnsConfigMap[record.label].dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit' && columnsConfigMap[record.label]\">\r\n <a-input-number\r\n v-if=\"\r\n columnsConfigMap[record.label].dataFormat && columnsConfigMap[record.label].dataFormat.includes('#.00')\r\n \"\r\n v-model:value=\"columnsConfigMap[record.label].retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-collapse-panel>\r\n </a-collapse>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, inject, watch, onMounted, unref, computed, ref } from 'vue'\r\nimport {\r\n Table as ATable,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport 'ant-design-vue/es/table/style'\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const activePanel = ref<string[]>(['cardFormat'])\r\n\r\n const handleTableData = () => {\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n const columnsConfigMap = selectedComponent.value.columnsConfigMap || {}\r\n const defaultConfig = { dataFormat: [], retentiondigit: '' }\r\n const newColumnsConfig = indicators.reduce(\r\n (a: any, b: any) => ({ ...a, [b.label]: { ...defaultConfig, ...(columnsConfigMap[b.label] || {}) } }),\r\n {}\r\n )\r\n selectedComponent.value.columnsConfigMap = newColumnsConfig\r\n }\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n const columnsConfigMap = computed(() => selectedComponent.value.columnsConfigMap || {})\r\n return {\r\n selectedComponent,\r\n configColumns,\r\n graphicConfig,\r\n columnsConfigMap,\r\n activePanel\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"style-group\">\r\n <template v-if=\"componentType !== 'table' && componentType !== 'card'\">\r\n <a-form-item label=\"图表类型\">\r\n <a-select v-model:value=\"type\" style=\"width: 100%\" @change=\"handleChangeType\">\r\n <a-select-option value=\"line\">折线图</a-select-option>\r\n <a-select-option value=\"bar\">柱状图</a-select-option>\r\n <a-select-option value=\"pie\">饼图</a-select-option>\r\n <a-select-option value=\"comboGraph\">组合图表</a-select-option>\r\n <a-select-option value=\"customGraph\">自定义图表</a-select-option>\r\n </a-select>\r\n </a-form-item>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <template v-if=\"isRenderForm(detailPropsGroup, type)\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <template #extra>\r\n <a-switch\r\n v-if=\"typeof detailPropsGroup.enableProps === 'boolean'\"\r\n :checked=\"detailPropsGroup.enableProps\"\r\n @change=\"onSwitchChange($event, detailPropsGroup.enablePropsName)\"\r\n @click=\"onSwitchClick\"\r\n />\r\n </template>\r\n <props-to-form\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n </template>\r\n <!-- 只有在选择自定义图表展示 -->\r\n <a-collapse-panel key=\"custom-option\" header=\"自定义option配置\" v-if=\"isShowOptionEditor\">\r\n <editor class=\"option-editor\" language=\"typescript\" :valueData=\"optionCode\" @change=\"onEditorChange\" />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'table'\">\r\n <a-collapse v-model:activeKey=\"tablePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title && detailPropsGroup.onlyType?.includes(componentType)\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <props-to-form\r\n :componentType=\"componentType\"\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n <a-collapse-panel key=\"tableColumn\" header=\"表格列配置\">\r\n <table-column-config />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"headerCellStyleMethod\" header=\"表头单元格样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.headerCellStyleMethod\"\r\n @change=\"tableEditorChange($event, 'headerCellStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"rowStyleMethod\" header=\"行样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.rowStyleMethod\"\r\n @change=\"tableEditorChange($event, 'rowStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'card'\">\r\n <indicator-container></indicator-container>\r\n </template>\r\n </div>\r\n</template>\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, ref, unref, inject } from 'vue'\r\nimport {\r\n FormItem as AFormItem,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel,\r\n Switch as ASwitch\r\n} from 'ant-design-vue'\r\nimport { DetailPropsGroups, DetailPropsGroup, PropsGroup, propsGroups } from './data'\r\nimport propsMap from '@/indicator/indicator-library/data-config/style-config-group/chart-props'\r\nimport PropsToForm from './props-to-form'\r\nimport TableColumnConfig from './table-column-config'\r\nimport IndicatorContainer from './indicator-container'\r\nimport Editor from '@/indicator/editor'\r\nimport {\r\n CHARTS_OPTIONS,\r\n TABLE_OPTIONS,\r\n UPDATE_CHARTS_OPTIONS,\r\n UPDATE_TABLE_OPTIONS,\r\n SELECTED_COMPONENT,\r\n REFRESH_DATA\r\n} from '@/utils/constant'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { pick } from 'lodash-es'\r\nimport 'ant-design-vue/es/collapse/style'\r\nexport default defineComponent({\r\n name: 'StyleConfigGroup',\r\n props: {\r\n componentType: {\r\n // 控件类型\r\n type: String,\r\n default: ''\r\n },\r\n isGroupTable: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n components: {\r\n PropsToForm,\r\n TableColumnConfig,\r\n Editor,\r\n AFormItem,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel,\r\n ASwitch,\r\n IndicatorContainer\r\n },\r\n setup (compProps) {\r\n const activePanel = ref<string[]>([])\r\n const tablePanel = ref<string[]>(['表格'])\r\n const chartsOptions = inject(CHARTS_OPTIONS) as {\r\n [key: string]: any\r\n }\r\n const tableOptions = inject(TABLE_OPTIONS) as any\r\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\r\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\r\n const refreshData = inject(REFRESH_DATA) as Function\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const handleChangeType = (val: string) => {\r\n updateChartsOptions(\r\n {\r\n ...propsMap[val]\r\n },\r\n false\r\n )\r\n unref(selectedComponent).type = unref(type)\r\n refreshData()\r\n }\r\n const type = computed(() => unref(chartsOptions)?.type)\r\n const groupTableProps = ['showTotalBool', 'totalName', 'expandAll']\r\n const detailPropsGroups = computed<DetailPropsGroups>(() => {\r\n return propsGroups\r\n .map((propsGroup: PropsGroup) => {\r\n const { props, title, enableProps, onlyType, excludeType } = propsGroup\r\n const pickProps = [] as string[]\r\n props.forEach((prop) => {\r\n if (typeof prop === 'string') {\r\n if (groupTableProps.includes(prop)) {\r\n if (compProps.isGroupTable) {\r\n pickProps.push(prop)\r\n }\r\n } else {\r\n pickProps.push(prop)\r\n }\r\n }\r\n })\r\n let filterEnableProps, filterProps\r\n if (compProps.componentType === 'table' && onlyType?.includes(compProps.componentType)) {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && tableOptions.value\r\n ? (tableOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(tableOptions), pickProps)\r\n } else {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && chartsOptions.value\r\n ? (chartsOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(chartsOptions), pickProps)\r\n }\r\n return {\r\n title,\r\n enableProps: filterEnableProps,\r\n enablePropsName: enableProps,\r\n onlyType,\r\n excludeType,\r\n props: filterProps\r\n }\r\n }) // 过滤空属性组\r\n .filter(({ props }) => {\r\n return Object.keys(props).length > 0\r\n })\r\n })\r\n const isRenderForm = (detailPropsGroup: DetailPropsGroup, componentType: string) => {\r\n const { onlyType, excludeType } = detailPropsGroup\r\n if (onlyType == null && excludeType == null) {\r\n return true\r\n } else if (onlyType) {\r\n return lowerCaseIncludes(componentType, onlyType)\r\n } else if (excludeType) {\r\n return !lowerCaseIncludes(componentType, excludeType)\r\n }\r\n return false\r\n }\r\n const onSwitchClick = (checked: boolean | string | number, event: Event) => {\r\n event?.stopPropagation()\r\n return checked\r\n }\r\n const onSwitchChange = (value: any, key: string | undefined) => {\r\n if (key != null) {\r\n updateChartsOptions({\r\n [key]: value\r\n })\r\n }\r\n }\r\n const ComponentString = computed(() => JSON.stringify(unref(chartsOptions), null, 2))\r\n const updateComponentOptions = (code: string) => {\r\n try {\r\n const props = JSON.parse(code || '{}')\r\n updateChartsOptions(props, false)\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const optionCode = ref('')\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const tableEditorChange = (code: string, key) => {\r\n try {\r\n updateTableOptions({\r\n [key]: code\r\n })\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const isShowOptionEditor = computed(() => ['customGraph'].includes(unref(chartsOptions)?.type))\r\n return {\r\n type,\r\n handleChangeType,\r\n activePanel,\r\n tablePanel,\r\n ComponentString,\r\n updateComponentOptions,\r\n tableOptions,\r\n optionCode,\r\n onEditorChange,\r\n tableEditorChange,\r\n onSwitchClick,\r\n onSwitchChange,\r\n detailPropsGroups,\r\n isRenderForm,\r\n isShowOptionEditor\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.style-group {\r\n padding-right: 5px;\r\n width: 100%;\r\n\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n :deep(.ant-collapse-content) {\r\n width: 100%;\r\n .ant-collapse-content-box {\r\n width: 100%;\r\n }\r\n }\r\n}\r\n</style>\r\n<style lang=\"less\">\r\n.attribute-config .ant-collapse-content > .ant-collapse-content-box > editor {\r\n padding: 16px 10px;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"style-group\">\r\n <template v-if=\"componentType !== 'table' && componentType !== 'card'\">\r\n <a-form-item label=\"图表类型\">\r\n <a-select v-model:value=\"type\" style=\"width: 100%\" @change=\"handleChangeType\">\r\n <a-select-option value=\"line\">折线图</a-select-option>\r\n <a-select-option value=\"bar\">柱状图</a-select-option>\r\n <a-select-option value=\"pie\">饼图</a-select-option>\r\n <a-select-option value=\"comboGraph\">组合图表</a-select-option>\r\n <a-select-option value=\"customGraph\">自定义图表</a-select-option>\r\n </a-select>\r\n </a-form-item>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <template v-if=\"isRenderForm(detailPropsGroup, type)\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <template #extra>\r\n <a-switch\r\n v-if=\"typeof detailPropsGroup.enableProps === 'boolean'\"\r\n :checked=\"detailPropsGroup.enableProps\"\r\n @change=\"onSwitchChange($event, detailPropsGroup.enablePropsName)\"\r\n @click=\"onSwitchClick\"\r\n />\r\n </template>\r\n <props-to-form\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n </template>\r\n <!-- 只有在选择自定义图表展示 -->\r\n <a-collapse-panel key=\"custom-option\" header=\"自定义option配置\" v-if=\"isShowOptionEditor\">\r\n <editor class=\"option-editor\" language=\"typescript\" :valueData=\"optionCode\" @change=\"onEditorChange\" />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'table'\">\r\n <a-collapse v-model:activeKey=\"tablePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title && detailPropsGroup.onlyType?.includes(componentType)\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <props-to-form\r\n :componentType=\"componentType\"\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n <a-collapse-panel key=\"tableColumn\" header=\"表格列配置\">\r\n <table-column-config />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"headerCellStyleMethod\" header=\"表头单元格样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.headerCellStyleMethod\"\r\n @change=\"tableEditorChange($event, 'headerCellStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"rowStyleMethod\" header=\"行样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.rowStyleMethod\"\r\n @change=\"tableEditorChange($event, 'rowStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'card'\">\r\n <indicator-container></indicator-container>\r\n </template>\r\n </div>\r\n</template>\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, ref, unref, inject } from 'vue'\r\nimport {\r\n FormItem as AFormItem,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel,\r\n Switch as ASwitch\r\n} from 'ant-design-vue'\r\nimport { DetailPropsGroups, DetailPropsGroup, PropsGroup, propsGroups } from './data'\r\nimport propsMap from '@/indicator/indicator-library/data-config/style-config-group/chart-props'\r\nimport PropsToForm from './props-to-form'\r\nimport TableColumnConfig from './table-column-config'\r\nimport IndicatorContainer from './indicator-container'\r\nimport Editor from '@/indicator/editor'\r\nimport {\r\n CHARTS_OPTIONS,\r\n TABLE_OPTIONS,\r\n UPDATE_CHARTS_OPTIONS,\r\n UPDATE_TABLE_OPTIONS,\r\n SELECTED_COMPONENT,\r\n REFRESH_DATA\r\n} from '@/utils/constant'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { pick } from 'lodash-es'\r\nimport 'ant-design-vue/es/collapse/style'\r\nexport default defineComponent({\r\n name: 'StyleConfigGroup',\r\n props: {\r\n componentType: {\r\n // 控件类型\r\n type: String,\r\n default: ''\r\n },\r\n isGroupTable: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n components: {\r\n PropsToForm,\r\n TableColumnConfig,\r\n Editor,\r\n AFormItem,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel,\r\n ASwitch,\r\n IndicatorContainer\r\n },\r\n setup (compProps) {\r\n const activePanel = ref<string[]>([])\r\n const tablePanel = ref<string[]>(['表格'])\r\n const chartsOptions = inject(CHARTS_OPTIONS) as {\r\n [key: string]: any\r\n }\r\n const tableOptions = inject(TABLE_OPTIONS) as any\r\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\r\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\r\n const refreshData = inject(REFRESH_DATA) as Function\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const handleChangeType = (val: string) => {\r\n updateChartsOptions(\r\n {\r\n ...propsMap[val]\r\n },\r\n false\r\n )\r\n unref(selectedComponent).type = unref(type)\r\n refreshData()\r\n }\r\n const type = computed(() => unref(chartsOptions)?.type)\r\n const groupTableProps = ['showTotalBool', 'totalName', 'expandAll']\r\n const detailPropsGroups = computed<DetailPropsGroups>(() => {\r\n return propsGroups\r\n .map((propsGroup: PropsGroup) => {\r\n const { props, title, enableProps, onlyType, excludeType } = propsGroup\r\n const pickProps = [] as string[]\r\n props.forEach((prop) => {\r\n if (typeof prop === 'string') {\r\n if (groupTableProps.includes(prop)) {\r\n if (compProps.isGroupTable) {\r\n pickProps.push(prop)\r\n }\r\n } else {\r\n pickProps.push(prop)\r\n }\r\n }\r\n })\r\n let filterEnableProps, filterProps\r\n if (compProps.componentType === 'table' && onlyType?.includes(compProps.componentType)) {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && tableOptions.value\r\n ? (tableOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(tableOptions), pickProps)\r\n } else {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && chartsOptions.value\r\n ? (chartsOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(chartsOptions), pickProps)\r\n }\r\n return {\r\n title,\r\n enableProps: filterEnableProps,\r\n enablePropsName: enableProps,\r\n onlyType,\r\n excludeType,\r\n props: filterProps\r\n }\r\n }) // 过滤空属性组\r\n .filter(({ props }) => {\r\n return Object.keys(props).length > 0\r\n })\r\n })\r\n const isRenderForm = (detailPropsGroup: DetailPropsGroup, componentType: string) => {\r\n const { onlyType, excludeType } = detailPropsGroup\r\n if (onlyType == null && excludeType == null) {\r\n return true\r\n } else if (onlyType) {\r\n return lowerCaseIncludes(componentType, onlyType)\r\n } else if (excludeType) {\r\n return !lowerCaseIncludes(componentType, excludeType)\r\n }\r\n return false\r\n }\r\n const onSwitchClick = (checked: boolean | string | number, event: Event) => {\r\n event?.stopPropagation()\r\n return checked\r\n }\r\n const onSwitchChange = (value: any, key: string | undefined) => {\r\n if (key != null) {\r\n updateChartsOptions({\r\n [key]: value\r\n })\r\n }\r\n }\r\n const ComponentString = computed(() => JSON.stringify(unref(chartsOptions), null, 2))\r\n const updateComponentOptions = (code: string) => {\r\n try {\r\n const props = JSON.parse(code || '{}')\r\n updateChartsOptions(props, false)\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const optionCode = ref('')\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const tableEditorChange = (code: string, key) => {\r\n try {\r\n updateTableOptions({\r\n [key]: code\r\n })\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const isShowOptionEditor = computed(() => ['customGraph'].includes(unref(chartsOptions)?.type))\r\n return {\r\n type,\r\n handleChangeType,\r\n activePanel,\r\n tablePanel,\r\n ComponentString,\r\n updateComponentOptions,\r\n tableOptions,\r\n optionCode,\r\n onEditorChange,\r\n tableEditorChange,\r\n onSwitchClick,\r\n onSwitchChange,\r\n detailPropsGroups,\r\n isRenderForm,\r\n isShowOptionEditor\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.style-group {\r\n padding-right: 5px;\r\n width: 100%;\r\n\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n :deep(.ant-collapse-content) {\r\n width: 100%;\r\n .ant-collapse-content-box {\r\n width: 100%;\r\n }\r\n }\r\n}\r\n</style>\r\n<style lang=\"less\">\r\n.attribute-config .ant-collapse-content > .ant-collapse-content-box > editor {\r\n padding: 16px 10px;\r\n}\r\n</style>\r\n","<template>\n <div class=\"control-card\">\n <!-- 绑定键值 -->\n <a-select\n class=\"field-name\"\n :value=\"control.conditionKey\"\n :options=\"conditionOptions\"\n :fieldNames=\"{ value: 'id' }\"\n allow-clear\n show-search\n @change=\"onConditionKeyChange\"\n :filter-option=\"filterOption\"\n />\n <!-- 过滤规则 -->\n <a-select\n class=\"field-name\"\n :value=\"control.rule\"\n :options=\"ruleOption\"\n style=\"max-width: 100px;\"\n @change=\"onRuleChange\"\n />\n <!-- 自定义值或者选择组件 -->\n <a-select\n class=\"field-name\"\n :value=\"control.dataType\"\n :options=\"dataTypeOption\"\n style=\"max-width: 100px;\"\n @change=\"onDataTypeChange\"\n />\n <!-- 填写自定义值 -->\n <template v-if=\"control.dataType === ''\">\n <a-input\n class=\"field-name\"\n :value=\"control.customValue\"\n style=\"max-width: 180px;\"\n @input=\"onCustomValueChange\"\n />\n </template>\n <!-- 组件别名 -->\n <template v-if=\"control.dataType === 'component'\">\n <a-select\n class=\"field-name\"\n :value=\"control.id\"\n :options=\"keyNameOptions\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\n show-search\n :filter-option=\"idFilterOption\"\n style=\"max-width: 180px;\"\n @change=\"onIdChange\"\n @click=\"onIdFocus\"\n />\n </template>\n <!-- 选择数据字段 -->\n <template v-if=\"isShowModelProp\">\n <a-input\n class=\"field-name\"\n :value=\"control.modelKey\"\n @input=\"onModelPropChange\"\n :placeholder=\"control.id === 'PARENT' ? '请输入组件别名' : ''\"\n />\n </template>\n <!-- 组件属性 -->\n <template v-if=\"isShowProp\">\n <a-input\n v-if=\"control.id === 'PARENT'\"\n class=\"field-name\"\n :value=\"control.prop\"\n @input=\"onParentPropChange\"\n placeholder=\"请输入属性名\"\n />\n <a-select\n v-else\n class=\"field-name\"\n :value=\"control.prop\"\n :options=\"propOptions\"\n @change=\"onPropChange\"\n />\n </template>\n <!-- 日期格式化 -->\n <template v-if=\"isShowFormat\">\n <a-select\n class=\"field-name\"\n :value=\"control.format\"\n :options=\"formatOptions\"\n @change=\"onFormatChange\"\n />\n </template>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\"/>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, PropType } from 'vue'\nimport { pick } from 'lodash-es'\nimport { getEventName, getConditions } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n MAP_ATTRIBUTE_PROPS,\n GRAPHIC_CONFIG,\n IS_PIVOT_TABLE\n} from '@/utils/constant'\nimport {\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput, Select as ASelect\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Card',\n components: {\n CloseOutlined,\n AInput,\n ASelect,\n MenuOutlined,\n ADropdown,\n AMenu,\n AMenuItem\n },\n props: {\n index: {\n type: Number,\n require: true\n },\n control: {\n type: Object,\n default: () => ({})\n },\n conditionOptions: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n path: {\n type: String,\n default: ''\n }\n },\n emits: ['delete', 'update'],\n setup (props) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const mapAttributeProps = inject(MAP_ATTRIBUTE_PROPS) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const { onUpdateControl, onDeleteControl, onAddMenuControl } = inject('CHANGE_CONTROL', {\n // eslint-disable-next-line no-void\n onUpdateControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onDeleteControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onAddMenuControl: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent) => {\n return usedComponent.keyName !== ''\n })\n })\n const keyNameOptions = computed(() => {\n const parentOption = []\n if (!unref(isPivotTable)) {\n parentOption.push({\n keyName: '父页面',\n id: 'PARENT'\n })\n }\n return [\n ...parentOption,\n ...unref(usedComponentList)\n ]\n })\n const propOptions = computed(() => {\n const options: { label:string, value: string } [] = []\n const component = unref(usedComponentList)?.find(usedComponent => usedComponent.id === props.control?.id)\n if (component) {\n const type = component.type\n const pickProps = pick(component, ['value', 'startTime', 'endTime'])\n if (!Object.keys(pickProps)?.length) {\n pickProps.value = ''\n }\n for (const prop in pickProps) {\n if (Object.prototype.hasOwnProperty.call(pickProps, prop)) {\n const mapAttributeProp = unref(mapAttributeProps)[prop]\n if (Array.isArray(mapAttributeProp)) {\n const propItem = mapAttributeProp.find(item => lowerCaseIncludes(type, item.onlyType))\n if (propItem) {\n options.push({\n label: propItem.label,\n value: prop\n })\n }\n } else {\n options.push({\n label: mapAttributeProp.label,\n value: prop\n })\n }\n }\n }\n }\n return options\n })\n const onDelete = () => {\n onDeleteControl({\n index: props.index,\n path: props.path\n })\n // 删除控件绑定后把相关的交互事件也删除\n deleteEvent(props.control.id)\n }\n\n const clickConditionMenu = ({ key }) => {\n onAddMenuControl(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n // 删除控件的交互事件\n function deleteEvent (id: string) {\n const component = unref(usedComponentList).find(item => item.id === id)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n const index = events.findIndex((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n\n const onIdChange = (value: string) => {\n const control = { ...props.control }\n control.id = value\n control.customValue = ''\n if (value) {\n const component = unref(usedComponentList).find(item => item.id === value)\n if (component) {\n control.keyName = component.keyName\n // 选中控件后,设置所选控件的events\n setEvents(component, value)\n }\n }\n delete control.prop\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const focusId = ref('')\n const onIdFocus = () => {\n focusId.value = props.control.id\n }\n\n const onPropChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onParentPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onRuleChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n rule: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onDataTypeChange = (value: string) => {\n const control = { ...props.control }\n if (control.modelKey) {\n control.modelKey = ''\n }\n if (control.prop) {\n control.prop = ''\n }\n if (control.format) {\n control.format = ''\n }\n onUpdateControl({\n control: {\n ...control,\n dataType: value,\n customValue: '',\n id: '',\n keyName: ''\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onCustomValueChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n customValue: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModeChange = (value: string) => {\n const control = { ...props.control }\n if (value == null) {\n delete control.mode\n } else {\n control.mode = value\n }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n\n function setEvents (component: any, value: string) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n // 如果切换了控件,把之前控件绑定的删除\n if (unref(focusId) && value !== unref(focusId)) {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n if (!controlList.find((v: any) => v.id === unref(focusId))) {\n deleteEvent(unref(focusId))\n }\n }\n if (!events.find((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n }\n\n const onConditionKeyChange = (value: string, option: { [key:string]:any }) => {\n if (value) {\n const { label, name, id, genericType, indexCode, typeGuid, indexCodeNum } = option || {}\n const controlParams: any = {\n ...props.control,\n conditionKey: id,\n conditionLabel: label,\n conditionName: name,\n conditionValueType: genericType,\n indexCode,\n typeGuid,\n indexCodeNum\n }\n if (!hasOwn(controlParams, 'rule')) {\n controlParams.rule = 'EQUAL'\n }\n if (!hasOwn(controlParams, 'dataType')) {\n controlParams.dataType = 'component'\n }\n onUpdateControl({\n control: controlParams,\n index: props.index,\n path: props.path\n })\n } else {\n const control = { ...props.control }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n }\n\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const ruleOption = computed(() => {\n const target = props.conditionOptions.find(v => v.id === props.control.conditionKey)\n let type = ''\n if (target) {\n type = target?.genericType || ''\n }\n if (type === 'TEXT' || type === '0') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n ]\n } else if (type === 'NUMBER' || type === '1') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else if (type === 'DATE' || type === '2') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return []\n }\n })\n\n const dataTypeOption = [{\n label: '自定义值',\n value: ''\n }, {\n label: '组件值',\n value: 'component'\n }]\n\n const isShowModelProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n const modelPropKey = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\n if (lowerCaseIncludes(target?.type, modelPropKey)) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n if (lowerCaseIncludes(target?.type || '', 'range')) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowFormat = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n // if (['ecanDatePicker', 'ecanRangePicker'].includes(target?.type)) {\n if (lowerCaseIncludes(target?.type || '', ['date', 'range'])) {\n result = true\n }\n }\n return result\n })\n\n const formatOptions = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n\n const onFormatChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n format: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModelPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n modelKey: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n return {\n propOptions,\n usedComponentList,\n onDelete,\n onIdChange,\n onIdFocus,\n onPropChange,\n onParentPropChange,\n onModeChange,\n onRuleChange,\n onDataTypeChange,\n onCustomValueChange,\n onConditionKeyChange,\n idFilterOption,\n filterOption,\n onFormatChange,\n onModelPropChange,\n clickConditionMenu,\n ruleOption,\n dataTypeOption,\n isShowProp,\n isShowFormat,\n isShowModelProp,\n formatOptions,\n keyNameOptions\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.control-card {\n width: 100%;\n padding: 10px;\n // margin-bottom: 10px;\n // border: 1px solid #ccc;\n // border-radius: 5px;\n display: flex;\n position: relative;\n .field-name {\n // max-width: 180px;\n margin-right: 20px;\n flex: 1;\n }\n}\n\n// .delete-icon {\n// position: absolute;\n// right: 8px;\n// top: 18px;\n// }\n.more-icon {\n margin-right: 10px;\n}\n</style>\n\n<style lang=\"less\">\n.control-card {\n .ant-form-item {\n &:not(:last-child) {\n margin-bottom: 8px;\n }\n &:last-child {\n margin-bottom: 0;\n }\n }\n}\n</style>\n","<template>\n <div class=\"control-card\">\n <!-- 绑定键值 -->\n <a-select\n class=\"field-name\"\n :value=\"control.conditionKey\"\n :options=\"conditionOptions\"\n :fieldNames=\"{ value: 'id' }\"\n allow-clear\n show-search\n @change=\"onConditionKeyChange\"\n :filter-option=\"filterOption\"\n />\n <!-- 过滤规则 -->\n <a-select\n class=\"field-name\"\n :value=\"control.rule\"\n :options=\"ruleOption\"\n style=\"max-width: 100px;\"\n @change=\"onRuleChange\"\n />\n <!-- 自定义值或者选择组件 -->\n <a-select\n class=\"field-name\"\n :value=\"control.dataType\"\n :options=\"dataTypeOption\"\n style=\"max-width: 100px;\"\n @change=\"onDataTypeChange\"\n />\n <!-- 填写自定义值 -->\n <template v-if=\"control.dataType === ''\">\n <a-input\n class=\"field-name\"\n :value=\"control.customValue\"\n style=\"max-width: 180px;\"\n @input=\"onCustomValueChange\"\n />\n </template>\n <!-- 组件别名 -->\n <template v-if=\"control.dataType === 'component'\">\n <a-select\n class=\"field-name\"\n :value=\"control.id\"\n :options=\"keyNameOptions\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\n show-search\n :filter-option=\"idFilterOption\"\n style=\"max-width: 180px;\"\n @change=\"onIdChange\"\n @click=\"onIdFocus\"\n />\n </template>\n <!-- 选择数据字段 -->\n <template v-if=\"isShowModelProp\">\n <a-input\n class=\"field-name\"\n :value=\"control.modelKey\"\n @input=\"onModelPropChange\"\n :placeholder=\"control.id === 'PARENT' ? '请输入组件别名' : ''\"\n />\n </template>\n <!-- 组件属性 -->\n <template v-if=\"isShowProp\">\n <a-input\n v-if=\"control.id === 'PARENT'\"\n class=\"field-name\"\n :value=\"control.prop\"\n @input=\"onParentPropChange\"\n placeholder=\"请输入属性名\"\n />\n <a-select\n v-else\n class=\"field-name\"\n :value=\"control.prop\"\n :options=\"propOptions\"\n @change=\"onPropChange\"\n />\n </template>\n <!-- 日期格式化 -->\n <template v-if=\"isShowFormat\">\n <a-select\n class=\"field-name\"\n :value=\"control.format\"\n :options=\"formatOptions\"\n @change=\"onFormatChange\"\n />\n </template>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\"/>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, PropType } from 'vue'\nimport { pick } from 'lodash-es'\nimport { getEventName, getConditions } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n MAP_ATTRIBUTE_PROPS,\n GRAPHIC_CONFIG,\n IS_PIVOT_TABLE\n} from '@/utils/constant'\nimport {\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput, Select as ASelect\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Card',\n components: {\n CloseOutlined,\n AInput,\n ASelect,\n MenuOutlined,\n ADropdown,\n AMenu,\n AMenuItem\n },\n props: {\n index: {\n type: Number,\n require: true\n },\n control: {\n type: Object,\n default: () => ({})\n },\n conditionOptions: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n path: {\n type: String,\n default: ''\n }\n },\n emits: ['delete', 'update'],\n setup (props) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const mapAttributeProps = inject(MAP_ATTRIBUTE_PROPS) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const { onUpdateControl, onDeleteControl, onAddMenuControl } = inject('CHANGE_CONTROL', {\n // eslint-disable-next-line no-void\n onUpdateControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onDeleteControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onAddMenuControl: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent) => {\n return usedComponent.keyName !== ''\n })\n })\n const keyNameOptions = computed(() => {\n const parentOption = []\n if (!unref(isPivotTable)) {\n parentOption.push({\n keyName: '父页面',\n id: 'PARENT'\n })\n }\n return [\n ...parentOption,\n ...unref(usedComponentList)\n ]\n })\n const propOptions = computed(() => {\n const options: { label:string, value: string } [] = []\n const component = unref(usedComponentList)?.find(usedComponent => usedComponent.id === props.control?.id)\n if (component) {\n const type = component.type\n const pickProps = pick(component, ['value', 'startTime', 'endTime'])\n if (!Object.keys(pickProps)?.length) {\n pickProps.value = ''\n }\n for (const prop in pickProps) {\n if (Object.prototype.hasOwnProperty.call(pickProps, prop)) {\n const mapAttributeProp = unref(mapAttributeProps)[prop]\n if (Array.isArray(mapAttributeProp)) {\n const propItem = mapAttributeProp.find(item => lowerCaseIncludes(type, item.onlyType))\n if (propItem) {\n options.push({\n label: propItem.label,\n value: prop\n })\n }\n } else {\n options.push({\n label: mapAttributeProp.label,\n value: prop\n })\n }\n }\n }\n }\n return options\n })\n const onDelete = () => {\n onDeleteControl({\n index: props.index,\n path: props.path\n })\n // 删除控件绑定后把相关的交互事件也删除\n deleteEvent(props.control.id)\n }\n\n const clickConditionMenu = ({ key }) => {\n onAddMenuControl(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n // 删除控件的交互事件\n function deleteEvent (id: string) {\n const component = unref(usedComponentList).find(item => item.id === id)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n const index = events.findIndex((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n\n const onIdChange = (value: string) => {\n const control = { ...props.control }\n control.id = value\n control.customValue = ''\n if (value) {\n const component = unref(usedComponentList).find(item => item.id === value)\n if (component) {\n control.keyName = component.keyName\n // 选中控件后,设置所选控件的events\n setEvents(component, value)\n }\n }\n delete control.prop\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const focusId = ref('')\n const onIdFocus = () => {\n focusId.value = props.control.id\n }\n\n const onPropChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onParentPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onRuleChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n rule: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onDataTypeChange = (value: string) => {\n const control = { ...props.control }\n if (control.modelKey) {\n control.modelKey = ''\n }\n if (control.prop) {\n control.prop = ''\n }\n if (control.format) {\n control.format = ''\n }\n onUpdateControl({\n control: {\n ...control,\n dataType: value,\n customValue: '',\n id: '',\n keyName: ''\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onCustomValueChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n customValue: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModeChange = (value: string) => {\n const control = { ...props.control }\n if (value == null) {\n delete control.mode\n } else {\n control.mode = value\n }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n\n function setEvents (component: any, value: string) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n // 如果切换了控件,把之前控件绑定的删除\n if (unref(focusId) && value !== unref(focusId)) {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n if (!controlList.find((v: any) => v.id === unref(focusId))) {\n deleteEvent(unref(focusId))\n }\n }\n if (!events.find((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n }\n\n const onConditionKeyChange = (value: string, option: { [key:string]:any }) => {\n if (value) {\n const { label, name, id, genericType, indexCode, typeGuid, indexCodeNum } = option || {}\n const controlParams: any = {\n ...props.control,\n conditionKey: id,\n conditionLabel: label,\n conditionName: name,\n conditionValueType: genericType,\n indexCode,\n typeGuid,\n indexCodeNum\n }\n if (!hasOwn(controlParams, 'rule')) {\n controlParams.rule = 'EQUAL'\n }\n if (!hasOwn(controlParams, 'dataType')) {\n controlParams.dataType = 'component'\n }\n onUpdateControl({\n control: controlParams,\n index: props.index,\n path: props.path\n })\n } else {\n const control = { ...props.control }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n }\n\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const ruleOption = computed(() => {\n const target = props.conditionOptions.find(v => v.id === props.control.conditionKey)\n let type = ''\n if (target) {\n type = target?.genericType || ''\n }\n if (type === 'TEXT' || type === '0') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n ]\n } else if (type === 'NUMBER' || type === '1') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else if (type === 'DATE' || type === '2') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return []\n }\n })\n\n const dataTypeOption = [{\n label: '自定义值',\n value: ''\n }, {\n label: '组件值',\n value: 'component'\n }]\n\n const isShowModelProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n const modelPropKey = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\n if (lowerCaseIncludes(target?.type, modelPropKey)) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n if (lowerCaseIncludes(target?.type || '', 'range')) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowFormat = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n // if (['ecanDatePicker', 'ecanRangePicker'].includes(target?.type)) {\n if (lowerCaseIncludes(target?.type || '', ['date', 'range'])) {\n result = true\n }\n }\n return result\n })\n\n const formatOptions = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n\n const onFormatChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n format: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModelPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n modelKey: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n return {\n propOptions,\n usedComponentList,\n onDelete,\n onIdChange,\n onIdFocus,\n onPropChange,\n onParentPropChange,\n onModeChange,\n onRuleChange,\n onDataTypeChange,\n onCustomValueChange,\n onConditionKeyChange,\n idFilterOption,\n filterOption,\n onFormatChange,\n onModelPropChange,\n clickConditionMenu,\n ruleOption,\n dataTypeOption,\n isShowProp,\n isShowFormat,\n isShowModelProp,\n formatOptions,\n keyNameOptions\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.control-card {\n width: 100%;\n padding: 10px;\n // margin-bottom: 10px;\n // border: 1px solid #ccc;\n // border-radius: 5px;\n display: flex;\n position: relative;\n .field-name {\n // max-width: 180px;\n margin-right: 20px;\n flex: 1;\n }\n}\n\n// .delete-icon {\n// position: absolute;\n// right: 8px;\n// top: 18px;\n// }\n.more-icon {\n margin-right: 10px;\n}\n</style>\n\n<style lang=\"less\">\n.control-card {\n .ant-form-item {\n &:not(:last-child) {\n margin-bottom: 8px;\n }\n &:last-child {\n margin-bottom: 0;\n }\n }\n}\n</style>\n","<template>\r\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\r\n <template\r\n v-for=\"(item, index) in list\"\r\n :key=\"index\"\r\n >\r\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\r\n <div class=\"condition-container\">\r\n <template v-if=\"item.conditions.length > 1\">\r\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\r\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\r\n </template>\r\n <div class=\"conditions\">\r\n <template v-if=\"item.conditions.length > 0\">\r\n <control-list\r\n :level=\"level + 1\"\r\n :path=\"`${path ? path + '-' : ''}${index}`\"\r\n :list=\"item.conditions\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n </template>\r\n <template v-else>\r\n <control-card\r\n class=\"condition\"\r\n :key=\"item.keyValue || `${level}-${index}`\"\r\n :control=\"item\"\r\n :index=\"index\"\r\n :path=\"path || ''\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent } from 'vue'\r\nimport ControlCard from './ControlCard.vue'\r\nexport default defineComponent({\r\n name: 'ControlList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n },\r\n level: {\r\n type: Number,\r\n default: 0\r\n },\r\n path: {\r\n type: String,\r\n default: ''\r\n },\r\n conditionOptions: {\r\n type: Array,\r\n default: () => []\r\n }\r\n },\r\n components: {\r\n ControlCard\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.condition-list {\r\n width: 100%;\r\n}\r\n.condition-text {\r\n min-width: 50px;\r\n max-width: 50px;\r\n border: 1px solid #e8e8e8;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.condition-container {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n.conditions {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.condition {\r\n padding: 8px;\r\n border: 1px solid #e8e8e8;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\r\n <template\r\n v-for=\"(item, index) in list\"\r\n :key=\"index\"\r\n >\r\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\r\n <div class=\"condition-container\">\r\n <template v-if=\"item.conditions.length > 1\">\r\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\r\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\r\n </template>\r\n <div class=\"conditions\">\r\n <template v-if=\"item.conditions.length > 0\">\r\n <control-list\r\n :level=\"level + 1\"\r\n :path=\"`${path ? path + '-' : ''}${index}`\"\r\n :list=\"item.conditions\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n </template>\r\n <template v-else>\r\n <control-card\r\n class=\"condition\"\r\n :key=\"item.keyValue || `${level}-${index}`\"\r\n :control=\"item\"\r\n :index=\"index\"\r\n :path=\"path || ''\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent } from 'vue'\r\nimport ControlCard from './ControlCard.vue'\r\nexport default defineComponent({\r\n name: 'ControlList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n },\r\n level: {\r\n type: Number,\r\n default: 0\r\n },\r\n path: {\r\n type: String,\r\n default: ''\r\n },\r\n conditionOptions: {\r\n type: Array,\r\n default: () => []\r\n }\r\n },\r\n components: {\r\n ControlCard\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.condition-list {\r\n width: 100%;\r\n}\r\n.condition-text {\r\n min-width: 50px;\r\n max-width: 50px;\r\n border: 1px solid #e8e8e8;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.condition-container {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n.conditions {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.condition {\r\n padding: 8px;\r\n border: 1px solid #e8e8e8;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\n <div class=\"control-group\">\n <div class=\"control-group-header\">\n <template v-if=\"Array.isArray(controlList) && controlList.length > 0\">\n <a-button @click=\"onAddControl('&&')\">添加且条件</a-button>\n <a-button @click=\"onAddControl('||')\" style=\"margin-left: 15px;\">添加或条件</a-button>\n </template>\n <a-button v-else @click=\"onAddControl()\">添加条件</a-button>\n <a-popover\n v-model:visible=\"isVisible\"\n title=\"选择组件\"\n placement=\"bottomRight\"\n trigger=\"click\"\n >\n <template #content>\n <div class=\"sync-wrap\">\n <div class=\"title\">\n 将此全局过滤条件配置同步至选中组件的指标库配置中。若被选中组件已有全局过滤条件将会被覆盖!\n </div>\n <div class=\"selected-total\" v-if=\"indicatorComponents.length\">\n {{ selectedIds.length }} / {{ indicatorComponents.length }} 项\n </div>\n <div class=\"operate-container\">\n <a-select\n style=\"width: 75%;\"\n v-model:value=\"selectedIds\"\n show-search\n mode=\"multiple\"\n placeholder=\"请选择\"\n :filter-option=\"filterOption\"\n :options=\"indicatorComponents\"\n />\n <a-button\n style=\"margin-left: 10px;\"\n type=\"primary\"\n :disabled=\"!selectedIds?.length\"\n @click=\"handleConfirmSync\"\n >\n 确定\n </a-button>\n </div>\n </div>\n </template>\n <a-button\n type=\"primary\"\n ghost\n style=\"float: right;\"\n v-if=\"Array.isArray(controlList) && controlList.length > 0\"\n >\n 应用到其他组件\n </a-button>\n </a-popover>\n </div>\n <div class=\"control-group-content\">\n <!-- <control-card\n v-for=\"(control, index) in controlList\"\n :key=\"index\"\n :index=\"index\"\n :control=\"control\"\n @delete=\"onDeleteControl\"\n @update=\"onUpdateControl\"\n /> -->\n <control-list\n class=\"condition-list\"\n :list=\"controlList\"\n :level=\"0\"\n :conditionOptions=\"conditionOptions\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, provide, watch } from 'vue'\nimport { Button as AButton, Select as ASelect, Popover as APopover, message } from 'ant-design-vue'\nimport ControlList from './ControlList.vue'\nimport { getSqlConditions } from '@/utils/util'\nimport { hasOwn } from '@ecan-bi/tools'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, UPDATE_COMPONENTS_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'ControlGroup',\n props: {\n conditionOptions: {\n type: Array,\n default: () => []\n }\n },\n components: {\n ControlList,\n AButton,\n ASelect,\n APopover\n },\n setup () {\n const isVisible = ref(false)\n const selectedIds = ref([])\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const updateComponentsConfig = inject(UPDATE_COMPONENTS_CONFIG) as any\n // 组件中 controlList 转为 List<SqlCondition>\n const controlList = computed(() => {\n const list = unref(graphicConfig)?.controlList || []\n for (const item of list) {\n if (item.conditionKey) {\n if (!hasOwn(item, 'rule')) {\n if (item.prop === 'startTime') {\n item.rule = 'GREATER_EQUAL'\n } else if (item.prop === 'endTime') {\n item.rule = 'LESS_EQUAL'\n } else {\n item.rule = 'EQUAL'\n }\n }\n if (!hasOwn(item, 'dataType')) {\n item.dataType = 'component'\n }\n }\n }\n if (list?.length > 1 && !list[0]?.join) {\n return [{\n join: '&&',\n conditions: list\n }]\n }\n return list\n })\n // 绑定id\n const bindComponentId = ref(null)\n const updateConfig = (config: { [key:string]: any }) => {\n const result = {\n ...unref(graphicConfig),\n ...config,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n ...config\n }, unref(renderUsedComponents))\n }\n updateGraphicConfig(result)\n }\n const onAddControl = (join?: '||' | '&&') => {\n const list = unref(controlList)?.slice()\n if (list == null || list?.length === 0) {\n updateConfig({\n controlList: [{\n keyValue: nanoid()\n }]\n })\n } else if (list[0] != null) {\n if (list[0].conditions == null || list[0].join !== join) {\n updateConfig({\n controlList: [{\n join,\n conditions: [\n list[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n })\n } else if (list[0].conditions.length > 1 && list[0].join === join) {\n list[0].conditions.push({\n keyValue: nanoid()\n })\n updateConfig({\n controlList: list\n })\n }\n }\n }\n const onDeleteControl = (data: { [key:string]: any }) => {\n const { index, path } = data\n let sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = sourceList\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n sourceList = []\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const onUpdateControl = (data: { [key:string]: any }) => {\n const { control, index, path } = data\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = control\n }\n updateConfig({\n controlList: sourceList\n })\n }\n\n const onAddMenuControl = (path: string, index: number, join: '||' | '&&') => {\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n const indicatorComponents = computed(() => {\n return unref(renderUsedComponents)\n .filter((v: any) => v.dataType === 'indicator' && v.graphicConfig.source === 'INDICATOR_LIB')\n .map((v: any) => ({\n label: v.keyName,\n value: v.id\n }))\n })\n const handleConfirmSync = () => {\n try {\n if (unref(selectedIds)?.length) {\n updateComponentsConfig(unref(selectedIds), unref(controlList))\n message.success('应用成功')\n }\n isVisible.value = false\n } catch (error) {\n console.error(error)\n }\n }\n watch(isVisible, (val) => {\n if (!val) {\n selectedIds.value = []\n }\n })\n provide('CHANGE_CONTROL', {\n onDeleteControl,\n onUpdateControl,\n onAddMenuControl\n })\n return {\n isVisible,\n selectedIds,\n controlList,\n bindComponentId,\n indicatorComponents,\n onAddControl,\n filterOption,\n handleConfirmSync\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.control-group-header {\n margin: 20px 0;\n}\n.control-group-content {\n display: flex;\n flex-wrap: wrap;\n}\n.sync-wrap {\n width: 350px;\n max-height: 50vh;\n overflow: auto;\n .title {\n font-size: 12px;\n color: #616161;\n margin-bottom: 10px;\n }\n .selected-total {\n font-size: 12px;\n color: #616161;\n margin-bottom: 5px;\n }\n .operate-container {\n display: flex;\n align-items: center;\n }\n}\n</style>\n","<template>\n <div class=\"control-group\">\n <div class=\"control-group-header\">\n <template v-if=\"Array.isArray(controlList) && controlList.length > 0\">\n <a-button @click=\"onAddControl('&&')\">添加且条件</a-button>\n <a-button @click=\"onAddControl('||')\" style=\"margin-left: 15px;\">添加或条件</a-button>\n </template>\n <a-button v-else @click=\"onAddControl()\">添加条件</a-button>\n <a-popover\n v-model:visible=\"isVisible\"\n title=\"选择组件\"\n placement=\"bottomRight\"\n trigger=\"click\"\n >\n <template #content>\n <div class=\"sync-wrap\">\n <div class=\"title\">\n 将此全局过滤条件配置同步至选中组件的指标库配置中。若被选中组件已有全局过滤条件将会被覆盖!\n </div>\n <div class=\"selected-total\" v-if=\"indicatorComponents.length\">\n {{ selectedIds.length }} / {{ indicatorComponents.length }} 项\n </div>\n <div class=\"operate-container\">\n <a-select\n style=\"width: 75%;\"\n v-model:value=\"selectedIds\"\n show-search\n mode=\"multiple\"\n placeholder=\"请选择\"\n :filter-option=\"filterOption\"\n :options=\"indicatorComponents\"\n />\n <a-button\n style=\"margin-left: 10px;\"\n type=\"primary\"\n :disabled=\"!selectedIds?.length\"\n @click=\"handleConfirmSync\"\n >\n 确定\n </a-button>\n </div>\n </div>\n </template>\n <a-button\n type=\"primary\"\n ghost\n style=\"float: right;\"\n v-if=\"Array.isArray(controlList) && controlList.length > 0\"\n >\n 应用到其他组件\n </a-button>\n </a-popover>\n </div>\n <div class=\"control-group-content\">\n <!-- <control-card\n v-for=\"(control, index) in controlList\"\n :key=\"index\"\n :index=\"index\"\n :control=\"control\"\n @delete=\"onDeleteControl\"\n @update=\"onUpdateControl\"\n /> -->\n <control-list\n class=\"condition-list\"\n :list=\"controlList\"\n :level=\"0\"\n :conditionOptions=\"conditionOptions\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, provide, watch } from 'vue'\nimport { Button as AButton, Select as ASelect, Popover as APopover, message } from 'ant-design-vue'\nimport ControlList from './ControlList.vue'\nimport { getSqlConditions } from '@/utils/util'\nimport { hasOwn } from '@ecan-bi/tools'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, UPDATE_COMPONENTS_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'ControlGroup',\n props: {\n conditionOptions: {\n type: Array,\n default: () => []\n }\n },\n components: {\n ControlList,\n AButton,\n ASelect,\n APopover\n },\n setup () {\n const isVisible = ref(false)\n const selectedIds = ref([])\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const updateComponentsConfig = inject(UPDATE_COMPONENTS_CONFIG) as any\n // 组件中 controlList 转为 List<SqlCondition>\n const controlList = computed(() => {\n const list = unref(graphicConfig)?.controlList || []\n for (const item of list) {\n if (item.conditionKey) {\n if (!hasOwn(item, 'rule')) {\n if (item.prop === 'startTime') {\n item.rule = 'GREATER_EQUAL'\n } else if (item.prop === 'endTime') {\n item.rule = 'LESS_EQUAL'\n } else {\n item.rule = 'EQUAL'\n }\n }\n if (!hasOwn(item, 'dataType')) {\n item.dataType = 'component'\n }\n }\n }\n if (list?.length > 1 && !list[0]?.join) {\n return [{\n join: '&&',\n conditions: list\n }]\n }\n return list\n })\n // 绑定id\n const bindComponentId = ref(null)\n const updateConfig = (config: { [key:string]: any }) => {\n const result = {\n ...unref(graphicConfig),\n ...config,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n ...config\n }, unref(renderUsedComponents))\n }\n updateGraphicConfig(result)\n }\n const onAddControl = (join?: '||' | '&&') => {\n const list = unref(controlList)?.slice()\n if (list == null || list?.length === 0) {\n updateConfig({\n controlList: [{\n keyValue: nanoid()\n }]\n })\n } else if (list[0] != null) {\n if (list[0].conditions == null || list[0].join !== join) {\n updateConfig({\n controlList: [{\n join,\n conditions: [\n list[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n })\n } else if (list[0].conditions.length > 1 && list[0].join === join) {\n list[0].conditions.push({\n keyValue: nanoid()\n })\n updateConfig({\n controlList: list\n })\n }\n }\n }\n const onDeleteControl = (data: { [key:string]: any }) => {\n const { index, path } = data\n let sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = sourceList\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n sourceList = []\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const onUpdateControl = (data: { [key:string]: any }) => {\n const { control, index, path } = data\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = control\n }\n updateConfig({\n controlList: sourceList\n })\n }\n\n const onAddMenuControl = (path: string, index: number, join: '||' | '&&') => {\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n const indicatorComponents = computed(() => {\n return unref(renderUsedComponents)\n .filter((v: any) => v.dataType === 'indicator' && v.graphicConfig.source === 'INDICATOR_LIB')\n .map((v: any) => ({\n label: v.keyName,\n value: v.id\n }))\n })\n const handleConfirmSync = () => {\n try {\n if (unref(selectedIds)?.length) {\n updateComponentsConfig(unref(selectedIds), unref(controlList))\n message.success('应用成功')\n }\n isVisible.value = false\n } catch (error) {\n console.error(error)\n }\n }\n watch(isVisible, (val) => {\n if (!val) {\n selectedIds.value = []\n }\n })\n provide('CHANGE_CONTROL', {\n onDeleteControl,\n onUpdateControl,\n onAddMenuControl\n })\n return {\n isVisible,\n selectedIds,\n controlList,\n bindComponentId,\n indicatorComponents,\n onAddControl,\n filterOption,\n handleConfirmSync\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.control-group-header {\n margin: 20px 0;\n}\n.control-group-content {\n display: flex;\n flex-wrap: wrap;\n}\n.sync-wrap {\n width: 350px;\n max-height: 50vh;\n overflow: auto;\n .title {\n font-size: 12px;\n color: #616161;\n margin-bottom: 10px;\n }\n .selected-total {\n font-size: 12px;\n color: #616161;\n margin-bottom: 5px;\n }\n .operate-container {\n display: flex;\n align-items: center;\n }\n}\n</style>\n","<template>\r\n <div class=\"variable-item\">\r\n <!-- 所属指标 -->\r\n <template v-if=\"variableData.randomKey\">\r\n <div class=\"var-indicator\" :title=\"label\">\r\n {{ label }}\r\n </div>\r\n </template>\r\n <!-- 变量名 -->\r\n <a-input\r\n class=\"field-name\"\r\n v-model:value=\"variableData.variableName\"\r\n placeholder=\"请输入变量名\"\r\n :disabled=\"!!variableData.randomKey\"\r\n />\r\n <!-- 变量类型 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.variableType\"\r\n :options=\"typeOption\"\r\n :disabled=\"variableData.disabled\"\r\n style=\"max-width: 120px;\"\r\n placeholder=\"请选择变量类型\"\r\n @change=\"onChangeVariableType\"\r\n />\r\n <!-- 自定义值或者选择组件 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dataType\"\r\n :options=\"dataTypeOption\"\r\n style=\"max-width: 120px;\"\r\n @change=\"onChangeDataType\"\r\n />\r\n <!-- 变量值 -->\r\n <template v-if=\"variableData.dataType === 'component'\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.id\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n style=\"max-width: 180px;\"\r\n placeholder=\"请选择组件\"\r\n @change=\"onChangeComponent\"\r\n />\r\n </template>\r\n <template v-else>\r\n <a-input\r\n class=\"field-name\"\r\n style=\"max-width: 180px;\"\r\n v-model:value=\"variableData.variableValue\"\r\n placeholder=\"请输入变量值\"\r\n />\r\n </template>\r\n <!-- 日期范围的取值类型:间隔值、开始时间、结束时间 -->\r\n <template v-if=\"isDateRangeComponent\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dateTypeValue\"\r\n :options=\"rangeTypeOptions\"\r\n placeholder=\"请选择取值类型\"\r\n />\r\n </template>\r\n <!-- 值格式,YYYY-MM-DD等 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.format\"\r\n :options=\"formatOptions\"\r\n placeholder=\"请选择值格式\"\r\n />\r\n <!-- 日期加减 -->\r\n <template v-if=\"isShowDateOperate\">\r\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\r\n <template #content>\r\n <div class=\"popover-content-wrap\">\r\n <a-tabs :defaultActiveKey=\"variableData.activeOperateKey\" @change=\"changeTab\">\r\n <a-tab-pane tab=\"日期偏移\" :key=\"1\">\r\n <a-input-number\r\n class=\"field-name\"\r\n min=\"0\"\r\n v-model:value=\"variableData.operateValue\"\r\n style=\"max-width: 180px;flex: auto;\"\r\n >\r\n <template #addonBefore>\r\n <a-select v-model:value=\"variableData.operateType\" style=\"width: 60px\">\r\n <a-select-option value=\"add\">加</a-select-option>\r\n <a-select-option value=\"minus\">减</a-select-option>\r\n </a-select>\r\n </template>\r\n <template #addonAfter>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"width: 60px\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n </template>\r\n </a-input-number>\r\n </a-tab-pane>\r\n <!-- 自定义 -->\r\n <a-tab-pane tab=\"自定义\" :key=\"2\" v-if=\"isDateRangeComponent\">\r\n <div style=\"display: flex;\">\r\n <a-select\r\n v-model:value=\"variableData.operateValue\"\r\n allowClear\r\n style=\"width: 120px;margin-right: 10px;\"\r\n >\r\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"margin-right: 10px;\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateType\">\r\n <a-select-option value=\"minus\">前</a-select-option>\r\n <a-select-option value=\"add\">后</a-select-option>\r\n </a-select>\r\n </div>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </template>\r\n <div class=\"calendar-wrap\" @click=\"popoverVisible = true;\">\r\n <appstore-add-outlined />\r\n </div>\r\n </a-popover>\r\n </template>\r\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" v-if=\"!variableData.randomKey\"/>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, inject, unref, ref, watch } from 'vue'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport {\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Input as AInput,\r\n Popover as APopover,\r\n Tabs as ATabs,\r\n TabPane as ATabPane,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport 'ant-design-vue/es/popover/style'\r\nexport default defineComponent({\r\n name: 'VariableCard',\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n require: true\r\n },\r\n label: String\r\n },\r\n components: {\r\n CloseOutlined,\r\n AppstoreAddOutlined,\r\n ASelect,\r\n ASelectOption,\r\n AInput,\r\n APopover,\r\n ATabs,\r\n ATabPane,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const popoverVisible = ref(false)\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n const typeOption = [{\r\n label: 'TEXT',\r\n value: 'TEXT'\r\n }, {\r\n label: 'NUMBER',\r\n value: 'NUMBER'\r\n }, {\r\n label: 'DATE',\r\n value: 'DATE'\r\n }]\r\n\r\n const dataTypeOption = [{\r\n label: '自定义值',\r\n value: ''\r\n }, {\r\n label: '组件值',\r\n value: 'component'\r\n }]\r\n\r\n const rangeTypeOptions = [{\r\n label: '间隔值',\r\n value: 'rangeValue'\r\n }, {\r\n label: '开始时间',\r\n value: 'startTime'\r\n }, {\r\n label: '结束时间',\r\n value: 'endTime'\r\n }]\r\n\r\n const variableData = ref(cloneDeep(props.item))\r\n\r\n watch(variableData, (data: { [key: string]: any }) => {\r\n emit('update', {\r\n ...data,\r\n label: props.label\r\n }, props.index)\r\n }, {\r\n deep: true\r\n })\r\n\r\n const curComponent = computed(() => {\r\n let result = null\r\n if (unref(variableData)?.dataType === 'component') {\r\n const target = unref(usedComponentList).find(v => v.id === unref(variableData)?.id)\r\n if (target) {\r\n result = target\r\n }\r\n }\r\n return result\r\n })\r\n const isShowFormat = computed(() => {\r\n let result = false\r\n // if (unref(curComponent)) {\r\n // result = lowerCaseIncludes(unref(curComponent).type, ['range', 'date'])\r\n // }\r\n if (unref(variableData)?.variableType === 'DATE') {\r\n result = true\r\n }\r\n return result\r\n })\r\n const isDateRangeComponent = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n result = lowerCaseIncludes(unref(curComponent).type, 'range')\r\n }\r\n return result\r\n })\r\n\r\n const isShowDateOperate = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n if (lowerCaseIncludes(unref(curComponent).type, 'range')) {\r\n if (['startTime', 'endTime'].includes(unref(variableData).dateTypeValue)) {\r\n result = true\r\n }\r\n } else if (lowerCaseIncludes(unref(curComponent).type, 'date')) {\r\n result = true\r\n }\r\n }\r\n return result\r\n })\r\n\r\n const onChangeComponent = (value: string, option: { [key:string]:any }) => {\r\n if (value) {\r\n unref(variableData).keyName = option.keyName\r\n }\r\n }\r\n\r\n const onDelete = () => {\r\n emit('delete', props.index)\r\n }\r\n\r\n const formatOptions = computed(() => {\r\n if (unref(isShowFormat)) {\r\n return [\r\n { label: '年', value: 'YYYY' },\r\n { label: '年月', value: 'YYYY-MM' },\r\n { label: '年月日', value: 'YYYY-MM-DD' },\r\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\r\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\r\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\r\n ]\r\n } else {\r\n return []\r\n }\r\n })\r\n\r\n const onChangeDataType = () => {\r\n unref(variableData).id = null\r\n unref(variableData).keyName = ''\r\n // unref(variableData).format = null\r\n unref(variableData).dateTypeValue = null\r\n unref(variableData).variableValue = ''\r\n }\r\n\r\n const onChangeVariableType = () => {\r\n unref(variableData).format = null\r\n }\r\n\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n\r\n watch(isShowDateOperate, (val: boolean) => {\r\n if (val) {\r\n if (!unref(variableData).operateType) {\r\n unref(variableData).operateType = 'add'\r\n }\r\n if (!unref(variableData).operateMode) {\r\n unref(variableData).operateMode = 'year'\r\n }\r\n if (!unref(variableData).operateValue) {\r\n unref(variableData).operateValue = 0\r\n }\r\n if (!unref(variableData).activeOperateKey) {\r\n unref(variableData).activeOperateKey = 1\r\n }\r\n }\r\n }, {\r\n immediate: true\r\n })\r\n\r\n const changeTab = (activeKey: number) => {\r\n unref(variableData).activeOperateKey = activeKey\r\n if (activeKey === 1) {\r\n unref(variableData).operateValue = 0\r\n } else if (activeKey === 2) {\r\n unref(variableData).operateValue = 'rangeValue'\r\n }\r\n }\r\n\r\n return {\r\n variableData,\r\n typeOption,\r\n dataTypeOption,\r\n usedComponentList,\r\n formatOptions,\r\n rangeTypeOptions,\r\n isShowFormat,\r\n isDateRangeComponent,\r\n isShowDateOperate,\r\n popoverVisible,\r\n idFilterOption,\r\n onChangeComponent,\r\n onDelete,\r\n onChangeDataType,\r\n onChangeVariableType,\r\n changeTab\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-item {\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n border: 1px solid #e8e8e8;\r\n .field-name {\r\n margin-right: 20px;\r\n flex: 1;\r\n }\r\n\r\n .var-indicator {\r\n width: 120px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n margin-right: 10px;\r\n text-align: center;\r\n }\r\n .calendar-wrap {\r\n width: 25px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 50%;\r\n height: 25px;\r\n text-align: center;\r\n cursor: pointer;\r\n margin-right: 15px;\r\n &:hover {\r\n border-color: rgb(24, 144, 255);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"variable-item\">\r\n <!-- 所属指标 -->\r\n <template v-if=\"variableData.randomKey\">\r\n <div class=\"var-indicator\" :title=\"label\">\r\n {{ label }}\r\n </div>\r\n </template>\r\n <!-- 变量名 -->\r\n <a-input\r\n class=\"field-name\"\r\n v-model:value=\"variableData.variableName\"\r\n placeholder=\"请输入变量名\"\r\n :disabled=\"!!variableData.randomKey\"\r\n />\r\n <!-- 变量类型 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.variableType\"\r\n :options=\"typeOption\"\r\n :disabled=\"variableData.disabled\"\r\n style=\"max-width: 120px;\"\r\n placeholder=\"请选择变量类型\"\r\n @change=\"onChangeVariableType\"\r\n />\r\n <!-- 自定义值或者选择组件 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dataType\"\r\n :options=\"dataTypeOption\"\r\n style=\"max-width: 120px;\"\r\n @change=\"onChangeDataType\"\r\n />\r\n <!-- 变量值 -->\r\n <template v-if=\"variableData.dataType === 'component'\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.id\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n style=\"max-width: 180px;\"\r\n placeholder=\"请选择组件\"\r\n @change=\"onChangeComponent\"\r\n />\r\n </template>\r\n <template v-else>\r\n <a-input\r\n class=\"field-name\"\r\n style=\"max-width: 180px;\"\r\n v-model:value=\"variableData.variableValue\"\r\n placeholder=\"请输入变量值\"\r\n />\r\n </template>\r\n <!-- 日期范围的取值类型:间隔值、开始时间、结束时间 -->\r\n <template v-if=\"isDateRangeComponent\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dateTypeValue\"\r\n :options=\"rangeTypeOptions\"\r\n placeholder=\"请选择取值类型\"\r\n />\r\n </template>\r\n <!-- 值格式,YYYY-MM-DD等 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.format\"\r\n :options=\"formatOptions\"\r\n placeholder=\"请选择值格式\"\r\n />\r\n <!-- 日期加减 -->\r\n <template v-if=\"isShowDateOperate\">\r\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\r\n <template #content>\r\n <div class=\"popover-content-wrap\">\r\n <a-tabs :defaultActiveKey=\"variableData.activeOperateKey\" @change=\"changeTab\">\r\n <a-tab-pane tab=\"日期偏移\" :key=\"1\">\r\n <a-input-number\r\n class=\"field-name\"\r\n min=\"0\"\r\n v-model:value=\"variableData.operateValue\"\r\n style=\"max-width: 180px;flex: auto;\"\r\n >\r\n <template #addonBefore>\r\n <a-select v-model:value=\"variableData.operateType\" style=\"width: 60px\">\r\n <a-select-option value=\"add\">加</a-select-option>\r\n <a-select-option value=\"minus\">减</a-select-option>\r\n </a-select>\r\n </template>\r\n <template #addonAfter>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"width: 60px\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n </template>\r\n </a-input-number>\r\n </a-tab-pane>\r\n <!-- 自定义 -->\r\n <a-tab-pane tab=\"自定义\" :key=\"2\" v-if=\"isDateRangeComponent\">\r\n <div style=\"display: flex;\">\r\n <a-select\r\n v-model:value=\"variableData.operateValue\"\r\n allowClear\r\n style=\"width: 120px;margin-right: 10px;\"\r\n >\r\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"margin-right: 10px;\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateType\">\r\n <a-select-option value=\"minus\">前</a-select-option>\r\n <a-select-option value=\"add\">后</a-select-option>\r\n </a-select>\r\n </div>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </template>\r\n <div class=\"calendar-wrap\" @click=\"popoverVisible = true;\">\r\n <appstore-add-outlined />\r\n </div>\r\n </a-popover>\r\n </template>\r\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" v-if=\"!variableData.randomKey\"/>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, inject, unref, ref, watch } from 'vue'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport {\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Input as AInput,\r\n Popover as APopover,\r\n Tabs as ATabs,\r\n TabPane as ATabPane,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport 'ant-design-vue/es/popover/style'\r\nexport default defineComponent({\r\n name: 'VariableCard',\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n require: true\r\n },\r\n label: String\r\n },\r\n components: {\r\n CloseOutlined,\r\n AppstoreAddOutlined,\r\n ASelect,\r\n ASelectOption,\r\n AInput,\r\n APopover,\r\n ATabs,\r\n ATabPane,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const popoverVisible = ref(false)\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n const typeOption = [{\r\n label: 'TEXT',\r\n value: 'TEXT'\r\n }, {\r\n label: 'NUMBER',\r\n value: 'NUMBER'\r\n }, {\r\n label: 'DATE',\r\n value: 'DATE'\r\n }]\r\n\r\n const dataTypeOption = [{\r\n label: '自定义值',\r\n value: ''\r\n }, {\r\n label: '组件值',\r\n value: 'component'\r\n }]\r\n\r\n const rangeTypeOptions = [{\r\n label: '间隔值',\r\n value: 'rangeValue'\r\n }, {\r\n label: '开始时间',\r\n value: 'startTime'\r\n }, {\r\n label: '结束时间',\r\n value: 'endTime'\r\n }]\r\n\r\n const variableData = ref(cloneDeep(props.item))\r\n\r\n watch(variableData, (data: { [key: string]: any }) => {\r\n emit('update', {\r\n ...data,\r\n label: props.label\r\n }, props.index)\r\n }, {\r\n deep: true\r\n })\r\n\r\n const curComponent = computed(() => {\r\n let result = null\r\n if (unref(variableData)?.dataType === 'component') {\r\n const target = unref(usedComponentList).find(v => v.id === unref(variableData)?.id)\r\n if (target) {\r\n result = target\r\n }\r\n }\r\n return result\r\n })\r\n const isShowFormat = computed(() => {\r\n let result = false\r\n // if (unref(curComponent)) {\r\n // result = lowerCaseIncludes(unref(curComponent).type, ['range', 'date'])\r\n // }\r\n if (unref(variableData)?.variableType === 'DATE') {\r\n result = true\r\n }\r\n return result\r\n })\r\n const isDateRangeComponent = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n result = lowerCaseIncludes(unref(curComponent).type, 'range')\r\n }\r\n return result\r\n })\r\n\r\n const isShowDateOperate = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n if (lowerCaseIncludes(unref(curComponent).type, 'range')) {\r\n if (['startTime', 'endTime'].includes(unref(variableData).dateTypeValue)) {\r\n result = true\r\n }\r\n } else if (lowerCaseIncludes(unref(curComponent).type, 'date')) {\r\n result = true\r\n }\r\n }\r\n return result\r\n })\r\n\r\n const onChangeComponent = (value: string, option: { [key:string]:any }) => {\r\n if (value) {\r\n unref(variableData).keyName = option.keyName\r\n }\r\n }\r\n\r\n const onDelete = () => {\r\n emit('delete', props.index)\r\n }\r\n\r\n const formatOptions = computed(() => {\r\n if (unref(isShowFormat)) {\r\n return [\r\n { label: '年', value: 'YYYY' },\r\n { label: '年月', value: 'YYYY-MM' },\r\n { label: '年月日', value: 'YYYY-MM-DD' },\r\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\r\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\r\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\r\n ]\r\n } else {\r\n return []\r\n }\r\n })\r\n\r\n const onChangeDataType = () => {\r\n unref(variableData).id = null\r\n unref(variableData).keyName = ''\r\n // unref(variableData).format = null\r\n unref(variableData).dateTypeValue = null\r\n unref(variableData).variableValue = ''\r\n }\r\n\r\n const onChangeVariableType = () => {\r\n unref(variableData).format = null\r\n }\r\n\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n\r\n watch(isShowDateOperate, (val: boolean) => {\r\n if (val) {\r\n if (!unref(variableData).operateType) {\r\n unref(variableData).operateType = 'add'\r\n }\r\n if (!unref(variableData).operateMode) {\r\n unref(variableData).operateMode = 'year'\r\n }\r\n if (!unref(variableData).operateValue) {\r\n unref(variableData).operateValue = 0\r\n }\r\n if (!unref(variableData).activeOperateKey) {\r\n unref(variableData).activeOperateKey = 1\r\n }\r\n }\r\n }, {\r\n immediate: true\r\n })\r\n\r\n const changeTab = (activeKey: number) => {\r\n unref(variableData).activeOperateKey = activeKey\r\n if (activeKey === 1) {\r\n unref(variableData).operateValue = 0\r\n } else if (activeKey === 2) {\r\n unref(variableData).operateValue = 'rangeValue'\r\n }\r\n }\r\n\r\n return {\r\n variableData,\r\n typeOption,\r\n dataTypeOption,\r\n usedComponentList,\r\n formatOptions,\r\n rangeTypeOptions,\r\n isShowFormat,\r\n isDateRangeComponent,\r\n isShowDateOperate,\r\n popoverVisible,\r\n idFilterOption,\r\n onChangeComponent,\r\n onDelete,\r\n onChangeDataType,\r\n onChangeVariableType,\r\n changeTab\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-item {\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n border: 1px solid #e8e8e8;\r\n .field-name {\r\n margin-right: 20px;\r\n flex: 1;\r\n }\r\n\r\n .var-indicator {\r\n width: 120px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n margin-right: 10px;\r\n text-align: center;\r\n }\r\n .calendar-wrap {\r\n width: 25px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 50%;\r\n height: 25px;\r\n text-align: center;\r\n cursor: pointer;\r\n margin-right: 15px;\r\n &:hover {\r\n border-color: rgb(24, 144, 255);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"variable-group\">\r\n <div class=\"variable-group-header\">\r\n <a-button @click=\"onAddVariable\">添加变量</a-button>\r\n </div>\r\n </div>\r\n <div class=\"variable-group-content\">\r\n <template v-for=\"(item, index) in variableList\" :key=\"item.keyValue\">\r\n <variable-item\r\n :item=\"item\"\r\n :index=\"index\"\r\n :label=\"item.label\"\r\n @update=\"onUpdateItem\"\r\n @delete=\"onDeleteItem\"\r\n />\r\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, unref } from 'vue'\r\nimport VariableItem from './VariableItem.vue'\r\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { handleVariableList } from '@/utils/util'\r\nimport { nanoid } from 'nanoid'\r\nimport { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'VariableGroup',\r\n components: {\r\n VariableItem\r\n },\r\n setup () {\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const variableList = computed(() => {\r\n const list = unref(graphicConfig)?.variableList || []\r\n return list\r\n })\r\n\r\n const updateConfig = (list: { [key:string]: any }[]) => {\r\n updateGraphicConfig({\r\n ...unref(graphicConfig),\r\n variableConditions: handleVariableList(list, renderUsedComponents),\r\n variableList: list\r\n })\r\n }\r\n\r\n const onAddVariable = () => {\r\n const list = cloneDeep(unref(variableList))\r\n list.push({\r\n keyValue: nanoid(),\r\n variableType: 'TEXT',\r\n dataType: '',\r\n id: null,\r\n dateTypeValue: null,\r\n format: null,\r\n operateType: 'add',\r\n operateMode: 'year',\r\n operateValue: 0,\r\n activeOperateKey: 1\r\n })\r\n updateConfig(list)\r\n }\r\n\r\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list[index] = data\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n return {\r\n variableList,\r\n onAddVariable,\r\n onUpdateItem,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-group-header {\r\n margin: 20px 0;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"variable-group\">\r\n <div class=\"variable-group-header\">\r\n <a-button @click=\"onAddVariable\">添加变量</a-button>\r\n </div>\r\n </div>\r\n <div class=\"variable-group-content\">\r\n <template v-for=\"(item, index) in variableList\" :key=\"item.keyValue\">\r\n <variable-item\r\n :item=\"item\"\r\n :index=\"index\"\r\n :label=\"item.label\"\r\n @update=\"onUpdateItem\"\r\n @delete=\"onDeleteItem\"\r\n />\r\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, unref } from 'vue'\r\nimport VariableItem from './VariableItem.vue'\r\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { handleVariableList } from '@/utils/util'\r\nimport { nanoid } from 'nanoid'\r\nimport { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'VariableGroup',\r\n components: {\r\n VariableItem\r\n },\r\n setup () {\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const variableList = computed(() => {\r\n const list = unref(graphicConfig)?.variableList || []\r\n return list\r\n })\r\n\r\n const updateConfig = (list: { [key:string]: any }[]) => {\r\n updateGraphicConfig({\r\n ...unref(graphicConfig),\r\n variableConditions: handleVariableList(list, renderUsedComponents),\r\n variableList: list\r\n })\r\n }\r\n\r\n const onAddVariable = () => {\r\n const list = cloneDeep(unref(variableList))\r\n list.push({\r\n keyValue: nanoid(),\r\n variableType: 'TEXT',\r\n dataType: '',\r\n id: null,\r\n dateTypeValue: null,\r\n format: null,\r\n operateType: 'add',\r\n operateMode: 'year',\r\n operateValue: 0,\r\n activeOperateKey: 1\r\n })\r\n updateConfig(list)\r\n }\r\n\r\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list[index] = data\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n return {\r\n variableList,\r\n onAddVariable,\r\n onUpdateItem,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-group-header {\r\n margin: 20px 0;\r\n}\r\n</style>\r\n","<template>\r\n <a-table\r\n style=\"width: 100%;\"\r\n :scroll=\"{ y: 280 }\"\r\n :columns=\"tableColumns\"\r\n :data-source=\"tableData\"\r\n size=\"small\"\r\n :pagination=\"pagination\"\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.retentiondigit !== undefined\">\r\n <span>{{ handleFormat(record, column)}}</span>\r\n </template>\r\n </template>\r\n </a-table>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, watch, unref } from 'vue'\r\nimport { Table as ATable } from 'ant-design-vue'\r\nimport useIndicatorData from '@/hooks/useIndicatorData'\r\nimport { handleFormat } from '@/utils/util'\r\n\r\nimport 'ant-design-vue/es/table/style'\r\nimport { REQUEST, INDICATOR_TOKEN, SELECTED_COMPONENT } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'TableGraph',\r\n components: { ATable },\r\n props: {\r\n graphicConfig: {\r\n // 指标库配置\r\n type: Object,\r\n default: () => {}\r\n },\r\n type: {\r\n type: String\r\n },\r\n pagination: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n },\r\n setup (props) {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as {\r\n [key: string]: any\r\n }\r\n const tableData = ref<any[]>([])\r\n const tableColumns = ref<any[]>([])\r\n const request = inject(REQUEST)\r\n const indicatorToken = inject(INDICATOR_TOKEN) || ''\r\n const handleIndicatorData = async () => {\r\n try {\r\n const indicatorData = useIndicatorData({\r\n graphicConfig: props.graphicConfig,\r\n type: props.type,\r\n request,\r\n indicatorToken\r\n })\r\n const res = await indicatorData()\r\n const { columns = [], rows = [] } = res?.data?.data ?? {}\r\n const columnsConfigMap = unref(selectedComponent).columnsConfigMap\r\n tableColumns.value = columns.map((i) => ({ title: i, dataIndex: i, label: i, ...columnsConfigMap[i] }))\r\n tableData.value = rows\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n watch(\r\n [() => props.graphicConfig, () => unref(selectedComponent).columnsConfigMap],\r\n () => {\r\n handleIndicatorData()\r\n },\r\n { deep: true, immediate: true }\r\n )\r\n return {\r\n tableData,\r\n tableColumns,\r\n handleFormat,\r\n columnsConfigMap: unref(selectedComponent).columnsConfigMap\r\n }\r\n }\r\n})\r\n</script>\r\n","<template>\r\n <a-table\r\n style=\"width: 100%;\"\r\n :scroll=\"{ y: 280 }\"\r\n :columns=\"tableColumns\"\r\n :data-source=\"tableData\"\r\n size=\"small\"\r\n :pagination=\"pagination\"\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.retentiondigit !== undefined\">\r\n <span>{{ handleFormat(record, column)}}</span>\r\n </template>\r\n </template>\r\n </a-table>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, watch, unref } from 'vue'\r\nimport { Table as ATable } from 'ant-design-vue'\r\nimport useIndicatorData from '@/hooks/useIndicatorData'\r\nimport { handleFormat } from '@/utils/util'\r\n\r\nimport 'ant-design-vue/es/table/style'\r\nimport { REQUEST, INDICATOR_TOKEN, SELECTED_COMPONENT } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'TableGraph',\r\n components: { ATable },\r\n props: {\r\n graphicConfig: {\r\n // 指标库配置\r\n type: Object,\r\n default: () => {}\r\n },\r\n type: {\r\n type: String\r\n },\r\n pagination: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n },\r\n setup (props) {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as {\r\n [key: string]: any\r\n }\r\n const tableData = ref<any[]>([])\r\n const tableColumns = ref<any[]>([])\r\n const request = inject(REQUEST)\r\n const indicatorToken = inject(INDICATOR_TOKEN) || ''\r\n const handleIndicatorData = async () => {\r\n try {\r\n const indicatorData = useIndicatorData({\r\n graphicConfig: props.graphicConfig,\r\n type: props.type,\r\n request,\r\n indicatorToken\r\n })\r\n const res = await indicatorData()\r\n const { columns = [], rows = [] } = res?.data?.data ?? {}\r\n const columnsConfigMap = unref(selectedComponent).columnsConfigMap\r\n tableColumns.value = columns.map((i) => ({ title: i, dataIndex: i, label: i, ...columnsConfigMap[i] }))\r\n tableData.value = rows\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n watch(\r\n [() => props.graphicConfig, () => unref(selectedComponent).columnsConfigMap],\r\n () => {\r\n handleIndicatorData()\r\n },\r\n { deep: true, immediate: true }\r\n )\r\n return {\r\n tableData,\r\n tableColumns,\r\n handleFormat,\r\n columnsConfigMap: unref(selectedComponent).columnsConfigMap\r\n }\r\n }\r\n})\r\n</script>\r\n","<template>\n <div class=\"data-config\" :class=\"isPivotTable ? 'pivot-table-wrap' : ''\">\n <a-tabs v-model:activeKey=\"activeKey\" @change=\"onChange\">\n <a-tab-pane key=\"1\" tab=\"数据配置\" ref=\"dataConfigPaneRef\">\n <template v-if=\"isPivotTable && isIframeMode\">\n <div class=\"ecan-pivot-table\" ref=\"pivotTableWrapRef\">\n <component\n v-if=\"asyncTableComponent\"\n :is=\"asyncTableComponent\"\n ref=\"componentRef\"\n v-bind=\"tableProps\"\n />\n </div>\n </template>\n <template v-else>\n <data-group ref=\"dataGroupRef\" v-if=\"!isPivotTable\" />\n <component\n v-if=\"!isShowStyleConfig\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n :is=\"type\"\n v-bind=\"component\"\n ref=\"componentRef\"\n @tableChange=\"onPivotTableChange\"\n />\n </template>\n </a-tab-pane>\n <a-tab-pane v-if=\"isShowStyleConfig\" key=\"2\" tab=\"样式配置\" force-render>\n <style-group :componentType=\"type\" :isGroupTable=\"isGroupTable\"></style-group>\n </a-tab-pane>\n <a-tab-pane v-if=\"(!isIframeMode || isPivotTable) && renderUsedComponents\" key=\"3\" tab=\"全局过滤\" force-render>\n <control-group ref=\"controlGroup\" :conditionOptions=\"conditionOptions\" />\n </a-tab-pane>\n <a-tab-pane\n v-if=\"!isIframeMode\"\n key=\"4\"\n tab=\"全局变量\"\n force-render\n >\n <variable-group />\n </a-tab-pane>\n <template #rightExtra>\n <a-button @click=\"refreshAction\">\n <template #icon>\n <reload-outlined />\n </template>\n 刷新\n </a-button>\n </template>\n </a-tabs>\n <template v-if=\"isShowStyleConfig && !isPivotTable\">\n <div\n v-if=\"type === 'table' && activeKey === '1'\"\n id=\"table-wrap\"\n class=\"chart-component\"\n ref=\"tableWrapRef\"\n style=\"width: 100%; height: 290px\"\n ></div>\n <table-graph v-show=\"activeKey === '1'\" class=\"chart-component\" v-else-if=\"type === 'card'\" v-bind=\"component\"></table-graph>\n <chart-graph\n v-else\n v-show=\"activeKey === '1'\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n ref=\"componentRef\"\n style=\"width: 100%; height: 290px\"\n ></chart-graph>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref, unref, inject, watch, provide, onMounted, defineAsyncComponent } from 'vue'\nimport { Tabs as ATabs, TabPane as ATabPane, Button as AButton } from 'ant-design-vue'\nimport DataGroup from './data-config-group'\nimport StyleGroup from './style-config-group'\nimport ControlGroup from './control-group'\nimport VariableGroup from './variable-group'\nimport ChartGraph from '@/indicator/chart-graph/ChartGraph.vue'\nimport TableGraph from '@/indicator/table-graph/TableGraph.vue'\nimport { cloneDeep, pick, without } from 'lodash-es'\nimport { ReloadOutlined } from '@ant-design/icons-vue'\nimport {\n SELECTED_COMPONENT,\n GRAPHIC_CONFIG,\n SHOW_STYLE_CONFIG,\n REFRESH_DATA,\n RENDER_USED_COMPONENTS,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n PAGE_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n IS_PIVOT_TABLE,\n IS_IFRAME_MODE\n} from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\n\nexport default defineComponent({\n name: 'DataConfig',\n components: {\n DataGroup,\n StyleGroup,\n ChartGraph,\n ATabs,\n ATabPane,\n ControlGroup,\n VariableGroup,\n AButton,\n ReloadOutlined,\n TableGraph\n },\n setup (_props, { expose }) {\n const asyncTableComponent = ref(null)\n const dataConfigPaneRef = ref()\n const activeKey = ref('1')\n const activePanel = ref<number[]>([0, 1, 2])\n const componentRef = ref()\n const pivotTableWrapRef = ref()\n const selectedComponent = inject(SELECTED_COMPONENT) as {\n [key: string]: any\n }\n const isShowStyleConfig = inject(SHOW_STYLE_CONFIG)\n const graphicConfig = inject(GRAPHIC_CONFIG) as { [key: string]: any }\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const pageConfig = inject(PAGE_CONFIG) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const isIframeMode = inject(IS_IFRAME_MODE) as any\n const notGraphicList = ['text', 'proportion', 'select', 'checkbox', 'radio', 'radar', 'circulate']\n const component = computed<{ [key: string]: any }>(() => {\n const cloneComponent = cloneDeep(unref(selectedComponent))\n modifyWhite(cloneComponent)\n const pickComponent = pick(\n cloneComponent,\n without(Object.keys(cloneComponent), 'position', 'top', 'left', 'width', 'height')\n )\n if (lowerCaseIncludes(cloneComponent.type, notGraphicList)) {\n pickComponent.height = cloneComponent.height\n pickComponent.width = cloneComponent.width\n } else {\n pickComponent.height = '290px'\n }\n const config = cloneDeep(unref(graphicConfig))\n // 设计模式\n config.pageMode = 'design'\n // 组件列表\n config.componentList = renderUsedComponents\n // 后台开启预览模式\n config.preview = true\n // 页面配置\n config.pageConfig = pageConfig\n\n if (lowerCaseIncludes(cloneComponent.type, 'pivottable')) {\n if (unref(dataConfigPaneRef)) {\n pickComponent.height = unref(dataConfigPaneRef).$el.clientHeight - 20 + 'px'\n pickComponent.width = unref(dataConfigPaneRef).$el.clientWidth + 'px'\n }\n pickComponent.fullMode = true\n config.preview = false\n delete config.pageMode\n }\n\n return {\n ...pickComponent,\n graphicConfig: config,\n // 隐藏工具栏\n toolboxShow: false,\n // 保存原有的left和top\n sourceLeft: cloneComponent.left,\n sourceTop: cloneComponent.top\n }\n })\n\n const tableProps = computed(() => {\n const { token, context } = unref(selectedComponent)\n const width = (unref(pivotTableWrapRef)?.clientWidth || 0) + 'px'\n const height = (unref(pivotTableWrapRef)?.clientHeight || 0) + 'px'\n return {\n id: unref(selectedComponent).componentId,\n name: unref(selectedComponent).name,\n keyName: unref(selectedComponent).keyName,\n type: 'pivotTable',\n width,\n height,\n graphicConfig: unref(selectedComponent).graphicConfig,\n dimensionList: unref(selectedComponent).dimensionList || [],\n fullMode: true,\n globalModel: new Map(),\n indicatorUrl: '/api',\n indicatorToken: token,\n context\n }\n })\n\n // 修改组件的部分颜色(只影响指标库配置弹窗中的显示,不影响最终预览效果),比如文本控件如果设置为白色,在指标库配置弹窗中就看不见了\n function modifyWhite (component: { [key: string]: any }) {\n if (['#ffffff', '#fff'].includes(component?.color?.toLowerCase())) {\n component.color = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.variableColor?.toLowerCase())) {\n component.variableColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.increaseColor?.toLowerCase())) {\n component.increaseColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.declineColor?.toLowerCase())) {\n component.declineColor = '#000'\n }\n }\n const fullWidth = computed(() => {\n let result = true\n if (lowerCaseIncludes(unref(component).type, notGraphicList)) {\n result = false\n }\n return result\n })\n const type = computed(() => unref(component)?.type)\n const isGroupTable = computed(() => !!unref(component)?.isGroupTable)\n\n const onChange = (val: string) => {\n const bool = val === '1'\n if (bool && type.value === 'table') {\n refreshData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(bool)\n }\n if (val === '3') {\n // 获取指标中的其他数据\n getOtherData()\n }\n }\n\n const conditionOptions = ref<any>([])\n // 指标的交集数据\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n function getOtherData () {\n const { leftAxisList = [], rightAxisList = [], queryColumnList = [], indicators = [], dataSourceId = '' } = unref(graphicConfig)\n const otherList = [...leftAxisList, ...rightAxisList, ...queryColumnList, ...indicators]\n const idMap: any = {}\n for (const item of otherList) {\n const { id = '', indexCode = '' } = item\n if (id && !hasOwn(item, 'calcType') && !idMap[id]) {\n idMap[id] = indexCode\n }\n }\n if (Object.keys(idMap)?.length) {\n const promistList = []\n for (const id in idMap) {\n promistList.push(\n new Promise((resolve, reject) => {\n request\n .post(\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\n {\n pageId: PAGE_ID,\n indexGuid: id,\n indexCode: idMap[id],\n dataSourceId\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n .then((res: any) => {\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n resolve(data.dataViewColumns)\n } else {\n reject(data)\n }\n })\n .catch((e) => {\n reject(e)\n })\n })\n )\n }\n Promise.all(promistList).then((res) => {\n if (res?.length) {\n // 取交集\n const resultList = res.reduce((a: any, b: any) =>\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\n )\n setConditionOptions(resultList.filter((v: any) => v.typeGuid))\n }\n })\n } else {\n setConditionOptions([])\n }\n }\n\n function setConditionOptions (intersection: any) {\n const {\n classificationList = [],\n seriesList = [],\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n rowHeaderList = [],\n queryColumnList = []\n } = unref(graphicConfig)\n const otherOptions = cloneDeep([\n ...classificationList,\n ...seriesList,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators,\n ...rowHeaderList,\n ...queryColumnList\n ])\n if (otherOptions?.length) {\n for (const item of otherOptions) {\n item.id = item.name\n }\n }\n\n const options = [\n {\n label: '日期(内置)', // 设值对应 conditionLabel\n name: '日期(内置)', // 设值对应 conditionName\n id: 'the_date', // 设值对应 conditionKey (conditionValue 在关联控件中取)\n genericType: 'DATE', // 设值对应 conditionValueType\n typeGuid: 'the_date',\n indexCode: null\n },\n {\n label: '单位编号(内置)',\n name: '单位编号(内置)',\n id: 'hbdwbh',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh',\n indexCode: null\n },\n {\n label: '单位名称(内置)',\n name: '单位名称(内置)',\n id: 'hbdwbh_name',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh_name',\n indexCode: null\n },\n {\n label: '年(内置)',\n name: '年(内置)',\n id: 'the_year',\n genericType: 'TEXT',\n typeGuid: 'the_year',\n indexCode: null\n },\n {\n label: '月(内置)',\n name: '月(内置)',\n id: 'the_month',\n genericType: 'TEXT',\n typeGuid: 'the_month',\n indexCode: null\n },\n {\n label: '日(内置)',\n name: '日(内置)',\n id: 'the_day',\n genericType: 'TEXT',\n typeGuid: 'the_day',\n indexCode: null\n },\n ...intersection.map((v: any) => {\n return {\n ...v,\n id: v.name,\n label: v.title || v.label\n }\n }),\n ...otherOptions\n ]\n\n // 下拉框组件增加“上级编码”用于级联操作\n if (unref(selectedComponent)?.type === 'ecanSelect') {\n const { selectFieldOptions = [] } = unref(graphicConfig)\n options.unshift({\n label: '上级编码',\n name: '上级编码',\n id: 'parentCode',\n genericType: 'TEXT'\n })\n if (selectFieldOptions?.length) {\n for (const item of selectFieldOptions) {\n options.unshift({\n label: item.label,\n name: item.value,\n id: item.value,\n genericType: 'TEXT'\n })\n }\n }\n }\n\n // 去重\n const optionsMap = new Map()\n const optionsLen = options.length\n for (let i = 0; i < optionsLen; i++) {\n const option = options[i]\n const { id } = option || {}\n optionsMap.set(id, option)\n }\n const optionsMapArr = [...optionsMap]\n conditionOptions.value = optionsMapArr.map(([_id, option]) => option)\n }\n\n const refreshData = () => {\n let refreshData: any\n if (isShowStyleConfig && type.value === 'table') {\n refreshData = (window as any).updateConfig\n } else {\n refreshData = unref(componentRef)?.refreshData\n }\n if (typeof refreshData === 'function') {\n refreshData()\n }\n }\n\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const refreshAction = () => {\n // 刷新全局变量的最新配置\n updateGraphicConfig({\n variableConditions: handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n })\n }\n\n provide(REFRESH_DATA, refreshData)\n watch(\n graphicConfig,\n () => {\n refreshData()\n },\n {\n deep: true,\n flush: 'post'\n }\n )\n\n const loadPivotTablePlugin = async () => {\n try {\n const tableModule = await import('@ecan-bi/pivot-table')\n asyncTableComponent.value = defineAsyncComponent({\n loader: () => Promise.resolve(tableModule.EcanPivotTable),\n delay: 0\n })\n } catch (error) {\n console.error('加载插件失败:', error)\n }\n }\n\n onMounted(async () => {\n if (isPivotTable.value) {\n await loadPivotTablePlugin()\n setTimeout(() => {\n refreshData()\n }, 0)\n }\n })\n\n const getSaveData = () => unref(componentRef).getSaveData()\n\n // 透视表操作变化\n const onPivotTableChange = ({ type, data }) => {\n if (type === '10') {\n const { dimensions, indicators } = cloneDeep(data)\n const dimensionList = []\n if (dimensions) {\n for (const item of dimensions) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n dimensionList.push({\n key: item.name,\n label: item.showTitle,\n width: null,\n position: item.positionType || 'rows'\n })\n }\n for (const item of indicators) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n }\n }\n updateGraphicConfig({\n dimensionList,\n queryColumnList: dimensions,\n indicators: indicators\n })\n component.value.dimensionList = dimensionList\n }\n }\n\n expose({\n getSaveData\n })\n\n return {\n isShowStyleConfig,\n activeKey,\n activePanel,\n componentRef,\n pivotTableWrapRef,\n type,\n isGroupTable,\n isPivotTable,\n isIframeMode,\n component,\n fullWidth,\n renderUsedComponents,\n conditionOptions,\n tableProps,\n dataConfigPaneRef,\n asyncTableComponent,\n refreshData,\n refreshAction,\n onChange,\n onPivotTableChange\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config {\n background: #fff;\n height: 100%;\n width: 100%;\n padding: 0 15px;\n overflow-y: auto;\n color: #444;\n display: flex;\n flex-flow: column;\n\n :deep(.ant-tabs) {\n // height: calc(100% - 310px);\n flex: 1;\n\n .ant-tabs-nav {\n margin-bottom: 4px;\n }\n\n .ant-tabs-content-holder {\n height: calc(100% - 50px);\n overflow: auto;\n }\n }\n\n &.pivot-table-wrap {\n :deep(.ant-tabs) {\n .ant-tabs-content-holder {\n overflow: hidden;\n .ant-tabs-content {\n height: 100%;\n }\n }\n }\n }\n\n .ecan-pivot-table {\n width: 100%;\n height: 100%;\n position: relative;\n }\n}\n\n.chart-component {\n width: 100%;\n position: relative !important;\n margin: 20px auto 0;\n\n &.full-width {\n width: 100% !important;\n }\n}\n\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 135px;\n display: flex;\n justify-content: center;\n}\n\n.component-wrapper {\n width: calc(100% - 135px);\n}\n\n.color-pick {\n display: flex;\n}\n\n.input {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"data-config\" :class=\"isPivotTable ? 'pivot-table-wrap' : ''\">\n <a-tabs v-model:activeKey=\"activeKey\" @change=\"onChange\">\n <a-tab-pane key=\"1\" tab=\"数据配置\" ref=\"dataConfigPaneRef\">\n <template v-if=\"isPivotTable && isIframeMode\">\n <div class=\"ecan-pivot-table\" ref=\"pivotTableWrapRef\">\n <component\n v-if=\"asyncTableComponent\"\n :is=\"asyncTableComponent\"\n ref=\"componentRef\"\n v-bind=\"tableProps\"\n />\n </div>\n </template>\n <template v-else>\n <data-group ref=\"dataGroupRef\" v-if=\"!isPivotTable\" />\n <component\n v-if=\"!isShowStyleConfig\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n :is=\"type\"\n v-bind=\"component\"\n ref=\"componentRef\"\n @tableChange=\"onPivotTableChange\"\n />\n </template>\n </a-tab-pane>\n <a-tab-pane v-if=\"isShowStyleConfig\" key=\"2\" tab=\"样式配置\" force-render>\n <style-group :componentType=\"type\" :isGroupTable=\"isGroupTable\"></style-group>\n </a-tab-pane>\n <a-tab-pane v-if=\"(!isIframeMode || isPivotTable) && renderUsedComponents\" key=\"3\" tab=\"全局过滤\" force-render>\n <control-group ref=\"controlGroup\" :conditionOptions=\"conditionOptions\" />\n </a-tab-pane>\n <a-tab-pane\n v-if=\"!isIframeMode\"\n key=\"4\"\n tab=\"全局变量\"\n force-render\n >\n <variable-group />\n </a-tab-pane>\n <template #rightExtra>\n <a-button @click=\"refreshAction\">\n <template #icon>\n <reload-outlined />\n </template>\n 刷新\n </a-button>\n </template>\n </a-tabs>\n <template v-if=\"isShowStyleConfig && !isPivotTable\">\n <div\n v-if=\"type === 'table' && activeKey === '1'\"\n id=\"table-wrap\"\n class=\"chart-component\"\n ref=\"tableWrapRef\"\n style=\"width: 100%; height: 290px\"\n ></div>\n <table-graph v-show=\"activeKey === '1'\" class=\"chart-component\" v-else-if=\"type === 'card'\" v-bind=\"component\"></table-graph>\n <chart-graph\n v-else\n v-show=\"activeKey === '1'\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n ref=\"componentRef\"\n style=\"width: 100%; height: 290px\"\n ></chart-graph>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref, unref, inject, watch, provide, onMounted, defineAsyncComponent } from 'vue'\nimport { Tabs as ATabs, TabPane as ATabPane, Button as AButton } from 'ant-design-vue'\nimport DataGroup from './data-config-group'\nimport StyleGroup from './style-config-group'\nimport ControlGroup from './control-group'\nimport VariableGroup from './variable-group'\nimport ChartGraph from '@/indicator/chart-graph/ChartGraph.vue'\nimport TableGraph from '@/indicator/table-graph/TableGraph.vue'\nimport { cloneDeep, pick, without } from 'lodash-es'\nimport { ReloadOutlined } from '@ant-design/icons-vue'\nimport {\n SELECTED_COMPONENT,\n GRAPHIC_CONFIG,\n SHOW_STYLE_CONFIG,\n REFRESH_DATA,\n RENDER_USED_COMPONENTS,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n PAGE_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n IS_PIVOT_TABLE,\n IS_IFRAME_MODE\n} from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\n\nexport default defineComponent({\n name: 'DataConfig',\n components: {\n DataGroup,\n StyleGroup,\n ChartGraph,\n ATabs,\n ATabPane,\n ControlGroup,\n VariableGroup,\n AButton,\n ReloadOutlined,\n TableGraph\n },\n setup (_props, { expose }) {\n const asyncTableComponent = ref(null)\n const dataConfigPaneRef = ref()\n const activeKey = ref('1')\n const activePanel = ref<number[]>([0, 1, 2])\n const componentRef = ref()\n const pivotTableWrapRef = ref()\n const selectedComponent = inject(SELECTED_COMPONENT) as {\n [key: string]: any\n }\n const isShowStyleConfig = inject(SHOW_STYLE_CONFIG)\n const graphicConfig = inject(GRAPHIC_CONFIG) as { [key: string]: any }\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const pageConfig = inject(PAGE_CONFIG) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const isIframeMode = inject(IS_IFRAME_MODE) as any\n const notGraphicList = ['text', 'proportion', 'select', 'checkbox', 'radio', 'radar', 'circulate']\n const component = computed<{ [key: string]: any }>(() => {\n const cloneComponent = cloneDeep(unref(selectedComponent))\n modifyWhite(cloneComponent)\n const pickComponent = pick(\n cloneComponent,\n without(Object.keys(cloneComponent), 'position', 'top', 'left', 'width', 'height')\n )\n if (lowerCaseIncludes(cloneComponent.type, notGraphicList)) {\n pickComponent.height = cloneComponent.height\n pickComponent.width = cloneComponent.width\n } else {\n pickComponent.height = '290px'\n }\n const config = cloneDeep(unref(graphicConfig))\n // 设计模式\n config.pageMode = 'design'\n // 组件列表\n config.componentList = renderUsedComponents\n // 后台开启预览模式\n config.preview = true\n // 页面配置\n config.pageConfig = pageConfig\n\n if (lowerCaseIncludes(cloneComponent.type, 'pivottable')) {\n if (unref(dataConfigPaneRef)) {\n pickComponent.height = unref(dataConfigPaneRef).$el.clientHeight - 20 + 'px'\n pickComponent.width = unref(dataConfigPaneRef).$el.clientWidth + 'px'\n }\n pickComponent.fullMode = true\n config.preview = false\n delete config.pageMode\n }\n\n return {\n ...pickComponent,\n graphicConfig: config,\n // 隐藏工具栏\n toolboxShow: false,\n // 保存原有的left和top\n sourceLeft: cloneComponent.left,\n sourceTop: cloneComponent.top\n }\n })\n\n const tableProps = computed(() => {\n const { token, context } = unref(selectedComponent)\n const width = (unref(pivotTableWrapRef)?.clientWidth || 0) + 'px'\n const height = (unref(pivotTableWrapRef)?.clientHeight || 0) + 'px'\n return {\n id: unref(selectedComponent).componentId,\n name: unref(selectedComponent).name,\n keyName: unref(selectedComponent).keyName,\n type: 'pivotTable',\n width,\n height,\n graphicConfig: unref(selectedComponent).graphicConfig,\n dimensionList: unref(selectedComponent).dimensionList || [],\n fullMode: true,\n globalModel: new Map(),\n indicatorUrl: '/api',\n indicatorToken: token,\n context\n }\n })\n\n // 修改组件的部分颜色(只影响指标库配置弹窗中的显示,不影响最终预览效果),比如文本控件如果设置为白色,在指标库配置弹窗中就看不见了\n function modifyWhite (component: { [key: string]: any }) {\n if (['#ffffff', '#fff'].includes(component?.color?.toLowerCase())) {\n component.color = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.variableColor?.toLowerCase())) {\n component.variableColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.increaseColor?.toLowerCase())) {\n component.increaseColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.declineColor?.toLowerCase())) {\n component.declineColor = '#000'\n }\n }\n const fullWidth = computed(() => {\n let result = true\n if (lowerCaseIncludes(unref(component).type, notGraphicList)) {\n result = false\n }\n return result\n })\n const type = computed(() => unref(component)?.type)\n const isGroupTable = computed(() => !!unref(component)?.isGroupTable)\n\n const onChange = (val: string) => {\n const bool = val === '1'\n if (bool && type.value === 'table') {\n refreshData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(bool)\n }\n if (val === '3') {\n // 获取指标中的其他数据\n getOtherData()\n }\n }\n\n const conditionOptions = ref<any>([])\n // 指标的交集数据\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n function getOtherData () {\n const { leftAxisList = [], rightAxisList = [], queryColumnList = [], indicators = [], dataSourceId = '' } = unref(graphicConfig)\n const otherList = [...leftAxisList, ...rightAxisList, ...queryColumnList, ...indicators]\n const idMap: any = {}\n for (const item of otherList) {\n const { id = '', indexCode = '' } = item\n if (id && !hasOwn(item, 'calcType') && !idMap[id]) {\n idMap[id] = indexCode\n }\n }\n if (Object.keys(idMap)?.length) {\n const promistList = []\n for (const id in idMap) {\n promistList.push(\n new Promise((resolve, reject) => {\n request\n .post(\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\n {\n pageId: PAGE_ID,\n indexGuid: id,\n indexCode: idMap[id],\n dataSourceId\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n .then((res: any) => {\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n resolve(data.dataViewColumns)\n } else {\n reject(data)\n }\n })\n .catch((e) => {\n reject(e)\n })\n })\n )\n }\n Promise.all(promistList).then((res) => {\n if (res?.length) {\n // 取交集\n const resultList = res.reduce((a: any, b: any) =>\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\n )\n setConditionOptions(resultList.filter((v: any) => v.typeGuid))\n }\n })\n } else {\n setConditionOptions([])\n }\n }\n\n function setConditionOptions (intersection: any) {\n const {\n classificationList = [],\n seriesList = [],\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n rowHeaderList = [],\n queryColumnList = []\n } = unref(graphicConfig)\n const otherOptions = cloneDeep([\n ...classificationList,\n ...seriesList,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators,\n ...rowHeaderList,\n ...queryColumnList\n ])\n if (otherOptions?.length) {\n for (const item of otherOptions) {\n item.id = item.name\n }\n }\n\n const options = [\n {\n label: '日期(内置)', // 设值对应 conditionLabel\n name: '日期(内置)', // 设值对应 conditionName\n id: 'the_date', // 设值对应 conditionKey (conditionValue 在关联控件中取)\n genericType: 'DATE', // 设值对应 conditionValueType\n typeGuid: 'the_date',\n indexCode: null\n },\n {\n label: '单位编号(内置)',\n name: '单位编号(内置)',\n id: 'hbdwbh',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh',\n indexCode: null\n },\n {\n label: '单位名称(内置)',\n name: '单位名称(内置)',\n id: 'hbdwbh_name',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh_name',\n indexCode: null\n },\n {\n label: '年(内置)',\n name: '年(内置)',\n id: 'the_year',\n genericType: 'TEXT',\n typeGuid: 'the_year',\n indexCode: null\n },\n {\n label: '月(内置)',\n name: '月(内置)',\n id: 'the_month',\n genericType: 'TEXT',\n typeGuid: 'the_month',\n indexCode: null\n },\n {\n label: '日(内置)',\n name: '日(内置)',\n id: 'the_day',\n genericType: 'TEXT',\n typeGuid: 'the_day',\n indexCode: null\n },\n ...intersection.map((v: any) => {\n return {\n ...v,\n id: v.name,\n label: v.title || v.label\n }\n }),\n ...otherOptions\n ]\n\n // 下拉框组件增加“上级编码”用于级联操作\n if (unref(selectedComponent)?.type === 'ecanSelect') {\n const { selectFieldOptions = [] } = unref(graphicConfig)\n options.unshift({\n label: '上级编码',\n name: '上级编码',\n id: 'parentCode',\n genericType: 'TEXT'\n })\n if (selectFieldOptions?.length) {\n for (const item of selectFieldOptions) {\n options.unshift({\n label: item.label,\n name: item.value,\n id: item.value,\n genericType: 'TEXT'\n })\n }\n }\n }\n\n // 去重\n const optionsMap = new Map()\n const optionsLen = options.length\n for (let i = 0; i < optionsLen; i++) {\n const option = options[i]\n const { id } = option || {}\n optionsMap.set(id, option)\n }\n const optionsMapArr = [...optionsMap]\n conditionOptions.value = optionsMapArr.map(([_id, option]) => option)\n }\n\n const refreshData = () => {\n let refreshData: any\n if (isShowStyleConfig && type.value === 'table') {\n refreshData = (window as any).updateConfig\n } else {\n refreshData = unref(componentRef)?.refreshData\n }\n if (typeof refreshData === 'function') {\n refreshData()\n }\n }\n\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const refreshAction = () => {\n // 刷新全局变量的最新配置\n updateGraphicConfig({\n variableConditions: handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n })\n }\n\n provide(REFRESH_DATA, refreshData)\n watch(\n graphicConfig,\n () => {\n refreshData()\n },\n {\n deep: true,\n flush: 'post'\n }\n )\n\n const loadPivotTablePlugin = async () => {\n try {\n const tableModule = await import('@ecan-bi/pivot-table')\n asyncTableComponent.value = defineAsyncComponent({\n loader: () => Promise.resolve(tableModule.EcanPivotTable),\n delay: 0\n })\n } catch (error) {\n console.error('加载插件失败:', error)\n }\n }\n\n onMounted(async () => {\n if (isPivotTable.value) {\n await loadPivotTablePlugin()\n setTimeout(() => {\n refreshData()\n }, 0)\n }\n })\n\n const getSaveData = () => unref(componentRef).getSaveData()\n\n // 透视表操作变化\n const onPivotTableChange = ({ type, data }) => {\n if (type === '10') {\n const { dimensions, indicators } = cloneDeep(data)\n const dimensionList = []\n if (dimensions) {\n for (const item of dimensions) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n dimensionList.push({\n key: item.name,\n label: item.showTitle,\n width: null,\n position: item.positionType || 'rows'\n })\n }\n for (const item of indicators) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n }\n }\n updateGraphicConfig({\n dimensionList,\n queryColumnList: dimensions,\n indicators: indicators\n })\n component.value.dimensionList = dimensionList\n }\n }\n\n expose({\n getSaveData\n })\n\n return {\n isShowStyleConfig,\n activeKey,\n activePanel,\n componentRef,\n pivotTableWrapRef,\n type,\n isGroupTable,\n isPivotTable,\n isIframeMode,\n component,\n fullWidth,\n renderUsedComponents,\n conditionOptions,\n tableProps,\n dataConfigPaneRef,\n asyncTableComponent,\n refreshData,\n refreshAction,\n onChange,\n onPivotTableChange\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config {\n background: #fff;\n height: 100%;\n width: 100%;\n padding: 0 15px;\n overflow-y: auto;\n color: #444;\n display: flex;\n flex-flow: column;\n\n :deep(.ant-tabs) {\n // height: calc(100% - 310px);\n flex: 1;\n\n .ant-tabs-nav {\n margin-bottom: 4px;\n }\n\n .ant-tabs-content-holder {\n height: calc(100% - 50px);\n overflow: auto;\n }\n }\n\n &.pivot-table-wrap {\n :deep(.ant-tabs) {\n .ant-tabs-content-holder {\n overflow: hidden;\n .ant-tabs-content {\n height: 100%;\n }\n }\n }\n }\n\n .ecan-pivot-table {\n width: 100%;\n height: 100%;\n position: relative;\n }\n}\n\n.chart-component {\n width: 100%;\n position: relative !important;\n margin: 20px auto 0;\n\n &.full-width {\n width: 100% !important;\n }\n}\n\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 135px;\n display: flex;\n justify-content: center;\n}\n\n.component-wrapper {\n width: calc(100% - 135px);\n}\n\n.color-pick {\n display: flex;\n}\n\n.input {\n margin-right: 10px;\n}\n</style>\n"],"names":["AppstoreAddOutlined","AppstoreAddOutlinedSvg","_objectSpread","target","i","source","ownKeys","sym","key","_defineProperty","obj","value","props","context","p","_createVNode","AntdIcon","AppstoreAddOutlined$1","CloseOutlined","CloseOutlinedSvg","CloseOutlined$1","CodeOutlined","CodeOutlinedSvg","CodeOutlined$1","CopyOutlined","CopyOutlinedSvg","CopyOutlined$1","DeleteOutlined","DeleteOutlinedSvg","DeleteOutlined$1","DoubleRightOutlined","DoubleRightOutlinedSvg","DoubleRightOutlined$1","DownOutlined","DownOutlinedSvg","DownOutlined$1","InfoCircleOutlined","InfoCircleOutlinedSvg","InfoCircleOutlined$1","MenuOutlined","MenuOutlinedSvg","MenuOutlined$1","MinusCircleOutlined","MinusCircleOutlinedSvg","MinusCircleOutlined$1","PlusCircleOutlined","PlusCircleOutlinedSvg","PlusCircleOutlined$1","PlusOutlined","PlusOutlinedSvg","PlusOutlined$1","QuestionCircleOutlined","QuestionCircleOutlinedSvg","QuestionCircleOutlined$1","ReloadOutlined","ReloadOutlinedSvg","ReloadOutlined$1","SettingOutlined","SettingOutlinedSvg","SettingOutlined$1","focus$1","el","_sfc_main$C","defineComponent","Draggable","AModal","AButton","ASelect","ASelectOption","expose","PAGE_ID","_a","request","inject","REQUEST","indicatorToken","unref","INDICATOR_TOKEN","graphicConfig","GRAPHIC_CONFIG","updateGraphicConfig","UPDATE_GRAPHIC_CONFIG","computed","dataViewId","customSortList","ref","activeKey","combSortList","getSortOptions","item","list","v","c","names","index","handleCustomSortList","res","INDICATOR_URL","success","data","e","updateCustomSortList","label","name","_b","cloneDeep","isDataChange","onChange","visible","showModal","sort","hideModal","onCancel","watch","customOrderColumns","columnName","option","_hoisted_1","_hoisted_2","_resolveComponent","_openBlock","_createBlock","_component_a_modal","_ctx","_withCtx","_component_a_tabs","_cache","$event","_component_a_tab_pane","_createElementVNode","_component_a_button","_createElementBlock","_Fragment","_renderList","_component_a_select","_component_a_select_option","_component_delete_outlined","_hoisted_3","_sfc_main$B","focus","AInput","ACheckbox","ACollapse","ACollapsePanel","ATag","ACheckableTag","title","createGroupTitle","createValueTitle","customGroupList","customGroupTitleSet","customGroupTitleList","customGroupEditTitleList","length","selectCount","count","customGroup","onAddGroup","message","onAddValue","isAllow","group","onDeleteGroup","selectGroupIndex","onMoveInGroup","selectList","len","onEditTitle","onFinishEditTitle","onTitleChange","event","useOtherGroup","updateCustomGroup","customGroups","otherGroupName","groupInfoMap","onUseOtherGroup","allLabelSet","handleInitData","handleCustomGroupList","rows","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_resolveDirective","_createTextVNode","_toDisplayString","_hoisted_5","_component_a_input","_hoisted_8","_component_a_collapse","_component_a_collapse_panel","_withDirectives","_component_a_tag","_createCommentVNode","_hoisted_11","_component_a_checkable_tag","nanoid","size","id","bytes","byte","t","n","module","this","r","s","u","o","dayjs","quarterOfYear","_sfc_main$A","ADatePicker","ADropdown","AMenu","AMenuItem","ASubMenu","APopover","ATabs","ATabPane","ARadioGroup","ARadio","AInputNumber","dataViewColumns","DATA_VIEW_COLUMNS","renderComponents","RENDER_USED_COMPONENTS","isUseCurrentTime","currentTime","controlList","result","keyName","type","keyNameOptions","showTime","dateRadioStyle","formatList","customTabData","tabDateList","compareList","menuRule","dataTypeList","condition","_c","_d","_e","getDefaultFieldValue","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","fieldType","dataType","fieldValue","dataSetfieldOptions","popoverVisible","isDateType","fieldOptions","dims","otherList","options","updateCondition","deleteCondition","addCondition","CHANGE_CONDITION","_condition","_index","_path","_join","onDelete","onFieldChange","genericType","edvDataSetId","typeGuid","indexCode","indexCodeNum","onChangeComponent","ruleOptions","dateBtnLabel","downIconStyle","style","valueOptions","handleValueOptions","onRuleChange","onDataTypeChange","fieldValues","onFieldValueSelectChange","values","handleMenuClick","keyPath","onMounted","dateCalcTypes","calcWay","vals","tabItem","setTabItemData","fieldName","rule","err","changeTabInitDate","row","changeRadioValue","format","beforeNum","afterNum","getDateValue","getFieldValue","tabIndex","blurCompare","flag","okDatePickConfig","okCustomConfig","radioValue","calcWays","filterOption","input","isShowCustomDataType","_hoisted_13","_component_a_dropdown","_component_a_menu","_normalizeStyle","mr","_component_a_sub_menu","fl","_component_DownOutlined","_vShow","_component_a_date_picker","_component_a_popover","_component_a_checkbox","_component_a_radio_group","_component_a_radio","_component_a_input_number","_hoisted_14","_hoisted_15","_component_a_menu_item","_component_close_outlined","_sfc_main$z","Condition","_component_condition_list","_component_condition","_sfc_main$y","emit","truncationList","val","_withScopeId","_pushScopeId","_popScopeId","_sfc_main$x","ConditionList","TruncationList","handleTitle","renderUsedComponents","dataSourceId","selectedComponent","SELECTED_COMPONENT","updateUsedComponent","UPDATE_USED_COMPONENT","conditionList","SOURCE_TYPE","addKeyValue","conditions","join","provide","path","pathArr","lastIndex","lastPath","wrapperPath","wrapperConditions","wrapperJoin","j","temp","cdJoin","onUpdatetruncation","renderControlList","updateFilter","getConditions","oldConditions","pendingDelete","f","pendingAdd","setEvent","getSqlConditions","deletes","adds","component","events","getEventName","onOk","getHrpIndexWithComplex","indtData","indexGuid","column","_component_truncation_list","_sfc_main$w","showLabel","_sfc_main$v","usedComponentList","usedComponent","oldData","sortCpnts","idFilterOption","inputValue","_sfc_main$u","dimensionList","columns","dimByCount","getParentKey","tree","parentKey","node","_sfc_main$t","ARow","ACol","ATextarea","AInputSearch","ATree","ARadioButton","leftAxisList","variableList","rightAxisList","indicators","queryColumnList","indexLibColumns","fieldList","field","varList","myValue","searchFuncValue","insertText","str","tmpStr","sel","startPos","endPos","cursorPos","calculMethods","selectedElem","inputVal","dataList","expandedKeys","autoExpandParent","funcDescsData","setDataList","getFuncDescs","onExpand","keys","expanded","self","_hoisted_16","_component_a_row","_component_a_col","_component_a_radio_button","variabled","_component_a_textarea","_component_a_input_search","_component_a_tree","leaf","describe","exp","_component_a_tooltip","_createSlots","_hoisted_12","_hoisted_18","_sfc_main$s","FormulaCalculation","AForm","AFormItem","ATooltip","componentList","builtInValueSourceList","allValueSourceList","labelCol","wrapperCol","formDefaultValue","defaultConfig","offsetConfig","formRef","formState","calcType","formula","builtInValueSource","builtInFormula","builtInCalcWay","saveIndicator","offset","lowerCaseIncludes","validateLabel","_rule","formRules","onOK","onChangeBuiltInFormula","accessLogic","principle","comefrom","_component_a_form","_component_a_form_item","_component_formula_calculation","_component_question_circle_outlined","_sfc_main$r","CalculationModal","FilterModal","CustomGroupModal","CustomSortModal","ACard","AMenuDivider","ConfigName","SortByCpnt","DimByCount","indSortList","idxList","dimList","indexSetList","currentCardItem","compositeIndicator","isAllowAdd","dataSelectIndicators","handleListItemData","listData","reNameSame","varConfig","variates","handleVariableList","handleCardItemData","cardData","cardItem","currentList","originalList","addItem","sameNums","checkItem","onCheckboxChange","onDropEnd","onDragItemEnd","onDragItemAdd","listItemData","cardItemData","onDragItemSort","newIndex","oldIndex","from","to","fromType","toType","currItem","onDragItemStart","dataViews","dataView","cardItemList","editLabelList","isLabelChange","onEdit","onLabelChange","onCommitLabelChange","oldLabel","aboutFormulaIds","aboutSourceIds","targetList","DEFAULT","sortList","codeDim","scope","cloneDim","onSort","order","defaultCode","handleSortTitle","text","currentItem","currentIndex","customSortModalRef","customGroupModalRef","showCustomSortModal","handleCustomSortTitle","showCustomGroupModal","handleCustomGroupTitle","aggregateList","distinctList","onAggregateChange","onDistinctChange","onDateFormatChange","onIndSortChange","handleAggregateTitle","handleIndSortTitle","map","handleDistinctTitle","handleFilterTitle","filterModalRef","configNameRef","sortByCpntRef","dimByCountRef","showFilterModal","showConfigNameModal","showSortByCpntModal","showDimByCountModal","calculationModalRef","calculationModalMode","onShowCalculationModal","mode","fieldData","getEdvFieldData","currentEdvId","classificationList","columnList","getFieldData","formFields","dimensionType","dataViewMap","onVisibleChange","itemName","hasOwn","onClickSetting","copyDataViewName","isShowConfigName","isShowSortByCpnt","isIndexSet","isShowCalcBtn","_hoisted_17","_hoisted_19","_hoisted_20","_hoisted_22","_directive_focus","_component_a_card","_component_plus_outlined","_normalizeClass","_withModifiers","_component_a_menu_divider","aggregate","distinct","_component_copy_outlined","_hoisted_23","_component_setting_outlined","_component_custom_sort_modal","_component_custom_group_modal","_component_filter_modal","_component_config_name","_component_sort_by_cpnt","_component_dim_by_count","_component_calculation_modal","cardTypeMap","_sfc_main$q","DataConfigCard","allMap","selectedComponentType","isGroupTable","cardsMap","cards","reactive","handleGraphicConfigMap","graphicConfigMap","startStr","startIndex","componentMapKeys","componentMapKey","card","_component_data_config_card","_mergeProps","propsGroups","fontFamilyArr","fontFamilyOptions","font","fontFamily","mapAttributeProps","isKeyName","textShadow","width","updateMode","onlyType","suffix","disabled","max","min","height","backgroundImage","backgroundSize","backgroundColor","contextRequestUrl","theme","pageFontFamily","placeholder","imgUrl","show","match","linkUrl","linkMethod","linkPage","fontSize","variableFontSize","percentageSide","optionType","left","top","textAlign","verticalAlign","justifyContent","alignItems","tabFontWeight","isTransformNumber","headerFontWeight","fontWeight","fontStyle","color","colors","centerLeft","centerTop","lineHeight","step","innerRadius","outerRadius","titleText","titleSubtext","tooltipTrigger","tooltipTextStyleColor","tooltipFormatter","legendTextStyleColor","legendTop","legendLeft","legendOrient","labelFormatter","labelColor","isUseLabelColors","labelFontSize","labelPosition","labelLineLength","labelLineLength2","symbolSize","symbolColor","symbolWidth","symbolHeight","smooth","lineStyleWidth","picker","xAxisSplitLineShow","xAxisSplitAreaShow","xAxisLineShow","isBoundaryGap","xAxisSplitLineInterval","xAxisSplitLineStyleColor","xAxisLabelColor","xAxisLineStyleColor","xAxisTickShow","yAxisTickShow","xAxisLabelFormatter","yAxisSplitLineShow","yAxisLeftSplitLineShow","yAxisRightSplitLineShow","yAxisSplitLineType","yAxisLeftSplitLineType","yAxisRightSplitLineType","xAxisSplitLineType","yAxisSplitAreaShow","yAxisLabelShow","yAxisLineAlwaysDisplay","yAxisSplitLineStyleColor","yAxisLabelColor","yAxisLineStyleColor","yAxisLabelFormatter","roseType","fullModal","seqIconConfig","layout","defaultValue","typeValue","bordered","allOverflow","hoverRow","hoverColor","boderList","columnDropEnable","showTotalBool","totalName","expandAll","isUseSeq","centered","columnsFixedNum","scrollX","variableColor","tabColor","activeTabColor","tabBackgroundImage","activeTabBackgroundImage","tabBarGutter","tabFontSize","simple","pageSizeShow","sliceCount","useRanking","headerBackgroundColor","cellBackgroundColor","borderColor","useBorderModify","useTitle","paginationPosition","paginationPageSize","destroyOnClose","position","yAxis","seriesTypes","useLabelIndex","startTime","endTime","limitStartTime","limitEndTime","strokeColor","trailColor","strokeType","strokeLinecap","strokeWidth","strokeTextWidth","geoBackgroundImage","geoItemStyleAreaColor","geoItemStyleBorderColor","geoEmphasisLabelColor","geoEmphasisItemStyleAreaColor","geoEmphasisItemStyleBorderColor","symbolImage","mapJson","barWidth","columnCount","itemHeight","itemColSpan","itemPadding","itemRowSpan","geoLabelColor","geoLabelFontSize","geoItemStyleShadowColor","geoItemStyleBorderWidth","geoItemStyleShadowBlur","geoItemStyleShadowOffsetX","geoItemStyleShadowOffsetY","geoZoom","geoRoam","geoCenter","geoBackgroundImageRepeat","titleColor","titleFontSize","headerFontSize","geoEmphasisDisabled","gridTop","gridBottom","gridLeft","gridRight","gridContainLabel","geoLabelShow","toolboxOrient","toolboxItemSize","toolboxItemGap","toolboxLeft","toolboxTop","toolboxDownloadUrl","toolboxInfoText","shape","danger","href","transParams","indexTip","borderWidth","borderRadius","isUseAction","actionColumnWidth","actionList","barBorderRadius","isUseHorizontalAxis","axisInverse","xAxisInverse","yAxisInverse","decimalFormat","variableDefaultValue","strokeTextShow","areaStyleOpacity","areaGradientShow","areaGradientColor","tabHorizontalPadding","xAxisLabelWidth","xAxisLabelOverflow","xAxisLabelRotate","yAxisLabelWidth","yAxisLabelOverflow","yAxisLabelRotate","isStack","effectVal","updateOptions","stackColumns","effect","hide","clickHighlight","labelShow","isReverse","link","linkType","maxTagCount","tabAlignItems","tabJustifyContent","tabFlexDirection","filterDropdownHeight","stripedShow","useCurrentTime","interval","intervalUnit","operate","prefixValueKey","prefix","suffixValueKey","updateInterval","xAxisMinInterval","yAxisMinInterval","minAngle","autoSwitch","autoSwitchInterval","xAxisLabelInterval","isUseExport","autoClearSearchValue","toolboxLocation","toolboxDownloadShow","toolboxDataZoomShow","toolboxInfoShow","multiple","treeCheckable","selectFirstOption","gradientColor","gradientOffset","legendItemGap","legendItemWidth","legendItemHeight","showBarBackground","gradientColors","increaseColor","declineColor","legendType","minusSignShow","gradientAngle","stripedColor","axisNameColor","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","borderStyle","unitText","unitFontSize","unitFontWeight","unitColor","unitTop","unitLeft","legendFormatter","titleMode","legendFontSize","valueType","xAxisLabelFontSize","yAxisLabelFontSize","tooltipRequestData","tooltipBackgroundColor","seqWidth","isAllowClear","isSummaryFixed","labelWidth","labelOverflow","isPageBottom","optionFontSize","isShowTotal","graphicType","graphic","isAllowSpanYear","tabType","targetRule","targetValue","notExpectColor","buttonBackgroundColor","tabWidth","headerFontColor","cellFontColor","isTransparent","hideTableHeader","closeBtnColor","paginationColor","paginationBgColor","activePaginationColor","activePaginationBgColor","hoverBackgroundColor","tooltipPosition","tabTextAlign","seqName","seqIcon","isShowCloseBtn","markLineType","seqFontSize","isAutoScroll","scrollSpeed","isHoverStyle","isAnimation","animationSource","subTotalColumn","dynamics","subTotalName","isSortByFront","legendWidth","legendHeight","legendTextWidth","legendScroll","boxShadow","limitInterval","xAxisName","yAxisName","yAxisLeftName","yAxisRightName","seqIconWidth","seqIconHeight","seqIconOffsetX","seqIconOffsetY","seqIndexFormatter","unitInterval","keyFieldMap","itemWidth","startValue","endValue","colNum","digits","unitWidth","unitHeight","counterBackgroundImage","showEllipsis","exceedConfig","xAxisMaxValue","yAxisMaxValue","scrollDirection","hideTabs","jumpType","jumpTime","jumpPage","jumpLink","gridTopPx","gridBottomPx","gridLeftPx","gridRightPx","showAnimation","tooltip","showXAxisLineArrow","showYAxisLineArrow","xAxisLineInverse","yAxisLineInverse","xAxisMarkLineValue","yAxisMarkLineValue","axisMarkArea","_sfc_main$p","_sfc_main$o","getPrefixOrSuffixValue","prefixValue","suffixValue","_sfc_main","_sfc_main$m","ASwitch","_component_a_switch","bottom","right","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","element","getWindow","ownerDocument","isElement","OwnElement","isHTMLElement","isShadowRoot","applyStyles","_ref","state","attributes","_ref2","initialStyles","styleProperties","property","attribute","applyStyles$1","getBasePlacement","round","getUAString","uaData","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","x","y","getLayoutRect","contains","parent","child","rootNode","next","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","padding","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","axisProp","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","instance","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","strategy","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","body","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","rect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","b","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","modifiers","visited","modifier","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","debounce","fn","pending","resolve","mergeByName","merged","current","existing","DEFAULT_OPTIONS","areValidElements","args","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","m","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref$options","cleanupFn","noopFn","createPopper","N","E","F","L","z","l","M","R","B","d","w","h","S","k","C","O","I","A","P","_","D","T","H","G","$","V","Y","J","W","X","q","U","K","Q","Z","ee","te","re","ne","oe","ae","ie","le","ce","ue","se","fe","de","pe","he","ve","be","we","xe","me","ge","ye","Se","ke","Ce","Oe","Ie","Ae","g","Pe","je","Ne","Ee","Fe","Le","ze","Me","_sfc_main$k","PickColors","colorValue","_component_pick_colors","_sfc_main$j","onColorsChange","_sfc_main$i","InputNumber","firstItem","_component_appstore_add_outlined","_component_draggable","_resolveDynamicComponent","_component_minus_circle_outlined","_sfc_main$h","_sfc_main$g","ASlider","_component_a_slider","_sfc_main$f","Input","RadioGroup","Select","Switch","ColorPick","ColorGroupPick","FormGroup","Textarea","Slider","chartsOptions","CHARTS_OPTIONS","updateChartsOptions","UPDATE_CHARTS_OPTIONS","updateTableOptions","UPDATE_TABLE_OPTIONS","setFormProps","setOptions","mapAttributeProp","valueProp","changeValueEventName","updateValue","effectProps","getFunProps","formProps","attrs","reduce","excludeType","nProps","status","calcSingleItemRes","otherProps","prop","$props","$setup","$data","$options","formProp","_sfc_main$e","workerId","JsonWorker","TsWorker","EditorWorker","dom","editor","themeMap","monacoEditor","code","onUnmounted","_sfc_main$d","clickConditionMenu","_sfc_main$c","_sfc_main$b","params","getSameLevelList","handleOk","onUploadChange","imgSrc","imgBaseUrl","iconOptions","_sfc_main$a","ATable","ConditionWrap","conditionsRef","currentData","configColumns","rules","curTableCompColumn","handleConditions","open","tableCompColumn","oldRules","conditionCode","newRules","close","addRule","closeRuleModal","openRuleModal","record","deleteRule","_component_a_table","_component_condition_wrap","_sfc_main$9","Editor","ConditionsTable","tableColumns","configData","saveObj","saveKey","optionCode","editorTitle","editorVisible","handleTableData","rowHeaderList","tableColumn","changeRenderBool","renderSave","onEditorChange","conditionsTableRef","_component_code_outlined","_component_editor","_component_conditions_table","_sfc_main$8","activePanel","columnsConfigMap","newColumnsConfig","_sfc_main$7","PropsToForm","TableColumnConfig","IndicatorContainer","compProps","tablePanel","tableOptions","TABLE_OPTIONS","refreshData","REFRESH_DATA","handleChangeType","propsMap","groupTableProps","detailPropsGroups","propsGroup","enableProps","pickProps","filterEnableProps","filterProps","pick","isRenderForm","detailPropsGroup","componentType","onSwitchClick","checked","onSwitchChange","ComponentString","updateComponentOptions","tableEditorChange","isShowOptionEditor","_component_props_to_form","_component_indicator_container","_sfc_main$6","MAP_ATTRIBUTE_PROPS","isPivotTable","IS_PIVOT_TABLE","onUpdateControl","onDeleteControl","onAddMenuControl","_data","parentOption","propOptions","propItem","deleteEvent","onIdChange","control","setEvents","focusId","onIdFocus","onPropChange","onParentPropChange","onCustomValueChange","onModeChange","onConditionKeyChange","controlParams","ruleOption","dataTypeOption","isShowModelProp","modelPropKey","isShowProp","isShowFormat","_sfc_main$5","ControlCard","_component_control_card","_component_control_list","_sfc_main$4","ControlList","isVisible","selectedIds","updateComponentsConfig","UPDATE_COMPONENTS_CONFIG","bindComponentId","updateConfig","config","onAddControl","sourceList","indicatorComponents","handleConfirmSync","error","_sfc_main$3","typeOption","rangeTypeOptions","variableData","curComponent","isDateRangeComponent","isShowDateOperate","formatOptions","onChangeDataType","onChangeVariableType","_sfc_main$2","VariableItem","_component_variable_item","_sfc_main$1","tableData","handleIndicatorData","useIndicatorData","handleFormat","DataGroup","StyleGroup","ChartGraph","ControlGroup","VariableGroup","TableGraph","_props","asyncTableComponent","dataConfigPaneRef","componentRef","pivotTableWrapRef","isShowStyleConfig","SHOW_STYLE_CONFIG","pageConfig","PAGE_CONFIG","isIframeMode","IS_IFRAME_MODE","notGraphicList","cloneComponent","modifyWhite","pickComponent","without","tableProps","token","fullWidth","bool","getOtherData","conditionOptions","idMap","promistList","reject","resultList","setConditionOptions","intersection","seriesList","otherOptions","selectFieldOptions","optionsMap","optionsLen","optionsMapArr","_id","refreshAction","loadPivotTablePlugin","tableModule","defineAsyncComponent","getSaveData","onPivotTableChange","dimensions","_component_reload_outlined","_component_data_group","_component_style_group","_component_control_group","_component_table_graph","_component_chart_graph"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,35,36,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124]}