tianheng-ui 0.0.37 → 0.0.40

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.
Files changed (36) hide show
  1. package/lib/iconfont.eot +0 -0
  2. package/lib/iconfont.svg +155 -0
  3. package/lib/iconfont.ttf +0 -0
  4. package/lib/iconfont.woff +0 -0
  5. package/lib/index.js +5 -2
  6. package/lib/tianheng-ui.js +34 -1
  7. package/lib/tianheng-ui.js.map +1 -1
  8. package/package.json +8 -2
  9. package/packages/formMaking/Container.vue +592 -0
  10. package/packages/formMaking/CusDialog.vue +134 -0
  11. package/packages/formMaking/FormConfig.vue +31 -0
  12. package/packages/formMaking/GenerateForm.vue +184 -0
  13. package/packages/formMaking/GenerateFormItem.vue +266 -0
  14. package/packages/formMaking/Upload/index.vue +451 -0
  15. package/packages/formMaking/WidgetConfig.vue +498 -0
  16. package/packages/formMaking/WidgetForm.vue +217 -0
  17. package/packages/formMaking/WidgetFormItem.vue +284 -0
  18. package/packages/formMaking/componentsConfig.js +313 -0
  19. package/packages/formMaking/generateCode.js +155 -0
  20. package/packages/formMaking/iconfont/demo.css +539 -0
  21. package/packages/formMaking/iconfont/demo_index.html +1159 -0
  22. package/packages/formMaking/iconfont/iconfont.css +189 -0
  23. package/packages/formMaking/iconfont/iconfont.eot +0 -0
  24. package/packages/formMaking/iconfont/iconfont.js +1 -0
  25. package/packages/formMaking/iconfont/iconfont.svg +155 -0
  26. package/packages/formMaking/iconfont/iconfont.ttf +0 -0
  27. package/packages/formMaking/iconfont/iconfont.woff +0 -0
  28. package/packages/formMaking/iconfont/iconfont.woff2 +0 -0
  29. package/packages/formMaking/index.js +79 -0
  30. package/packages/formMaking/lang/en-US.js +187 -0
  31. package/packages/formMaking/lang/zh-CN.js +187 -0
  32. package/packages/formMaking/styles/cover.scss +41 -0
  33. package/packages/formMaking/styles/index.scss +746 -0
  34. package/packages/formMaking/util/index.js +33 -0
  35. package/packages/formMaking/util/request.js +28 -0
  36. package/packages/table/action.vue +3 -3
