Explorar o código

医生工作管理平台界面开发

linehang %!s(int64=7) %!d(string=hai) anos
pai
achega
27d163391e
Modificáronse 40 ficheiros con 2235 adicións e 0 borrados
  1. 341 0
      api/doctor-http-request.js
  2. 64 0
      component/common/doctor-header.js
  3. 49 0
      component/common/doctor-top.js
  4. 196 0
      component/doctor-home/device-reback.js
  5. 43 0
      component/doctor-home/index.js
  6. 39 0
      component/doctor-home/mine.js
  7. 60 0
      component/doctor-home/per-info.js
  8. 149 0
      component/doctor-home/safe-setting.js
  9. 241 0
      component/doctor/appeal.js
  10. 158 0
      component/doctor/forget.js
  11. 300 0
      component/doctor/login.js
  12. 20 0
      doctor/home/css/index.css
  13. 91 0
      doctor/home/css/mine.css
  14. 41 0
      doctor/home/html/index.html
  15. 44 0
      doctor/home/html/mine.html
  16. 6 0
      doctor/home/js/index.js
  17. 65 0
      doctor/login/css/appeal.css
  18. 50 0
      doctor/login/css/forget.css
  19. 134 0
      doctor/login/css/login.css
  20. 43 0
      doctor/login/html/appeal.html
  21. 43 0
      doctor/login/html/forget.html
  22. 43 0
      doctor/login/html/login.html
  23. 5 0
      doctor/login/js/appeal.js
  24. 5 0
      doctor/login/js/forget.js
  25. 5 0
      doctor/login/js/login.js
  26. BIN=BIN
      images/biaoqian01_img.png
  27. BIN=BIN
      images/biaoqian02_img.png
  28. BIN=BIN
      images/chenggong_icon.png
  29. BIN=BIN
      images/doctor_denglu_bg_img.png
  30. BIN=BIN
      images/doctor_logo_img.png
  31. BIN=BIN
      images/doctor_logo_menhu_img.png
  32. BIN=BIN
      images/guanbi_btn.png
  33. BIN=BIN
      images/kong_img.png
  34. BIN=BIN
      images/menghu_bg_img.png
  35. BIN=BIN
      images/mima_icon.png
  36. BIN=BIN
      images/shangchuan_icon.png
  37. BIN=BIN
      images/shouji_icon.png
  38. BIN=BIN
      images/shouye_huizheng_icon.png
  39. BIN=BIN
      images/shouye_yixue_icon.png
  40. BIN=BIN
      images/shouye_zhuanzhen_icon.png

+ 341 - 0
api/doctor-http-request.js

