JRT界面解耦范例

在系统后端开发可以借助dll、jar、类来提供功能隔离。在前端调用一些公共功能一般就没隔离了,比如调用一个验证密码的窗口、调用CA、调用危急值。常规做法就是页面自己弹窗指定的功能页面,和功能页面约定弹窗id,由弹窗页面负责关闭window。这种写法是很初级的写法,不利于程序模块化,也不利于程序稳定。

直接暴露页面给使用者模式有以下问题:
1.页面大小变化后所有调用地方弹窗大小都得改。
2.不同页面都要求按子页面关闭的window的id来弹窗。
3.调用者需要关心提供页面细节,提供页面高度耦合调用页面。

JRT在开发时候对公共的页面模块采用彻底的解耦方式,需要公共提供的页面要求自己提供对于interface.js,调用者不需要关系页面地址和大小,及弹窗id等,或者按子页面逻辑提供特定方法和变量环境,从而为长期功能稳定提供基石。

这次拿调用摄像头截图来说明解耦实现,对于调用摄像头截图业务来说,业务只是需要弹窗个视频界面能点击截图得到图片即可,至于我的业务干嘛是业务自己操心的事。

那么业务述求有:
1.启动摄像头
2.指定摄像头展示窗口大小
3.指定弹窗是否模态
4.指定是一次截图自动关闭还是一直保留。
5.截图之后我能拿到图片

对于你摄像头怎么调用和怎么实现展示并不是业务关心的事,那么调用接口可以抽取如下:
在这里插入图片描述
接口js的实现与隔离

//调用摄像头取图接口
//调用CameraGetImageHandeler.ShowCameraWin()弹窗摄像头窗口

//选图对象
var CameraGetImageHandeler = {
    //显示摄像头弹窗
    //CallbackFunc:回调方法 (第一个参数是自己传的回调参数,第二个是图片Base64串)
    //CallbackPara:回调参数 (可空)
    //modal:是否模态弹窗
    //selectClose:选完图是否关闭
    //width:弹窗宽度 (可空)
    //height:弹窗高度 (可空)
    ShowCameraWin: function (CallbackFunc,CallbackPara,modal,selectClose,width,height) {
        SelectImageHandeler.CallBackFun = CallbackFunc;
        SelectImageHandeler.CallBackPara = CallbackPara;
        var HasCallBack = "";
        if (CallbackFunc != null) {
            HasCallBack = "1";
        }
        if ($("#winCameraGetImage").length == 0) {
            $(document.body).append('<div id="winCameraGetImage" title="摄像头调用" style="overflow: hidden"></div>');
        }
        if(selectClose==true)
        {
            SelectImageHandeler.SelectClose=true;
        }
        if(width==null)
        {
            width=900;
        }
        if(height==null)
        {
           height=700;
        }
        if(modal==null)
        {
            modal=true;
        }
        showwin("#winCameraGetImage", TranslateDataMTHD("Camera Image", "摄像头调用", ""), "../../window/form/frmCamera.html", width, height,true,null,null, modal);
		return;
		
    },
    SelectClose:false,
    //回调方法
    CallBackFun: null,
    //回调参数
    CallBackPara: null,
    //固定的登录回调方法
    SelectCallBack: function (base64) {
        //进行回调
        if (SelectImageHandeler.CallBackFun != null) {
            SelectImageHandeler.CallBackFun(SelectImageHandeler.CallBackPara,base64);
            if(SelectImageHandeler.SelectClose==true)
            {
                $("#winCameraGetImage").window("close");
            }
        }
    }
}

有了接口隔离之后业务就很简单了

引用接口js
在这里插入图片描述
驱动接口,给出回调处理截图图片
在这里插入图片描述
提交保存
在这里插入图片描述
操作文件服务
在这里插入图片描述

驱动摄像头页面的实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>摄像头调用</title>
    <!--图标-->
    <script src="../../resource/common/js/JRTBSBase.js" type="text/javascript"></script>
    <script src="../../jrtprint/js/JRTPrint.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        SYSPageCommonInfo.Init();
        var BasePath = '';
        var ResourcePath = '';
        var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;
        //CSP初始化Session
        var UserDR = SYSPageCommonInfo.Data.Sesssion.UserDR;
        var WorkGroupDR = SYSPageCommonInfo.Data.Sesssion.WorkGroupDR;
        var Fun_Auth = SYSPageCommonInfo.Data.Function.Auth == 'True' ? true : false;
        var sysTheme = SYSPageCommonInfo.Data.Sesssion.Theme;
        //CSP初始化Session
        var SessionStr = SYSPageCommonInfo.Data.SessionStr;
    </script>
    <script src="../js/Camera.js" type="text/javascript"></script>
</head>
<body>
    <div class="easyui-layout" fit="true">
        <div data-options="region:'north',split:true" style="height: 48px;padding:5px 0 0 10px;" title="">
            <a id="btnCutImg" href="#" class="easyui-linkbutton" data-options="" plain="false" listranslate="html~Cameral" style="background-color:#12aa2c;">抓图</a>
            <span class="jrtsp6"></span>
            <a id="btnClose" href="#" class="easyui-linkbutton" data-options="" plain="false" listranslate="html~Cameral" style="background-color:#F1948A;">关闭</a>
        </div>
        <div data-options="region:'center'">
            <div id="divCamera" style="width: 100%;height:100%;background-color:#333333;">
            </div>
        </div>
    </div>
