1. 业务场景

在开发表单过程中,需要动态设置控件的只读和必填,这个解决方案为,通过代码,获取控件对象,设置控件的只读和必填。

2. 设置控件只读

2.1 设计表单

增加一个文本框和一个按钮控件。

2.2 设计表单

修改表单

  1. <tr class="firstRow">
  2. <td style="word-break: break-all;">
  3. name
  4. </td>
  5. <td>
  6. <rx-textbox ref="txtReadonly" class="rx-textbox active" type="main" ctltype="rx-textbox" id="gtdnupv389829" :permission="getPermission(&#39;main&#39;,&#39;name&#39;)" v-model="data.name" v-on:enter="enter(&#39;main&#39;,&#39;name&#39;)" :valid="validFunc(&#39;main&#39;,&#39;name&#39;)" :readonly="readonly" style="width:calc( 100% - 2px )" v-on:valuechange="valuechange(&#39;main&#39;,&#39;name&#39;)"></rx-textbox>
  7. </td>
  8. </tr>
  9. <tr>
  10. <td></td>
  11. <td>
  12. <rx-form-button class="rx-form-button " type="noattr" ctltype="rx-form-button" id="ijnltxk401169" :permission="getPermission(&#39;main&#39;,&#39;name&#39;)" v-model="data.name" v-on:enter="enter(&#39;main&#39;,&#39;name&#39;)" :valid="validFunc(&#39;main&#39;,&#39;name&#39;)" :readonly="readonly" mode="method" method="setReadonly" alias="btnReadonly" v-if="getButtonPermission(&#39;btnReadonly&#39;)" :row="data" width="200px" :data="data">
  13. 设置只读
  14. </rx-form-button>
  15. </td>
  16. </tr>

文本控件增加 ref 属性。

2.3 设置按钮控件方法

2.4 编辑控件事件方法

  1. var custFuntions=[{name:"setReadonly",action:function(){
  2. var txtObj=this.$refs.txtReadonly;
  3. txtObj.readonly=!txtObj.readonly;
  4. }
  5. }];

获取控件,设置控件的只读属性。

2.5 效果

3. 页面渲染完成后设置控件必填

3.1 编写按钮JS代码。

  1. //name的值为 按钮的方法名称;
  2. //this.setRequired("main","name",true)的第二个参数为需要设置的文本框的字段;
  3. var custFuntions=[
  4. {
  5. name:"setRequired",
  6. action:function(){
  7. this.setRequired("main","name",true)
  8. }
  9. }
  10. ];

关键代码:

this.setRequired(entName,field,required)

参数 说明
entName 表名 如果 为 main 表示为主表,否则为子表
field 字段名称,如果为空,表示设置子表必填
required 是否必填

3.2 效果

点击设置必填后,在点击校验是,验证 字段为必填。

3.3 根据下拉框值变化设置必填;

  1. //name:用 (data.下拉框的字段)拼接;
  2. //下面的 =="a" 为下拉框选中的值;
  3. /*this.setRequired("main","wbk",required);
  4. 第一个参数表示是主表还是子表,默认为子表;
  5. 第二个参数是文本框的字段;
  6. 第三个参数表示是否必填,可选true ,false ;*/
  7. var custWatchs=[{
  8. name:"data.xlk",
  9. action:function(){
  10. var _data = this.data.xlk ;
  11. var required = false ;
  12. if( _data.indexOf('{')>=0 ){
  13. var _val =JSON.parse(_data).value;
  14. required = _val == 'a'?true : false ;
  15. }else{
  16. if(_data=='a'){
  17. required = true ;
  18. }
  19. }
  20. this.setRequired("main","wbk",required);
  21. }
  22. }];

3.4 效果;

4. 页面渲染时设置控件只读

4.1 初始化时JS代码。

  1. //初始化时加载
  2. var _onload=function(){
  3. //判断是否新增还是编辑,根据数据ID_值是否存在
  4. if(this.data.ID_){
  5. //this.permission ---表单权限json
  6. //this.permission.cj --表单对应的字段权限 w 可写(编辑) r 只读
  7. this.permission.cj='r'
  8. }
  9. }

关键代码:

this.permission

3.2 效果

文档更新时间: 2021-07-09 14:31   作者:zyg