ソースを参照

新增登录页面和应用的首页

raolu 7 年 前
コミット
84b149b731

+ 187 - 59
api/http-request.js

@ -1,23 +1,60 @@
(function(exports) {
    var publish_version = false,
	server,
	imgUrlDomain,
//	agentName = "wlyyAgentForDoc",
    agentName = "useragent", //先设置与医生端一致,暂借用app端的userAgent值
	userInfo = "userInfoForPay",
	userAgent = '';
(function($) {
    var publish_version = false;
    var isInner = false; //发布线上后有内外网的配置
    var agentName = "wlyyAgentForDoc";
    var server, userAgent, loginUrl, imserver, socketUrl, imgServer;
    var IMEI = localStorage.getItem('WLYY_IMEI') || uuid(16, 16)
    localStorage.setItem('WLYY_IMEI', IMEI)
    $.support.cors = true;
    if(publish_version) { // 生产环境配置
        server = ""
        
        server = "http://www.xmtyw.cn/wlyy/"
        imserver = "http://27.155.101.77:3000/api/v2";
        socketUrl = "http://27.155.101.77:3000";
        loginUrl = "/wlyy/prescription/login.html";
        imgServer = "http://www.xmtyw.cn/";
        if(isInner){
            server = "http://10.95.22.10:8011/wlyy/"
            imserver = "http://10.95.22.138:3000/api/v2";
            socketUrl = "http://10.95.22.138:3000";
            loginUrl = "/wlyy/prescription/login.html";
            imgServer = "http://10.95.22.10:8011/";
        }
    } else { // 测试环境配置
        server = "http://172.19.103.88:9092/wlyy/";
        server = "http://172.19.103.88:9092/wlyy/"
        imserver = "http://172.19.103.88:3000/api/v2";
        imgUrlDomain = "http://172.19.103.54/";
        socketUrl = "http://172.19.103.88:3000";
        
//      server = "http://192.168.131.133:8080/";
//      server = "http://192.168.131.127:8060/"; //逸祥
//      server = "http://192.168.131.24:8080/"; //仕杰
//      imserver = "http://192.168.131.24:3000/api/v2"
//      socketUrl = "http://192.168.131.24:3000";
        loginUrl = "/wlyy/prescription/login.html";
//      loginUrl = "/PC-prescription/login.html"; //自己本地测试时的路径
        imgServer = "http://172.19.103.54/";
    }
    userAgent = localStorage.getItem(agentName)
    if(userAgent) {
        try {
            userAgent = JSON.parse(userAgent)
        } catch(e) {
            toastr && toastr.warning("登录失效,请重新登录")
            toLoginPage()
        }
    } else {
        toLoginPage()
    }
    var isRelogined = sessionStorage.getItem('wlyy_relogin')
    if(isRelogined && location.href.indexOf("login.html") < 0){
        sessionStorage.removeItem('wlyy_relogin')
    }
    
    //测试使用,写死userAgent。如果要切换账号,自己再其他端登录后将userAgent的值拷贝过来即可
    var userAgent = {"id":4835,"uid":"rll201703150222","imei":"860573010176837","token":"c0cdef2e1238d89eb4397e1349b56416","platform":2,"hospital":"3502050100","appVersion":"1.4.3"};
    window.localStorage.setItem(agentName, JSON.stringify(userAgent));
    function httpGet(url, options) {
        //发送ajax请求
@ -27,13 +64,17 @@
                    type: 'GET',
                    dataType: 'JSON',
                    beforeSend: function(request) {
                    	var userAgent = window.localStorage.getItem(agentName);
                    	request.setRequestHeader(agentName, userAgent);
                        var agent = userAgent || {
                            imei: localStorage.getItem('WLYY_IMEI'),
                            platform: 4
                        }
                        request.setRequestHeader("userAgent", JSON.stringify(agent));
                    },
                    error: function(res) {
                        reject(res)
                    },
                    success: function(res) {
                        failCodeHandle(res)
                        resolve(res)
                    }
                }, options));
@ -48,19 +89,22 @@
                    type: 'POST',
                    dataType: 'JSON',
                    beforeSend: function(request) {
                    	var userAgent = window.localStorage.getItem(agentName);
                    	request.setRequestHeader(agentName, userAgent);
                        var agent = userAgent || {
                            imei: localStorage.getItem('WLYY_IMEI')
                        }
                        request.setRequestHeader("userAgent", JSON.stringify(agent));
                    },
                    error: function(res) {
                        reject(res)
                    },
                    success: function(res) {
                        failCodeHandle(res)
                        resolve(res)
                    }
                }, options));
        })
    }
    
    function imHttpGet(url, options) {
        //发送ajax请求
        return new Promise(function(resolve, reject) {
@ -69,58 +113,142 @@
                    type: 'GET',
                    dataType: 'JSON',
                    beforeSend: function(request) {
                        request.setRequestHeader("userAgent", JSON.stringify(sendHead));
                        request.setRequestHeader("userAgent", JSON.stringify(userAgent));
                    },
                    error: function(res) {
                        reject(res)
                    },
                    success: function(res) {
                        failCodeHandle(res)
                        resolve(res)
                    }
                }, options));
        })
    }
    function imHttpPost(url, options) {
        //发送ajax请求
        return new Promise(function(resolve, reject) {
            $.ajax(imserver + url,
                $.extend({}, {
                    type: 'POST',
                    dataType: 'JSON',
                    beforeSend: function(request) {
                        request.setRequestHeader("userAgent", JSON.stringify(userAgent));
                    },
                    error: function(res) {
                        reject(res)
                    },
                    success: function(res) {
                        failCodeHandle(res)
                        resolve(res)
                    }
                }, options));
        })
    }
    
    function toLoginPage() {
        if(location.href.indexOf('login.html') > -1) {
            return;
        }
        setTimeout(function() {
            sessionStorage.setItem("wlyy_relogin", 1)
//          var path = top.location.pathname,
//              rootPath = path.split("/")[1];
            top.location.replace(top.location.origin+loginUrl + '?redirect_url=' + encodeURIComponent(top.location.href))
        }, 2000)
    }
    var count = 0;
    function failCodeHandle(res) {
        var tip = "";
        if(res.status == 999) {
            tip = "此账号已在别处登录,请重新登录";
        } else if(res.status == 998) {
            tip = "登录超时,请重新登录";
        } else if(res.status == 997) {
            tip = "此账号未登录,请先登录"
        }
        if(tip) {
            count ++;
            if(count == 1){
                toastr && toastr.warning(tip)
                toLoginPage()
            }
        }
    }
    function uuid(len, radix) {
        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
        var uuid = [],
            i;
        radix = radix || chars.length;
        if(len) {
            // Compact form  
            for(i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
        } else {
            // rfc4122, version 4 form  
            var r;
            // rfc4122 requires these characters  
            uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
            uuid[14] = '4';
            // Fill in random data.  At i==19 set the high bits of clock sequence as  
            // per rfc4122, sec. 4.1.5  
            for(i = 0; i < 36; i++) {
                if(!uuid[i]) {
                    r = 0 | Math.random() * 16;
                    uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
                }
            }
        }
        return uuid.join('');
    }
    /*
	 * 获取图片路径
	 */
	function getImgUrl(str){
		if(typeof str != 'string'){
		    return "";
		}
		if(str.length == 0){
	        return "";
	    }else{
	        if(str.indexOf("../")>-1){
	            //访问本地路径
	            return str;
	        }else if((str.indexOf("http://")>-1) || (str.indexOf("https://")>-1)){
	            return str;
	        }else{
	            //服务器上的图片路径
	            return imgUrlDomain + str;
	        }
	    }
	}
     * 获取图片路径方法修改
     */
    function getImgUrl(str) {
        if(typeof str != 'string') {
            return "";
        }
        if(str.length == 0) {
            return "";
        } else {
            if(str.indexOf("../") > -1) {
                //访问本地路径
                return str;
            } else if((str.indexOf("http://") > -1) || (str.indexOf("https://") > -1)) {
                return str;
            } else {
                //服务器上的图片路径
                return imgServer + str;
            }
        }
    }
    httpRequest = {
    	server: server,
    	userInfo: userInfo,
    	agentName: agentName,
    	userAgent:userAgent,
        get: function(url, options) {
        	return httpGet(url, options)
        },
        post: function(url, options) {
        	return httpPost(url, options)
        },
        getImgUrl:function(url){
        	return getImgUrl(url)
        agentName: agentName,
        server: server,
        imserver: imserver,
        socketUrl: socketUrl,
        userAgent: userAgent,
        get: httpGet,
        post: httpPost,
        imHttpGet: imHttpGet,
        imHttpPost: imHttpPost,
        getImgUrl: getImgUrl,
        failCodeHandle: failCodeHandle,
        loginIm: function(data){
            return imHttpPost('/users/login', data);
        },
        imGet:function(url, options) {
        	return imHttpGet(url, options)
        getDoctorInfo: function() {
            return httpGet('doctor/baseinfo');
        }
    }
    exports.httpRequest = httpRequest;
})(window)
    window.httpRequest = httpRequest;
})(jQuery)

