├── .eslintrc.cjs ├── .gitignore ├── .images ├── b1.png ├── b2.png ├── b3.png ├── b4.png ├── b5.png ├── b6.png ├── logo.png ├── p1.png ├── p2.png ├── p3.png └── p4.png ├── .prettierrc.json ├── .vscode └── extensions.json ├── FEATURE.md ├── LICENSE ├── README.en.md ├── README.md ├── build └── build.js ├── env.d.ts ├── index.html ├── lib ├── index.umd.js └── style.css ├── package-lock.json ├── package.json ├── preview.html ├── public └── favicon.ico ├── src ├── App.vue ├── api │ ├── api.ts │ ├── fetch-api.ts │ ├── file.ts │ └── request.ts ├── assets │ ├── color │ │ ├── 冷色.png │ │ ├── 商务.png │ │ ├── 复古.png │ │ ├── 怀旧.png │ │ ├── 新特性.png │ │ ├── 明亮.png │ │ ├── 暖色.png │ │ ├── 柔和.png │ │ ├── 淡雅.png │ │ ├── 清新.png │ │ ├── 渐变.png │ │ ├── 炫彩.png │ │ ├── 科技.png │ │ ├── 简洁.png │ │ ├── 经典.png │ │ ├── 自定义.png │ │ ├── 艳丽.png │ │ └── 雅致.png │ ├── icon │ │ ├── if.svg │ │ └── start.svg │ ├── images │ │ ├── designer │ │ │ └── layout-config │ │ │ │ ├── 12-12.png │ │ │ │ ├── 18-6.png │ │ │ │ ├── 24.png │ │ │ │ ├── 4-4-4-4-4-4.png │ │ │ │ ├── 6-12-6.png │ │ │ │ ├── 6-18.png │ │ │ │ ├── 6-6-6-6.png │ │ │ │ └── 8-8-8.png │ │ ├── pic.png │ │ └── placeholder.png │ └── logo.png ├── components │ ├── common-attribute-config │ │ ├── color-config.vue │ │ ├── column-config.vue │ │ ├── divider-style.vue │ │ ├── grid-offset-charts.vue │ │ ├── icon-select.vue │ │ ├── image-select.vue │ │ ├── input-icon.vue │ │ ├── label-display.vue │ │ ├── radio-button.vue │ │ ├── regression-charts.vue │ │ ├── select-color-charts.vue │ │ ├── switch-value-config.vue │ │ ├── textarea-input.vue │ │ ├── value-input.vue │ │ ├── value-select.vue │ │ ├── value-validate.vue │ │ ├── xaxis-config.vue │ │ └── yaxis-config.vue │ ├── common-data-config │ │ ├── cascade-option-config.vue │ │ ├── chart-config.vue │ │ ├── data-bind.vue │ │ ├── map-config.vue │ │ ├── multi-columns-config.vue │ │ └── options-config.vue │ ├── data-value-select │ │ └── index.vue │ ├── design-pc │ │ ├── configs │ │ │ ├── charts │ │ │ │ ├── bar-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── custom-table │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ ├── colunm-select.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── funnel-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── gantt-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── histogram-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── line-area-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── line-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── list │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── pie-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── pivot-table │ │ │ │ │ ├── components │ │ │ │ │ │ └── PivotTable.vue │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ ├── colunm-select.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── progress │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── radar-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── ring-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── rose-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── scatter-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── table │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ ├── colunm-children-select.vue │ │ │ │ │ │ ├── colunm-select.vue │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── table-column-children-config-basic.vue │ │ │ │ │ │ ├── table-column-children-config.vue │ │ │ │ │ │ ├── table-column-config-basic.vue │ │ │ │ │ │ ├── table-column-config-more.vue │ │ │ │ │ │ ├── table-column-config.vue │ │ │ │ │ │ ├── table-column-sub-children-config-basic.vue │ │ │ │ │ │ ├── table-column-sub-children-config.vue │ │ │ │ │ │ ├── table-operate-config-advanced.vue │ │ │ │ │ │ ├── table-operate-config-basic.vue │ │ │ │ │ │ └── table-operate-config.vue │ │ │ │ │ ├── custom-cell │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── custom-columns │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── default-data.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ └── waterfall-chart │ │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ ├── index.ts │ │ │ ├── inputs │ │ │ │ ├── calendar │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── cascade │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── checkbox │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── date-picker │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── date-range │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── file-upload │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── file │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── image-upload │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── input │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── multi-input │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── radio │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── rich-text │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── select │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── slider │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── stepper │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── switch │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── table-select │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── time-picker │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ ├── tree-select │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ └── tree │ │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ ├── layouts │ │ │ │ ├── layout │ │ │ │ │ ├── config-attribute │ │ │ │ │ │ ├── grid-layout.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ │ └── tabs │ │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options-config.ts │ │ │ │ │ └── template.vue │ │ │ └── others │ │ │ │ ├── button │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── collapse │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── data-model │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── divider │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── dropdown-menu │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── dynamic-tabs │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── extend-field │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── icon │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── iframe │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── image │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── page-header │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── qrcode │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── render │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── steps │ │ │ │ ├── config-attribute │ │ │ │ │ ├── index.vue │ │ │ │ │ └── steps-config.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── sub-table │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ ├── colunm-select.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── table-column-config-basic.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ ├── text │ │ │ │ ├── config-attribute │ │ │ │ │ └── index.vue │ │ │ │ ├── config-data │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ │ │ └── workflow │ │ │ │ ├── config-data │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── options-config.ts │ │ │ │ └── template.vue │ │ ├── dynamic-component.vue │ │ └── index.vue │ ├── param-value-select │ │ └── index.vue │ └── tools │ │ ├── code-editor │ │ └── index.vue │ │ └── color-picker │ │ └── index.vue ├── hooks │ ├── design-component │ │ └── use-index.ts │ └── design-page-operate │ │ ├── use-clear.ts │ │ ├── use-delete.ts │ │ ├── use-reload.ts │ │ └── use-save.ts ├── index.ts ├── layouts │ ├── designer-aside-left │ │ ├── basic-component.vue │ │ ├── index.vue │ │ └── menu.vue │ ├── designer-aside-right │ │ ├── config-basics │ │ │ ├── config-bg-style.vue │ │ │ ├── config-common-style.vue │ │ │ ├── config-component.vue │ │ │ ├── config-event.vue │ │ │ ├── config-general.vue │ │ │ ├── config-page-param.vue │ │ │ ├── config-page-style.vue │ │ │ ├── config-text-style.vue │ │ │ └── index.vue │ │ ├── config-datas │ │ │ ├── config-component.vue │ │ │ ├── config-interface.vue │ │ │ ├── index.vue │ │ │ └── modal │ │ │ │ └── add-mock.vue │ │ ├── config-events │ │ │ ├── events-left │ │ │ │ ├── config-event │ │ │ │ │ ├── event-confirm.vue │ │ │ │ │ ├── event-disable.vue │ │ │ │ │ ├── event-display.vue │ │ │ │ │ ├── event-hlink.vue │ │ │ │ │ ├── event-import.vue │ │ │ │ │ ├── event-interface.vue │ │ │ │ │ ├── event-javascript.vue │ │ │ │ │ ├── event-link.vue │ │ │ │ │ ├── event-logic.vue │ │ │ │ │ ├── event-message.vue │ │ │ │ │ ├── event-print.vue │ │ │ │ │ ├── event-refresh.vue │ │ │ │ │ ├── event-set-value.vue │ │ │ │ │ ├── event-table-export.vue │ │ │ │ │ ├── event-timeout.vue │ │ │ │ │ ├── event-value-select │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── interface-select │ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── menu.ts │ │ │ │ └── menu.vue │ │ │ ├── events-right │ │ │ │ ├── eventFlow.js │ │ │ │ └── index.vue │ │ │ ├── hooks │ │ │ │ └── use-drag-node.ts │ │ │ └── index.vue │ │ ├── config-status │ │ │ ├── hooks │ │ │ │ └── use-drag-node.ts │ │ │ ├── index.vue │ │ │ ├── status-left │ │ │ │ ├── config-status │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── status-if.vue │ │ │ │ │ ├── status-operate-color.vue │ │ │ │ │ ├── status-operate-operate.vue │ │ │ │ │ ├── status-operate-set.vue │ │ │ │ │ ├── status-tag-color.vue │ │ │ │ │ └── status-value-select │ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── menu.ts │ │ │ │ └── menu.vue │ │ │ └── status-right │ │ │ │ ├── index.vue │ │ │ │ └── statusFlow.js │ │ ├── index.vue │ │ └── page-tree.vue │ ├── designer-content │ │ └── index.vue │ ├── designer-header │ │ ├── html.js │ │ └── index.vue │ └── modal │ │ ├── data-model-dialog.vue │ │ ├── icon-select-dialog.vue │ │ └── image-upload-dialog.vue ├── main.ts ├── router │ └── index.ts ├── shims-vue.d.ts ├── stores │ └── index.ts ├── styles │ ├── antd-ui-cover.less │ ├── defaultTheme.json │ ├── global.scss │ ├── index.less │ └── reset.less ├── utils │ ├── charts-utils │ │ ├── axis-formatter.ts │ │ ├── charts-legend.ts │ │ └── charts-theme.ts │ ├── clean-config-json.ts │ ├── common-style.ts │ ├── component-copy-config.ts │ ├── component-deep-clone-config.ts │ ├── component-value.ts │ ├── constants.ts │ ├── deep-clone.ts │ ├── load-css.ts │ ├── mitt.ts │ ├── multi-output-component.ts │ ├── param-value.ts │ ├── pub-use.ts │ ├── storage-util.ts │ ├── string-utils.ts │ ├── text-formatter.ts │ ├── transform-data-list.ts │ ├── type.ts │ └── uuid.ts └── views │ ├── Designer.vue │ └── sdkEntry │ └── SdkPage.vue ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | require('@rushstack/eslint-patch/modern-module-resolution') 3 | 4 | module.exports = { 5 | root: true, 6 | 'extends': [ 7 | 'plugin:vue/vue3-essential', 8 | 'eslint:recommended', 9 | '@vue/eslint-config-typescript', 10 | '@vue/eslint-config-prettier/skip-formatting' 11 | ], 12 | parserOptions: { 13 | ecmaVersion: 'latest' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /.images/b1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/b1.png -------------------------------------------------------------------------------- /.images/b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/b2.png -------------------------------------------------------------------------------- /.images/b3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/b3.png -------------------------------------------------------------------------------- /.images/b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/b4.png -------------------------------------------------------------------------------- /.images/b5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/b5.png -------------------------------------------------------------------------------- /.images/b6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/b6.png -------------------------------------------------------------------------------- /.images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/logo.png -------------------------------------------------------------------------------- /.images/p1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/p1.png -------------------------------------------------------------------------------- /.images/p2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/p2.png -------------------------------------------------------------------------------- /.images/p3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/p3.png -------------------------------------------------------------------------------- /.images/p4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/.images/p4.png -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/prettierrc", 3 | "semi": false, 4 | "tabWidth": 2, 5 | "singleQuote": true, 6 | "printWidth": 200, 7 | "trailingComma": "none" 8 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /FEATURE.md: -------------------------------------------------------------------------------- 1 | # Feature 2.0 2 | 3 | 4 | # 功能实现 5 | 6 | - [x] 2、**数据管理优化做出以下改动**(更高的定制、拓展)*已完成* 7 | 1、借鉴Vue hooks的思想,通过 import useData 的写法使用数据引擎(作为Vue插件) 8 | 2、每个组件都有独立的数据配置 9 | 3、接口具有生命周期,具有知道接口请求结束的能力 10 | 11 | # 与平台1.0对比 12 | 13 | - [x] 1、**架构重新整理,代码结构清晰明了,添加了更多注释**,让新人可以快速上手 14 | - [x] 2、**更好的状态管理**,1.0版本对数据状态没有做好管理,导致代码混乱,2.0版本升级代码体验! 15 | 16 | # 进行中 17 | 18 | 1、布局组件优化 *进行中* 19 | 2、数据管理优化 *进行中* 20 | 3、事件功能优化 *进行中* 21 | 22 | # 规划中 23 | 24 | 1、渲染器预览功能(实现方式选择)[open/api]*已完成* 1.0 > 2.0 25 | 2、Table组件部分功能迁移2.0 *进行中* 26 | 3、对接1.0接口(数据模块接口对接)[data/api]*已完成* 27 | 28 | 5、事件接口调用使用数据引擎(待研究) 29 | 6、事件实现技术选型(待研究) 30 | 7、默认值 < 组件设置 < 当前操作值 31 | 8、组件拖拽优化,在设计器中拖拽时原位置保留占位 *未开始* 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 NebulaTech 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # Nebulalowcode 2 | 3 | #### Description 4 | {**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} 5 | 6 | #### Software Architecture 7 | Software architecture description 8 | 9 | #### Installation 10 | 11 | 1. xxxx 12 | 2. xxxx 13 | 3. xxxx 14 | 15 | #### Instructions 16 | 17 | 1. xxxx 18 | 2. xxxx 19 | 3. xxxx 20 | 21 | #### Contribution 22 | 23 | 1. Fork the repository 24 | 2. Create Feat_xxx branch 25 | 3. Commit your code 26 | 4. Create Pull Request 27 | 28 | 29 | #### Gitee Feature 30 | 31 | 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md 32 | 2. Gitee blog [blog.gitee.com](https://blog.gitee.com) 33 | 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) 34 | 4. The most valuable open source project [GVP](https://gitee.com/gvp) 35 | 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) 36 | 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) 37 | -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 星云座 11 | 12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /preview.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 预览 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 38 | 39 | 46 | 47 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/public/favicon.ico -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | -------------------------------------------------------------------------------- /src/api/file.ts: -------------------------------------------------------------------------------- 1 | import request from '@/api/request' 2 | 3 | /** 4 | * 常用图片列表V2 5 | */ 6 | export function imageList(params: any) { 7 | return request({ 8 | url: '/file/v2/list', 9 | method: 'get', 10 | params 11 | }) 12 | } 13 | /** 14 | * 删除图片 15 | */ 16 | export function deleteUploadImage(params: any) { 17 | return request({ 18 | url: '/file/v1/delete', 19 | method: 'DELETE', 20 | params 21 | }) 22 | } 23 | -------------------------------------------------------------------------------- /src/assets/color/冷色.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/冷色.png -------------------------------------------------------------------------------- /src/assets/color/商务.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/商务.png -------------------------------------------------------------------------------- /src/assets/color/复古.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/复古.png -------------------------------------------------------------------------------- /src/assets/color/怀旧.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/怀旧.png -------------------------------------------------------------------------------- /src/assets/color/新特性.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/新特性.png -------------------------------------------------------------------------------- /src/assets/color/明亮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/明亮.png -------------------------------------------------------------------------------- /src/assets/color/暖色.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/暖色.png -------------------------------------------------------------------------------- /src/assets/color/柔和.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/柔和.png -------------------------------------------------------------------------------- /src/assets/color/淡雅.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/淡雅.png -------------------------------------------------------------------------------- /src/assets/color/清新.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/清新.png -------------------------------------------------------------------------------- /src/assets/color/渐变.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/渐变.png -------------------------------------------------------------------------------- /src/assets/color/炫彩.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/炫彩.png -------------------------------------------------------------------------------- /src/assets/color/科技.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/科技.png -------------------------------------------------------------------------------- /src/assets/color/简洁.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/简洁.png -------------------------------------------------------------------------------- /src/assets/color/经典.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/经典.png -------------------------------------------------------------------------------- /src/assets/color/自定义.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/自定义.png -------------------------------------------------------------------------------- /src/assets/color/艳丽.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/艳丽.png -------------------------------------------------------------------------------- /src/assets/color/雅致.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/color/雅致.png -------------------------------------------------------------------------------- /src/assets/icon/if.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 条件 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/icon/start.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | ICON 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/12-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/12-12.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/18-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/18-6.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/24.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/4-4-4-4-4-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/4-4-4-4-4-4.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/6-12-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/6-12-6.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/6-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/6-18.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/6-6-6-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/6-6-6-6.png -------------------------------------------------------------------------------- /src/assets/images/designer/layout-config/8-8-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/designer/layout-config/8-8-8.png -------------------------------------------------------------------------------- /src/assets/images/pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/pic.png -------------------------------------------------------------------------------- /src/assets/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/images/placeholder.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/common-attribute-config/color-config.vue: -------------------------------------------------------------------------------- 1 | 21 | 54 | 64 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/column-config.vue: -------------------------------------------------------------------------------- 1 | 21 | 49 | 56 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/divider-style.vue: -------------------------------------------------------------------------------- 1 | 14 | 35 | 41 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/grid-offset-charts.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/icon-select.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 26 | 27 | 37 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/image-select.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 29 | 30 | 50 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/input-icon.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 38 | 39 | 56 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/label-display.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/radio-button.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/components/common-attribute-config/value-select.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/bar-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/bar-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-bar', 6 | name: '条形图', 7 | icon: 'icontiaoxingtu1', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/custom-table/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-custom-table', 6 | name: '自定义表格', 7 | icon: 'iconliebiao1', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | isNestedComponent: true, // 是否为容器组件 11 | isBeta:true, 12 | component: layoutTemplate, 13 | options: optionsConfig 14 | } 15 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/custom-table/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | interfaceDataConfig: { 4 | versions: '1.0.0', 5 | id: '', 6 | uuid: '', 7 | key: '', 8 | tableData: [], 9 | pagination: { 10 | pageIndex: 1, 11 | pageSize: 10 12 | } 13 | }, 14 | commonConfig: { 15 | topPaddingDistance: 0, 16 | bottomPaddingDistance: 0, 17 | leftPaddingDistance: 0, 18 | rightPaddingDistance: 0, 19 | topSpaceDistance: 0, 20 | bottomSpaceDistance: 0, 21 | leftSpaceDistance: 0, 22 | rightSpaceDistance: 0 23 | }, 24 | commonConfigAssignSign: '', 25 | columnsData: [], // 表格渲染需要的配置 26 | pagination: { 27 | current: 1, 28 | pageSize: 5, 29 | total: 0, 30 | showSizeChanger: true, 31 | pageSizeOptions: ['5', '10', '20', '50', '100'] 32 | }, // 是否进行分页 33 | addRowSwitch:false,// 添加行开关 34 | echoRowConfig:{}, 35 | } 36 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/funnel-chart/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/funnel-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/funnel-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-funnel', 6 | name: '漏斗图', 7 | icon: 'iconfunnelChart', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/gantt-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-gantt', 6 | name: '甘特图', 7 | icon: 'icontiaoxingtu1', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/histogram-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/histogram-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-histogram', 6 | name: '柱状图', 7 | icon: 'iconzhuzhuangtu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/line-area-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/line-area-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-line-area', 6 | name: '堆叠面积图', 7 | icon: 'icontubiaozhexiantu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/line-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/line-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-line', 6 | name: '折线图', 7 | icon: 'icontubiaozhexiantu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/list/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/list/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/list/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-list', 6 | name: '列表', 7 | icon: 'iconliebiao1', 8 | isRefreshComponent: true, // 是否为可刷新组件 9 | isNestedComponent: true, // 是否为容器组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/list/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | interfaceDataConfig: { 4 | versions: '1.0.0', 5 | id: '', 6 | uuid: '', 7 | key: '', 8 | tableData: [], 9 | pagination: { 10 | pageIndex: 1, 11 | pageSize: 10 12 | } 13 | }, 14 | columns: [ 15 | { 16 | value: 24, 17 | componentList: [] 18 | } 19 | ], 20 | commonConfig: { 21 | topPaddingDistance: 0, 22 | bottomPaddingDistance: 0, 23 | leftPaddingDistance: 0, 24 | rightPaddingDistance: 0, 25 | topSpaceDistance: 0, 26 | bottomSpaceDistance: 0, 27 | leftSpaceDistance: 0, 28 | rightSpaceDistance: 0 29 | }, 30 | commonConfigAssignSign: '' 31 | } 32 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/pie-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/pie-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-pie', 6 | name: '饼图', 7 | icon: 'iconbingtu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/pivot-table/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-pivot-table', 6 | name: '数据透视表', 7 | icon: 'iconbiaoge1', 8 | isRefreshComponent: true, // 是否为可刷新组件 9 | isBeta:true, 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/progress/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-progress', 6 | name: '进度条', 7 | icon: 'iconjindutiao1', 8 | isRefreshComponent: true, // 是否为可刷新组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/progress/options-config.ts: -------------------------------------------------------------------------------- 1 | import { useThemeStore } from '@/stores' 2 | const themeStore = useThemeStore() 3 | 4 | export default { 5 | percentage: 10, 6 | strokeWidth: 10, 7 | color: themeStore.themeConfig.token.colorPrimary, 8 | themeChanged: { 9 | color: false 10 | }, //是否修改过默认样式 11 | type: 'line', 12 | maxValue: 100, 13 | rateValue: 0, 14 | numberShow: false, // 进度条数值显示 15 | contentDataSource: 'radio-button-default', 16 | interfaceDataConfig: { 17 | versions: '1.0.0', 18 | id: '', 19 | uuid: '', 20 | key: '', 21 | value: undefined, 22 | maxValue: undefined, 23 | // 数据绑定 24 | maxKey: '', 25 | rateKey: '' 26 | }, 27 | // 公共属性 28 | commonConfig: { 29 | topPaddingDistance: 10, 30 | bottomPaddingDistance: 10, 31 | leftPaddingDistance: 10, 32 | rightPaddingDistance: 10 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/radar-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/radar-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-radar', 6 | name: '雷达图', 7 | icon: 'iconleidatu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/ring-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/ring-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-ring', 6 | name: '环形图', 7 | icon: 'iconhuanxingtu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/rose-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/rose-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-pie-radius', 6 | name: '玫瑰图', 7 | icon: 'iconbingtu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/scatter-chart/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/scatter-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/scatter-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-scatter', 6 | name: '散点图', 7 | icon: 'iconsandiantu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/table/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-table', 6 | name: '表格', 7 | icon: 'iconbiaoge1', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | isMultiOutputComponent: true, //是否是多输出组件 11 | component: layoutTemplate, 12 | options: optionsConfig 13 | } 14 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/table/options-config.ts: -------------------------------------------------------------------------------- 1 | import { defaultColumnsData, defaultTableData } from './default-data' 2 | 3 | export default { 4 | value: '', 5 | defaultColumnsData: defaultColumnsData, // Mock数据项 6 | defaultTableData, // Mock数据 7 | defaultPagination: { // Mock分页 8 | current: 1, 9 | pageSize: 5, 10 | total: 10, 11 | showSizeChanger: true, 12 | pageSizeOptions: ['5', '10', '20', '50', '100'] 13 | }, 14 | // columnsConfigList: [], 15 | columnsData: [], // 表格渲染需要的配置 16 | pagination: { 17 | current: 1, 18 | pageSize: 5, 19 | total: 0, 20 | showSizeChanger: true, 21 | pageSizeOptions: ['5', '10', '20', '50', '100'] 22 | }, // 是否进行分页 23 | interfaceDataConfig: { 24 | versions: '1.0.0', 25 | type: 'interface', 26 | id: '', 27 | uuid: '', 28 | key: '', 29 | tableData: [] 30 | }, 31 | rowIndexSwitch: false, // 行号开关 32 | paginationSwitch:true, // 分页开关 33 | paginationInterfaceSwitch:false, 34 | pagingTotalKey: '', 35 | pagingTotalKey_id:[],// 老版本回显用 36 | pagingTotalKeyConfig:{ 37 | type: 'interface', 38 | id: '', 39 | uuid: '', 40 | key: '', 41 | }, 42 | leftFixedIndex:0,//左侧固定列数 43 | echoRowConfig:{}, 44 | summaryRowConfig:{}, 45 | expandSwitch:false,//一维数组树形展示 46 | expandId:"", 47 | expandParentId:"", 48 | version:"2.0.0", 49 | rowSelectMethod:"multiple",// 不显示,单选多选 50 | columnSetSwitch:false, 51 | resizableSwitch:false,// 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/waterfall-chart/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/waterfall-chart/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/charts/waterfall-chart/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-chart-waterfall', 6 | name: '瀑布图', 7 | icon: 'iconchart-bar', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/calendar/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/calendar/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-pc-calendar', 6 | name: '日历', 7 | icon: 'iconriqi', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/calendar/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | event: '', 5 | fullScreen: true, 6 | interfaceDataConfig: { 7 | versions: '1.0.0', 8 | id: '', 9 | uuid: '', 10 | key: '' 11 | }, 12 | //字段配置 13 | setOptions: { 14 | date: undefined, 15 | event: undefined, 16 | status: undefined, 17 | dateFormat: undefined 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/calendar/template.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/cascade/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-cascade', 6 | name: '级联选择', 7 | icon: 'iconjilianxuanze1', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/cascade/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | // 自定义属性 3 | value: '', 4 | type: 'text', 5 | label: '标题', 6 | enLabel: '', 7 | width: 80, 8 | labelShow: true, 9 | optionsData: [], 10 | placeholder: '请选择', 11 | enPlaceHolder: '', 12 | labelAlign: 'right', 13 | size: 'default', 14 | disabled: false, 15 | clearable: false, 16 | required: false, 17 | dataFormat: '一维数组', //'一维数组', '树形数据' 18 | //层级数据 19 | setOptions: { 20 | value: '', 21 | name: '', 22 | id: '', 23 | parentId: '', 24 | childrenId: '' 25 | }, 26 | // 配置 27 | contentDataSource: 'radio-button-default', 28 | interfaceDataConfig: { 29 | versions: '1.0.0', 30 | id: '', 31 | uuid: '', 32 | key: '', 33 | tableData: [] 34 | }, 35 | interfaceDataEchoConfig: { 36 | id: '', 37 | uuid: '' 38 | }, 39 | contentDataEcho: '' 40 | } 41 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/checkbox/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/checkbox/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/checkbox/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-checkbox', 6 | name: '多选框', 7 | icon: 'iconduoxuankuang1', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig, 12 | extraData: { 13 | dicData: null as any 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/checkbox/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: [], 3 | defaultValue: [], 4 | direction: 'vertical', 5 | width: 80, 6 | label: '标题', 7 | enLabel: '', 8 | labelAlign: 'right', 9 | labelShow: true, 10 | columns: [], 11 | required: false, 12 | defaultTableData: [ 13 | { 14 | label: '选项1', 15 | value: '1' 16 | }, 17 | { 18 | label: '选项2', 19 | value: '2' 20 | }, 21 | { 22 | label: '选项3', 23 | value: '3' 24 | } 25 | ], // 默认选项 26 | disabled: false, 27 | labelKey: '', 28 | valueKey: '', 29 | contentDataSource: 'radio-button-default', 30 | contentDataEcho: '', 31 | interfaceDataConfig: { 32 | versions: '1.0.0', 33 | uuid: '', 34 | id: '', 35 | key: '' 36 | }, 37 | interfaceDataEchoConfig: { 38 | id: '', 39 | uuid: '' 40 | }, 41 | dicId: '' 42 | } 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/date-picker/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/date-picker/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-calendar', 6 | name: '日期选择器', 7 | icon: 'iconriqi', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/date-picker/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: '', 3 | defaultValueType: '', //'Today' 'Monday' 'MonthStart' 4 | size: 'middle', 5 | forbidRange: '', // before、after 6 | format: 'date', 7 | disabled: false, 8 | labelShow: true, 9 | placeholder: '请选择日期', 10 | enPlaceHolder: '', 11 | width: 80, 12 | label: '标题', 13 | enLabel: '', 14 | labelAlign: 'right', 15 | clearable: true, 16 | required: false, 17 | contentDataSource: 'radio-button-default', 18 | contentDataEcho: '', 19 | interfaceDataConfig: { 20 | versions: '1.0.0', 21 | id: '', 22 | uuid: '', 23 | key: '', 24 | value: '' 25 | }, 26 | interfaceDataEchoConfig: { 27 | id: '', 28 | uuid: '', 29 | key: '', 30 | value: '' 31 | }, 32 | commonConfigAssignIsCol: false 33 | } 34 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/date-range/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/date-range/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-calendar-range', 6 | name: '日期范围', 7 | icon: 'iconriqi', 8 | isInputComponent: true, // 是否为输入组件 9 | isMultiOutputComponent: true, //是否是多输出组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/date-range/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: null as null | string, 3 | defaultValueType: '', //'Today' 'Monday' 'MonthStart' 4 | selectRange: '', 5 | forbidRange: '', // before、after 6 | size: 'default', 7 | format: 'date', 8 | disabled: false, 9 | labelShow: true, 10 | startPlaceholder: '开始日期', 11 | startEnPlaceHolder: '', 12 | endPlaceholder: '结束日期', 13 | endEnPlaceHolder: '', 14 | width: 80, 15 | label: '标题', 16 | enLabel: '', 17 | labelAlign: 'right', 18 | clearable: true, 19 | required: false, 20 | contentDataSource: 'radio-button-default', 21 | contentDataEcho: '', 22 | interfaceDataConfig: { 23 | versions: '1.0.0', 24 | id: '', 25 | uuid: '', 26 | key: '', 27 | value: null 28 | }, 29 | interfaceDataEchoConfig: { 30 | versions: '1.0.0', 31 | id: '', 32 | uuid: '', 33 | key: '', 34 | value: null 35 | }, 36 | commonConfigAssignIsCol: false 37 | } 38 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file-upload/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file-upload/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-upload-file', 6 | name: '附件上传', 7 | icon: 'iconupload', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file-upload/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | fileList: [], 3 | value: '', 4 | type: 'default', 5 | checked: 0, 6 | size: 1, 7 | isMultiple: false, 8 | 9 | icon: { 10 | name: 'cloud-upload', 11 | fontClass: 'iconfont ant-cloud-upload', 12 | unicode: 'e827' 13 | }, 14 | iconColor: '#000000', 15 | iconSize: '32', 16 | text: '点击上传或拖拽文件到此区域', 17 | 18 | contentDataSource: 'radio-button-interface', 19 | contentDataEcho: '', 20 | interfaceDataConfig: { 21 | versions: '1.0.0', 22 | id: '', 23 | uuid: '', 24 | key: '' 25 | }, 26 | interfaceDataEchoConfig: { 27 | versions: '1.0.0', 28 | uuid: '', 29 | id: '' 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file-upload/template.vue: -------------------------------------------------------------------------------- 1 | 15 | 31 | 32 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-file', 6 | name: '附件查看', 7 | icon: 'iconwenjianjia', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: '', 3 | fileList: [] as any[], 4 | contentDataSource: 'radio-button-default', 5 | contentDataEcho: '', 6 | interfaceDataConfig: { 7 | versions: '1.0.0', 8 | id: '', 9 | key: '' 10 | }, 11 | interfaceDataEchoConfig: { 12 | versions: '1.0.0', 13 | id: '' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/file/template.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 47 | 48 | 57 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/image-upload/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/image-upload/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/image-upload/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-upload-img', 6 | name: '图片上传', 7 | icon: 'iconupload', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/image-upload/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | fileList: [], 3 | value: '', 4 | previewVisible: false, 5 | size: 1, 6 | checked: 0, 7 | icon: { 8 | fontClass: 'iconfont iconxiaolian', 9 | unicode: 'e699' 10 | }, 11 | width: '104', 12 | height: '104', 13 | isMultiple: false, 14 | previewImage: '', 15 | imageUrl: '', 16 | showUploadList: false, 17 | contentDataSource: 'radio-button-interface', 18 | contentDataEcho: '', 19 | interfaceDataConfig: { 20 | versions: '1.0.0', 21 | id: '', 22 | uuid: '', 23 | key: '' 24 | }, 25 | interfaceDataEchoConfig: { 26 | versions: '1.0.0', 27 | uuid: '', 28 | id: '' 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/image-upload/template.vue: -------------------------------------------------------------------------------- 1 | 9 | 25 | 31 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/input/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/input/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-field', 6 | name: '输入框', 7 | icon: 'iconwenbenkuang', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/input/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | maxlength: 20, 5 | placeholder: '请输入', 6 | size: 'default', 7 | disabled: false, 8 | type: 'text', 9 | label: '标题', 10 | enLabel: '', 11 | inputType: 'text', 12 | width: 80, 13 | labelShow: true, 14 | isPassword: false, 15 | enPlaceHolder: '', 16 | clearable: false, 17 | labelAlign: 'right', 18 | customtimageIcon: { 19 | fontClass: 'iconfont ant-home', 20 | unicode: 'e801' 21 | }, //前置图标 22 | suffixIcon: { 23 | fontClass: 'iconfont ant-home', 24 | unicode: 'e801' 25 | }, //后置图标 26 | interfaceDataConfig: { 27 | versions: '1.0.0' 28 | }, 29 | iconPreShow: false, 30 | iconPosShow: false, 31 | addonAfter: '', //后置标签 32 | addonBefore: '', //前置标签 33 | required: false, 34 | commonConfigAssignIsCol: false 35 | } 36 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/multi-input/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/multi-input/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/multi-input/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-multi-input', 6 | name: '多项输入', 7 | icon: 'iconwenbenkuang', 8 | isInputComponent: true, // 是否为输入组件 9 | isNestedComponent: true, // 是否为容器组件 10 | component: layoutTemplate, 11 | options: optionsConfig, 12 | extraData: { 13 | columns: [] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/multi-input/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | size: 'default', 5 | placeholder: '请输入', 6 | enPlaceHolder: '', 7 | interfaceDataConfig: { 8 | versions: '1.0.0', 9 | uuid: '', 10 | id: '', 11 | key: '' 12 | }, 13 | columns: [ 14 | { 15 | componentList: [] 16 | } 17 | ], 18 | commonConfigAssignSign: '' 19 | } 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/radio/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/radio/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-radio', 6 | name: '单选框', 7 | icon: 'icondanxuankuangxuanzhong', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig, 12 | extraData: { 13 | dicData: null as any 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/radio/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | // 自定义属性 3 | value: '', 4 | direction: 'vertical', 5 | width: 80, 6 | label: '标题', 7 | enLabel: '', 8 | labelAlign: 'right', 9 | labelShow: true, 10 | columns: [], 11 | required: false, 12 | defaultTableData: [ 13 | { 14 | label: '选项1', 15 | value: '1' 16 | }, 17 | { 18 | label: '选项2', 19 | value: '2' 20 | }, 21 | { 22 | label: '选项3', 23 | value: '3' 24 | } 25 | ], // 默认选项 26 | disabled: false, 27 | radioStyleType: 'round', 28 | size: 'default', 29 | labelKey: '', 30 | valueKey: '', 31 | contentDataSource: 'radio-button-default', 32 | contentDataEcho: '', 33 | interfaceDataConfig: { 34 | versions: '1.0.0', 35 | uuid: '', 36 | id: '', 37 | key: '' 38 | }, 39 | interfaceDataEchoConfig: { 40 | versions: '1.0.0', 41 | uuid: '', 42 | id: '' 43 | }, 44 | dicId: '' 45 | } 46 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/rich-text/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/rich-text/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/rich-text/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-editor', 6 | name: '富文本', 7 | icon: 'iconwenbenkuang', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig, 11 | extraData: { 12 | editor: null 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/rich-text/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | type: 'text', 5 | label: '标题', 6 | enLabel: '', 7 | width: 80, 8 | labelShow: true, 9 | placeholder: '请输入', 10 | enPlaceHolder: '', 11 | maxlength: 20, 12 | clearable: false, 13 | labelAlign: 'right', 14 | interfaceDataConfig: { 15 | versions: '1.0.0', 16 | id: '', 17 | uuid: '', 18 | key: '', 19 | value: '' 20 | }, 21 | iconPreShow: false, 22 | iconPosShow: false, 23 | disabled: false, 24 | required: false 25 | } 26 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/select/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-select', 6 | name: '选择器', 7 | icon: 'icondanchu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig, 12 | extraData: { 13 | dicData: null as any 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/select/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: undefined, 3 | width: 80, 4 | outputLabel: undefined, 5 | label: '标题', 6 | enLabel: '', 7 | labelAlign: 'right', 8 | labelShow: true, 9 | size: 'default', 10 | mode: 'default', 11 | placeholder: '请选择', 12 | enPlaceHolder: '', 13 | labelKey: '', 14 | valueKey: '', 15 | required: false, 16 | disabled: false, 17 | columns: [], 18 | defaultTableData: [ 19 | { 20 | label: '选项1', 21 | value: '1' 22 | }, 23 | { 24 | label: '选项2', 25 | value: '2' 26 | }, 27 | { 28 | label: '选项3', 29 | value: '3' 30 | } 31 | ], // 默认选项 32 | dropdownWidth: undefined, //下拉菜单宽度 33 | contentDataSource: 'radio-button-default', 34 | contentDataEcho: '', 35 | interfaceDataConfig: { 36 | versions: '1.0.0', 37 | id: '', 38 | uuid: '', 39 | key: '' 40 | }, 41 | interfaceDataEchoConfig: { 42 | uuid: '', 43 | key: '' 44 | }, 45 | interfaceSearchEchoConfig:{ 46 | uuid: '', 47 | key: '' 48 | }, 49 | dicId: '', 50 | commonConfigAssignIsCol: false, 51 | interfaceSearch:false 52 | } 53 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/slider/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/slider/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/slider/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-slider', 6 | name: '滑动条', 7 | icon: 'iconsliders', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/slider/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: 0, 3 | label: '标题', 4 | enLabel: '', 5 | labelShow: true, 6 | labelAlign: 'right', 7 | width: 80, 8 | max: 80, 9 | min: 0, 10 | step: 1, 11 | size: 'default', 12 | vertical: false, 13 | disabled: false, 14 | interfaceDataConfig: { 15 | versions: '1.0.0' 16 | }, 17 | // 公共属性 18 | commonConfig: { 19 | topPaddingDistance: 0, 20 | bottomPaddingDistance: 0, 21 | leftPaddingDistance: 0, 22 | rightPaddingDistance: 0 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/slider/template.vue: -------------------------------------------------------------------------------- 1 | 25 | 49 | 50 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/stepper/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/stepper/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/stepper/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-stepper', 6 | name: '步进器', 7 | icon: 'iconjia', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/stepper/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: 0, 3 | max: 80, 4 | min: 0, 5 | step: 1, 6 | integer: true, //是否是小数(废弃,作为兼容旧数据保留) 7 | precision: 1, //小数位数 8 | interfaceDataConfig: { 9 | versions: '1.0.0' 10 | }, 11 | commonConfig: { 12 | borderStyle: {}, 13 | leftSpaceDistance: 8, 14 | rightSpaceDistance: 8 15 | }, 16 | commonConfigAssignIsCol: false 17 | } 18 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/stepper/template.vue: -------------------------------------------------------------------------------- 1 | 11 | 34 | 35 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/switch/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/switch/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/switch/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-switch', 6 | name: '开关', 7 | icon: 'iconkaiguan', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/switch/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | switchValue: true, 3 | value: true, 4 | size: 'default', 5 | prefixLabel: '', 6 | prefixEnLabel: '', 7 | prefixValue: true, 8 | suffixLabel: '', 9 | suffixEnLabel: '', 10 | suffixValue: false, 11 | contentDataSource: 'radio-button-default', 12 | interfaceDataConfig: { 13 | versions: '1.0.0' 14 | }, 15 | commonConfigAssignIsCol: false 16 | } 17 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/table-select/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/table-select/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-table-select', 6 | name: '表格选择器', 7 | icon: 'icondanchu', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig, 12 | extraData: { 13 | dicData: null as any 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/table-select/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: undefined, 3 | width: 80, 4 | outputLabel: undefined, 5 | label: '标题', 6 | enLabel: '', 7 | labelAlign: 'right', 8 | labelShow: true, 9 | size: 'default', 10 | mode: 'single', 11 | placeholder: '请选择', 12 | enPlaceHolder: '', 13 | labelKey: '', 14 | valueKey: '', 15 | required: false, 16 | disabled: false, 17 | // paginationSwitch: true, // 分页开关 18 | // pagination: { 19 | // current: 1, 20 | // pageSize: 10, 21 | // total: 0 22 | // }, 23 | columns: [], 24 | defaultTableData: [ 25 | { 26 | label: '选项1', 27 | value: '1' 28 | }, 29 | { 30 | label: '选项2', 31 | value: '2' 32 | }, 33 | { 34 | label: '选项3', 35 | value: '3' 36 | } 37 | ], // 静态选项 38 | contentDataSource: 'radio-button-default', 39 | contentDataEcho: '', 40 | interfaceDataConfig: { 41 | versions: '1.0.0', 42 | id: '', 43 | uuid: '', 44 | key: '' 45 | }, 46 | interfaceDataEchoConfig: { 47 | uuid: '', 48 | key: '' 49 | }, 50 | dicId: '', 51 | commonConfigAssignIsCol: false 52 | } 53 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/time-picker/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/time-picker/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-datetime-picker', 6 | isInputComponent: true, // 是否为输入组件 7 | name: '时间选择器', 8 | icon: 'iconshijianxuanzeqi', 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/time-picker/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | width: 80, 5 | size: 'default', 6 | label: '标题', 7 | enLabel: '', 8 | placeholder: '请选择时间', 9 | enPlaceHolder: '', 10 | format: 'HH:mm:ss', 11 | required: false, 12 | disabled: false, 13 | labelAlign: 'right', 14 | labelShow: true, 15 | clearable: true, 16 | interfaceDataConfig: { 17 | versions: '1.0.0', 18 | id: '', 19 | uuid: '', 20 | key: '', 21 | value: '' 22 | }, 23 | interfaceDataEchoConfig: { 24 | versions: '1.0.0', 25 | id: '', 26 | uuid: '', 27 | key: '', 28 | value: '' 29 | }, 30 | commonConfigAssignIsCol: false 31 | } 32 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/tree-select/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-tree-select', 6 | name: '树形选择器', 7 | icon: 'icontree', 8 | isInputComponent: true, // 是否为输入组件 9 | isMultiOutputComponent: true, //是否是多输出组件 10 | isRefreshComponent: true, // 是否为可刷新组件 11 | component: layoutTemplate, 12 | options: optionsConfig 13 | } 14 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/tree-select/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: '', 3 | outputLabel: '', //组件输出的label值 4 | type: 'text', 5 | label: '标题', 6 | enLabel: '', 7 | multiple: false, 8 | expandAll: false, 9 | width: 80, 10 | labelShow: true, 11 | treeData: [], 12 | placeholder: '请选择', 13 | enPlaceHolder: '', 14 | labelAlign: 'right', 15 | size: 'default', 16 | disabled: false, 17 | clearable: false, 18 | required: false, 19 | dataFormat: '一维数组', //'一维数组', '树形数据' 20 | //层级数据 21 | setOptions: { 22 | value: '', 23 | name: '', 24 | id: '', 25 | parentId: '', 26 | childrenId: '' 27 | }, 28 | // 配置 29 | contentDataSource: 'radio-button-default', 30 | interfaceDataConfig: { 31 | versions: '1.0.0', 32 | id: '', 33 | uuid: '', 34 | key: '' 35 | }, 36 | interfaceDataEchoConfig: { 37 | id: '', 38 | uuid: '' 39 | }, 40 | contentDataEcho: '' 41 | } 42 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/tree/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/tree/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-tree', 6 | name: '树形组件', 7 | icon: 'icontree', 8 | isInputComponent: true, // 是否为输入组件 9 | isMultiOutputComponent: true, //是否是多输出组件 10 | isRefreshComponent: true, // 是否为可刷新组件 11 | component: layoutTemplate, 12 | options: optionsConfig 13 | } 14 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/inputs/tree/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: '', ////组件输出的value值 3 | outputLabel: '', //组件输出的label值 4 | pathValue: '', //包含父节点信息的value,节点信息用'-'连接 5 | pathLabel: '', //包含父节点信息的label,节点信息用'-'连接 6 | type: 'text', 7 | label: '标题', 8 | enLabel: '', 9 | containPath: false, 10 | multiple: false, 11 | width: 80, 12 | labelShow: true, 13 | treeData: [], 14 | placeholder: '请选择', 15 | enPlaceHolder: '', 16 | expandAll: false, 17 | labelAlign: 'right', 18 | size: 'default', 19 | disabled: false, 20 | clearable: false, 21 | dataFormat: '一维数组', //'一维数组', '树形数据' 22 | //层级数据 23 | setOptions: { 24 | value: '', 25 | name: '', 26 | id: '', 27 | parentId: '', 28 | childrenId: '' 29 | }, 30 | // 配置 31 | contentDataSource: 'radio-button-default', 32 | interfaceDataConfig: { 33 | versions: '1.0.0', 34 | id: '', 35 | uuid: '', 36 | key: '' 37 | }, 38 | interfaceDataEchoConfig: { 39 | id: '', 40 | uuid: '' 41 | }, 42 | contentDataEcho: '', 43 | defaultTableData: [ 44 | { 45 | title: '父节点 1', 46 | key: '0-0', 47 | children: [ 48 | { 49 | title: '父节点 1-0', 50 | key: '0-0-0', 51 | children: [ 52 | { title: '子节点1', key: '0-0-0-0' }, 53 | { title: '子节点2', key: '0-0-0-1' } 54 | ] 55 | }, 56 | { 57 | title: '父节点 1-1', 58 | key: '0-0-1', 59 | children: [{ key: '0-0-1-0', title: '子节点3' }] 60 | } 61 | ] 62 | } 63 | ], 64 | } 65 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/layouts/layout/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-layout', 6 | name: '布局容器', 7 | icon: 'iconzhage', 8 | isNestedComponent: true, // 是否为容器组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/layouts/layout/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | gutter: 0, 3 | layoutHeight: 46, 4 | layoutHeightUnit: 'px', 5 | justify: 'start', 6 | align: 'top', 7 | columnsSpanType: '8:8:8', 8 | columns: [ 9 | { 10 | value: 8, 11 | componentList: [] 12 | }, 13 | { 14 | value: 8, 15 | componentList: [] 16 | }, 17 | { 18 | value: 8, 19 | componentList: [] 20 | } 21 | ], 22 | labelAlign: 'left', 23 | labelVerticalAlign: '', 24 | layoutMargin: 0, 25 | layoutBorder: 0, 26 | backgroundColor: '#fff', // 背景色 27 | backgroundOpacity: 100, 28 | isDialogFooterContainer: false, // 是否作为弹窗页脚容器(打开后该容器作为对话框下面的Footer渲染) 29 | // 公共属性(组件边距) 30 | commonConfig: { 31 | topPaddingDistance: 0, 32 | bottomPaddingDistance: 0, 33 | leftPaddingDistance: 0, 34 | rightPaddingDistance: 0, 35 | topSpaceDistance: 0, 36 | bottomSpaceDistance: 0, 37 | leftSpaceDistance: 0, 38 | rightSpaceDistance: 0 39 | }, 40 | _data_origin_component_uuid: '' 41 | } 42 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/layouts/tabs/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/layouts/tabs/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-tabs', 6 | name: '标签页', 7 | icon: 'icontab1', 8 | isInputComponent: true, // 是否为输入组件 9 | isNestedComponent: true, // 是否为容器组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/layouts/tabs/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | type: 'line', 3 | tabPosition: 'top', 4 | value: '0', 5 | columns: [ 6 | { 7 | value: 'Tab 1', 8 | componentList: [] 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/button/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-button', 6 | name: '按钮', 7 | icon: 'iconanniu1', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/button/options-config.ts: -------------------------------------------------------------------------------- 1 | import { useThemeStore } from '@/stores' 2 | const themeStore = useThemeStore() 3 | export default { 4 | version: '1.0.0', 5 | value: '', 6 | type: 'primary', 7 | shape: 'default', // 按钮类型 8 | size: 'default', // 按钮大小 9 | disabled: false, 10 | customtimageIcon: { 11 | fontClass: 'iconfont ant-home', 12 | unicode: 'e801' 13 | }, 14 | iconPosition: 'left', 15 | iconPreShow: false, 16 | text: '确定', 17 | enText: '', 18 | 19 | // 颜色 20 | // backgroundColor: '#1677ff', 21 | backgroundColor: themeStore.themeConfig.token.colorPrimary, 22 | color: '#FFFFFF', 23 | styleEditorConfig: { 24 | textHtmlSize: themeStore.themeConfig.token.fontSize 25 | }, 26 | themeChanged: { 27 | fontSize: false 28 | }, //是否修改过默认样式 29 | block: false, 30 | commonConfig: { 31 | topPaddingDistance: 8, 32 | bottomPaddingDistance: 8, 33 | leftPaddingDistance: 16, 34 | rightPaddingDistance: 16, 35 | borderStyle: {} as any, 36 | shadow: '' 37 | }, 38 | commonConfigAssignIsCol: false 39 | } 40 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/collapse/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/collapse/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-collapse', 6 | name: '折叠面板', 7 | icon: 'iconfuhao-zhediemianban', 8 | isNestedComponent: true, // 是否为容器组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/collapse/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | active: [], //展开值 3 | accordion: false, //手风琴模式 4 | columns: [ 5 | { 6 | title: '标题', 7 | componentList: [] 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/data-model/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/data-model/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | export default { 4 | type: 'van-design-data-model', 5 | name: '数据模型', 6 | icon: 'iconzujian', 7 | isBeta:true, 8 | isRefreshComponent: true, // 是否为可刷新组件 9 | isInputComponent: true, // 是否为输入组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | // extraData: { 13 | // customComponent: null 14 | // } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/data-model/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | interfaceDataConfig: { 5 | versions: '1.0.0', 6 | // 数据绑定 7 | bindDataKey: '' 8 | }, 9 | component: {} as any, 10 | customComponentId: '', 11 | _data_origin_component_uuid: '' 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/data-model/template.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/divider/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/divider/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-divider', 6 | name: '分割线', 7 | icon: 'iconfengexian', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/divider/options-config.ts: -------------------------------------------------------------------------------- 1 | import { FormatType } from '@/utils/text-formatter' 2 | 3 | export default { 4 | type: 'horizontal', // vertical 5 | title: '文本', 6 | orientation: 'center', 7 | borderConfig: { 8 | color: '', 9 | size: 1, 10 | style: '' 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/divider/template.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/dropdown-menu/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/dropdown-menu/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-dropdown-menu', 6 | name: '下拉菜单', 7 | icon: 'iconswipeCell', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/dropdown-menu/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | title: '菜单名称', 3 | menus: [ 4 | { 5 | value: '菜单名称' 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/dropdown-menu/template.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/dynamic-tabs/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-dynamic-tabs', 6 | name: '动态标签', 7 | icon: 'icontab1', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/dynamic-tabs/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | type: 'line', 3 | tabPosition: 'top', 4 | labelKey: '', 5 | valueKey: '', 6 | value: '', 7 | contentDataSource: 'radio-button-default', 8 | interfaceDataConfig: { 9 | versions: '1.0.0', 10 | id: '', 11 | uuid: '', 12 | key: '', 13 | value: '' 14 | }, 15 | columns: [ 16 | { 17 | value: 'Tab 1', 18 | componentList: [] 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/extend-field/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-extend-field', 6 | name: '扩展字段', 7 | icon: 'iconwenben', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/extend-field/options-config.ts: -------------------------------------------------------------------------------- 1 | import { FormatType } from '@/utils/text-formatter' 2 | 3 | export default { 4 | value: '扩展字段', 5 | enValue: '', 6 | extendName:"", 7 | extendType:"", 8 | extendValue:"", 9 | contentDataSource: 'radio-button-default', 10 | interfaceDataConfig: { 11 | versions: '1.0.0', 12 | id: '', 13 | key: '' 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/extend-field/template.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | 37 | 46 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/icon/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-icon', 6 | name: '图标', 7 | icon: 'icontubiao', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/icon/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | icon: { 3 | name: 'smile', 4 | fontClass: 'iconfont ant-smile', 5 | unicode: 'e78f' 6 | }, 7 | color: '#000000', 8 | size: '32', 9 | commonConfig: { 10 | postionConfig: { 11 | type: '', 12 | top: null, 13 | left: null, 14 | right: null, 15 | bottom: null, 16 | unit: 'px' 17 | }, 18 | postionAbsolute: false, 19 | zIndex: 1 20 | }, 21 | } 22 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/icon/template.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/iframe/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/iframe/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/iframe/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-iframe', 6 | name: 'iframe', 7 | icon: 'iconhtml', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/iframe/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | // 自定义属性 3 | url: '', 4 | commonConfigCompWidthUnit: '%', 5 | commonConfigCompWidth: '100', 6 | commonConfigCompHeightUnit: 'px', 7 | commonConfigCompHeight: '100', 8 | commonConfig: { 9 | leftSpaceDistance: 0, 10 | rightSpaceDistance: 0, 11 | bottomSpaceDistance: 0, 12 | topSpaceDistance: 0 13 | }, 14 | contentDataSource: 'radio-button-default', 15 | interfaceDataConfig: { 16 | versions: '1.0.0', 17 | id: '', 18 | uuid: '', 19 | key: '', 20 | value: '' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/iframe/template.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/image/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/image/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-image', 6 | name: '图片', 7 | icon: 'iconicon_tupian-xian', 8 | isRefreshComponent: true, // 是否为可刷新组件 9 | component: layoutTemplate, 10 | options: optionsConfig, 11 | extraData: { 12 | columns: [] as any[] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/image/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | src: new URL('@/assets/images/pic.png', import.meta.url).href, 3 | width: '100', 4 | widthPercent: false, 5 | height: '100', 6 | heightPercent: false, 7 | contentDataSource: 'radio-button-default', 8 | interfaceDataConfig: { 9 | versions: '1.0.0', 10 | id: '', 11 | key: '' 12 | }, 13 | commonConfig: { 14 | postionConfig: { 15 | type: '', 16 | top: null, 17 | left: null, 18 | right: null, 19 | bottom: null, 20 | unit: 'px' 21 | }, 22 | postionAbsolute: false, 23 | zIndex: 1, 24 | leftSpaceDistance: 0, 25 | rightSpaceDistance: 0, 26 | bottomSpaceDistance: 0, 27 | topSpaceDistance: 0 28 | }, 29 | commonConfigCompWidthUnit: 'px', 30 | commonConfigCompWidth: '100', 31 | commonConfigCompHeightUnit: 'auto', 32 | commonConfigCompHeight: '', 33 | _data_origin_component_uuid: '', 34 | commonConfigAssignIsCol: false 35 | } 36 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/page-header/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/page-header/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-page-header', 6 | name: '页头', 7 | icon: 'iconall', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/page-header/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | title: '标题', 3 | subTitle: '副标题' 4 | } 5 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/page-header/template.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/qrcode/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/qrcode/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/qrcode/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-qrcode', 6 | name: '二维码', 7 | icon: 'iconQRcode', 8 | component: layoutTemplate, 9 | options: optionsConfig 10 | } 11 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/qrcode/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: 'https://www.xingyunzuo.com/', 3 | contentDataSource: 'radio-button-default', 4 | width: 100, 5 | height: 100, 6 | color: '#000000', 7 | interfaceDataConfig: { 8 | versions: '1.0.0', 9 | id: '', 10 | uuid: '', 11 | key: '' 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/qrcode/template.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/render/config-attribute/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/render/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/render/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | export default { 4 | type: 'van-design-custom', 5 | name: '自定义组件', 6 | icon: 'iconzujian', 7 | isRefreshComponent: true, // 是否为可刷新组件 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | // extraData: { 12 | // customComponent: null 13 | // } 14 | } 15 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/render/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | interfaceDataConfig: { 5 | versions: '1.0.0', 6 | // 数据绑定 7 | bindDataKey: '' 8 | }, 9 | component: {} as any, 10 | customComponentId: '', 11 | _data_origin_component_uuid: '' 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/steps/config-attribute/steps-config.vue: -------------------------------------------------------------------------------- 1 | 15 | 31 | 38 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/steps/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/steps/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-steps', 6 | name: '步骤条', 7 | icon: 'iconbuzhoutiao1', 8 | isInputComponent: true, // 是否为输入组件 9 | component: layoutTemplate, 10 | options: optionsConfig 11 | } 12 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/steps/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: 1, 3 | direction: 'horizontal', 4 | size: 'default', 5 | steps: [ 6 | { value: '登录', description: '用户登录' }, 7 | { value: '验证', description: '验证身份' }, 8 | { value: '付款', description: '支付款项' }, 9 | { value: '完成', description: '完成交易' } 10 | ], 11 | interfaceDataConfig: { 12 | versions: '1.0.0' 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/steps/template.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/sub-table/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | export default { 4 | type: 'van-design-sub-table', 5 | name: '子表', 6 | icon: 'iconzujian', 7 | isBeta:true, 8 | isRefreshComponent: true, // 是否为可刷新组件 9 | isInputComponent: true, // 是否为输入组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | // extraData: { 13 | // customComponent: null 14 | // } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/sub-table/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | contentDataSource: 'radio-button-default', 3 | value: '', 4 | interfaceDataConfig: { 5 | versions: '1.0.0', 6 | // 数据绑定 7 | bindDataKey: '' 8 | }, 9 | columnsConfigList:[], 10 | dataModelConnectConfig:{}, 11 | tableData:[],// 表格数据,子表按理没有很多数据直接塞在组件里似乎是可行的? 12 | component: {} as any, 13 | customComponentId: '', 14 | _data_origin_component_uuid: '' 15 | } 16 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/sub-table/template.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/text/config-data/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/text/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-text', 6 | name: '文本', 7 | icon: 'iconwenben', 8 | isInputComponent: true, // 是否为输入组件 9 | isRefreshComponent: true, // 是否为可刷新组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/text/options-config.ts: -------------------------------------------------------------------------------- 1 | import { FormatType, FontSizeType } from '@/utils/text-formatter' 2 | 3 | export default { 4 | value: '文本', 5 | enValue: '', 6 | interfaceDataConfig: { 7 | versions: '1.0.0', 8 | id: '', 9 | key: '' 10 | }, 11 | textFormat: FormatType.NORMAL_TEXT, 12 | fontSizeType: '', 13 | nowrap: false, //是否关闭自动换行 14 | richText: false, 15 | styleEditorConfig: { 16 | textBgColor: '', 17 | textHtmlSize: 14, 18 | textHtmlPosit: '', 19 | textHtmlBlod: '', 20 | textHtmlTilt: '', 21 | textHtmlUnder: '', 22 | textColor: '#333', 23 | lineHeight: 32 24 | }, 25 | _data_origin_component_uuid: '' 26 | } 27 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/workflow/index.ts: -------------------------------------------------------------------------------- 1 | import layoutTemplate from './template.vue' 2 | import optionsConfig from './options-config' 3 | 4 | export default { 5 | type: 'van-design-workflow', 6 | name: '审批流', 7 | icon: 'iconliuchengshuoming', 8 | isInputComponent: true, // 是否为输入组件 9 | isMultiOutputComponent: true, //是否是多输出组件 10 | component: layoutTemplate, 11 | options: optionsConfig 12 | } 13 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/workflow/options-config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | value: '', 3 | contentDataSource: 'radio-button-default', 4 | interfaceDataConfig: { 5 | versions: '1.0.0', 6 | id: '', 7 | uuid: '', 8 | key: '' 9 | }, 10 | eventConfig: { 11 | eventList: [ 12 | { 13 | eventType: 'click', 14 | version: '1.0.0', 15 | actionList: [] 16 | }, 17 | { 18 | eventType: 'change', 19 | version: '1.0.0', 20 | actionList: [] 21 | }, 22 | { 23 | eventType: 'approve', 24 | version: '1.0.0', 25 | actionList: [] 26 | }, 27 | { 28 | eventType: 'reject', 29 | version: '1.0.0', 30 | actionList: [] 31 | }, 32 | { 33 | eventType: 'back', 34 | version: '1.0.0', 35 | actionList: [] 36 | } 37 | ] 38 | }, 39 | logList: [], 40 | workflowId: null, 41 | workflowIdConfig: {}, 42 | logId: null, 43 | logIdConfig: {}, 44 | currentUserId: null, 45 | // 组件输出 46 | outputs: { 47 | pendingUser: '', 48 | approvedUser: '', 49 | approvedAdvice: '', 50 | startUser: '' 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/components/design-pc/configs/others/workflow/template.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/components/tools/code-editor/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 54 | 55 | -------------------------------------------------------------------------------- /src/hooks/design-component/use-index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/hooks/design-component/use-index.ts -------------------------------------------------------------------------------- /src/hooks/design-page-operate/use-clear.ts: -------------------------------------------------------------------------------- 1 | import { message } from 'ant-design-vue' 2 | import { Modal } from 'ant-design-vue' 3 | import { useDataStore } from '@/stores' 4 | 5 | export default function usePageClear(componentTreeList: any) { 6 | function onClear() { 7 | const store = useDataStore() 8 | Modal.confirm({ 9 | title: '请确认是否清空所有组件和接口?', 10 | okText: '确认', 11 | cancelText: '取消', 12 | onOk() { 13 | message.success('清除成功') 14 | componentTreeList.value = [] 15 | store.interfaceMap = {} 16 | store.componentListMap = {} 17 | store.componentTreeList = [] 18 | }, 19 | onCancel() { 20 | console.log('Cancel') 21 | }, 22 | class: 'test' 23 | }) 24 | } 25 | 26 | return { 27 | onClear 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/hooks/design-page-operate/use-delete.ts: -------------------------------------------------------------------------------- 1 | import { message } from 'ant-design-vue'; 2 | 3 | export default function usePageDelete() { 4 | function onDelete() { 5 | message.info('功能开发中') 6 | } 7 | 8 | return { 9 | onDelete 10 | } 11 | } -------------------------------------------------------------------------------- /src/hooks/design-page-operate/use-reload.ts: -------------------------------------------------------------------------------- 1 | import { nextTick } from 'vue' 2 | import { message } from 'ant-design-vue'; 3 | 4 | export default function usePageReload(isShow: any) { 5 | async function onReload() { 6 | isShow.value = false 7 | 8 | await nextTick() 9 | isShow.value = true 10 | 11 | message.success('重载成功') 12 | } 13 | 14 | return { 15 | onReload 16 | } 17 | } -------------------------------------------------------------------------------- /src/hooks/design-page-operate/use-save.ts: -------------------------------------------------------------------------------- 1 | import { message } from 'ant-design-vue' 2 | import { getCleanConfigJson } from '@/utils/clean-config-json' 3 | import { useDataStore } from '@/stores' 4 | import { setStorage } from '@/utils/storage-util' 5 | 6 | export default function usePageSave(componentTreeList: any, reportId: any) { 7 | function onSave() { 8 | let configJson = getCleanConfigJson() 9 | setStorage(reportId, configJson) 10 | message.success('保存成功', 0.5) 11 | } 12 | 13 | return { 14 | onSave 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | // import './assets/main.css'; 3 | import Antd from 'ant-design-vue' 4 | import SdkPage from "./views/sdkEntry/SdkPage.vue"; 5 | // import type { PageConfig } from '@/views/models'; 6 | import { createPinia } from 'pinia' 7 | import router from './router' 8 | import * as echarts from 'echarts' 9 | class NebularPCRenderer { 10 | constructor(props: any) { 11 | this.config = props; 12 | console.log('---constructor---',this.config) 13 | this.init(); 14 | } 15 | config: any = { 16 | merchantId: 10, 17 | projectId:330, 18 | reportId:5340, 19 | token:"", 20 | permission:"", 21 | pageParams:"", 22 | } 23 | editbox:any 24 | init() { 25 | const app = createApp(SdkPage, { 26 | ...this.config, 27 | onInit: (editbox: any) => { 28 | console.log("edit", editbox); 29 | 30 | } 31 | }) 32 | const pinia = createPinia() 33 | app.use(pinia).use(router).use(Antd) 34 | app.config.globalProperties.echarts = echarts 35 | app.mount('#app'); 36 | } 37 | loadData() { 38 | console.log("loadData"); 39 | } 40 | 41 | 42 | } 43 | //兼容seajs 44 | // define(function (require:any, exports:any, module:any) { 45 | // return NebularRendererPC; 46 | // }) 47 | 48 | export default NebularPCRenderer; 49 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-left/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | 17 | 46 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-basics/index.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 39 | 40 | 48 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-datas/config-interface.vue: -------------------------------------------------------------------------------- 1 | 8 | 20 | 21 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-confirm.vue: -------------------------------------------------------------------------------- 1 | 10 | 16 | 17 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-disable.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-display.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-import.vue: -------------------------------------------------------------------------------- 1 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-interface.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-print.vue: -------------------------------------------------------------------------------- 1 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-refresh.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-set-value.vue: -------------------------------------------------------------------------------- 1 | 23 | 31 | 32 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-table-export.vue: -------------------------------------------------------------------------------- 1 | 16 | 25 | 26 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/events-left/config-event/event-timeout.vue: -------------------------------------------------------------------------------- 1 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-events/hooks/use-drag-node.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | 3 | export default function useDragNode() { 4 | const draggingNode = ref(null) as any; 5 | const draggingNodeName = ref(null) as any; 6 | 7 | return { 8 | draggingNode, 9 | draggingNodeName 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-status/hooks/use-drag-node.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | 3 | export default function useDragNode() { 4 | const draggingNode = ref(null) as any; 5 | const draggingNodeName = ref(null) as any; 6 | 7 | return { 8 | draggingNode, 9 | draggingNodeName 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/layouts/designer-aside-right/config-status/status-left/config-status/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/layouts/designer-header/html.js: -------------------------------------------------------------------------------- 1 | export const prefix = ` 2 | 3 | 4 | 5 | 6 | 7 | 8 | 测试 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 33 | 34 | 41 | 42 | ` 43 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import { createPinia } from 'pinia' 5 | 6 | import './styles/index.less' 7 | 8 | import Antd from 'ant-design-vue' 9 | 10 | import * as echarts from 'echarts' 11 | import ganttastic from '@infectoone/vue-ganttastic' 12 | 13 | import '@imengyu/vue3-context-menu/lib/vue3-context-menu.css' 14 | import ContextMenu from '@imengyu/vue3-context-menu' 15 | 16 | const app = createApp(App) 17 | const pinia = createPinia() 18 | app.use(pinia).use(router).use(Antd).use(ganttastic).use(ContextMenu) 19 | app.config.globalProperties.echarts = echarts 20 | app.mount('#app') 21 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory,createWebHashHistory } from 'vue-router' 2 | const router = createRouter({ 3 | history: createWebHashHistory(import.meta.env.BASE_URL), 4 | routes: [ 5 | { 6 | path: '/', 7 | redirect: { 8 | path: '/designer/pc' 9 | } 10 | }, 11 | { 12 | path: '/designer/:device', 13 | name: 'designer', 14 | component: () => import('../views/Designer.vue') 15 | } 16 | ] 17 | }) 18 | 19 | export default router 20 | -------------------------------------------------------------------------------- /src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | declare module '*.vue' { 3 | import type { DefineComponent } from 'vue' 4 | const component: DefineComponent<{}, {}, any> 5 | export default component 6 | } 7 | -------------------------------------------------------------------------------- /src/styles/antd-ui-cover.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nebula-low-code/NebulaLowcode/7295fa8e21d25645ac3b8d7ba24289ca91f2c73e/src/styles/antd-ui-cover.less -------------------------------------------------------------------------------- /src/styles/defaultTheme.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": { 3 | "colorPrimary": "#1677ff", 4 | "fontSize": 14, 5 | "borderRadius": 6, 6 | "fontSizeHeading1": 38, 7 | "fontSizeHeading2": 30, 8 | "fontSizeHeading3": 24, 9 | "fontSizeHeading4": 20, 10 | "fontSizeHeading5": 16 11 | } 12 | } -------------------------------------------------------------------------------- /src/styles/global.scss: -------------------------------------------------------------------------------- 1 | /* input 输入框label */ 2 | .custom_component_label{ 3 | min-height:32px; 4 | line-height: 32px; 5 | label{ 6 | display: inline-block; 7 | word-wrap: break-word; 8 | flex-shrink: 0; 9 | font-size: 14px; 10 | font-weight: 500; 11 | color: #606266; 12 | padding: 0 12px 0 0; 13 | } 14 | label.required:before { 15 | content: '* '; 16 | color: red; 17 | } 18 | } 19 | 20 | .i-scrollbar-hide { 21 | &::-webkit-scrollbar { 22 | width: 0; 23 | } 24 | &::-webkit-scrollbar-track { 25 | background-color: transparent; 26 | } 27 | &::-webkit-scrollbar-thumb { 28 | background: #e8eaec; 29 | } 30 | } 31 | 32 | // 隐藏移动端label标签 33 | .hide_label{ 34 | .van-field__label{ 35 | display: none; 36 | } 37 | } 38 | 39 | .ant-message::before { 40 | display: none; 41 | } 42 | 43 | .ant-qrcode::before { 44 | display: none; 45 | } 46 | 47 | .ant-form-item { 48 | margin-bottom: 12px; 49 | } 50 | 51 | .ant-collapse>.ant-collapse-item >.ant-collapse-header { 52 | align-items: center; 53 | } 54 | 55 | .ant-tree { 56 | background: transparent; 57 | } 58 | 59 | .van-cell { 60 | background: transparent !important; 61 | } 62 | 63 | body { 64 | padding: 0; 65 | margin: 0; 66 | } -------------------------------------------------------------------------------- /src/styles/index.less: -------------------------------------------------------------------------------- 1 | @import url(./reset.less); 2 | @import url(./antd-ui-cover.less); 3 | @import url(./global.scss); 4 | -------------------------------------------------------------------------------- /src/styles/reset.less: -------------------------------------------------------------------------------- 1 | li { 2 | list-style: none; 3 | } 4 | 5 | ul, 6 | li, 7 | p, 8 | h1, 9 | h2, 10 | h3, 11 | h4, 12 | h5 { 13 | margin: 0px; 14 | padding: 0px; 15 | } 16 | -------------------------------------------------------------------------------- /src/utils/charts-utils/axis-formatter.ts: -------------------------------------------------------------------------------- 1 | export function axisFormatter(value: any, formatter: string) { 2 | if (formatter && formatter.length > 0) { 3 | if (formatter == 'percent') { 4 | return toThousands(value * 100) + '%' 5 | } else if (formatter == 'KMB') { 6 | return abbreviateNumber(value) 7 | } else { 8 | return toThousands(value) 9 | } 10 | } else { 11 | return toThousands(value) 12 | } 13 | } 14 | 15 | //千分位 16 | function toThousands(num: any) { 17 | return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') 18 | } 19 | 20 | //将大数转为K、M、B、T 21 | function abbreviateNumber(num: any, fixed = 0) { 22 | if (num === null) { 23 | return null 24 | } // terminate early 25 | if (num === 0) { 26 | return '0' 27 | } // terminate early 28 | let b = num.toPrecision(2).split('e'), // get power 29 | k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3), // floor at decimals, ceiling at trillions 30 | c = k < 1 ? num.toFixed(0 + fixed) : (num / Math.pow(10, k * 3)).toFixed(1), // divide by power 31 | d = c < 0 ? c : Math.abs(c), // enforce -0 is 0 32 | e = d + ['', 'K', 'M', 'B', 'T'][k] // append power 33 | return e 34 | } 35 | -------------------------------------------------------------------------------- /src/utils/charts-utils/charts-legend.ts: -------------------------------------------------------------------------------- 1 | export function legend(legendAlign: string) { 2 | let legend: any 3 | switch (legendAlign) { 4 | case 'top': 5 | legend = { 6 | orient: 'horizontal', 7 | right: 'center', 8 | top: 0 9 | } 10 | break 11 | case 'left': 12 | legend = { 13 | orient: 'vertical', 14 | left: 0, 15 | top: 'center' 16 | } 17 | break 18 | case 'right': 19 | legend = { 20 | orient: 'vertical', 21 | right: 0, 22 | top: 'center' 23 | } 24 | break 25 | case 'bottom': 26 | legend = { 27 | orient: 'horizontal', 28 | right: 'center', 29 | bottom: 0 30 | } 31 | break 32 | case 'none': 33 | legend = undefined 34 | break 35 | } 36 | if (legend) { 37 | legend['type'] = 'scroll' 38 | } 39 | return legend 40 | } 41 | -------------------------------------------------------------------------------- /src/utils/deep-clone.ts: -------------------------------------------------------------------------------- 1 | export function deepClone(source: T): T { 2 | if (source === null || typeof source !== 'object') { 3 | // 如果是原始类型或 null,则直接返回 4 | return source 5 | } 6 | 7 | if (Array.isArray(source)) { 8 | // 如果是数组,递归拷贝数组的每个元素 9 | const cloneArray = source.map((item) => deepClone(item)) 10 | return cloneArray as any 11 | } 12 | 13 | // 如果是对象,递归拷贝对象的每个属性 14 | const cloneObject = {} as T 15 | for (const key in source) { 16 | if (Object.prototype.hasOwnProperty.call(source, key)) { 17 | cloneObject[key] = deepClone(source[key]) 18 | } 19 | } 20 | return cloneObject 21 | } 22 | 23 | export function deepMerge(target: T, source: Partial): T { 24 | if (source === null || typeof source !== 'object') { 25 | // 如果源对象是原始类型或者 null,则直接返回源对象 26 | return source as T 27 | } 28 | 29 | const mergedObject = { ...target } 30 | 31 | for (const key in source) { 32 | if (Object.prototype.hasOwnProperty.call(source, key)) { 33 | const targetValue = target[key] 34 | const sourceValue = source[key] 35 | 36 | if ( 37 | targetValue !== null && 38 | typeof targetValue === 'object' && 39 | sourceValue !== null && 40 | typeof sourceValue === 'object' 41 | ) { 42 | // 如果目标值和源值都是对象,则递归合并两个对象 43 | mergedObject[key] = deepMerge(targetValue, sourceValue) 44 | } else { 45 | // 否则,直接用源值覆盖目标值 46 | mergedObject[key] = sourceValue as NonNullable]> 47 | } 48 | } 49 | } 50 | 51 | return mergedObject 52 | } 53 | -------------------------------------------------------------------------------- /src/utils/load-css.ts: -------------------------------------------------------------------------------- 1 | export const loadCss = (url: string) => { 2 | return new Promise((resolve, reject) => { 3 | const link = document.createElement('link') 4 | link.rel = 'stylesheet' 5 | link.href = url 6 | document.head.appendChild(link) 7 | link.onload = () => { 8 | resolve() 9 | } 10 | }) 11 | } 12 | -------------------------------------------------------------------------------- /src/utils/mitt.ts: -------------------------------------------------------------------------------- 1 | import mitt from 'mitt' 2 | const emitter = mitt() 3 | export default emitter 4 | -------------------------------------------------------------------------------- /src/utils/pub-use.ts: -------------------------------------------------------------------------------- 1 | export function getAssetsFile(url: string) { 2 | return new URL(`../assets/${url}`, import.meta.url).href 3 | } 4 | 5 | //根据名字在树形数据中搜索 6 | export function searchTreeData(nodes: any[], searchTerm: string, keyName: string): any[] { 7 | // 忽略大小写进行模糊匹配 8 | const lowerCaseSearchTerm = searchTerm.toLowerCase() 9 | 10 | // 递归搜索函数 11 | const searchRecursively = (nodes: any[]): any[] => { 12 | return nodes.reduce((acc, node) => { 13 | // 检查当前节点的label是否匹配 14 | if (node[keyName].toLowerCase().includes(lowerCaseSearchTerm)) { 15 | // 如果是叶子节点,直接添加到结果中 16 | if (!node.children || node.children.length === 0) { 17 | acc.push(node) 18 | } else { 19 | // 如果不是叶子节点,递归搜索子节点并合并结果 20 | const childrenResults = searchRecursively(node.children || []) 21 | if (childrenResults.length > 0) { 22 | acc.push({ 23 | ...node, 24 | children: childrenResults 25 | }) 26 | } 27 | } 28 | } else if (node.children) { 29 | // 如果当前节点不匹配,递归搜索子节点 30 | const childrenResults = searchRecursively(node.children) 31 | if (childrenResults.length > 0) { 32 | acc.push({ 33 | ...node, 34 | children: childrenResults 35 | }) 36 | } 37 | } 38 | return acc 39 | }, [] as any[]) 40 | } 41 | 42 | // 开始递归搜索 43 | return searchRecursively(nodes) 44 | } 45 | -------------------------------------------------------------------------------- /src/utils/storage-util.ts: -------------------------------------------------------------------------------- 1 | // 设置 setStorage 2 | export const setStorage = (key: any, value: any) => { 3 | if (value === '' || value === null || value === undefined) { 4 | value = null 5 | } 6 | let keyString = 'designer-' + key 7 | localStorage.setItem( 8 | keyString, 9 | JSON.stringify({ 10 | value: value 11 | }) 12 | ) 13 | } 14 | 15 | // 获取 getStorage 16 | export const getStorage = (key: any) => { 17 | let keyString = 'designer-' + key 18 | let storageStr = localStorage.getItem(keyString) 19 | if (storageStr) { 20 | return JSON.parse(storageStr).value 21 | } 22 | return null 23 | } 24 | 25 | // 删除 removeStorage 26 | export const removeStorage = (key: any) => { 27 | localStorage.removeItem(key) 28 | } 29 | 30 | // 清空 clearStorage 31 | export const clearStorage = () => { 32 | localStorage.clear() 33 | } 34 | -------------------------------------------------------------------------------- /src/utils/string-utils.ts: -------------------------------------------------------------------------------- 1 | import { DataSourceType } from './constants' 2 | 3 | //解析字符串中所有{}包围的字段,作为数组返回 4 | export function extractParams(sql: string): string[] { 5 | // 定义正则表达式匹配 {} 中的内容 6 | const regex = /\{(\s*.*?\s*)\}/g 7 | let matches: RegExpExecArray | null 8 | const params: string[] = [] 9 | 10 | // 使用正则表达式匹配并提取参数 11 | while ((matches = regex.exec(sql)) !== null) { 12 | // 去除空格 13 | const paramName = matches[1].trim() 14 | params.push(paramName) 15 | } 16 | 17 | return params 18 | } 19 | 20 | export function isNetworkDatasource(dataSourceType: string) { 21 | return dataSourceType === DataSourceType.INTERFACE || dataSourceType === DataSourceType.CONNECT || dataSourceType === DataSourceType.DATABASE || dataSourceType === DataSourceType.SQL|| dataSourceType === DataSourceType.DIFY 22 | } 23 | 24 | export function imageToBase64(url: string, callback: Function) { 25 | let img = new Image(), 26 | dataURL = '' 27 | img.src = url + '?v=' + Math.random() 28 | img.setAttribute('crossOrigin', 'Anonymous') 29 | img.onload = function () { 30 | let canvas = document.createElement('canvas'), 31 | width = img.width, 32 | height = img.height 33 | canvas.width = width 34 | canvas.height = height 35 | canvas.getContext('2d')?.drawImage(img, 0, 0, width, height) 36 | dataURL = canvas.toDataURL('image/jpeg') 37 | callback ? callback(dataURL) : null 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/utils/uuid.ts: -------------------------------------------------------------------------------- 1 | export const generateUUID = (prefix?: string) => { 2 | let d = new Date().getTime() 3 | const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 4 | const r = (d + Math.random() * 16) % 16 | 0 5 | d = Math.floor(d / 16) 6 | return (c == 'x' ? r : (r & 0x7) | 0x8).toString(16) 7 | }) 8 | return (prefix || 'van-') + uuid // 为什么要加van-?因为需要支持自定义class功能,html的class不支持数字开头 9 | } 10 | -------------------------------------------------------------------------------- /src/views/sdkEntry/SdkPage.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 17 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.dom.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 | "exclude": ["src/**/__tests__/*"], 5 | "compilerOptions": { 6 | "composite": true, 7 | "baseUrl": ".", 8 | "paths": { 9 | "@/*": ["./src/*"] 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { 5 | "path": "./tsconfig.node.json" 6 | }, 7 | { 8 | "path": "./tsconfig.app.json" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node18/tsconfig.json", 3 | "include": [ 4 | "vite.config.*", 5 | "vitest.config.*", 6 | "cypress.config.*", 7 | "nightwatch.conf.*", 8 | "playwright.config.*" 9 | ], 10 | "compilerOptions": { 11 | "composite": true, 12 | "module": "ESNext", 13 | "types": ["node"] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | base:"./", 9 | plugins: [ 10 | vue(), 11 | ], 12 | resolve: { 13 | alias: { 14 | '@': fileURLToPath(new URL('./src', import.meta.url)) 15 | } 16 | } 17 | }) 18 | --------------------------------------------------------------------------------