@ecan-bi/indicator-library 1.1.38 → 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.
- package/dist/AntdIcon-7ebd41b4.mjs +1 -1
- package/dist/DrillModal-3f5a0070-e4053b53.mjs +1 -1
- package/dist/assets/editor.worker-02df2e61.js +1 -1
- package/dist/assets/json.worker-867823a6.js +1 -1
- package/dist/assets/ts.worker-7254b425.js +1 -1
- package/dist/{index-060ef291.mjs → index-8f552d0b.mjs} +3 -3
- package/dist/{index-060ef291.mjs.map → index-8f552d0b.mjs.map} +1 -1
- package/dist/{index-cf72af88.mjs → index-c34874c5.mjs} +4 -4
- package/dist/{index-cf72af88.mjs.map → index-c34874c5.mjs.map} +1 -1
- package/dist/{index-fadf33e3.mjs → index-de6d53df.mjs} +2833 -2797
- package/dist/index-de6d53df.mjs.map +1 -0
- package/dist/index.es-7e69466e.mjs +1 -1
- package/dist/index.es.js +2 -2
- package/dist/index.umd.js +38 -38
- package/dist/index.umd.js.map +1 -1
- package/dist/style.css +2 -2
- package/package.json +1 -1
- package/types/indicator/indicator-library/data-config/variable-group/VariableGroup.vue.d.ts +1 -0
- package/types/indicator/indicator-library/data-config/variable-group/VariableItem.vue.d.ts +2 -1
- package/dist/index-fadf33e3.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-fadf33e3.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\"\r\n v-model:value=\"variableData.variableName\"\r\n placeholder=\"请输入变量名\"\r\n :disabled=\"!!variableData.randomKey || nameDisabled\"\r\n />\r\n <!-- 变量类型 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.variableType\"\r\n :options=\"typeOption\"\r\n disabled\r\n style=\"max-width: 120px;\"\r\n placeholder=\"请选择变量类型\"\r\n @change=\"onChangeVariableType\"\r\n />\r\n <!-- 自定义值或者选择组件 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dataType\"\r\n :options=\"dataTypeOption\"\r\n style=\"max-width: 120px;\"\r\n @change=\"onChangeDataType\"\r\n />\r\n <!-- 变量值 -->\r\n <template v-if=\"variableData.dataType === 'component'\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.id\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n style=\"max-width: 180px;\"\r\n placeholder=\"请选择组件\"\r\n @change=\"onChangeComponent\"\r\n />\r\n </template>\r\n <template v-else>\r\n <a-input\r\n class=\"field-name\"\r\n style=\"max-width: 180px;\"\r\n v-model:value=\"variableData.variableValue\"\r\n placeholder=\"请输入变量值\"\r\n />\r\n </template>\r\n <!-- 日期范围的取值类型:间隔值、开始时间、结束时间 -->\r\n <template v-if=\"isDateRangeComponent\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dateTypeValue\"\r\n :options=\"rangeTypeOptions\"\r\n placeholder=\"请选择取值类型\"\r\n />\r\n </template>\r\n <!-- 值格式,YYYY-MM-DD等 -->\r\n <a-select\r\n 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\">\r\nimport { defineComponent, computed, inject, unref, ref, watch } from 'vue'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\r\n// import { cloneDeep } from 'lodash-es'\r\nimport {\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Input as AInput,\r\n Popover as APopover,\r\n Tabs as ATabs,\r\n TabPane as ATabPane,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport 'ant-design-vue/es/popover/style'\r\nexport default defineComponent({\r\n name: 'VariableCard',\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n require: true\r\n },\r\n 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))\r\n\r\n // watch(variableData, (data: { [key: string]: any }) => {\r\n // emit('update', {\r\n // ...data,\r\n // label: props.label\r\n // }, props.index)\r\n // }, {\r\n // deep: true\r\n // })\r\n\r\n const variableData = computed({\r\n get () {\r\n return props.item\r\n },\r\n set (data: { [key: string]: any }) {\r\n emit('update', data, props.index)\r\n }\r\n })\r\n\r\n const curComponent = computed(() => {\r\n let result = null\r\n if (unref(variableData)?.dataType === 'component') {\r\n const target = unref(usedComponentList).find(v => v.id === unref(variableData)?.id)\r\n if (target) {\r\n result = target\r\n }\r\n }\r\n return result\r\n })\r\n const isShowFormat = computed(() => {\r\n let result = false\r\n // if (unref(curComponent)) {\r\n // result = lowerCaseIncludes(unref(curComponent).type, ['range', 'date'])\r\n // }\r\n if (unref(variableData)?.variableType === 'DATE') {\r\n result = true\r\n }\r\n return result\r\n })\r\n const isDateRangeComponent = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n result = lowerCaseIncludes(unref(curComponent).type, 'range')\r\n }\r\n return result\r\n })\r\n\r\n const isShowDateOperate = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n if (lowerCaseIncludes(unref(curComponent).type, 'range')) {\r\n if (['startTime', 'endTime'].includes(unref(variableData).dateTypeValue)) {\r\n result = true\r\n }\r\n } else if (lowerCaseIncludes(unref(curComponent).type, 'date')) {\r\n result = true\r\n }\r\n }\r\n return result\r\n })\r\n\r\n const onChangeComponent = (value: string, option: { [key:string]:any }) => {\r\n if (value) {\r\n unref(variableData).keyName = option.keyName\r\n }\r\n }\r\n\r\n const onDelete = () => {\r\n emit('delete', props.index)\r\n }\r\n\r\n const formatOptions = computed(() => {\r\n if (unref(isShowFormat)) {\r\n return [\r\n { label: '年', value: 'YYYY' },\r\n { label: '月', value: '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 {\r\n variableData,\r\n typeOption,\r\n dataTypeOption,\r\n usedComponentList,\r\n formatOptions,\r\n rangeTypeOptions,\r\n isShowFormat,\r\n isDateRangeComponent,\r\n isShowDateOperate,\r\n popoverVisible,\r\n idFilterOption,\r\n onChangeComponent,\r\n onDelete,\r\n onChangeDataType,\r\n onChangeVariableType,\r\n changeTab\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-item {\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n border: 1px solid #e8e8e8;\r\n .field-name {\r\n margin-right: 20px;\r\n flex: 1;\r\n }\r\n\r\n .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\"\r\n v-model:value=\"variableData.variableName\"\r\n placeholder=\"请输入变量名\"\r\n :disabled=\"!!variableData.randomKey || nameDisabled\"\r\n />\r\n <!-- 变量类型 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.variableType\"\r\n :options=\"typeOption\"\r\n disabled\r\n style=\"max-width: 120px;\"\r\n placeholder=\"请选择变量类型\"\r\n @change=\"onChangeVariableType\"\r\n />\r\n <!-- 自定义值或者选择组件 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dataType\"\r\n :options=\"dataTypeOption\"\r\n style=\"max-width: 120px;\"\r\n @change=\"onChangeDataType\"\r\n />\r\n <!-- 变量值 -->\r\n <template v-if=\"variableData.dataType === 'component'\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.id\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n style=\"max-width: 180px;\"\r\n placeholder=\"请选择组件\"\r\n @change=\"onChangeComponent\"\r\n />\r\n </template>\r\n <template v-else>\r\n <a-input\r\n class=\"field-name\"\r\n style=\"max-width: 180px;\"\r\n v-model:value=\"variableData.variableValue\"\r\n placeholder=\"请输入变量值\"\r\n />\r\n </template>\r\n <!-- 日期范围的取值类型:间隔值、开始时间、结束时间 -->\r\n <template v-if=\"isDateRangeComponent\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dateTypeValue\"\r\n :options=\"rangeTypeOptions\"\r\n placeholder=\"请选择取值类型\"\r\n />\r\n </template>\r\n <!-- 值格式,YYYY-MM-DD等 -->\r\n <a-select\r\n 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\">\r\nimport { defineComponent, computed, inject, unref, ref, watch } from 'vue'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\r\n// import { cloneDeep } from 'lodash-es'\r\nimport {\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Input as AInput,\r\n Popover as APopover,\r\n Tabs as ATabs,\r\n TabPane as ATabPane,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport 'ant-design-vue/es/popover/style'\r\nexport default defineComponent({\r\n name: 'VariableCard',\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n require: true\r\n },\r\n 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))\r\n\r\n // watch(variableData, (data: { [key: string]: any }) => {\r\n // emit('update', {\r\n // ...data,\r\n // label: props.label\r\n // }, props.index)\r\n // }, {\r\n // deep: true\r\n // })\r\n\r\n const variableData = computed({\r\n get () {\r\n return props.item\r\n },\r\n set (data: { [key: string]: any }) {\r\n emit('update', data, props.index)\r\n }\r\n })\r\n\r\n const curComponent = computed(() => {\r\n let result = null\r\n if (unref(variableData)?.dataType === 'component') {\r\n const target = unref(usedComponentList).find(v => v.id === unref(variableData)?.id)\r\n if (target) {\r\n result = target\r\n }\r\n }\r\n return result\r\n })\r\n const isShowFormat = computed(() => {\r\n let result = false\r\n // if (unref(curComponent)) {\r\n // result = lowerCaseIncludes(unref(curComponent).type, ['range', 'date'])\r\n // }\r\n if (unref(variableData)?.variableType === 'DATE') {\r\n result = true\r\n }\r\n return result\r\n })\r\n const isDateRangeComponent = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n result = lowerCaseIncludes(unref(curComponent).type, 'range')\r\n }\r\n return result\r\n })\r\n\r\n const isShowDateOperate = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n if (lowerCaseIncludes(unref(curComponent).type, 'range')) {\r\n if (['startTime', 'endTime'].includes(unref(variableData).dateTypeValue)) {\r\n result = true\r\n }\r\n } else if (lowerCaseIncludes(unref(curComponent).type, 'date')) {\r\n result = true\r\n }\r\n }\r\n return result\r\n })\r\n\r\n const onChangeComponent = (value: string, option: { [key:string]:any }) => {\r\n if (value) {\r\n unref(variableData).keyName = option.keyName\r\n }\r\n }\r\n\r\n const onDelete = () => {\r\n emit('delete', props.index)\r\n }\r\n\r\n const formatOptions = computed(() => {\r\n if (unref(isShowFormat)) {\r\n return [\r\n { label: '年', value: 'YYYY' },\r\n { label: '月', value: '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 {\r\n variableData,\r\n typeOption,\r\n dataTypeOption,\r\n usedComponentList,\r\n formatOptions,\r\n rangeTypeOptions,\r\n isShowFormat,\r\n isDateRangeComponent,\r\n isShowDateOperate,\r\n popoverVisible,\r\n idFilterOption,\r\n onChangeComponent,\r\n onDelete,\r\n onChangeDataType,\r\n onChangeVariableType,\r\n changeTab\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-item {\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n border: 1px solid #e8e8e8;\r\n .field-name {\r\n margin-right: 20px;\r\n flex: 1;\r\n }\r\n\r\n .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 []\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 return 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","<template>\n <div class=\"variable-group\">\n <div class=\"variable-group-header\">\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>\r\n </div>\r\n</template>\r\n\r\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 newItem: { [key: string]: any } = {\n keyValue: nanoid(),\n variableType: 'TEXT',\n dataType: '',\n id: null,\n dateTypeValue: null,\n format: null,\n globalCondition: props.mode !== 'indicator'\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\r\n const onSyncVariable = () => {\r\n const {\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n indicators = [],\r\n specialIndicators = []\r\n } = unref(graphicConfig) || {}\r\n const list = cloneDeep(unref(variableList))\r\n const variableValueMap = new Map()\r\n const variableNames = []\r\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\r\n for (const item of mergeList) {\r\n if (item.dataSetParams?.length) {\r\n for (const param of item.dataSetParams) {\r\n if (!variableValueMap.has(param.name)) {\r\n variableNames.push(param.name)\r\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\r\n }\r\n }\r\n }\r\n }\r\n for (const item of variableNames) {\r\n const data = variableValueMap.get(item)\r\n if (data) {\r\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\r\n const ignoreField = ['label', 'randomKey', 'keyValue']\r\n for (const fl of filterList) {\r\n for (const key in data) {\r\n if (!ignoreField.includes(key)) {\r\n fl[key] = data[key]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n updateConfig(list)\r\n }\r\n\r\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list[index] = data\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n return {\r\n variableList,\r\n onAddVariable,\r\n onSyncVariable,\r\n onUpdateItem,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-group-header {\r\n margin: 20px 0;\r\n}\r\n</style>\r\n","<template>\n <div class=\"variable-group\">\n <div class=\"variable-group-header\">\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>\r\n </div>\r\n</template>\r\n\r\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 newItem: { [key: string]: any } = {\n keyValue: nanoid(),\n variableType: 'TEXT',\n dataType: '',\n id: null,\n dateTypeValue: null,\n format: null,\n globalCondition: props.mode !== 'indicator'\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\r\n const onSyncVariable = () => {\r\n const {\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n indicators = [],\r\n specialIndicators = []\r\n } = unref(graphicConfig) || {}\r\n const list = cloneDeep(unref(variableList))\r\n const variableValueMap = new Map()\r\n const variableNames = []\r\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\r\n for (const item of mergeList) {\r\n if (item.dataSetParams?.length) {\r\n for (const param of item.dataSetParams) {\r\n if (!variableValueMap.has(param.name)) {\r\n variableNames.push(param.name)\r\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\r\n }\r\n }\r\n }\r\n }\r\n for (const item of variableNames) {\r\n const data = variableValueMap.get(item)\r\n if (data) {\r\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\r\n const ignoreField = ['label', 'randomKey', 'keyValue']\r\n for (const fl of filterList) {\r\n for (const key in data) {\r\n if (!ignoreField.includes(key)) {\r\n fl[key] = data[key]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n updateConfig(list)\r\n }\r\n\r\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list[index] = data\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n return {\r\n variableList,\r\n onAddVariable,\r\n onSyncVariable,\r\n onUpdateItem,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-group-header {\r\n margin: 20px 0;\r\n}\r\n</style>\r\n","<template>\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","curComponent","isShowFormat","isDateRangeComponent","isShowDateOperate","formatOptions","onChangeDataType","onChangeVariableType","isGlobalVariable","normalizeVariableList","createIndicatorVariableList","dataSetParams","indicator","createGlobalVariableList","savedVariableList","types","allParamNames","allParamMap","paramNames","param","commonNames","names","savedGlobalList","saved","_sfc_main$s","VariableItem","updateConfig","allList","mergedList","scopeKeyMap","oldItem","normalizedList","handleVariableList","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","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","w","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]}
|