</body>
</html>



页面js

$(function () {
	//#跟上0就代表截图后不关闭窗口,跟1就代表截图后自动关闭窗口
    JRTBaseMsg.StartCameral($("#divCamera"));

    //从内嵌摄像头抓图
    $("#btnCutImg").click(function () {
       var base64=JRTBaseMsg.GetCameralImg();
       window.parent.CameraGetImageHandeler.SelectCallBack(base64);
    });

    //停止内嵌摄像头
    $("#btnClose").click(function () {
       //#跟上0就代表截图后不关闭窗口,跟1就代表截图后自动关闭窗口
       //JRTBaseMsg.Send("StopCameral#0");
       window.parent.$("#winCameraGetImage").window("close");
    });

    //截图回调,截图后会把图片Base64串回调到此方法
    function CameraMsgCallBack(base64) {
       $("#divImgShow").append('<img src="' + "data:image/png;base64," + base64 + '" alt="截图" style="margin-bottom:10px;width:400px;height: 300px;margin:10px;"/>');
    }

    //失败回调
    function NoConnCallBack() {
       $.messager.alert(TranslateDataMTHD("Info", "提示", ""), TranslateDataMTHD("Unable to connect to the messaging service!", "无法连接消息服务!", ""));
    }
});

效果
在这里插入图片描述

这样就把一个复杂的驱动摄像头操作剥离出去了,业务实现也轻松了,摄像头调用的实现也轻松了,同理对CA、危急值、密码验证、取消审核等需要独立提供功能服务的使用。

取消审核的接口实现实例:

//通用取消审核的接口
//调用UnAuthReportHandeler.ShowWin()弹窗取消审核窗口

//选图对象
var UnAuthReportHandeler = {
    //显示报告选图窗口
    //ReportDRS:报告主键,多个用英文逗号分隔
    //ToStatus:要取消到的状态,不给默认1
    //UnAuthUserDR:取消审核用户,不指定为当前会话用户
    //CallbackFunc:回调方法 (可空)
    //CallbackPara:回调参数 (可空)
    ShowWin: function (ReportDRS,ToStatus,UnAuthUserDR, CallbackFunc, CallbackPara) {
        UnAuthReportHandeler.CallBackFun = CallbackFunc;
        UnAuthReportHandeler.CallBackPara = CallbackPara;
        UnAuthReportHandeler.WinPara={};
        if (ToStatus == null) {
            ToStatus = "";
        }
        if(UnAuthUserDR==null)
        {
            UnAuthUserDR="";
        }
        //缓存参数
        UnAuthReportHandeler.WinPara.ReportDRS=ReportDRS;
        UnAuthReportHandeler.WinPara.ToStatus=ToStatus;
        UnAuthReportHandeler.WinPara.UnAuthUserDR=UnAuthUserDR;
        if ($("#winUnAuthReport").length == 0) {
            $(document.body).append('<div id="winUnAuthReport" title="召回报告" style="overflow: hidden"></div>');
        }
        showwin("#winUnAuthReport", TranslateDataMTHD("UnAuth Report", "召回报告", ""), "../../window/form/frmUnAuthReport.html", 540, 320, true);
		return;
		
    },
    //缓存要传递给弹窗的消息
    WinPara:{},
    //回调方法
    CallBackFun: null,
    //回调参数
    CallBackPara: null,
    //固定的回调方法
    CallBack: function () {
        //进行回调
        if (UnAuthReportHandeler.CallBackFun != null) {
            UnAuthReportHandeler.CallBackFun(UnAuthReportHandeler.CallBackPara);
        }
    }
}

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
2020年是“jrt0166”的发展之年。在这一年,jrt0166迎来了许多重要的事件和转折点。 首先,jrt0166在2020年取得了巨大的发展和成就。他们成功推出了多个创新产品,并在市场上获得了广泛认可和赞誉。jrt0166团队经过不懈努力,不断改进和创新,使其产品在质量和性能方面不断提高,赢得了许多忠实的用户。 其次,2020年也是jrt0166公司扩大市场份额的一年。他们积极参加各种国内外展览和行业会议,与客户和合作伙伴广泛交流,拓展了合作关系。通过不断增强市场竞争力,他们成功进入了新的市场领域,为公司的长远发展打下了坚实基础。 此外,2020年也是jrt0166注重企业文化建设和员工培养的一年。他们积极组织各种培训和活动,提升员工的技能和动力。公司注重员工的职业发展和个人成长,并提供了广阔发展空间,使员工感受到公司的关心和支持。 最后,2020年也带来了一些挑战和困难。例如,全球爆发的COVID-19疫情对全球经济造成了巨大冲击,jrt0166也不例外。然而,面对挑战,jrt0166团队坚定信心,灵活应对,并采取了一系列应对措施,保持了公司的正常运营,并取得了不俗的业绩。 综上所述,2020年对于jrt0166来说是一个充满挑战和机遇的年份。通过不懈努力,创新实践和灵活应对,jrt0166成功地应对了各种挑战,并取得了长足发展,为公司的未来发展奠定了坚实基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值