+ 6 - 47
app/home/index.html

@ -6,54 +6,13 @@
        <meta name="renderer" content="webkit">
        <meta http-equiv="Cache-Control" content="no-siteapp">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <title>基本公共卫生服务平台</title>
        <title>PC IM 应用中心</title>
        <meta name="keywords" content="">
        <meta name="description" content="">
        <link rel="shortcut icon" href="../../favicon.ico"/>
        <link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <!--<link rel="stylesheet" type="text/css" href="../../css/animate.min.css"/>-->
        <link rel="stylesheet" type="text/css" href="../../plugins/artDialog/6.0.5/css/ui-dialog.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="index.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>
    </head>
    <body class="fixed-sidebar full-height-layout gray-bg" style="overflow:hidden">
        <div id="wrapper">
            <!-- 顶部区域内容 -->
            <top></top>
            <!--左侧导航开始-->
            <nav-menu></nav-menu>
            <!--左侧导航结束-->
            <!--右侧部分开始-->
            <div id="page-wrapper" class="gray-bg dashbard-1">
                <content-tabs></content-tabs>
                <div class="row J_mainContent plr20 pt20" id="content-main">
                    <iframe class="J_iframe" name="iframe0" width="100%" height="100%" src="" frameborder="0" data-id="" seamless>
                    	
                    </iframe>
                </div>
            </div>
        </div>
        <script src="../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../plugins/metisMenu/jquery.metisMenu.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../plugins/slimscroll/jquery.slimscroll.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../plugins/layer/layer.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../plugins/artDialog/6.0.5/js/dialog-plus.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../plugins/toastr/toastr.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../plugins/pace/pace.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/hplus.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/contabs.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../apis/http-request.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../apis/home-api.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../component/common/event-bus.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../component/home/top.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../component/home/nav-menu.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../component/home/nav-menu-item.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../component/home/content-tabs.js" type="text/javascript" charset="utf-8"></script>
        <script src="index.js" type="text/javascript" charset="utf-8"></script>
    </body>
    <frameset cols="300, *" frameborder="NO" border="0" framespacing="0">
        <frame src="menu.html" noresize="noresize" id="tab">
        <frame src="href:aboutblank;" name="view_frame" id="main" class="p10" noresize="noresize">
    </frameset>
</html>