@ -0,0 +1,341 @@
(function($) {
    var publish_version = false;
    var isInner = false; //发布线上后有内外网的配置
    var agentName = "wlyyAgentForDoc";
    var server, userAgent, loginUrl, imserver, socketUrl, imgServer, grant_type, client_id
    var IMEI = localStorage.getItem('WLYY_IMEI') || uuid(16, 16)
    localStorage.setItem('WLYY_IMEI', IMEI)
    $.support.cors = true;
    if(publish_version) { // 生产环境配置
        server = "http://www.xmtyw.cn/wlyytest/"
        imserver = "http://27.155.101.77:3000/api/v2";
        socketUrl = "http://27.155.101.77:3000";
        loginUrl = "../../login/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 = "../../login/html/login.html";
            imgServer = "http://10.95.22.10:8011/";
        }
    } else {// 测试环境配置
    	grant_type = "password";
        client_id = "WYo0l73F8e";
    	server = "http://172.19.103.73:10001/";
//      server = "http://172.19.103.88:9092/wlyy/"
        imserver = "http://172.19.103.88:3000/api/v2";
        socketUrl = "http://172.19.103.88:3000";
//      server = "http://192.168.131.133:8080/";
		
//		server = "http://192.168.131.215:10001/"; //冬梅
//      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 = "../../login/html/login.html";
//      loginUrl = "/PC-prescription/login.html"; //自己本地测试时的路径
        imgServer = "http://172.19.103.54/";
    }
    function httpGet(url, options) {
        //发送ajax请求
        return new Promise(function(resolve, reject) {
            $.ajax(server + url,
                $.extend({}, {
                    type: 'GET',
                    dataType: 'JSON',
                    beforeSend: function(request) {                    	
                        var oauthInfo = JSON.parse(sessionStorage.getItem("oauthInfo"));
                        if (oauthInfo) {
                            request.setRequestHeader("accessToken", oauthInfo.accessToken);
                            request.setRequestHeader("token", oauthInfo.accessToken);
                        }
                    },
                    error: function(res) {
                        reject(res)
                    },
                    success: function(res) {
                        failCodeHandle(res)
                        resolve(res)
                    }
                }, options));
        })
    }
    function httpPost(url, options) {
        //发送ajax请求
        return new Promise(function(resolve, reject) {
            $.ajax(server + url,
                $.extend({}, {
                    type: 'POST',
                    dataType: 'JSON',
                    beforeSend: function(request) {
                        var oauthInfo = JSON.parse(sessionStorage.getItem("oauthInfo"));
                        if (oauthInfo) {
                            request.setRequestHeader("accessToken", oauthInfo.accessToken);
                            request.setRequestHeader("token", oauthInfo.accessToken);
                        }
                    },
                    error: function(res) {
                        reject(res)
                    },
                    success: function(res) {
                        failCodeHandle(res)
                        resolve(res)
                    }
                }, options));
        })
    }
    
    //调用福州总部的接口的方法
    function fzHttpPost(url, options){
        return new Promise(function(resolve, reject) {
            var url2 = "basic/api/v1.0/fz/open/api",
                params = {
                    apiUrl: url, //相对接口路径,不用"/"开头
                    paramsJson:  JSON.stringify(options)
                }
            $.ajax(server + url2, {
                type: 'POST',
                data: params,
                dataType: 'JSON',
                error: function(res) {
                    reject(res)
                },
                success: function(res) {
                    failCodeHandle(res)
                    resolve(res)
                }
            });
        })
    }
    function imHttpGet(url, options) {
        //发送ajax请求
        return new Promise(function(resolve, reject) {
            $.ajax(imserver + url,
                $.extend({}, {
                    type: 'GET',
                    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 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||location.href.indexOf('register.html') > -1) {
            return;
        }
        setTimeout(function() {
            sessionStorage.setItem("wlyy_relogin", 1)
//          var path = top.location.pathname,
//              rootPath = path.split("/")[1];
            top.location.replace(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 imgServer + str;
            }
        }
    }
    
    function httpPostContent(url, options) {
        //发送ajax请求
        return new Promise(function (resolve, reject) {
            $.ajax(server + url,
                $.extend({}, {
                    type: 'POST',
                    beforeSend: function (request) {                    	
                        var oauthInfo = JSON.parse(sessionStorage.getItem("oauthInfo"));
                        if (oauthInfo) {
                            request.setRequestHeader("accessToken", oauthInfo.accessToken);
                            request.setRequestHeader("token", oauthInfo.accessToken);
                        }
                    },
                    error: function (xhr, type, errorThrown) {
                        reject(xhr, type, errorThrown)
                    },
                    success: function (res) {
                        resolve(res)
                    }
                }, options));
        })
    }
    function httpPutContent(url, options) {   //加contentType限制
        //发送ajax请求
        return new Promise(function (resolve, reject) {
            $.ajax(server + url,
                $.extend({}, {
                    type: 'PUT',
                    dataType: 'JSON',
                    contentType:'application/json; charset=utf-8',
                    beforeSend: function (request) {                    	
                        var oauthInfo = JSON.parse(sessionStorage.getItem("oauthInfo"));
                        if (oauthInfo) {
                            request.setRequestHeader("accessToken", oauthInfo.accessToken);
                            request.setRequestHeader("token", oauthInfo.accessToken);
                        }
                    },
                    error: function (xhr, type, errorThrown) {
                        reject(xhr, type, errorThrown)
                    },
                    success: function (res) {
                        resolve(res)
                    },
                }, options));
        })
    }    
    function httpPut(url, options) {
        //发送ajax请求
        return new Promise(function (resolve, reject) {
            $.ajax(server + url,
                $.extend({}, {
                    type: 'PUT',
                    dataType: 'JSON',
                    beforeSend: function (request) {
                        var oauthInfo = JSON.parse(sessionStorage.getItem("oauthInfo"));
                        if (oauthInfo) {
                            request.setRequestHeader("accessToken", oauthInfo.accessToken);
                            request.setRequestHeader("token", oauthInfo.accessToken);
                        }
                    },
                    error: function (xhr, type, errorThrown) {
                        reject(xhr, type, errorThrown)
                    },
                    success: function (res) {
                        resolve(res)
                    },
                }, options));
        })
    }
    httpRequest = {
        agentName: agentName,
        server: server,
        imserver: imserver,
        socketUrl: socketUrl,
//      userAgent: userAgent,
        get: httpGet,
        post: httpPost,
        imHttpGet: imHttpGet,
        imHttpPost: imHttpPost,
        fzPost: fzHttpPost,
        getImgUrl: getImgUrl,
        grant_type: grant_type,
        client_id: client_id,
        imgServer:imgServer,
        failCodeHandle: failCodeHandle,
        httpPostContent:httpPostContent,
        httpPutContent:httpPutContent,
        put:httpPut,
        loginIm: function(data){
            return imHttpPost('/users/login', data);
        },
        getDoctorInfo: function() {
            return httpGet('doctor/baseinfo');
        }
    }
    window.httpRequest = httpRequest;
})(jQuery)

+ 64 - 0
component/common/doctor-header.js

@ -0,0 +1,64 @@
(function(){
    Vue.component('doctor-header', {
        template: `<div class="bgc-fff c-border-b">
            <div class="container">
                <div class="row">
                    <div class="clearfix ui-grid-middle">
                        <div class="fl ui-col-0">
                            <img src="../../../images/doctor_logo_menhu_img.png">
                        </div>
                        <div class="fl ml20">
	                        <div class="nav">
	                            <a v-for="(item, index) in navList" class="nav-item" :class="{'active': selectedNav==index}" @click="chooseNav(index)">{{item.text}}</a>
	                        </div>
	                    </div>
                    </div>
                </div>
            </div>
        </div>`,
        props: [],
        data: function(){
            return {
                navList: [{
                	id: 0,
                    text: "首页",
                    link: 'index.html'
                },{
                	id: 1,
                    text: "远程医学教育",
                    link: ''
                },{
                	id: 2,
                    text: "远程会诊服务",
                    link: ''
                },{
                	id: 3,
                    text: "双向转诊服务",
                    link: ''
                }],
                selectedNav: null
            }
        },
        mounted: function() {
        	//判断当前页面是第几个菜单页
            var selectedNav = window.sessionStorage.getItem("selectedDocNav") ? window.sessionStorage.getItem("selectedDocNav") : '0';
            this.selectedNav = selectedNav;
        },
        methods: {
            login: function(){
                //跳转到登录页面
            },
            logout: function(){
                
            },
            download: function(){
                //下载APP
            },
            chooseNav: function(val){
            	window.sessionStorage.setItem("selectedDocNav", val);
                this.selectedNav = val;
                window.location.href = this.navList[val].link
            }
        }
    })
})()

+ 49 - 0
component/common/doctor-top.js

@ -0,0 +1,49 @@
(function(){
    Vue.component('doctor-top', {
        template: `<div class="c-border-b bgc-f5f5f5 c-666">
                <div class="container">
                    <div class="clearfix row ptb10">
                        <div class="fr col-md-6 h24 c-t-right" v-if="!islogin">
                        	<span class="plr10 btn" @click="login">登录</span>
                            <span class="plr10 lh24 c-border-l span-hover" @click="download">下载APP</span>
                        </div>
                        <div class="fr col-md-6 h24 c-t-right" v-if="islogin">
                        	<span class="plr10 lh24 span-hover" :class="{'span-active': selectedNav == -1}" @click="mine" @click>个人中心</span>
                            <span class="plr10 lh24 c-border-l span-hover" @click="download">下载APP</span>
                            <span class="plr10 lh24 c-border-l span-hover" @click="logout">安全退出</span>
                        </div>
                    </div>
                </div>
            </div>`,
        props: [],
        data: function(){
            return {
            	islogin: true,
            	selectedNav: null
            }
        },
        mounted: function() {
        	var selectedNav = window.sessionStorage.getItem("selectedDocNav")
        	if(selectedNav) {
        		this.selectedNav = selectedNav
        	}
        },
        methods: {
            login: function(){
                //跳转到登录页面
                window.location.href = '../../login/html/login.html'
            },
            mine: function() {
            	window.sessionStorage.setItem("selectedDocNav", -1);
            	window.location.href = 'mine.html'
            },
            logout: function(){
            	window.sessionStorage.removeItem("selectedDocNav")
                this.login()
            },
            download: function(){
                //下载APP
            }
        }
    })
})()

+ 196 - 0
component/doctor-home/device-reback.js

@ -0,0 +1,196 @@
(function() {
	Vue.component('device-reback', {
		template: `<div>
						<h3 class="pt40 pb20 pl30 pr40 m0 mb30 c-f16 c-border-b clearfix">意见反馈<span class="fr c-f14 c-0ad8c8 f-w400" @click="record()">反馈记录</span></h3>
						<div class="edit-question" v-if="!isRecord && isQuestion">
							<div class="question-form pl20 pr50">
								<h4 class="c-909090 f-w400 m0 mb30 txt-center" v-if="!isEdit">hi~你发现了什么问题?</h4>
								<ul class="container-fluid p0 mb20 clearfix">
									<li v-if="isEdit" class="fl question-li mr30">
										<div class="question-li-div c-323232 c-f14 txt-center select-active">功能优化</div>
									</li>
									<li v-if="!isEdit" class="fl question-li mr30" v-for="list in questionArr" :key="list.code">
										<div class="question-li-div c-323232 c-f14 txt-center" :class="{'select-active': judgeSelectIndex == list.code}" @click="select(list.code)">{{list.name}}</div>
										<p class="c-909090 m0 mt5 c-f12 txt-center">{{list.detail}}</p>
									</li>
								</ul>
								<div>
									<label class="">问题&建议<span class="c-f00">*</span></label>
									<p class="c-position-r m0" v-if="!isEdit">
										<textarea @input="limit" class="form-control" placeholder="请描述您在使用过程中遇到的问题或建议,如果遇到功能异常,上传异常页面截图能更快解决哦~"></textarea>
										<span class="limit c-909090">最多300字</span>
									</p>
									<p class="c-position-r m0" v-if="isEdit">
										<textarea @input="limit" readonly class="form-control" placeholder="请描述您在使用过程中遇到的问题或建议,如果遇到功能异常,上传异常页面截图能更快解决哦~"></textarea>
										<span class="limit c-909090">最多300字</span>
									</p>
								</div>
								<div class="h100 mtb20">
									<div class="fl set-img mr20 c-position-r" v-if="quesImg.length > 0" v-for="(imgs, key) in quesImg" :key="key">
										<img src="imgs.src" \>
										<span class="delete-img" v-if="!isEdit" @click="remove(key)"></span>
									</div>
									<div v-if="isEdit ? !isEdit : quesImg.length < 4" class="fl img-add mr20">
				                    	<input type="file" @change="uploadImg()" class="fl set-img type-hide"  accept="image/jpg,image/jpeg,image/png">
				                    </div>
				                    <span class="fl pt40 c-909090">(选填,图片最多可传4张)</span>
								</div>
								<div v-if="isEdit">
									<label class="">答复内容</label>
									<p class="c-position-r m0">
										<textarea readonly="true" class="form-control" placeholder="请描述您在使用过程中遇到的问题或建议,如果遇到功能异常,上传异常页面截图能更快解决哦~"></textarea>
										<span class="limit c-909090">最多300字</span>
									</p>
								</div>
								<p class="form-group mt10 clearfix" v-if="!isEdit">
									<input class="fl mr10 form-control" placeholder="请输入您的手机号码(必填)" /><span class="c-323232 c-f14">请留下您的联系方式,管理员会尽快为您找到解决方案</span>
								</p>
								<div class="pt20">
									<span v-if="!isEdit" class="btn" @click="submit()">提&emsp;交</span>
									<span v-if="isEdit" class="btn" @click="backRecord()">返&emsp;回</span>
								</div>
							</div>
						</div>
						<div class="finish-device txt-center" v-if="!isRecord && !isQuestion">
							<h3 class="device-success">意见反馈已完成</h3>
							<p class="c-909090 c-f18">您可以在反馈记录查看意见进展</p>
							<div class="pt30">
								<span class="btn" @click="back()">返&emsp;回</span>
							</div>
						</div>
						<div v-if="isRecord">
							<ul class="list-record pl30 c-f14 m0">
								<li v-if="recordList.length == 0" class="txt-center">暂无反馈记录</li>
								<li v-if="recordList.length > 0" class="c-border-b ptb10 clearfix" v-for="(list, index) in recordList" :key="index">
									<span class="fl c-fff list-tap pr5 mr20">{{list.tit}}</span>
									<p class="fl c-909090 list-detail m0">{{list.detail}}</p>
									<span class="fl list-status mr30" :class="{'list-status-active':list.status == 1}">{{list.status == 1 ? "已答复" : '未处理'}}</span>
									<span class="fl list-view pr20 c-0ad8c8" @click="view(list)">查看</span>
								</li>
							</ul>
							<div v-if="recordList.length == 0">
								<span class="btn" @click="back()">返&emsp;回</span>
							</div>
							<div class="mt15 h30 pr30 txt-center clearfix" v-if="recordList.length > 0">
								<div class="fr ml10 clearfix">
									<span class="fl c-border-tb c-border-l page-btn-input m0"><input class="fl c-888 page-input" v-model="editPage" /></span><span class="fr c-f12 btn page-btn page-btn-sure" @click="setPage(editPage)">确定</span>
								</div>
								<span class="fr btn page-btn" @click="setPage(page + 2)" v-if="page == 1">{{page + 2}}</span>
								<span class="fr btn page-btn" @click="setPage(page + 1)">{{page + 1}}</span>
								<span class="fr btn page-btn page-btn-active">{{page}}</span>
								<span class="fr btn page-btn"  @click="setPage(page - 1)" v-if="page != 1">{{page - 1}}</span>
							</div>
						</div>
					</div>`,
		props: [],
		data: function() {
			return {
				isQuestion: true,
				isRecord: false,
				isEdit: false,
				judgeSelectIndex: null,
				questionArr: [{
					name: "功能异常",
					detail: "举例:无法使用功能",
					code: "1"
				},{
					name: "功能优化",
					detail: "举例:不好用、界面难看",
					code: "2"
				},{
					name: "新功能建议",
					detail: "你希望有什么功能?",
					code: "3"
				},{
					name: "其他",
					detail: "举例:身份信息丢失",
					code: "4"
				}],
				quesImg: [{src: '../../../images/bg.png'}],
				recordList: [{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				}],
				page: 1,
				editPage: null
			}
		},
		methods: {
			select: function(key) {
				if(this.judgeSelectIndex == key) {
					this.judgeSelectIndex = null
				} else {
					this.judgeSelectIndex = key
				}
			},
			record: function() {
				this.isRecord = true
			},
			limit: function() {},
			remove: function(key) {
				this.quesImg.splice(key, 1)
			},
			submit: function() {
				this.isQuestion = false
			},
			back: function() {
				this.isQuestion = true
				this.isRecord = false
			},
			setPage: function(key) {
				if(+key) {
					this.page = +key
				} else {
					alert(key)
				}
			},
			view: function(list) {
				this.isRecord = false
				this.isQuestion = true
				this.isEdit = true
			},
			backRecord: function() {
				this.isRecord = true
				this.isQuestion = false
				this.isEdit = false
			}
		}
	})
})()

+ 43 - 0
component/doctor-home/index.js

@ -0,0 +1,43 @@
(function() {
	Vue.component('doctor-index', {
		template: `<div class="container-fluid chahua-bg">
				<div class="chahua container">
					<div class="modules">
						<h2 class="c-f24 c-fff">为您提供个性化工具模块</h2>
						<h2 class="c-f16 c-fff">让医疗工作变得更轻松</h2>
						<div class="clearfix pt70">
							<div v-for="(module, index) in modules" :key="index" class="ui-grid-middle fl ml30 c-border module">
								<img :src="module.img" />
								<h2 class="c-f20">{{module.tit}}</h2>
								<ul class="c-f16">
									<li v-for="(list, ind) in module.list" :key="ind">{{list.name}}</li>
								</ul>
							</div>
						</div>
					</div>
				</div>
			</div>`,
		props: [],
		data: function() {
			return {
				modules: [{
					tit: "远程医学教育",
					img: "../../../images/shouye_yixue_icon.png",
					list: [{name: "海量资料库"},{name: "教学资源共享"},{name: "教学视频播放"}]
				},{
					tit: "远程会诊服务",
					img: "../../../images/shouye_huizheng_icon.png",
					list: [{name: "远程专家会诊"},{name: '"面对面"交流'},{name: "病情智能对接"}]
				},{
					tit: "双向诊断服务",
					img: "../../../images/shouye_zhuanzhen_icon.png",
					list: [{name: "小病进社区"},{name: "大病转医院"},{name: "康复回社区"}]
				}],
				ishover: null
			}
		},
		methods: {
			
		}
	})
})()

+ 39 - 0
component/doctor-home/mine.js

@ -0,0 +1,39 @@
(function() {
	Vue.component('doctor-mine', {
		template: `<div class="container-fluid chahua-bg mt20">
				<div class="chahua container clearfix">
					<div class="fl my-count c-border">
						<h1>我的账户</h1>
						<ul class="list">
							<li v-for="(name, index) in list" :key="index" @click="setCon(index)" class="" :class="{'li-active': index == mineIndex}">{{name}}</li>
						</ul>
					</div>
					<div class="fl my-detail c-border">
						<div class="con1 pt40" v-if="mineIndex == 0">
							<per-info></per-info>
						</div>
						<div class="con2" v-if="mineIndex == 1">
							<safe-setting></safe-setting>
						</div>
						<div class="con3 pl30" v-if="mineIndex == 2">
							<device-reback></device-reback>
						</div>
					</div>
				</div>
			</div>`,
		props: [],
		data: function() {
			return {
				list: ["个人信息", "安全设置", "意见反馈"],
				mineIndex: 0,
				info: null,
				myPhoto: null
			}
		},
		methods: {
			setCon: function(index) {
				this.mineIndex = index
			}
		}
	})
})()

+ 60 - 0
component/doctor-home/per-info.js

@ -0,0 +1,60 @@
(function() {
	Vue.component('per-info', {
		template: `<div>
						<div class="c-t-center">
							<div>
								<div :class="{\'img-add\': !myPhoto}" class="c-vam c-inline-block c-position-r">
			                    	<input id="myPhoto" type="file" @change="uploadImg()" ref="codeImg" style="width: 100px; height: 100px;" class="c-vam c-inline-block type-hide"  accept="image/jpg,image/jpeg,image/png">
			                    	<img style="width: 100px; height: 100px; position: absolute; top: 0; z-index: -1;" class="c-vam c-inline-block" :src="myPhoto"  v-show="myPhoto" />
			                    </div>
			                </div>
		                    <label for="myPhoto" class="mt10 mb25 c-888">修改头像</label>
						</div>
						<div class="detail-info">
							<p class="form-group clearfix">
								<label class="fl form-label">姓&emsp;&emsp;名</label>
								<input class="fl form-control" placeholder="输入姓名" />
							</p>
							<p class="form-group clearfix">
								<label class="fl form-label">医生专长</label>
								<input class="fl form-control" placeholder="医生专长" />
							</p>
							<p class="form-group clearfix">
								<label class="fl form-label">手机号码</label>
								<input class="fl form-control" readonly="true" placeholder="" />
							</p>
							<p class="form-group clearfix">
								<label class="fl form-label">身份证号</label>
								<input class="fl form-control" readonly="true" placeholder="" />
							</p>
							<p class="form-group clearfix">
								<label class="fl form-label">机构部门</label>
								<input class="fl form-control" readonly="true" placeholder="" />
							</p>
							<p class="form-group clearfix">
								<label class="fl form-label">办公电话</label>
								<input class="fl form-control" placeholder="办公电话" />
							</p>
							<p class="form-group clearfix">
								<label class="fl form-label">医生主页</label>
								<input class="fl form-control" placeholder="医生主页" />
							</p>
						</div>
						<div class="pt10">
							<span class="btn" @click="saveMyInfo()">保&emsp;存</span>
						</div>
					</div>`,
		props: [],
		data: function() {
			return {
				info: null,
				myPhoto: null,
			}
		},
		methods: {
			saveMyInfo: function() {
				
			}
		}
	})
})()

+ 149 - 0
component/doctor-home/safe-setting.js

@ -0,0 +1,149 @@
(function() {
	Vue.component('safe-setting', {
		template: `<div>
						<ul class="safe-setting" v-if="!modifyJudge">
							<li class="set-psw m0 c-border-tb clearfix">
								<div class="fl li-txt">
									<h3 class="m0 mtb10">登录密码</h3>
									<p class="m0 c-888 c-f14">建议您定期更换密码,设置安全性更高的密码可以使账户更安全</p>
								</div>
								<div class="fr operate"><span class="btn" @click="modifyPsw">修改</span></>
							</li>
							<li class="safe-phone m0 c-border-b clearfix">
								<div class="fl li-txt">
									<h3 class="m0 mtb10">安全手机&emsp;{{info}}</h3>
									<p class="m0 c-888 c-f14">安全手机可用与登录账号,重置密码或其他安全验证</p>
								</div>
								<div class="fr operate"><span class="btn" @click="modifyPhone">更换</span></>
							</li>
						</ul>
						<div class="modify plr30" v-if="ismdiPsw">
							<h3 class="pt40 pb20 pl30 mb50 c-f16  c-border-b">修改密码</h3>
							<div class="psw-form pt30">
								<h4 class="m0 mb20">原密码</h4>
								<p class="form-group">
									<input class="fl form-control" placeholder="请输入原密码" />
								</p>
								<h4 class="m0 mb20">新密码</h4>
								<p class="form-group">
									<input class="fl form-control" placeholder="请输入6-20位登录密码" />
								</p>
								<p class="form-group">
									<input class="fl form-control" placeholder="请再次输入登录密码" />
								</p>
							</div>
							<div class="operate-btn pt40">
								<span class="btn" @click="savePsw()">确&emsp;定</span>
								<span class="btn btn-cancel" @click="cancel()">取&emsp;消</span>
							</div>
						</div>
						<div class="modify plr30" v-if="ismdiPhone">
							<h3 class="pt40 pb20 pl30 mb50 c-f16 c-border-b">更换手机号码</h3>
							<div class="mdiphone-form pt30">
								<div class="clearfix">
									<div v-for="step in indexArr" :key="step" class="fl step" :class="{'set-active': activeIndex >= step}">
										<div class="clearfix">
											<p v-if="step > 1" class="fl clearfix">
												<em class="fl"></em>
											</p>
											<span class="fl">{{step}}</span>
											<p v-if="step < 3" class="fl">
												<em class="fl"></em>
											</p>
										</div>
										<label class="mt20" :class="setClass(step)">{{setTxt(step)}}</label>
									</div>
								</div>
								<div class="mdi-detail-form txt-center pt50">
									<div class="container-fluid" v-if="activeIndex == 1">
										<h3 class="c-f14 mb40">已绑定的手机号:{{handlePhone(info)}}</h3>
										<p class="form-group clearfix">
											<label class="fl form-label">验证码</label>
											<input class="fl form-control" placeholder="短信验证码" />
											<span class="c-0ad8c8 send">发送验证码</span>
										</p>
										<p class="c-888">若您的手机号码无法使用,请尝试&nbsp;<span class="c-37a6ed">账号申诉</span></p>
									</div>
									<div class="container-fluid pt50" v-if="activeIndex == 2">
										<p class="form-group clearfix">
											<label class="fl form-label">手机号码</label>
											<input class="fl form-control" placeholder="输入新的手机号码" />
										</p>
										<p class="form-group clearfix">
											<label class="fl form-label">验证码</label>
											<input class="fl form-control" placeholder="短信验证码" />
											<span class="c-0ad8c8 send">发送验证码</span>
										</p>
									</div>
									<div class="step3 container-fluid" v-if="activeIndex == 3">
										<h3 class="success">手机号码更换成功</h3>
										<p class="c-909090">下次请使用新号码登录</p>
									</div>
								</div>
								<div>
									<span class="btn" v-if="activeIndex != 3" @click="next()">下一步</span>
									<span class="btn" v-if="activeIndex == 3" @click="cancel()">返回</span>
								</div>
							</div>
						</div>
					</div>`,
		props: [],
		data: function() {
			return {
				info: null,
				
				modifyJudge: false,
				ismdiPsw: false,
				ismdiPhone: false,
				
				indexArr: [1, 2, 3],
				activeIndex: 1
			}
		},
		methods: {
			modifyPsw: function() {
				this.modifyJudge = true
				this.ismdiPsw = true
			},
			modifyPhone: function() {
				this.modifyJudge = true
				this.ismdiPhone = true
			},
			savePsw: function() {},
			cancel: function() {
				this.modifyJudge = false
				this.ismdiPsw = false
				this.ismdiPhone = false
				this.activeIndex = 1
			},
			// 更换手机号
			setTxt: function(index) {
				var str = ''
				switch(+index) {
					case 1: str = '验证身份';break
					case 2: str = '修改手机号码';break
					case 3: str = '完成更换';break
				}
				return str
			},
			setClass: function(index) {
				var str = ''
				switch(+index) {
					case 1: str = '';break
					case 2: str = 'txt-center';break
					case 3: str = 'txt-right';break
				}
				return str
			},
			handlePhone: function(phone) {
				if(!phone) {
					return ''
				}
				return phone.substr(0,3) + '****' + phone.substr(7, 4)
			},
			next: function() {
				this.activeIndex++
			}
		}
	})
})()

+ 241 - 0
component/doctor/appeal.js

@ -0,0 +1,241 @@
(function() {
	Vue.component('appeal-form', {
		template: `<div><div class="container-fluid">
				<div class="container" id="head">
					<div class="top-banner">
						<img src="../../../images/doctor_logo_img.png" class="hlogo" />
						<span class="qr-container">
							<img src="../../../images/qr_code.png" class="qr_code" />
							<p class="c-f12 text-center">下载APP</p>
						</span>
						<span class="c-border-l return" @click="goLogin()">返回登录页</span>
					</div>
				</div>
			</div>
			<div class="container-fluid chahua-bg c-border-t">
				<div class="container ptb40">
					<div class="appeal-form c-border">
						<h3 class="pt20 pb10 pl0 pr20 m0 mb30 c-f16 c-border-b clearfix">账号申诉<span class="fr c-f14 c-0ad8c8 f-w400" @click="record()">申诉记录</span></h3>
						<div class="edit-question" v-if="!isRecord && isQuestion">
							<div class="question-form pl20 pr50">
								<h4 class="c-909090 f-w400 m0 mb10 txt-center" v-if="!isEdit">hi~你发现了什么问题?</h4>
								<label class="mb10">选择申诉类型<span class="c-f00">*</span></label>
								<ul class="container-fluid p0 mb20 clearfix">
									<li v-if="isEdit" class="fl question-li mr30">
										<div class="question-li-div c-323232 c-f14 txt-center select-active">功能优化</div>
									</li>
									<li v-if="!isEdit" class="fl question-li mr30" v-for="list in questionArr" :key="list.code">
										<div class="question-li-div c-323232 c-f14 txt-center" :class="{'select-active': judgeSelectIndex == list.code}" @click="select(list.code)">{{list.name}}</div>
									</li>
								</ul>
								<div>
									<label class="mb10">问题&建议<span class="c-f00">*</span></label>
									<p class="c-position-r m0" v-if="!isEdit">
										<textarea @input="limit" class="form-control" placeholder="请描述您在使用过程中遇到的问题或建议,如果遇到功能异常,上传异常页面截图能更快解决哦~"></textarea>
										<span class="limit c-909090">最多300字</span>
									</p>
									<p class="c-position-r m0" v-if="isEdit">
										<textarea @input="limit" readonly class="form-control" placeholder="请描述您在使用过程中遇到的问题或建议,如果遇到功能异常,上传异常页面截图能更快解决哦~"></textarea>
										<span class="limit c-909090">最多300字</span>
									</p>
								</div>
								<div class="h100 mtb20">
									<div class="fl set-img mr20 c-position-r" v-if="quesImg.length > 0" v-for="(imgs, key) in quesImg" :key="key">
										<img src="imgs.src" \>
										<span class="delete-img" v-if="!isEdit" @click="remove(key)"></span>
									</div>
									<div v-if="isEdit ? !isEdit : quesImg.length < 4" class="fl img-add mr20">
				                    	<input type="file" @change="uploadImg()" class="fl set-img type-hide"  accept="image/jpg,image/jpeg,image/png">
				                    </div>
				                    <span class="fl pt40 c-909090">(选填,图片最多可传4张)</span>
								</div>
								<div v-if="isEdit">
									<div class="mb10">
										<label class="m0">处理时间</label><span class="ml10">2018-04-28</span>
									</div>
									<div>
										<label class="mb10">处理记录</label>
										<p class="c-position-r m0">
											<textarea readonly="true" class="form-control" placeholder="请描述您在使用过程中遇到的问题或建议,如果遇到功能异常,上传异常页面截图能更快解决哦~"></textarea>
										</p>
									</div>
								</div>
								<div class="mt10 clearfix" v-if="!isEdit">
									<p class="c-323232 c-f14 txt-center">请留下您的联系方式,管理员会尽快为您找到解决方案</p>
									<div class="c-border pt30 pl50 b-r-5">
										<p class="form-group clearfix">
											<label class="fl form-label">姓名<span class="c-f00">*</span></label>
											<input class="fl form-control" placeholder="请输入姓名" />
										</p>
										<p class="form-group clearfix">
											<label class="fl form-label">身份证<span class="c-f00">*</span></label>
											<input class="fl form-control" placeholder="请输入身份证号" />
										</p>
										<p class="form-group clearfix">
											<label class="fl form-label">手机号<span class="c-f00">*</span></label>
											<input class="fl form-control" placeholder="请输入手机号" />
										</p>
									</div>
								</div>
								<div class="pt20">
									<span v-if="!isEdit" class="btn" @click="submit()">提&emsp;交</span>
									<span v-if="isEdit" class="btn" @click="backRecord()">返&emsp;回</span>
								</div>
							</div>
						</div>
						<div class="finish-device txt-center" v-if="!isRecord && !isQuestion">
							<h3 class="device-success">账号申诉已完成</h3>
							<p class="c-909090 c-f18">您可以在申诉记录查看意见进展</p>
							<div class="pt30">
								<span class="btn" @click="back()">返&emsp;回</span>
							</div>
						</div>
						<div v-if="isRecord">
							<ul class="list-record pl30 c-f14 m0">
								<li v-if="recordList.length == 0" class="txt-center">暂无反馈记录</li>
								<li v-if="recordList.length > 0" class="c-border-b ptb10 clearfix" v-for="(list, index) in recordList" :key="index">
									<span class="fl c-fff list-tap pr5 mr20">{{list.tit}}</span>
									<p class="fl c-909090 list-detail m0">{{list.detail}}</p>
									<span class="fl list-status mr30" :class="{'list-status-active':list.status == 1}">{{list.status == 1 ? "已处理" : '待处理'}}</span>
									<span class="fl list-view pr20 c-0ad8c8" @click="view(list)">查看</span>
								</li>
							</ul>
							<div v-if="recordList.length == 0">
								<span class="btn" @click="back()">返&emsp;回</span>
							</div>
							<div class="mt15 h30 pr30 txt-center clearfix" v-if="recordList.length > 0">
								<div class="fr ml10 clearfix">
									<span class="fl c-border-tb c-border-l page-btn-input m0"><input class="fl c-888 page-input" v-model="editPage" /></span><span class="fr c-f12 btn page-btn page-btn-sure" @click="setPage(editPage)">确定</span>
								</div>
								<span class="fr btn page-btn" @click="setPage(page + 2)" v-if="page == 1">{{page + 2}}</span>
								<span class="fr btn page-btn" @click="setPage(page + 1)">{{page + 1}}</span>
								<span class="fr btn page-btn page-btn-active">{{page}}</span>
								<span class="fr btn page-btn"  @click="setPage(page - 1)" v-if="page != 1">{{page - 1}}</span>
							</div>
						</div>
					</div>
				</div>
			</div></div>`,
		props: [],
		data: function() {
			return {
				isRecord: false,
				isEdit: false,
				isQuestion: true,
				judgeSelectIndex: null,
				questionArr: [{
					name: "手机号无法使用",
					code: "1"
				},{
					name: "无法找回密码",
					code: "2"
				},{
					name: "其他",
					code: "3"
				}],
				quesImg: [],
				recordList: [{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "手机号无法使用",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				},{
					tit: "无法找回密码",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "1"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				},{
					tit: "功能异常",
					detail: "是啥东西爱尔家圣诞节哦按时大多数萨达阿达擦擦擦市场擦拭菜市场大神擦拭的",
					status: "0"
				}],
				page: 1,
				editPage: null
			}
		},
		methods: {
			goHelp: function() {
				window.location.href = "appeal.html"
			},
			goLogin: function() {
				window.location.href = "login.html"
			},
			select: function(key) {
				if(this.judgeSelectIndex == key) {
					this.judgeSelectIndex = null
				} else {
					this.judgeSelectIndex = key
				}
			},
			record: function() {
				this.isRecord = true
			},
			limit: function() {
				
			},
			remove: function(key) {
				this.quesImg.splice(key, 1)
			},
			submit: function() {
				this.isQuestion = false
			},
			back: function() {
				this.isQuestion = true
				this.isRecord = false
			},
			setPage: function(key) {
				if(+key) {
					this.page = +key
				} else {
					alert(key)
				}
			},
			view: function(list) {
				this.isRecord = false
				this.isQuestion = true
				this.isEdit = true
			},
			backRecord: function() {
				this.isRecord = true
				this.isQuestion = false
				this.isEdit = false
			}
		},
		watch: {
//			Password: function(newVal, oldVal) {
//				var val = newVal.toString();
//				var reg = /\s+/g; //去除空格
//				if(reg.test(val)) {
//					this.Password = oldVal;
//				}
//			}
		}
	})
})()

+ 158 - 0
component/doctor/forget.js

@ -0,0 +1,158 @@
(function() {
	Vue.component('forget-form', {
		template: `<div><div class="container-fluid">
				<div class="container" id="head">
					<div class="top-banner">
						<img src="../../../images/doctor_logo_img.png" class="hlogo" />
						<span class="qr-container">
							<img src="../../../images/qr_code.png" class="qr_code" />
							<p class="c-f12 text-center">下载APP</p>
						</span>
						<span class="c-border-l return" @click="goLogin()">返回登录页</span>
					</div>
				</div>
			</div>
			<div class="container-fluid chahua-bg c-border-t">
				<div class="container ptb100">
					<div class="forget-form c-border">
						<div class="clearfix">
							<div v-for="step in indexArr" :key="step" class="fl step" :class="{'set-active': activeIndex >= step}">
								<div class="clearfix" :class="{'pl15': step == 1}">
									<p v-if="step > 1" class="fl clearfix">
										<em class="fl"></em>
									</p>
									<span class="fl">{{step}}</span>
									<p v-if="step < 4" class="fl">
										<em class="fl"></em>
									</p>
								</div>
								<label class="mt20" :class="setClass(step)">{{setTxt(step)}}</label>
							</div>
						</div>
						<div class="detail-form">
							<div class="container-fluid" v-if="activeIndex == 1">
								<p class="form-group clearfix">
									<label class="fl form-label">用户名称</label>
									<input class="fl form-control" placeholder="手机号码/用户名称" />
								</p>
								<p class="form-group clearfix">
									<label class="fl form-label">验证码</label>
									<input class="fl form-control" placeholder="输入图形验证码" />
								</p>
								<p class="form-group clearfix">
									<label class="fl form-label"></label>
									<img class="fl" height="30" src="">看不清&nbsp;?&nbsp;<span class="c-0ad8c8">换一张</span>
								</p>
							</div>
							<div class="container-fluid" v-if="activeIndex == 2">
								<p class="form-group clearfix">
									<label class="fl form-label">用户名称</label>
									<input class="fl form-control" readonly="true" placeholder="用户名称" />
								</p>
								<div class="form-group">
									<p class="m0 clearfix">
										<label class="fl form-label">手机号码</label>
										<input class="fl form-control" readonly="true" placeholder="手机号码" />
									</p>
									<p class="c-909090 c-f12 m0"><label class="form-label h0"></label>若该手机号码无法正常使用请<span class="c-37a6ed ml5 appeal" @click="goHelp()">账号申诉</span></p>
								</div>
								<p class="form-group clearfix">
									<label class="fl form-label">验证码</label>
									<input class="fl form-control" placeholder="短信验证码" />
									<span class="c-0ad8c8 send">发送验证码</span>
								</p>
							</div>
							<div class="container-fluid" v-if="activeIndex == 3">
								<p class="form-group clearfix">
									<label class="fl form-label">新的密码</label>
									<input class="fl form-control" placeholder="设置6-20位登录密码" />
								</p>
								<p class="form-group clearfix">
									<label class="fl form-label">重复密码</label>
									<input class="fl form-control" placeholder="请再次输入登录密码" />
								</p>
							</div>
							<div class="step4 container-fluid" v-if="activeIndex == 4">
								<h3 class="success">密码重置成功</h3>
								<p class="c-909090">下次请使用新密码登录</p>
							</div>
						</div>
						<div>
							<span class="btn" v-if="activeIndex != 4" @click="next()">下一步</span>
							<span class="btn" v-if="activeIndex == 4" @click="goLogin()">进入登录页</span>
						<div>
					</div>
				</div>
			</div></div>`,
		props: [],
		data: function() {
			return {
				indexArr: [1, 2, 3, 4],
				activeIndex: 1
			}
		},
		methods: {
			setTxt: function(index) {
				var str = ''
				switch(+index) {
					case 1: str = '填写账号名';break
					case 2: str = '验证身份';break
					case 3: str = '设置新密码';break
					case 4: str = '完成';break
				}
				return str
			},
			setClass: function(index) {
				var str = ''
				switch(+index) {
					case 1: str = '';break
					case 2: str = 'txt-center';break
					case 3: str = 'txt-center';break
					case 4: str = 'txt-right';break
				}
				return str
			},
			goHelp: function() {
				window.location.href = "appeal.html"
			},
			goLogin: function() {
				window.location.href = "login.html"
			},
			next: function() {
				this.activeIndex++
			}
		},
		watch: {
//			Password: function(newVal, oldVal) {
//				var val = newVal.toString();
//				var reg = /\s+/g; //去除空格
//				if(reg.test(val)) {
//					this.Password = oldVal;
//				}
//			}
		}
	})
//	function login(data) {
//		httpRequest.post('login/doctor', {
//			data: data
//		}).then(function(res) {
//			if(res.status == 200) {
//				var docInfo = res.data;
//				localoginlStorage.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/html/index.html";
//			} else {
//				tip(res.msg);
//			}
//		});
//	}
})()

+ 300 - 0
component/doctor/login.js

@ -0,0 +1,300 @@
(function() {
	Vue.component('login-form', {
		template: `<div><div class="container-fluid">
				<div class="container" id="head">
					<div class="top-banner">
						<img src="../../../images/doctor_logo_img.png" class="hlogo" />
						<span class="qr-container">
							<img src="../../../images/qr_code.png" class="qr_code" />
							<p class="c-f12 text-center">下载APP</p>
						</span>
						<span class="c-border-l return" @click="goRetorn">返回门户页</span>
					</div>
				</div>
			</div>
			<div class="container-fluid chahua-bg">
				<div class="chahua container">
					<div class="loginForm fr">
						<div class="tabs-container no-borders mtb20 plr30">
							<ul class="nav nav-tabs c-border-b">
								<li :class="{'active': type==1}" @click="changeType(1)">
									<a style="padding:10px 0px;margin-left:35px;margin-right: 35px;font-size: 20px;">密码登录</a>
								</li>
								<li :class="{'active': type==2}" @click="changeType(2)">
									<a style="padding:10px 0px;margin-left:25px;margin-right: 25px;font-size: 20px;">验证码登录</a>
								</li>
							</ul>
							<div class="tab-content">
								<div class="tab-pane" :class="{'active': type==1}">
									<div class="panel-body  no-borders" style="padding: 0px;">
										<form id="form1" class="m-t" role="form" onsubmit="return false;">
											<div class="form-group">
												<input class="form-control" type="text"  v-model="account" placeholder="请输入身份证号或者手机号码">
											</div>
											<div class="form-group">
												<input class="form-control" type="password" v-model="password" placeholder="请输入密码">
											</div>
											<div class="text-right c-323232" style="margin-top:-10px;"><span class="set-hover" @click="forget">忘记密码</span></div>
											<button type="submit" class="btn btn-theme block full-width m-b" @click="login">登 录</button>
										</form>
									</div>
								</div>
								<div class="tab-pane" :class="{'active': type==2}">
									<div class="panel-body no-borders" style="padding: 0px;">
										<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="imgcaptcha" placeholder="请输入图形验证码">
												<a class="getCaptcha" :class="{'disabled': countdown}" @click="getCaptcha">{{infoText}}</a>
											</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-theme block full-width m-b" @click="login">登 录</button>
										</form>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div></div>`,
		props: [],
		data: function() {
			return {
				type: 1, //记录选择的登录方式,1-手机号登录,2-验证码登录
				account: '17500000001',
				mobile: '',
				password: '123456',
				imgcaptcha: '',
				captcha: '',
				infoText: '获取验证码',
				countdown: false ,//是否在倒计时
				codeType: 1,
				idCardNo: "350526199501142015",
				rPassword: 'a123123',
				confirmPassword: "a123123",
				toggle: true,
				maxLength:18,
			}
		},
		methods: {
			forget: function() {
				window.location.href = "forget.html"
			},
			changeType: function(val) {
				this.type = val;
			},
			getCaptcha: function() {
				//先校验手机号码是否正确
				var isMobile = isMobilePhone(this.mobile);
				if(!isMobile) {
					alert('请输入正确的手机号码!');
					return false;
				}
				setTimer(this);
				//发送请求
				//			sendToGetCaptcha(this);
			},
			goRetorn: function() {
				window.location.href = "../../home/html/index.html"
			},
			login: function() {
				window.location.href = "../../home/html/index.html"
				var vm = this
				if(this.type == 1) {
					if(!vm.account) {
						console.log("账号不能为空!");
						return false;
					}
					if(!vm.password) {
						console.log("登录密码不能为空!");
						return false;
					}
					console.log(httpRequest)
					var data={
						grant_type: httpRequest.grant_type,
						client_id: httpRequest.client_id,
						username: vm.account,
						password: vm.password
					}
					console.log(data)
					loginAPI.accessToken(data).then(function(oauthInfo) {
						storage.setItem("oauthInfo", JSON.stringify(oauthInfo));
						var data1={
							userName:oauthInfo.user,
							accessToken: oauthInfo.accessToken
						}
						loginAPI.getUserInfo(data1).then(function(res) {
							console.log("登录成功");
							loginedList = [res.telephone]
							storage.setItem("loginedList", JSON.stringify(loginedList));
							storage.setItem("userAgent", JSON.stringify(res));
							vm.getJueSeData(res);
						}), function error(xhr, type, errorThrown) {
							if(type == "timeout" || type == "abort" || type == "error") {
								console.log("账号或密码错误");
							}
						}
					}).catch(function(e) {
						console.log("账号或密码错误")
					})
				} else {
					if(!vm.mobile) {
						console.log("手机号不能为空!");
						return false;
					}
					if(!vm.imgcaptcha) {
						console.log("图形验证码不能为空!");
						return false;
					}
					if(!vm.captcha) {
						console.log("手机验证码不能为空!");
						return false;
					}
				}
			},
			getJueSeData: function(userAgent) {
				var vm = this;
				//获取居民权限接口
				loginAPI.findByUserId({
					userId: userAgent.id
				}).then(function(data) {
					storage.setItem("roleList",JSON.stringify(data.detailModelList));//缓存角色列表
//					app.openWebviewExtras("../../home/html/home.html");//跳转到主页面
				})
			}
		},
		watch: {
			Password: function(newVal, oldVal) {
				var val = newVal.toString();
				var reg = /\s+/g; //去除空格
				if(reg.test(val)) {
					this.Password = oldVal;
				}
			},
			confirmPassword: function(newVal, oldVal) {
				var val = newVal.toString();
				var reg = /\s+/g; //去除空格
				if(reg.test(val)) {
					this.confirmPassword = oldVal;
				}
			},
			codeType: function(newVal) {
				var vm=this;
				var val = newVal.toString();
				if(val == 1) {
					$("#IDCard").attr("placeholder", "请输入身份证号")
					vm.maxLength=18
				} else if(val == 2) {
					$("#IDCard").attr("placeholder", "请输入手机号码")
					vm.maxLength=11
				}
			}
		}
	})
	//验证码定时
	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 isCardNo(card, codeType) {
		var isidcard = false
		if(codeType == 1) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 
			var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
			if(!reg.test(card)) {
				alert("身份证号输入不合法");
			} else {
				isidcard = true
			}
		}else{
			var reg = /0?(13|14|15|18|17)[0-9]{9}/;
			if(!reg.test(card)) {
				alert("手机号码输入不合法");
			} else {
				isidcard = true
			}
		}
		return isidcard
	}
	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;
				localoginlStorage.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/html/index.html";
			} else {
				tip(res.msg);
			}
		});
	}
})()

