@ecan-bi/indicator-library 1.1.37 → 1.1.39

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-de6d53df.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/EditOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/EditOutlined.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/variable-group/VariableItem.vue","../src/indicator/indicator-library/data-config/variable-group/VariableItem.vue","../src/indicator/indicator-library/data-config/variable-group/variable-utils.ts","../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/variable-group/VariableModal.vue","../src/indicator/indicator-library/data-config/variable-group/VariableModal.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/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 EditOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z\" } }] }, \"name\": \"edit\", \"theme\": \"outlined\" };\nexport default EditOutlined;\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 EditOutlinedSvg from \"@ant-design/icons-svg/es/asn/EditOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar EditOutlined = function EditOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": EditOutlinedSvg\n }), null);\n};\n\nEditOutlined.displayName = 'EditOutlined';\nEditOutlined.inheritAttrs = false;\nexport default EditOutlined;","// 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 class=\"header-actions\">\n <a-button class=\"create-group-button\" @click=\"onAddGroup\">创建分组</a-button>\n <a-checkbox\n v-model:checked=\"useOtherGroup\"\n @change=\"onUseOtherGroup\"\n >\n 将未分组设为其他分组\n </a-checkbox>\n </div>\n <span class=\"select-tip\">\n 已选<span class=\"select-count\">{{ selectCount }}</span\n >个\n </span>\n </div>\n <div class=\"custom-group-tip\">\n 在标签上按下鼠标右键可执行“移入分组”和“合并为新分组”的操作\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 class=\"group-header\">\n <div\n class=\"group-title\"\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 @click.stop\n @change=\"onTitleChange($event, index)\"\n @blur=\"onFinishEditTitle(index)\"\n @pressEnter=\"onFinishEditTitle(index)\"\n />\n <edit-outlined\n v-if=\"!customGroupEditTitleList[index]\"\n class=\"group-edit-icon\"\n title=\"编辑分组名\"\n @click.stop=\"onEditTitle(index)\"\n />\n <a-popover\n v-model:visible=\"newValueVisibleList[index]\"\n placement=\"bottom\"\n trigger=\"click\"\n @visibleChange=\"onNewValueVisibleChange($event, index)\"\n >\n <template #content>\n <div class=\"new-value-popover\">\n <a-input\n class=\"new-value-input\"\n :ref=\"(el) => setNewValueInputRef(el, index)\"\n v-model:value=\"newValueTitleList[index]\"\n placeholder=\"请输入值名称\"\n @pressEnter=\"onAddValue(index)\"\n />\n <a-button\n class=\"new-value-confirm\"\n type=\"primary\"\n size=\"small\"\n @click=\"onAddValue(index)\"\n >\n 确认\n </a-button>\n </div>\n </template>\n <span class=\"new-value-icon-wrap\" @click.stop>\n <plus-outlined class=\"new-value-icon\" title=\"新建值\" />\n </span>\n </a-popover>\n </div>\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-dropdown\n v-for=\"(item, i) in customGroup.data\"\n :key=\"i\"\n :trigger=\"['contextmenu']\"\n >\n <a-checkable-tag\n color=\"red\"\n v-model:checked=\"item.checked\"\n class=\"custom-group\"\n @contextmenu=\"onTagContextMenu(item)\"\n >\n <span class=\"text\">{{ item.label }}</span>\n <close-outlined\n v-if=\"item.isNew\"\n class=\"tag-delete\"\n @click.stop=\"onDeleteValue(index, i)\"\n />\n </a-checkable-tag>\n <template #overlay>\n <a-menu>\n <a-sub-menu key=\"move-group\" title=\"移入分组\">\n <a-menu-item\n v-for=\"moveGroup in moveGroupListMap[index]\"\n :key=\"moveGroup.index\"\n @click=\"onMoveInGroup(moveGroup.index)\"\n >\n {{ moveGroup.title }}\n </a-menu-item>\n <a-menu-item v-if=\"!moveGroupListMap[index].length\" disabled>\n 暂无分组\n </a-menu-item>\n </a-sub-menu>\n <a-menu-item\n key=\"merge-new-group\"\n @click=\"onMergeToNewGroup(item)\"\n >\n 合并为新分组\n </a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\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, nextTick } from 'vue'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport {\n CloseOutlined,\n PlusOutlined,\n EditOutlined\n} from '@ant-design/icons-vue'\nimport {\n Modal as AModal,\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 Dropdown as ADropdown,\n Menu as AMenu,\n SubMenu as ASubMenu,\n MenuItem as AMenuItem,\n Popover as APopover,\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 PlusOutlined,\n EditOutlined,\n AModal,\n AButton,\n AInput,\n ACheckbox,\n ACollapse,\n ACollapsePanel,\n ATag,\n ACheckableTag,\n ADropdown,\n AMenu,\n ASubMenu,\n AMenuItem,\n APopover\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 activeKey = ref<string[]>([])\n interface CustomGroup {\n title: string\n data: {\n label: string\n checked: boolean\n isNew?: boolean\n }[]\n }\n const customGroupList = ref<CustomGroup[]>([])\n const newValueVisibleList = ref<boolean[]>([])\n const newValueTitleList = ref<string[]>([])\n const newValueInputRefList = ref<(HTMLInputElement | null)[]>([])\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 newValueVisibleList.value = new Array(length).fill(false)\n newValueTitleList.value = new Array(length).fill('')\n newValueInputRefList.value = new Array(length).fill(null)\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 titleSet = unref(customGroupTitleSet)\n let num = 1\n while (titleSet.has(`分组${num}`)) {\n num++\n }\n unref(customGroupList).push({\n title: `分组${num}`,\n data: []\n })\n isDataChange = true\n }\n const onAddValue = (index: number) => {\n const title = unref(newValueTitleList)[index]\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)[index].data.push({\n label: title,\n checked: false,\n isNew: true\n })\n expandGroup(index)\n isDataChange = true\n unref(newValueTitleList)[index] = ''\n unref(newValueVisibleList)[index] = false\n } else {\n message.error('名称已存在,请重新命名')\n }\n }\n const onNewValueVisibleChange = (visible: boolean, index: number) => {\n if (visible) {\n unref(newValueTitleList)[index] = ''\n nextTick(() => {\n unref(newValueInputRefList)[index]?.focus()\n })\n }\n }\n const setNewValueInputRef = (el: any, index: number) => {\n const rootEl = el?.$el\n const inputEl =\n rootEl?.tagName === 'INPUT'\n ? rootEl\n : rootEl?.querySelector?.('input') || el\n unref(newValueInputRefList)[index] = inputEl\n }\n const onDeleteValue = (groupIndex: number, valueIndex: number) => {\n unref(customGroupList)[groupIndex].data.splice(valueIndex, 1)\n isDataChange = true\n }\n const onDeleteGroup = (index: number) => {\n const list = unref(customGroupList)\n const deletedGroup = list[index]\n if (deletedGroup?.data?.length && list[0]) {\n list[0].data = [\n ...deletedGroup.data.map((item) => ({\n ...item,\n checked: false\n })),\n ...list[0].data\n ]\n }\n list.splice(index, 1)\n isDataChange = true\n }\n const moveGroupListMap = computed(() =>\n unref(customGroupList).map((_, groupIndex) =>\n unref(customGroupList)\n .map((customGroup, index) => ({\n title: customGroup.title,\n index\n }))\n .filter((customGroup) => customGroup.index !== groupIndex)\n )\n )\n const expandGroup = (index: number) => {\n const activeKeys = unref(activeKey)\n if (!activeKeys.includes(String(index))) {\n activeKeys.push(String(index))\n }\n }\n const collectSelected = () => {\n const selectList: CustomGroup['data'] = []\n const list = unref(customGroupList)\n const len = list.length\n for (let i = 0; i < len; i++) {\n list[i].data = list[i].data.filter((item) => {\n if (item.checked) {\n selectList.push({\n ...item,\n checked: false\n })\n }\n return !item.checked\n })\n }\n return selectList\n }\n const onMoveInGroup = (index: number) => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n if (!unref(customGroupList)[index]) {\n message.error('移入分组不存在,请重新选择')\n return\n }\n const selectList = collectSelected()\n unref(customGroupList)[index].data = [\n ...selectList,\n ...unref(customGroupList)[index].data\n ]\n expandGroup(index)\n isDataChange = true\n }\n const onMergeToNewGroup = (item: { label: string; checked: boolean }) => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n const title = item.label\n if (unref(customGroupTitleSet).has(title)) {\n message.error('分组名已存在,请重新命名')\n return\n }\n const selectList = collectSelected()\n const newIndex = unref(customGroupList).length\n unref(customGroupList).push({\n title,\n data: selectList\n })\n expandGroup(newIndex)\n isDataChange = true\n }\n const onTagContextMenu = (item: { label: string; checked: boolean }) => {\n if (!item.checked) {\n item.checked = true\n }\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 sourceLabelSet = new Set<string>()\n let isSourceLoaded = false\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 markNewValues()\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 isSourceLoaded = true\n data?.forEach((item: string) => {\n sourceLabelSet.add(item)\n })\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 const markNewValues = () => {\n if (!isSourceLoaded) return\n for (const customGroup of unref(customGroupList)) {\n customGroup.data?.forEach((item) => {\n if (!sourceLabelSet.has(item.label)) {\n item.isNew = true\n }\n })\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 onAddGroup,\n onDeleteGroup,\n onMoveInGroup,\n onMergeToNewGroup,\n onEditTitle,\n onTitleChange,\n onFinishEditTitle,\n onUseOtherGroup,\n onAddValue,\n onNewValueVisibleChange,\n setNewValueInputRef,\n onDeleteValue,\n onTagContextMenu,\n newValueVisibleList,\n newValueTitleList,\n moveGroupListMap,\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 align-items: center;\n margin-bottom: 15px;\n}\n\n.custom-group-tip {\n margin-bottom: 8px;\n font-size: 12px;\n color: #8c8c8c;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n}\n\n.create-group-button {\n margin-right: 15px;\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.group-header {\n display: flex;\n align-items: center;\n}\n\n.group-title {\n display: inline-flex;\n align-items: center;\n}\n\n.new-value-icon-wrap {\n display: inline-flex;\n align-items: center;\n}\n\n.new-value-icon {\n margin-left: 8px;\n color: #1890ff;\n cursor: pointer;\n font-size: 14px;\n}\n\n.group-edit-icon {\n margin-left: 8px;\n color: #8c8c8c;\n cursor: pointer;\n font-size: 14px;\n}\n\n.new-value-popover {\n display: flex;\n align-items: center;\n}\n\n.new-value-input {\n width: 140px;\n}\n\n.new-value-confirm {\n margin-left: 10px;\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.custom-group:not(.ant-tag-checkable-checked) {\n background-color: rgba(161, 212, 230, 0.3);\n}\n\n.custom-group.ant-tag-checkable-checked .tag-delete {\n color: #fff;\n}\n\n.tag-delete {\n margin-left: 6px;\n font-size: 12px;\n color: #ff4d4f;\n cursor: pointer;\n}\n\n.text {\n font-size: 14px;\n}\n\n.select-tip {\n margin-left: 10px;\n font-size: 15px;\n}\n\n.select-count {\n color: red;\n margin: 0 3px;\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 {\n margin-bottom: 8px;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n background-color: #fff;\n overflow: hidden;\n\n > .ant-collapse-header {\n padding: 12px 10px;\n background-color: rgba(161, 212, 230, 0.12);\n }\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 class=\"header-actions\">\n <a-button class=\"create-group-button\" @click=\"onAddGroup\">创建分组</a-button>\n <a-checkbox\n v-model:checked=\"useOtherGroup\"\n @change=\"onUseOtherGroup\"\n >\n 将未分组设为其他分组\n </a-checkbox>\n </div>\n <span class=\"select-tip\">\n 已选<span class=\"select-count\">{{ selectCount }}</span\n >个\n </span>\n </div>\n <div class=\"custom-group-tip\">\n 在标签上按下鼠标右键可执行“移入分组”和“合并为新分组”的操作\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 class=\"group-header\">\n <div\n class=\"group-title\"\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 @click.stop\n @change=\"onTitleChange($event, index)\"\n @blur=\"onFinishEditTitle(index)\"\n @pressEnter=\"onFinishEditTitle(index)\"\n />\n <edit-outlined\n v-if=\"!customGroupEditTitleList[index]\"\n class=\"group-edit-icon\"\n title=\"编辑分组名\"\n @click.stop=\"onEditTitle(index)\"\n />\n <a-popover\n v-model:visible=\"newValueVisibleList[index]\"\n placement=\"bottom\"\n trigger=\"click\"\n @visibleChange=\"onNewValueVisibleChange($event, index)\"\n >\n <template #content>\n <div class=\"new-value-popover\">\n <a-input\n class=\"new-value-input\"\n :ref=\"(el) => setNewValueInputRef(el, index)\"\n v-model:value=\"newValueTitleList[index]\"\n placeholder=\"请输入值名称\"\n @pressEnter=\"onAddValue(index)\"\n />\n <a-button\n class=\"new-value-confirm\"\n type=\"primary\"\n size=\"small\"\n @click=\"onAddValue(index)\"\n >\n 确认\n </a-button>\n </div>\n </template>\n <span class=\"new-value-icon-wrap\" @click.stop>\n <plus-outlined class=\"new-value-icon\" title=\"新建值\" />\n </span>\n </a-popover>\n </div>\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-dropdown\n v-for=\"(item, i) in customGroup.data\"\n :key=\"i\"\n :trigger=\"['contextmenu']\"\n >\n <a-checkable-tag\n color=\"red\"\n v-model:checked=\"item.checked\"\n class=\"custom-group\"\n @contextmenu=\"onTagContextMenu(item)\"\n >\n <span class=\"text\">{{ item.label }}</span>\n <close-outlined\n v-if=\"item.isNew\"\n class=\"tag-delete\"\n @click.stop=\"onDeleteValue(index, i)\"\n />\n </a-checkable-tag>\n <template #overlay>\n <a-menu>\n <a-sub-menu key=\"move-group\" title=\"移入分组\">\n <a-menu-item\n v-for=\"moveGroup in moveGroupListMap[index]\"\n :key=\"moveGroup.index\"\n @click=\"onMoveInGroup(moveGroup.index)\"\n >\n {{ moveGroup.title }}\n </a-menu-item>\n <a-menu-item v-if=\"!moveGroupListMap[index].length\" disabled>\n 暂无分组\n </a-menu-item>\n </a-sub-menu>\n <a-menu-item\n key=\"merge-new-group\"\n @click=\"onMergeToNewGroup(item)\"\n >\n 合并为新分组\n </a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\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, nextTick } from 'vue'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport {\n CloseOutlined,\n PlusOutlined,\n EditOutlined\n} from '@ant-design/icons-vue'\nimport {\n Modal as AModal,\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 Dropdown as ADropdown,\n Menu as AMenu,\n SubMenu as ASubMenu,\n MenuItem as AMenuItem,\n Popover as APopover,\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 PlusOutlined,\n EditOutlined,\n AModal,\n AButton,\n AInput,\n ACheckbox,\n ACollapse,\n ACollapsePanel,\n ATag,\n ACheckableTag,\n ADropdown,\n AMenu,\n ASubMenu,\n AMenuItem,\n APopover\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 activeKey = ref<string[]>([])\n interface CustomGroup {\n title: string\n data: {\n label: string\n checked: boolean\n isNew?: boolean\n }[]\n }\n const customGroupList = ref<CustomGroup[]>([])\n const newValueVisibleList = ref<boolean[]>([])\n const newValueTitleList = ref<string[]>([])\n const newValueInputRefList = ref<(HTMLInputElement | null)[]>([])\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 newValueVisibleList.value = new Array(length).fill(false)\n newValueTitleList.value = new Array(length).fill('')\n newValueInputRefList.value = new Array(length).fill(null)\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 titleSet = unref(customGroupTitleSet)\n let num = 1\n while (titleSet.has(`分组${num}`)) {\n num++\n }\n unref(customGroupList).push({\n title: `分组${num}`,\n data: []\n })\n isDataChange = true\n }\n const onAddValue = (index: number) => {\n const title = unref(newValueTitleList)[index]\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)[index].data.push({\n label: title,\n checked: false,\n isNew: true\n })\n expandGroup(index)\n isDataChange = true\n unref(newValueTitleList)[index] = ''\n unref(newValueVisibleList)[index] = false\n } else {\n message.error('名称已存在,请重新命名')\n }\n }\n const onNewValueVisibleChange = (visible: boolean, index: number) => {\n if (visible) {\n unref(newValueTitleList)[index] = ''\n nextTick(() => {\n unref(newValueInputRefList)[index]?.focus()\n })\n }\n }\n const setNewValueInputRef = (el: any, index: number) => {\n const rootEl = el?.$el\n const inputEl =\n rootEl?.tagName === 'INPUT'\n ? rootEl\n : rootEl?.querySelector?.('input') || el\n unref(newValueInputRefList)[index] = inputEl\n }\n const onDeleteValue = (groupIndex: number, valueIndex: number) => {\n unref(customGroupList)[groupIndex].data.splice(valueIndex, 1)\n isDataChange = true\n }\n const onDeleteGroup = (index: number) => {\n const list = unref(customGroupList)\n const deletedGroup = list[index]\n if (deletedGroup?.data?.length && list[0]) {\n list[0].data = [\n ...deletedGroup.data.map((item) => ({\n ...item,\n checked: false\n })),\n ...list[0].data\n ]\n }\n list.splice(index, 1)\n isDataChange = true\n }\n const moveGroupListMap = computed(() =>\n unref(customGroupList).map((_, groupIndex) =>\n unref(customGroupList)\n .map((customGroup, index) => ({\n title: customGroup.title,\n index\n }))\n .filter((customGroup) => customGroup.index !== groupIndex)\n )\n )\n const expandGroup = (index: number) => {\n const activeKeys = unref(activeKey)\n if (!activeKeys.includes(String(index))) {\n activeKeys.push(String(index))\n }\n }\n const collectSelected = () => {\n const selectList: CustomGroup['data'] = []\n const list = unref(customGroupList)\n const len = list.length\n for (let i = 0; i < len; i++) {\n list[i].data = list[i].data.filter((item) => {\n if (item.checked) {\n selectList.push({\n ...item,\n checked: false\n })\n }\n return !item.checked\n })\n }\n return selectList\n }\n const onMoveInGroup = (index: number) => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n if (!unref(customGroupList)[index]) {\n message.error('移入分组不存在,请重新选择')\n return\n }\n const selectList = collectSelected()\n unref(customGroupList)[index].data = [\n ...selectList,\n ...unref(customGroupList)[index].data\n ]\n expandGroup(index)\n isDataChange = true\n }\n const onMergeToNewGroup = (item: { label: string; checked: boolean }) => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n const title = item.label\n if (unref(customGroupTitleSet).has(title)) {\n message.error('分组名已存在,请重新命名')\n return\n }\n const selectList = collectSelected()\n const newIndex = unref(customGroupList).length\n unref(customGroupList).push({\n title,\n data: selectList\n })\n expandGroup(newIndex)\n isDataChange = true\n }\n const onTagContextMenu = (item: { label: string; checked: boolean }) => {\n if (!item.checked) {\n item.checked = true\n }\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 sourceLabelSet = new Set<string>()\n let isSourceLoaded = false\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 markNewValues()\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 isSourceLoaded = true\n data?.forEach((item: string) => {\n sourceLabelSet.add(item)\n })\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 const markNewValues = () => {\n if (!isSourceLoaded) return\n for (const customGroup of unref(customGroupList)) {\n customGroup.data?.forEach((item) => {\n if (!sourceLabelSet.has(item.label)) {\n item.isNew = true\n }\n })\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 onAddGroup,\n onDeleteGroup,\n onMoveInGroup,\n onMergeToNewGroup,\n onEditTitle,\n onTitleChange,\n onFinishEditTitle,\n onUseOtherGroup,\n onAddValue,\n onNewValueVisibleChange,\n setNewValueInputRef,\n onDeleteValue,\n onTagContextMenu,\n newValueVisibleList,\n newValueTitleList,\n moveGroupListMap,\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 align-items: center;\n margin-bottom: 15px;\n}\n\n.custom-group-tip {\n margin-bottom: 8px;\n font-size: 12px;\n color: #8c8c8c;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n}\n\n.create-group-button {\n margin-right: 15px;\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.group-header {\n display: flex;\n align-items: center;\n}\n\n.group-title {\n display: inline-flex;\n align-items: center;\n}\n\n.new-value-icon-wrap {\n display: inline-flex;\n align-items: center;\n}\n\n.new-value-icon {\n margin-left: 8px;\n color: #1890ff;\n cursor: pointer;\n font-size: 14px;\n}\n\n.group-edit-icon {\n margin-left: 8px;\n color: #8c8c8c;\n cursor: pointer;\n font-size: 14px;\n}\n\n.new-value-popover {\n display: flex;\n align-items: center;\n}\n\n.new-value-input {\n width: 140px;\n}\n\n.new-value-confirm {\n margin-left: 10px;\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.custom-group:not(.ant-tag-checkable-checked) {\n background-color: rgba(161, 212, 230, 0.3);\n}\n\n.custom-group.ant-tag-checkable-checked .tag-delete {\n color: #fff;\n}\n\n.tag-delete {\n margin-left: 6px;\n font-size: 12px;\n color: #ff4d4f;\n cursor: pointer;\n}\n\n.text {\n font-size: 14px;\n}\n\n.select-tip {\n margin-left: 10px;\n font-size: 15px;\n}\n\n.select-count {\n color: red;\n margin: 0 3px;\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 {\n margin-bottom: 8px;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n background-color: #fff;\n overflow: hidden;\n\n > .ant-collapse-header {\n padding: 12px 10px;\n background-color: rgba(161, 212, 230, 0.12);\n }\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,\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,\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>\r\n <div class=\"variable-item\">\r\n <!-- 变量名 -->\r\n <a-input\r\n class=\"field-name\"\n v-model:value=\"variableData.variableName\"\n placeholder=\"请输入变量名\"\n :disabled=\"!isCustom && (!!variableData.randomKey || nameDisabled)\"\n />\r\n <!-- 变量类型 -->\r\n <a-select\r\n class=\"field-name\"\n v-model:value=\"variableData.variableType\"\n :options=\"typeOption\"\n :disabled=\"!isCustom\"\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 v-if=\"formatOptions?.length\"\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\r\n class=\"delete-icon\"\r\n @click=\"onDelete\"\r\n v-if=\"showDelete === undefined ? !variableData.randomKey : showDelete\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, unref, ref, watch, nextTick } from 'vue'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\nimport { cloneDeep } from 'lodash-es'\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 nameDisabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n showDelete: {\r\n type: Boolean,\r\n default: undefined\r\n }\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))\n let syncing = false\n watch(() => props.item, (item) => {\n syncing = true\n variableData.value = cloneDeep(item)\n nextTick(() => {\n syncing = false\n })\n }, {\n deep: true,\n immediate: true\n })\n watch(variableData, (data) => {\n if (syncing) return\n emit('update', cloneDeep(data), props.index)\n }, {\n deep: true\n })\n const isCustom = computed(() => unref(variableData)?.isCustom === true)\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: 'MM' },\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 {\n variableData,\n isCustom,\n typeOption,\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 .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 <a-input\r\n class=\"field-name\"\n v-model:value=\"variableData.variableName\"\n placeholder=\"请输入变量名\"\n :disabled=\"!isCustom && (!!variableData.randomKey || nameDisabled)\"\n />\r\n <!-- 变量类型 -->\r\n <a-select\r\n class=\"field-name\"\n v-model:value=\"variableData.variableType\"\n :options=\"typeOption\"\n :disabled=\"!isCustom\"\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 v-if=\"formatOptions?.length\"\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\r\n class=\"delete-icon\"\r\n @click=\"onDelete\"\r\n v-if=\"showDelete === undefined ? !variableData.randomKey : showDelete\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, unref, ref, watch, nextTick } from 'vue'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\nimport { cloneDeep } from 'lodash-es'\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 nameDisabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n showDelete: {\r\n type: Boolean,\r\n default: undefined\r\n }\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))\n let syncing = false\n watch(() => props.item, (item) => {\n syncing = true\n variableData.value = cloneDeep(item)\n nextTick(() => {\n syncing = false\n })\n }, {\n deep: true,\n immediate: true\n })\n watch(variableData, (data) => {\n if (syncing) return\n emit('update', cloneDeep(data), props.index)\n }, {\n deep: true\n })\n const isCustom = computed(() => unref(variableData)?.isCustom === true)\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: 'MM' },\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 {\n variableData,\n isCustom,\n typeOption,\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 .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","import { nanoid } from 'nanoid'\n\nexport const isGlobalVariable = (item: { [key: string]: any } = {}) => {\n return item.globalCondition === true || (item.globalCondition == null && !item.randomKey)\n}\n\nexport const normalizeVariableList = (variableList: { [key: string]: any }[]): { [key: string]: any }[] => {\n return (variableList || []).map((item) => ({\n ...item,\n globalCondition: isGlobalVariable(item)\n }))\n}\n\nexport const createIndicatorVariableList = (\n dataSetParams: { [key: string]: any }[],\n indicator: { [key: string]: any },\n source: any\n): { [key: string]: any }[] => {\n const list: { [key: string]: any }[] = []\n if (!Array.isArray(dataSetParams) || !dataSetParams.length) {\n return list\n }\n for (const val of dataSetParams) {\n list.push({\n ...val,\n dataType: '',\n id: null,\n variableValue: 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: indicator.label,\n randomKey: indicator.randomKey,\n keyValue: nanoid(),\n disabled: source === 'EDV_DATA_SET',\n globalCondition: false\n })\n }\n return list\n}\n\nexport const createGlobalVariableList = (\n graphicConfig: { [key: string]: any },\n savedVariableList: { [key: string]: any }[]\n): { [key: string]: any }[] => {\n const types = ['leftAxisList', 'rightAxisList', 'indicators', 'specialIndicators']\n const allParamNames: string[][] = []\n const allParamMap = new Map<string, { [key: string]: any }>()\n for (const type of types) {\n for (const item of graphicConfig?.[type] || []) {\n const dataSetParams: any[] = Array.isArray(item?.dataSetParams) ? item.dataSetParams : []\n if (dataSetParams.length) {\n const paramNames: string[] = dataSetParams.map((param: any) => param.name).filter(Boolean)\n allParamNames.push([...new Set(paramNames)])\n for (const param of dataSetParams) {\n if (param.name && !allParamMap.has(param.name)) {\n allParamMap.set(param.name, param)\n }\n }\n }\n }\n }\n if (!allParamNames.length) {\n return (savedVariableList || [])\n .filter(isGlobalVariable)\n .map((item) => ({ ...item, isCustom: true }))\n }\n let commonNames = allParamNames[0]\n for (const names of allParamNames) {\n commonNames = commonNames.filter(name => names.includes(name))\n }\n const savedGlobalList = (savedVariableList || []).filter(isGlobalVariable)\n const list = commonNames.map((name) => {\n const source = allParamMap.get(name)\n const saved = savedGlobalList.find(v => v.variableName === name)\n if (saved) {\n return saved\n }\n return {\n ...source,\n variableName: name,\n variableType: source?.valueType,\n dataType: '',\n id: null,\n variableValue: source?.defaultValue ?? null,\n dateTypeValue: null,\n format: source?.valueFormat ? source.valueFormat.toUpperCase() : null,\n keyValue: `global-${name}`,\n globalCondition: true,\n randomKey: null,\n disabled: false\n }\n })\n // 保留已保存但未与公共参数匹配的全局变量,例如手动新增的变量\n const customGlobalList = savedGlobalList.filter(\n (saved) => !list.some((item) => item.variableName === saved.variableName)\n ).map((saved) => ({ ...saved, isCustom: true }))\n return [...list, ...customGlobalList]\n}\n","<template>\n <div class=\"variable-group\">\n <div class=\"variable-group-header\" v-if=\"source !== 'EDV_DATA_SET'\">\n <a-button @click=\"onAddVariable\">添加变量</a-button>\n </div>\n </div>\n <div class=\"variable-group-content\">\n <template v-for=\"(item, index) in variableList\" :key=\"item.keyValue\">\n <variable-item\n :item=\"item\"\n :index=\"Number(index)\"\n :show-delete=\"false\"\n :name-disabled=\"mode === 'global'\"\n @update=\"onUpdateItem\"\n @delete=\"onDeleteItem\"\n />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, watch } from 'vue'\nimport VariableItem from './VariableItem.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { createGlobalVariableList, isGlobalVariable, normalizeVariableList } from './variable-utils'\nexport default defineComponent({\n name: 'VariableGroup',\n components: {\n VariableItem\n },\n props: {\n mode: {\n type: String,\n default: 'global'\n },\n indicatorLabel: {\n type: String,\n default: ''\n },\n indicatorKey: {\n type: String,\n default: ''\n }\n },\n setup (props) {\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 source = inject(SOURCE_TYPE)\n const variableList = computed(() => {\n const list = unref(graphicConfig)?.variableList || []\n if (props.mode === 'indicator') {\n return list.filter((item: any) => item.randomKey === props.indicatorKey)\n }\n return createGlobalVariableList(unref(graphicConfig), list)\n })\n\n const updateConfig = (list: { [key:string]: any }[]) => {\n const allList = cloneDeep(unref(graphicConfig)?.variableList || [])\n let mergedList\n if (props.mode === 'global') {\n mergedList = allList.filter(item => !isGlobalVariable(item)).concat(list)\n } else {\n const scopeKeyMap = new Map(list.map(item => [item.keyValue, item]))\n mergedList = allList.map(item => scopeKeyMap.get(item.keyValue) || item)\n for (const item of list) {\n if (!allList.some(oldItem => oldItem.keyValue === item.keyValue)) {\n mergedList.push(item)\n }\n }\n }\n const normalizedList = normalizeVariableList(mergedList)\n updateGraphicConfig({\n ...unref(graphicConfig),\n variableConditions: handleVariableList(normalizedList, renderUsedComponents),\n variableList: normalizedList\n })\n }\n\n watch(() => {\n if (props.mode === 'global') {\n return variableList.value.map((v: any) => v.variableName).join(',')\n }\n return ''\n }, () => {\n if (props.mode === 'global') {\n updateConfig(cloneDeep(variableList.value))\n }\n }, {\n immediate: true\n })\n\n const onAddVariable = () => {\n const list = cloneDeep(unref(variableList))\n const usedNames = new Set(\n list.map((item: any) => item.variableName).filter(Boolean)\n )\n let num = 1\n while (usedNames.has(`变量${num}`)) {\n num++\n }\n const newItem: { [key: string]: any } = {\n keyValue: nanoid(),\n variableName: `变量${num}`,\n isCustom: true,\n variableType: 'TEXT',\n dataType: '',\n id: null,\n keyName: '',\n variableValue: null,\n dateTypeValue: null,\n format: null,\n globalCondition: props.mode !== 'indicator',\n randomKey: null,\n disabled: false\n }\n if (props.mode === 'indicator') {\n newItem.label = props.indicatorLabel\n newItem.randomKey = props.indicatorKey\n newItem.disabled = unref(source) === 'EDV_DATA_SET'\n }\n list.push(newItem)\n updateConfig(list)\n }\n\n const onSyncVariable = () => {\n const {\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n specialIndicators = []\n } = unref(graphicConfig) || {}\n const list = cloneDeep(unref(variableList))\n const variableValueMap = new Map()\n const variableNames = []\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\n for (const item of mergeList) {\n if (item.dataSetParams?.length) {\n for (const param of item.dataSetParams) {\n if (!variableValueMap.has(param.name)) {\n variableNames.push(param.name)\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\n }\n }\n }\n }\n for (const item of variableNames) {\n const data = variableValueMap.get(item)\n if (data) {\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\n const ignoreField = ['label', 'randomKey', 'keyValue']\n for (const fl of filterList) {\n for (const key in data) {\n if (!ignoreField.includes(key)) {\n fl[key] = data[key]\n }\n }\n }\n }\n }\n updateConfig(list)\n }\n\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\n if (index >= 0) {\n const list = cloneDeep(unref(variableList))\n list[index] = data\n updateConfig(list)\n }\n }\n\n const onDeleteItem = (index: number) => {\n if (index >= 0) {\n const list = cloneDeep(unref(variableList))\n list.splice(index, 1)\n updateConfig(list)\n }\n }\n\n return {\n variableList,\n source,\n onAddVariable,\n onSyncVariable,\n onUpdateItem,\n onDeleteItem\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.variable-group-header {\n margin: 20px 0;\n}\n</style>\n","<template>\n <div class=\"variable-group\">\n <div class=\"variable-group-header\" v-if=\"source !== 'EDV_DATA_SET'\">\n <a-button @click=\"onAddVariable\">添加变量</a-button>\n </div>\n </div>\n <div class=\"variable-group-content\">\n <template v-for=\"(item, index) in variableList\" :key=\"item.keyValue\">\n <variable-item\n :item=\"item\"\n :index=\"Number(index)\"\n :show-delete=\"false\"\n :name-disabled=\"mode === 'global'\"\n @update=\"onUpdateItem\"\n @delete=\"onDeleteItem\"\n />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, watch } from 'vue'\nimport VariableItem from './VariableItem.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { createGlobalVariableList, isGlobalVariable, normalizeVariableList } from './variable-utils'\nexport default defineComponent({\n name: 'VariableGroup',\n components: {\n VariableItem\n },\n props: {\n mode: {\n type: String,\n default: 'global'\n },\n indicatorLabel: {\n type: String,\n default: ''\n },\n indicatorKey: {\n type: String,\n default: ''\n }\n },\n setup (props) {\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 source = inject(SOURCE_TYPE)\n const variableList = computed(() => {\n const list = unref(graphicConfig)?.variableList || []\n if (props.mode === 'indicator') {\n return list.filter((item: any) => item.randomKey === props.indicatorKey)\n }\n return createGlobalVariableList(unref(graphicConfig), list)\n })\n\n const updateConfig = (list: { [key:string]: any }[]) => {\n const allList = cloneDeep(unref(graphicConfig)?.variableList || [])\n let mergedList\n if (props.mode === 'global') {\n mergedList = allList.filter(item => !isGlobalVariable(item)).concat(list)\n } else {\n const scopeKeyMap = new Map(list.map(item => [item.keyValue, item]))\n mergedList = allList.map(item => scopeKeyMap.get(item.keyValue) || item)\n for (const item of list) {\n if (!allList.some(oldItem => oldItem.keyValue === item.keyValue)) {\n mergedList.push(item)\n }\n }\n }\n const normalizedList = normalizeVariableList(mergedList)\n updateGraphicConfig({\n ...unref(graphicConfig),\n variableConditions: handleVariableList(normalizedList, renderUsedComponents),\n variableList: normalizedList\n })\n }\n\n watch(() => {\n if (props.mode === 'global') {\n return variableList.value.map((v: any) => v.variableName).join(',')\n }\n return ''\n }, () => {\n if (props.mode === 'global') {\n updateConfig(cloneDeep(variableList.value))\n }\n }, {\n immediate: true\n })\n\n const onAddVariable = () => {\n const list = cloneDeep(unref(variableList))\n const usedNames = new Set(\n list.map((item: any) => item.variableName).filter(Boolean)\n )\n let num = 1\n while (usedNames.has(`变量${num}`)) {\n num++\n }\n const newItem: { [key: string]: any } = {\n keyValue: nanoid(),\n variableName: `变量${num}`,\n isCustom: true,\n variableType: 'TEXT',\n dataType: '',\n id: null,\n keyName: '',\n variableValue: null,\n dateTypeValue: null,\n format: null,\n globalCondition: props.mode !== 'indicator',\n randomKey: null,\n disabled: false\n }\n if (props.mode === 'indicator') {\n newItem.label = props.indicatorLabel\n newItem.randomKey = props.indicatorKey\n newItem.disabled = unref(source) === 'EDV_DATA_SET'\n }\n list.push(newItem)\n updateConfig(list)\n }\n\n const onSyncVariable = () => {\n const {\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n specialIndicators = []\n } = unref(graphicConfig) || {}\n const list = cloneDeep(unref(variableList))\n const variableValueMap = new Map()\n const variableNames = []\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\n for (const item of mergeList) {\n if (item.dataSetParams?.length) {\n for (const param of item.dataSetParams) {\n if (!variableValueMap.has(param.name)) {\n variableNames.push(param.name)\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\n }\n }\n }\n }\n for (const item of variableNames) {\n const data = variableValueMap.get(item)\n if (data) {\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\n const ignoreField = ['label', 'randomKey', 'keyValue']\n for (const fl of filterList) {\n for (const key in data) {\n if (!ignoreField.includes(key)) {\n fl[key] = data[key]\n }\n }\n }\n }\n }\n updateConfig(list)\n }\n\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\n if (index >= 0) {\n const list = cloneDeep(unref(variableList))\n list[index] = data\n updateConfig(list)\n }\n }\n\n const onDeleteItem = (index: number) => {\n if (index >= 0) {\n const list = cloneDeep(unref(variableList))\n list.splice(index, 1)\n updateConfig(list)\n }\n }\n\n return {\n variableList,\n source,\n onAddVariable,\n onSyncVariable,\n onUpdateItem,\n onDeleteItem\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.variable-group-header {\n margin: 20px 0;\n}\n</style>\n","<template>\n <a-modal\n :title=\"`配置变量 - ${item?.label || ''}`\"\n :visible=\"visible\"\n destroy-on-close\n width=\"70%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <variable-group\n mode=\"indicator\"\n :indicator-label=\"item?.label || ''\"\n :indicator-key=\"item?.randomKey || ''\"\n />\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, inject, watch } from 'vue'\nimport { Modal as AModal } from 'ant-design-vue'\nimport VariableGroup from './VariableGroup.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { cloneDeep } from 'lodash-es'\nimport { createIndicatorVariableList, normalizeVariableList } from './variable-utils'\n\nexport default defineComponent({\n name: 'VariableModal',\n components: {\n AModal,\n VariableGroup\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const visible = ref(false)\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 source = inject(SOURCE_TYPE) as any\n\n const ensureInitialVariables = () => {\n const { randomKey, label, dataSetParams } = props.item || {}\n if (!randomKey || !Array.isArray(dataSetParams) || !dataSetParams.length) {\n return\n }\n const currentList = unref(graphicConfig)?.variableList || []\n if (currentList.some((item: any) => item.randomKey === randomKey)) {\n return\n }\n const newVariables = createIndicatorVariableList(dataSetParams, { label, randomKey }, unref(source))\n if (!newVariables.length) {\n return\n }\n const variableList = normalizeVariableList(cloneDeep(currentList))\n variableList.unshift(...newVariables)\n updateGraphicConfig({\n variableList,\n variableConditions: handleVariableList(variableList, renderUsedComponents)\n })\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n hideModal()\n }\n\n watch(visible, (value: boolean) => {\n if (value) {\n ensureInitialVariables()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n }, {\n flush: 'post'\n })\n\n watch(() => props.item, () => {\n if (visible.value) {\n ensureInitialVariables()\n }\n })\n\n expose({\n showModal\n })\n\n return {\n visible,\n onCancel\n }\n }\n})\n</script>\n","<template>\n <a-modal\n :title=\"`配置变量 - ${item?.label || ''}`\"\n :visible=\"visible\"\n destroy-on-close\n width=\"70%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <variable-group\n mode=\"indicator\"\n :indicator-label=\"item?.label || ''\"\n :indicator-key=\"item?.randomKey || ''\"\n />\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, inject, watch } from 'vue'\nimport { Modal as AModal } from 'ant-design-vue'\nimport VariableGroup from './VariableGroup.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { cloneDeep } from 'lodash-es'\nimport { createIndicatorVariableList, normalizeVariableList } from './variable-utils'\n\nexport default defineComponent({\n name: 'VariableModal',\n components: {\n AModal,\n VariableGroup\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const visible = ref(false)\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 source = inject(SOURCE_TYPE) as any\n\n const ensureInitialVariables = () => {\n const { randomKey, label, dataSetParams } = props.item || {}\n if (!randomKey || !Array.isArray(dataSetParams) || !dataSetParams.length) {\n return\n }\n const currentList = unref(graphicConfig)?.variableList || []\n if (currentList.some((item: any) => item.randomKey === randomKey)) {\n return\n }\n const newVariables = createIndicatorVariableList(dataSetParams, { label, randomKey }, unref(source))\n if (!newVariables.length) {\n return\n }\n const variableList = normalizeVariableList(cloneDeep(currentList))\n variableList.unshift(...newVariables)\n updateGraphicConfig({\n variableList,\n variableConditions: handleVariableList(variableList, renderUsedComponents)\n })\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n hideModal()\n }\n\n watch(visible, (value: boolean) => {\n if (value) {\n ensureInitialVariables()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n }, {\n flush: 'post'\n })\n\n watch(() => props.item, () => {\n if (visible.value) {\n ensureInitialVariables()\n }\n })\n\n expose({\n showModal\n })\n\n return {\n visible,\n onCancel\n }\n }\n})\n</script>\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=\"['queryColumnList', 'leftAxisList', 'rightAxisList', 'indicators'].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 <template v-if=\"idxList.includes(type) && hasIndicatorVariables(cardItem)\">\n <a-menu-item @click=\"showVariableModal(cardItem, index)\">\n 配置变量\n </a-menu-item>\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 <variable-modal\n :item=\"currentItem\"\n :type=\"type\"\n ref=\"variableModalRef\"\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 VariableModal from '../../variable-group/VariableModal.vue'\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'\nimport { createIndicatorVariableList, normalizeVariableList } from '../../variable-group/variable-utils'\nexport default defineComponent({\n name: 'DataConfigCard',\n directives: {\n focus\n },\n components: {\n CalculationModal,\n FilterModal,\n CustomGroupModal,\n VariableModal,\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 ((['0', '2'].includes(data.genericType) && idxList.includes(type)) || (data.genericType === '1' && dimList.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 let 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 const newVariableList = createIndicatorVariableList(variableList, data, unref(source))\n if (newVariableList?.length) {\n varList.unshift(...newVariableList)\n }\n }\n }\n varList = normalizeVariableList(varList)\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 const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\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 const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\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 for (let i = 0; i < list.length; i++) {\n if (i === index) {\n list[index].aggregate = value\n } else if (props.type === 'queryColumnList') {\n list[i].aggregate = ''\n }\n }\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'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数'\n // GROUP: '聚合'\n }\n return `汇总方式${key ? '(' + 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 hasIndicatorVariables = (item: { [key: string]: any } = {}) => {\n if (item.randomKey && Array.isArray(item.dataSetParams) && item.dataSetParams.length) {\n return true\n }\n return !!(item.randomKey && (unref(graphicConfig)?.variableList || []).some((v: any) => v.randomKey === item.randomKey))\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 variableModalRef = ref()\n const showVariableModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(variableModalRef)?.showModal(item)\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 idxList,\n hasIndicatorVariables,\n isShowSortByCpnt,\n showSortByCpntModal,\n dataSelectIndicators,\n showDimByCountModal,\n variableModalRef,\n showVariableModal,\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=\"['queryColumnList', 'leftAxisList', 'rightAxisList', 'indicators'].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 <template v-if=\"idxList.includes(type) && hasIndicatorVariables(cardItem)\">\n <a-menu-item @click=\"showVariableModal(cardItem, index)\">\n 配置变量\n </a-menu-item>\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 <variable-modal\n :item=\"currentItem\"\n :type=\"type\"\n ref=\"variableModalRef\"\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 VariableModal from '../../variable-group/VariableModal.vue'\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'\nimport { createIndicatorVariableList, normalizeVariableList } from '../../variable-group/variable-utils'\nexport default defineComponent({\n name: 'DataConfigCard',\n directives: {\n focus\n },\n components: {\n CalculationModal,\n FilterModal,\n CustomGroupModal,\n VariableModal,\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 ((['0', '2'].includes(data.genericType) && idxList.includes(type)) || (data.genericType === '1' && dimList.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 let 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 const newVariableList = createIndicatorVariableList(variableList, data, unref(source))\n if (newVariableList?.length) {\n varList.unshift(...newVariableList)\n }\n }\n }\n varList = normalizeVariableList(varList)\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 const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\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 const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\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 for (let i = 0; i < list.length; i++) {\n if (i === index) {\n list[index].aggregate = value\n } else if (props.type === 'queryColumnList') {\n list[i].aggregate = ''\n }\n }\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'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数'\n // GROUP: '聚合'\n }\n return `汇总方式${key ? '(' + 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 hasIndicatorVariables = (item: { [key: string]: any } = {}) => {\n if (item.randomKey && Array.isArray(item.dataSetParams) && item.dataSetParams.length) {\n return true\n }\n return !!(item.randomKey && (unref(graphicConfig)?.variableList || []).some((v: any) => v.randomKey === item.randomKey))\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 variableModalRef = ref()\n const showVariableModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(variableModalRef)?.showModal(item)\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 idxList,\n hasIndicatorVariables,\n isShowSortByCpnt,\n showSortByCpntModal,\n dataSelectIndicators,\n showDimByCountModal,\n variableModalRef,\n showVariableModal,\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, isExtProperty } = 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 if (isExtProperty) {\n controlParams.isExtProperty = isExtProperty\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, isExtProperty } = 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 if (isExtProperty) {\n controlParams.isExtProperty = isExtProperty\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=\"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 SOURCE_TYPE\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 source = inject(SOURCE_TYPE)\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 commonOpts = [\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 ]\n const options = [\n ...(unref(source) === 'EDV_DATA_SET' ? [] : commonOpts),\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 syncVariableConditions = () => {\n const variableConditions = handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n if (JSON.stringify(variableConditions) !== JSON.stringify(unref(graphicConfig)?.variableConditions || [])) {\n updateGraphicConfig({ variableConditions })\n return true\n }\n return false\n }\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 if (!syncVariableConditions()) {\n refreshData()\n }\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 SOURCE_TYPE\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 source = inject(SOURCE_TYPE)\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 commonOpts = [\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 ]\n const options = [\n ...(unref(source) === 'EDV_DATA_SET' ? [] : commonOpts),\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 syncVariableConditions = () => {\n const variableConditions = handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n if (JSON.stringify(variableConditions) !== JSON.stringify(unref(graphicConfig)?.variableConditions || [])) {\n updateGraphicConfig({ variableConditions })\n return true\n }\n return false\n }\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 if (!syncVariableConditions()) {\n refreshData()\n }\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","EditOutlined","EditOutlinedSvg","EditOutlined$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$E","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$D","focus","AInput","ACheckbox","ACollapse","ACollapsePanel","ATag","ACheckableTag","ADropdown","AMenu","ASubMenu","AMenuItem","APopover","title","customGroupList","newValueVisibleList","newValueTitleList","newValueInputRefList","customGroupTitleSet","customGroupTitleList","customGroupEditTitleList","length","selectCount","count","customGroup","onAddGroup","titleSet","num","onAddValue","message","isAllow","group","expandGroup","onNewValueVisibleChange","nextTick","setNewValueInputRef","rootEl","inputEl","onDeleteValue","groupIndex","valueIndex","onDeleteGroup","deletedGroup","moveGroupListMap","_","activeKeys","collectSelected","selectList","len","onMoveInGroup","onMergeToNewGroup","newIndex","onTagContextMenu","onEditTitle","onFinishEditTitle","onTitleChange","event","useOtherGroup","updateCustomGroup","customGroups","otherGroupName","groupInfoMap","onUseOtherGroup","allLabelSet","sourceLabelSet","isSourceLoaded","handleInitData","handleCustomGroupList","markNewValues","rows","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_9","_hoisted_10","_hoisted_11","_resolveDirective","_component_a_checkbox","_hoisted_4","_createTextVNode","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_component_a_collapse","_component_a_collapse_panel","_hoisted_8","_component_a_input","_withModifiers","_directive_focus","_component_edit_outlined","_component_a_popover","_component_plus_outlined","_component_a_tag","_hoisted_12","_component_a_dropdown","_component_a_menu","_component_a_sub_menu","moveGroup","_component_a_menu_item","_component_a_checkable_tag","_hoisted_13","_component_close_outlined","nanoid","size","id","bytes","byte","t","module","this","r","s","u","o","dayjs","quarterOfYear","_sfc_main$C","ADatePicker","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","_vShow","_component_a_date_picker","_component_appstore_add_outlined","_component_a_radio_group","_component_a_radio","_component_a_input_number","_hoisted_14","_hoisted_15","_sfc_main$B","Condition","_component_condition_list","_component_condition","_sfc_main$A","emit","truncationList","val","_sfc_main$z","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$y","showLabel","_sfc_main$x","oldData","sortCpnts","idFilterOption","inputValue","_sfc_main$w","dimensionList","columns","dimByCount","getParentKey","tree","parentKey","node","_sfc_main$v","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_18","_sfc_main$u","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","_withDirectives","_component_formula_calculation","_component_question_circle_outlined","_sfc_main$t","typeOption","dataTypeOption","rangeTypeOptions","variableData","syncing","isCustom","curComponent","isShowFormat","isDateRangeComponent","isShowDateOperate","formatOptions","onChangeDataType","onChangeVariableType","isGlobalVariable","normalizeVariableList","createIndicatorVariableList","dataSetParams","indicator","createGlobalVariableList","savedVariableList","types","allParamNames","allParamMap","paramNames","param","commonNames","names","savedGlobalList","saved","customGlobalList","_sfc_main$s","VariableItem","updateConfig","allList","mergedList","scopeKeyMap","oldItem","normalizedList","handleVariableList","usedNames","newItem","specialIndicators","variableValueMap","variableNames","mergeList","filterList","ignoreField","fl","_component_variable_item","_sfc_main$r","VariableGroup","ensureInitialVariables","randomKey","currentList","newVariables","_component_variable_group","_sfc_main$q","CalculationModal","FilterModal","CustomGroupModal","VariableModal","CustomSortModal","ACard","AMenuDivider","ConfigName","SortByCpnt","DimByCount","indSortList","idxList","dimList","indexSetMap","currentCardItem","compositeIndicator","isAllowAdd","dataSelectIndicators","handleListItemData","listData","reNameSame","varConfig","variates","newVariableList","handleCardItemData","cardData","cardItem","originalList","addItem","sameNums","checkItem","onCheckboxChange","onDropEnd","onDragItemEnd","onDragItemAdd","listItemData","cardItemData","onDragItemSort","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","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","hasIndicatorVariables","filterModalRef","configNameRef","sortByCpntRef","dimByCountRef","showFilterModal","showConfigNameModal","showSortByCpntModal","showDimByCountModal","variableModalRef","showVariableModal","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","_component_a_card","_normalizeClass","_hoisted_17","_component_info_circle_outlined","_component_a_menu_divider","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","_component_variable_modal","cardTypeMap","_sfc_main$p","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$o","_sfc_main$n","getPrefixOrSuffixValue","prefixValue","suffixValue","_sfc_main","_sfc_main$l","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","g","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","Pe","je","Ne","Ee","Fe","Le","ze","Me","_sfc_main$j","PickColors","colorValue","_component_pick_colors","_sfc_main$i","onColorsChange","_sfc_main$h","InputNumber","firstItem","_component_draggable","_resolveDynamicComponent","_component_minus_circle_outlined","_sfc_main$g","_sfc_main$f","ASlider","_component_a_slider","_sfc_main$e","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$d","workerId","JsonWorker","TsWorker","EditorWorker","dom","editor","themeMap","monacoEditor","code","onUnmounted","_sfc_main$c","clickConditionMenu","_sfc_main$b","_sfc_main$a","params","getSameLevelList","handleOk","onUploadChange","imgSrc","imgBaseUrl","iconOptions","_sfc_main$9","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$8","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$7","activePanel","columnsConfigMap","newColumnsConfig","_sfc_main$6","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$5","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","isExtProperty","controlParams","ruleOption","isShowModelProp","modelPropKey","isShowProp","_sfc_main$4","ControlCard","_component_control_card","_component_control_list","_sfc_main$3","ControlList","isVisible","selectedIds","updateComponentsConfig","UPDATE_COMPONENTS_CONFIG","bindComponentId","config","onAddControl","sourceList","indicatorComponents","handleConfirmSync","error","_sfc_main$2","groupList","allDimensions","onDeleteItem","getDimensionData","formatParams","formatIndicatorParams","classifications","dimensionOptRes","selectedDims","_sfc_main$1","tableData","handleIndicatorData","useIndicatorData","handleFormat","DataGroup","StyleGroup","ChartGraph","ControlGroup","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","commonOpts","selectFieldOptions","optionsMap","optionsLen","optionsMapArr","_id","syncVariableConditions","variableConditions","refreshAction","loadPivotTablePlugin","tableModule","defineAsyncComponent","getSaveData","onPivotTableChange","dimensions","_component_reload_outlined","_component_data_group","_component_style_group","_component_control_group","_component_table_graph","_component_chart_graph"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,35,36,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131]}