@ecan-bi/indicator-library 1.1.32 → 1.1.33

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-05616d18.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/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/indicator-library/data-config/drill-group/DrillGroup.vue","../src/indicator/indicator-library/data-config/drill-group/DrillGroup.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 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 <template #option=\"{ label, name }\">\n <span :style=\"{ color: name === 'component-value' ? '#1890ff' : '' }\">{{ label }}</span>\n </template>\n </a-select>\n <a-select\n v-if=\"item.columnName === 'component-value'\"\n v-model:value=\"item.componentId\"\n style=\"margin-left: 10px;min-width: 200px;\"\n placeholder=\"选择组件\"\n :options=\"usedComponentList\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\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, RENDER_USED_COMPONENTS } 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 renderUsedComponents = inject(RENDER_USED_COMPONENTS) 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 usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent: any) => usedComponent.keyName)\n })\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 result = []\n list.forEach((item) => {\n // if (names.includes(item.name)) {\n // // 处理多个一样的指标或维度\n // item.name = `${item.name}_ecanrepeat_${index}`\n // } else {\n // names.push(item.name)\n // }\n if (!result.find((v: any) => v.name === item.name)) {\n result.push(item)\n }\n })\n return [\n {\n label: '组件值',\n name: 'component-value'\n },\n ...result\n ]\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 componentId: 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 if (columnName === 'component-value') {\n target.label = ''\n } else {\n target.componentId = ''\n }\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 usedComponentList,\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 <template #option=\"{ label, name }\">\n <span :style=\"{ color: name === 'component-value' ? '#1890ff' : '' }\">{{ label }}</span>\n </template>\n </a-select>\n <a-select\n v-if=\"item.columnName === 'component-value'\"\n v-model:value=\"item.componentId\"\n style=\"margin-left: 10px;min-width: 200px;\"\n placeholder=\"选择组件\"\n :options=\"usedComponentList\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\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, RENDER_USED_COMPONENTS } 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 renderUsedComponents = inject(RENDER_USED_COMPONENTS) 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 usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent: any) => usedComponent.keyName)\n })\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 result = []\n list.forEach((item) => {\n // if (names.includes(item.name)) {\n // // 处理多个一样的指标或维度\n // item.name = `${item.name}_ecanrepeat_${index}`\n // } else {\n // names.push(item.name)\n // }\n if (!result.find((v: any) => v.name === item.name)) {\n result.push(item)\n }\n })\n return [\n {\n label: '组件值',\n name: 'component-value'\n },\n ...result\n ]\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 componentId: 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 if (columnName === 'component-value') {\n target.label = ''\n } else {\n target.componentId = ''\n }\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 usedComponentList,\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 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=\"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\">\n <a-date-picker\n v-if=\"isUseCurrentTime\"\n disabled\n style=\"width: calc(100% - 130px);margin-right: 10px;\"\n :value=\"currentTime\"\n :format=\"condition.dateFormat\"\n />\n <a-date-picker\n v-else\n style=\"width: calc(100% - 130px);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\n :style=\"{\n width: condition.fieldValue === 'PARENT' ? '' : 'calc(100% - 130px)',\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 <template v-if=\"isDateType\">\n <a-select\n class=\"field-value\"\n show-search\n style=\"margin: 0;width: 130px;\"\n placeholder=\"日期格式化\"\n v-model:value=\"condition.dateFormat\"\n :filter-option=\"filterOption\"\n :options=\"formatList\"\n >\n </a-select>\n </template>\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=\"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 <appstore-add-outlined\n v-if=\"isDateType\"\n class=\"calendar-icon\"\n :style=\"{\n color: isUseCurrentTime || isConfigFlag ? '#1890ff' : ''\n }\"\n @click=\"popoverVisible = true;\"\n />\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 </a-popover>\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, 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 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 AppstoreAddOutlined,\n ASelect,\n AInput,\n ADatePicker,\n AButton,\n ADropdown,\n AMenu,\n AMenuItem,\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) {\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 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 const isConfigFlag = computed(() => {\n let result = false\n const { calcWays = [] } = unref(condition)\n const value = calcWays[0]\n if (value && parseFloat(value) !== 0) {\n result = true\n }\n return result\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(() => unref(isDateType) || !['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 isConfigFlag\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: 10px;\n}\n\n.field-value {\n flex: 1;\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 10px;\n}\n\n.rule {\n width: 14%;\n}\n\n.delete-icon,\n.more-icon,\n.calendar-icon {\n margin-right: 10px;\n}\n\n.calendar-icon:hover {\n border-color: #1890ff;\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.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 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=\"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\">\n <a-date-picker\n v-if=\"isUseCurrentTime\"\n disabled\n style=\"width: calc(100% - 130px);margin-right: 10px;\"\n :value=\"currentTime\"\n :format=\"condition.dateFormat\"\n />\n <a-date-picker\n v-else\n style=\"width: calc(100% - 130px);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\n :style=\"{\n width: condition.fieldValue === 'PARENT' ? '' : 'calc(100% - 130px)',\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 <template v-if=\"isDateType\">\n <a-select\n class=\"field-value\"\n show-search\n style=\"margin: 0;width: 130px;\"\n placeholder=\"日期格式化\"\n v-model:value=\"condition.dateFormat\"\n :filter-option=\"filterOption\"\n :options=\"formatList\"\n >\n </a-select>\n </template>\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=\"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 <appstore-add-outlined\n v-if=\"isDateType\"\n class=\"calendar-icon\"\n :style=\"{\n color: isUseCurrentTime || isConfigFlag ? '#1890ff' : ''\n }\"\n @click=\"popoverVisible = true;\"\n />\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 </a-popover>\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, 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 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 AppstoreAddOutlined,\n ASelect,\n AInput,\n ADatePicker,\n AButton,\n ADropdown,\n AMenu,\n AMenuItem,\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) {\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 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 const isConfigFlag = computed(() => {\n let result = false\n const { calcWays = [] } = unref(condition)\n const value = calcWays[0]\n if (value && parseFloat(value) !== 0) {\n result = true\n }\n return result\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(() => unref(isDateType) || !['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 isConfigFlag\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: 10px;\n}\n\n.field-value {\n flex: 1;\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 10px;\n}\n\n.rule {\n width: 14%;\n}\n\n.delete-icon,\n.more-icon,\n.calendar-icon {\n margin-right: 10px;\n}\n\n.calendar-icon:hover {\n border-color: #1890ff;\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.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=\"60%\"\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 if (item.dataType === 'time') {\n item.dataType = ''\n }\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=\"60%\"\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 if (item.dataType === 'time') {\n item.dataType = ''\n }\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 type: {\n type: String,\n default: ''\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 (props.type === 'indexLibColumns' && 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 type: {\n type: String,\n default: ''\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 (props.type === 'indexLibColumns' && 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\" v-if=\"!isIndexSet\">内置公式</a-select-option>\n <a-select-option value=\"COMPONENT\" v-if=\"!isIndexSet\">固定值</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 :type=\"type\"\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 isIndexSet: {\n type: Boolean,\n default: false\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\" v-if=\"!isIndexSet\">内置公式</a-select-option>\n <a-select-option value=\"COMPONENT\" v-if=\"!isIndexSet\">固定值</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 :type=\"type\"\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 isIndexSet: {\n type: Boolean,\n default: false\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 === 'ecanTreeSelect'\">\n <div class=\"item-label\">父节点:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.parentField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'parentField')\"\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-if=\"isIndexSet && type === 'indicators'\"\n v-model:checked=\"compositeIndicator\"\n style=\"margin-left: 15px;\"\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 :group=\"{\n name: 'cardItem',\n pull: type !== 'indexLibColumns',\n put: type !== 'indexLibColumns'\n }\"\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 @pointerdown.stop\n @mousedown.stop\n @blur=\"onCommitLabelChange($event, index, cardItem.label)\"\n @pressEnter=\"onCommitLabelChange($event, index, cardItem.label)\"\n @change=\"onLabelChange\"\n @keydown=\"handleInputKeyDown\"\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-popover title=\"\">\n <template #content>\n {{ getIndexSetRawLabel(cardItem.calcType) }}\n </template>\n <info-circle-outlined\n v-if=\"type === 'indexLibColumns' && !['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n class=\"setting-icon\"\n />\n </a-popover>\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 <a-sub-menu :title=\"handleDrillTableTitle(cardItem.showInDrillTable)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"shl in showHideList\"\n :key=\"shl.value\"\n @click=\"onShowHideChange(shl.value, index)\"\n >\n {{ shl.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n <!-- 仪表盘指标类型,主指标/目标指标 -->\n <a-sub-menu :title=\"handleIndTypeTitle(cardItem.gaugeIndType)\" v-if=\"selectedComponent.type === 'ecanGauge'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in indTypeList\"\n :key=\"il.value\"\n @click=\"onIndTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <!-- 预算执行图指标类型,累计指标/当期指标 -->\n <a-sub-menu :title=\"handleBudgetTypeTitle(cardItem.budgetIndType)\" v-if=\"selectedComponent.type === 'ecanBudget' && type === 'indicators'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in budgetTypeList\"\n :key=\"il.value\"\n @click=\"onBudgetTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\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 :isIndexSet=\"isIndexSet\"\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 selectedComponent = inject(SELECTED_COMPONENT) as any\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', 'specialIndicators']\n const dimList = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const indexSetMap = {\n CURRENT: '本期值',\n LAST_CYCLE: '上期值',\n LAST_YEAR: '同比值',\n PERIOD_ON_PERIOD: '环比',\n YEAR_ON_YEAR: '同比',\n DW: '单位'\n }\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 === 'specialIndicatorList' ||\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 handleInputKeyDown = (e: any) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n e.preventDefault()\n }\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 specialIndicators = []\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 ...specialIndicators\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 || (!Object.keys(item.customGroup?.groupInfoMap || {}).length && !item.customGroup?.otherGroupName) ? '' : '(已配置)')\n }\n const showHideList = [\n {\n name: '显示',\n value: 'show'\n },\n {\n name: '隐藏',\n value: 'hide'\n }\n ]\n const indTypeList = [\n {\n name: '主指标',\n value: 'main'\n },\n {\n name: '目标指标',\n value: 'target'\n }\n ]\n const budgetTypeList = [\n {\n name: '当期指标',\n value: 'current'\n },\n {\n name: '累计指标',\n value: 'cuml'\n }\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 name: '聚合',\n value: 'GROUP'\n }\n ]\n // 是否去重\n const distinctList = [\n {\n name: '是',\n value: 1\n },\n {\n name: '否',\n value: 0\n }\n ]\n const onShowHideChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].showInDrillTable = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.gaugeIndType === value) {\n item.gaugeIndType = ''\n }\n }\n list[index].gaugeIndType = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onBudgetTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.budgetIndType === value) {\n item.budgetIndType = ''\n }\n }\n list[index].budgetIndType = value\n updateGraphicConfig({\n [props.type]: list\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 handleDrillTableTitle = (\n key: 'show' | 'hide' = 'show'\n ) => {\n const map = {\n show: '显示',\n hide: '隐藏'\n }\n return `在钻取的普通表中(${map[key]})`\n }\n const handleIndTypeTitle = (\n key: 'main' | 'target'\n ) => {\n const map = {\n main: '主指标',\n target: '目标指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleBudgetTypeTitle = (\n key: 'cuml' | 'current'\n ) => {\n const map = {\n cuml: '累计指标',\n current: '当期指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleAggregateTitle = (\n key: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'GROUP' = 'SUM'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数',\n GROUP: '聚合'\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 immediate: true\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 // 是否需要显示展示名称的配置\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 // && (!unref(isIndexSet) || props.type !== 'indicators')\n return !dimensionType.includes(props.type) && !unref(dataSelectIndicators)\n })\n\n const getIndexSetRawLabel = (calcType: string) => {\n if (calcType) {\n return indexSetMap[calcType]\n } else {\n return '--'\n }\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 handleInputKeyDown,\n aggregateList,\n showHideList,\n indTypeList,\n budgetTypeList,\n distinctList,\n onAggregateChange,\n onShowHideChange,\n onIndTypeChange,\n onBudgetTypeChange,\n onDistinctChange,\n onDateFormatChange,\n onIndSortChange,\n handleAggregateTitle,\n handleDrillTableTitle,\n handleIndTypeTitle,\n handleBudgetTypeTitle,\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 compositeIndicator,\n handleIndSortTitle,\n getIndexSetRawLabel\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 .title-text {\n flex: 1;\n }\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: 70px;\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 === 'ecanTreeSelect'\">\n <div class=\"item-label\">父节点:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.parentField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'parentField')\"\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-if=\"isIndexSet && type === 'indicators'\"\n v-model:checked=\"compositeIndicator\"\n style=\"margin-left: 15px;\"\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 :group=\"{\n name: 'cardItem',\n pull: type !== 'indexLibColumns',\n put: type !== 'indexLibColumns'\n }\"\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 @pointerdown.stop\n @mousedown.stop\n @blur=\"onCommitLabelChange($event, index, cardItem.label)\"\n @pressEnter=\"onCommitLabelChange($event, index, cardItem.label)\"\n @change=\"onLabelChange\"\n @keydown=\"handleInputKeyDown\"\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-popover title=\"\">\n <template #content>\n {{ getIndexSetRawLabel(cardItem.calcType) }}\n </template>\n <info-circle-outlined\n v-if=\"type === 'indexLibColumns' && !['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n class=\"setting-icon\"\n />\n </a-popover>\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 <a-sub-menu :title=\"handleDrillTableTitle(cardItem.showInDrillTable)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"shl in showHideList\"\n :key=\"shl.value\"\n @click=\"onShowHideChange(shl.value, index)\"\n >\n {{ shl.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n <!-- 仪表盘指标类型,主指标/目标指标 -->\n <a-sub-menu :title=\"handleIndTypeTitle(cardItem.gaugeIndType)\" v-if=\"selectedComponent.type === 'ecanGauge'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in indTypeList\"\n :key=\"il.value\"\n @click=\"onIndTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <!-- 预算执行图指标类型,累计指标/当期指标 -->\n <a-sub-menu :title=\"handleBudgetTypeTitle(cardItem.budgetIndType)\" v-if=\"selectedComponent.type === 'ecanBudget' && type === 'indicators'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in budgetTypeList\"\n :key=\"il.value\"\n @click=\"onBudgetTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\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 :isIndexSet=\"isIndexSet\"\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 selectedComponent = inject(SELECTED_COMPONENT) as any\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', 'specialIndicators']\n const dimList = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const indexSetMap = {\n CURRENT: '本期值',\n LAST_CYCLE: '上期值',\n LAST_YEAR: '同比值',\n PERIOD_ON_PERIOD: '环比',\n YEAR_ON_YEAR: '同比',\n DW: '单位'\n }\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 === 'specialIndicatorList' ||\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 handleInputKeyDown = (e: any) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n e.preventDefault()\n }\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 specialIndicators = []\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 ...specialIndicators\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 || (!Object.keys(item.customGroup?.groupInfoMap || {}).length && !item.customGroup?.otherGroupName) ? '' : '(已配置)')\n }\n const showHideList = [\n {\n name: '显示',\n value: 'show'\n },\n {\n name: '隐藏',\n value: 'hide'\n }\n ]\n const indTypeList = [\n {\n name: '主指标',\n value: 'main'\n },\n {\n name: '目标指标',\n value: 'target'\n }\n ]\n const budgetTypeList = [\n {\n name: '当期指标',\n value: 'current'\n },\n {\n name: '累计指标',\n value: 'cuml'\n }\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 name: '聚合',\n value: 'GROUP'\n }\n ]\n // 是否去重\n const distinctList = [\n {\n name: '是',\n value: 1\n },\n {\n name: '否',\n value: 0\n }\n ]\n const onShowHideChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].showInDrillTable = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.gaugeIndType === value) {\n item.gaugeIndType = ''\n }\n }\n list[index].gaugeIndType = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onBudgetTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.budgetIndType === value) {\n item.budgetIndType = ''\n }\n }\n list[index].budgetIndType = value\n updateGraphicConfig({\n [props.type]: list\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 handleDrillTableTitle = (\n key: 'show' | 'hide' = 'show'\n ) => {\n const map = {\n show: '显示',\n hide: '隐藏'\n }\n return `在钻取的普通表中(${map[key]})`\n }\n const handleIndTypeTitle = (\n key: 'main' | 'target'\n ) => {\n const map = {\n main: '主指标',\n target: '目标指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleBudgetTypeTitle = (\n key: 'cuml' | 'current'\n ) => {\n const map = {\n cuml: '累计指标',\n current: '当期指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleAggregateTitle = (\n key: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'GROUP' = 'SUM'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数',\n GROUP: '聚合'\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 immediate: true\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 // 是否需要显示展示名称的配置\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 // && (!unref(isIndexSet) || props.type !== 'indicators')\n return !dimensionType.includes(props.type) && !unref(dataSelectIndicators)\n })\n\n const getIndexSetRawLabel = (calcType: string) => {\n if (calcType) {\n return indexSetMap[calcType]\n } else {\n return '--'\n }\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 handleInputKeyDown,\n aggregateList,\n showHideList,\n indTypeList,\n budgetTypeList,\n distinctList,\n onAggregateChange,\n onShowHideChange,\n onIndTypeChange,\n onBudgetTypeChange,\n onDistinctChange,\n onDateFormatChange,\n onIndSortChange,\n handleAggregateTitle,\n handleDrillTableTitle,\n handleIndTypeTitle,\n handleBudgetTypeTitle,\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 compositeIndicator,\n handleIndSortTitle,\n getIndexSetRawLabel\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 .title-text {\n flex: 1;\n }\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: 70px;\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 specialIndicators: {\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 treeSelect: ['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 gauge: ['indicators'],\n boxplot: ['classificationList', 'indicators'],\n budget: ['classificationList', 'indicators', 'specialIndicators']\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 treeSelect: ['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 gauge: ['indicators'],\n boxplot: ['classificationList', 'indicators'],\n budget: ['classificationList', 'indicators', 'specialIndicators']\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\n// import { 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 variableData = computed({\r\n get () {\r\n return props.item\r\n },\r\n set (data: { [key: string]: any }) {\r\n emit('update', {\r\n ...data,\r\n label: props.label\r\n }, props.index)\r\n }\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\n// import { 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 variableData = computed({\r\n get () {\r\n return props.item\r\n },\r\n set (data: { [key: string]: any }) {\r\n emit('update', {\r\n ...data,\r\n label: props.label\r\n }, props.index)\r\n }\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 <a-button @click=\"onSyncVariable\" style=\"margin-left: 10px;\">同步变量值</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 onSyncVariable = () => {\r\n const {\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n indicators = [],\r\n specialIndicators = []\r\n } = unref(graphicConfig) || {}\r\n const list = cloneDeep(unref(variableList))\r\n const variableValueMap = new Map()\r\n const variableNames = []\r\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\r\n for (const item of mergeList) {\r\n if (item.dataSetParams?.length) {\r\n for (const param of item.dataSetParams) {\r\n if (!variableValueMap.has(param.name)) {\r\n variableNames.push(param.name)\r\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\r\n }\r\n }\r\n }\r\n }\r\n for (const item of variableNames) {\r\n const data = variableValueMap.get(item)\r\n if (data) {\r\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\r\n const ignoreField = ['label', 'randomKey', 'keyValue']\r\n for (const fl of filterList) {\r\n for (const key in data) {\r\n if (!ignoreField.includes(key)) {\r\n fl[key] = data[key]\r\n }\r\n }\r\n }\r\n }\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 onSyncVariable,\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 <a-button @click=\"onSyncVariable\" style=\"margin-left: 10px;\">同步变量值</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 onSyncVariable = () => {\r\n const {\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n indicators = [],\r\n specialIndicators = []\r\n } = unref(graphicConfig) || {}\r\n const list = cloneDeep(unref(variableList))\r\n const variableValueMap = new Map()\r\n const variableNames = []\r\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\r\n for (const item of mergeList) {\r\n if (item.dataSetParams?.length) {\r\n for (const param of item.dataSetParams) {\r\n if (!variableValueMap.has(param.name)) {\r\n variableNames.push(param.name)\r\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\r\n }\r\n }\r\n }\r\n }\r\n for (const item of variableNames) {\r\n const data = variableValueMap.get(item)\r\n if (data) {\r\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\r\n const ignoreField = ['label', 'randomKey', 'keyValue']\r\n for (const fl of filterList) {\r\n for (const key in data) {\r\n if (!ignoreField.includes(key)) {\r\n fl[key] = data[key]\r\n }\r\n }\r\n }\r\n }\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 onSyncVariable,\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=\"drill-group\">\r\n <div class=\"drill-group-header\">\r\n <a-button @click=\"onAddGroup\">添加组</a-button>\r\n </div>\r\n </div>\r\n <div class=\"all-dimension-wrap\">\r\n <div class=\"row-label\">维度</div>\r\n <draggable\r\n v-model=\"allDimensions\"\r\n class=\"all-dimension-list\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"false\"\r\n >\r\n <template #item=\"{ element }\">\r\n <div class=\"dimension-item\">\r\n {{ element.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n <div class=\"drill-group-content\" v-if=\"groupList?.length\">\r\n <draggable\r\n v-model=\"groupList\"\r\n class=\"group-drag-wrap\"\r\n item-key=\"key\"\r\n :group=\"{\r\n name: 'groupList',\r\n pull: false,\r\n put: false\r\n }\"\r\n >\r\n <template #item=\"{ element, index }\">\r\n <div class=\"group-row\">\r\n <div class=\"row-label\">组{{ index + 1 }}</div>\r\n <draggable\r\n v-model=\"element.dimensions\"\r\n class=\"group-item\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"true\"\r\n >\r\n <template #item=\"{ element: dimension }\">\r\n <div class=\"dimension-item\">\r\n {{ dimension.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n <delete-outlined class=\"delete-icon\" @click=\"onDeleteItem(index)\" />\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, onMounted, ref, unref } from 'vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n SELECTED_COMPONENT,\r\n RENDER_USED_COMPONENTS,\r\n INDICATOR_URL,\r\n REQUEST,\r\n INDICATOR_TOKEN\r\n} from '@/utils/constant'\r\nimport { nanoid } from 'nanoid'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport Draggable from 'vuedraggable'\r\nimport { formatIndicatorParams } from '@ecan-bi/tools'\r\nimport { DeleteOutlined } from '@ant-design/icons-vue'\r\nexport default defineComponent({\r\n name: 'VariableGroup',\r\n components: {\r\n Draggable,\r\n DeleteOutlined\r\n },\r\n setup () {\r\n const request = inject(REQUEST) as any\r\n const indicatorToken = inject(INDICATOR_TOKEN)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const groupList = computed({\r\n get: () => unref(graphicConfig)?.drillGroupList || [],\r\n set (list: any) {\r\n updateConfig(list)\r\n }\r\n })\r\n const allDimensions = ref([])\r\n\r\n const updateConfig = (list: { [key:string]: any }[]) => {\r\n updateGraphicConfig({\r\n ...unref(graphicConfig),\r\n drillGroupList: list\r\n })\r\n }\r\n\r\n const onAddGroup = () => {\r\n const list = cloneDeep(unref(groupList))\r\n list.push({\r\n key: nanoid(),\r\n dimensions: []\r\n })\r\n updateConfig(list)\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(groupList))\r\n if (list[index].dimensions?.length) {\r\n unref(allDimensions).push(...list[index].dimensions)\r\n }\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const getDimensionData = async () => {\r\n const formatParams: any = formatIndicatorParams({\r\n ...unref(selectedComponent),\r\n allComponentList: unref(renderUsedComponents)\r\n })\r\n let classifications = formatParams?.classification || formatParams?.classifications || []\r\n if (!Array.isArray(classifications)) {\r\n classifications = [classifications]\r\n }\r\n return await request({\r\n url: `${unref(INDICATOR_URL)}/diagram/obtainDrillAbleDimensionOptions`,\r\n method: 'post',\r\n headers: {\r\n // @ts-ignore\r\n Authentication: unref(indicatorToken),\r\n operateContext: 'ygt'\r\n },\r\n data: {\r\n source: unref(graphicConfig)?.source || 'INDICATOR_LIB',\r\n pageId: (window as any)?.config?.pageId,\r\n indicatorList: formatParams?.indicatorList || [],\r\n classifications,\r\n dataSourceId: unref(graphicConfig)?.dataSourceId || '',\r\n drillingMode: 'normalTable'\r\n },\r\n // @ts-ignore\r\n signal: window.controller?.signal || ''\r\n })\r\n }\r\n\r\n onMounted(async () => {\r\n const dimensionOptRes = await getDimensionData()\r\n const dims = dimensionOptRes?.data?.data || []\r\n const selectedDims = [].concat(...unref(groupList).map((v: any) => v.dimensions))\r\n allDimensions.value =\r\n dims\r\n .filter((v: any) => !selectedDims.find((s: any) => s.typeGuid === v.typeGuid))\r\n .map((v: any) => ({ label: v.label, typeGuid: v.typeGuid }))\r\n })\r\n\r\n return {\r\n allDimensions,\r\n groupList,\r\n onAddGroup,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.drill-group-header {\r\n margin: 20px 0;\r\n}\r\n.all-dimension-wrap {\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n .all-dimension-list {\r\n display: flex;\r\n flex: 1;\r\n padding: 10px;\r\n flex-wrap: wrap;\r\n }\r\n}\r\n.dimension-item {\r\n padding: 4px 14px;\r\n background-color: #eee;\r\n margin-right: 10px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n}\r\n.row-label {\r\n background-color: #eee;\r\n padding: 0 15px;\r\n display: flex;\r\n align-items: center;\r\n min-height: 45px;\r\n}\r\n.drill-group-content {\r\n margin: 15px 0;\r\n .group-drag-wrap {\r\n margin: 10px 0;\r\n .group-row {\r\n width: 100%;\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n margin-bottom: 15px;\r\n .group-item {\r\n padding: 10px;\r\n display: flex;\r\n flex: 1;\r\n flex-wrap: wrap;\r\n }\r\n }\r\n }\r\n}\r\n.delete-icon {\r\n color: red;\r\n margin-right: 10px;\r\n font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"drill-group\">\r\n <div class=\"drill-group-header\">\r\n <a-button @click=\"onAddGroup\">添加组</a-button>\r\n </div>\r\n </div>\r\n <div class=\"all-dimension-wrap\">\r\n <div class=\"row-label\">维度</div>\r\n <draggable\r\n v-model=\"allDimensions\"\r\n class=\"all-dimension-list\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"false\"\r\n >\r\n <template #item=\"{ element }\">\r\n <div class=\"dimension-item\">\r\n {{ element.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n <div class=\"drill-group-content\" v-if=\"groupList?.length\">\r\n <draggable\r\n v-model=\"groupList\"\r\n class=\"group-drag-wrap\"\r\n item-key=\"key\"\r\n :group=\"{\r\n name: 'groupList',\r\n pull: false,\r\n put: false\r\n }\"\r\n >\r\n <template #item=\"{ element, index }\">\r\n <div class=\"group-row\">\r\n <div class=\"row-label\">组{{ index + 1 }}</div>\r\n <draggable\r\n v-model=\"element.dimensions\"\r\n class=\"group-item\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"true\"\r\n >\r\n <template #item=\"{ element: dimension }\">\r\n <div class=\"dimension-item\">\r\n {{ dimension.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n <delete-outlined class=\"delete-icon\" @click=\"onDeleteItem(index)\" />\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, onMounted, ref, unref } from 'vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n SELECTED_COMPONENT,\r\n RENDER_USED_COMPONENTS,\r\n INDICATOR_URL,\r\n REQUEST,\r\n INDICATOR_TOKEN\r\n} from '@/utils/constant'\r\nimport { nanoid } from 'nanoid'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport Draggable from 'vuedraggable'\r\nimport { formatIndicatorParams } from '@ecan-bi/tools'\r\nimport { DeleteOutlined } from '@ant-design/icons-vue'\r\nexport default defineComponent({\r\n name: 'VariableGroup',\r\n components: {\r\n Draggable,\r\n DeleteOutlined\r\n },\r\n setup () {\r\n const request = inject(REQUEST) as any\r\n const indicatorToken = inject(INDICATOR_TOKEN)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const groupList = computed({\r\n get: () => unref(graphicConfig)?.drillGroupList || [],\r\n set (list: any) {\r\n updateConfig(list)\r\n }\r\n })\r\n const allDimensions = ref([])\r\n\r\n const updateConfig = (list: { [key:string]: any }[]) => {\r\n updateGraphicConfig({\r\n ...unref(graphicConfig),\r\n drillGroupList: list\r\n })\r\n }\r\n\r\n const onAddGroup = () => {\r\n const list = cloneDeep(unref(groupList))\r\n list.push({\r\n key: nanoid(),\r\n dimensions: []\r\n })\r\n updateConfig(list)\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(groupList))\r\n if (list[index].dimensions?.length) {\r\n unref(allDimensions).push(...list[index].dimensions)\r\n }\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const getDimensionData = async () => {\r\n const formatParams: any = formatIndicatorParams({\r\n ...unref(selectedComponent),\r\n allComponentList: unref(renderUsedComponents)\r\n })\r\n let classifications = formatParams?.classification || formatParams?.classifications || []\r\n if (!Array.isArray(classifications)) {\r\n classifications = [classifications]\r\n }\r\n return await request({\r\n url: `${unref(INDICATOR_URL)}/diagram/obtainDrillAbleDimensionOptions`,\r\n method: 'post',\r\n headers: {\r\n // @ts-ignore\r\n Authentication: unref(indicatorToken),\r\n operateContext: 'ygt'\r\n },\r\n data: {\r\n source: unref(graphicConfig)?.source || 'INDICATOR_LIB',\r\n pageId: (window as any)?.config?.pageId,\r\n indicatorList: formatParams?.indicatorList || [],\r\n classifications,\r\n dataSourceId: unref(graphicConfig)?.dataSourceId || '',\r\n drillingMode: 'normalTable'\r\n },\r\n // @ts-ignore\r\n signal: window.controller?.signal || ''\r\n })\r\n }\r\n\r\n onMounted(async () => {\r\n const dimensionOptRes = await getDimensionData()\r\n const dims = dimensionOptRes?.data?.data || []\r\n const selectedDims = [].concat(...unref(groupList).map((v: any) => v.dimensions))\r\n allDimensions.value =\r\n dims\r\n .filter((v: any) => !selectedDims.find((s: any) => s.typeGuid === v.typeGuid))\r\n .map((v: any) => ({ label: v.label, typeGuid: v.typeGuid }))\r\n })\r\n\r\n return {\r\n allDimensions,\r\n groupList,\r\n onAddGroup,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.drill-group-header {\r\n margin: 20px 0;\r\n}\r\n.all-dimension-wrap {\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n .all-dimension-list {\r\n display: flex;\r\n flex: 1;\r\n padding: 10px;\r\n flex-wrap: wrap;\r\n }\r\n}\r\n.dimension-item {\r\n padding: 4px 14px;\r\n background-color: #eee;\r\n margin-right: 10px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n}\r\n.row-label {\r\n background-color: #eee;\r\n padding: 0 15px;\r\n display: flex;\r\n align-items: center;\r\n min-height: 45px;\r\n}\r\n.drill-group-content {\r\n margin: 15px 0;\r\n .group-drag-wrap {\r\n margin: 10px 0;\r\n .group-row {\r\n width: 100%;\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n margin-bottom: 15px;\r\n .group-item {\r\n padding: 10px;\r\n display: flex;\r\n flex: 1;\r\n flex-wrap: wrap;\r\n }\r\n }\r\n }\r\n}\r\n.delete-icon {\r\n color: red;\r\n margin-right: 10px;\r\n font-size: 18px;\r\n display: flex;\r\n align-items: center;\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 <a-tab-pane\n v-if=\"!isIframeMode && !isPivotTable && pageConfig?.drillingMode === 'normalTable'\"\n key=\"5\"\n tab=\"钻取路径\"\n force-render\n >\n <drill-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 DrillGroup from './drill-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 DrillGroup,\n AButton,\n ReloadOutlined,\n TableGraph\n },\n props: {\n sqlConditions: {\n type: Array,\n default: () => []\n }\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: {\n ...config,\n sqlConditions: props.sqlConditions\n },\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 = [], indicators = [], dataSourceId = '' } = unref(graphicConfig)\n const otherList = [...leftAxisList, ...rightAxisList, ...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 (lowerCaseIncludes(unref(selectedComponent)?.type, 'select')) {\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 pageConfig,\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 <a-tab-pane\n v-if=\"!isIframeMode && !isPivotTable && pageConfig?.drillingMode === 'normalTable'\"\n key=\"5\"\n tab=\"钻取路径\"\n force-render\n >\n <drill-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 DrillGroup from './drill-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 DrillGroup,\n AButton,\n ReloadOutlined,\n TableGraph\n },\n props: {\n sqlConditions: {\n type: Array,\n default: () => []\n }\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: {\n ...config,\n sqlConditions: props.sqlConditions\n },\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 = [], indicators = [], dataSourceId = '' } = unref(graphicConfig)\n const otherList = [...leftAxisList, ...rightAxisList, ...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 (lowerCaseIncludes(unref(selectedComponent)?.type, 'select')) {\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 pageConfig,\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","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$D","defineComponent","Draggable","AModal","AButton","ASelect","ASelectOption","expose","PAGE_ID","_a","request","inject","REQUEST","renderUsedComponents","RENDER_USED_COMPONENTS","indicatorToken","unref","INDICATOR_TOKEN","graphicConfig","GRAPHIC_CONFIG","updateGraphicConfig","UPDATE_GRAPHIC_CONFIG","computed","dataViewId","customSortList","ref","activeKey","combSortList","usedComponentList","usedComponent","getSortOptions","item","list","v","c","result","handleCustomSortList","res","INDICATOR_URL","success","data","e","updateCustomSortList","label","name","_b","cloneDeep","isDataChange","onChange","visible","showModal","sort","hideModal","onCancel","watch","customOrderColumns","index","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","_normalizeStyle","_createCommentVNode","_component_a_select_option","_component_delete_outlined","_hoisted_3","_sfc_main$C","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","_hoisted_11","_component_a_checkable_tag","nanoid","size","id","bytes","byte","t","n","module","this","r","s","u","o","dayjs","quarterOfYear","_sfc_main$B","ADatePicker","ADropdown","AMenu","AMenuItem","APopover","ATabs","ATabPane","ARadioGroup","ARadio","AInputNumber","dataViewColumns","DATA_VIEW_COLUMNS","renderComponents","isUseCurrentTime","currentTime","controlList","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","isConfigFlag","calcWays","okDatePickConfig","okCustomConfig","radioValue","filterOption","input","isShowCustomDataType","_hoisted_13","_vShow","_component_a_date_picker","_component_appstore_add_outlined","_component_a_popover","_component_a_checkbox","_component_a_radio_group","_component_a_radio","_component_a_input_number","_hoisted_14","_hoisted_15","_component_a_dropdown","_component_a_menu","_component_a_menu_item","_component_close_outlined","_sfc_main$A","Condition","_component_condition_list","_component_condition","_sfc_main$z","emit","truncationList","val","_withScopeId","_pushScopeId","_popScopeId","_sfc_main$y","ConditionList","TruncationList","handleTitle","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$x","showLabel","_sfc_main$w","oldData","sortCpnts","idFilterOption","inputValue","_sfc_main$v","dimensionList","columns","dimByCount","getParentKey","tree","parentKey","node","_sfc_main$u","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$t","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$s","CalculationModal","FilterModal","CustomGroupModal","CustomSortModal","ACard","ASubMenu","AMenuDivider","ConfigName","SortByCpnt","DimByCount","indSortList","idxList","dimList","indexSetMap","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","handleInputKeyDown","onCommitLabelChange","oldLabel","aboutFormulaIds","aboutSourceIds","targetList","DEFAULT","sortList","codeDim","scope","cloneDim","specialIndicators","onSort","order","defaultCode","handleSortTitle","text","currentItem","currentIndex","customSortModalRef","customGroupModalRef","showCustomSortModal","handleCustomSortTitle","showCustomGroupModal","handleCustomGroupTitle","showHideList","indTypeList","budgetTypeList","aggregateList","distinctList","onShowHideChange","onIndTypeChange","onBudgetTypeChange","onAggregateChange","onDistinctChange","onDateFormatChange","onIndSortChange","handleDrillTableTitle","handleIndTypeTitle","handleBudgetTypeTitle","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","getIndexSetRawLabel","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_24","_directive_focus","_component_a_card","_component_plus_outlined","_normalizeClass","_hoisted_17","_withModifiers","_component_info_circle_outlined","_component_a_menu_divider","_component_a_sub_menu","aggregate","shl","il","distinct","_component_copy_outlined","_hoisted_25","_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$r","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$q","_sfc_main$p","getPrefixOrSuffixValue","prefixValue","suffixValue","_sfc_main","_sfc_main$n","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$l","PickColors","colorValue","_component_pick_colors","_sfc_main$k","onColorsChange","_sfc_main$j","InputNumber","firstItem","_component_draggable","_resolveDynamicComponent","_component_minus_circle_outlined","_sfc_main$i","_sfc_main$h","ASlider","_component_a_slider","_sfc_main$g","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$f","workerId","JsonWorker","TsWorker","EditorWorker","dom","editor","themeMap","monacoEditor","code","onUnmounted","_sfc_main$e","clickConditionMenu","_sfc_main$d","_sfc_main$c","params","getSameLevelList","handleOk","onUploadChange","imgSrc","imgBaseUrl","iconOptions","_sfc_main$b","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$a","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$9","activePanel","columnsConfigMap","newColumnsConfig","_sfc_main$8","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$7","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$6","ControlCard","_component_control_card","_component_control_list","_sfc_main$5","ControlList","isVisible","selectedIds","updateComponentsConfig","UPDATE_COMPONENTS_CONFIG","bindComponentId","updateConfig","config","onAddControl","sourceList","indicatorComponents","handleConfirmSync","error","_sfc_main$4","typeOption","rangeTypeOptions","variableData","curComponent","isDateRangeComponent","isShowDateOperate","formatOptions","onChangeDataType","onChangeVariableType","_sfc_main$3","VariableItem","variableValueMap","variableNames","mergeList","param","filterList","ignoreField","fl","_component_variable_item","_sfc_main$2","groupList","allDimensions","onDeleteItem","getDimensionData","formatParams","formatIndicatorParams","classifications","dimensionOptRes","selectedDims","_sfc_main$1","tableData","handleIndicatorData","useIndicatorData","handleFormat","DataGroup","StyleGroup","ChartGraph","ControlGroup","VariableGroup","DrillGroup","TableGraph","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,33,34,68,69,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]}