tianheng-ui 0.0.72 → 0.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,263 @@
1
+ <template>
2
+ <div class="widgetConfig">
3
+ <div class="tabs">
4
+ <div
5
+ v-for="(item, index) in tabsMenus"
6
+ :key="index"
7
+ class="tabs-item"
8
+ :class="{ 'tabs-item__active': activeTab.value === item.value }"
9
+ @click="handleTabsSelect(item)"
10
+ >
11
+ {{ item.title }}
12
+ </div>
13
+ </div>
14
+ <div v-if="activeTab.value === 0" class="fields">
15
+ <el-checkbox
16
+ :indeterminate="search.isIndeterminate"
17
+ v-model="search.isCheckAll"
18
+ @change="handleSearchCheckAllChange"
19
+ >全选</el-checkbox
20
+ >
21
+ <el-checkbox-group v-model="search.fields" @change="handleChange">
22
+ <el-checkbox
23
+ v-for="(item, index) in fields"
24
+ :label="index"
25
+ :key="index"
26
+ >{{ item.label }}</el-checkbox
27
+ >
28
+ </el-checkbox-group>
29
+ </div>
30
+ <div v-if="activeTab.value === 1" class="fields">
31
+ <el-checkbox
32
+ :indeterminate="table.isIndeterminate"
33
+ v-model="table.isCheckAll"
34
+ @change="handleTableCheckAllChange"
35
+ >全选</el-checkbox
36
+ >
37
+ <el-checkbox-group v-model="table.fields" @change="handleChange">
38
+ <el-checkbox
39
+ v-for="(item, index) in fields"
40
+ :label="index"
41
+ :key="index"
42
+ >{{ item.label }}</el-checkbox
43
+ >
44
+ </el-checkbox-group>
45
+ </div>
46
+ <div v-if="activeTab.value === 2" class="tableConfig">
47
+ <el-form
48
+ :model="tableConfig"
49
+ label-position="left"
50
+ label-width="80px"
51
+ size="mini"
52
+ >
53
+ <el-collapse v-model="tableCollapse" @change="handleChange">
54
+ <el-collapse-item title="表格配置" name="1">
55
+ <el-form-item label="高级查询">
56
+ <el-switch v-model="tableConfig.search"> </el-switch>
57
+ </el-form-item>
58
+ <el-form-item label="排序类型">
59
+ <el-radio-group v-model="tableConfig.sortType">
60
+ <el-radio-button label="1">降序</el-radio-button>
61
+ <el-radio-button label="2">升序</el-radio-button>
62
+ </el-radio-group>
63
+ </el-form-item>
64
+ <el-form-item label="排序字段">
65
+ <el-select v-model="tableConfig.sortField" placeholder="请选择">
66
+ <el-option
67
+ v-for="item in []"
68
+ :key="item.value"
69
+ :label="item.label"
70
+ :value="item.value"
71
+ >
72
+ </el-option>
73
+ </el-select>
74
+ </el-form-item>
75
+ <el-form-item label="分页设置">
76
+ <el-switch v-model="tableConfig.openPaging"> </el-switch>
77
+ </el-form-item>
78
+ <el-form-item label="分页条数">
79
+ <el-radio-group v-model="tableConfig.pageSize">
80
+ <el-radio-button :label="20">20条</el-radio-button>
81
+ <el-radio-button :label="50">50条</el-radio-button>
82
+ <el-radio-button :label="100">100条</el-radio-button>
83
+ <el-radio-button :label="500">500条</el-radio-button>
84
+ </el-radio-group>
85
+ </el-form-item>
86
+ </el-collapse-item>
87
+ <el-collapse-item title="子表配置" name="2">
88
+ <el-form-item label="子表样式">
89
+ <el-select v-model="tableConfig.sortField" placeholder="请选择">
90
+ <el-option
91
+ v-for="item in []"
92
+ :key="item.value"
93
+ :label="item.label"
94
+ :value="item.value"
95
+ >
96
+ </el-option>
97
+ </el-select>
98
+ </el-form-item>
99
+ </el-collapse-item>
100
+ <el-collapse-item title="按钮配置" name="3">
101
+ <div>
102
+ 与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;
103
+ </div>
104
+ </el-collapse-item>
105
+ <el-collapse-item title="权限设置" name="4">
106
+ <div>
107
+ 与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;
108
+ </div>
109
+ </el-collapse-item>
110
+ </el-collapse>
111
+ </el-form>
112
+ </div>
113
+ </div>
114
+ </template>
115
+
116
+ <script>
117
+ export default {
118
+ props: {
119
+ fields: {
120
+ type: Array,
121
+ default: () => {
122
+ return [];
123
+ }
124
+ }
125
+ },
126
+ data() {
127
+ return {
128
+ tabsMenus: [
129
+ { title: "查询字段", value: 0 },
130
+ { title: "列表字段", value: 1 },
131
+ { title: "列表属性", value: 2 }
132
+ ],
133
+ activeTab: { title: "查询字段", value: 0 },
134
+ search: {
135
+ fields: [],
136
+ isCheckAll: false,
137
+ isIndeterminate: false
138
+ },
139
+ table: {
140
+ fields: [],
141
+ isCheckAll: false,
142
+ isIndeterminate: false
143
+ },
144
+ tableCollapse: ["1"],
145
+ tableConfig: {
146
+ search: true,
147
+ sortType: "1",
148
+ sortField: "",
149
+ openPaging: true,
150
+ pageSize: 20
151
+ }
152
+ };
153
+ },
154
+ mounted() {},
155
+ methods: {
156
+ handleTabsSelect(val) {
157
+ this.activeTab = val;
158
+ },
159
+ handleChange() {
160
+ if (this.activeTab.value === 0) {
161
+ const count = this.search.fields.length;
162
+ this.search.isCheckAll = count === this.fields.length;
163
+ this.search.isIndeterminate = count > 0 && count < this.fields.length;
164
+ this.$emit("fields-change", {
165
+ type: this.activeTab.value,
166
+ data: this.search.fields
167
+ });
168
+ } else {
169
+ const count = this.table.fields.length;
170
+ this.table.isCheckAll = count === this.fields.length;
171
+ this.table.isIndeterminate = count > 0 && count < this.fields.length;
172
+ this.$emit("fields-change", {
173
+ type: this.activeTab.value,
174
+ data: this.table.fields
175
+ });
176
+ }
177
+ },
178
+ handleSearchCheckAllChange(val) {
179
+ const list = [];
180
+ if (val) {
181
+ for (let i = 0; i < this.fields.length; i++) {
182
+ list.push(i);
183
+ }
184
+ }
185
+ this.search.fields = list;
186
+ this.search.isIndeterminate = false;
187
+ this.handleChange();
188
+ },
189
+ handleTableCheckAllChange(val) {
190
+ const list = [];
191
+ if (val) {
192
+ for (let i = 0; i < this.fields.length; i++) {
193
+ list.push(i);
194
+ }
195
+ }
196
+ this.table.fields = list;
197
+ this.table.isIndeterminate = false;
198
+ this.handleChange();
199
+ }
200
+ }
201
+ };
202
+ </script>
203
+
204
+ <style lang="scss" scoped>
205
+ .widgetConfig {
206
+ height: 100%;
207
+ background-color: white;
208
+ .tabs {
209
+ display: flex;
210
+ align-items: center;
211
+ height: 45px;
212
+ border-bottom: 1px solid #dcdfe6;
213
+ box-sizing: border-box;
214
+
215
+ .tabs-item {
216
+ flex: 1;
217
+ text-align: center;
218
+ line-height: 44px;
219
+ cursor: pointer;
220
+ }
221
+ .tabs-item__active {
222
+ border-bottom: 2px solid #409eff;
223
+ }
224
+ }
225
+
226
+ .fields {
227
+ height: calc(100% - 45px);
228
+ .fields-item {
229
+ padding: 0 10px;
230
+ height: 30px;
231
+ line-height: 30px;
232
+ }
233
+
234
+ .el-checkbox {
235
+ padding: 0 10px;
236
+ width: 100%;
237
+ height: 30px;
238
+ line-height: 30px;
239
+ }
240
+ }
241
+
242
+ .tableConfig {
243
+ height: calc(100% - 45px);
244
+ }
245
+ }
246
+ </style>
247
+
248
+ <style lang="scss">
249
+ .tableConfig {
250
+ .el-collapse-item__header {
251
+ padding: 0 10px;
252
+ height: 40px;
253
+ line-height: 40px;
254
+ background-color: #f5f7f9;
255
+ }
256
+ .el-collapse-item__wrap {
257
+ padding: 10px;
258
+ }
259
+ .el-radio-button__inner {
260
+ padding: 7px;
261
+ }
262
+ }
263
+ </style>
@@ -0,0 +1,240 @@
1
+ <template>
2
+ <div class="widgetTable">
3
+ <div class="table-title">查询字段</div>
4
+ <div class="searchList">
5
+ <div class="table-header">
6
+ <div>拖动</div>
7
+ <div>列名</div>
8
+ <div>字段</div>
9
+ <div>类型</div>
10
+ </div>
11
+ <draggable
12
+ class="table-content"
13
+ v-model="searchData"
14
+ v-bind="{
15
+ group: 'people',
16
+ ghostClass: 'ghost',
17
+ animation: 200,
18
+ handle: '.drag-widget'
19
+ }"
20
+ @end="handleSearchMoveEnd"
21
+ >
22
+ <div
23
+ v-for="item in searchData"
24
+ :key="item.key"
25
+ class="table-content-item"
26
+ >
27
+ <div class="drag">
28
+ <i class="iconfont icon-drag drag-widget"></i>
29
+ </div>
30
+ <div>{{ item.label }}</div>
31
+ <div>{{ item.prop }}</div>
32
+ <div>{{ item.type }}</div>
33
+ </div>
34
+ </draggable>
35
+ </div>
36
+ <div class="table-title">列表字段</div>
37
+ <div class="tableList">
38
+ <div class="table-header">
39
+ <div>拖动</div>
40
+ <div>列名</div>
41
+ <div>字段</div>
42
+ <div>排序</div>
43
+ <div>对齐</div>
44
+ <div>宽度</div>
45
+ </div>
46
+ <draggable
47
+ class="table-content"
48
+ v-model="tableData"
49
+ v-bind="{
50
+ group: 'people',
51
+ ghostClass: 'ghost',
52
+ animation: 200,
53
+ handle: '.drag-widget'
54
+ }"
55
+ @end="handleTableMoveEnd"
56
+ >
57
+ <div
58
+ v-for="item in tableData"
59
+ :key="item.key"
60
+ class="table-content-item"
61
+ >
62
+ <div class="drag">
63
+ <i class="iconfont icon-drag drag-widget"></i>
64
+ </div>
65
+ <div>{{ item.label }}</div>
66
+ <div>{{ item.prop }}</div>
67
+ <div><el-checkbox v-model="item.sortable"></el-checkbox></div>
68
+ <div>
69
+ <el-select v-model="item.align" placeholder="请选择" size="mini">
70
+ <el-option
71
+ v-for="item in ['left', 'center', 'right']"
72
+ :key="item"
73
+ :label="item"
74
+ :value="item"
75
+ >
76
+ </el-option>
77
+ </el-select>
78
+ </div>
79
+ <div>
80
+ <el-input-number
81
+ v-model="item.width"
82
+ controls-position="right"
83
+ :min="0"
84
+ size="mini"
85
+ ></el-input-number>
86
+ </div>
87
+ </div>
88
+ </draggable>
89
+ </div>
90
+ </div>
91
+ </template>
92
+
93
+ <script>
94
+ import Draggable from "vuedraggable";
95
+ export default {
96
+ components: { Draggable },
97
+ props: {
98
+ searchFields: {
99
+ type: Array,
100
+ default: () => {
101
+ return [];
102
+ }
103
+ },
104
+ tableFields: {
105
+ type: Array,
106
+ default: () => {
107
+ return [];
108
+ }
109
+ }
110
+ },
111
+ data() {
112
+ return {
113
+ searchData: this.searchFields,
114
+ tableData: this.tableFields
115
+ };
116
+ },
117
+ watch: {
118
+ searchData: {
119
+ handler(val) {
120
+ this.$emit("update:searchFields", val);
121
+ },
122
+ deep: true
123
+ },
124
+ searchFields(val) {
125
+ this.searchData = val;
126
+ },
127
+ tableData: {
128
+ handler(val) {
129
+ this.$emit("update:tableFields", val);
130
+ },
131
+ deep: true
132
+ },
133
+ tableFields(val) {
134
+ this.tableData = val;
135
+ }
136
+ },
137
+ mounted() {},
138
+ methods: {
139
+ handleSearchMoveEnd(val) {
140
+ this.$emit("move", { type: "search", data: val });
141
+ },
142
+ handleTableMoveEnd(val) {
143
+ this.$emit("move", { type: "table", data: val });
144
+ }
145
+ }
146
+ };
147
+ </script>
148
+
149
+ <style lang="scss" scoped>
150
+ .widgetTable {
151
+ height: 100%;
152
+ padding: 10px;
153
+ background-color: white;
154
+ .table-title {
155
+ height: 25px;
156
+ line-height: 25px;
157
+ }
158
+ .searchList {
159
+ margin: 10px 0;
160
+ border: 1px solid #dcdfe6;
161
+ box-sizing: border-box;
162
+
163
+ .table-content {
164
+ height: 160px;
165
+ overflow-y: scroll;
166
+ }
167
+ }
168
+ .tableList {
169
+ margin-top: 10px;
170
+ height: calc(100% - 280px);
171
+ border: 1px solid #dcdfe6;
172
+
173
+ .table-header {
174
+ div:nth-child(4) {
175
+ flex: none;
176
+ width: 60px !important;
177
+ }
178
+ }
179
+ .table-content {
180
+ height: calc(100% - 40px);
181
+ overflow-y: scroll;
182
+ }
183
+ .table-content .table-content-item > div:nth-child(4) {
184
+ flex: none;
185
+ width: 60px !important;
186
+ }
187
+ .el-input-number--mini {
188
+ width: 100%;
189
+ }
190
+ }
191
+
192
+ .table-header {
193
+ display: flex;
194
+ align-items: center;
195
+ background-color: #f5f7f9;
196
+ div {
197
+ flex: 1;
198
+ padding: 0 10px;
199
+ height: 40px;
200
+ line-height: 40px;
201
+ }
202
+ div:nth-child(1) {
203
+ flex: none;
204
+ width: 60px;
205
+ text-align: center;
206
+ }
207
+ }
208
+ .table-content {
209
+ .table-content-item {
210
+ display: flex;
211
+ align-items: center;
212
+
213
+ .drag {
214
+ i {
215
+ font-size: 14px;
216
+ margin: 0 5px;
217
+ cursor: move;
218
+ }
219
+ }
220
+ > div {
221
+ flex: 1;
222
+ height: 40px;
223
+ line-height: 40px;
224
+ padding: 0 10px;
225
+ }
226
+ > div:nth-child(1) {
227
+ flex: none;
228
+ width: 60px;
229
+ text-align: center;
230
+ }
231
+ }
232
+ }
233
+ .table-content:hover::-webkit-scrollbar-thumb {
234
+ background-color: rgba(69, 90, 100, 0.2);
235
+ }
236
+ .table-content:hover::-webkit-scrollbar-thumb {
237
+ background-color: rgba(69, 90, 100, 0.2);
238
+ }
239
+ }
240
+ </style>
package/packages/index.js CHANGED
@@ -41,6 +41,7 @@ import Col from "./Col/index.js";
41
41
  import Upload from "./Upload/index.js";
42
42
  import FormMaking from "./FormMaking/making.js";
43
43
  import FormGenerate from "./FormMaking/generate.js";
44
+ import TableMaking from "./TableMaking/making.js";
44
45
  import Workflow from "../packages/Workflow/index.js";
45
46
 
46
47
  const components = [
@@ -65,6 +66,7 @@ const components = [
65
66
  Upload,
66
67
  FormMaking,
67
68
  FormGenerate,
69
+ TableMaking,
68
70
  Workflow
69
71
  ];
70
72
 
@@ -108,6 +110,7 @@ export default {
108
110
  Upload,
109
111
  FormMaking,
110
112
  FormGenerate,
113
+ TableMaking,
111
114
  Workflow
112
115
  };
113
116
 
@@ -134,5 +137,6 @@ export {
134
137
  Upload,
135
138
  FormMaking,
136
139
  FormGenerate,
140
+ TableMaking,
137
141
  Workflow
138
142
  };