tianheng-ui 0.1.39 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/theme-chalk/styles/feature.scss +2 -4
- package/lib/theme-chalk/styles/variable.scss +2 -0
- package/lib/tianheng-ui.js +13 -13
- package/package.json +1 -1
- package/packages/Dialog/index.vue +1 -4
- package/packages/FormMaking/GenerateForm.vue +1 -1
- package/packages/FormMaking/GenerateFormItem.vue +4 -5
- package/packages/FormMaking/GenerateFormItemH5.vue +2 -2
- package/packages/FormMaking/WidgetConfig.vue +83 -81
- package/packages/FormMaking/WidgetForm.vue +1 -0
- package/packages/FormMaking/WidgetFormItem.vue +8 -16
- package/packages/FormMaking/WidgetTools.vue +2 -3
- package/packages/FormMaking/custom/config.js +34 -5
- package/packages/FormMaking/custom/index.js +1 -1
- package/packages/FormMaking/custom/items/list_dev.vue +122 -0
- package/packages/FormMaking/custom/items/list_pro.vue +18 -0
- package/packages/FormMaking/custom/items/tableH5_pro.vue +4 -5
- package/packages/FormMaking/custom/items/upload.vue +1 -1
- package/packages/FormMaking/index.vue +6 -2
- package/packages/FormMaking/styles/index.scss +18 -18
- package/packages/TableMaking/WidgetTools.vue +3 -3
- package/packages/TableMaking/custom/items/search/index-h5.vue +13 -2
- package/packages/TableMaking/custom/items/search/index-pc.vue +12 -1
- package/packages/TableMaking/custom/items/table/index-pc.vue +23 -7
- package/packages/TableMaking/generateTable.vue +3 -3
- package/packages/TableMaking/widgetConfig.vue +181 -151
- package/packages/TableMaking/widgetTable.vue +20 -4
- package/packages/FormMaking/FormConfig.vue +0 -190
@@ -3,49 +3,45 @@
|
|
3
3
|
<div class="tabs ">
|
4
4
|
<div
|
5
5
|
v-for="(item, index) in tabsMenus"
|
6
|
-
:key="index"
|
7
6
|
class="tabs-item"
|
8
7
|
:class="{ 'tabs-item__active': activeTab.value === item.value }"
|
8
|
+
:key="index"
|
9
9
|
@click="activeTab = item"
|
10
10
|
>
|
11
11
|
{{ item.title }}
|
12
12
|
</div>
|
13
13
|
</div>
|
14
14
|
<div v-if="activeTab.value === 'field'" class="configItem fieldsView">
|
15
|
-
<
|
16
|
-
<el-collapse-
|
17
|
-
<el-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
>{{ item.label }}</el-checkbox
|
46
|
-
>
|
47
|
-
</el-collapse-item>
|
48
|
-
</el-collapse>
|
15
|
+
<template v-if="fieldsTree.search.length || fieldsTree.table.length">
|
16
|
+
<el-collapse v-model="collapseValue">
|
17
|
+
<el-collapse-item title="查询字段" name="group-fields_search">
|
18
|
+
<el-tree
|
19
|
+
:data="fieldsTree.search"
|
20
|
+
:default-checked-keys="searchActiveFields"
|
21
|
+
show-checkbox
|
22
|
+
node-key="key"
|
23
|
+
:props="{ label: 'label', value: 'prop' }"
|
24
|
+
ref="fieldsTreeRef"
|
25
|
+
@check-change="handleTreeCheckChange('search')"
|
26
|
+
>
|
27
|
+
</el-tree>
|
28
|
+
</el-collapse-item>
|
29
|
+
<el-collapse-item title="列表字段" name="group-fields_table">
|
30
|
+
<el-tree
|
31
|
+
:data="fieldsTree.table"
|
32
|
+
:default-checked-keys="tableActiveFields"
|
33
|
+
show-checkbox
|
34
|
+
node-key="key"
|
35
|
+
:check-strictly="true"
|
36
|
+
:props="{ label: 'label', value: 'prop' }"
|
37
|
+
ref="fieldsTreeRef"
|
38
|
+
@check-change="handleTreeCheckChange('table')"
|
39
|
+
>
|
40
|
+
</el-tree>
|
41
|
+
</el-collapse-item>
|
42
|
+
</el-collapse>
|
43
|
+
</template>
|
44
|
+
<th-empty v-else description="请选择列表接口"></th-empty>
|
49
45
|
</div>
|
50
46
|
<div v-if="activeTab.value === 'table' && config.table" class="configItem">
|
51
47
|
<el-form
|
@@ -112,7 +108,7 @@
|
|
112
108
|
<el-switch v-model="config.search.show"> </el-switch>
|
113
109
|
</el-form-item>
|
114
110
|
</el-collapse-item>
|
115
|
-
<el-collapse-item title="排序配置" name="group-
|
111
|
+
<el-collapse-item title="排序配置" name="group-table_sort">
|
116
112
|
<el-form-item label="排序类型">
|
117
113
|
<el-radio-group v-model="config.table.sort.type">
|
118
114
|
<el-radio-button label="1">降序</el-radio-button>
|
@@ -126,7 +122,7 @@
|
|
126
122
|
clearable
|
127
123
|
>
|
128
124
|
<el-option
|
129
|
-
v-for="item in
|
125
|
+
v-for="item in config.table.options"
|
130
126
|
:key="item.prop"
|
131
127
|
:label="item.label"
|
132
128
|
:value="item.alias"
|
@@ -135,7 +131,7 @@
|
|
135
131
|
</el-select>
|
136
132
|
</el-form-item>
|
137
133
|
</el-collapse-item>
|
138
|
-
<el-collapse-item title="分页配置" name="group-
|
134
|
+
<el-collapse-item title="分页配置" name="group-table_pageInfo">
|
139
135
|
<el-form-item label="开启分页">
|
140
136
|
<el-switch v-model="config.table.pageInfo.show"> </el-switch>
|
141
137
|
</el-form-item>
|
@@ -207,7 +203,7 @@
|
|
207
203
|
</el-form-item>
|
208
204
|
</template>
|
209
205
|
</el-collapse-item>
|
210
|
-
<el-collapse-item title="提示语配置" name="group-
|
206
|
+
<el-collapse-item title="提示语配置" name="group-table_hint">
|
211
207
|
<el-form-item label="空数据">
|
212
208
|
<el-input
|
213
209
|
v-model="config.table.empty.text"
|
@@ -221,9 +217,9 @@
|
|
221
217
|
></el-input>
|
222
218
|
</el-form-item>
|
223
219
|
</el-collapse-item>
|
224
|
-
<!-- <el-collapse-item title="数据接口配置" name="group-
|
220
|
+
<!-- <el-collapse-item title="数据接口配置" name="group-table_network">
|
225
221
|
</el-collapse-item> -->
|
226
|
-
<el-collapse-item name="group-
|
222
|
+
<el-collapse-item name="group-table_button">
|
227
223
|
<template slot="title">
|
228
224
|
<div class="collapse-title">
|
229
225
|
<div>按钮配置</div>
|
@@ -475,17 +471,39 @@
|
|
475
471
|
:modal-append-to-body="false"
|
476
472
|
:showFooter="false"
|
477
473
|
>
|
478
|
-
<div class="
|
479
|
-
<
|
480
|
-
<
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
474
|
+
<div class="eventsSetting th-flex_box th-is_border">
|
475
|
+
<div class="list th-flex_aside">
|
476
|
+
<div class="events-header th-sticky_top">
|
477
|
+
<div>按钮库</div>
|
478
|
+
<!-- <el-button type="text" icon="el-icon-plus" size="mini" disabled
|
479
|
+
>添加</el-button
|
480
|
+
> -->
|
481
|
+
</div>
|
482
|
+
<div
|
483
|
+
v-for="(item, index) in Object.values(config.tools || [])"
|
484
|
+
class="list-item th-is_hover"
|
485
|
+
:class="{
|
486
|
+
'th-is_active': dialog.data && dialog.data.name === item.name
|
487
|
+
}"
|
488
|
+
:key="item.key"
|
489
|
+
@click="dialog.data = item"
|
490
|
+
>
|
491
|
+
<div class="list-item-value">{{ item.name }}</div>
|
492
|
+
<!-- <el-popconfirm
|
493
|
+
:title="`是否确定删除方法 ${item.name}`"
|
494
|
+
confirm-button-text="删除"
|
495
|
+
confirm-button-type="danger"
|
496
|
+
@confirm="handleEventDialogDelete(item, index)"
|
497
|
+
>
|
498
|
+
<i class="el-icon-delete" slot="reference"></i>
|
499
|
+
</el-popconfirm> -->
|
500
|
+
</div>
|
501
|
+
</div>
|
502
|
+
<div class="detail th-fiex_content">
|
503
|
+
<div class="events-header th-sticky_top">按钮详情</div>
|
488
504
|
<el-form
|
505
|
+
v-if="dialog.data"
|
506
|
+
class="detail-form"
|
489
507
|
ref="form"
|
490
508
|
:model="dialog.data"
|
491
509
|
label-width="80px"
|
@@ -587,7 +605,7 @@
|
|
587
605
|
</el-select>
|
588
606
|
</el-form-item>
|
589
607
|
</el-form>
|
590
|
-
</
|
608
|
+
</div>
|
591
609
|
</div>
|
592
610
|
</th-dialog>
|
593
611
|
</div>
|
@@ -616,7 +634,6 @@ export default {
|
|
616
634
|
{ title: "样式设置", value: "css" }
|
617
635
|
],
|
618
636
|
activeTab: { title: "列表属性", value: "table" },
|
619
|
-
fields: [],
|
620
637
|
searchField: {
|
621
638
|
isCheckAll: false,
|
622
639
|
isIndeterminate: false
|
@@ -626,12 +643,14 @@ export default {
|
|
626
643
|
isIndeterminate: false
|
627
644
|
},
|
628
645
|
collapseValue: [
|
646
|
+
"group-fields_search",
|
647
|
+
"group-fields_table",
|
629
648
|
"group-table",
|
630
|
-
"group-
|
631
|
-
"group-
|
632
|
-
"group-
|
633
|
-
"group-
|
634
|
-
"group-
|
649
|
+
"group-table_pageInfo",
|
650
|
+
"group-table_sort",
|
651
|
+
"group-table_hint",
|
652
|
+
"group-table_network",
|
653
|
+
"group-table_button"
|
635
654
|
],
|
636
655
|
pageInfoLayout: [
|
637
656
|
{ label: "总条数", value: "total" },
|
@@ -660,16 +679,16 @@ export default {
|
|
660
679
|
{ required: true, message: "请选择列表接口", trigger: "change" }
|
661
680
|
]
|
662
681
|
},
|
682
|
+
fieldsTree: {
|
683
|
+
search: [],
|
684
|
+
table: []
|
685
|
+
},
|
663
686
|
dialog: { show: false, data: null }
|
664
687
|
};
|
665
688
|
},
|
666
689
|
watch: {
|
667
690
|
config(val) {
|
668
691
|
this.handleFieldsApiChange(val.table.mounted.api);
|
669
|
-
this.handleFields();
|
670
|
-
},
|
671
|
-
fields(val) {
|
672
|
-
this.handleFields();
|
673
692
|
},
|
674
693
|
apiOptions() {
|
675
694
|
this.handleFieldsApiChange(this.config.table.mounted.api);
|
@@ -678,113 +697,76 @@ export default {
|
|
678
697
|
computed: {
|
679
698
|
searchActiveFields() {
|
680
699
|
const data = this.config.search.options.map(item => {
|
681
|
-
return item.
|
700
|
+
return item.key;
|
682
701
|
});
|
683
702
|
return data;
|
684
703
|
},
|
685
704
|
tableActiveFields() {
|
686
705
|
const data = this.config.table.options.map(item => {
|
687
|
-
return item.
|
706
|
+
return item.key;
|
688
707
|
});
|
689
708
|
return data;
|
690
709
|
}
|
691
710
|
},
|
692
711
|
mounted() {},
|
693
712
|
methods: {
|
694
|
-
handleFields() {
|
695
|
-
this.fields.forEach(item => {
|
696
|
-
item.isSearch = this.searchActiveFields.includes(item.prop);
|
697
|
-
item.isTable = this.tableActiveFields.includes(item.prop);
|
698
|
-
});
|
699
|
-
this.searchField = {
|
700
|
-
isCheckAll: this.searchActiveFields.length === this.fields.length,
|
701
|
-
isIndeterminate:
|
702
|
-
this.searchActiveFields.length !== 0 &&
|
703
|
-
this.searchActiveFields.length !== this.fields.length
|
704
|
-
};
|
705
|
-
this.tableField = {
|
706
|
-
isCheckAll: this.tableActiveFields.length === this.fields.length,
|
707
|
-
isIndeterminate:
|
708
|
-
this.tableActiveFields.length !== 0 &&
|
709
|
-
this.tableActiveFields.length !== this.fields.length
|
710
|
-
};
|
711
|
-
},
|
712
|
-
handleCheckAllChange(bool, action) {
|
713
|
-
if (action === "searchField") {
|
714
|
-
this.fields.forEach(item => {
|
715
|
-
item.isSearch = bool;
|
716
|
-
});
|
717
|
-
const data = deepClone(this.fields);
|
718
|
-
this.config.search.options = bool ? data : [];
|
719
|
-
this.searchField = { isCheckAll: bool, isIndeterminate: false };
|
720
|
-
return;
|
721
|
-
}
|
722
|
-
if (action === "tableField") {
|
723
|
-
this.fields.forEach(item => {
|
724
|
-
item.isTable = bool;
|
725
|
-
});
|
726
|
-
const data = deepClone(this.fields);
|
727
|
-
this.config.table.options = bool ? data : [];
|
728
|
-
this.tableField = { isCheckAll: bool, isIndeterminate: false };
|
729
|
-
return;
|
730
|
-
}
|
731
|
-
},
|
732
|
-
handleCheckboxChange(bool, action, data) {
|
733
|
-
if (action === "searchField") {
|
734
|
-
data.isSearch = bool;
|
735
|
-
bool
|
736
|
-
? this.config.search.options.push(deepClone(data))
|
737
|
-
: (this.config.search.options = this.config.search.options.filter(
|
738
|
-
item => {
|
739
|
-
return item.prop !== data.prop;
|
740
|
-
}
|
741
|
-
));
|
742
|
-
this.searchField = {
|
743
|
-
isCheckAll: this.config.search.options.length === this.fields.length,
|
744
|
-
isIndeterminate:
|
745
|
-
this.config.search.options.length !== 0 &&
|
746
|
-
this.config.search.options.length !== this.fields.length
|
747
|
-
};
|
748
|
-
return;
|
749
|
-
}
|
750
|
-
if (action === "tableField") {
|
751
|
-
data.isTable = bool;
|
752
|
-
bool
|
753
|
-
? this.config.table.options.push(deepClone(data))
|
754
|
-
: (this.config.table.options = this.config.table.options.filter(
|
755
|
-
item => {
|
756
|
-
return item.prop !== data.prop;
|
757
|
-
}
|
758
|
-
));
|
759
|
-
this.tableField = {
|
760
|
-
isCheckAll: this.config.table.options.length === this.fields.length,
|
761
|
-
isIndeterminate:
|
762
|
-
this.config.table.options.length !== 0 &&
|
763
|
-
this.config.table.options.length !== this.fields.length
|
764
|
-
};
|
765
|
-
return;
|
766
|
-
}
|
767
|
-
},
|
768
713
|
handleActionConfig(data) {
|
769
714
|
this.dialog = { show: true, data };
|
770
715
|
},
|
771
716
|
handleFieldsApiChange(val) {
|
772
|
-
const
|
717
|
+
const api = this.apiOptions.filter(item => {
|
773
718
|
return item.id === val;
|
774
|
-
});
|
775
|
-
if (
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
719
|
+
})[0];
|
720
|
+
if (!api) return (this.fieldsTree = { search: [], table: [] });
|
721
|
+
|
722
|
+
const initParams = (paramsList, pProp) => {
|
723
|
+
paramsList.forEach(item => {
|
724
|
+
item.elType = "input";
|
725
|
+
item.align = "left";
|
726
|
+
item.pProp = pProp ? `${pProp}.${item.prop}` : item.prop;
|
727
|
+
if (item.children && item.children.length) {
|
728
|
+
initParams(item.children, item.pProp);
|
729
|
+
}
|
730
|
+
});
|
731
|
+
};
|
732
|
+
this.fieldsTree.search = deepClone(api.interfaceParameterInputList) || [];
|
733
|
+
initParams(this.fieldsTree.search);
|
734
|
+
this.fieldsTree.table = deepClone(api.interfaceParameterOutPutList) || [];
|
735
|
+
initParams(this.fieldsTree.table);
|
736
|
+
},
|
737
|
+
handleTreeCheckChange(action) {
|
738
|
+
let nodes = deepClone(this.$refs.fieldsTreeRef.getCheckedNodes());
|
739
|
+
if (action === "search") {
|
740
|
+
const keys = this.config.search.options.map(item => {
|
741
|
+
return item.key;
|
742
|
+
});
|
743
|
+
nodes.map(item => {
|
744
|
+
const index = keys.indexOf(item.key);
|
745
|
+
if (index > -1) {
|
746
|
+
return this.config.search.options[index];
|
747
|
+
} else {
|
748
|
+
return item;
|
749
|
+
}
|
750
|
+
});
|
751
|
+
this.config.search.options = nodes;
|
752
|
+
} else {
|
753
|
+
const keys = this.config.table.options.map(item => {
|
754
|
+
return item.key;
|
755
|
+
});
|
756
|
+
|
757
|
+
nodes = nodes.map(item => {
|
758
|
+
const index = keys.indexOf(item.key);
|
759
|
+
if (index > -1) {
|
760
|
+
return this.config.table.options[index];
|
761
|
+
} else {
|
762
|
+
return item;
|
763
|
+
}
|
784
764
|
});
|
785
|
-
this.
|
786
|
-
}
|
765
|
+
this.config.table.options = nodes;
|
766
|
+
}
|
767
|
+
console.log("handleTreeCheckChange =>", nodes);
|
787
768
|
},
|
769
|
+
// 对外暴露表单校验
|
788
770
|
formValidate() {
|
789
771
|
return new Promise((resolve, reject) => {
|
790
772
|
if (this.$refs.formRef) {
|
@@ -865,6 +847,54 @@ export default {
|
|
865
847
|
}
|
866
848
|
}
|
867
849
|
}
|
850
|
+
|
851
|
+
.eventsSetting {
|
852
|
+
height: 100%;
|
853
|
+
|
854
|
+
.events-header {
|
855
|
+
display: flex;
|
856
|
+
align-items: center;
|
857
|
+
justify-content: space-between;
|
858
|
+
padding: 0 10px;
|
859
|
+
height: 40px;
|
860
|
+
background-color: #f2f6fc;
|
861
|
+
z-index: 10;
|
862
|
+
}
|
863
|
+
|
864
|
+
.list {
|
865
|
+
width: 200px;
|
866
|
+
min-height: 430px;
|
867
|
+
overflow-y: overlay;
|
868
|
+
border-right: 1px solid #eee;
|
869
|
+
|
870
|
+
.list-item {
|
871
|
+
display: flex;
|
872
|
+
// align-items: center;
|
873
|
+
margin: 5px;
|
874
|
+
padding: 10px;
|
875
|
+
border-radius: 3px;
|
876
|
+
border: 1px solid #dcdfe6;
|
877
|
+
transition: 0.25s;
|
878
|
+
|
879
|
+
.list-item-title {
|
880
|
+
color: var(--th-green);
|
881
|
+
}
|
882
|
+
.list-item-value {
|
883
|
+
flex: 1;
|
884
|
+
padding: 0 5px;
|
885
|
+
}
|
886
|
+
i {
|
887
|
+
cursor: pointer;
|
888
|
+
}
|
889
|
+
}
|
890
|
+
}
|
891
|
+
|
892
|
+
.detail {
|
893
|
+
.detail-form {
|
894
|
+
padding: 10px;
|
895
|
+
}
|
896
|
+
}
|
897
|
+
}
|
868
898
|
}
|
869
899
|
</style>
|
870
900
|
|
@@ -11,7 +11,13 @@
|
|
11
11
|
<div class="table-item table-header">
|
12
12
|
<div class="table-item-custom">拖动</div>
|
13
13
|
<div>列名</div>
|
14
|
-
|
14
|
+
<el-tooltip
|
15
|
+
content="对应列内容的字段名,支持eval函数,非必要不修改!"
|
16
|
+
placement="top-start"
|
17
|
+
effect="light"
|
18
|
+
>
|
19
|
+
<div><el-button type="text">字段</el-button></div>
|
20
|
+
</el-tooltip>
|
15
21
|
<div>类型</div>
|
16
22
|
<div>默认值</div>
|
17
23
|
<!-- <div>数据来源</div> -->
|
@@ -38,6 +44,7 @@
|
|
38
44
|
<i class="iconfont icon-drag drag-widget"></i>
|
39
45
|
</div>
|
40
46
|
<el-input v-model="item.label" size="mini"></el-input>
|
47
|
+
<el-input v-model="item.pProp" size="mini"></el-input>
|
41
48
|
<div>
|
42
49
|
<el-select
|
43
50
|
v-model="item.elType"
|
@@ -79,11 +86,17 @@
|
|
79
86
|
<div v-else class="search-content"></div>
|
80
87
|
</div>
|
81
88
|
<div class="table-title">列表字段</div>
|
82
|
-
<div class="tableList" style="height: calc(100% -
|
89
|
+
<div class="tableList" style="height: calc(100% - 350px);">
|
83
90
|
<div class="table-item table-header">
|
84
91
|
<div class="table-item-custom">拖动</div>
|
85
92
|
<div>列名</div>
|
86
|
-
|
93
|
+
<el-tooltip
|
94
|
+
content="对应列内容的字段名,支持eval函数,非必要不修改!"
|
95
|
+
placement="top-start"
|
96
|
+
effect="light"
|
97
|
+
>
|
98
|
+
<div><el-button type="text">字段</el-button></div>
|
99
|
+
</el-tooltip>
|
87
100
|
<div>对齐</div>
|
88
101
|
<div>宽度</div>
|
89
102
|
<div class="table-item-custom">排序</div>
|
@@ -109,6 +122,7 @@
|
|
109
122
|
<i class="iconfont icon-drag drag-widget"></i>
|
110
123
|
</div>
|
111
124
|
<el-input v-model="item.label" size="mini"></el-input>
|
125
|
+
<el-input v-model="item.pProp" size="mini"></el-input>
|
112
126
|
<div>
|
113
127
|
<el-select v-model="item.align" placeholder="请选择" size="mini">
|
114
128
|
<el-option
|
@@ -219,9 +233,11 @@ export default {
|
|
219
233
|
|
220
234
|
<style lang="scss" scoped>
|
221
235
|
.widgetTable {
|
222
|
-
height: 100
|
236
|
+
height: calc(100% - 45px);
|
223
237
|
padding: 10px;
|
224
238
|
background-color: white;
|
239
|
+
overflow-y: overlay;
|
240
|
+
|
225
241
|
.table-title {
|
226
242
|
height: 25px;
|
227
243
|
line-height: 25px;
|