+ 85 - 0
app/home/menu.html

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>应用菜单</title>
        <link rel="shortcut icon" href="../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../plugins/artDialog/6.0.5/api/css/ui-dialog.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>
        <style>
            body{
                border-right: 1px solid #e1e1e1;
            }
            .row{
                border-bottom: 1px solid #e1e1e1;
                border-right: 1px solid #e1e1e1;
            }
            .col-xs-6{
                border-left: 1px solid #e1e1e1;
                border-top: 1px solid #e1e1e1;
                padding: 15px 0;
                text-align: center;
            }
            .col-xs-6.disabled{
                background-color: #f2f4f6;
            }
            .col-xs-6.active>a{
                color: #12b7f5;
            }
        </style>
    </head>
    <body>
        <div id="main" class="container">
            <div class="row">
                <div class="col-xs-6" :class="{'active': selectedTab == 1, 'disabled': disableTabs.indexOf(1)>-1}">
                    <a href="" target="view_frame" @click="chooseTab(1)">
                        <img :src="selectedTab==3?'../../images/xufangguanli02_icon.png':'../../images/xufangguanli_icon.png'">
                        <div class="mt10 c-f16">续方管理</div>
                    </a>
                    
                </div>
                <div class="col-xs-6" :class="{'active': selectedTab==2, 'disabled': disableTabs.indexOf(2)>-1}">
                    <a href="" target="view_frame">
                        <img :src="selectedTab==3?'../../images/jiankangjiaoyu02_icon.png':'../../images/jiankangjiaoyu_icon.png'">
                        <div class="mt10 c-f16">健康教育</div>
                    </a>
                </div>
                <div class="col-xs-6" :class="{'active': selectedTab == 3, 'disabled': disableTabs.indexOf(3)>-1}">
                    <a href="" target="view_frame" @click="chooseTab(3)">
                        <img :src="selectedTab==3?'../../images/suifangjihua02_icon.png':'../../images/suifangjihua_icon.png'">
                        <div class="mt10 c-f16">随访计划</div>
                    </a>
                </div>
                <div class="col-xs-6" :class="{'active': selectedTab == 4, 'disabled': disableTabs.indexOf(4)>-1}">
                    <a href="../statistics/home.html" target="view_frame" @click="chooseTab(4)">
                        <img :src="selectedTab == 4?'../../images/tongjifenxi02_icon.png' : '../../images/tongjifenxi_icon.png'">
                        <div class="mt10 c-f16">统计分析</div>
                    </a>
                </div>
            </div>
        </div>
        <script src="../../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/jquery-2.2.4.js"></script>
        <script src="../../js/bootstrap.min.js"></script>
        <script src="../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/util.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            new Vue({
                el: "#main",
                data: {
                    selectedTab: 0,
                    disableTabs: [2]
                },
                methods: {
                    chooseTab: function(val){
                        this.selectedTab = val;
                    }
                }
            })
        </script>
    </body>
</html>

+ 91 - 0
app/login/login.css

@ -0,0 +1,91 @@
body {
	width: 100%;
	height: 100%;
	background: url(../../images/BG.jpg);
	font-size: 14px;
}
#main {
	width: 1200px;
	margin: 0 auto;
	height: 100%;
}
.tabs-container {
	margin-top: 40;
	border: 10px solid rgba(255,255,255,0.2);
}
.tabs-container .nav-tabs {
	border: 0;
}
.nav.nav-tabs {
	background-color: #fff;
}
.nav.nav-tabs li {
	width: 50%;
	text-align: center;
	padding: 0 15px;
}
.nav.nav-tabs li.active a {
	color: #1eaaff;
}
.tabs-container .nav-tabs>li.active>a, 
.tabs-container .nav-tabs>li.active>a:focus, 
.tabs-container .nav-tabs>li.active>a:hover {
	border: 0;
	border-bottom: 3px solid #1eaaff;
}
button[type="submit"] {
	margin-top: 40px;
}
.form-group {
		position: relative;
	}
	
.fa-eye,
.fa-eye-slash {
	position: absolute;
	top: 16px;
	right: 10px;
	margin-top: -8px;
	font-size: 16px;
	cursor: pointer;
}
.getCaptcha {
	position: absolute;
	top: 8px;
	right: 10px;
}
.getCaptcha.disabled{
	cursor: not-allowed;
	filter: alpha(opacity=65);
	-webkit-box-shadow: none;
	box-shadow: none;
	opacity: .65;
}
.left-img img{
	width: 100%;
}
#loginForm{margin-top: 150px;}
@media only screen and (max-width: 1200px) {
	#main,.left-img,#loginForm {
		width: 100%;
	}
	
	#loginForm {
		margin-top: 0px;
	}
	.left-img > img{
		display: block;
		width: 500px;
		margin: 0 auto;
	}
	.tabs-container {
		width: 400px;
		margin: -40px auto 0;
	}
}

+ 80 - 0
app/login/login.html

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="renderer" content="webkit">
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <meta name="keywords" content="登录">
    <meta name="description" content="登录">
    <link rel="shortcut icon" href="../../favicon.ico">
    <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
    <link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css"/>
    <link rel="stylesheet" type="text/css" href="../../plugins/artDialog/6.0.5/api/css/ui-dialog.css"/>
    <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
    <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>
    <link rel="stylesheet" type="text/css" href="login.css"/>
</head>
<body>
    <div id="main">
        <div class="row">
            <div class="col-sm-8 left-img">
                <img src="../../images/icon_chahua.png" />
            </div>
            <div id="loginForm" class="col-sm-4">
                <div class="tabs-container">
                    <ul class="nav nav-tabs">
                        <li :class="{'active': type==1}" @click="changeType(1)"><a>手机号登录</a>
                        </li>
                        <li :class="{'active': type==2}" @click="changeType(2)"><a>验证码登录</a>
                        </li>
                    </ul>
                    <div class="tab-content">
                        <div class="tab-pane" :class="{'active': type==1}">
                            <div class="panel-body">
                                <form id="form1" class="m-t" role="form" onsubmit="return false;">
                                    <div class="form-group">
                                        <input class="form-control" type="text" maxlength="11" v-model="mobile" placeholder="请输入手机号码">
                                    </div>
                                    <div class="form-group">
                                        <input class="form-control" :type="eyeIsOpen?'text':'password'" v-model="password" placeholder="初始密码为手机号码后六位">
                                        <i class="fa" :class="eyeIsOpen? 'fa-eye': 'fa-eye-slash'"></i>
                                    </div>
                                    <button type="submit" class="btn btn-success block full-width m-b" @click="login">登 录</button>                 
                                </form>
                            </div>
                        </div>
                        <div class="tab-pane" :class="{'active': type==2}">
                            <div class="panel-body">
                                <form id="form2" class="m-t" role="form" onsubmit="return false;">
                                    <div class="form-group">
                                        <input class="form-control" type="text" maxlength="11" v-model="mobile" placeholder="请输入手机号码">
                                    </div>
                                    <div class="form-group">
                                        <input class="form-control" type="text" v-model="captcha" placeholder="请输入短信验证码">
                                        <a class="getCaptcha" :class="{'disabled': countdown}" @click="getCaptcha">{{infoText}}</a>
                                    </div>
                                    <button type="submit" class="btn btn-success block full-width m-b" @click="login">登 录</button>
                                </form>    
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script src="../../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../js/jquery-2.2.4.js"></script>
    <script src="../../js/bootstrap.min.js"></script>
    <script src="../../js/validate/jquery.validate.min.js"></script>
    <script src="../../js/validate/messages_zh.min.js"></script>
    <script src="../../js/security.js"></script>
    <script src="../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../js/util.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../plugins/artDialog/6.0.5/api/js/dialog-plus.js" type="text/javascript" charset="utf-8"></script>
    <script src="login.js"></script>