+ 20 - 0
doctor/home/css/index.css

@ -0,0 +1,20 @@
html {overflow: auto; min-width: 970px;}
body {font-size: 13px;}
.ui-grid-middle {-webkit-box-pack: center;}
.btn {vertical-align: top; width: 60px; padding: 0 10px; margin: 0 10px; background-color: #0ad8c8;}
.btn-hover {color: #0ad8c8;}
.nav-item.active, .nav-item:hover {color: #0DBCBA; background-color: #fff;}
.nav-item {height: 122px; line-height: 122px; width: auto; padding: 0 20px; margin-right: 0; color: #888;}
.chahua-bg{position: relative;background: url(../../../images/BG.jpg) no-repeat center;background-size: 100% 100%;height: 700px;}
.chahua{background: url(../../../images/menghu_bg_img.png) no-repeat 0% 46.5%; position: absolute;left: 0;right: 0;top: 0;bottom: 0;}
.modules {padding: 120px 0 0 480px; text-align: center;}
.modules li {text-align: left;}
.module {border-radius: 5px; padding: 10px; border-color: #0ad8c8; color: #63e8e2; cursor: pointer;}
.module:hover {border-color: #fff; color: #fff;}
.pt70 {padding-top: 70px;}
.h24 {height: 24px;}
.lh24 {line-height: 24px;}
.span-hover {cursor: pointer;}
.span-hover:hover {color: #0ad8c8;}
.span-hover:active {text-decoration: underline;}
.span-active {color: #0ad8c8;}

+ 91 - 0
doctor/home/css/mine.css

@ -0,0 +1,91 @@
html {overflow: auto; min-width: 970px;}
body {font-size: 13px;}
ul {list-style: none;}
.ui-grid-middle {-webkit-box-pack: center;}
.btn {vertical-align: top; width: 60px; padding: 0 10px; margin: 0 10px; background-color: #0ad8c8;}
.btn-hover {color: #0ad8c8;}
.nav-item.active, .nav-item:hover {color: #0DBCBA; background-color: #fff;}
.nav-item {height: 122px; line-height: 122px; width: auto; padding: 0 20px; margin-right: 0; color: #888;}
.chahua-bg{height: 700px;}
.pt70 {padding-top: 70px;}
.pl70 {padding-left: 70px;}
.h20 {height: 20px;}
.h24 {height: 24px;}
.lh24 {line-height: 24px;}
.c-888 {color: #888;}
.c-0ad8c8 {color: #0ad8c8;cursor: pointer;}
.c-0ad8c8:active {text-decoration: underline;}
.span-hover {cursor: pointer;}
.span-hover:hover {color: #0ad8c8;}
.span-hover:active {text-decoration: underline;}
.span-active {color: #0ad8c8;}
.my-count {width: 200px; padding: 20px 0 60px;}
.my-count h1 {height: 36px; margin: 0; padding-left: 60px; line-height: 36px; font-size: 18px; font-weight: 600; background: url(../../../images/icon_wodezhanghu.png) no-repeat 28px 6px;}
.list {padding: 0; text-indent: 60px;}
.list li {height: 24px; line-height: 24px; margin: 5px 0; border-left: 3px solid #fff; font-size: 14px; color: #888; cursor: pointer;}
.list .li-active, .list li:hover {border-left: 3px solid #0ad8c8; color: #0ad8c8;}
.my-detail {width: calc(100% - 220px); height: 680px; font-size: 14px; margin-left: 20px;}
.detail-info {width: 480px; margin: 0 auto;}
.c-vam {width: 100px; height: 100px; border-radius: 50%;}
input.type-hide {opacity: 0;-ms-filter: 'alpha(opacity=0)';}
.img-add {background: url(../../../images/shangchuan_icon.png) no-repeat 0 0;}
.form-group {height: 30px; line-height: 30px; margin-bottom: 25px;}
.form-label {width: 120px; height: 30px; color: #323232; margin: 0 20px 0 0; font-weight: normal; text-align: right;}
.form-control {width: 310px; height: 30px;}
.btn {display: block; width: 140px; height: 30px; line-height: 28px; color: #fff; margin: 0 auto;}
.btn:hover {color: #fff;}
.safe-setting {padding: 100px 80px;text-indent: 0px;}
.safe-setting li {height: 120px; padding: 30px 20px 30px 80px;}
.set-psw {background: url(../../../images/mima_icon.png) no-repeat 12px 30px;}
.safe-phone {background: url(../../../images/shouji_icon.png) no-repeat 12px 32px;}
.li-txt {width: calc(100% - 140px)}
.operate {width: 140px; padding-top: 14px;}
.psw-form {width: 310px;margin: 0 auto;}
.modify h4 {font-weight: 400;}
.operate-btn {width: 400px;margin: 0 auto;}
.operate-btn .btn {display: inline-block;margin: 0 25px;}
.operate-btn .btn-cancel {border: 1px solid #888; background-color: #fff; color: #888;}
.operate-btn .btn-cancel:hover {color: #888;}
.mdiphone-form {width: 500px; margin: 0 auto;}
.step p {padding-top: 24px;}
.step em {width: 80px; height: 4px; background-color: #d1d7d4;}
.step span {width: 52px; height: 52px; border: 2px solid #d1d7d4; border-radius: 50%; color: #909090; font-size: 16px; text-align: center; line-height: 50px;}
.set-active em {background-color: #0ad9c8;}
.set-active span, .btn {background-color: #0ad9c8; border-color: #0ad9c8; color: #fff;}
.step label {width: 100%; color: #909090; font-size: 16px; font-weight: normal;}
.set-active label {color: #0ad9c8;}
.txt-center {width: 100%; text-align: center;}
.txt-right {width: 100%; text-align: right;}
.mdi-detail-form {height: 300px;}
.send {display: inline-block; width: 75px; line-height: 32px; margin-left: -100px;}
.step3 {text-align: center;}
.success {padding-top: 100px; margin: 0 0 20px; font-weight: 500; font-size: 24px; background: url(../../../images/chenggong_icon.png) no-repeat center 0;}
.f-w400 {font-weight: 400;}
.question-li {width: 134px;}
.question-li-div {height: 38px; line-height: 38px; border: 1px solid #d1d7d4; border-radius: 3px; cursor: pointer;}
.select-active {border: 1px solid #0ad8c8; background: url(../../../images/icon_xuanzhong.png) no-repeat 115px 23px;background-size: 13% 38%;}
textarea.form-control {width: 100%; height: 100px; border-radius: 5px; resize: none;}
.limit {position: absolute; bottom: 5px; right: 5px;}
.set-img {width: 100px; height: 100px; border-radius: 5px;}
.delete-img {position: absolute; top: -4px; right: -4px; width: 16px; height: 16px; background: url(../../../images/guanbi_btn.png) no-repeat 0 0; cursor: pointer;}
.finish-device {width: 300px; margin: 0 auto; padding-top: 100px;}
.device-success {padding-top: 200px; margin: 0 0 20px; font-weight: 600; font-size: 24px; background: url(../../../images/chenggong_icon.png) no-repeat center 0; background-size: 50% 67%;}
.list-record {height: 510px;}
.list-tap, .list-detail, .list-status, .list-view {height: 30px;line-height: 30px;}
.list-tap {width: 90px; text-align: right; background: url(../../../images/biaoqian01_img.png) 0 0;}
.list-status {width: 50px; color: #ff8787;}
.list-status-active {color: #909090;}
.list-view {width: 50px;}
.list-detail {overflow: hidden; width: calc(100% - 340px); margin-right: 80px; text-overflow: ellipsis; white-space: nowrap;}
.page-btn {height: 30px; width: 30px; padding: 0; background-color: #fff; color: #888; border: 1px solid #e1e1e1; margin-left: 10px; line-height: 28px;}
.page-btn:hover {color: #888;}
.page-btn-active {background-color: #0ad8c8; color: #fff; border: 1px solid #0ad8c8;}
.page-input { width: 30px; height: 28px; padding: 0 2px; border: 0px; text-align: right; outline: none;}
.page-btn-input {width: 32px;height: 30px;margin: 0;}
.page-btn-sure {width: 32px; margin: 0; border-radius: 0; text-align: center; cursor: pointer;}

+ 41 - 0
doctor/home/html/index.html

@ -0,0 +1,41 @@
<!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="../css/index.css" />
    </head>
    <body>
        <div id="main">
        	<doctor-top></doctor-top>
            <doctor-header></doctor-header>
            <doctor-index></doctor-index>
            <page-footer></page-footer>
        </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 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="../../../component/common/doctor-top.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/doctor-header.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/doctor-home/index.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/footer.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/event-bus.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/index.js" type="text/javascript" charset="utf-8"></script>
    </body>
</html>

+ 44 - 0
doctor/home/html/mine.html

@ -0,0 +1,44 @@
<!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="../css/mine.css" />
    </head>
    <body>
        <div id="main">
        	<doctor-top></doctor-top>
            <doctor-header></doctor-header>
            <doctor-mine></doctor-mine>
            <page-footer></page-footer>
        </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 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="../../../component/common/doctor-top.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/doctor-header.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/doctor-home/mine.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/doctor-home/per-info.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/doctor-home/safe-setting.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/doctor-home/device-reback.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/footer.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/event-bus.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/index.js" type="text/javascript" charset="utf-8"></script>
    </body>
</html>

+ 6 - 0
doctor/home/js/index.js

@ -0,0 +1,6 @@
new Vue({
    el: "#main",
    data: {
        
    }
})

+ 65 - 0
doctor/login/css/appeal.css

@ -0,0 +1,65 @@
html {overflow: auto; min-width: 970px;}
body {
	font-size: 13px;
}
ul {list-style: none;}
.top-banner{position: relative;}
.qr-container{position: absolute;right: 120px;height: 100%;display: block;top: 15%;}
.return {position: absolute; right: -5px; top: 40%; width: 105px; color: #888; text-align: center; cursor: pointer;}
.set-hover {cursor: pointer;}
.return:hover, .set-hover:hover, .c-0ad8c8 {color: #0ad8c8}
.return:active, .set-hover:active, .c-0ad8c8:active {text-decoration: underline;}
.hlogo{width: 30%;height: auto;display: block;}
.qr_code{
	height: 60%;
	width: auto;
	display: block;
	border: 3px solid #38D1CB;
	transform-origin: 100% 0;
	transition: all .5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
	cursor: pointer;
}
.qr_code:hover {
	transform: scale(2);
	position: relative;
	z-index: 2;
	box-shadow: 0 4px 8px 0 rgba(255,255,255,0.2),0 6px 20px 0 rgba(255,255,255,0.19);
}
.appeal-form {width: 900px; padding: 0px 0px 20px 30px; margin: 0 auto; border-radius: 5px;}
.txt-center {width: 100%; text-align: center;}
.txt-right {width: 100%; padding-right: 10px; text-align: right;}
.c-vam {width: 100px; height: 100px; border-radius: 50%;}
input.type-hide {opacity: 0;-ms-filter: 'alpha(opacity=0)';}
.img-add {background: url(../../../images/shangchuan_icon.png) no-repeat 0 0;}
.form-group {height: 30px; line-height: 30px; margin-bottom: 30px;}
.form-label {width: 200px; height: 30px; color: #323232; margin: 0 20px 0 0; font-weight: normal; text-align: right;}
.form-control {width: 310px; height: 30px;}
.btn {display: block; width: 140px; border-color: #0ad9c8; margin: 0 auto; background-color: #0ad9c8; color: #fff;}
.btn:hover {color: #fff;}
.question-li {width: 134px;}
.question-li-div {height: 38px; line-height: 38px; border: 1px solid #d1d7d4; border-radius: 3px; cursor: pointer;}
.select-active {border: 1px solid #0ad8c8; background: url(../../../images/icon_xuanzhong.png) no-repeat 115px 23px;background-size: 13% 38%;}
textarea.form-control {width: 100%; height: 100px; border-radius: 5px; resize: none;}
.limit {position: absolute; bottom: 5px; right: 5px;}
.set-img {width: 100px; height: 100px; border-radius: 5px;}
.delete-img {position: absolute; top: -4px; right: -4px; width: 16px; height: 16px; background: url(../../../images/guanbi_btn.png) no-repeat 0 0; cursor: pointer;}
.finish-device {width: 300px; margin: 0 auto; padding-top: 100px;}
.device-success {padding-top: 200px; margin: 0 0 20px; font-weight: 600; font-size: 24px; background: url(../../../images/chenggong_icon.png) no-repeat center 0; background-size: 50% 67%;}
.list-record {height: 510px;}
.list-tap, .list-detail, .list-status, .list-view {height: 30px;line-height: 30px;}
.list-tap {width: 120px; text-align: right; background: url(../../../images/biaoqian02_img.png) no-repeat 0 0;}
.list-status {width: 50px; color: #ff8787;}
.list-status-active {color: #909090;}
.list-view {width: 50px;}
.list-detail {overflow: hidden; width: calc(100% - 370px); margin-right: 80px; text-overflow: ellipsis; white-space: nowrap;}
.page-btn {height: 30px; width: 30px; padding: 0; background-color: #fff; color: #888; border: 1px solid #e1e1e1; margin-left: 10px; line-height: 28px;}
.page-btn:hover {color: #888;}
.page-btn-active {background-color: #0ad8c8; color: #fff; border: 1px solid #0ad8c8;}
.page-input { width: 30px; height: 28px; padding: 0 2px; border: 0px; text-align: right; outline: none;}
.page-btn-input {width: 32px;height: 30px;margin: 0;}
.page-btn-sure {width: 32px; margin: 0; border-radius: 0; text-align: center; cursor: pointer;}
.b-r-5 {border-radius: 5px;}
.c-0ad8c8 {color: #0ad8c8;cursor: pointer;}
.c-0ad8c8:active {text-decoration: underline;}

+ 50 - 0
doctor/login/css/forget.css

@ -0,0 +1,50 @@
html {overflow: auto; min-width: 970px;}
body {
	font-size: 13px;
}
.top-banner{position: relative;}
.qr-container{position: absolute;right: 120px;height: 100%;display: block;top: 15%;}
.return {position: absolute; right: -5px; top: 40%; width: 105px; color: #888; text-align: center; cursor: pointer;}
.set-hover {cursor: pointer;}
.return:hover, .set-hover:hover, .c-0ad8c8 {color: #0ad8c8}
.return:active, .set-hover:active, .c-0ad8c8:active {text-decoration: underline;}
.hlogo{width: 30%;height: auto;display: block;}
.qr_code{
	height: 60%;
	width: auto;
	display: block;
	border: 3px solid #38D1CB;
	transform-origin: 100% 0;
	transition: all .5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
	cursor: pointer;
}
.qr_code:hover {
	transform: scale(2);
	position: relative;
	z-index: 2;
	box-shadow: 0 4px 8px 0 rgba(255,255,255,0.2),0 6px 20px 0 rgba(255,255,255,0.19);
}
.c-0ad8c8 {cursor: pointer;}
.forget-form {width: 900px; padding: 50px 80px 84px; margin: 0 auto; border-radius: 5px;}
.step p {padding-top: 24px;}
.step em {width: 80px; height: 4px; background-color: #d1d7d4;}
.step span {width: 52px; height: 52px; border: 2px solid #d1d7d4; border-radius: 50%; color: #909090; font-size: 16px; text-align: center; line-height: 50px;}
.set-active em {background-color: #0ad9c8;}
.set-active span, .btn {background-color: #0ad9c8; border-color: #0ad9c8; color: #fff;}
.step label {width: 100%; color: #909090; font-size: 16px; font-weight: normal;}
.set-active label {color: #0ad9c8;}
.txt-center {width: 100%; text-align: center;}
.txt-right {width: 100%; padding-right: 10px; text-align: right;}
.detail-form {height: 210px; margin: 80px 0 0;}
.form-group {height: 30px; line-height: 30px; margin-bottom: 30px;}
.form-label {width: 200px; height: 30px; color: #323232; margin: 0 20px 0 0; font-weight: normal; text-align: right;}
.form-control {width: 310px; height: 30px;}
.btn {display: block; width: 310px; margin: 0 auto;}
.btn:hover {color: #fff;}
.appeal {cursor: pointer;}
.appeal:active {text-decoration: underline;}
.send {display: inline-block; width: 75px; line-height: 32px; margin-left: -75px;}
.step4 {text-align: center;}
.success {padding-top: 100px; margin: 0 0 20px; font-weight: 500; font-size: 30px; background: url(../../../images/chenggong_icon.png) no-repeat center 0;}
.h0 {height: 0;}

+ 134 - 0
doctor/login/css/login.css

@ -0,0 +1,134 @@
html {overflow: auto; min-width: 970px;}
body {
	font-size: 13px;
}
.mainbox{
	background: url("../../../images/BG.jpg") no-repeat 100% 100%;
}
.top-banner{position: relative;}
.qr-container{position: absolute;right: 120px;height: 100%;display: block;top: 15%;}
.return {position: absolute; right: -5px; top: 40%; width: 105px; color: #888; text-align: center; cursor: pointer;}
.set-hover {cursor: pointer;}
.return:hover, .set-hover:hover {color: #0ad8c8}
.return:active, .set-hover:active {text-decoration: underline;}
.hlogo{width: 30%;height: auto;display: block;}
.qr_code{
	height: 60%;
	width: auto;
	display: block;
	border: 3px solid #38D1CB;
	transform-origin: 100% 0;
	transition: all .5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
	cursor: pointer;
}
.qr_code:hover {
	transform: scale(2);
	position: relative;
	z-index: 2;
	box-shadow: 0 4px 8px 0 rgba(255,255,255,0.2),0 6px 20px 0 rgba(255,255,255,0.19);
}
.chahua-bg{position: relative;background: url(../../../images/BG.jpg) no-repeat center;background-size: 100% 100%;height: 700px;}
.chahua{background: url(../../../images/doctor_denglu_bg_img.png) no-repeat 5% 46.5%;position: absolute;left: 0;right: 0;top: 0;bottom: 0;}
.tabs-container {
	margin-top: 40;
	border: 10px solid rgba(255,255,255,0.2);
}
.nav.nav-tabs {
	background-color: #fff;
}
.nav.nav-tabs li {
	width: 50%;
	text-align: center;
}
.nav.nav-tabs li.active a {
	color: #0AD8C8;
}
.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 #0AD8C8;
}
button[type="submit"] {
	margin-top: 20px;
}
.form-group {
		position: relative;
	}
	
.form-control{
	height: 50px;	
	background: #F5FAFA;
}	
.fhdl{margin-top: 5px;padding: 10px 10px;cursor: pointer;margin-right: -10px;}
.fhdl:hover{color: #0AD8C8;}
.getCaptcha {
	position: absolute;
	top: 6px;
	bottom: 6px;
	right: 10px;
	line-height: 38px;
}
.c-f26{font-size: 26px;}
.getCaptcha.disabled{
	cursor: not-allowed;
	filter: alpha(opacity=65);
	-webkit-box-shadow: none;
	box-shadow: none;
	opacity: .65;
}
.checkbox input[type='checkbox']{margin-top: 4px;}
.disabled{opacity: .5;pointer-events: none;cursor: default;}
.loginForm,.registerForm{
	margin-top: 100px;
	width: 400px;
	margin-right: -5px;
	border: 5px solid rgba(75, 202, 208, 0.7);
	background-color: #fff;
	transition: all .5s ease-in-out;
}
.loginForm-active{
	margin-right: 0;
}
.registerForm-active{
	margin-right: 0;
}
.btn-theme{
	color:#fff;
	background: #0AD8C8;
	border-color: #0AD8C8;
	font-size: 20px;
}
.btn-theme:hover,.btn-theme:active{
	color:#fff;
	background: #0aD9ff;
	border-color: #0AD8C8;
}
.btn-default{
	background: #fff;
	color:#333;
	font-size: 20px;
    padding-top: 10px;
}
.btn-default:hover,.btn-default:active{
	color:#333;
	background: #F4F6FA;
}
.btn{
	height: 53px;
}

+ 43 - 0
doctor/login/html/appeal.html

@ -0,0 +1,43 @@
<!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="../css/appeal.css" />
	</head>
	<body>
		<div id="app">
			<appeal-form></appeal-form>
			<page-footer></page-footer>
		</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="../../../api/patient/login-api.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="../../../component/doctor/appeal.js"></script>
		<script src='../../../component/common/footer.js'></script>
		<script src="../js/appeal.js"></script>
	</body>
</html>

+ 43 - 0
doctor/login/html/forget.html

@ -0,0 +1,43 @@
<!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="../css/forget.css" />
	</head>
	<body>
		<div id="app">
			<forget-form></forget-form>
			<page-footer></page-footer>
		</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="../../../api/patient/login-api.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="../../../component/doctor/forget.js"></script>
		<script src='../../../component/common/footer.js'></script>
		<script src="../js/forget.js"></script>
	</body>
</html>

+ 43 - 0
doctor/login/html/login.html

@ -0,0 +1,43 @@
<!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="../css/login.css" />
	</head>
	<body>
		<div id="app">
			<login-form></login-form>
			<page-footer></page-footer>
		</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="../../../api/patient/login-api.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="../../../component/doctor/login.js"></script>
		<script src='../../../component/common/footer.js'></script>
		<script src="../js/login.js"></script>
	</body>
</html>

+ 5 - 0
doctor/login/js/appeal.js

@ -0,0 +1,5 @@
new Vue({
	el: "#app",
	data: {
	},
});

+ 5 - 0
doctor/login/js/forget.js

@ -0,0 +1,5 @@
new Vue({
	el: "#app",
	data: {
	},
});

+ 5 - 0
doctor/login/js/login.js

@ -0,0 +1,5 @@
new Vue({
	el: "#app",
	data: {
	},
});

BIN=BIN
images/biaoqian01_img.png


BIN=BIN
images/biaoqian02_img.png


BIN=BIN
images/chenggong_icon.png


BIN=BIN
images/doctor_denglu_bg_img.png


BIN=BIN
images/doctor_logo_img.png


BIN=BIN
images/doctor_logo_menhu_img.png


BIN=BIN
images/guanbi_btn.png


BIN=BIN
images/kong_img.png


BIN=BIN
images/menghu_bg_img.png


BIN=BIN
images/mima_icon.png


BIN=BIN
images/shangchuan_icon.png


BIN=BIN
images/shouji_icon.png


BIN=BIN
images/shouye_huizheng_icon.png


BIN=BIN
images/shouye_yixue_icon.png


BIN=BIN
images/shouye_zhuanzhen_icon.png