进度条实现倒计时多少秒后可继续操作原创
金蝶云社区-令狐毕玉
令狐毕玉
0人赞赏了该文章 64次浏览 未经作者许可,禁止转载编辑于2024年06月19日 15:13:53

image.pngimage.png


执行某些操作时弹窗,需要强制用户阅读同意隐私条款,或者告知某些安全信息后才可操作。


实现方案:

1:使用进度条控件的自动刷新功能

2:隐藏字段记录进度,回写页面标签值,展示倒计时多少秒


代码实现

1:实现进度条接口

implements ProgresssListener

2:监听进度条控件

public void registerListener(EventObject e) {
   //注册进度条的监听
   ProgressBar progressbar = (ProgressBar)getControl("kdtest_progressbarap");
   progressbar.addProgressListener(this);
}

3:启动进度条

@Override
public void afterCreateNewData(EventObject e) {
   super.afterCreateNewData(e);
   ProgressBar bar = this.getView().getControl("kdtest_progressbarap");
   IClientViewProxy proxy= this.getView().getService(IClientViewProxy.class);
   proxy.setFieldProperty(bar.getKey(), ClientProperties.Percent, 0);
   bar.start();
   this.getView().setVisible(false,"btnok");
   this.getView().setVisible(true,"kdtest_labelap1");
}

4:刷新进度赋值控制显隐

@Override
public void onProgress(ProgressEvent evt) {
   IFormView view = this.getView();
   ProgressBar bar = view.getControl("kdtest_progressbarap");
   // getProgress 需要自己实现
   Integer progress = (Integer)this.getModel().getValue("kdtest_integerfield");
   if(progress >= 90) {
       this.getView().setVisible(true,"btnok");
       this.getView().setVisible(false,"kdtest_labelap1");
       evt.setProgress(100);
       bar.stop();
   } else {
       int number = progress + 10;
       evt.setProgress(number);
       this.getModel().setValue("kdtest_integerfield", number);
       Label label = (Label)this.getView().getControl("kdtest_labelap1");
       label.setText( 10 - number/10 + "S");
   }
}


使用场景:

需要强制阅读某些条款多少秒后可操作


赞 0