</body>
</html>

+ 123 - 0
app/login/login.js

@ -0,0 +1,123 @@
new Vue({
    el: "#main",
    data: {
        type: 1, //记录选择的登录方式,1-手机号登录,2-验证码登录
        mobile: '',
        password: '',
        captcha: '',
        eyeIsOpen: false,
        infoText: '获取验证码',
        countdown: false //是否在倒计时
    },
    methods: {
        changeType: function(val){
            this.type = val;
        },
        getCaptcha: function(){
            //先校验手机号码是否正确
            var isMobile = isMobilePhone(this.mobile);
            if(!isMobile){
                tip('请输入正确的手机号码!');
                return false;
            }
            setTimer(this);
            //发送请求
            sendToGetCaptcha(this);
        },
        login: function(){
            if(this.type == 1){
                var validation = $("#form1").valid();
                if(validation){
                    getPublicKey(this);
                }
            }else{
                var validation = $("#form2").valid();
                if(validation){
                    login({
                        mobile: this.mobile,
                        captcha: this.captcha,
                        platform: 4
                    })
                }
            }
        },
    }
});
//验证码定时
function setTimer(vm) {
    var seconds = 59;
    vm.countdown = true;
    timer = setInterval(function() {
        if(seconds == 0) {
            clearInterval(timer);
            timer = null;
            seconds = 59;
            vm.infoText = "获取验证码";
            vm.countdown = false;
            return ;
        }
        seconds --;
        vm.infoText = seconds+"s后重新获取";
    }, 1000)
}
function sendToGetCaptcha(vm){
    var url = "common/captcha",
        params = {
            mobile: vm.mobile,
            type: 5,
            captchaToken: 5
        };
    httpRequest.post(url, {data: params}).then(function(res){
        if(res.status == 200){
            tip('发送成功','add');
        }else{
            tip('获取验证码失败');
        }
    });
}
function getPublicKey(vm){
    var url = "login/public_key";
    httpRequest.post(url).then(function(res){
        if(res.status){
            var mod = res.data.modulus;
            var exp = res.data.exponent;
            key = RSAUtils.getKeyPair(exp, "", mod);
            if (key) {
                encryedPwd = RSAUtils.encryStr(key, vm.password);
                login({
                    mobile: vm.mobile,
                    password: encryedPwd,
                    platform: 4
                })
            }else {
               tip("获取数据失败")
               $submit.removeAttr('disabled')
            }
        }else{
            tip(res.msg);
        }
    })
}
function login(data) {
    httpRequest.post('login/doctor', {data: data}).then(function(res){
        if(res.status == 200){
            var docInfo = res.data;
            localStorage.setItem(httpRequest.agentName,JSON.stringify({
                id: docInfo.id,
                uid: docInfo.uid,
                token: docInfo.token,
                imei: localStorage.getItem('WLYY_IMEI'),
                platform: 4
            }));
            //将用户的角色信息单独存储在localstorage中
            localStorage.setItem("userRole", JSON.stringify(docInfo.userRole));
            window.location.href = "../home/index.html";
        }else{
            tip(res.msg);
        }
    });
}

+ 1 - 0
app/statistics/comprehensive-analysis.html

@ -8,6 +8,7 @@
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <link rel="shortcut icon" href="../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>

+ 1 - 0
app/statistics/consulting-analysis.html

@ -8,6 +8,7 @@
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <link rel="shortcut icon" href="../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>

+ 1 - 1
app/statistics/css/common.css

