@tongfun/tf-widget 0.1.30 → 0.1.31
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/README.md +274 -2
- package/lib/tf-widget.common.js +93129 -23325
- package/lib/tf-widget.umd.js +93129 -23325
- package/lib/tf-widget.umd.min.js +17 -4
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# TF-Widget
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
## 目录
|
|
4
|
+
- [版本更新说明](#1-版本更新记录)
|
|
5
|
+
- [使用文档](#2-组件使用文档)
|
|
6
|
+
- [tinput](#21-tinput组件)
|
|
7
|
+
- [FormBody](#22-formbody单据体组件)
|
|
8
|
+
- [FormBodyItem](#23-formbodyitem-组件)
|
|
9
|
+
|
|
10
|
+
## 1 版本更新记录
|
|
3
11
|
|
|
4
12
|
## 🍎 0.1.30
|
|
5
13
|
|
|
@@ -85,5 +93,269 @@
|
|
|
85
93
|
⭐ 1.组件库初始化
|
|
86
94
|
|
|
87
95
|
|
|
88
|
-
##
|
|
96
|
+
## 2 组件使用文档
|
|
97
|
+
|
|
98
|
+
### **2.1 tinput组件**
|
|
99
|
+
|
|
100
|
+
此组件包含除了基础资料外的常见基本组件,提供统一的样式,和统一入口,基本配置</br>
|
|
101
|
+
组件默认在el-form表单中使用,也可以在表单之外使用
|
|
102
|
+
|
|
103
|
+
#### (1)基本使用
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<el-form :model='form'>
|
|
107
|
+
<!-- 文本输入框 -->
|
|
108
|
+
<Tinput v-model="form.test" title="输入框" type="input" />
|
|
109
|
+
<!-- 文本输入框 input可以省略 -->
|
|
110
|
+
<Tinput v-model="form.test" title="输入框" />
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
<!-- 文本域输入 -->
|
|
114
|
+
<Tinput v-model="form.test2" title="文本" type="text" />
|
|
115
|
+
<!-- 可以通过rows指定文本域的行数,默认3行 -->
|
|
116
|
+
<Tinput v-model="form.test2" title="文本" type="text" :rows='5' />
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
<!-- 日期和日期时间输入 -->
|
|
120
|
+
<Tinput v-model="form.test3" title="日期" type="date" />
|
|
121
|
+
<Tinput v-model="form.test4" title="日期时间" type="datetime" />
|
|
122
|
+
|
|
123
|
+
<!-- 数字输入 数字输入必须保障双向绑定到的属性值是undefined -->
|
|
124
|
+
<Tinput v-model="form.test5" title="整数" type="integer" />
|
|
125
|
+
<Tinput v-model="form.test6" title="小数" type="decimal" :percision='4' />
|
|
126
|
+
|
|
127
|
+
<!-- 选择框 绑定的对象必须{name:null,id:null} 格式-->
|
|
128
|
+
<!-- enumType是获取选项的参数 可查看租户管理枚举配置中获取 -->
|
|
129
|
+
<Tinput v-model="form.test7" title="下拉选择框" type="select" enumType='UP_DOWN'/>
|
|
130
|
+
|
|
131
|
+
<!--基础资料展示字段 用于创建人,创建时间等永远不会被更改的字段,可以节省性能和内存-->
|
|
132
|
+
<Tinput v-model="form.test8" title="基础资料展示字段" type="basicDisplay" />
|
|
133
|
+
<!--使用老版本的通用crud的基础资料,需要提供表名称-->
|
|
134
|
+
<Tinput v-model="form.test9" title="通用的基础资料" type="basicData" :table-config="{enum:tableEnum,name:'b_basic_brand'}"/>
|
|
135
|
+
<!--定制的基础资料 -->
|
|
136
|
+
<Tinput title="定制的基础资料" type="basicCus" >
|
|
137
|
+
<BasicData v-model="form.test10" type='employy' @dataConfirm="handleEmployyConfirm"/>
|
|
138
|
+
</Tinput>
|
|
139
|
+
<!--新的通用列表组成的基础资料组件 target是接口的地址 的一部分,后端用于区分不同表单的依据 -->
|
|
140
|
+
<Tinput title="新版通用基础资料" v-model="form.test8" type="basic" target="/stock/material"></Tinput>
|
|
141
|
+
<!-- 附件上传 -->
|
|
142
|
+
<Tinput v-model="form.test11" label-width="0" type="file" :file-list="fileList"/>
|
|
143
|
+
</el-form>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
// in vue template file
|
|
148
|
+
data(){
|
|
149
|
+
return {
|
|
150
|
+
// 以下仅仅是解释,对应类型的数据是什么样子,实际开发中也可以不在form中添加对应的属性,tinput 控件会根据绑定的属性自动创建
|
|
151
|
+
// 为了代码的可维护性,在form加入明确的字段是明智的选择
|
|
152
|
+
form:{
|
|
153
|
+
test:null,
|
|
154
|
+
test2:null,
|
|
155
|
+
test3:null,
|
|
156
|
+
test4:null,
|
|
157
|
+
// 数字类型的值初始值必须是undefined
|
|
158
|
+
test5:undefined,
|
|
159
|
+
test6:undefined,
|
|
160
|
+
// 下拉框和基础资料的初始值必须是以下的对象格式
|
|
161
|
+
test7:{name:null,id:null},
|
|
162
|
+
test8:{name:null,id:null},
|
|
163
|
+
test9:{name:null,id:null},
|
|
164
|
+
test10:{name:null,id:null},
|
|
165
|
+
/**
|
|
166
|
+
* 附件类型需要是数组格式
|
|
167
|
+
* v-model:向后端传递的参数
|
|
168
|
+
* fileList:上传附件的列表
|
|
169
|
+
*/
|
|
170
|
+
test11:[],
|
|
171
|
+
},
|
|
172
|
+
// 实际开发中只需要添加一饿空对象即可
|
|
173
|
+
form:{},
|
|
174
|
+
// 附件的文件列表
|
|
175
|
+
fileList:[],
|
|
176
|
+
// 存储tableID的地方
|
|
177
|
+
tableEnum:{
|
|
178
|
+
'b_basic_brand':null
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
#### (2)在表单中加入校验
|
|
185
|
+
|
|
186
|
+
使用方式element一致,对于基础资料和下拉选择框的校验和平时稍有不同
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
|
|
190
|
+
<el-form model="form" :rules="formRules">
|
|
191
|
+
<Tinput v-model="form.test" title="输入框" prop="test" type="input"/>
|
|
192
|
+
<Tinput v-model="form.test2" title="文本" prop="test2" type="text"/>
|
|
193
|
+
<Tinput v-model="form.test3" title="日期" type="date"/>
|
|
194
|
+
<Tinput v-model="form.test4" title="日期时间" type="datetime"/>
|
|
195
|
+
<Tinput v-model="form.test5" title="整数" type="integer"/>
|
|
196
|
+
<Tinput v-model="form.test6" title="小数" type="decimal"/>
|
|
197
|
+
</el-form>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
todo:添加校验细节
|
|
201
|
+
|
|
202
|
+
#### (3)其他属性
|
|
203
|
+
|
|
204
|
+
not-form: 不在表单中使用,仅仅是使用控件,忽略prop title等属性
|
|
205
|
+
|
|
206
|
+
entity: 在单据体中使用,添加该属性后,效果也与not-form相同,此外样式上也没有底部边框
|
|
207
|
+
|
|
208
|
+
disabled: 关闭
|
|
209
|
+
|
|
210
|
+
placeholder : 提示信息
|
|
211
|
+
|
|
212
|
+
label-width: 就是label-width,感觉没什么卵用,默认150px
|
|
213
|
+
|
|
214
|
+
#### (4) 其他说明
|
|
215
|
+
|
|
216
|
+
鉴于基础资料多个租户下不能兼容存在,基础资料的处理没有加入到input组件中
|
|
217
|
+
|
|
218
|
+
但是有basicDisplay类型仅仅用于展示基础资料类型
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
### **2.2 FormBody单据体组件**
|
|
223
|
+
|
|
224
|
+
#### 全属性案例
|
|
225
|
+
```html
|
|
226
|
+
<FormBody
|
|
227
|
+
ref="formBodyRef"
|
|
228
|
+
height="40vh"
|
|
229
|
+
:data="data"
|
|
230
|
+
:calculations="calculations"
|
|
231
|
+
:before-add-row="beforeAddRow"
|
|
232
|
+
:after-add-row="afterAddRow"
|
|
233
|
+
>
|
|
234
|
+
<FormBodyItem
|
|
235
|
+
title="所在省"
|
|
236
|
+
field="province"
|
|
237
|
+
type="basic"
|
|
238
|
+
target="/basic/province"
|
|
239
|
+
:before-input="beforeProvinceInput"
|
|
240
|
+
:after-basic-selected="afterProvinceSelected"
|
|
241
|
+
/>
|
|
242
|
+
<FormBodyItem
|
|
243
|
+
title="邮政编码"
|
|
244
|
+
field="code"
|
|
245
|
+
disabled
|
|
246
|
+
/>
|
|
247
|
+
<FormBodyItem
|
|
248
|
+
title="所在市"
|
|
249
|
+
field="city"
|
|
250
|
+
type="basic"
|
|
251
|
+
target="/basic/city"
|
|
252
|
+
:limitation="[{key:'inProvince',value:'province',type:'field'}]"
|
|
253
|
+
/>
|
|
254
|
+
<!-- precision默认值是2 -->
|
|
255
|
+
<FormBodyItem title="数量" field="number" type="decimal" :percision="4" />
|
|
256
|
+
<FormBodyItem title="单价" field="price" type="decimal" :percision="2" />
|
|
257
|
+
<FormBodyItem title="总额" field="amount" type="decimal" :percision="2" />
|
|
258
|
+
<FormBodyItem title="是否启用" field="isActive" type="select" enum-type='YES_OR_NO'/>
|
|
259
|
+
<!-- 默认类型就是input,可以省略 -->
|
|
260
|
+
<FormBodyItem title="姓名" field="name" type="input" />
|
|
261
|
+
<FormBodyItem title="出生日期" field="birthDate" type="date" />
|
|
262
|
+
<FormBodyItem title="审核时间" field="auditTime" type="datetime" />
|
|
263
|
+
|
|
264
|
+
<!-- // 极端的情况下,可以放弃封装,直接使用ux-table-column,获取最大的灵活性-->
|
|
265
|
+
<ux-table-column title="说明" field="example">
|
|
266
|
+
<template v-slot:edit="scope">
|
|
267
|
+
{{ scope.row.xx }}
|
|
268
|
+
</template>
|
|
269
|
+
<template v-slot="scop">
|
|
270
|
+
{{ scop.row.yy }}
|
|
271
|
+
</template>
|
|
272
|
+
</ux-table-column>
|
|
273
|
+
|
|
274
|
+
<!-- 插槽 -->
|
|
275
|
+
<template v-slot:buttons="{currentRow}">
|
|
276
|
+
<el-button @click="dialogVisible = true">使用说明</el-button>
|
|
277
|
+
<!-- 这个弹窗可以不放在插槽中,如果需要访问scope中的数据,也可以通过函数的参数来传递-->
|
|
278
|
+
<el-dialog :visible.sync="dialogVisible">
|
|
279
|
+
<div class="dialog-content">
|
|
280
|
+
<span>大概率,这个地方可能还会要一些数据的</span>
|
|
281
|
+
<p>
|
|
282
|
+
注意:因为在template模版中,js的编译没有使用转译,所以不能使用可选链(?.)高级语法
|
|
283
|
+
而且当前作用域的空指针报错,会直接导致子组件不渲染
|
|
284
|
+
在访问插槽作用域属性时,要考虑空指针问题,建议使用如下方式避免
|
|
285
|
+
</p>
|
|
286
|
+
<span>{{ currentRow && currentRow.material }}</span>
|
|
287
|
+
</div>
|
|
288
|
+
</el-dialog>
|
|
289
|
+
</template>
|
|
290
|
+
</Formbody>
|
|
291
|
+
```
|
|
292
|
+
```javascript
|
|
293
|
+
export default {
|
|
294
|
+
data(){
|
|
295
|
+
return {
|
|
296
|
+
caculations:{
|
|
297
|
+
amount:'#{number} * #{price}'
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
methods:{
|
|
303
|
+
beforePrivinceInput(done){
|
|
304
|
+
if(some condition){
|
|
305
|
+
done()
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
afterPrinvceSelected(row,selected){
|
|
309
|
+
row.code = selected.code
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
#### props
|
|
318
|
+
- **data:Array** 编辑的列表数据,编辑的目标数据
|
|
319
|
+
- **disalbeButtons:Array['add','del']** 不需要显示的按钮,和关闭的功能耦合了
|
|
320
|
+
- **height** 列表的高度,支持vh 和px,其中px作为单位的时候可以省略
|
|
321
|
+
- **calculations** 列表行字段之间的计算关联 数学表达式
|
|
322
|
+
- **before-add-row:function(row)** 添加数据行(点击单据体新增按钮)之前执行
|
|
323
|
+
- **after-add-row(row)** 添加数据行之后执行
|
|
324
|
+
|
|
325
|
+
#### methods
|
|
326
|
+
- **getFormateData(filter)** : 输出格式化之后的数据 <br>
|
|
327
|
+
参数是可选的函数类型,参数是row,其实就是Array.filter中的参数形式,函数的返回值为true的结果,将会被输出到结果中<br>
|
|
328
|
+
默认的过滤行为是:一行中所有的字段的值,都是false等价的值,那么将不会输出
|
|
329
|
+
- **calculate(row)** 针对某一行,重新进行列之间的数学表达式计算
|
|
330
|
+
- **calculateRow(rows)** 批量进行计算
|
|
331
|
+
|
|
332
|
+
### **2.3 FormBodyItem** 组件
|
|
333
|
+
|
|
334
|
+
#### props
|
|
335
|
+
- 列属性
|
|
336
|
+
- **title:string** 可编辑列表的列标题,
|
|
337
|
+
- **field:string** 数据模型的字段
|
|
338
|
+
- **width:string** 列的默认宽度
|
|
339
|
+
- **readOnly:boolean** 不可编辑列
|
|
340
|
+
- 控件属性 (主要是tiput 属性的再封装)
|
|
341
|
+
- **type:string** 编辑状态下的输入控件类型,具体参考tinput<br>
|
|
342
|
+
强烈不建议在单据体中使用text文本域
|
|
343
|
+
- **disable:boolean** tinput 属性,禁用
|
|
344
|
+
- **placeholder:string** tinput 属性,占位符内容
|
|
345
|
+
- **target:string** 言午的基础资料控件,发送请求必须的参数
|
|
346
|
+
- **limitations:Array** 言午的基础资料属性,限定基础资料的查询范围
|
|
347
|
+
- **afterBaiscSelected:Function(currentRow,selected)** 基础资料单选或者多选之后要执行的动作 <br>
|
|
348
|
+
使用场景:<br>
|
|
349
|
+
当基础资料选择单行或者多行后,,会自动填充并替换下面的行<br>
|
|
350
|
+
这个过程中,被新添加的行(也包括被修改的行),因为业务需求,可能会根据选中的基础资料,调用一些接口,来获取行中另外一些字段的数据<br>
|
|
351
|
+
可以将这个业务行为通过函数来确定
|
|
352
|
+
fucntion(selectedRows)<br>
|
|
353
|
+
这个钩子函数可以是异步的,建议 属性携带的业务,放到同步中,但是需要访问接口查询的数据放到异步中
|
|
354
|
+
- **beforeInput:Function** 编辑状态下输入前要进行的钩子,但是目前只有言午的基础资料控件提供了实现,basic,其他的控件不生效
|
|
355
|
+
- **enumType:string** 枚举类型的获取枚举值的接口参数
|
|
356
|
+
- **percision** 小数保留的位数
|
|
357
|
+
#### event
|
|
358
|
+
- change => function(row,value) 值发生改变
|
|
359
|
+
|
|
360
|
+
#### methods
|
|
89
361
|
|