@@ -0,0 +1,134 @@
1
+ <template>
2
+ <el-dialog
3
+ class="cus-dialog-container"
4
+ :title="title"
5
+ :visible.sync="dialogVisible"
6
+ :close-on-click-modal="false"
7
+ append-to-body
8
+ center
9
+ :width="width"
10
+ ref="elDialog"
11
+ :id="id"
12
+ >
13
+ <span v-if="show">
14
+ <slot></slot>
15
+ </span>
16
+
17
+ <span v-if="action" slot="footer" class="dialog-footer" v-loading="loading"
18
+ :element-loading-text="loadingText">
19
+ <slot name="action">
20
+ <el-button @click="close">{{$t('fm.actions.cancel')}}</el-button>
21
+ <el-button type="primary" @click="submit" >{{$t('fm.actions.confirm')}}</el-button>
22
+ </slot>
23
+ </span>
24
+ </el-dialog>
25
+ </template>
26
+
27
+ <script>
28
+ export default {
29
+ props: {
30
+ visible: Boolean,
31
+ loadingText: {
32
+ type: String,
33
+ default: ''
34
+ },
35
+ title: {
36
+ type: String,
37
+ default: ''
38
+ },
39
+ width: {
40
+ type: String,
41
+ default: '600px'
42
+ },
43
+ form: {
44
+ type: Boolean,
45
+ default: true
46
+ },
47
+ action: {
48
+ type: Boolean,
49
+ default: true
50
+ }
51
+ },
52
+ computed: {
53
+ show () {
54
+ if (this.form) {
55
+ return this.showForm
56
+ } else {
57
+ return true
58
+ }
59
+ }
60
+ },
61
+ data () {
62
+ return {
63
+ loading: false,
64
+ dialogVisible: this.visible,
65
+ id: 'dialog_' + new Date().getTime(),
66
+ showForm: false
67
+ }
68
+ },
69
+ methods: {
70
+ close () {
71
+ this.dialogVisible = false
72
+ },
73
+ submit () {
74
+ this.loading = true
75
+
76
+ this.$emit('on-submit')
77
+ },
78
+ end () {
79
+ this.loading = false
80
+ }
81
+ },
82
+ mounted () {
83
+ },
84
+ watch: {
85
+ dialogVisible (val) {
86
+ if (!val) {
87
+ this.loading = false
88
+ this.$emit('on-close')
89
+ setTimeout(() => {
90
+ this.showForm = false
91
+ }, 300)
92
+ } else {
93
+ this.showForm = true
94
+ }
95
+ },
96
+ visible (val) {
97
+ this.dialogVisible = val
98
+ }
99
+ }
100
+ }
101
+ </script>
102
+
103
+ <style lang="scss">
104
+ .cus-dialog-container{
105
+ .el-dialog__footer{
106
+ margin: 0 20px;
107
+ // border-top: 1px dashed #ccc;
108
+ padding: 15px 0 16px;
109
+ text-align: center;
110
+ position: relative;
111
+
112
+ .dialog-footer{
113
+ display: block;
114
+
115
+ .circular{
116
+ display: inline-block;
117
+ vertical-align: middle;
118
+ margin-right: 5px;
119
+ width: 24px;
120
+ height: 24px;
121
+ }
122
+
123
+ .el-loading-text{
124
+ display: inline-block;
125
+ vertical-align: middle;
126
+ }
127
+
128
+ .el-loading-spinner{
129
+ margin-top: -12px;
130
+ }
131
+ }
132
+ }
133
+ }
134
+ </style>
@@ -0,0 +1,31 @@
1
+ <template>
2
+ <div class="form-config-container">
3
+ <el-form label-position="top">
4
+ <el-form-item :label="$t('fm.config.form.labelPosition.title')">
5
+ <el-radio-group v-model="data.labelPosition">
6
+ <el-radio-button label="left">{{$t('fm.config.form.labelPosition.left')}}</el-radio-button>
7
+ <el-radio-button label="right">{{$t('fm.config.form.labelPosition.right')}}</el-radio-button>
8
+ <el-radio-button label="top">{{$t('fm.config.form.labelPosition.top')}}</el-radio-button>
9
+ </el-radio-group>
10
+ </el-form-item>
11
+
12
+ <el-form-item :label="$t('fm.config.form.labelWidth')">
13
+ <el-input-number v-model="data.labelWidth" :min="0" :max="200" :step="10"></el-input-number>
14
+ </el-form-item>
15
+
16
+ <el-form-item :label="$t('fm.config.form.size')">
17
+ <el-radio-group v-model="data.size">
18
+ <el-radio-button label="medium">medium</el-radio-button>
19
+ <el-radio-button label="small">small</el-radio-button>
20
+ <el-radio-button label="mini">mini</el-radio-button>
21
+ </el-radio-group>
22
+ </el-form-item>
23
+ </el-form>
24
+ </div>
25
+ </template>
26
+
27
+ <script>
28
+ export default {
29
+ props: ['data']
30
+ }
31
+ </script>
@@ -0,0 +1,184 @@
1
+ <template>
2
+ <div class="fm-style">
3
+ <el-form
4
+ ref="generateForm"
5
+ label-suffix=":"
6
+ :size="data.config.size"
7
+ :model="models"
8
+ :rules="rules"
9
+ :label-position="data.config.labelPosition"
10
+ :label-width="data.config.labelWidth + 'px'"
11
+ >
12
+ <template v-for="item in data.list">
13
+ <template v-if="item.type == 'grid'">
14
+ <el-row
15
+ :key="item.key"
16
+ type="flex"
17
+ :gutter="item.options.gutter ? item.options.gutter : 0"
18
+ :justify="item.options.justify"
19
+ :align="item.options.align"
20
+ >
21
+ <el-col
22
+ v-for="(col, colIndex) in item.columns"
23
+ :key="colIndex"
24
+ :span="col.span"
25
+ >
26
+ <template v-for="citem in col.list">
27
+ <el-form-item
28
+ v-if="citem.type == 'blank'"
29
+ :label="citem.name"
30
+ :prop="citem.model"
31
+ :key="citem.key"
32
+ >
33
+ <slot :name="citem.model" :model="models"></slot>
34
+ </el-form-item>
35
+ <genetate-form-item
36
+ v-else
37
+ :key="citem.key"
38
+ :models.sync="models"
39
+ :remote="remote"
40
+ :rules="rules"
41
+ :widget="citem"
42
+ @input-change="onInputChange"
43
+ >
44
+ </genetate-form-item>
45
+ </template>
46
+ </el-col>
47
+ </el-row>
48
+ </template>
49
+
50
+ <template v-else-if="item.type == 'blank'">
51
+ <el-form-item :label="item.name" :prop="item.model" :key="item.key">
52
+ <slot :name="item.model" :model="models"></slot>
53
+ </el-form-item>
54
+ </template>
55
+
56
+ <template v-else>
57
+ <genetate-form-item
58
+ :key="item.key"
59
+ :models.sync="models"
60
+ :rules="rules"
61
+ :widget="item"
62
+ @input-change="onInputChange"
63
+ :remote="remote"
64
+ >
65
+ </genetate-form-item>
66
+ </template>
67
+ </template>
68
+ </el-form>
69
+ </div>
70
+ </template>
71
+
72
+ <script>
73
+ import GenetateFormItem from "./GenerateFormItem";
74
+
75
+ export default {
76
+ name: "fm-generate-form",
77
+ components: {
78
+ GenetateFormItem,
79
+ },
80
+ props: ["data", "remote", "value", "insite"],
81
+ data() {
82
+ return {
83
+ models: {},
84
+ rules: {},
85
+ };
86
+ },
87
+ created() {
88
+ this.generateModle(this.data.list);
89
+ },
90
+ mounted() {},
91
+ methods: {
92
+ generateModle(genList) {
93
+ for (let i = 0; i < genList.length; i++) {
94
+ if (genList[i].type === "grid") {
95
+ genList[i].columns.forEach((item) => {
96
+ this.generateModle(item.list);
97
+ });
98
+ } else {
99
+ if (
100
+ this.value &&
101
+ Object.keys(this.value).indexOf(genList[i].model) >= 0
102
+ ) {
103
+ this.models[genList[i].model] = this.value[genList[i].model];
104
+ } else {
105
+ if (genList[i].type === "blank") {
106
+ this.$set(
107
+ this.models,
108
+ genList[i].model,
109
+ genList[i].options.defaultType === "String"
110
+ ? ""
111
+ : genList[i].options.defaultType === "Object"
112
+ ? {}
113
+ : []
114
+ );
115
+ } else {
116
+ this.models[genList[i].model] = genList[i].options.defaultValue;
117
+ }
118
+ }
119
+
120
+ if (this.rules[genList[i].model]) {
121
+ this.rules[genList[i].model] = [
122
+ ...this.rules[genList[i].model],
123
+ ...genList[i].rules.map((item) => {
124
+ if (item.pattern) {
125
+ return { ...item, pattern: new RegExp(item.pattern) };
126
+ } else {
127
+ return { ...item };
128
+ }
129
+ }),
130
+ ];
131
+ } else {
132
+ this.rules[genList[i].model] = [
133
+ ...genList[i].rules.map((item) => {
134
+ if (item.pattern) {
135
+ return { ...item, pattern: new RegExp(item.pattern) };
136
+ } else {
137
+ return { ...item };
138
+ }
139
+ }),
140
+ ];
141
+ }
142
+ }
143
+ }
144
+ },
145
+ getData() {
146
+ return new Promise((resolve, reject) => {
147
+ this.$refs.generateForm.validate((valid) => {
148
+ if (valid) {
149
+ resolve(this.models);
150
+ } else {
151
+ reject(new Error(this.$t("fm.message.validError")).message);
152
+ }
153
+ });
154
+ });
155
+ },
156
+ reset() {
157
+ this.$refs.generateForm.resetFields();
158
+ },
159
+ onInputChange(value, field) {
160
+ this.$emit("on-change", field, value, this.models);
161
+ },
162
+ refresh() {},
163
+ },
164
+ watch: {
165
+ data: {
166
+ deep: true,
167
+ handler(val) {
168
+ this.generateModle(val.list);
169
+ },
170
+ },
171
+ value: {
172
+ deep: true,
173
+ handler(val) {
174
+ console.log(JSON.stringify(val));
175
+ this.models = { ...this.models, ...val };
176
+ },
177
+ },
178
+ },
179
+ };
180
+ </script>
181
+
182
+ <style lang="scss">
183
+ // @import '../styles/cover.scss';
184
+ </style>
@@ -0,0 +1,266 @@
1
+ <template>
2
+ <el-form-item :label="widget.name" :prop="widget.model">
3
+ <template v-if="widget.type == 'input'" >
4
+ <el-input
5
+ v-if="widget.options.dataType == 'number' || widget.options.dataType == 'integer' || widget.options.dataType == 'float'"
6
+ type="number"
7
+ v-model.number="dataModel"
8
+ :placeholder="widget.options.placeholder"
9
+ :style="{width: widget.options.width}"
10
+ :disabled="widget.options.disabled"
11
+ ></el-input>
12
+ <el-input
13
+ v-else
14
+ type="text"
15
+ v-model="dataModel"
16
+ :disabled="widget.options.disabled"
17
+ :placeholder="widget.options.placeholder"
18
+ :style="{width: widget.options.width}"
19
+ :maxlength="widget.options.maxlength"
20
+ :show-word-limit="widget.options.showWordLimit"
21
+ ></el-input>
22
+ </template>
23
+
24
+ <template v-if="widget.type == 'textarea'">
25
+ <el-input type="textarea" :rows="5"
26
+ v-model="dataModel"
27
+ :disabled="widget.options.disabled"
28
+ :placeholder="widget.options.placeholder"
29
+ :style="{width: widget.options.width}"
30
+ :maxlength="widget.options.maxlength"
31
+ :show-word-limit="widget.options.showWordLimit"
32
+ ></el-input>
33
+ </template>
34
+
35
+ <template v-if="widget.type == 'number'">
36
+ <el-input-number
37
+ v-model="dataModel"
38
+ :style="{width: widget.options.width}"
39
+ :step="widget.options.step"
40
+ controls-position="right"
41
+ :disabled="widget.options.disabled"
42
+ :min="widget.options.min"
43
+ :max="widget.options.max"
44
+ ></el-input-number>
45
+ </template>
46
+
47
+ <template v-if="widget.type == 'radio'">
48
+ <el-radio-group v-model="dataModel"
49
+ :style="{width: widget.options.width}"
50
+ :disabled="widget.options.disabled"
51
+ >
52
+ <el-radio
53
+ :style="{display: widget.options.inline ? 'inline-block' : 'block'}"
54
+ :label="item.value" v-for="(item, index) in (widget.options.remote ? widget.options.remoteOptions : widget.options.options)" :key="index"
55
+ >
56
+ <template v-if="widget.options.remote">{{item.label}}</template>
57
+ <template v-else>{{widget.options.showLabel ? item.label : item.value}}</template>
58
+ </el-radio>
59
+ </el-radio-group>
60
+ </template>
61
+
62
+ <template v-if="widget.type == 'checkbox'">
63
+ <el-checkbox-group v-model="dataModel"
64
+ :style="{width: widget.options.width}"
65
+ :disabled="widget.options.disabled"
66
+ >
67
+ <el-checkbox
68
+
69
+ :style="{display: widget.options.inline ? 'inline-block' : 'block'}"
70
+ :label="item.value" v-for="(item, index) in (widget.options.remote ? widget.options.remoteOptions : widget.options.options)" :key="index"
71
+ >
72
+ <template v-if="widget.options.remote">{{item.label}}</template>
73
+ <template v-else>{{widget.options.showLabel ? item.label : item.value}}</template>
74
+ </el-checkbox>
75
+ </el-checkbox-group>
76
+ </template>
77
+
78
+ <template v-if="widget.type == 'time'">
79
+ <el-time-picker
80
+ v-model="dataModel"
81
+ :is-range="widget.options.isRange"
82
+ :placeholder="widget.options.placeholder"
83
+ :start-placeholder="widget.options.startPlaceholder"
84
+ :end-placeholder="widget.options.endPlaceholder"
85
+ :readonly="widget.options.readonly"
86
+ :disabled="widget.options.disabled"
87
+ :editable="widget.options.editable"
88
+ :clearable="widget.options.clearable"
89
+ :arrowControl="widget.options.arrowControl"
90
+ :value-format="widget.options.format"
91
+ :style="{width: widget.options.width}"
92
+ >
93
+ </el-time-picker>
94
+ </template>
95
+
96
+ <template v-if="widget.type=='date'">
97
+ <el-date-picker
98
+ v-model="dataModel"
99
+ :type="widget.options.type"
100
+ :placeholder="widget.options.placeholder"
101
+ :start-placeholder="widget.options.startPlaceholder"
102
+ :end-placeholder="widget.options.endPlaceholder"
103
+ :readonly="widget.options.readonly"
104
+ :disabled="widget.options.disabled"
105
+ :editable="widget.options.editable"
106
+ :clearable="widget.options.clearable"
107
+ :value-format="widget.options.timestamp ? 'timestamp' : widget.options.format"
108
+ :format="widget.options.format"
109
+ :style="{width: widget.options.width}"
110
+ >
111
+ </el-date-picker>
112
+ </template>
113
+
114
+ <template v-if="widget.type =='rate'">
115
+ <el-rate v-model="dataModel"
116
+ :max="widget.options.max"
117
+ :disabled="widget.options.disabled"
118
+ :allow-half="widget.options.allowHalf"
119
+ ></el-rate>
120
+ </template>
121
+
122
+ <template v-if="widget.type == 'color'">
123
+ <el-color-picker
124
+ v-model="dataModel"
125
+ :disabled="widget.options.disabled"
126
+ :show-alpha="widget.options.showAlpha"
127
+ ></el-color-picker>
128
+ </template>
129
+
130
+ <template v-if="widget.type == 'select'">
131
+ <el-select
132
+ v-model="dataModel"
133
+ :disabled="widget.options.disabled"
134
+ :multiple="widget.options.multiple"
135
+ :clearable="widget.options.clearable"
136
+ :placeholder="widget.options.placeholder"
137
+ :style="{width: widget.options.width}"
138
+ :filterable="widget.options.filterable"
139
+ >
140
+ <el-option v-for="item in (widget.options.remote ? widget.options.remoteOptions : widget.options.options)" :key="item.value" :value="item.value" :label="widget.options.showLabel || widget.options.remote?item.label:item.value"></el-option>
141
+ </el-select>
142
+ </template>
143
+
144
+ <template v-if="widget.type=='switch'">
145
+ <el-switch
146
+ v-model="dataModel"
147
+ :disabled="widget.options.disabled"
148
+ >
149
+ </el-switch>
150
+ </template>
151
+
152
+ <template v-if="widget.type=='slider'">
153
+ <el-slider
154
+ v-model="dataModel"
155
+ :min="widget.options.min"
156
+ :max="widget.options.max"
157
+ :disabled="widget.options.disabled"
158
+ :step="widget.options.step"
159
+ :show-input="widget.options.showInput"
160
+ :range="widget.options.range"
161
+ :style="{width: widget.options.width}"
162
+ ></el-slider>
163
+ </template>
164
+
165
+ <template v-if="widget.type=='imgupload'">
166
+ <fm-upload
167
+ v-model="dataModel"
168
+ :disabled="widget.options.disabled"
169
+ :style="{'width': widget.options.width}"
170
+ :width="widget.options.size.width"
171
+ :height="widget.options.size.height"
172
+ :token="widget.options.token"
173
+ :domain="widget.options.domain"
174
+ :multiple="widget.options.multiple"
175
+ :length="widget.options.length"
176
+ :is-qiniu="widget.options.isQiniu"
177
+ :is-delete="widget.options.isDelete"
178
+ :min="widget.options.min"
179
+ :is-edit="widget.options.isEdit"
180
+ :action="widget.options.action"
181
+ >
182
+ </fm-upload>
183
+ </template>
184
+
185
+ <template v-if="widget.type == 'editor'">
186
+ <vue-editor
187
+ v-model="dataModel"
188
+ :style="{width: widget.options.width}"
189
+ >
190
+ </vue-editor>
191
+ </template>
192
+
193
+ <template v-if="widget.type == 'cascader'">
194
+ <el-cascader
195
+ v-model="dataModel"
196
+ :disabled="widget.options.disabled"
197
+ :clearable="widget.options.clearable"
198
+ :placeholder="widget.options.placeholder"
199
+ :style="{width: widget.options.width}"
200
+ :options="widget.options.remoteOptions"
201
+ >
202
+
203
+ </el-cascader>
204
+ </template>
205
+
206
+ <template v-if="widget.type == 'text'">
207
+ <span>{{dataModel}}</span>
208
+ </template>
209
+ </el-form-item>
210
+ </template>
211
+
212
+ <script>
213
+ import FmUpload from './Upload'
214
+
215
+ export default {
216
+ props: ['widget', 'models', 'rules', 'remote'],
217
+ components: {
218
+ FmUpload
219
+ },
220
+ data () {
221
+ return {
222
+ dataModel: this.models[this.widget.model]
223
+ }
224
+ },
225
+ created () {
226
+ if (this.widget.options.remote && this.remote[this.widget.options.remoteFunc]) {
227
+ this.remote[this.widget.options.remoteFunc]((data) => {
228
+ this.widget.options.remoteOptions = data.map(item => {
229
+ return {
230
+ value: item[this.widget.options.props.value],
231
+ label: item[this.widget.options.props.label],
232
+ children: item[this.widget.options.props.children]
233
+ }
234
+ })
235
+ })
236
+ }
237
+
238
+ if (this.widget.type === 'imgupload' && this.widget.options.isQiniu) {
239
+ this.remote[this.widget.options.tokenFunc]((data) => {
240
+ this.widget.options.token = data
241
+ })
242
+ }
243
+ },
244
+ methods: {
245
+ },
246
+ watch: {
247
+ dataModel: {
248
+ deep: true,
249
+ handler (val) {
250
+ this.models[this.widget.model] = val
251
+ this.$emit('update:models', {
252
+ ...this.models,
253
+ [this.widget.model]: val
254
+ })
255
+ this.$emit('input-change', val, this.widget.model)
256
+ }
257
+ },
258
+ models: {
259
+ deep: true,
260
+ handler (val) {
261
+ this.dataModel = val[this.widget.model]
262
+ }
263
+ }
264
+ }
265
+ }
266
+ </script>