@ -235,7 +235,7 @@ ul {
@media only screen and (min-width: 414px) and (max-width: 640px) {
	.bottom-list-table tbody tr td.area-name {
		max-width: 200px;
		/*max-width: 200px;*/
	}
}

+ 1 - 0
app/statistics/estimate-analysis.html

@ -8,6 +8,7 @@
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <link rel="shortcut icon" href="../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>

+ 1 - 0
app/statistics/home.html

@ -8,6 +8,7 @@
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <link rel="shortcut icon" href="../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>

+ 5 - 23
app/statistics/js/home.js

@ -1,28 +1,7 @@
new Vue({
	el: '#main',
	data: {
		roles: [{
			"code": "350205",
			"level": "3",
			"name": "海沧区",
			"isManage": "1",
			"authOperate": "1",
			"areas": "350205"
		}, {
			"code": "350200",
			"level": "2",
			"name": "厦门市卫生与计划生育委员会",
			"isManage": "1",
			"authOperate": "1",
			"areas": "350200"
		}, {
			"code": "3502050100",
			"level": "4",
			"name": "海沧区嵩屿街道社区卫生服务中心",
			"isManage": "1",
			"authOperate": "1",
			"areas": "3502050100"
		}],
		roles: [],
		selectedRole: "",
		isopen: true,
		signAnalysis: [{
@ -73,8 +52,11 @@ new Vue({
		}
	},
	mounted: function() {
	    //获取缓存里面的userRole
	    var roles = window.localStorage.getItem("userRole");
	    this.roles = JSON.parse(roles);
		var selected = window.localStorage.getItem("selectedRole");
		if(selected) {
		if(selected && selected!= "undefined") {
			this.selectedRole = JSON.parse(selected).code;
		} else {
			this.selectedRole = this.roles[0].code;

+ 1 - 0
app/statistics/prescription-analysis.html

@ -8,6 +8,7 @@
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <link rel="shortcut icon" href="../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/cross.css"/>

+ 1 - 0
component/statistics/area-data-panel.js

@ -53,6 +53,7 @@
                        this.lowLevel --;
                    }else{
                        this.level --;
                        this.lowLevel = '';
                    }
                    this.area = row.code;
                    this.areaTitle = row.name;

+ 1 - 0
css/style.min.css

@ -7463,3 +7463,4 @@ select {
    font-size: 16px;
    margin: 0;
}
.ui-dialog{border-color: #fff;}

BIN
images/BG.jpg


BIN
images/icon_chahua.png


+ 719 - 0
js/security.js

@ -0,0 +1,719 @@
(function($w) {
	if (typeof $w.RSAUtils === 'undefined')
		var RSAUtils = $w.RSAUtils = {};
	var biRadixBase = 2;
	var biRadixBits = 16;
	var bitsPerDigit = biRadixBits;
	var biRadix = 1 << 16; // = 2^16 = 65536
	var biHalfRadix = biRadix >>> 1;
	var biRadixSquared = biRadix * biRadix;
	var maxDigitVal = biRadix - 1;
	var maxInteger = 9999999999999998;
	//maxDigits:
	//Change this to accommodate your largest number size. Use setMaxDigits()
	//to change it!
	//
	//In general, if you're working with numbers of size N bits, you'll need 2*N
	//bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need
	//
	//1024 * 2 / 16 = 128 digits of storage.
	//
	var maxDigits;
	var ZERO_ARRAY;
	var bigZero, bigOne;
	var BigInt = $w.BigInt = function(flag) {
		if (typeof flag == "boolean" && flag == true) {
			this.digits = null;
		} else {
			this.digits = ZERO_ARRAY.slice(0);
		}
		this.isNeg = false;
	};
	RSAUtils.setMaxDigits = function(value) {
		maxDigits = value;
		ZERO_ARRAY = new Array(maxDigits);
		for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0;
		bigZero = new BigInt();
		bigOne = new BigInt();
		bigOne.digits[0] = 1;
	};
	RSAUtils.setMaxDigits(20);
	//The maximum number of digits in base 10 you can convert to an
	//integer without JavaScript throwing up on you.
	var dpl10 = 15;
	RSAUtils.biFromNumber = function(i) {
		var result = new BigInt();
		result.isNeg = i < 0;
		i = Math.abs(i);
		var j = 0;
		while (i > 0) {
			result.digits[j++] = i & maxDigitVal;
			i = Math.floor(i / biRadix);
		}
		return result;
	};
	//lr10 = 10 ^ dpl10
	var lr10 = RSAUtils.biFromNumber(1000000000000000);
	RSAUtils.biFromDecimal = function(s) {
		var isNeg = s.charAt(0) == '-';
		var i = isNeg ? 1 : 0;
		var result;
		// Skip leading zeros.
		while (i < s.length && s.charAt(i) == '0') ++i;
		if (i == s.length) {
			result = new BigInt();
		} else {
			var digitCount = s.length - i;
			var fgl = digitCount % dpl10;
			if (fgl == 0) fgl = dpl10;
			result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)));
			i += fgl;
			while (i < s.length) {
				result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10),
					RSAUtils.biFromNumber(Number(s.substr(i, dpl10))));
				i += dpl10;
			}
			result.isNeg = isNeg;
		}
		return result;
	};
	RSAUtils.biCopy = function(bi) {
		var result = new BigInt(true);
		result.digits = bi.digits.slice(0);
		result.isNeg = bi.isNeg;
		return result;
	};
	RSAUtils.reverseStr = function(s) {
		var result = "";
		for (var i = s.length - 1; i > -1; --i) {
			result += s.charAt(i);
		}
		return result;
	};
	var hexatrigesimalToChar = [
		'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
		'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
		'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
		'u', 'v', 'w', 'x', 'y', 'z'
	];
	RSAUtils.biToString = function(x, radix) { // 2 <= radix <= 36
		var b = new BigInt();
		b.digits[0] = radix;
		var qr = RSAUtils.biDivideModulo(x, b);
		var result = hexatrigesimalToChar[qr[1].digits[0]];
		while (RSAUtils.biCompare(qr[0], bigZero) == 1) {
			qr = RSAUtils.biDivideModulo(qr[0], b);
			digit = qr[1].digits[0];
			result += hexatrigesimalToChar[qr[1].digits[0]];
		}
		return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);
	};
	RSAUtils.biToDecimal = function(x) {
		var b = new BigInt();
		b.digits[0] = 10;
		var qr = RSAUtils.biDivideModulo(x, b);
		var result = String(qr[1].digits[0]);
		while (RSAUtils.biCompare(qr[0], bigZero) == 1) {
			qr = RSAUtils.biDivideModulo(qr[0], b);
			result += String(qr[1].digits[0]);
		}
		return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);
	};
	var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
		'a', 'b', 'c', 'd', 'e', 'f'
	];
	RSAUtils.digitToHex = function(n) {
		var mask = 0xf;
		var result = "";
		for (i = 0; i < 4; ++i) {
			result += hexToChar[n & mask];
			n >>>= 4;
		}
		return RSAUtils.reverseStr(result);
	};
	RSAUtils.biToHex = function(x) {
		var result = "";
		var n = RSAUtils.biHighIndex(x);
		for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {
			result += RSAUtils.digitToHex(x.digits[i]);
		}
		return result;
	};
	RSAUtils.charToHex = function(c) {
		var ZERO = 48;
		var NINE = ZERO + 9;
		var littleA = 97;
		var littleZ = littleA + 25;
		var bigA = 65;
		var bigZ = 65 + 25;
		var result;
		if (c >= ZERO && c <= NINE) {
			result = c - ZERO;
		} else if (c >= bigA && c <= bigZ) {
			result = 10 + c - bigA;
		} else if (c >= littleA && c <= littleZ) {
			result = 10 + c - littleA;
		} else {
			result = 0;
		}
		return result;
	};
	RSAUtils.hexToDigit = function(s) {
		var result = 0;
		var sl = Math.min(s.length, 4);
		for (var i = 0; i < sl; ++i) {
			result <<= 4;
			result |= RSAUtils.charToHex(s.charCodeAt(i));
		}
		return result;
	};
	RSAUtils.biFromHex = function(s) {
		var result = new BigInt();
		var sl = s.length;
		for (var i = sl, j = 0; i > 0; i -= 4, ++j) {
			result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)));
		}
		return result;
	};
	RSAUtils.biFromString = function(s, radix) {
		var isNeg = s.charAt(0) == '-';
		var istop = isNeg ? 1 : 0;
		var result = new BigInt();
		var place = new BigInt();
		place.digits[0] = 1; // radix^0
		for (var i = s.length - 1; i >= istop; i--) {
			var c = s.charCodeAt(i);
			var digit = RSAUtils.charToHex(c);
			var biDigit = RSAUtils.biMultiplyDigit(place, digit);
			result = RSAUtils.biAdd(result, biDigit);
			place = RSAUtils.biMultiplyDigit(place, radix);
		}
		result.isNeg = isNeg;
		return result;
	};
	RSAUtils.biDump = function(b) {
		return (b.isNeg ? "-" : "") + b.digits.join(" ");
	};
	RSAUtils.biAdd = function(x, y) {
		var result;
		if (x.isNeg != y.isNeg) {
			y.isNeg = !y.isNeg;
			result = RSAUtils.biSubtract(x, y);
			y.isNeg = !y.isNeg;
		} else {
			result = new BigInt();
			var c = 0;
			var n;
			for (var i = 0; i < x.digits.length; ++i) {
				n = x.digits[i] + y.digits[i] + c;
				result.digits[i] = n % biRadix;
				c = Number(n >= biRadix);
			}
			result.isNeg = x.isNeg;
		}
		return result;
	};
	RSAUtils.biSubtract = function(x, y) {
		var result;
		if (x.isNeg != y.isNeg) {
			y.isNeg = !y.isNeg;
			result = RSAUtils.biAdd(x, y);
			y.isNeg = !y.isNeg;
		} else {
			result = new BigInt();
			var n, c;
			c = 0;
			for (var i = 0; i < x.digits.length; ++i) {
				n = x.digits[i] - y.digits[i] + c;
				result.digits[i] = n % biRadix;
				// Stupid non-conforming modulus operation.
				if (result.digits[i] < 0) result.digits[i] += biRadix;
				c = 0 - Number(n < 0);
			}
			// Fix up the negative sign, if any.
			if (c == -1) {
				c = 0;
				for (var i = 0; i < x.digits.length; ++i) {
					n = 0 - result.digits[i] + c;
					result.digits[i] = n % biRadix;
					// Stupid non-conforming modulus operation.
					if (result.digits[i] < 0) result.digits[i] += biRadix;
					c = 0 - Number(n < 0);
				}
				// Result is opposite sign of arguments.
				result.isNeg = !x.isNeg;
			} else {
				// Result is same sign.
				result.isNeg = x.isNeg;
			}
		}
		return result;
	};
	RSAUtils.biHighIndex = function(x) {
		var result = x.digits.length - 1;
		while (result > 0 && x.digits[result] == 0) --result;
		return result;
	};
	RSAUtils.biNumBits = function(x) {
		var n = RSAUtils.biHighIndex(x);
		var d = x.digits[n];
		var m = (n + 1) * bitsPerDigit;
		var result;
		for (result = m; result > m - bitsPerDigit; --result) {
			if ((d & 0x8000) != 0) break;
			d <<= 1;
		}
		return result;
	};
	RSAUtils.biMultiply = function(x, y) {
		var result = new BigInt();
		var c;
		var n = RSAUtils.biHighIndex(x);
		var t = RSAUtils.biHighIndex(y);
		var u, uv, k;
		for (var i = 0; i <= t; ++i) {
			c = 0;
			k = i;
			for (j = 0; j <= n; ++j, ++k) {
				uv = result.digits[k] + x.digits[j] * y.digits[i] + c;
				result.digits[k] = uv & maxDigitVal;
				c = uv >>> biRadixBits;
				//c = Math.floor(uv / biRadix);
			}
			result.digits[i + n + 1] = c;
		}
		// Someone give me a logical xor, please.
		result.isNeg = x.isNeg != y.isNeg;
		return result;
	};
	RSAUtils.biMultiplyDigit = function(x, y) {
		var n, c, uv;
		result = new BigInt();
		n = RSAUtils.biHighIndex(x);
		c = 0;
		for (var j = 0; j <= n; ++j) {
			uv = result.digits[j] + x.digits[j] * y + c;
			result.digits[j] = uv & maxDigitVal;
			c = uv >>> biRadixBits;
			//c = Math.floor(uv / biRadix);
		}
		result.digits[1 + n] = c;
		return result;
	};
	RSAUtils.arrayCopy = function(src, srcStart, dest, destStart, n) {
		var m = Math.min(srcStart + n, src.length);
		for (var i = srcStart, j = destStart; i < m; ++i, ++j) {
			dest[j] = src[i];
		}
	};
	var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,
		0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,
		0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF
	];
	RSAUtils.biShiftLeft = function(x, n) {
		var digitCount = Math.floor(n / bitsPerDigit);
		var result = new BigInt();
		RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount,
			result.digits.length - digitCount);
		var bits = n % bitsPerDigit;
		var rightBits = bitsPerDigit - bits;
		for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {
			result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) |
				((result.digits[i1] & highBitMasks[bits]) >>>
					(rightBits));
		}
		result.digits[0] = ((result.digits[i] << bits) & maxDigitVal);
		result.isNeg = x.isNeg;
		return result;
	};
	var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,
		0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,
		0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF
	];
	RSAUtils.biShiftRight = function(x, n) {
		var digitCount = Math.floor(n / bitsPerDigit);
		var result = new BigInt();
		RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0,
			x.digits.length - digitCount);
		var bits = n % bitsPerDigit;
		var leftBits = bitsPerDigit - bits;
		for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {
			result.digits[i] = (result.digits[i] >>> bits) |
				((result.digits[i1] & lowBitMasks[bits]) << leftBits);
		}
		result.digits[result.digits.length - 1] >>>= bits;
		result.isNeg = x.isNeg;
		return result;
	};
	RSAUtils.biMultiplyByRadixPower = function(x, n) {
		var result = new BigInt();
		RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n);
		return result;
	};
	RSAUtils.biDivideByRadixPower = function(x, n) {
		var result = new BigInt();
		RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n);
		return result;
	};
	RSAUtils.biModuloByRadixPower = function(x, n) {
		var result = new BigInt();
		RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n);
		return result;
	};
	RSAUtils.biCompare = function(x, y) {
		if (x.isNeg != y.isNeg) {
			return 1 - 2 * Number(x.isNeg);
		}
		for (var i = x.digits.length - 1; i >= 0; --i) {
			if (x.digits[i] != y.digits[i]) {
				if (x.isNeg) {
					return 1 - 2 * Number(x.digits[i] > y.digits[i]);
				} else {
					return 1 - 2 * Number(x.digits[i] < y.digits[i]);
				}
			}
		}
		return 0;
	};
	RSAUtils.biDivideModulo = function(x, y) {
		var nb = RSAUtils.biNumBits(x);
		var tb = RSAUtils.biNumBits(y);
		var origYIsNeg = y.isNeg;
		var q, r;
		if (nb < tb) {
			// |x| < |y|
			if (x.isNeg) {
				q = RSAUtils.biCopy(bigOne);
				q.isNeg = !y.isNeg;
				x.isNeg = false;
				y.isNeg = false;
				r = biSubtract(y, x);
				// Restore signs, 'cause they're references.
				x.isNeg = true;
				y.isNeg = origYIsNeg;
			} else {
				q = new BigInt();
				r = RSAUtils.biCopy(x);
			}
			return [q, r];
		}
		q = new BigInt();
		r = x;
		// Normalize Y.
		var t = Math.ceil(tb / bitsPerDigit) - 1;
		var lambda = 0;
		while (y.digits[t] < biHalfRadix) {
			y = RSAUtils.biShiftLeft(y, 1);
			++lambda;
			++tb;
			t = Math.ceil(tb / bitsPerDigit) - 1;
		}
		// Shift r over to keep the quotient constant. We'll shift the
		// remainder back at the end.
		r = RSAUtils.biShiftLeft(r, lambda);
		nb += lambda; // Update the bit count for x.
		var n = Math.ceil(nb / bitsPerDigit) - 1;
		var b = RSAUtils.biMultiplyByRadixPower(y, n - t);
		while (RSAUtils.biCompare(r, b) != -1) {
			++q.digits[n - t];
			r = RSAUtils.biSubtract(r, b);
		}
		for (var i = n; i > t; --i) {
			var ri = (i >= r.digits.length) ? 0 : r.digits[i];
			var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1];
			var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2];
			var yt = (t >= y.digits.length) ? 0 : y.digits[t];
			var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1];
			if (ri == yt) {
				q.digits[i - t - 1] = maxDigitVal;
			} else {
				q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt);
			}
			var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1);
			var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2);
			while (c1 > c2) {
				--q.digits[i - t - 1];
				c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1);
				c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2);
			}
			b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1);
			r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]));
			if (r.isNeg) {
				r = RSAUtils.biAdd(r, b);
				--q.digits[i - t - 1];
			}
		}
		r = RSAUtils.biShiftRight(r, lambda);
		// Fiddle with the signs and stuff to make sure that 0 <= r < y.
		q.isNeg = x.isNeg != origYIsNeg;
		if (x.isNeg) {
			if (origYIsNeg) {
				q = RSAUtils.biAdd(q, bigOne);
			} else {
				q = RSAUtils.biSubtract(q, bigOne);
			}
			y = RSAUtils.biShiftRight(y, lambda);
			r = RSAUtils.biSubtract(y, r);
		}
		// Check for the unbelievably stupid degenerate case of r == -0.
		if (r.digits[0] == 0 && RSAUtils.biHighIndex(r) == 0) r.isNeg = false;
		return [q, r];
	};
	RSAUtils.biDivide = function(x, y) {
		return RSAUtils.biDivideModulo(x, y)[0];
	};
	RSAUtils.biModulo = function(x, y) {
		return RSAUtils.biDivideModulo(x, y)[1];
	};
	RSAUtils.biMultiplyMod = function(x, y, m) {
		return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m);
	};
	RSAUtils.biPow = function(x, y) {
		var result = bigOne;
		var a = x;
		while (true) {
			if ((y & 1) != 0) result = RSAUtils.biMultiply(result, a);
			y >>= 1;
			if (y == 0) break;
			a = RSAUtils.biMultiply(a, a);
		}
		return result;
	};
	RSAUtils.biPowMod = function(x, y, m) {
		var result = bigOne;
		var a = x;
		var k = y;
		while (true) {
			if ((k.digits[0] & 1) != 0) result = RSAUtils.biMultiplyMod(result, a, m);
			k = RSAUtils.biShiftRight(k, 1);
			if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;
			a = RSAUtils.biMultiplyMod(a, a, m);
		}
		return result;
	};
	$w.BarrettMu = function(m) {
		this.modulus = RSAUtils.biCopy(m);
		this.k = RSAUtils.biHighIndex(this.modulus) + 1;
		var b2k = new BigInt();
		b2k.digits[2 * this.k] = 1; // b2k = b^(2k)
		this.mu = RSAUtils.biDivide(b2k, this.modulus);
		this.bkplus1 = new BigInt();
		this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1)
		this.modulo = BarrettMu_modulo;
		this.multiplyMod = BarrettMu_multiplyMod;
		this.powMod = BarrettMu_powMod;
	};
	function BarrettMu_modulo(x) {
		var $dmath = RSAUtils;
		var q1 = $dmath.biDivideByRadixPower(x, this.k - 1);
		var q2 = $dmath.biMultiply(q1, this.mu);
		var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1);
		var r1 = $dmath.biModuloByRadixPower(x, this.k + 1);
		var r2term = $dmath.biMultiply(q3, this.modulus);
		var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1);
		var r = $dmath.biSubtract(r1, r2);
		if (r.isNeg) {
			r = $dmath.biAdd(r, this.bkplus1);
		}
		var rgtem = $dmath.biCompare(r, this.modulus) >= 0;
		while (rgtem) {
			r = $dmath.biSubtract(r, this.modulus);
			rgtem = $dmath.biCompare(r, this.modulus) >= 0;
		}
		return r;
	}
	function BarrettMu_multiplyMod(x, y) {
		/*
		x = this.modulo(x);
		y = this.modulo(y);
		*/
		var xy = RSAUtils.biMultiply(x, y);
		return this.modulo(xy);
	}
	function BarrettMu_powMod(x, y) {
		var result = new BigInt();
		result.digits[0] = 1;
		var a = x;
		var k = y;
		while (true) {
			if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a);
			k = RSAUtils.biShiftRight(k, 1);
			if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;
			a = this.multiplyMod(a, a);
		}
		return result;
	}
	var RSAKeyPair = function(encryptionExponent, decryptionExponent, modulus) {
		var $dmath = RSAUtils;
		this.e = $dmath.biFromHex(encryptionExponent);
		this.d = $dmath.biFromHex(decryptionExponent);
		this.m = $dmath.biFromHex(modulus);
		// We can do two bytes per digit, so
		// chunkSize = 2 * (number of digits in modulus - 1).
		// Since biHighIndex returns the high index, not the number of digits, 1 has
		// already been subtracted.
		this.chunkSize = 2 * $dmath.biHighIndex(this.m);
		this.radix = 16;
		this.barrett = new $w.BarrettMu(this.m);
	};
	RSAUtils.getKeyPair = function(encryptionExponent, decryptionExponent, modulus) {
		return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus);
	};
	if (typeof $w.twoDigit === 'undefined') {
		$w.twoDigit = function(n) {
			return (n < 10 ? "0" : "") + String(n);
		};
	}
	// Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
	// string after it has been converted to an array. This fixes an
	// incompatibility with Flash MX's ActionScript.
	RSAUtils.encryptedString = function(key, s) {
//		console.log(key);
		var a = [];
		var sl = s.length;
		var i = 0;
		while (i < sl) {
			a[i] = s.charCodeAt(i);
			i++;
		}
		while (a.length % key.chunkSize != 0) {
			a[i++] = 0;
		}
		var al = a.length;
		var result = "";
		var j, k, block;
		for (i = 0; i < al; i += key.chunkSize) {
			block = new BigInt();
			j = 0;
			for (k = i; k < i + key.chunkSize; ++j) {
				block.digits[j] = a[k++];
				block.digits[j] += a[k++] << 8;
			}
			var crypt = key.barrett.powMod(block, key.e);
			var text = key.radix == 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix);
			result += text + " ";
		}
		return result.substring(0, result.length - 1); // Remove last space.
	};
	RSAUtils.decryptedString = function(key, s) {
		var blocks = s.split(" ");
		var result = "";
		var i, j, block;
		for (i = 0; i < blocks.length; ++i) {
			var bi;
			if (key.radix == 16) {
				bi = RSAUtils.biFromHex(blocks[i]);
			} else {
				bi = RSAUtils.biFromString(blocks[i], key.radix);
			}
			block = key.barrett.powMod(bi, key.d);
			for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {
				result += String.fromCharCode(block.digits[j] & 255,
					block.digits[j] >> 8);
			}
		}
		// Remove trailing null, if any.
		if (result.charCodeAt(result.length - 1) == 0) {
			result = result.substring(0, result.length - 1);
		}
		return result;
	};
	RSAUtils.setMaxDigits(130);
	
	/*
	 * 加密文本 
	 */
	RSAUtils.encryStr=function (key,str) {
		var temp=encodeURIComponent(str);
		console.log("2   "+temp)
		var encryedStr=RSAUtils.encryptedString(key,temp);
		return encryedStr;
	}
	
})(window);
/*操作示例
<script type="text/javascript">
		var serverURL = "http://172.19.103.77:8080/wlyy/login/public_key"; //服务器地址
		var key;
		key=RSAUtils.getKeyFromServer(serverURL);	//调用方法获取key			
		document.querySelector("#encrypt").addEventListener("tap", function() {  //点击事件加密文本
			if (!key) {
				key=getKeyFromServer(serverURL);
			}
			encryStr();
		});
		function encryStr() {
			var pwdStr = document.querySelector("input").value;
			var pwd=encodeURIComponent(pwdStr);				//把文本转换成URL 编码
			console.log("pwd : "+pwd);
			var encryStr = RSAUtils.encryptedString(key, pwd);
			console.log(encryStr);
			document.querySelector("textarea").innerText = encryStr;
		}
	</script>
*/

+ 1 - 1
js/util.js

@ -26,7 +26,7 @@ Date.prototype.format = function(formatStr)
} 
function isMobilePhone(n) {
	var reg = /^1[34578]\d{9}$/
	var reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/;
	return reg.test(n)
}

ファイルの差分が大きいため隠しています
+ 4 - 0
js/validate/jquery.validate.min.js


+ 27 - 0
js/validate/messages_zh.min.js

@ -0,0 +1,27 @@
/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014
 * http://jqueryvalidation.org/
 * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */
! function (a) {
    "function" == typeof define && define.amd ? define(["jquery", "jquery.validate.min"], a) : a(jQuery)
}(function (a) {
    var icon = "<i class='fa fa-times-circle'></i>  ";
    a.extend(a.validator.messages, {
        required: icon + "必填",
        remote: icon + "请修正此栏位",
        email: icon + "请输入有效的电子邮件",
        url: icon + "请输入有效的网址",
        date: icon + "请输入有效的日期",
        dateISO: icon + "请输入有效的日期 (YYYY-MM-DD)",
        number: icon + "请输入正确的数字",
        digits: icon + "只能输入数字",
        creditcard: icon + "请输入有效的信用卡号码",
        equalTo: icon + "你的输入不相同",
        extension: icon + "请输入有效的后缀",
        maxlength: a.validator.format(icon + "最多 {0} 个字"),
        minlength: a.validator.format(icon + "最少 {0} 个字"),
        rangelength: a.validator.format(icon + "请输入长度为 {0} 至 {1} 之间的字串"),
        range: a.validator.format(icon + "请输入 {0} 至 {1} 之间的数值"),
        max: a.validator.format(icon + "请输入不大于 {0} 的数值"),
        min: a.validator.format(icon + "请输入不小于 {0} 的数值")
    })
});