hwy il y a 11 mois
Parent
commit
37b03814dc
38 fichiers modifiés avec 14630 ajouts et 1303 suppressions
  1. 107 89
      api/jbsc-api.js
  2. 52 49
      app/guidance/html/index.html
  3. 45 40
      app/guidance/js/index.js
  4. 51 0
      app/jbsc/appointment/appoint-country.js
  5. 37 0
      app/jbsc/appointment/appoint-doptroon.js
  6. 59 0
      app/jbsc/appointment/appoint-hospital.js
  7. 48 0
      app/jbsc/appointment/appoint-time.js
  8. 32 0
      app/jbsc/appointment/appointment-info.js
  9. 37 0
      app/jbsc/appointment/appointment-search-bar.js
  10. 192 0
      app/jbsc/appointment/appointment-table.js
  11. 91 0
      app/jbsc/appointment/doctor-select.js
  12. 0 0
      app/jbsc/appointment/references-info.js
  13. 32 0
      app/jbsc/appointment/signal-source.js
  14. 36 0
      app/jbsc/appointment/treatment-info.js
  15. 82 0
      app/jbsc/appointment/treatment-patient.js
  16. 34 0
      app/jbsc/appointment/visit-info.js
  17. 70 0
      app/jbsc/appointment/visitor-info.js
  18. 171 0
      app/jbsc/html/appointment/appoint-commit.html
  19. 91 0
      app/jbsc/html/appointment/appoint-commit.js
  20. 264 0
      app/jbsc/html/appointment/appoint-doctor-detail.html
  21. 299 0
      app/jbsc/html/appointment/appoint-doctor-detail.js
  22. 164 0
      app/jbsc/html/appointment/appoint-select.html
  23. 117 0
      app/jbsc/html/appointment/appoint-select.js
  24. 74 0
      app/jbsc/html/appointment/appointment-detail.html
  25. 39 0
      app/jbsc/html/appointment/appointment-detail.js
  26. 118 0
      app/jbsc/html/appointment/appointment-search.html
  27. 15 0
      app/jbsc/html/appointment/appointment-search.js
  28. 268 230
      app/jbsc/html/statistics.html
  29. 704 359
      app/jbsc/html/view_screening_results.html
  30. BIN
      app/jbsc/images/search.png
  31. 563 0
      app/jbsc/js/api-service.js
  32. 337 287
      app/jbsc/js/statistics.js
  33. 213 201
      component/guidance/person-edit-panel.js
  34. 5 0
      css/bootstrap.min14ed.css
  35. 851 0
      css/jqgrid/ui.jqgridffe4.css
  36. 7602 0
      css/style1.min.css
  37. 59 48
      js/util.js
  38. 1671 0
      plugins/datepicker/bootstrap-datepicker.js

+ 107 - 89
api/jbsc-api.js

@ -1,91 +1,109 @@
(function(exports) {
    var jbscAPI = {
    	//获取所有疾病筛选列表
		surveyTemplates: function(data) {
			return httpRequest.get("third/surveyStatis/survey_templates")
		},
    	//统计模型
		screenStatics: function(data) {
			return httpRequest.post("doctor/screen/screenStatics")
		},
		//专科疾病列表
		getSpecialDisease: function(data) {
			return httpRequest.get("doctor/screen/getSpecialDisease")
		},
		//疾病筛查列表
		getResultList: function(data) {
			return httpRequest.get("doctor/screen/getResultList", {data: data})
		},
//		获取筛查问卷列表
		getScreenList: function(data){
			return httpRequest.post('doctor/screen/getScreenList',{data:data})
		},
		//获取医生团队下的居民
		patientsByTeam: function(data){
			return httpRequest.post('doctor/patient_label_info/patients_by_team',{data:data})
		},
		//获取医生团队信息
		getDoctorTeam: function(uid){
			return httpRequest.get('doctor/admin-teams/team/'+uid+'/teams')
		},
		//获取建议模板消息
		getTemplateAdvice: function(data){
			return httpRequest.get('doctor/screen/getTemplateAdvice',{data:data})
		},
		//跟踪建议保存
		updateAfterFollwoing: function(data){
			return httpRequest.post('doctor/screen/updateAfterFollwoing',{data:data})
		},
//		获取筛查结果
		getScreenResultDetail: function(data){
			return httpRequest.get('doctor/screen/getScreenResultDetail',{data:data})
		},
//		获取居民健康
		getHealth: function(data){
			return httpRequest.get('doctor/health_index/last',{data:data})
		},
//		获取医生基础信息
		doctorBaseinfo: function(data){
			return httpRequest.get('doctor/baseinfo',{data:data})
		},
//		获取模板下所有问卷问题
		getAllQuestions: function(data){
			return httpRequest.get('doctor/questionnaire/getAllQuestions',{data:data})
		},
		//保存筛查消息
		saveAnswer: function(data){
			return httpRequest.post('doctor/questionnaire/saveAnswer',{data:data})
		},
		searchDenizen: function(data){
			return httpRequest.post('doctor/patient_label_info/patient_search_all_exitdoc',{data:data})
		},
//		获取文章列表
		getCategoryList:function(data){
        	return httpRequest.articleGet('third/jkEdu/Article/getCategoryList', {data:data})
	   	},
//	   	获取文章
	   	getArticle:function(data){
	   		return httpRequest.articleGet('third/jkEdu/Article/getArticalById', {data:data})
	   	},
	   	queryArticlePcList:function(data){
	        return httpRequest.articleGet('doctor/jkEdu/article/PC/queryArticlePcList',  {data:data})
	    },
	    pushArticleList:function(data){
	        return httpRequest.articleGet('doctor/jkEdu/article/PC/pushArticleList', {data:data})
	    },
	    doctorSendArticleToPatients:function(data) {
        return httpRequest.articlePost('doctor/jkEdu/article/doctorSendArticleToPatients', {data:data})
    	},
    	updateAfterEducate:function(data){
    		return httpRequest.post('doctor/screen/updateAfterEducate', {data:data})
    	},
    	getDoctorInfoByJwDoctor:function(data){
    		return httpRequest.get('/doctor/getDoctorInfoByJwDoctor', {data:data})
    	},
    	getHospitalInfoByMappingId:function(data){
    		return httpRequest.get('/hospitals/getHospitalInfoByMappingId', {data:data})
    	},
;(function (exports) {
  var jbscAPI = {
    //获取所有疾病筛选列表
    surveyTemplates: function (data) {
      return httpRequest.get('third/surveyStatis/survey_templates')
    },
    //统计模型
    screenStatics: function (data) {
      return httpRequest.post('doctor/screen/screenStatics')
    },
    //专科疾病列表
    getSpecialDisease: function (data) {
      return httpRequest.get('doctor/screen/getSpecialDisease')
    },
    //疾病筛查列表
    getResultList: function (data) {
      return httpRequest.get('doctor/screen/getResultList', { data: data })
    },
    //		获取筛查问卷列表
    getScreenList: function (data) {
      return httpRequest.post('doctor/screen/getScreenList', { data: data })
    },
    //获取医生团队下的居民
    patientsByTeam: function (data) {
      return httpRequest.post('doctor/patient_label_info/patients_by_team', { data: data })
    },
    //获取医生团队信息
    getDoctorTeam: function (uid) {
      return httpRequest.get('doctor/admin-teams/team/' + uid + '/teams')
    },
    //获取建议模板消息
    getTemplateAdvice: function (data) {
      return httpRequest.get('doctor/screen/getTemplateAdvice', { data: data })
    },
    //跟踪建议保存
    updateAfterFollwoing: function (data) {
      return httpRequest.post('doctor/screen/updateAfterFollwoing', { data: data })
    },
    //		获取筛查结果
    getScreenResultDetail: function (data) {
      return httpRequest.get('doctor/screen/getScreenResultDetail', { data: data })
    },
    //		获取居民健康
    getHealth: function (data) {
      return httpRequest.get('doctor/health_index/last', { data: data })
    },
    //		获取医生基础信息
    doctorBaseinfo: function (data) {
      return httpRequest.get('doctor/baseinfo', { data: data })
    },
    //		获取模板下所有问卷问题
    getAllQuestions: function (data) {
      return httpRequest.get('doctor/questionnaire/getAllQuestions', { data: data })
    },
    //保存筛查消息
    saveAnswer: function (data) {
      return httpRequest.post('doctor/questionnaire/saveAnswer', { data: data })
    },
    searchDenizen: function (data) {
      return httpRequest.post('doctor/patient_label_info/patient_search_all_exitdoc', { data: data })
    },
    //		获取文章列表
    getCategoryList: function (data) {
      return httpRequest.articleGet('third/jkEdu/Article/getCategoryList', { data: data })
    },
    //	   	获取文章
    getArticle: function (data) {
      return httpRequest.articleGet('third/jkEdu/Article/getArticalById', { data: data })
    },
    queryArticlePcList: function (data) {
      return httpRequest.articleGet('doctor/jkEdu/article/PC/queryArticlePcList', { data: data })
    },
    pushArticleList: function (data) {
      return httpRequest.articleGet('doctor/jkEdu/article/PC/pushArticleList', { data: data })
    },
    doctorSendArticleToPatients: function (data) {
      return httpRequest.articlePost('doctor/jkEdu/article/doctorSendArticleToPatients', { data: data })
    },
    updateAfterEducate: function (data) {
      return httpRequest.post('doctor/screen/updateAfterEducate', { data: data })
    },
    getDoctorInfoByJwDoctor: function (data) {
      return httpRequest.get('/doctor/getDoctorInfoByJwDoctor', { data: data })
    },
    getHospitalInfoByMappingId: function (data) {
      return httpRequest.get('/hospitals/getHospitalInfoByMappingId', { data: data })
    },
    getOrgList: function (data) {
      return httpRequest.post('/doctor/guahao/GetOrgListToMysql', { data: data })
    },
    GetOrgDepListToMysql: function (data) {
      return httpRequest.post('/doctor/guahao/GetOrgDepListToMysql', { data: data })
    },
    regDeptSpeDoctorList: function (data) {
      return httpRequest.post('/doctor/guahao/GetDoctorList', { data: data })
    },
    findByPatient: function (data) {
      return httpRequest.post('/doctor/patient_label_info/patient', { data: data })
    },
    getDoctorArrange: function (data) {
      return httpRequest.post('/doctor/guahao/smjk/RegDeptSpeDoctorSectionList', { data: data })
    },
    getOrgDeptList: function (data) {
      return httpRequest.post('/doctor/guahao/GetOrgDepListToMysql', { data: data })
    }
  }
    exports.jbscAPI = jbscAPI;
})(window)
  exports.jbscAPI = jbscAPI
})(window)

+ 52 - 49
app/guidance/html/index.html

@ -1,52 +1,55 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
        <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 http-equiv="X-UA-Compatible" content="IE=Edge">
        <title>健康指导</title>
        <meta name="keywords" content="">
        <meta name="description" content="">
        <link rel="shortcut icon" href="../../../favicon.ico">
        <link rel="stylesheet" type="text/css" href="../../../css/cross.css"/>
        <link rel="stylesheet" type="text/css" href="../../../plugins/toastr/toastr.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/index.css"/>
        <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="app" >
			<router-view></router-view>
		</div>
		<script src="../../../plugins/toastr/toastr.min.js"></script>
		<script src="../../../plugins/artDialog/6.0.5/js/dialog-plus.min.js" type="text/javascript" charset="utf-8"></script>
		<script>
			var EventBus = new Vue();
			Vue.prototype.loading = dialog({contentType:'load', skin:'bk-popup'})
		</script>
		<script src="../../../api/http-request.js"></script>
		<script src="../../../js/underscore.js"></script>
		<script src="../../../api/home-api.js"></script>
		<script src="../../../api/guidance-api.js"></script>
		<script src="../../../js/vue-router.js"></script>
		<script src="../../../component/guidance/index-page.js"></script>
		<script src="../../../component/guidance/nav-tab.js"></script>
		<script src="../../../component/guidance/person-panel.js"></script>
		<script src="../../../component/guidance/system-panel.js"></script>
		<script src="../../../component/guidance/team-panel.js"></script>
		<script src="../../../component/guidance/team-new-panel.js"></script>
		<script src="../../../component/guidance/temp-preview-panel.js"></script>
		<script src="../../../component/guidance/person-new-panel.js"></script>
		<script src="../../../component/guidance/person-edit-panel.js"></script>
		<script src="../../../component/guidance/preview-panel.js"></script>
		<script src="../../../component/guidance/temp-send-panel.js"></script>
		<script src="../../../component/guidance/system-send-panel.js"></script>
		<script src="../../../component/guidance/team-edit-panel.js"></script>
		<script src="../../../component/guidance/img-upload.js"></script>
		<script src="../js/index.js" type="text/javascript" charset="utf-8"></script>
	</body>
  <head>
    <meta charset="utf-8" />
    <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 http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>健康指导</title>
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <link rel="shortcut icon" href="../../../favicon.ico" />
    <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
    <link rel="stylesheet" type="text/css" href="../../../plugins/toastr/toastr.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/index.css" />
    <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <div id="app">
      <router-view></router-view>
    </div>
    <script src="../../../plugins/toastr/toastr.min.js"></script>
    <script
      src="../../../plugins/artDialog/6.0.5/js/dialog-plus.min.js"
      type="text/javascript"
      charset="utf-8"></script>
    <script>
      var EventBus = new Vue()
      Vue.prototype.loading = dialog({ contentType: 'load', skin: 'bk-popup' })
    </script>
    <script src="../../../api/http-request.js"></script>
    <script src="../../../js/underscore.js"></script>
    <script src="../../../api/home-api.js"></script>
    <script src="../../../api/guidance-api.js"></script>
    <script src="../../../js/vue-router.js"></script>
    <script src="../../../js/util.js"></script>
    <script src="../../../component/guidance/index-page.js"></script>
    <script src="../../../component/guidance/nav-tab.js"></script>
    <script src="../../../component/guidance/person-panel.js"></script>
    <script src="../../../component/guidance/system-panel.js"></script>
    <script src="../../../component/guidance/team-panel.js"></script>
    <script src="../../../component/guidance/team-new-panel.js"></script>
    <script src="../../../component/guidance/temp-preview-panel.js"></script>
    <script src="../../../component/guidance/person-new-panel.js"></script>
    <script src="../../../component/guidance/person-edit-panel.js"></script>
    <script src="../../../component/guidance/preview-panel.js"></script>
    <script src="../../../component/guidance/temp-send-panel.js"></script>
    <script src="../../../component/guidance/system-send-panel.js"></script>
    <script src="../../../component/guidance/team-edit-panel.js"></script>
    <script src="../../../component/guidance/img-upload.js"></script>
    <script src="../js/index.js" type="text/javascript" charset="utf-8"></script>
  </body>
</html>

+ 45 - 40
app/guidance/js/index.js

@ -1,11 +1,16 @@
var Request = new Object()
Request = GetRequest()
var patient = Request.patient
var routes = [
	{ path: '/', component: IndexPage,
	  children: [
	  	{
    {
      path: '/',
      component: IndexPage,
      children: [
        {
          path: '/',
          component: PersonEditPanel,
          redirect: 'person-edit-panel'
       },
        },
        {
          path: 'person-new-panel',
          component: PersonNewPanel
@ -31,44 +36,44 @@ var routes = [
          component: SystemSendPanel
        },
        {
        	path: 'preview-panel',
          	component: PreviewPanel
          path: 'preview-panel',
          component: PreviewPanel
        }
      ]
	}
],
router = new VueRouter({
  routes: routes
}),
storage = {
	docInfo: null,
	patient: null, // url中patient,用来来判断是否是"发送"模式
	planId: null
}
    }
  ],
  router = new VueRouter({
    routes: routes
  }),
  storage = {
    docInfo: null,
    patient: patient || '', // url中patient,用来来判断是否是"发送"模式
    planId: null
  }
new Vue({
    data: {
    },
    router: router,
    created: function() {
    	var vm = this
    	vm.loading.show()
    	homeAPI.baseinfo().then(function(res) {
	  		if(res.status == 200) {
	  			vm.loading.close()
	  			var infoStr = JSON.stringify(res.data);
	  			localStorage.setItem("docInfo", infoStr);
	  			storage.docInfo = res.data
	  			vm.$mount('#app')
	  		} else {
	  			vm.loading.close()
	  			toastr && toastr.error(res.msg)
	  		}
	  	})
    },
    methods: {
        chooseTab: function(val){
            this.selectedTab = val;
        }
  data: {},
  router: router,
  created: function () {
    var vm = this
    vm.loading.show()
    homeAPI.baseinfo().then(function (res) {
      if (res.status == 200) {
        vm.loading.close()
        var infoStr = JSON.stringify(res.data)
        localStorage.setItem('docInfo', infoStr)
        storage.docInfo = res.data
        vm.$mount('#app')
      } else {
        vm.loading.close()
        toastr && toastr.error(res.msg)
      }
    })
  },
  methods: {
    chooseTab: function (val) {
      this.selectedTab = val
    }
})
  }
})

+ 51 - 0
app/jbsc/appointment/appoint-country.js

@ -0,0 +1,51 @@
Vue.component('appoint-country', {
  template:
    '<div>\
			<div class="c-f16 c-border-b pb5 ui-grid middle search-wrapper">\
				<div>社区服务中心&emsp;&emsp;</div>\
				<div class=" ml30" id="search"><input class="h34 " v-model="keyword"  @keyup.enter="searchItem" placeholder="请输入社区名称查询"/><span @click="searchItem"></span></div>\
			</div>\
			<ul class="clearfix">\
				<li v-for="(list, index) in country">\
					<a href="javascript: void(0)" :title="list.address" @click="selCountry(list)">{{list.address}}</a>\
				</li>\
			</ul>\
			</div>',
  props: ['country'],
  data: function () {
    return {
      keyword: ''
    }
  },
  mounted: function () {},
  watch: {
    keyword: function (i) {
      // this.$parent.initTypeof(2,i)
    }
  },
  methods: {
    selCountry: function (list) {
      var str = JSON.stringify(list)
      var content =
        '../../jbsc/html/appointment/appoint-doctor-detail.html?hospital=' +
        encodeURIComponent(str) +
        '&patient=' +
        patient +
        '&callCode=' +
        callCode
      if (backToSynergy) {
        content += '&backToSynergy=1'
      }
      top.layer.open({
        type: 2,
        title: false,
        area: ['800px', '90%'],
        content: content
      })
      closeLayer()
    },
    searchItem: function () {
      this.$parent.initTypeof(2, this.keyword)
    }
  }
})

+ 37 - 0
app/jbsc/appointment/appoint-doptroon.js

@ -0,0 +1,37 @@
Vue.component('appoint-doptroon', {
  template:
    '<div>\
			<div class="c-f16 c-border-b pb5 ui-grid middle search-wrapper">\
				<div>科&emsp;&emsp;室&emsp;&emsp;</div>\
				<div class=" ml30" id="search"><input class="h34  " v-model="keyword" @keyup.enter="searchItem" placeholder="请输入科室名称查询"/><span @click="searchItem"></span></div>\
			</div>\
			<ul class="clearfix">\
				<li class="w138 fl mb10 h28" v-for="(list, index) in doptroon">\
					<a v-show="ind != index" class="h28" href="javascript:void(0)" :title="list.name" @click="selDoptroon(index, list)">{{list.name}}</a>\
					<a v-show="ind == index" class="h28 active" href="javascript:void(0)" :title="list.name" @click="selDoptroon(index, list)">{{list.name}}</a>\
				</li>\
			</ul>\
			</div>',
  props: ['doptroon'],
  data: function () {
    return {
      ind: null,
      keyword: ''
    }
  },
  watch: {
    keyword: function (i) {
      // this.$parent.initData(i)
    }
  },
  mounted: function () {},
  methods: {
    selDoptroon: function (index, list) {
      this.ind = index
      this.$emit('seldoptroon', list)
    },
    searchItem: function () {
      this.$parent.initData(this.keyword)
    }
  }
})

+ 59 - 0
app/jbsc/appointment/appoint-hospital.js

@ -0,0 +1,59 @@
Vue.component('appoint-hospital', {
  template:
    '<div>\
			<div class="c-f16 c-border-b pb5 ui-grid middle search-wrapper">\
				<div>医&emsp;&emsp;院&emsp;&emsp;</div>\
				<div class="ml30" id="search"><input class="h34" v-model="HosKeyword" @keyup.enter="searchItem" placeholder="请输入医院名称查询"/><span @click="searchItem"></span></div>\
			</div>\
			<ul class="clearfix">\
				<li v-for="(list, index) in hospital">\
					<a href="javascript:void(0)" :title="list.address" @click="selHospital(list)">{{list.address}}<span class="col-999" v-show="list.level">(</span><span class="col-red"  v-show="list.level">{{list.level}}</span><span class="col-999"  v-show="list.level">)</span></a>\
				</li>\
        <li>\
					 <div  v-if="hospital.length<2" style="border: 1px solid #12b7f5;color:#12b7f5 ;width:200px;text-align: center;cursor: pointer" @click="moreHospital">更多医院</div>\
				</li>\
			</ul>\
			</div>',
  props: ['hospital'],
  data: function () {
    return {
      HosKeyword: '',
      docHospitalName: ''
    }
  },
  mounted: function () {
    this.docHospitalName = JSON.parse(sessionStorage.getItem('LoginUser')).hospitalName
  },
  watch: {
    HosKeyword: function (i) {}
  },
  methods: {
    selHospital: function (list) {
      var str = JSON.stringify(list)
      var content =
        '../../jbsc/html/appointment/appoint-doctor-detail.html?hospital=' +
        encodeURIComponent(str) +
        '&patient=' +
        patient +
        '&callCode=' +
        callCode
      if (backToSynergy) {
        content += '&backToSynergy=1'
      }
      console.log('11111111111111111111111111', patient)
      top.layer.open({
        type: 2,
        title: false,
        area: ['800px', '90%'],
        content: content
      })
      closeLayer()
    },
    moreHospital() {
      this.$parent.initTypeof(1, '')
    },
    searchItem: function () {
      this.$parent.initTypeof(1, this.HosKeyword)
    }
  }
})

+ 48 - 0
app/jbsc/appointment/appoint-time.js

@ -0,0 +1,48 @@
Vue.component('appoint-time', {
	template: '<div><div class="c-f16 c-border-b pb5">就诊时间</div>\
			<ul class="clearfix">\
				<li class="h28 mr10" v-for="(list, index) in visittime">\
					<a class="h28" v-show="judge ? timeIndex != index : index != visitindex" href="javascript:void(0)" title="切换日期" @click="changeTime(index)">{{handteTime(list)}}</a>\
					<a class="h28 active" v-show="judge ? timeIndex == index : index == visitindex">{{handteTime(list)}}</a>\
				</li>\
			</ul>\
			</div>',
	props: ["visittime", "visitindex"],
	data: function() {
		return {
			judge: false,
			timeIndex: null
		}
	},
	mounted: function() {
		
	},
	methods: {
		changeTime: function(index) {
			this.timeIndex = index
			this.judge = true
			this.$emit("changetime", this.visittime[index])
		},
		handteTime: function(data) {
			var dateTime = data.date+"";		   	
		   	var date= dateTime.split(" ")[0];
		   	var week = getWeek(date);
		   	var riqi = date.split("/");
		   	riqi = this.add0(riqi[1]) + "月" + this.add0(riqi[2]) + "日";
		   	var isMo = data.time;
		   	if(isMo =="a"){
		   		isMo ="上午";
		   	}else{
		   		isMo ="下午";
		   	}
		   	return " " + riqi + " " + week + isMo + " "
		},
		add0: function(num) {
			if(num < 10) {
				return '0' + num
			} else {
				return num
			}
		}
	}
})

+ 32 - 0
app/jbsc/appointment/appointment-info.js

@ -0,0 +1,32 @@
Vue.component('appointment-info', {
	template: '<div><div class="c-f16 c-border-b pb5">预约信息</div>\
			<table class="table table-no-bordered">\
				<tbody>\
					<tr>\
						<td class="w150">预 约 人</td>\
						<td>{{appointinfo.callCode ? appointinfo.userName : appointinfo.dname}}</td>\
					</tr>\
					<tr>\
						<td class="w150">操作时间</td>\
						<td>{{appointinfo.cancelerTime ? appointinfo.cancelerTime : appointinfo.czrq}}</td>\
					</tr>\
					<tr>\
						<td class="w150">预约状态</td>\
						<td>{{appointinfo.status == 0 ? "已取消" : "预约成功"}}</td>\
					</tr>\
				</tbody>\
			</table>\
			</div>',
	props: ["appointinfo"],
	data: function() {
		return {
			
		}
	},
	mounted: function() {
		
	},
	methods: {
		
	}
})

+ 37 - 0
app/jbsc/appointment/appointment-search-bar.js

@ -0,0 +1,37 @@
Vue.component('appointment-search-bar', {
	template: '<div class="clearfix">\
		<div id="searchPhone" class="pl15 dataCell form-group c-position-r">\
			<input id="kw" v-model="keyword" placeholder="输入社保卡或身份证号码" @blur="search" @keyup.13="search" class="form-control inline w260 ml5 pr30" type="text" >\
		</div></div>',
	props: ["card"],
	data: function() {
		return {
			keyword: "",
			idCard:''
		}
	},
	watch: {
		card(val){
			this.keyword = val
			this.search()
		}
	},
	mounted: function() {
		var vm = this;
		EventBus.$on("show-search", function() {
			vm.isShow = true
		})
	},
	methods: {
		search: function(event) {
			if(event && event.type =="keydown" && event.keyCode != 13 || this.keyword.length <= 0) {
				return 
			}
			var kw = document.getElementById("kw")
			kw.blur()
			EventBus.$emit("appointment-search",{
				data: {"keyword": this.keyword}
			})
		}
	}
})

+ 192 - 0
app/jbsc/appointment/appointment-table.js

@ -0,0 +1,192 @@
(function() {
    $.jgrid.defaults.styleUI="Bootstrap";
    Vue.component('appointment-table', {
        template: '<div class="mt10">\
                        <div ref="container" style="overflow-x: hidden">\
                            <div class="jqGrid_wrapper">\
                                <table id="table_list"></table>\
                            </div>\
                        </div>\
                        <div id="pager_list">\
                        </div>\
                    </div>',
        props: [],
        data: function() {
            return {
                
            }
        },
        mounted: function() {
            initTable()
            initContainer(this)
            initEventOnBus()
            bindEvents()
        },
        methods: {
        }
    })
    
    function resetWidth(vm) {
        var $searchbar = $("#searchbar")
        $("#table_list").setGridWidth($(window).width());
		$("#table_list").jqGrid("setGridHeight", $(window).height() - $searchbar.height() - 158)
	}
    
    function initContainer(vm) {
        resetWidth(vm)
        window.onresize = function() {
            resetWidth(vm)
        }
    }
    var kwObj = null;
    function initEventOnBus() {
		EventBus.$on('appointment-search', function (arg) {
			kwObj = arg.data
			$("#table_list").jqGrid('setGridParam',{datatype:'json', page: 1, postData: arg.data}).trigger('reloadGrid');
		})
	}
    
    function initTable() {
        $("#table_list").jqGrid({
			url: APIService.server+"/third/guahao/GetRegList",
            datatype:"local",
            mtype: 'GET',
            postData: {
            	
            },
            loadBeforeSend: function(request, grid) {
	        	var userAgent = window.sessionStorage.getItem("LoginUser");
                if(userAgent) {
					userAgent = JSON.parse(userAgent)
					request.setRequestHeader(APIService.agentName, JSON.stringify({
                    	"id":userAgent.id,"uid":userAgent.code,"mobile":userAgent.mobile
                    }));
				}
	        },
            prmNames: {
            	page: "page",
            	rows: "size"
            },
            jsonReader: {
            	root: "data",
            	page: "data.page",
            	records: "data.records",
            	total: "data.total"
            },
			ondblClickRow: function(rowId) {
				var rowData = jQuery(this).getRowData(rowId);
				 console.log('dddddddddddd',rowData)
				var code = rowData.operation;
					code = code.match(/code="(\S*)"/)[1];
				var ssc = rowData.ssc;
				param = {
						code: code,
						ssc: ssc
					}
				top.layer.open({
				    type: 2,
				    title: '预约挂号详情',
				    shadeClose: false,
				    closeBtn: true, //显示关闭按钮
				    shade: 0.8,
				    area: ['800px', "90%"],
				    content: 'customer-service/page/appointment/appointment-detail.html?code='+code+'&param='+encodeURIComponent(JSON.stringify(param))+'&kwObj='+encodeURIComponent(JSON.stringify(kwObj))  //iframe的url
				});
			},
            height:400,
            autowidth:true,
            loadtext: "加载中...",
            loadui: "block",
            shrinkToFit:true,
            rowNum:9,
            rowList:[10,20,30],
            colNames:["居民姓名","身份证号","社保卡号","就诊医院","科室",
                    "医生","就诊时间","预约状态","操作"],
            colModel:[
            {name:"name",index:"name",width:100,sortable:false,align:"center"},
            {name:"idcard",index:"idcard",width:200,sortable:false,align:"center",formatter: function(v) {
            	var len = v.length
				if (len == 18) {
					return v.substr(0, 4) + '**********' + v.substr(14, 4)
				} else if (len == 15) {
					return v.substr(0, 4) + '*******' + v.substr(11, 4)
				}
            }},
            {name:"ssc",index:"ssc",width:150,sortable:false,align:"center"},
            {name:"orgName",index:"orgName",width:200,sortable:false,align:"center"},
            {name:"deptName",index:"deptName",width:150,sortable:false,align:"center"},
            {name:"doctorName",index:"doctorName",width:150,sortable:false,align:"center"},
            {name:"startTime",index:"startTime",width:200,sortable:false,align:"center"},
            {name:"status",index:"status",width:100,sortable:false,align:"center",formatter: function(v) {
            	return ["已取消","","预约成功"][v]
            }},
            {name:"operation",index:"operation",width:200,sortable:false,align:"center",formatter: function(v, row, data) {
            	var btns = '<a class="view-detail-btn operation-icon chakan-icon" data-ssc="' + data.ssc + '"data-code="' + data.code + '" href="javascript:void(0)" style="color: #33c05a;" title="查看"></a>'
            	if(data.status != "0") {
            		btns += '<a class="view-delete-btn ml15 operation-icon shanchu-icon" data-ssc="' + data.ssc + '"data-code="' + data.code + '" href="javascript:void(0)" style="color: #ff3b30;" title="取消"></a>'
            	}
            	return btns
            }},
            ],
            pager:"#pager_list",
            pagerpos: "left"})
    }
    
    function bindEvents() {
    	
    	$(document.body).on("click", ".view-detail-btn", function() {
    		var code = $(this).attr("data-code"),
    			ssc = $(this).attr("data-ssc"),
    			param = {
    				code: code,
    				ssc: ssc
    			}
    		top.layer.open({
			    type: 2,
			    title: '预约挂号详情',
			    shadeClose: false,
			    closeBtn: true, //显示关闭按钮
			    shade: 0.8,
			    area: ['800px', "90%"],
			    content: 'customer-service/page/appointment/appointment-detail.html?code='+code+'&param='+encodeURIComponent(JSON.stringify(param))+'&kwObj='+encodeURIComponent(JSON.stringify(kwObj))  //iframe的url
			});
    	})
    	
    	$(document.body).on("click", ".view-delete-btn", function() {
    		var code = $(this).attr("data-code"),
    			ssc = $(this).attr("data-ssc")
    		var layerid = top.layer.confirm('请与居民确认:<br>一个月内连续取消预约三次,系统会自动将居民年列入黑名单,三个月后才 可再次预约。', {
    			title: '取消预约',
    			closeBtn: true,
			  	btn: ['确定','取消'] //按钮
			}, function(){
			  	
			  	var loadingid = top.layer.load(1, {
				  shade: [0.1,'#fff'] //0.1透明度的白色背景
				});
			  	APIService.cancelOrder({
	    			code: code,
	    			ssc: ssc
	    		}).then(function(res) {
	    			top.layer.close(loadingid)
	    			if(res.status == 200) {
	    				top.layer.close(layerid)
	    				top.showSuccessMessage("取消预约成功!")
	    				EventBus.$emit('appointment-search',{
							data: kwObj
						})
	    			} else {
	    				top.showErrorMessage(res.msg || "取消预约失败!")
	    			}
	    		}).catch(function(e) {
	    			top.layer.close(loadingid)
	    			console && console.error(e)
	    		})
			}, function(){
			  
			});
    	})
    }
    
})()

+ 91 - 0
app/jbsc/appointment/doctor-select.js

@ -0,0 +1,91 @@
Vue.component('doctor-select', {
  template:
    '<div><div class="c-f16 c-border-b pb5 mb20 lh20" style="margin-bottom:15px">医生列表<input class="h34 ml30 bd1 inp_border" v-model="keyword" @click="selDoc" @input="selDoc" placeholder="输入医生姓名"/></div>\
			<ul class="pd0" v-show="!iswuhaoyuan">\
				<li class="clearfix pt10 pb10 bd1 disbox mb20" v-for="(doctor, index) in doctorList" v-show="!doctor.isShow">\
					<div class="fl w200 mt10 mb10">\
						<h3 class="c-f20 mb10">{{doctor.name}}<span class="c-f16 ml20">{{doctor.title}}</span></h3>\
						<p class="c-f16 h24 mb10">诊查费:<span class="fc-red">{{doctor.fee ? doctor.fee : handleFee(doctortime[index])}}</span>元</p>\
						<p class="over-scroll lh20">{{doctor.introduce}}</p>\
					</div>\
					<ul class="fl w500 mb0 ml10 pd0 pt20">\
						<li class="fl li-time" v-for="(list, ind) in doctortime[index]">\
							<a v-show="list.status == 1" class="bgc-fff" title="选择日期" @click="seldetailTime(list, index, ind)">{{handteTime(list)}}<span class="bgc-12b7f5">{{add0(list.max - list.used)}}</span></a>\
							<a v-show="list.status == 2" class="bgc-d7dce6 fc-fff">{{handteTime(list)}}<span class="bgc-c3c8d2">满</span></a>\
							<a v-show="list.status == 0" class="bgc-d7dce6 fc-fff">{{handteTime(list)}}<span class="bgc-c3c8d2">停</span></a>\
						</li>\
					</ul>\
				</li>\
			</ul>\
			<div class="pt60" v-show="iswuhaoyuan"><img class="setauto" width="250px" src="../../img/wuhaoyuan_img.png" alt="无号源" /></div>\
			</div>',
  props: ['doctors', 'doctortime', 'iswuhaoyuan'],
  data: function () {
    return {
      keyword: '',
      doctorList: [],
      docName: [],
      selIndex: []
    }
  },
  mounted: function () {},
  methods: {
    seldetailTime: function (list, index, ind) {
      $.extend(list, { 'index': index, 'ind': ind })
      this.$emit('seldetail', list)
    },
    handteTime: function (data) {
      var dateTime = data.date + ''
      var date = dateTime.split(' ')[0]
      var week = getWeek(date)
      var riqi = date.split('/')
      riqi = this.add0(riqi[1]) + '-' + this.add0(riqi[2])
      var isMo = data.time
      if (isMo == 'a') {
        isMo = '上午'
      } else {
        isMo = '下午'
      }
      return ' ' + riqi + ' ' + week + isMo + ' '
    },
    add0: function (num) {
      if (num < 10) {
        return '0' + num
      } else {
        return num
      }
    },
    selDoc: function () {
      var len = this.doctorList.length
      if (this.keyword.length < 1) {
        for (var i = 0; i < len; i++) {
          this.$set(this.doctorList, i, $.extend({}, this.doctorList[i], { 'isShow': false }))
        }
        return
      }
      var reg = new RegExp(this.keyword)
      for (var i = 0; i < len; i++) {
        if (this.docName[i].match(reg)) {
          this.$set(this.doctorList, i, $.extend({}, this.doctorList[i], { 'isShow': false }))
        } else {
          this.$set(this.doctorList, i, $.extend({}, this.doctorList[i], { 'isShow': true }))
        }
      }
    },
    handleFee: function (arr) {
      if (arr && arr.length > 0) {
        return arr[0].fee
      } else {
        return ''
      }
    }
  },
  watch: {
    doctors: function (list) {
      this.doctorList = list
      for (var i = 0, len = list.length; i < len; i++) {
        this.docName[i] = list[i].name
      }
    }
  }
})

+ 0 - 0
app/jbsc/appointment/references-info.js


+ 32 - 0
app/jbsc/appointment/signal-source.js

@ -0,0 +1,32 @@
Vue.component('signal-source', {
  template:
    '<div><div class="c-f16 c-border-b pb5">号&emsp;&emsp;源</div>\
			<ul class="clearfix pl40">\
				<li v-for="(list, index) in detailtime" class="fl mr30 mb20" >\
					<a v-show="list.max - list.used > 0" class="fc-12b7f5 bd1 h38" title="预约时间段" @click="looking(list)">{{handleTime(list.startTime)}}&nbsp;-&nbsp;{{handleTime(list.endTime)}}</a>\
					<a v-show="list.max - list.used <= 0" class="fc-fff bgc-d7dce6 bd1 h38">{{handleTime(list.startTime)}}&nbsp;-&nbsp;{{handleTime(list.endTime)}}</a>\
				</li>\
			</ul>\
			</div>',
  props: ['detailtime'],
  data: function () {
    return {}
  },
  mounted: function () {},
  methods: {
    looking: function (list) {
      this.$emit('booking', list)
    },
    handleTime: function (data) {
      var time = data.split(' ')[1],
        str = this.add0(time.split(':')[0]) + ':' + time.split(':')[1]
      return str
    },
    add0: function (num) {
      if (num < 10) {
        return '0' + num
      }
      return num
    }
  }
})

+ 36 - 0
app/jbsc/appointment/treatment-info.js

@ -0,0 +1,36 @@
Vue.component('treatment-info', {
	template: '<div><div class="c-f16 c-border-b pb5">就诊信息</div>\
			<table class="table table-no-bordered">\
				<tbody>\
					<tr>\
						<td class="w150">就诊医院</td>\
						<td>{{appointinfo.orgName}}</td>\
					</tr>\
					<tr>\
						<td class="w150">科&emsp;&emsp;室</td>\
						<td>{{appointinfo.deptName}}</td>\
					</tr>\
					<tr>\
						<td class="w150">医&emsp;&emsp;&nbsp生</td>\
						<td>{{appointinfo.doctorName}}</td>\
					</tr>\
					<tr>\
						<td class="w150">就诊时间</td>\
						<td>{{appointinfo.startTime}}</td>\
					</tr>\
				</tbody>\
			</table>\
			</div>',
	props: ["appointinfo"],
	data: function() {
		return {
			
		}
	},
	mounted: function() {
		
	},
	methods: {
		
	}
})

+ 82 - 0
app/jbsc/appointment/treatment-patient.js

@ -0,0 +1,82 @@
Vue.component('treatment-patient', {
	template: '<div><div class="c-f16 c-border-b pb5">就诊人信息</div>\
			<table class="table table-no-bordered">\
				<tbody>\
					<tr>\
						<td class="w150">就诊居民</td>\
						<td>{{appointinfo.name}}</td>\
					</tr>\
					<tr>\
						<td class="w150">身份证号</td>\
						<td>{{handleIdcard(appointinfo.idcard)}}</td>\
					</tr>\
					<tr>\
						<td class="w150">社保卡号</td>\
						<td >{{appointinfo.ssc}}</td>\
					</tr>\
					<tr>\
						<td class="w150">手机号码</td>\
						<td >{{appointinfo.phone}}</td>\
					</tr>\
				</tbody>\
			</table>\
			<div class="c-t-center">\
				<button @click="remove" type="button" class="btn btn-w-m btn-ff3b30 mr15" v-show="appointinfo.status != 0">取消挂号</button>\
				<button @click="goBack" type="button" class="btn btn-w-m btn-fff">返回</button>\
			</div>\
			</div>',
	props: ["appointinfo"],
	data: function() {
		return {
			editable: false
		}
	},
	mounted: function() {
		
	},
	methods: {
		remove: function() {
			var vm = this
			var layerid = top.layer.confirm('请与居民确认:<br>一个月内连续取消预约三次,系统会自动将居民年列入黑名单,三个月后才 可再次预约。', {
    			title: '取消预约',
    			closeBtn: true,
			  	btn: ['确定','取消'] //按钮
			}, function(){
			  	
			  	var loadingid = top.layer.load(1, {
				  shade: [0.1,'#fff'] //0.1透明度的白色背景
				});
				APIService.cancelOrder(param).then(function(res) {
	    			top.layer.close(loadingid)
	    			if(res.status == 200) {
	    				top.layer.close(layerid)
	    				top.showSuccessMessage("取消预约成功!")
	    				closeLayer()
	    				EventBus.$emit('appointment-search',{
							data: kwObj
						})
	    			} else {
	    				top.showErrorMessage(res.msg || "取消预约失败!")
	    			}
	    		}).catch(function(e) {
	    			top.layer.close(loadingid)
	    			console && console.error(e)
	    		})
			}, function(){
			  
			});
		},
		goBack: function() {
			var layerid = parent.layer.getFrameIndex(window.name)
			parent.layer.close(layerid)
		},
		handleIdcard: function(str) {
			var len = str.length
			if (len == 18) {
				return str.substr(0, 4) + '**********' + str.substr(14, 4)
			} else if (len == 15) {
				return str.substr(0, 4) + '*******' + str.substr(11, 4)
			}
		}
	}
})

+ 34 - 0
app/jbsc/appointment/visit-info.js

@ -0,0 +1,34 @@
Vue.component('visit-info', {
	template: '<div><div class="c-f16 c-border-b pb5">就诊信息</div>\
			<ul class="pl40">\
				<li class="h34">\
					<span class="fc-999 mr40 w100">就诊医院</span>\
					<span class="ti1">{{param.hospitalName}}</span>\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">科&emsp;&emsp;室</span>\
					<span class="ti1">{{param.hosDeptName}}</span>\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">医&emsp;&emsp;生</span>\
					<span class="ti1">{{param.doctorName}}</span>\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">就诊时间</span>\
					<span class="ti1">{{JSON.parse(param.arrangeDate).startTime}}</span>\
				</li>\
			</ul>\
			</div>',
	props: ["param"],
	data: function() {
		return {
			
		}
	},
	mounted: function() {
		
	},
	methods: {
	}
})

+ 70 - 0
app/jbsc/appointment/visitor-info.js

@ -0,0 +1,70 @@
Vue.component('visitor-info', {
	template: '<div><div class="c-f16 c-border-b pb5">就诊人信息</div>\
			<ul class="pl40">\
				<li class="h34">\
					<span class="fc-999 mr40 w100">就诊居民</span>\
					<span class="ti1">{{param.patientName}}</span>\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">身份证号</span>\
					<span class="ti1">{{handleIdcard(param.cardNo)}}</span>\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">社保卡号</span>\
					<span class="ti1">{{param.clinicCard}}</span>\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">手机号码</span>\
					<input class="bd1 ti1" v-model="param.patientPhone" placeholder="输入手机号码" />\
				</li>\
				<li class="h34">\
					<span class="fc-999 mr40 w100">验证码</span>\
					<input class="bd1 ti1" id="validateCode" maxlength="4" v-model="param.text" value="">\
					<img id="validateDiv" @click="initValidate" :src="imgCode" style="width: 80px; height: 32px; background-size: 90% 32px; vertical-align: middle;"></img>\
				</li>\
			</ul>\
			</div>',
	props: ["param"],
	data: function() {
		return {
			imgCode: "",
			text: ""
		}
	},
	mounted: function() {
		this.initValidate()
	},
	methods: {
		// 验证
		sureValue: function() {
			if(!isMobilePhone(visitor.phone)) {
				top.showErrorMessage("手机号码编辑错误!")
				return true
			}
		},
		handleIdcard: function(str) {
			var len = str.length
			if (len == 18) {
				return str.substr(0, 4) + '**********' + str.substr(14, 4)
			} else if (len == 15) {
				return str.substr(0, 4) + '*******' + str.substr(11, 4)
			}
		},
		initValidate: function() {
			var user = JSON.parse(sessionStorage.getItem("LoginUser"))
			var vm = this
			APIService.captchaWithDoctor(user.code, {
				
			}).then(function(res) {
				if(res.status == 200) {
					vm.imgCode = "data:image/png;base64,"+ res.data.image
					vm.param.key = res.data.key
				} else {
					
				}
			}).catch(function(e) {
				
			})
		},
	}
})

+ 171 - 0
app/jbsc/html/appointment/appoint-commit.html

@ -0,0 +1,171 @@
<!DOCTYPE html>
<html>
	<head>
	    <meta charset="utf-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	
	    <!--360浏览器优先以webkit内核解析-->
	
	
	    <title>厦门i健康-客户服务平台</title>
		<link href="../../../../css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet" />
    <link href="../../../../css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet" />
    <link href="../../../../css/jqgrid/ui.jqgridffe4.css?0820" rel="stylesheet" />
    <link href="../../../../css/animate.min.css" rel="stylesheet" />
    <link href="../../../../css/style1.min.css?v=4.1.0" rel="stylesheet" />
	    <style>
	    	body {padding-top: 20px;}
	    	.w20 {
	    		width: 20px
	    	}
	    	.w120 {
	    		width: 120px;
	    	}
	    	.h34 {
	    		display: block;
	    		height: 34px;
	    		line-height: 34px;
	    	}
	    	.w100 {
	    		display: inline-block;
	    	}
	    	.h34 input {
	    		display: inline-block;
	    		height: 32px;
	    		line-height: 32px;
	    		border-radius: 2px;
	    	}
	    	.ti1 {
	    		display: inline-block;
	    		text-indent: 1em;
	    	}
	    	.bd1 {border: 1px solid #999;}
	    	ul {
	    		list-style: none;
	    		padding: 20px;
	    		font-size: 14px;
	    	}
	    	.fc-999 {
	    		color: #999;
	    	}
	    	.btn {
	    		display: inline-block;
	    		border: 1px solid #12B7F5;
	    		color: #12B7F5;
	    	}
	    	.w280 {
	    		width: 280px;
	    		margin: 20px auto 0;
	    	}
				.referenceItems{
					position: absolute;
					width: 250px;
					height: 200px;
					right: 150px;
					bottom: 10px;
					background-color: #f5f5f5;
					overflow-y: scroll;
				}
				.item{
					display: flex;
					height: 60px;
					align-items: center;
					border-bottom: 1px solid #e4e1e1;
				}
				.user-info{
				}
	    </style>
	</head>
	<body>
		<div id="app" class="pl30 pr30">
			<visit-info :param="param"></visit-info>
			<visitor-info :param="param"></appoint-info>
		</div>
		<div class="pl30 pr30"><div class="c-f16 c-border-b pb5 pl30">参考信息</div>
		<ul class="pl40">
			<li class="h34">
				<span class="fc-999 mr40 w100">就诊类型</span>
				<div class="radio-inline">
					<input type="radio"  name="killOrder" id="killOrder1" value="1" style="margin-top: 2px;" checked/>
					<label for="killOrder1">普诊</label>
				</div>
				<div class="radio-inline">
					<input type="radio"  name="killOrder" id="killOrder2" value="0"  style="margin-top: 2px;"/>
					<label for="killOrder2">复诊</label>
				</div>
			</li>
			<li class="h34">
				<span class="fc-999 mr40 w100">参考信息</span>
					<input class="ti1 bd1" v-model="referenceInfo">
					<div class="referenceItems ti1">
						<div class="item">
							<input type="checkbox" name="referInfo" value="0">
							<div class="user-info">
								<div style="height: 15px;line-height: 15px;">黄小蕾 <span>记录于2024-1-1</span></div>
								<div style="height: 15px;line-height: 15px;">风险评估(冠心病、脑卒中)</div>
								<div style="height: 15px;line-height: 15px;" style="color: #FF9933;">91分</div>
							</div>
						</div>
						<div class="item">
							<input type="checkbox" name="referInfo" value="1">
							<div class="user-info">
								<div style="height: 15px;line-height: 15px;">黄小蕾 <span>记录于2024-1-1</span></div>
								<div style="height: 15px;line-height: 15px;">风险评估(冠心病、脑卒中)</div>
								<div style="height: 15px;line-height: 15px;" style="color: #FF9933;">91分</div>
							</div>
						</div>
			
						<div class="item">
							<input type="checkbox" name="referInfo" value="2">
							<div class="user-info">
								<div style="height: 15px;line-height: 15px;">黄小蕾 <span>记录于2024-1-1</span></div>
								<div style="height: 15px;line-height: 15px;">风险评估(冠心病、脑卒中)</div>
								<div style="height: 15px;line-height: 15px;" style="color: #FF9933;">91分</div>
							</div>
						</div>
						<div class="item">
							<input type="checkbox" name="referInfo" value="3">
							<div class="user-info">
								<div style="height: 15px;line-height: 15px;">黄小蕾 <span>记录于2024-1-1</span></div>
								<div style="height: 15px;line-height: 15px;">风险评估(冠心病、脑卒中)</div>
								<div style="height: 15px;line-height: 15px;" style="color: #FF9933;">91分</div>
							</div>
						</div>
						<div class="item">
							<input type="checkbox" name="referInfo" value="4">
							<div class="user-info">
								<div style="height: 15px;line-height: 15px;">黄小蕾 <span>记录于2024-1-1</span></div>
								<div style="height: 15px;line-height: 15px;">风险评估(冠心病、脑卒中)</div>
								<div style="height: 15px;line-height: 15px; " style="color: #FF9933;">91分</div>
							</div>
						</div>
					</div>
			</li>
			<li class="h50">
				<span class="fc-999 mr40 w100">转诊原因</span> 
				<textarea id="textarea"  v-model="EDUCATE_CONTENT" class="ti1" style="margin-top: 20px;height: 100px;"></textarea>
			</li>
		</ul>
		</div>
		<div class="w280 mt50"><span class="btn w120 mr40" id="submitBtn">确&nbsp;认</span><span class="btn w120" id="closeBtn">取&nbsp;消</span></div>
		<script src="../../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../../js/vue.js"></script>
    <script src="../../../../js/underscore.js"></script>
    <script src="../../../../js/es6-promise.js"></script>
    <script src="../../../../js/util.js"></script>
    <script src="../../../../js/validate/jquery.validate.min.js"></script>
    <script src="../../../../js/validate/messages_zh.min.js"></script>
    <script src="../../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../../plugins/datepicker/bootstrap-datepicker.js"></script>
    <script src="../../../../plugins/jqgrid/i18n/grid.locale-cnffe4.js?0820"></script>
    <script src="../../../../plugins/jqgrid/jquery.jqGrid.minffe4.js"></script>
    <script src="../../../../component/common/event-bus.js"></script>
	    <script src="../../appointment/visit-info.js"></script>
	    <script src="../../appointment/visitor-info.js"></script>
	    <script src="../../js/api-service.js"></script>
	    <script src="appoint-commit.js"></script>
	</body>
</html>

+ 91 - 0
app/jbsc/html/appointment/appoint-commit.js

@ -0,0 +1,91 @@
var Request = new Object()
Request = GetRequest()
var param = JSON.parse(decodeURIComponent(Request.paramStr)),
  backToSynergy = Request.backToSynergy
param.key = ''
param.text = ''
$(function () {
  $('#closeBtn').click(function () {
    closeLayer()
  })
  $('#submitBtn').click(function () {
    var loadingid = top.layer.load(1, {
      shade: [0.1, '#fff'] //0.1透明度的白色背景
    })
    if (!param.patientPhone) {
      top.showErrorMessage('请填写病人手机号码')
      top.layer.close(loadingid)
      return
    }
    if (!param.text) {
      top.showErrorMessage('请填写验证码')
      top.layer.close(loadingid)
      return
    }
    var p = JSON.parse(JSON.stringify(param))
    var user = JSON.parse(sessionStorage.getItem('LoginUser'))
    p.dcode = user.code
    p.dname = user.name
    p.relationCode = ''
    p.reservationType = 1
    p.incidentalMsgType = ''
    p.incidentalMsg = ''
    p.reservationReason = ''
    p.paramJson = encodeURIComponent(encodeURIComponent(JSON.stringify([])))
    var arrangeDate = JSON.parse(p.arrangeDate)
    arrangeDate.sectionType = 'a'
    arrangeDate.clazz = 'div-time-enable'
    p.arrangeDate = JSON.stringify(arrangeDate)
    // "sectionType":"a","clazz":"div-time-enable"
    // p.arrangeDate = JSON.stringify(p.arrangeDate)
    // {"max":"1","startTime":"2020/4/17 8:00:00","used":"0","endTime":"2020/4/17 8:07:00","sectionType":"a","clazz":"div-time-enable"}
    APIService.createOrderByDoctor(p)
      .then(function (res) {
        top.layer.close(loadingid)
        if (res.status == 200) {
          top.showSuccessMessage('提交预约挂号成功!')
          if (backToSynergy) {
            top.setSynergyData(param)
          }
          closeLayer()
        } else {
          top.showErrorMessage(res.msg || '预约挂号提交失败!请稍后重试')
        }
      })
      .catch(function (e) {
        top.layer.close(loadingid)
        console && console.error(e)
      })
  })
  $('input:radio').click(function () {
    console.log($('input:radio:checked').val(), 'aaaaaaaaaaaaaaaaaaa')
  })
  $('input:checkbox').click(function () {
    var checkList = new Array()
    $('input[name="referInfo"]:checked').each(function () {
      checkList.push($(this).val()) //向数组中添加元素
      console.log('asxxsxsxs', checkList)
    })
  })
})
function closeLayer() {
  var index = top.layer.getFrameIndex(window.name)
  top.layer.close(index)
}
new Vue({
  el: '#app',
  data: function () {
    return {
      param: param,
      imgCodeImg: '',
      radio: 0,
      referenceInfo: '已选0'
    }
  },
  mounted: function () {},
  methods: {}
})

+ 264 - 0
app/jbsc/html/appointment/appoint-doctor-detail.html

@ -0,0 +1,264 @@
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!--360浏览器优先以webkit内核解析-->
    <title>厦门i健康-客户服务平台</title>
    <!--<link rel="shortcut icon" href="favicon.ico">-->
    <link href="../../../../css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet" />
    <link href="../../../../css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet" />
    <link href="../../../../css/jqgrid/ui.jqgridffe4.css?0820" rel="stylesheet" />
    <link href="../../../../css/animate.min.css" rel="stylesheet" />
    <link href="../../../../css/style1.min.css?v=4.1.0" rel="stylesheet" />
    <style>
      body {
        padding: 70px 30px 0;
        font-size: 14px;
      }
      .setfixed {
        position: fixed;
        top: 0;
        left: 30px;
        height: 70px;
        width: 100%;
        line-height: 60px;
        background-color: #fff;
        z-index: 100;
      }
      .closeBtn {
        position: fixed;
        top: 10px;
        right: 10px;
        width: 44px;
        height: 44px;
        background: url(../../img/guanbi_btn.png);
        z-index: 101;
      }
      .closeBtn:hover {
        background: url(../../img/guanbi_btn_pre.png);
      }
      .w20 {
        width: 20px;
      }
      ul {
        list-style: none;
        padding: 10px;
        font-size: 14px;
      }
      .w120 {
        display: block;
        width: 120px;
        margin: 0 auto;
      }
      .w138 {
        width: 138px;
      }
      .pd0 {
        padding: 0;
      }
      .pt60 {
        padding-top: 60px;
      }
      .fc-red {
        color: red;
      }
      .fc-12b7f5 {
        color: #12b7f5;
      }
      .fc-fff {
        color: #fff;
      }
      .bgc-fff {
        border: 1px solid #12b7f5;
      }
      .bgc-12b7f5 {
        background-color: #12b7f5;
      }
      .bgc-d7dce6 {
        background-color: #d7dce6;
        border: 1px solid #d7dce6;
      }
      .bgc-c3c8d2 {
        background-color: #c3c8d2;
      }
      .h24 {
        height: 24px;
      }
      .lh20 {
        line-height: 20px;
      }
      .h28 {
        display: inline-block;
        height: 28px;
        line-height: 28px;
      }
      .h38 {
        display: inline-block;
        height: 38px;
        line-height: 38px;
        border-radius: 5px;
      }
      ul li a.h28,
      ul li a.h38 {
        overflow: hidden;
        max-width: 100%;
        text-overflow: ellipsis;
        white-space: nowrap;
        padding: 0 20px;
        color: #12b7f5;
      }
      ul li a.fc-fff {
        color: #fff;
      }
      ul li a.fc-12b7f5:hover,
      ul li a.h28:hover,
      ul li a.active {
        background-color: #12b7f5;
        border-radius: 5px;
        color: #fff;
      }
      .reback {
        display: inline-block;
        width: 140px;
        height: 34px;
        margin-left: 20px;
        background: url(../../img/fanhui_liebiao_btn.png);
        line-height: 36px;
        text-indent: 38px;
        font-size: 14px;
        color: #12b7f5;
        cursor: pointer;
      }
      .reback:hover {
        background: url(../../img/fanhui_liebiao_pre.png);
      }
      .inp_border {
        height: 32px;
        padding: 2px 7px;
        border-radius: 2px;
        color: #666;
      }
      :-ms-input-placeholder {
        /* Internet Explorer 10+ */
        color: #999;
      }
      ul li.disbox {
        display: block;
        padding: 0 0 0 10px;
      }
      .bd1 {
        border: 1px solid #999;
      }
      .btn {
        border: 1px solid #12b7f5;
      }
      ul li.li-time,
      ul li.li-time a {
        position: relative;
        display: block;
        height: 34px;
        border-radius: 5px;
        line-height: 34px;
      }
      ul li.li-time a {
        padding: 0 43px 0 5px;
      }
      ul li.li-time a.fc-fff {
        color: #fff;
      }
      ul li.li-time {
        margin: 10px 20px 10px 0;
      }
      ul li.li-time span {
        position: absolute;
        top: 0;
        right: 0;
        height: 32px;
        width: 38px;
        text-align: center;
      }
      .over-scroll {
        overflow: auto;
        max-height: 180px;
      }
      .search-wrapper {
        display: flex;
        align-items: center;
        margin-left: 20px;
        margin-top: 10px;
      }
      .setauto {
        display: block;
        margin: 0 auto;
      }
      .setInput {
        border: solid 1px #d7dce6;
        border-radius: 5px;
      }
      .setInput input {
        outline: none;
        border-radius: 5px;
      }
      #search span {
        display: inline-block;
        content: '';
        width: 16px;
        height: 16px;
        background: url(../../img/search.png);
        background-repeat: no-repeat;
        background-size: 16px;
        vertical-align: middle;
        margin-right: 9px;
      }
      .middle {
        -webkit-box-align: center;
      }
    </style>
  </head>
  <body>
    <!-- <a href="javascript: void(0)" title="关闭" class="closeBtn"></a> -->
    <h3 class="setfixed">
      <span class="tit c-f20">厦门市中山医院</span>
      <a href="javascript:;" class="reback">返回医院列表</a>
    </h3>
    <div id="app" class="mb30">
      <appoint-doptroon v-show="isSelDoctor" :doptroon="doptroon" @seldoptroon="seldoptroon"></appoint-doptroon>
      <doctor-select
        v-show="isSelDoctor"
        :doctors="doctors"
        :iswuhaoyuan="iswuhaoyuan"
        :doctortime="doctortime"
        @seldetail="seldetail"></doctor-select>
      <appoint-time
        v-show="!isSelDoctor"
        :visittime="visittime"
        :visitindex="visitindex"
        @changetime="changetime"></appoint-time>
      <signal-source v-show="!isSelDoctor" :detailtime="detailtime" @booking="booking"></signal-source>
      <div v-show="!isSelDoctor"><span class="w120 btn" @click="changeReturn">返回</span></div>
    </div>
    <script src="../../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../../js/vue.js"></script>
    <script src="../../../../js/underscore.js"></script>
    <script src="../../../../js/es6-promise.js"></script>
    <script src="../../../../js/util.js"></script>
    <script src="../../../../js/validate/jquery.validate.min.js"></script>
    <script src="../../../../js/validate/messages_zh.min.js"></script>
    <script src="../../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../../plugins/datepicker/bootstrap-datepicker.js"></script>
    <script src="../../../../plugins/jqgrid/i18n/grid.locale-cnffe4.js?0820"></script>
    <script src="../../../../plugins/jqgrid/jquery.jqGrid.minffe4.js"></script>
    <script src="../../../../component/common/event-bus.js"></script>
    <script src="../../appointment/appoint-doptroon.js"></script>
    <script src="../../appointment/doctor-select.js"></script>
    <script src="../../appointment/appoint-time.js"></script>
    <script src="../../appointment/signal-source.js"></script>
    <script src="../../../../api/jbsc-api.js"></script>
    <script src="../../../../api/http-request.js"></script>
    <script src="appoint-doctor-detail.js"></script>
  </body>
</html>

+ 299 - 0
app/jbsc/html/appointment/appoint-doctor-detail.js

@ -0,0 +1,299 @@
var Request = new Object()
Request = GetRequest()
var hospital = JSON.parse(decodeURIComponent(Request.hospital)),
  patientCode = Request.patient,
  callCode = Request.callCode,
  backToSynergy = Request.backToSynergy
var dept = null,
  bookDoctor = null,
  patientObj = null,
  arrangeDate = {
    sectionType: null,
    startTime: null
  }
function closeLayer() {
  var index = top.layer.getFrameIndex(window.name)
  top.layer.close(index)
}
$(function () {
  var loadingid = top.layer.load(1, {
    shade: [0.1, '#fff'] //0.1透明度的白色背景
  })
  // 获取居民信息
  jbscAPI
    .findByPatient({ patient: patientCode })
    .then(function (res) {
      top.layer.close(loadingid)
      if (res.status == 200) {
        patientObj = res.data
      } else {
        top.showErrorMessage(res.msg || '居民信息获取失败!')
      }
    })
    .catch(function (e) {
      top.layer.close(loadingid)
      console && console.error(e)
    })
  $('.tit').html(hospital.address)
  $('.reback').click(function () {
    top.layer.open({
      type: 2,
      closeBtn: true, // 显示关闭按钮
      area: ['800px', '90%'],
      title: false,
      content: '../../jbsc/html/appointment/appoint-select.html?patient=' + patientCode + '&callCode=' + callCode
    })
    closeLayer()
  })
  $('.closeBtn').click(function () {
    closeLayer()
  })
})
new Vue({
  el: '#app',
  data: function () {
    return {
      isSelDoctor: true,
      doptroon: [],
      doctors: [],
      doctortime: null,
      visittime: {
        time: []
      },
      visitindex: null,
      detailtime: [],
      iswuhaoyuan: false,
      data: [
        {
          'id': 2912568,
          'code': '30400',
          'hospitalCode': '350211A1004',
          'name': '神经内科门诊'
        },
        {
          'id': 2912569,
          'code': '31500',
          'hospitalCode': '350211A1004',
          'name': '皮肤科门诊'
        },
        {
          'id': 2912570,
          'code': '32600',
          'hospitalCode': '350211A1004',
          'name': '肿瘤科门诊'
        },
        {
          'id': 2912571,
          'code': '33200',
          'hospitalCode': '350211A1004',
          'name': '疼痛门诊'
        },
        {
          'id': 2912572,
          'code': '335',
          'hospitalCode': '350211A1004',
          'name': 'PICC门诊'
        },
        {
          'id': 2912573,
          'code': '34600',
          'hospitalCode': '350211A1004',
          'name': '妇科中医门诊'
        },
        {
          'id': 2912574,
          'code': '369',
          'hospitalCode': '350211A1004',
          'name': '帕金森病专病门诊'
        },
        {
          'id': 2912575,
          'code': '30100',
          'hospitalCode': '350211A1004',
          'name': '消化内科门诊'
        },
        {
          'id': 2912576,
          'code': '32800',
          'hospitalCode': '350211A1004',
          'name': '耳鼻喉科门诊'
        },
        {
          'id': 2912577,
          'code': '32900',
          'hospitalCode': '350211A1004',
          'name': '中医肛肠科门诊'
        },
        {
          'id': 2912578,
          'code': '33800',
          'hospitalCode': '350211A1004',
          'name': '临床心理专业门诊'
        },
        {
          'id': 2912579,
          'code': '36300',
          'hospitalCode': '350211A1004',
          'name': '妇科门诊'
        },
        {
          'id': 2912580,
          'code': '365',
          'hospitalCode': '350211A1004',
          'name': '疤痕门诊'
        },
        {
          'id': 2912581,
          'code': '373',
          'hospitalCode': '350211A1004',
          'name': '肝胆胰脾门诊'
        },
        {
          'id': 2912582,
          'code': '31000',
          'hospitalCode': '350211A1004',
          'name': '骨科门诊'
        },
        {
          'id': 2912583,
          'code': '31800',
          'hospitalCode': '350211A1004',
          'name': '中医骨伤科门诊'
        }
      ]
    }
  },
  mounted: function () {
    this.initData()
  },
  methods: {
    initData: function (keyWord) {
      var loadingid = top.layer.load(1, {
          shade: [0.1, '#fff'] //0.1透明度的白色背景
        }),
        vm = this
      jbscAPI
        .getOrgDeptList({
          city: 350200,
          hospitalId: hospital.code,
          filter: keyWord || '',
          pageIndex: 1,
          pageSize: 100
        })
        .then(function (res) {
          top.layer.close(loadingid)
          if (res.status == 200) {
            vm.doptroon = res.data
            vm.doptroon = vm.data
          } else {
            top.showErrorMessage(res.msg || '预约挂号详情获取失败!')
          }
        })
        .catch(function (e) {
          top.layer.close(loadingid)
          console && console.error(e)
        })
    },
    seldoptroon: function (list) {
      dept = list
      var loadingid = top.layer.load(1, {
          shade: [0.1, '#fff'] //0.1透明度的白色背景
        }),
        vm = this
      jbscAPI
        .regDeptSpeDoctorList({
          hospitalId: hospital.code,
          hosDeptId: list.code
        })
        .then(function (res) {
          if (res.status == 200) {
            vm.doctors = res.data
            ;(vm.doctortime = []), (vm.iswuhaoyuan = vm.doctors.length > 0 ? false : true)
            Promise.all(
              _.map(vm.doctors, function (d) {
                return jbscAPI.getDoctorArrange({
                  OrgCode: d.hospitalId,
                  DeptCode: d.hosDeptId,
                  DocCode: d.id
                })
              })
            )
              .then(function (list) {
                top.layer.close(loadingid)
                _.each(list, function (o) {
                  vm.doctortime.push(o.data)
                })
              })
              .catch(function (e) {
                top.layer.close(loadingid)
                console && console.error(e)
              })
          } else {
            top.layer.close(loadingid)
            top.showErrorMessage(res.msg || '医生列表获取失败!')
          }
        })
        .catch(function (e) {
          top.layer.close(loadingid)
          console && console.error(e)
        })
    },
    seldetail: function (doc) {
      bookDoctor = this.doctors[doc.index]
      this.isSelDoctor = false
      tit = bookDoctor.name + '&emsp;' + bookDoctor.title
      $('.tit').html(tit)
      this.visittime = this.doctortime[doc.index]
      this.visitindex = doc.ind
      arrangeDate.sectionType = this.doctortime[doc.index][doc.ind].time
      this.detailtime = this.doctortime[doc.index][doc.ind].sections
      window.scrollTo(0, 0)
    },
    changeReturn: function () {
      this.isSelDoctor = true
      $('.tit').html(hospital.address)
      window.scrollTo(0, 0)
    },
    changetime: function (data) {
      arrangeDate.sectionType = data.time
      this.detailtime = data.sections
    },
    booking: function (data) {
      arrangeDate.startTime = data.startTime
      var param = {
        city: 350200,
        hospitalId: hospital.code,
        hospitalName: hospital.address,
        hosDeptId: dept.code,
        hosDeptName: dept.name,
        doctorId: bookDoctor.id,
        doctorName: bookDoctor.name,
        arrangeDate: JSON.stringify(data),
        patient: patientObj.code,
        patientName: patientObj.name,
        cardNo: patientObj.idcard,
        clinicCard: patientObj.ssc,
        dcode: '',
        dname: '',
        patientPhone: patientObj.mobile,
        callCode: callCode || ''
      }
      var content =
        '../../jbsc/html/appointment/appoint-commit.html?paramStr=' + encodeURIComponent(JSON.stringify(param))
      if (backToSynergy) {
        content += '&backToSynergy=1'
      }
      top.layer.open({
        type: 2,
        title: false,
        closeBtn: true,
        area: ['600px', '800px'],
        content: content
      })
      closeLayer()
    }
  }
})

+ 164 - 0
app/jbsc/html/appointment/appoint-select.html

@ -0,0 +1,164 @@
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!--360浏览器优先以webkit内核解析-->
    <title>厦门i健康-客户服务平台</title>
    <link href="../../../../css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet" />
    <link href="../../../../css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet" />
    <link href="../../../../css/jqgrid/ui.jqgridffe4.css?0820" rel="stylesheet" />
    <link href="../../../../css/animate.min.css" rel="stylesheet" />
    <link href="../../../../css/style1.min.css?v=4.1.0" rel="stylesheet" />
    <style>
      body {
        padding-top: 20px;
      }
      .w20 {
        width: 20px;
      }
      .w120 {
        width: 120px;
        margin: 0 auto;
      }
      ul {
        list-style: none;
        padding: 20px;
        font-size: 14px;
      }
      ul li {
        float: left;
        width: 50%;
        margin-bottom: 10px;
      }
      ul li,
      ul li a {
        display: inline-block;
        height: 28px;
        line-height: 28px;
      }
      ul li a {
        overflow: hidden;
        max-width: 100%;
        text-overflow: ellipsis;
        white-space: nowrap;
        padding: 0 20px;
        color: #12b7f5;
      }
      ul li a:hover {
        background-color: #12b7f5;
        border-radius: 5px;
        color: #fff;
      }
      .col-999 {
        color: #999;
      }
      .col-red {
        color: red;
      }
      .btn {
        display: block;
        border: 1px solid #12b7f5;
        margin: 0 auto;
        color: #12b7f5;
      }
      /* .inp_border {
        height: 32px;
        padding: 2px 7px;
        border-radius: 2px;
        color: #666;
      } */
      .search-wrapper {
        display: flex;
        align-items: center;
        margin-left: 20px;
      }
      /* .bd1 {
        border: 1px solid #999;
      }
      .setInput {
        border: solid 1px #d7dce6;
        border-radius: 5px;
      } */
      .setInput input {
        outline: none;
        border-radius: 5px;
      }
      #search span {
        display: inline-block;
        content: '';
        width: 16px;
        height: 16px;
        background: url(../../images/search.png);
        background-repeat: no-repeat;
        background-size: 16px;
        vertical-align: middle;
        margin-right: 9px;
      }
      .middle {
        -webkit-box-align: center;
      }
      .hosipital-wrapper {
        display: flex;
        margin-bottom: 20px;
        margin-left: 20px;
      }
      .hospital {
        width: 100px;
        font-size: 15px;
        border: 1px solid #666;
        height: 30px;
        line-height: 30px;
        text-align: center;
        cursor: pointer;
        margin-right: 5px;
      }
      .selectedItem {
        color: #12b7f5;
        border: 1px solid #12b7f5;
      }
    </style>
    <script>
      var storage = localStorage.getItem('app_storage')
      if (storage) {
        storage = JSON.parse(storage)
        sessionStorage.setItem('LoginUser', JSON.stringify(storage.api_login_doctor))
      }
    </script>
  </head>
  <body>
    <div id="app" class="pl30 pr30 pb30">
      <div class="hosipital-wrapper">
        <div class="hospital" :class="selectHospital==1? 'selectedItem':''" @click="changeTypeHospital(1)">
          医院预约
        </div>
        <div class="hospital" :class="selectHospital==2? 'selectedItem':''" @click="changeTypeHospital(2)">
          社区预约
        </div>
      </div>
      <appoint-hospital :hospital="hospital" v-if="selectHospital==1"></appoint-hospital>
      <appoint-country :country="country" v-if="selectHospital==2"></appoint-country>
      <div><span class="btn w120" id="closeBtn">返回</span></div>
    </div>
    <script src="../../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../../js/vue.js"></script>
    <script src="../../../../js/underscore.js"></script>
    <script src="../../../../js/es6-promise.js"></script>
    <script src="../../../../js/util.js"></script>
    <script src="../../../../js/validate/jquery.validate.min.js"></script>
    <script src="../../../../js/validate/messages_zh.min.js"></script>
    <script src="../../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../../plugins/datepicker/bootstrap-datepicker.js"></script>
    <script src="../../../../plugins/jqgrid/i18n/grid.locale-cnffe4.js?0820"></script>
    <script src="../../../../plugins/jqgrid/jquery.jqGrid.minffe4.js"></script>
    <script src="../../../../component/common/event-bus.js"></script>
    <script src="../../appointment/appoint-hospital.js"></script>
    <script src="../../appointment/appoint-country.js"></script>
    <script src="../../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../../api/jbsc-api.js"></script>
    <script src="appoint-select.js"></script>
  </body>
</html>

+ 117 - 0
app/jbsc/html/appointment/appoint-select.js

@ -0,0 +1,117 @@
var Request = new Object()
Request = GetRequest()
var patient = Request.patient,
  callCode = Request.callCode,
  backToSynergy = Request.backToSynergy
$(function () {
  $('#closeBtn').click(function () {
    closeLayer()
  })
})
function closeLayer() {
  var index = top.layer.getFrameIndex(window.name)
  top.layer.close(index)
}
new Vue({
  el: '#app',
  data: function () {
    return {
      hospital: [],
      country: [],
      selectHospital: 1,
      town: ''
    }
  },
  mounted: function () {
    // top.showSuccessMessage("提交预约挂号成功!")
    // this.town = JSON.parse(sessionStorage.getItem('LoginUser')).town
    this.initData()
  },
  methods: {
    initData: function (keyWord, keyWord2) {
      var loadingid = top.layer.load(1, {
          shade: [0.1, '#fff'] //0.1透明度的白色背景
        }),
        vm = this
      jbscAPI
        .getOrgList({
          city: '350200',
          filter: keyWord || '',
          type: 1,
          page: 1,
          pageSize: 100
        })
        .then(function (res) {
          if (res.status == 200) {
            vm.hospital = res.data
            jbscAPI
              .getOrgList({
                city: 350200,
                filter: keyWord2 || '',
                type: 2,
                page: 1,
                pageSize: 100
              })
              .then(function (res) {
                top.layer.close(loadingid)
                if (res.status == 200) {
                  vm.country = res.data
                } else {
                  top.showErrorMessage(res.msg || '社区列表获取失败!')
                }
              })
              .catch(function (e) {
                top.layer.close(loadingid)
                console && console.error(e)
              })
          } else {
            top.showErrorMessage(res.msg || '医院列表获取失败!')
          }
        })
        .catch(function (e) {
          top.layer.close(loadingid)
          console && console.error(e)
        })
    },
    initTypeof: function (type, keyWord) {
      var loadingid = top.layer.load(1, {
          shade: [0.1, '#fff'] //0.1透明度的白色背景
        }),
        vm = this
      jbscAPI
        .getOrgList({
          city: '350200',
          filter: keyWord || '',
          type: type,
          page: 1,
          pageSize: 100
        })
        .then(function (res) {
          top.layer.close(loadingid)
          if (res.status == 200) {
            if (type == 1) {
              vm.hospital = res.data
            } else {
              vm.country = res.data
            }
          } else {
            if (type == 1) {
              top.showErrorMessage(res.msg || '医院列表获取失败!')
            } else {
              top.showErrorMessage(res.msg || '社区列表获取失败!')
            }
          }
        })
        .catch(function (e) {
          top.layer.close(loadingid)
          console && console.error(e)
        })
    },
    changeTypeHospital(value) {
      this.selectHospital = value
      console.log('W1s1neeoe', this.selectHospital)
    }
  }
})

+ 74 - 0
app/jbsc/html/appointment/appointment-detail.html

@ -0,0 +1,74 @@
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!--360浏览器优先以webkit内核解析-->
    <title>厦门i健康-客户服务平台</title>
    <!--<link rel="shortcut icon" href="favicon.ico">-->
    <link href="../../../../css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet" />
    <link href="../../../../css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet" />
    <link href="../../../../css/jqgrid/ui.jqgridffe4.css?0820" rel="stylesheet" />
    <link href="../../../../css/animate.min.css" rel="stylesheet" />
    <link href="../../../../css/style1.min.css?v=4.1.0" rel="stylesheet" />
    <style>
      body {
        padding-top: 20px;
      }
      .w20 {
        width: 20px;
      }
      .btn-12b7f5 {
        background-color: #12b7f5;
        border-color: #12b7f5;
        color: #fff;
      }
      .btn-ff3b30 {
        background-color: #ff3b30;
        border-color: #ff3b30;
        color: #fff;
      }
      .btn-fff {
        background-color: #fff;
        border-color: #12b7f5;
        color: #323232;
      }
      .table-no-bordered tbody > tr > td {
        border: none;
      }
      [contenteditable='true'] {
        outline: rgb(229, 151, 0) dotted 1px;
      }
      [contenteditable='true']:focus {
        outline: rgb(229, 151, 0) solid 1px;
      }
    </style>
  </head>
  <body>
    <div id="app" class="pl30 pr30 mb30">
      <appointment-info :appointinfo="appointinfo"></appointment-info>
      <treatment-info :appointinfo="appointinfo"></treatment-info>
      <treatment-patient :appointinfo="appointinfo"></treatment-patient>
    </div>
    <script src="../../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../../js/vue.js"></script>
    <script src="../../../../js/underscore.js"></script>
    <script src="../../../../js/es6-promise.js"></script>
    <script src="../../../../js/util.js"></script>
    <script src="../../../../js/validate/jquery.validate.min.js"></script>
    <script src="../../../../js/validate/messages_zh.min.js"></script>
    <script src="../../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../../plugins/datepicker/bootstrap-datepicker.js"></script>
    <script src="../../../../plugins/jqgrid/i18n/grid.locale-cnffe4.js?0820"></script>
    <script src="../../../../plugins/jqgrid/jquery.jqGrid.minffe4.js"></script>
    <script src="../../../../component/common/event-bus.js"></script>
    <script src="../../component/appointment/appointment-info.js"></script>
    <script src="../../component/appointment/treatment-info.js"></script>
    <script src="../../component/appointment/treatment-patient.js"></script>
    <script src="../../js/api-service.js"></script>
    <script src="appointment-detail.js"></script>
  </body>
</html>

+ 39 - 0
app/jbsc/html/appointment/appointment-detail.js

@ -0,0 +1,39 @@
var Request = new Object();
Request = GetRequest();
var code = Request.code,
	param = JSON.parse(decodeURIComponent(Request.param)),
	kwObj = JSON.parse(decodeURIComponent(Request.kwObj))
function closeLayer() {
	var index = top.layer.getFrameIndex(window.name);  
	top.layer.close(index);
}
new Vue({
  el: '#app',
  data: function() {
		return {
			appointinfo: null
		}
	},
	mounted: function() {
		var loadingid = top.layer.load(1, {
			  	shade: [0.1,'#fff'] //0.1透明度的白色背景
			}),
			vm = this
		APIService.getPatientReservation({
			code: code
		}).then(function(res) {
			top.layer.close(loadingid)
			if(res.status == 200) {
				vm.appointinfo = res.data
			} else {
				top.showErrorMessage(res.msg || "预约挂号详情获取失败!")
			}
		}).catch(function(e) {
			top.layer.close(loadingid)
			console && console.error(e)
		})
	},
	methods: {
		
	}
})

+ 118 - 0
app/jbsc/html/appointment/appointment-search.html

@ -0,0 +1,118 @@
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!--360浏览器优先以webkit内核解析-->
    <title>厦门i健康-客户服务平台</title>
    <!--<link rel="shortcut icon" href="favicon.ico">-->
    <link href="../../../../css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet" />
    <link href="../../../../css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet" />
    <link href="../../../../css/jqgrid/ui.jqgridffe4.css?0820" rel="stylesheet" />
    <link href="../../../../css/animate.min.css" rel="stylesheet" />
    <link href="../../../../css/style1.min.css?v=4.1.0" rel="stylesheet" />
    <style>
      body {
        padding-top: 20px;
      }
      .w260 {
        width: 260px;
      }
      .btn-12b7f5 {
        background-color: #12b7f5;
        border-color: #12b7f5;
        color: #fff;
      }
      .btn-2dbe55 {
        background-color: #2dbe55;
        border-color: #2dbe55;
        color: #fff;
      }
      .dataCell {
        float: left;
        padding-top: 2px;
        vertical-align: middle;
      }
      .dataCell label {
        margin-bottom: 0;
      }
      .cellTitle {
        display: inline-block;
        vertical-align: middle;
        text-align: left;
        padding-left: 10px;
        min-width: 80px;
        font-size: 12px;
        text-align: right;
      }
      #searchPhone input {
        vertical-align: middle;
      }
      #searchPhone:after {
        position: absolute;
        top: 50%;
        right: 10px;
        margin-top: -8px;
        content: '';
        width: 20px;
        height: 20px;
        background: url(../../img/sousuo_icon.png);
        background-size: 20px;
        vertical-align: middle;
      }
      .operation-icon {
        display: inline-block;
        width: 30px;
        height: 30px;
        background-size: 30px;
        vertical-align: middle;
      }
      .chakan-icon {
        background: url(../../img/chakan02_icon.png) no-repeat;
      }
      .shanchu-icon {
        background: url(../../img/quxiaoyuyue02_icon.png) no-repeat;
      }
      .chakan-icon:active {
        background: url(../../img/chakan01_icon.png) no-repeat;
      }
      .shanchu-icon:active {
        background: url(../../img/quxiaoyuyue01_icon.png) no-repeat;
      }
      .chakan-icon:hover {
        background: url(../../img/chakan03_icon.png) no-repeat;
      }
      .shanchu-icon:hover {
        background: url(../../img/quxiaoyuyue03_icon.png) no-repeat;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <appointment-search-bar :card="patientIdcard"></appointment-search-bar>
      <appointment-table></appointment-table>
    </div>
    <script src="../../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../../js/vue.js"></script>
    <script src="../../../../js/underscore.js"></script>
    <script src="../../../../js/es6-promise.js"></script>
    <script src="../../../../js/util.js"></script>
    <script src="../../../../js/validate/jquery.validate.min.js"></script>
    <script src="../../../../js/validate/messages_zh.min.js"></script>
    <script src="../../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../../plugins/datepicker/bootstrap-datepicker.js"></script>
    <script src="../../../../plugins/jqgrid/i18n/grid.locale-cnffe4.js?0820"></script>
    <script src="../../../../plugins/jqgrid/jquery.jqGrid.minffe4.js"></script>
    <script src="../../../../component/common/event-bus.js"></script>
    <script src="../../component/appointment/appointment-search-bar.js"></script>
    <script src="../../component/appointment/appointment-table.js"></script>
    <script src="../../js/api-service.js"></script>
    <script src="appointment-search.js"></script>
  </body>
</html>

+ 15 - 0
app/jbsc/html/appointment/appointment-search.js

@ -0,0 +1,15 @@
new Vue({
  el: '#app',
  data: {
    patientIdcard:''
  },
  mounted() {
    var vm = this;
    window.addEventListener('message',function(event){
          if(event.data){
            var data = event.data;
            vm.patientIdcard = data;
          }
      },false);
  },
})

+ 268 - 230
app/jbsc/html/statistics.html

@ -1,236 +1,274 @@
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <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 http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta name="referrer" content="no-referrer" />
    <title>疾病筛查</title>
    <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/cross.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/cross.ui.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element-ui.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
    <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="../css/statistics.css" />
  </head>
	<head>
		<meta charset="UTF-8">
		<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 http-equiv="X-UA-Compatible" content="IE=Edge">
		<meta name="referrer" content="no-referrer" />
		<title>疾病筛查</title>
		<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/cross.css" />
		<link rel="stylesheet" type="text/css" href="../../../css/cross.ui.css" />
		<link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
		<link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
		<link rel="stylesheet" href="../css/statistics.css" />
	</head>
	<body>
		<div id="app" v-cloak>
			<div class="re-title no-select">
				<div class="name">筛查统计</div>
			</div>
			<!--筛查数据模型-->
			<div id="sc_datamodel" class="boxcenter p10">
				<div class="div-table plr80">
					<div class="table-row">
						<div class="table-cell">
							<div class="ui-grid">
								<div class="ui-col-1">
									<div class="bigbox bgc1-12B7F5 numcircle">
										<span class="pl20 c-12B7F5"></span>筛查表管理
									</div>
									<div class="bgc-D7F3FE c-border-radius-blr plr20 ptb10">
										<div class="border-6FD7FE bgc-6fd7fe">
											<div class="c-fff c-f16 lheight-24">
												筛查表
											</div>
											<div class="c-12B7F5 smallbox">
												<span class="c-f20">{{Statics.useTemplateCount}}</span>个
											</div>
										</div>
										<img src="../images/jiantou_02_img.png" class="mt-4">
										<div class="border-6FD7FE bgc-6fd7fe">
											<div class="c-fff c-f16 lheight-24">
												已下发问卷
											</div>
											<div class="c-12B7F5 smallbox">
												<span class="c-f20">{{Statics.grantCount}}</span>份
											</div>
										</div>
									</div>
								</div>
								<div class="ui-col-0"><img src="../images/jiantou_03_img.png" class="mt10 ml-2"></div>
							</div>
						</div>
						<div class="table-cell plr30">
							<div class="ui-grid">
								<div class="ui-col-1">
									<div class="bigbox bgc1-2DBE55 numcircle">
										<span class="pl20 c-2DBE55"></span>筛查记录
									</div>
									<div class="bgc-DCFDE6 c-border-radius-blr plr20 ptb10">
										<div class="border-61D882 mb20 bgc-61D882">
											<div class="c-fff c-f16 lheight-24">
												疑似高危
											</div>
											<div class="c-2DBE55 smallbox">
												<span class="c-f20">{{Statics.dangetCount}}</span>份
											</div>
										</div>
										<div class="border-61D882 bgc-61D882">
											<div class="c-fff c-f16 lheight-24">
												健康跟踪
											</div>
											<div class="c-2DBE55 smallbox">
												<span class="c-f20">{{Statics.followCount}}</span>份
											</div>
										</div>
									</div>
								</div>
								<div class="ui-col-0">
									<img src="../images/jiantou_04_img.png" class="mt10 ml-2">
									<img src="../images/jiantou_01_img.png" class="jiantou01"></div>
							</div>
						</div>
						<div class="table-cell">
							<div class="bigbox bgc1-FF9630 numcircle">
								<span class="pl20 c-FF9630"></span>病人服务
							</div>
							<div class="bgc-FEEEDF c-border-radius-blr plr20 ptb10">
								<div class="border-FAB675 mb20 bgc-FAB675">
									<div class="c-fff c-f16 lheight-24">
										预约转诊
									</div>
									<div class="c-FF9630 smallbox">
										<span class="c-f20">{{Statics.orderCount}}</span>份
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
			<!--疑似高危记录表-搜索-->
			<div id="sc_searchbar" class="pt20">
				<div id="datamodeltap" class="up_datamodel" @click="datamodeltap()"><span class="c-12B7F5 c-f14 pl20">收起</span></div>
				<div class="tabs tabs-two c-position-r" data-toggle="tabs" data-toggle-tabs="oneIframe">
					<ul class="nav nav-tabs plr20">
						<li role="presentation" :class="{'active':isDanger=='1'}" @click="gettable('1')">
							<a href="javascript:;">疑似高危记录表</a>
						</li>
						<li role="presentation" :class="{'active':isDanger!='1'}" @click="gettable('')">
							<a href="javascript:;">所有记录</a>
						</li>
					</ul>
					<!--<div class="tabs-hd clearfix">
  <body>
    <div id="app" v-cloak>
      <div class="re-title no-select">
        <div class="name">筛查统计</div>
      </div>
      <!--筛查数据模型-->
      <div id="sc_datamodel" class="boxcenter p10">
        <div class="div-table plr80">
          <div class="table-row">
            <div class="table-cell">
              <div class="ui-grid">
                <div class="ui-col-1">
                  <div class="bigbox bgc1-12B7F5 numcircle">
                    <span class="pl20 c-12B7F5"></span>
                    筛查表管理
                  </div>
                  <div class="bgc-D7F3FE c-border-radius-blr plr20 ptb10">
                    <div class="border-6FD7FE bgc-6fd7fe">
                      <div class="c-fff c-f16 lheight-24">筛查表</div>
                      <div class="c-12B7F5 smallbox">
                        <span class="c-f20">{{Statics.useTemplateCount}}</span>
                      </div>
                    </div>
                    <img src="../images/jiantou_02_img.png" class="mt-4" />
                    <div class="border-6FD7FE bgc-6fd7fe">
                      <div class="c-fff c-f16 lheight-24">已下发问卷</div>
                      <div class="c-12B7F5 smallbox">
                        <span class="c-f20">{{Statics.grantCount}}</span>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="ui-col-0"><img src="../images/jiantou_03_img.png" class="mt10 ml-2" /></div>
              </div>
            </div>
            <div class="table-cell plr30">
              <div class="ui-grid">
                <div class="ui-col-1">
                  <div class="bigbox bgc1-2DBE55 numcircle">
                    <span class="pl20 c-2DBE55"></span>
                    筛查记录
                  </div>
                  <div class="bgc-DCFDE6 c-border-radius-blr plr20 ptb10">
                    <div class="border-61D882 mb20 bgc-61D882">
                      <div class="c-fff c-f16 lheight-24">疑似高危</div>
                      <div class="c-2DBE55 smallbox">
                        <span class="c-f20">{{Statics.dangetCount}}</span>
                      </div>
                    </div>
                    <div class="border-61D882 bgc-61D882">
                      <div class="c-fff c-f16 lheight-24">健康跟踪</div>
                      <div class="c-2DBE55 smallbox">
                        <span class="c-f20">{{Statics.followCount}}</span>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="ui-col-0">
                  <img src="../images/jiantou_04_img.png" class="mt10 ml-2" />
                  <img src="../images/jiantou_01_img.png" class="jiantou01" />
                </div>
              </div>
            </div>
            <div class="table-cell">
              <div class="bigbox bgc1-FF9630 numcircle">
                <span class="pl20 c-FF9630"></span>
                病人服务
              </div>
              <div class="bgc-FEEEDF c-border-radius-blr plr20 ptb10">
                <div class="border-FAB675 mb20 bgc-FAB675">
                  <div class="c-fff c-f16 lheight-24">预约转诊</div>
                  <div class="c-FF9630 smallbox">
                    <span class="c-f20">{{Statics.orderCount}}</span>
                  </div>
                </div>
                <div class="border-FAB675 bgc-FAB675">
                  <div class="c-fff c-f16 lheight-24">社区随访</div>
                  <div class="c-FF9630 smallbox">
                    <span class="c-f20">{{Statics.orderCount}}</span>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!--疑似高危记录表-搜索-->
      <div id="sc_searchbar" class="pt20">
        <div id="datamodeltap" class="up_datamodel" @click="datamodeltap()">
          <span class="c-12B7F5 c-f14 pl20">收起</span>
        </div>
        <div class="tabs tabs-two c-position-r" data-toggle="tabs" data-toggle-tabs="oneIframe">
          <ul class="nav nav-tabs plr20">
            <li role="presentation" :class="{'active':isDanger=='1'}" @click="gettable('1')">
              <a href="javascript:;">疑似高危记录表</a>
            </li>
            <li role="presentation" :class="{'active':isDanger!='1'}" @click="gettable('')">
              <a href="javascript:;">所有记录</a>
            </li>
          </ul>
          <!--<div class="tabs-hd clearfix">
							<a href="javascript:;" :class="{curr:isDanger=='1'}" @click="gettable('1')"><span>疑似高危记录表</span></a>
							<a href="javascript:;" :class="{curr:isDanger==''}" @click="gettable('')"><span>所有记录</span></a>
						</div>-->
					<div class="tabs-bd pt20 plr20">
						<div class="dataCell form-group">
							<div class="w160 inline c-vam">
								<div class="input-group">
									<input id="Type" placeholder="请选择筛查类型" type="text" class="form-control bgc-fff" name="Type" readonly="readonly">
									<div class="input-group-btn">
										<button type="button" class="btn btn-white dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span></button>
										<ul class="dropdown-menu dropdown-menu-right">
										</ul>
									</div>
								</div>
							</div>
						</div>
						<div class="dataCell form-group">
							<div class="w160 inline c-vam">
								<div class="input-group">
									<input id="Status" placeholder="请选择管理情况" type="text" class="form-control" name="Status" readonly="readonly">
									<div class="input-group-btn">
										<button type="button" class="btn btn-white dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span></button>
										<ul class="dropdown-menu dropdown-menu-right">
										</ul>
									</div>
								</div>
							</div>
						</div>
						<input class="form-control w-220 fl" style="height: 28px;border-radius: 3px;" placeholder="请输入居民姓名" v-model="name" />
						<span class="btn bgc-12B7F5 fl ml20" @click="search(1)">查询</span>
						<span class="btn bgc-12B7F5 ml20 right" @click="shaicha()">人工筛查</span>
					</div>
				</div>
			</div>
			<!--疑似高危记录表-表格-->
			<div id="sc_table" class="p20">
				<table class="table-bordered table-striped width-100 c-t-center">
					<thead>
						<tr>
							<th>姓名</th>
							<th>筛查类型</th>
							<th>评分</th>
							<th>状态</th>
							<th>评估</th>
							<th>时间</th>
							<th style="width:200px;">管理情况</th>
						</tr>
					</thead>
					<tbody>
						<tr v-if="!wujilu" v-for="(data, index) in tablelist">
							<td style="width:80px">{{data.patientName}}</td>
							<td @click="view(data)">{{data.templateTitle}}</td>
							<td class="c-FF9630" style="width:50px">{{data.screenResultScore?data.screenResultScore+"分":""}}</td>
							<td style="width:70px;">
								<div v-if="data.isAgain==1&&data.isDanger==1">
									<span v-if="data.following==1">已跟踪</span>	
									<span v-if="data.isOrder==1">已预约</span>	
									<span v-if="data.isOrder==2">已接诊</span>	
									<span v-if="data.following==0&&data.isOrder==0">待处理</span>	
									<span v-if="data.isDanger==0">日常健康管理</span>		
								</div>
								<div v-else>
									&nbsp;
								</div>
							</td>
							<td>{{data.screenResult}}</td>
							<td style="width:155px;">{{data.czrq}}</td>
							<td style="width:200px;">
								<div v-if="data.isAgain==1 && data.isDanger==1">
									<div v-if="data.isOrder==1" class="c-12B7F5">
										已预约
									</div>
									<div v-else-if="data.following==0 && data.isOrder==0">
										<span class="btn bgc-FF9630 fl ml10" @click="jkgz(data)">健康跟踪</span>
										<span class="btn bgc-02cfb9 fl ml10" @click="zhuanzhen">转诊</span>
									</div>
									<div v-else-if="data.following==1">
										<span class="btn bgc-2DBE55 fl ml10" @click="jkjy(data)">健康教育</span>
										<span class="btn bgc-12B7F5 fl ml10" @click="shaicha(data,1)">再次筛查</span>
									</div>
									<div v-else-if="data.isOrder==2" class="c-12B7F5">
										已接诊
									</div>
								</div>
								<!--<div v-else-if=" data.isDanger==0">
										<div  class="c-12B7F5">
											日常健康管理
										</div>										
									</div>-->
							</td>
						</tr>
						<tr v-if="wujilu">
							<td colspan="7">
								无记录
							</td>
						</tr>
					</tbody>
				</table>
				<navigation :pages="pagetotal" :current="currentPage" @navpage="search" :total="total" :size="pagesize"></navigation>
			</div>
		</div>
		<script type="text/javascript" src="../../../js/vue.js"></script>
		<script type="text/javascript" src="../../../js/jquery-2.2.4.js"></script>
		<script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../plugins/toastr/toastr.min.js"></script>
		<script src="../../../plugins/layer/layer.min.js"></script>
		<script src="../../../js/util.js"></script>
		<script src="../../../api/http-request.js"></script>
		<script src="../../../js/underscore.js"></script>
		<script src="../../../plugins/suggest/bootstrap-suggest.min.js"></script>
		<script src="../../../component/common/pagination.js"></script>
		<script src="../../../api/jbsc-api.js"></script>
		<script src="../js/statistics.js"></script>
	</body>
</html>
          <div class="tabs-bd pt20 plr20">
            <div class="dataCell form-group">
              <div class="w160 inline c-vam">
                <div class="input-group">
                  <input
                    id="Type"
                    placeholder="请选择筛查类型"
                    type="text"
                    class="form-control bgc-fff"
                    name="Type"
                    readonly="readonly" />
                  <div class="input-group-btn">
                    <button
                      type="button"
                      class="btn btn-white dropdown-toggle"
                      data-toggle="dropdown"
                      aria-haspopup="true"
                      aria-expanded="false">
                      <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu dropdown-menu-right"></ul>
                  </div>
                </div>
              </div>
            </div>
            <div class="dataCell form-group">
              <div class="w160 inline c-vam">
                <div class="input-group">
                  <input
                    id="Status"
                    placeholder="请选择管理情况"
                    type="text"
                    class="form-control"
                    name="Status"
                    readonly="readonly" />
                  <div class="input-group-btn">
                    <button
                      type="button"
                      class="btn btn-white dropdown-toggle"
                      data-toggle="dropdown"
                      aria-haspopup="true"
                      aria-expanded="false">
                      <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu dropdown-menu-right"></ul>
                  </div>
                </div>
              </div>
            </div>
            <input
              class="form-control w-220 fl"
              style="height: 28px; border-radius: 3px"
              placeholder="请输入居民姓名"
              v-model="name" />
            <span class="btn bgc-12B7F5 fl ml20" @click="search(1)">查询</span>
            <span class="btn bgc-12B7F5 ml20 right" @click="shaicha()">人工筛查</span>
          </div>
        </div>
      </div>
      <!--疑似高危记录表-表格-->
      <div id="sc_table" class="p20">
        <table class="table-bordered table-striped width-100 c-t-center">
          <thead>
            <tr>
              <th>姓名</th>
              <th>筛查类型</th>
              <th>评分</th>
              <th>状态</th>
              <th>评估</th>
              <th>时间</th>
              <th style="width: 200px">管理情况</th>
            </tr>
          </thead>
          <tbody>
            <tr v-if="!wujilu" v-for="(data, index) in tablelist">
              <td style="width: 80px">{{data.patientName}}</td>
              <td @click="view(data)">{{data.templateTitle}}</td>
              <td class="c-FF9630" style="width: 50px">{{data.screenResultScore?data.screenResultScore+"分":""}}</td>
              <td style="width: 70px">
                <div v-if="data.isAgain==1&&data.isDanger==1">
                  <span v-if="data.following==1">已跟踪</span>
                  <span v-if="data.isOrder==1">已预约</span>
                  <span v-if="data.isOrder==2">已接诊</span>
                  <span v-if="data.following==0&&data.isOrder==0">待处理</span>
                  <span v-if="data.isDanger==0">日常健康管理</span>
                </div>
                <div v-else>&nbsp;</div>
              </td>
              <td>{{data.screenResult}}</td>
              <td style="width: 155px">{{data.czrq}}</td>
              <td style="width: 200px">
                <div v-if="data.isAgain==1 && data.isDanger==1">
                  <div v-if="data.isOrder==1" class="c-12B7F5">已预约</div>
                  <div v-else-if="data.following==0 && data.isOrder==0">
                    <span class="btn bgc-FF9630 fl ml10" @click="jkgz(data) " v-if="data.disease!=3">健康跟踪</span>
                    <span class="btn bgc-FF9630 fl ml10" @click="sqsf(data) " v-else>社区随访</span>
                    <span class="btn bgc-02cfb9 fl ml10" @click="zhuanzhen(data)">转诊</span>
                  </div>
                  <div v-else-if="data.following==1">
                    <span class="btn bgc-2DBE55 fl ml10" @click="jkjy(data)">健康教育</span>
                    <span class="btn bgc-12B7F5 fl ml10" @click="shaicha(data,1)">再次筛查</span>
                  </div>
                  <div v-else-if="data.isOrder==2" class="c-12B7F5">已接诊</div>
                </div>
                <div v-else-if=" data.isDanger==0">
                  <div class="btn bgc-12B7F5" style="text-align: center" @click="jkzd(data)">健康指导</div>
                </div>
              </td>
            </tr>
            <tr v-if="wujilu">
              <td colspan="7">无记录</td>
            </tr>
          </tbody>
        </table>
        <navigation
          :pages="pagetotal"
          :current="currentPage"
          @navpage="search"
          :total="total"
          :size="pagesize"></navigation>
      </div>
      <el-dialog title="提示" :visible.sync="centerDialogVisible" width="40%" center>
        <span>是否纳入本社区随访</span>
        <span slot="footer" class="dialog-footer">
          <el-button @click="centerDialogVisible = false">取 消</el-button>
          <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
        </span>
      </el-dialog>
    </div>
    <script type="text/javascript" src="../../../js/vue.js"></script>
    <script type="text/javascript" src="../../../js/jquery-2.2.4.js"></script>
    <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../js/element-ui.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../plugins/layer/layer.min.js"></script>
    <script src="../../../js/util.js"></script>
    <script src="../../../api/http-request.js"></script>
    <script src="../../../js/underscore.js"></script>
    <script src="../../../plugins/suggest/bootstrap-suggest.min.js"></script>
    <script src="../../../component/common/pagination.js"></script>
    <script src="../../../api/jbsc-api.js"></script>
    <script src="../js/statistics.js"></script>
  </body>
</html>

+ 704 - 359
app/jbsc/html/view_screening_results.html

@ -1,362 +1,707 @@
<!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/bootstrap.min.css"/>
		<link rel="stylesheet" type="text/css" href="../../../css/cross.css"/>
		<link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
		<link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
		<style type="text/css">
			[v-cloak] {
			    display: none;
			}
			.flex-box{
			  display: -webkit-box;
			  display: -ms-flexbox;
			  display: flex;
			  -webkit-box-pack: center;
			      -ms-flex-pack: center;
			          justify-content: center;
			  -webkit-box-align: center;
			      -ms-flex-align: center;
			          align-items: center;
			}
			.flex-box-item{
			  -webkit-box-flex: 1;
			      -ms-flex: 1;
			          flex: 1;
			}
			p{word-break: break-all;}
			/*.question-content{max-height: 195px;overflow: auto;}*/
			.prompt-text{background-color: #ffa39e;color: #fff;font-size: 12px;text-align: center;line-height: 26px;}
			.single-choice-question{margin: 20px;padding: 0 20px;max-height: 540px;overflow-y: auto;border: 1px solid #d7dce6;border-radius: 10px;}
			.question-title{font-size: 16px;line-height: 40px;}
			.question-list,.daan-list{margin: 0;padding-left: 0;list-style: none;font-size: 14px;line-height: 1;}
			.question-list>li{border-top: 1px solid #d7dce6;padding: 10px 0;}
			.question-name{margin-bottom: 10px;}
			.daan-list>*{padding-left: 20px;line-height: 20px;height: 28px;}
			.daan-list input{opacity: 0;}
			.daan-list input[type="radio"]{width: 100%;height: 100%;opacity: 0;position: absolute;cursor: pointer;margin: 0;left: 0;right: 0;top: 0;bottom: 0;}
			.daan-list i{width: 20px;height: 20px;display: inline-block;vertical-align: middle;margin-right: 10px;background: url(../images/dianxuan_btn.png) center center / 100% 100% no-repeat;}
			.daan-list input[type="radio"]:checked ~ i{background-image: url(../images/dianxuan_pre.png);}
			.label-block{display: block;position: relative;cursor: pointer;}
			.label-block+.label-block{margin-top: 16px;}
			.label-block span,.calculation-score .pull-right{color: #ff9630;}
			.w-250{width: 250px;border: 1px solid #d7dce6;position: relative;border-top: 0;overflow: hidden;height: 605px;overflow: auto;}
			.f-16{font-size: 16px;}
			.mb20{margin-bottom: 20px!important;}
			.m20{margin: 20px;}
			.f16{font-size: 16px;}
			.base-info,.calculation-score,.btn-group-bottom,.assessment-report{padding: 17px;font-size: 14px;}
			.calculation-score p{margin-bottom: 5px;}
			.assessment-report p{margin-bottom: 0;}
			.canvas-box canvas{width: 100%;height: 100%;}
			.w-70{width: 70px;}
			.base-info .flex-box{margin-top: 20px;}
			.right-triangle{position: relative;background: url(../images/right-triangle.png) right center / auto 15px no-repeat;}
			.base-info .w-70{padding-right: 10px;text-align: justify;position: relative;text-align-last: justify;}
			.base-info .w-70:after{content: ':';position: absolute;right: 2px;top: 0;font-weight: bold;}
			.base-info input{height: 20px;padding: 0;text-align: center;width: 60px;margin: 0 5px;border-radius: 10px;border: 1px solid #d7dce6;}
			.progress-number{position: absolute;top: 50%;margin-top: -30px;text-align: center;left: 0;right: 0;}
			.progress-number>span{font-size: 14px;color: #12b7f5;}
			.clear-bottom{height: 91px;}
			.btn-group-bottom{padding: 40px 0 10px;position: fixed;right: 0;left: 0;bottom: 0;border-left: 1px solid #D7DCE6;background: #fff;border-top: 1px solid #D7DCE6;}
			.btn-group-bottom .btn{width: 100%;height: 40px;padding: 8px 12px;border-radius: 0;width: 90px;margin: 0 10px;}
			.warning-text .screen_result{color: #ff3b30;font-size: 12px;}
			.success-text .screen_result{color: #74bf00;font-size: 12px;}
			.score-box{height: 80px;padding-left: 120px;padding-top: 8px;background-size: auto 100%;background-repeat: no-repeat;background-position: 0 center;}
			.warning-text .score-box{color: #FF9630;background-image: url(../images/jiaofeishibai_icon.png);}
			.success-text .score-box{color: #74bf00;background-image: url(../images/jiaofeichengong_icon.png)}
			.score{font-size: 30px;}
			.score>small{font-size: 12px;}
			.orange-text{color: #ffa65b;}
			.answer-content,.advice-content{border: 1px solid #ececec;border-radius: 10px;padding: 10px 20px 5px;}
			.advice-content{padding: 0;}
			.advice-list{padding: 20px 20px 0;overflow: hidden;}
			.advice-list li{padding-left: 20px;line-height: 1;position: relative;list-style: none;margin-bottom: 20px;}
			.advice-list li:before{position: absolute;left: 0;top: 50%;margin-top: -6px;width: 12px;height: 12px;border-radius: 100%;background-color: #02cfb9;content: '';}
			.other-advice{border-top: 1px solid #ececec;line-height: 2;height: 90px;padding: 5px 20px;}
			.bgc-02cfb9{background-color: #02cfb9;color: #fff;}
			.bgc-12b7f5{background-color: #12b7f5;color: #fff;}
			.bgc-FF9630{background-color: #FF9630;color: #fff;}
			.bgc-2DBE55{background-color: #2DBE55;color: #fff;}
			.bgc-2DBE55.focus, .bgc-2DBE55:focus, .bgc-2DBE55:hover{color: #fff;background-color: #30a14f;}
			.bgc-FF9630.focus, .bgc-FF9630:focus, .bgc-FF9630:hover{color: #fff;background-color: #f58920;}
			.bgc-12b7f5.focus, .bgc-12b7f5:focus, .bgc-12b7f5:hover{color: #fff;background-color: #01a9bd;}
			.bgc-02cfb9.focus, .bgc-02cfb9:focus, .bgc-02cfb9:hover{color: #fff;background-color: #00bda8;}
		</style>
	</head>
	<body>
		<div id="app" v-cloak>
			<div class="m20 mb0" style="line-height: 1;">
				<div class="flex-box mb20">
					<div class="flex-box-item">筛查类型:<span v-text="userInfo.template_title"></span></div>
					<div class="flex-box-item">筛查人员:<span v-text="doctorInfo.name"></span></div>
				</div>
				<div class="flex-box mb20">
					<div class="flex-box-item">筛查对象:<span v-text="userInfo.patient_name+'('+(userInfo.sex==1?'男':'女')+(!userInfo.age?'<1':userInfo.age)+'岁)'"></span></div>
					<div class="flex-box-item">体征记录:<span v-if="!noTiZhong"><span v-text="tizhongRecord.value1+'kg'"></span>&nbsp;&nbsp;身高<span v-text="tizhongRecord.value2+'cm'"></span></span><span v-else>暂无体征</span></div>
				</div>
				<div class="flex-box">
					<div class="flex-box-item">处理情况:<span>{{dealAction}}</span></div>
					<div class="flex-box-item ui-grid"><div class="ui-col-0">筛查机构:</div><div class="ui-col-1" v-text="doctorInfo.hospitalName"></div></div>
				</div>
			</div>
			<div class="single-choice-question">
				<div class="question-title">问卷题目</div>
				<div class="question-content">
					<ul class="question-list" v-for="(qst,key,index) in answer">
						<li v-if="qst.option">
							<p class="question-name" v-html="key+'、'+qst.question.title"></p>
							<div class="daan-list" v-if="qst.question.questionType==0">
								<label class="label-block">
									<span class="pull-right" v-text="qst.option.score+'分'"  v-if="userInfo.isThird != 1 && userInfo.isThird !=2"></span>
									<input :type="qst.questionType==1?'checked':'radio'" readonly="readonly" :name="'ques'+index+(qst.questionType==1?'[]':'')" checked="checked" value="1" /><i></i><span v-text="qst.option.content"></span>											
								</label>
							</div>
							<div class="daan-list" v-else-if="qst.question.questionType==1">
								<label class="label-block" v-for="opt in qst.option">
									<span class="pull-right" v-text="opt.score+'分'"  v-if="userInfo.isThird != 1 && userInfo.isThird !=2"></span>
									<input :type="qst.questionType==1?'checked':'radio'" readonly="readonly" :name="'ques'+index+(qst.questionType==1?'[]':'')" checked="checked" value="1" /><i></i><span v-text="opt.content"></span>											
								</label>
							</div>
							<div class="daan-list" v-else>
								<textarea class="wenjuan-textarea" rows="2" v-model="qst.option.content"></textarea>
							</div>
						</li>
					</ul>
				</div>
			</div>
		
			<div class="base-info">
				<div :class="userInfo.is_danger?'warning-text':'success-text'">
					<div class="score-box">
						<p class="f-16 mb0" v-if="userInfo.isThird != 1 && userInfo.isThird !=2"><span class="c-333">评分 </span><span class="score"><span v-text="result.screen_result_score"></span><small> 分</small></span></p>
						<p class="screen_result" v-text="result.screen_result"></p>
					</div>
				</div>
			</div>
			<div class="calculation-score">
				<p class="f16 mb10">评估报告</p>
				<div class="answer-content">
					<p v-text="(result && result.advice) || userInfo.third_advice"></p>
				</div>
				
			</div>
			<div class="calculation-score" v-if="result.doctorOtherAdvice || result.doctorAdvice">
				<p class="f16 mb10">家庭医生的建议</p>
				<div class="advice-content">
					<div class="option-advice" v-if="result.doctorAdvice">
						<ul class="advice-list">
							<li v-for="advice in result.doctorAdvice" v-text="advice.advice || '无'"></li>
						</ul>
					</div>
					<div class="other-advice" v-if="result.doctorOtherAdvice">
						<p><span class="orange-text">补充建议:</span><span v-text="result.doctorOtherAdvice || '无'"></span></p>
					</div>
				</div>
				
			</div>
			<div class="clear-bottom" v-if="!isView || (userInfo.is_again==1 && userInfo.is_danger==1)">
				<div class="btn-group-bottom flex-box">
					<button class="btn bgc-2DBE55" @click="jkjy" v-if="result.doctorOtherAdvice || result.doctorAdvice">健康教育</button>
					<button class="btn bgc-FF9630" @click="jkzg" v-else>健康跟踪</button>
					<button class="btn bgc-12b7f5" v-if="userInfo.is_again&&(result.doctorOtherAdvice || result.doctorAdvice)" @click="reScreening">再次筛查</button>
					<button class="btn bgc-02cfb9" @click="referral">转诊</button>			
				</div>
			</div>
			<div class="clear-bottom" v-if="(userInfo.is_order>=1)">
				<div class="btn-group-bottom text-center">
					<p class="c-12b7f5">{{userInfo.is_order==1?'已预约':'已接诊'}}</p>
					<p v-if="(userInfo.is_order==2)">专科医生{{specialDoctorName}}已同意安排接诊</p>
				</div>
			</div>
		</div>
		<script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../plugins/toastr/toastr.min.js"></script>
		<script type="text/javascript" src="../../../api/jbsc-api.js" ></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">
			var httpData=GetRequest();
			var wlyyAgent=JSON.parse(window.localStorage.getItem('wlyyAgent'));
			var func_doctor=null,
			    func_hospital=null
			new Vue({
				el: "#app",
				data: {
					answer:[],//问卷
					userInfo:{is_again:0},//用户信息
					result:[],//结果
					tizhongRecord:[],
					specialDoctorName:'',
					noTiZhong:true,
					doctorInfo:{code:wlyyAgent.uid},
					resultCode:httpData['resultCode'],
					isView: httpData['isView']|| false,
					dealAction:[]
				},
				mounted: function(){
					this.getScreenResultDetail()
					this.getDoctorInfo()
				},
				methods: {
					getDoctorInfo:function(){
						var vm=this;
						var data={
							code:vm.doctorInfo.code
						}
						jbscAPI.doctorBaseinfo(data).then(function(res){
							if(res.status==200){
								vm.doctorInfo=res.data
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					jkjy:function(){
						var vm=this
						top.layer.open({
							type: 2,
							//				  offset: ['100px'], //右下角弹出
							area: ['80%', '648px'],
							shade: 0.5,
							title: '健康教育',
							fixed: true, //不固定
							maxmin: true,
							closeBtn: 1,
							shift: 5,
							shadeClose: false, //点击遮罩关闭层
							content: "../../article/html/article.html?code="+this.userInfo.patient_code+'&resultCode='+vm.resultCode
						});
				  	},
				  	jkzg:function(){
						var vm=this
						var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
						top.layer.open({
						  type: 2,
						  area: ['500px', '550px'],
						  shade: 0.5,
						  title: '家医建议',
						  fixed: true, //不固定
						  maxmin: false,
						  closeBtn:1,
						  shift: 5,
						  shadeClose: false, //点击遮罩关闭层
						  content: '../../jbsc/html/advice.html?parentIframe='+index+'&resultCode='+vm.resultCode+'&filter_code='+vm.userInfo.template_code
						});
				  	},
					getScreenResultDetail:function(){
						var vm=this;
						var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
						var data={
							code: vm.resultCode
						}
						jbscAPI.getScreenResultDetail(data).then(function(res){
							top.layer.close(loadding);
							if(res.status==200){
								var data=res.data;
								data && (vm.answer=data.answer,vm.userInfo=data.info,vm.result=data.result);
								data && data.info && data.info.code && vm.getHealth();
								data && (vm.specialDoctorName = data.specialDoctorName);
								var userInfo = data.info || []
								if((userInfo.isDanger==1 || userInfo.is_danger==1) && ( userInfo.isAgain==1 || userInfo.is_again==1)){
						           //只有高危的筛查需要处理
						            if(userInfo.following == 1){
						                vm.dealAction.push("已跟踪");
						            }
						            if(userInfo.isOrder == 1 || userInfo.is_order == 1){
						                vm.dealAction.push("已预约");
						            }
						            if(userInfo.isOrder == 2 || userInfo.is_order == 2){
						                vm.dealAction.push("已接诊");
						            }
						            if(userInfo.following==0 && (userInfo.isOrder==0 || userInfo.is_order==0)){
						                vm.dealAction.push("待处理");
									}
									if(userInfo.isDanger==0 || userInfo.is_danger==0){
										vm.dealAction.push("日常健康管理");
									}
						        }else{
									vm.dealAction.push("");
						        }
						        vm.dealAction=vm.dealAction.join(',');
						        if(data.info.third_source && data.info.third_source!=4){
						        	for(let i in vm.answer){
						        		if(vm.answer[i].question.title=='评估医生:'){
						        			if(vm.answer[i].option){
				                               jbscAPI.getDoctorInfoByJwDoctor({jwDoctor:data.answer[i].option.content}).then(function(res1){
				                             		if(res.status == 200){
				                                        vm.answer[i].option.content=res1.data.jwDoctorName
				                                    }
				                                })
				                            }
						        		} else if(vm.answer[i].question.title=='评估机构:'){
						        			if(vm.answer[i].option){
				                               jbscAPI.getHospitalInfoByMappingId({mappingId:vm.answer[i].option.content}).then(function(res1){
				                                   	if(res.status == 200){
				                                        vm.answer[i].option.content=res1.data.name
				                                    }
				                                })
				                            }
						        		}
						        	}
						        }else{    
						        }
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					getHealth:function(){
						var vm=this;
						var data={
							patient: vm.userInfo.patient_code
						}
						jbscAPI.getHealth(data).then(function(res){
							if(res.status == 200) {
								vm.tizhongRecord = _.find(res.data,function(o) {
									return o.type =="3";
								}) || {};
							} else {
								top.layer.msg(res.msg, {icon: 5});
							}
		    				(JSON.stringify(vm.tizhongRecord)!=='{}') && (vm.noTiZhong=false);
					    })
					},
					referral:function(){
						top.layer.msg("PC上暂不支持,请打开手机端疑似高危记录进行转诊预约",{icon:5});
					},
					reScreening:function(){//再次筛查
						var vm=this
			    		top.layer.open({
						  type: 2,
		//				  offset: ['100px'], //右下角弹出
						  area: ['820px', '648px'],
						  shade: 0.5,
						  title: '筛选统计',
						  fixed: true, //不固定
						  maxmin: true,
						  closeBtn:1,
						  shift: 5,
						  shadeClose: false, //点击遮罩关闭层
						  content: 'questionnaire.html?isAgain=1&fliter_title='+vm.userInfo.template_title+'&fliter_code='+vm.userInfo.template_code+'&resident_code='+vm.userInfo.patient_code+'&resident_name='+vm.userInfo.patient_name
						});
						var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
						top.layer.close(index); //再执行关闭
		    		},
				},
			})
		</script>
	</body>
  <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/bootstrap.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element-ui.css" />
    <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet" />
    <style type="text/css">
      [v-cloak] {
        display: none;
      }
      .flex-box {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-pack: center;
        -ms-flex-pack: center;
        justify-content: center;
        -webkit-box-align: center;
        -ms-flex-align: center;
        align-items: center;
      }
      .flex-box-item {
        -webkit-box-flex: 1;
        -ms-flex: 1;
        flex: 1;
      }
      p {
        word-break: break-all;
      }
      /*.question-content{max-height: 195px;overflow: auto;}*/
      .prompt-text {
        background-color: #ffa39e;
        color: #fff;
        font-size: 12px;
        text-align: center;
        line-height: 26px;
      }
      .single-choice-question {
        margin: 20px;
        padding: 0 20px;
        max-height: 540px;
        overflow-y: auto;
        border: 1px solid #d7dce6;
        border-radius: 10px;
      }
      .question-title {
        font-size: 16px;
        line-height: 40px;
      }
      .question-list,
      .daan-list {
        margin: 0;
        padding-left: 0;
        list-style: none;
        font-size: 14px;
        line-height: 1;
      }
      .question-list > li {
        border-top: 1px solid #d7dce6;
        padding: 10px 0;
      }
      .question-name {
        margin-bottom: 10px;
      }
      .daan-list > * {
        padding-left: 20px;
        line-height: 20px;
        height: 28px;
      }
      .daan-list input {
        opacity: 0;
      }
      .daan-list input[type='radio'] {
        width: 100%;
        height: 100%;
        opacity: 0;
        position: absolute;
        cursor: pointer;
        margin: 0;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
      }
      .daan-list i {
        width: 20px;
        height: 20px;
        display: inline-block;
        vertical-align: middle;
        margin-right: 10px;
        background: url(../images/dianxuan_btn.png) center center / 100% 100% no-repeat;
      }
      .daan-list input[type='radio']:checked ~ i {
        background-image: url(../images/dianxuan_pre.png);
      }
      .label-block {
        display: block;
        position: relative;
        cursor: pointer;
      }
      .label-block + .label-block {
        margin-top: 16px;
      }
      .label-block span,
      .calculation-score .pull-right {
        color: #ff9630;
      }
      .w-250 {
        width: 250px;
        border: 1px solid #d7dce6;
        position: relative;
        border-top: 0;
        overflow: hidden;
        height: 605px;
        overflow: auto;
      }
      .f-16 {
        font-size: 16px;
      }
      .mb20 {
        margin-bottom: 20px !important;
      }
      .m20 {
        margin: 20px;
      }
      .f16 {
        font-size: 16px;
      }
      .base-info,
      .calculation-score,
      .btn-group-bottom,
      .assessment-report {
        padding: 17px;
        font-size: 14px;
      }
      .calculation-score p {
        margin-bottom: 5px;
      }
      .assessment-report p {
        margin-bottom: 0;
      }
      .canvas-box canvas {
        width: 100%;
        height: 100%;
      }
      .w-70 {
        width: 70px;
      }
      .base-info .flex-box {
        margin-top: 20px;
      }
      .right-triangle {
        position: relative;
        background: url(../images/right-triangle.png) right center / auto 15px no-repeat;
      }
      .base-info .w-70 {
        padding-right: 10px;
        text-align: justify;
        position: relative;
        text-align-last: justify;
      }
      .base-info .w-70:after {
        content: ':';
        position: absolute;
        right: 2px;
        top: 0;
        font-weight: bold;
      }
      .base-info input {
        height: 20px;
        padding: 0;
        text-align: center;
        width: 60px;
        margin: 0 5px;
        border-radius: 10px;
        border: 1px solid #d7dce6;
      }
      .progress-number {
        position: absolute;
        top: 50%;
        margin-top: -30px;
        text-align: center;
        left: 0;
        right: 0;
      }
      .progress-number > span {
        font-size: 14px;
        color: #12b7f5;
      }
      .clear-bottom {
        height: 91px;
      }
      .btn-group-bottom {
        padding: 40px 0 10px;
        position: fixed;
        right: 0;
        left: 0;
        bottom: 0;
        border-left: 1px solid #d7dce6;
        background: #fff;
        border-top: 1px solid #d7dce6;
      }
      .btn-group-bottom .btn {
        width: 100%;
        height: 40px;
        padding: 8px 12px;
        border-radius: 0;
        width: 90px;
        margin: 0 10px;
      }
      .warning-text .screen_result {
        color: #ff3b30;
        font-size: 12px;
      }
      .success-text .screen_result {
        color: #74bf00;
        font-size: 12px;
      }
      .score-box {
        height: 80px;
        padding-left: 120px;
        padding-top: 8px;
        background-size: auto 100%;
        background-repeat: no-repeat;
        background-position: 0 center;
      }
      .warning-text .score-box {
        color: #ff9630;
        background-image: url(../images/jiaofeishibai_icon.png);
      }
      .success-text .score-box {
        color: #74bf00;
        background-image: url(../images/jiaofeichengong_icon.png);
      }
      .score {
        font-size: 30px;
      }
      .score > small {
        font-size: 12px;
      }
      .orange-text {
        color: #ffa65b;
      }
      .answer-content,
      .advice-content {
        border: 1px solid #ececec;
        border-radius: 10px;
        padding: 10px 20px 5px;
      }
      .advice-content {
        padding: 0;
      }
      .advice-list {
        padding: 20px 20px 0;
        overflow: hidden;
      }
      .advice-list li {
        padding-left: 20px;
        line-height: 1;
        position: relative;
        list-style: none;
        margin-bottom: 20px;
      }
      .advice-list li:before {
        position: absolute;
        left: 0;
        top: 50%;
        margin-top: -6px;
        width: 12px;
        height: 12px;
        border-radius: 100%;
        background-color: #02cfb9;
        content: '';
      }
      .other-advice {
        border-top: 1px solid #ececec;
        line-height: 2;
        height: 90px;
        padding: 5px 20px;
      }
      .bgc-02cfb9 {
        background-color: #02cfb9;
        color: #fff;
      }
      .bgc-12b7f5 {
        background-color: #12b7f5;
        color: #fff;
      }
      .bgc-FF9630 {
        background-color: #ff9630;
        color: #fff;
      }
      .bgc-2DBE55 {
        background-color: #2dbe55;
        color: #fff;
      }
      .bgc-2DBE55.focus,
      .bgc-2DBE55:focus,
      .bgc-2DBE55:hover {
        color: #fff;
        background-color: #30a14f;
      }
      .bgc-FF9630.focus,
      .bgc-FF9630:focus,
      .bgc-FF9630:hover {
        color: #fff;
        background-color: #f58920;
      }
      .bgc-12b7f5.focus,
      .bgc-12b7f5:focus,
      .bgc-12b7f5:hover {
        color: #fff;
        background-color: #01a9bd;
      }
      .bgc-02cfb9.focus,
      .bgc-02cfb9:focus,
      .bgc-02cfb9:hover {
        color: #fff;
        background-color: #00bda8;
      }
    </style>
  </head>
  <body>
    <div id="app" v-cloak>
      <div class="m20 mb0" style="line-height: 1">
        <div class="flex-box mb20">
          <div class="flex-box-item">
            筛查类型:
            <span v-text="userInfo.template_title"></span>
          </div>
          <div class="flex-box-item">
            筛查人员:
            <span v-text="doctorInfo.name"></span>
          </div>
        </div>
        <div class="flex-box mb20">
          <div class="flex-box-item">
            筛查对象:
            <span
              v-text="userInfo.patient_name+'('+(userInfo.sex==1?'男':'女')+(!userInfo.age?'<1':userInfo.age)+'岁)'"></span>
          </div>
          <div class="flex-box-item">
            体征记录:
            <span v-if="!noTiZhong">
              <span v-text="tizhongRecord.value1+'kg'"></span>
              &nbsp;&nbsp;身高
              <span v-text="tizhongRecord.value2+'cm'"></span>
            </span>
            <span v-else>暂无体征</span>
          </div>
        </div>
        <div class="flex-box">
          <div class="flex-box-item">
            处理情况:
            <span>{{dealAction}}</span>
          </div>
          <div class="flex-box-item ui-grid">
            <div class="ui-col-0">筛查机构:</div>
            <div class="ui-col-1" v-text="doctorInfo.hospitalName"></div>
          </div>
        </div>
      </div>
      <div class="single-choice-question">
        <div class="question-title">问卷题目</div>
        <div class="question-content">
          <ul class="question-list" v-for="(qst,key,index) in answer">
            <li v-if="qst.option">
              <p class="question-name" v-html="key+'、'+qst.question.title"></p>
              <div class="daan-list" v-if="qst.question.questionType==0">
                <label class="label-block">
                  <span
                    class="pull-right"
                    v-text="qst.option.score+'分'"
                    v-if="userInfo.isThird != 1 && userInfo.isThird !=2"></span>
                  <input
                    :type="qst.questionType==1?'checked':'radio'"
                    readonly="readonly"
                    :name="'ques'+index+(qst.questionType==1?'[]':'')"
                    checked="checked"
                    value="1" />
                  <i></i>
                  <span v-text="qst.option.content"></span>
                </label>
              </div>
              <div class="daan-list" v-else-if="qst.question.questionType==1">
                <label class="label-block" v-for="opt in qst.option">
                  <span
                    class="pull-right"
                    v-text="opt.score+'分'"
                    v-if="userInfo.isThird != 1 && userInfo.isThird !=2"></span>
                  <input
                    :type="qst.questionType==1?'checked':'radio'"
                    readonly="readonly"
                    :name="'ques'+index+(qst.questionType==1?'[]':'')"
                    checked="checked"
                    value="1" />
                  <i></i>
                  <span v-text="opt.content"></span>
                </label>
              </div>
              <div class="daan-list" v-else>
                <textarea class="wenjuan-textarea" rows="2" v-model="qst.option.content"></textarea>
              </div>
            </li>
          </ul>
        </div>
      </div>
      <div class="base-info">
        <div :class="userInfo.is_danger?'warning-text':'success-text'">
          <div class="score-box">
            <!-- 冠心病 评分改为文字提示-并删除评估报告-->
            <p class="f-16 mb0" v-if="userInfo.isThird != 1 && userInfo.isThird !=2">
              <span class="c-333">评分</span>
              <span class="score">
                <span v-text="result.screen_result_score"></span>
                <small>分</small>
              </span>
            </p>
            <p class="screen_result" v-text="result.screen_result"></p>
          </div>
        </div>
      </div>
      <div class="calculation-score">
        <p class="f16 mb10">评估报告</p>
        <div class="answer-content">
          <p v-text="(result && result.advice) || userInfo.third_advice"></p>
        </div>
      </div>
      <div class="calculation-score" v-if="result.doctorOtherAdvice || result.doctorAdvice">
        <p class="f16 mb10">家庭医生的建议</p>
        <div class="advice-content">
          <div class="option-advice" v-if="result.doctorAdvice">
            <ul class="advice-list">
              <li v-for="advice in result.doctorAdvice" v-text="advice.advice || '无'"></li>
            </ul>
          </div>
          <div class="other-advice" v-if="result.doctorOtherAdvice">
            <p>
              <span class="orange-text">补充建议:</span>
              <span v-text="result.doctorOtherAdvice || '无'"></span>
            </p>
          </div>
        </div>
      </div>
      <div class="clear-bottom" v-if="!isView || (userInfo.is_again==1 && userInfo.is_danger==1)">
        <div class="btn-group-bottom flex-box">
          <button class="btn bgc-2DBE55" @click="jkjy" v-if="result.doctorOtherAdvice || result.doctorAdvice">
            健康教育
          </button>
          <button class="btn bgc-FF9630" @click="sqsf" v-else-if="userInfo.disease==3">社区随访</button>
          <button class="btn bgc-FF9630" @click="jkzg" v-else>健康跟踪</button>
          <button
            class="btn bgc-12b7f5"
            v-if="userInfo.is_again&&(result.doctorOtherAdvice || result.doctorAdvice)"
            @click="reScreening">
            再次筛查
          </button>
          <button class="btn bgc-02cfb9" @click="referral">转诊</button>
        </div>
      </div>
      <div class="clear-bottom" v-if="(userInfo.is_order>=1)">
        <div class="btn-group-bottom text-center">
          <p class="c-12b7f5">{{userInfo.is_order==1?'已预约':'已接诊'}}</p>
          <p v-if="(userInfo.is_order==2)">专科医生{{specialDoctorName}}已同意安排接诊</p>
        </div>
      </div>
      <el-dialog title="提示" :visible.sync="centerDialogVisible" width="65%" center>
        <span>是否纳入本社区随访</span>
        <span slot="footer" class="dialog-footer">
          <el-button @click="centerDialogVisible = false">取 消</el-button>
          <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
        </span>
      </el-dialog>
    </div>
    <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/element-ui.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../plugins/toastr/toastr.min.js"></script>
    <script type="text/javascript" src="../../../api/jbsc-api.js"></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">
      var httpData = GetRequest()
      var wlyyAgent = JSON.parse(window.localStorage.getItem('wlyyAgent'))
      var func_doctor = null,
        func_hospital = null
      new Vue({
        el: '#app',
        data: {
          centerDialogVisible: false,
          answer: [], //问卷
          userInfo: { is_again: 0 }, //用户信息
          result: [], //结果
          tizhongRecord: [],
          specialDoctorName: '',
          noTiZhong: true,
          doctorInfo: { code: wlyyAgent.uid },
          resultCode: httpData['resultCode'],
          isView: httpData['isView'] || false,
          dealAction: []
        },
        mounted: function () {
          this.getScreenResultDetail()
          this.getDoctorInfo()
        },
        methods: {
          getDoctorInfo: function () {
            var vm = this
            var data = {
              code: vm.doctorInfo.code
            }
            jbscAPI.doctorBaseinfo(data).then(function (res) {
              if (res.status == 200) {
                vm.doctorInfo = res.data
              } else {
                top.layer.msg(res.msg, { icon: 5 })
              }
            })
          },
          jkjy: function () {
            var vm = this
            top.layer.open({
              type: 2,
              //				  offset: ['100px'], //右下角弹出
              area: ['80%', '648px'],
              shade: 0.5,
              title: '健康教育',
              fixed: true, //不固定
              maxmin: true,
              closeBtn: 1,
              shift: 5,
              shadeClose: false, //点击遮罩关闭层
              content:
                '../../article/html/article.html?code=' + this.userInfo.patient_code + '&resultCode=' + vm.resultCode
            })
          },
          jkzg: function () {
            var vm = this
            var index = top.layer.getFrameIndex(window.name) //先得到当前iframe层的索引
            top.layer.open({
              type: 2,
              area: ['500px', '550px'],
              shade: 0.5,
              title: '家医建议',
              fixed: true, //不固定
              maxmin: false,
              closeBtn: 1,
              shift: 5,
              shadeClose: false, //点击遮罩关闭层
              content:
                '../../jbsc/html/advice.html?parentIframe=' +
                index +
                '&resultCode=' +
                vm.resultCode +
                '&filter_code=' +
                vm.userInfo.template_code
            })
          },
          sqsf: function () {
            var vm = this
            vm.centerDialogVisible = true
          },
          getScreenResultDetail: function () {
            var vm = this
            var loadding = top.layer.load(0, { shade: false }) //0代表加载的风格,支持0-2
            var data = {
              code: vm.resultCode
            }
            jbscAPI.getScreenResultDetail(data).then(function (res) {
              top.layer.close(loadding)
              if (res.status == 200) {
                var data = res.data
                console.log('ressaaaaaaaaaaaaaaaaaaa', res.data)
                data && ((vm.answer = data.answer), (vm.userInfo = data.info), (vm.result = data.result))
                data && data.info && data.info.code && vm.getHealth()
                data && (vm.specialDoctorName = data.specialDoctorName)
                var userInfo = data.info || []
                if (
                  (userInfo.isDanger == 1 || userInfo.is_danger == 1) &&
                  (userInfo.isAgain == 1 || userInfo.is_again == 1)
                ) {
                  //只有高危的筛查需要处理
                  if (userInfo.following == 1) {
                    vm.dealAction.push('已跟踪')
                  }
                  if (userInfo.isOrder == 1 || userInfo.is_order == 1) {
                    vm.dealAction.push('已预约')
                  }
                  if (userInfo.isOrder == 2 || userInfo.is_order == 2) {
                    vm.dealAction.push('已接诊')
                  }
                  if (userInfo.following == 0 && (userInfo.isOrder == 0 || userInfo.is_order == 0)) {
                    vm.dealAction.push('待处理')
                  }
                  if (userInfo.isDanger == 0 || userInfo.is_danger == 0) {
                    vm.dealAction.push('日常健康管理')
                  }
                } else {
                  vm.dealAction.push('')
                }
                vm.dealAction = vm.dealAction.join(',')
                if (data.info.third_source && data.info.third_source != 4) {
                  for (let i in vm.answer) {
                    if (vm.answer[i].question.title == '评估医生:') {
                      if (vm.answer[i].option) {
                        jbscAPI
                          .getDoctorInfoByJwDoctor({ jwDoctor: data.answer[i].option.content })
                          .then(function (res1) {
                            if (res.status == 200) {
                              vm.answer[i].option.content = res1.data.jwDoctorName
                            }
                          })
                      }
                    } else if (vm.answer[i].question.title == '评估机构:') {
                      if (vm.answer[i].option) {
                        jbscAPI
                          .getHospitalInfoByMappingId({ mappingId: vm.answer[i].option.content })
                          .then(function (res1) {
                            if (res.status == 200) {
                              vm.answer[i].option.content = res1.data.name
                            }
                          })
                      }
                    }
                  }
                } else {
                }
              } else {
                top.layer.msg(res.msg, { icon: 5 })
              }
            })
          },
          getHealth: function () {
            var vm = this
            var data = {
              patient: vm.userInfo.patient_code
            }
            jbscAPI.getHealth(data).then(function (res) {
              if (res.status == 200) {
                vm.tizhongRecord =
                  _.find(res.data, function (o) {
                    return o.type == '3'
                  }) || {}
              } else {
                top.layer.msg(res.msg, { icon: 5 })
              }
              JSON.stringify(vm.tizhongRecord) !== '{}' && (vm.noTiZhong = false)
            })
          },
          referral: function () {
            // top.layer.msg('PC上暂不支持,请打开手机端疑似高危记录进行转诊预约', { icon: 5 })
            var vm = this
            var patient = vm.userInfo.patient_code,
              callCode = ''
            top.layer.open({
              type: 2,
              closeBtn: 1, // 显示关闭按钮
              area: ['800px', '90%'],
              title: '预约挂号',
              content: '../../jbsc/html/appointment/appoint-select.html?patient=' + patient + '&callCode=' + callCode
            })
          },
          reScreening: function () {
            //再次筛查
            var vm = this
            top.layer.open({
              type: 2,
              //				  offset: ['100px'], //右下角弹出
              area: ['820px', '648px'],
              shade: 0.5,
              title: '筛选统计',
              fixed: true, //不固定
              maxmin: true,
              closeBtn: 1,
              shift: 5,
              shadeClose: false, //点击遮罩关闭层
              content:
                'questionnaire.html?isAgain=1&fliter_title=' +
                vm.userInfo.template_title +
                '&fliter_code=' +
                vm.userInfo.template_code +
                '&resident_code=' +
                vm.userInfo.patient_code +
                '&resident_name=' +
                vm.userInfo.patient_name
            })
            var index = top.layer.getFrameIndex(window.name) //先得到当前iframe层的索引
            top.layer.close(index) //再执行关闭
          }
        }
      })
    </script>
  </body>
</html>

BIN
app/jbsc/images/search.png


+ 563 - 0
app/jbsc/js/api-service.js

@ -0,0 +1,563 @@
(function($){
	$.support.cors = true
	var platform = 4
	var agentName = "userAgent"
	
	var isProduction = false// 是否是正式环境
	var imgUrlDomain, server, serverWlyy,healthRecordServer
	
    healthRecordServer="http://www.xmtyw.cn/wlyy/profileweb/#/"  //健康档案服务
    healthRecordServer="https://www.xmtyw.cn/wlyytest/profileweb/#/"  //健康档案服务wlyytest
	  
	if(isProduction)  {
		server = "http://www.xmtyw.cn/wlyy"; //正式环境
		imgUrlDomain = "http://www.xmtyw.cn/"; //正式环境
		serverWlyy = "http://www.xmtyw.cn/wlyy"
	} else {
		 server = "https://www.xmtyw.cn/wlyytest"//测试
		//  server = "http://192.168.131.243:8180"//培强
//       server = "http://192.168.131.123:8180/wlyy_manager" // 文杰
//       server = "http://192.168.131.144:8180/wlyy_manager" // 冬梅
    //   server = "http://192.168.131.112:8180/wlyy_manager" // 志南
		serverWlyy = "https://www.xmtyw.cn/wlyytest"//测试
//		serverWlyy = "http://192.168.131.105:8080"//兴旺
		// serverWlyy = "http://192.168.131.243:8180"//培强
//      serverWlyy = "http://192.168.131.144:8080"//冬梅
//		serverWlyy = "http://192.168.131.143:8080"//冬梅
		imgUrlDomain = "http://www.xmtyw.cn/"; // 测试环境
//		healthRecordServer="http://192.168.131.29:8080/#/"  //泽华
	}
	
	function httpGet(url,options) {
		//发送ajax请求
		return new Promise(function(resolve, reject) {
			$.ajax(server + url, 
				$.extend({},{
				type: 'GET',
				dataType: 'JSON',
				beforeSend: function(request) {
					var storage = window.localStorage.getItem("app_storage")
					if(storage){
						storage = JSON.parse(storage)
					} 
					
					if(storage){
						loginDoctorCache = storage.api_login_doctor || {}
						let userAgentObj = {
							'id': loginDoctorCache.id,
							'uid': loginDoctorCache.uid,
							'imei': storage.IMEI,
							'token': loginDoctorCache.token,
							'platform': platform 
						}
						request.setRequestHeader(agentName, JSON.stringify(userAgentObj));
					}
					// var userAgent = window.sessionStorage.getItem("LoginUser");
					// if(userAgent) {
					// 	userAgent = JSON.parse(userAgent)
					// 	request.setRequestHeader(agentName, JSON.stringify({
	                //     	"id":userAgent.id,"uid":userAgent.code,"mobile":userAgent.mobile
	                //     }));
					// }
				},
				error: function(res) {
					reject(res)
				},
				success: function(res) {
					if(res.status && res.status == -200) {
            			toastr && toastr.warning("登录失效,请重新登录!")
            			setTimeout(function() {
            				window.location.replace('login_v2.html')
            			},2000)
            			return ;
            		} else {
						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 storage = window.localStorage.getItem("app_storage")
					if(storage){
						storage = JSON.parse(storage)
					} 
					
					if(storage){
						loginDoctorCache = storage.api_login_doctor || {}
						let userAgentObj = {
							'id': loginDoctorCache.id,
							'uid': loginDoctorCache.uid,
							'imei': storage.IMEI,
							'token': loginDoctorCache.token,
							'platform': platform 
						}
						request.setRequestHeader(agentName, JSON.stringify(userAgentObj));
					}
					
					// var userAgent = window.sessionStorage.getItem("LoginUser");
                    // if(userAgent) {
					// 	userAgent = JSON.parse(userAgent)
					// 	request.setRequestHeader(agentName, JSON.stringify({
	                //     	"id":userAgent.id,"uid":userAgent.code,"mobile":userAgent.mobile
	                //     }));
					// }
				},
				error: function(res) {
					reject(res)
				},
				success: function(res) {
					if(res.status && res.status == -200) {
            			toastr && toastr.warning("登录失效,请重新登录!")
            			setTimeout(function() {
            				window.location.replace('login_v2.html')
            			},2000)
            			return ;
            		} else {
						resolve(res)
					}
					
				}
			},options));
		})
	}
	function httpGetWlyy(url,options) {
		//发送ajax请求
		var newserver=serverWlyy?serverWlyy:server
		return new Promise(function(resolve, reject) {
			$.ajax(newserver + url, 
				$.extend({},{
				type: 'GET',
				dataType: 'JSON',
				beforeSend: function(request) {
					var userAgent = window.sessionStorage.getItem("LoginUser");
					if(userAgent) {
						userAgent = JSON.parse(userAgent)
						request.setRequestHeader(agentName, JSON.stringify({
	                    	"id":userAgent.id,"uid":userAgent.code,"mobile":userAgent.mobile
	                    }));
					}
				},
				error: function(res) {
					reject(res)
				},
				success: function(res) {
					if(res.status && res.status == -200) {
            			toastr && toastr.warning("登录失效,请重新登录!")
            			setTimeout(function() {
            				window.location.replace('login_v2.html')
            			},2000)
            			return ;
            		} else {
						resolve(res)
					}
				}
			},options));
		})
	}
	
	APIService = {
		server: server,
		serverWlyy: serverWlyy,
		imgUrlDomain: imgUrlDomain,
		agentName: agentName,
		httpGet:httpGet,
		httpPost:httpPost,
		httpGetWlyy:httpGetWlyy,
		healthRecordServer:healthRecordServer,
		login: function(data) {
			return httpPost('/customer/login',{data: data})
		},
		logout: function() {
			return httpGet('/customer/logout')
		},
		findServerInfo: function(data) {
			return httpGet('/customer/findServerInfo',{data: data})
		},
		findByMobile: function(data) {
			return httpGet('/customer/findByMobile',{data: data})
		},
		// findByPatient: function(data) {
		// 	return httpGet('/customer/findByPatient',{data: data})
		// },
		findByPatient: function(data) {
			return httpPost('/doctor/patient_label_info/patient',{data: data})
		},
		captchaWithDoctor: function(doctorCode, data) {
			return httpPost('/doctor/captcha/withDoctorCode/'+ doctorCode,{data: data})
		},
		
		sendMsgAndWx: function(data) {
			return httpPost('/customer/sendMsg', {data: data})
		},
		addCallRecord: function(data) {
			return httpPost('/customer/addCallRecord', {data: data})
		},
		updateCallRecordService: function(data) {
			return httpPost('/customer/updateCallRecordService', {data: data})
		},
		updateCallRecordEndTime: function(data) {
			return httpPost('/customer/updateCallRecordEndTime', {data: data})
		},
		getCallRecords: function(data) {
			return httpPost('/customer/getCallRecords', {data: data})
		},
		getCallServiceCode: function(data) {
			return httpPost('/customer/getCallServiceCode', {data: data})
		},
		saveCallService: function(data) {
			return httpPost('/customer/saveCallService', {data: data})
		},
		getCallRecordInfo: function(data) {
			return httpPost('/customer/getCallRecordInfo', {data: data})
		},
		getCallServices: function(data) {
			return httpPost('/customer/getCallServices', {data: data})
		},
		getCallServiceInfo: function(data) {
			return httpPost('/customer/getCallServiceInfo', {data: data})
		},
		updateCallService: function(data) {
			return httpPost('/customer/updateCallService', {data: data})
		},
		delCallService: function(data) {
			return httpPost('/customer/delCallService', {data: data})
		},
		getOrgList: function(data) {
			return httpPost('/doctor/guahao/GetOrgListToMysql', {data: data})
		},
		getOrgDeptList: function(data) {
			return httpPost('/doctor/guahao/GetOrgDepListToMysql', {data: data})
		},
		cancelOrder: function(data) {
			return httpPost('/doctor/guahao/CancelOrder', {data: data})
		},
		createOrderByDoctor: function(data) {
			return httpPost('/doctor/guahao/CreateOrderByDoctor', {data: data})
		},
		regDeptSpeDoctorList: function(data) {
			return httpPost('/doctor/guahao/GetDoctorList', {data: data})
		},
		
		// regDeptSpeDoctorList: function(data) {
		// 	return httpGet('/doctor/guahao/RegDeptSpeDoctorList', {data: data})
		// },
		getDoctorInfo: function(data) {
			return httpPost('/doctor/guahao/GetDoctorInfo', {data: data})
		},
		// getDoctorArrange: function(data) {
		// 	return httpGet('/doctor/guahao/GetDoctorArrange', {data: data})
		// },
		getDoctorArrange: function(data) {
			return httpPost('/doctor/guahao/smjk/RegDeptSpeDoctorSectionList', {data: data})
		},
		doPostReturn: function(data) {
			return httpGet('/doctor/guahao/doPostReturn', {data: data})
		},
		getRegList: function(data) {
			return httpGet('/doctor/guahao/GetRegList', {data: data})
		},
		getPatientReservation: function(data) {
			return httpGet('/doctor/guahao/GetPatientReservation', {data: data})
		},
		//获取通话服务详情
		getCallInfo: function(data){
		    return httpGet("/synergy/customer/getCallInfo", {data: data})
		},
		//获取通话统计详情
		total: function(data){
		    return httpPost("/callRecordStatics/total", {data: data})
		},
		//保存通话服务记录详情
		saveCallServiceInfo: function(data){
		    return httpPost("/synergy/customer/saveCallInfo", {data: data})
		},
		//保存详情里面的跟进状态
		saveFollowUp:function(data){
			return httpPost('/customer/updateFollowUpById',{data:data})
		},
		//获取电话服务标签
		getCallLables: function(){
		    return httpGet("/synergy/customer/getCallLabelList")
		},
		//保存通话标签
		saveCallLabels: function(data){
		    return httpPost("/synergy/customer/saveCallLabel", {data: data})
		},
		//获取通话详情里的代办事项
		getDealList: function(data){
		    return httpGet("/synergy/customer/getDealList", {data: data})
		},
		getWorkOrderInfo:function(data){
			return httpGet('/synergy/customer/getWorkOrderInfo', {data: data})
		},
		unitLabels: function(data) {
			return httpGet('/synergy/customer/unitLabels', {data: data})
		},
		getQuestionnaireDetail: function(data) {
			return httpGet('/customer/question/getQuestionnaireDetail', {data: data})
		},
		getQuestions: function(data) {
			return httpGet('/customer/screen/getQuestions', {data: data})
		},
		labels: function(data) {
			return httpGet('/synergy/customer/labels', {data: data})
		},
		loadingInfo: function(data) {
			return httpGet('/customer/question/loadingInfo', {data: data})
		},
		workorderRate: function(data) {
			return httpGet('/synergy/customer/workorderRate', {data: data})
		},
		takeWorkorderNum: function(data) {
			return httpGet('/synergy/customer/takeWorkorderNum', {data: data})
		},
		createServicerLog: function(data) {
			return httpPost('/synergy/customer/createServicerLog', {data: data})
		},
		addFollowup:function(data){
			return httpPost('/synergy/customer/addFollowup', {data: data})
		},
		saveFollowupProjectData:function(data){
			return httpPost('/synergy/customer/saveFollowupProjectData', {data: data})
		},
		saveFollowupDrugs:function(data){
			return httpPost('/synergy/customer/saveFollowupDrugs', {data: data})
		},
		reminderList:function(data){
			return httpGet('/synergy/customer/reminderList', {data: data})
		},
		findByPatient2:function(data){
			return httpPost('/synergy/customer/findByPatient', {data: data})
		},
		getFollowupProjectData:function(data){
			return httpGet('/synergy/customer/getFollowupProjectData', {data: data})
		},
    	//获取客服人员列表
		getCustomerList: function(){
		    return httpGet("/synergy/customer/getCustomers");
		},
		//接收和退回协同服务任务
		dealWorkOrder: function(data){
		    return httpPost('/synergy/customer/dealWorkOrder', {data: data});
		},
		// 批量接收协同服务任务
		batchDealWorkOrder: function(data){
		    return httpPost('/synergy/customer/batchDealWorkOrder', {data: data});
		},
		//上传文件
		uploadFile: function(data){
		    return httpPost('/synergy/customer/uploadAccessory', {data: data,contentType: false,cache: false,processData: false})
		},
		//删除文件
		deleteFile: function(data){
		    return httpPost('/synergy/customer/deleteFile', {data: data});
		},
		//提交任务
		taskSubmit: function(data){
		    return httpPost("/synergy/customer/taskSubmit", {data: data})
		},
		getScreenResultDetail: function(data) {
			return httpGet('/customer/screen/getScreenResultDetail', {data: data})
		},
		saveAnswer: function(data) {
			return httpPost('/customer/question/saveAnswer', {data: data})
		},
		getResult: function(data) {
			return httpGet('/customer/question/getResult', {data: data})
		},
		getArticalById: function(data) {  //之前的健康教育 代码1
			return httpGet('/synergy/customer/getArticalById', {data: data})
		},
		findManageSynergyWorkorderArticleById: function(data) {   //1.5.7健康教育   代码6
            return httpGet('/synergy/customer/findManageSynergyWorkorderArticleById', {data: data})
        },
        findTestInstructionsByOrgCode: function(data) {   //体检  代码7
            return httpGet('/synergy/customer/findTestInstructionsByOrgCode', {data: data})
        },
        healthIndexList: function(data) {   //体征 代码8
            return httpGet('/synergy/customer/healthIndexList', {data: data})
        },
        standard: function(data) {   //体征 预警值
            return httpGet('/synergy/customer/standard', {data: data})
        },
		// 客服首页接口
		customerIndex: function(data) {
			return httpGet('/synergy/customer/customerIndex', {data: data})
		},
		// 管理员首页接口
		adminIndex: function(data) {
			return httpGet('/synergy/customer/adminIndex', {data: data})
		},
		intervalOnLine: function(data) {
			return httpGet('/synergy/customer/intervalOnLine', {data: data})
		},
		todayCustomerActivy: function(data) {
			return httpGet('/synergy/customer/TodayCustomerActivy', {data: data})
		},
		workorderList: function(data) {
			return httpGet('/synergy/customer/workorderList', {data: data})
		},
		getAnswers:function(data){
			return httpGet('/customer/question/getAnswers',{data:data})
		},
		// 导出
		exportWorkorder:function(data){
			return httpGet('/synergy/customer/exportWorkorder',{data:data})
		},
		// 处理居民调查
		getTaskByIdcard: function(data) {
			return httpGet('/synergy/customer/getTaskByIdcard',{data:data})
		},
		// 获取居民服务数据
		getWorkorderNum: function(data) {
			return httpGet('/synergy/customer/getWorkorderNum',{data:data})
		},
		getAskdetail:function(data){
			return httpGet('/customer/question/getOptionsComment',{data:data})
		},
		//知识库		
		//知识库文章列表
		getArticleList:function(data){
			return httpGet('/customer/article/searchPageList',{data:data})
		},
		//我的文章列表
		getMyArticleList:function(data){
			return httpGet('/customer/article/searchMyPageList',{data:data})
		},
		//根据id删除文章
		deleteArticleById:function(data){
			return httpGet('/customer/article/deleteById',{data:data})
		},		
		//获取一级分类列表(无分页)
		searchArticleCategoryList:function(data){
			return httpGet('/customer/category/searchCategoryList',{data:data})
		},	
		//根据code适用范围
		hospitalsByCity:function(data){
			return httpGet('/customer/article/hospitalsByCity',{data:data})
		},
		//根据code获取分类
		queryArticleCategoryByCode:function(data){
			return httpGet('/customer/category/queryByCode',{data:data})
		},
		//根据code删除分类
		deleteArticleCategoryByCode:function(data){
			return httpGet('/customer/category/updateDel',{data:data})
		},
		//获取分类列
		searchArticleCategoryPageList:function(data){
			return httpGet('/customer/category/searchCategoryPageList',{data:data})
		},
		//新增、修改分类
		saveArticleCategory:function(data){
			return httpPost('/customer/category/saveCategory',{data:data})
		},
		//分类code是否存在
		hasExistArticleCategoryCode:function(data){
			return httpGet('/customer/category/hasExistCode',{data:data})
		},
		// 添加、修改文章
		updateArticle: function(data) {
			return httpPost('/customer/article/updateArticle',{data:data})
		},
		// 根据id获取文章
		queryArticleById: function(data) {
			return httpGet('/customer/article/queryById',{data:data})
		},
		//获取适用范围
		hospitalsTree: function (data) {
			return httpGet('/customer/article/hospitalsTree', { data: data })
		},
		// 根据id获取文章
		getCategoryLevelList: function(data) {
			return httpGetWlyy('/third/jkEdu/Article/getCategoryList',{data:data})
		},
		// 是否有上一次随访的信息
		getLastFollowup: function(data) {
			return httpPost('/doctor/followup/getLastFollowup',{data:data})
		},
		// 复制随访信息
		copyFollowup: function(data) {
			return httpPost('/doctor/followup/copyFollowup',{data:data})
		},
		// 获取随访信息
		getFollowup: function(data) {
			return httpGet('/doctor/followup/getFollowup',{data:data})
		},
		//获得协同服务未完成和未读工单的信息
		getWorkorderUnfinished: function(data){
		    return httpGet("/synergy/customer/workorderListTotal", {data: data})
		},
		//协同工单获取上一次分配的负责人和参与人列表
		getSelectedOrderCollaborates: function(data){
		    return httpGet("/synergy/customer/selectByWorkorder", {data: data})
		},
		// 知识库右侧结果搜索接口
		searchKnowledgePageList: function(data) {
			return httpGet("/customer/article/searchKnowledgePageList", {data: data})
		},
		// 意见反馈
        saveFeedback: function(data) {
            return httpPost("/customer/saveFeedback", {data: data})
        },
        //导出通话记录
         exportCall: function() {
            window.open(server+'/synergy/customer/callrecordOutExcel')
		},
		// 通过社保卡号或身份证筛选居民列表
		findPatientInfo: function (data) {
			return httpPost("/customer/findPatientInfo", { data: data })
		},
		// 通过id获取知识库文章详情
		queryOneById: function (data) {
			return httpGet("/customer/article/queryOneById", { data: data })
		},
		//通过身份证号获取未就诊预约记录
		getRegListCall:function(data){
			return httpGet("/doctor/guahao/GetRegListCall", { data: data })
		},
		//协同任务关闭工单
		closeWorkorder:function(data){
			return httpGet('/synergy/customer/closeWorkorder',{data:data})
		},
		// 根据身份证号换取居民CODE
		getPatientAccetokenByIdcard:function(data) {
	        return httpPost('/customer/getPatientAccetokenByIdcard', {
	            data: data
	        })
		},
		// 查询跟进记录
		selectByCode:function(data) {
			return httpPost('/customer/selectByCode', {
				data: data
			})
		},
		// 获取后续处理人
		selectUser:function(data) {
			return httpPost('/customer/selectUser', {
				data: data
			})
		},		
		// 更新通话记录和跟进记录
		updateCallRecordAndFollowupRecord:function(data) {
			return httpPost('/customer/updateCallRecordAndFollowupRecord', {
				data: data
			})
		},
	}
	
	window.APIService = APIService;
})(jQuery)

+ 337 - 287
app/jbsc/js/statistics.js

@ -1,299 +1,349 @@
function showSuccessMessage(msg) {
	layer.msg(msg, {
		icon: 1
	})
  layer.msg(msg, {
    icon: 1
  })
}
function showErrorMessage(msg) {
	layer.msg(msg, {
		icon: 5
	})
  layer.msg(msg, {
    icon: 5
  })
}
function showWarningMessage(msg) {
	layer.msg(msg, {
		icon: 2
	})
  layer.msg(msg, {
    icon: 2
  })
}
function showInfoMessage(msg) {
	layer.msg(msg, {
		icon: 6
	})
  layer.msg(msg, {
    icon: 6
  })
}
new Vue({
	el: '#app',
	data: {
		modal: "",
		type: "",
		status: "",
		name: "",
		isDanger: "1",
		pagesize: 10,
		total: 0,
		pagetotal: 0, //总页数
		currentPage: 1, //当前页数
		tablelist: [],
		types: [],
		Statics: {},
		wujilu: false,
		datamodelshow: true,
	},
	mounted: function() {
		var vm = this
		vm.getModal()
		vm.getDatas()
		vm.gettypes()
	},
	methods: {
		//获取筛查数据模型
		getModal: function() {
			var vm = this
			jbscAPI.screenStatics().then(function(res) {
				if(res.status == 200) {
					vm.Statics = res.data;
				} else {
					showErrorMessage(res.msg);
				}
			})
		},
		//获取数据
		getDatas: function() {
			var vm = this
			var params = {
				diseaseType: vm.type, //疾病类型
				dealType: vm.status, //处理方式(全部为空 1已预约 2已跟踪 3已接诊4待处理)
				patientName: vm.name, //搜索居民的姓名
				isDanger: vm.isDanger, //是否高危预警(0否 1是)
				pageNo: vm.currentPage,
				pageSize: vm.pagesize
			}
			jbscAPI.getResultList(params).then(function(res) {
				if(res.status == 200) {
					vm.wujilu = false
					vm.total = res.data.num
					vm.pagetotal = Math.ceil(res.data.num / vm.pagesize)
					vm.tablelist = res.data.data;
					if(vm.tablelist.length == 0) {
						vm.wujilu = true
					}
				} else {
					showErrorMessage(res.msg);
				}
			})
		},
		gettypes: function() {
			var vm = this
			var search = true
			$("#Status").bsSuggest({
				data: {
					value: [{
							code: "",
							name: "全部"
						},
						{
							code: "1",
							name: "已预约"
						},
						{
							code: "2",
							name: "已跟踪"
						},
						{
							code: "3",
							name: "已接诊"
						},
						{
							code: "4",
							name: "待处理"
						},
						{
							code: "5",
							name: "日常健康管理"
						}
					]
				},
				getDataMethod: "data",
				effectiveFields: ["name"],
				idField: "code",
				keyField: "name"
			});
			jbscAPI.getSpecialDisease().then(function(res) {
				if(res.status == 200) {
					var data = {}
					data.value = _.map(res.data, function(v) {
						return {
							code: v.code,
							name: v.name
						}
					})
					if(search) {
						data.value = [{
							code: "",
							name: "全部"
						}].concat(data.value)
					}
					$("#Type").bsSuggest({
						data: data,
						getDataMethod: "data",
						effectiveFields: ["name"],
						idField: "code",
						keyField: "name"
					});
					vm.types = res.data;
				} else {
					showErrorMessage(res.msg);
				}
			})
		},
		gettable: function(type) {
			var vm = this
			if(type == "1") {
				if(vm.status == "") {
					$("#Status").attr({
						"data-id": "",
						"value": "全部"
					})
					$("#Status").val("全部")
				}
			} else {
				if(vm.status != "") {
					vm.status = ""
					$("#Status").attr({
						"data-id": "",
						"value": "全部"
					})
					$("#Status").val("全部")
				}
			}
			vm.isDanger = type
			vm.search(1)
		},
		//页面跳转
		search: function(page) {
			var vm = this
			vm.type = $("#Type").attr("data-id");
			var status = $("#Status").attr("data-id");
			if(status == "5") {
				vm.status = "";
				vm.isDanger = "0";
			} else if(status == "" || status == undefined) {
				if(vm.isDanger == "0") {
					vm.isDanger = ""
				}
				vm.status = status;
			} else {
				vm.isDanger = "1";
				vm.status = status;
			}
			vm.currentPage = page
			vm.getDatas()
		},
		//转诊
		zhuanzhen: function() {
			showInfoMessage("PC上暂不支持,请打开手机端疑似高危记录进行转诊预约!")
		},
		//健康教育
		jkjy: function(data) {
			//			sessionStorage.setItem("jbsc-jkwzreceiver", JSON.stringify(receiver))
			//			sessionStorage.setItem("jbsc-jkroler", 1)
			layer.open({
				type: 2,
				//				  offset: ['100px'], //右下角弹出
				area: ['80%', '648px'],
				shade: 0.5,
				title: '健康教育',
				fixed: true, //不固定
				maxmin: true,
				closeBtn: 1,
				shift: 5,
				shadeClose: false, //点击遮罩关闭层
				content: "../../article/html/article.html?code=" + data.patientCode + '&resultCode=' + data.code
			});
			//		location.href="../../../../health-education/login.html?origin=jbsc"
		},
		view: function(data) {
			layer.open({
				type: 2,
				//				  offset: ['100px'], //右下角弹出
				area: ['568px', '100%'],
				shade: 0.5,
				title: '查看筛选结果',
				fixed: true, //不固定
				maxmin: true,
				closeBtn: 1,
				shift: 5,
				shadeClose: false, //点击遮罩关闭层
				content: '../../jbsc/html/view_screening_results.html?isView=true&resultCode=' + data.code
			});
		},
		//筛查
		shaicha: function(data, isNew) {
			var vm = this
			if(isNew) {
				//再次筛查数+1
				layer.open({
					type: 2,
					area: ['820px', '648px'],
					shade: 0.5,
					id: "questionnaire",
					title: '筛选统计',
					fixed: true, //不固定
					maxmin: true,
					closeBtn: 1,
					shift: 5,
					shadeClose: false, //点击遮罩关闭层
					content: '../../jbsc/html/questionnaire.html?fliter_code=' + data.templateCode + '&fliter_title=' + data.templateTitle + '&resident_code=' + data.patientCode + '&resident_name=' + data.patientName
				});
				return;
			}
			layer.open({
				type: 2,
				offset: 'rb', //右下角弹出
				id: "filter_type",
				area: ['280px', '100%'],
				shade: 0.5,
				title: false,
				fixed: true, //不固定
				maxmin: false,
				closeBtn: 0,
				shift: 5,
				shadeClose: true, //点击遮罩关闭层
				content: '../../jbsc/html/filter_type.html'
			});
		},
		//健康跟踪
		jkgz: function(data) {
			var vm = this
			//跳转到筛查结果页面
			var index = layer.open({
				type: 2,
				area: ['500px', '550px'],
				shade: 0.5,
				title: '家医建议',
				fixed: true, //不固定
				maxmin: false,
				closeBtn: 1,
				shift: 5,
				shadeClose: false, //点击遮罩关闭层
				content: '../../jbsc/html/advice.html?resultCode=' + data.code + '&filter_code=' + data.templateCode
			});
			console.log(index)
		},
		datamodeltap: function() {
			var vm = this
			$("#sc_datamodel").toggle("normal", function() {
				if(vm.datamodelshow) {
					vm.datamodelshow = false
					$("#datamodeltap").removeClass("up_datamodel").addClass("down_datamodel")
					$("#datamodeltap span").text("展开")
				} else {
					vm.datamodelshow = true
					$("#datamodeltap").removeClass("down_datamodel").addClass("up_datamodel")
					$("#datamodeltap span").text("收起")
				}
			});
		}
	}
})
  el: '#app',
  data: {
    modal: '',
    type: '',
    status: '',
    name: '',
    isDanger: '1',
    pagesize: 10,
    total: 0,
    pagetotal: 0, //总页数
    currentPage: 1, //当前页数
    tablelist: [],
    types: [],
    Statics: {},
    wujilu: false,
    datamodelshow: true,
    centerDialogVisible: false
  },
  mounted: function () {
    var vm = this
    vm.getModal()
    vm.getDatas()
    vm.gettypes()
  },
  methods: {
    //获取筛查数据模型
    getModal: function () {
      var vm = this
      jbscAPI.screenStatics().then(function (res) {
        if (res.status == 200) {
          vm.Statics = res.data
        } else {
          showErrorMessage(res.msg)
        }
      })
    },
    //获取数据
    getDatas: function () {
      var vm = this
      var params = {
        diseaseType: vm.type, //疾病类型
        dealType: vm.status, //处理方式(全部为空 1已预约 2已跟踪 3已接诊4待处理)
        patientName: vm.name, //搜索居民的姓名
        isDanger: vm.isDanger, //是否高危预警(0否 1是)
        pageNo: vm.currentPage,
        pageSize: vm.pagesize
      }
      jbscAPI.getResultList(params).then(function (res) {
        if (res.status == 200) {
          vm.wujilu = false
          vm.total = res.data.num
          vm.pagetotal = Math.ceil(res.data.num / vm.pagesize)
          vm.tablelist = res.data.data
          if (vm.tablelist.length == 0) {
            vm.wujilu = true
          }
        } else {
          showErrorMessage(res.msg)
        }
      })
    },
    gettypes: function () {
      var vm = this
      var search = true
      $('#Status').bsSuggest({
        data: {
          value: [
            {
              code: '',
              name: '全部'
            },
            {
              code: '1',
              name: '已预约'
            },
            {
              code: '2',
              name: '已跟踪'
            },
            {
              code: '3',
              name: '已接诊'
            },
            {
              code: '4',
              name: '待处理'
            },
            {
              code: '5',
              name: '日常健康管理'
            },
            {
              code: '6',
              name: '已管理'
            },
            {
              code: '7',
              name: '住院补筛'
            }
          ]
        },
        getDataMethod: 'data',
        effectiveFields: ['name'],
        idField: 'code',
        keyField: 'name'
      })
      jbscAPI.getSpecialDisease().then(function (res) {
        if (res.status == 200) {
          var data = {}
          data.value = _.map(res.data, function (v) {
            return {
              code: v.code,
              name: v.name
            }
          })
          if (search) {
            data.value = [
              {
                code: '',
                name: '全部'
              }
            ].concat(data.value)
          }
          $('#Type').bsSuggest({
            data: data,
            getDataMethod: 'data',
            effectiveFields: ['name'],
            idField: 'code',
            keyField: 'name'
          })
          vm.types = res.data
        } else {
          showErrorMessage(res.msg)
        }
      })
    },
    gettable: function (type) {
      var vm = this
      if (type == '1') {
        if (vm.status == '') {
          $('#Status').attr({
            'data-id': '',
            'value': '全部'
          })
          $('#Status').val('全部')
        }
      } else {
        if (vm.status != '') {
          vm.status = ''
          $('#Status').attr({
            'data-id': '',
            'value': '全部'
          })
          $('#Status').val('全部')
        }
      }
      vm.isDanger = type
      vm.search(1)
    },
    //页面跳转
    search: function (page) {
      var vm = this
      vm.type = $('#Type').attr('data-id')
      var status = $('#Status').attr('data-id')
      if (status == '5') {
        vm.status = ''
        vm.isDanger = '0'
      } else if (status == '' || status == undefined) {
        if (vm.isDanger == '0') {
          vm.isDanger = ''
        }
        vm.status = status
      } else {
        vm.isDanger = '1'
        vm.status = status
      }
      vm.currentPage = page
      vm.getDatas()
    },
    //转诊
    zhuanzhen: function (data) {
      // showInfoMessage('PC上暂不支持,请打开手机端疑似高危记录进行转诊预约!')
      // top.layer.msg('PC上暂不支持,请打开手机端疑似高危记录进行转诊预约', { icon: 5 })
      top.layer.open({
        type: 2,
        closeBtn: 1, // 显示关闭按钮
        area: ['800px', '90%'],
        title: '预约挂号',
        content: '../../jbsc/html/appointment/appoint-select.html?patient=' + data.patientCode + '&callCode='
      })
    },
    //健康教育
    jkjy: function (data) {
      //			sessionStorage.setItem("jbsc-jkwzreceiver", JSON.stringify(receiver))
      //			sessionStorage.setItem("jbsc-jkroler", 1)
      layer.open({
        type: 2,
        //				  offset: ['100px'], //右下角弹出
        area: ['80%', '648px'],
        shade: 0.5,
        title: '健康教育',
        fixed: true, //不固定
        maxmin: true,
        closeBtn: 1,
        shift: 5,
        shadeClose: false, //点击遮罩关闭层
        content: '../../article/html/article.html?code=' + data.patientCode + '&resultCode=' + data.code
      })
      //		location.href="../../../../health-education/login.html?origin=jbsc"
    },
    //健康指导
    jkzd: function (data) {
      //			sessionStorage.setItem("jbsc-jkwzreceiver", JSON.stringify(receiver))
      //			sessionStorage.setItem("jbsc-jkroler", 1)
      layer.open({
        type: 2,
        //				  offset: ['100px'], //右下角弹出
        area: ['80%', '648px'],
        shade: 0.5,
        title: '健康指导',
        fixed: true, //不固定
        maxmin: true,
        closeBtn: 1,
        shift: 5,
        shadeClose: false, //点击遮罩关闭层
        content: '../../guidance/html/index.html?patient=' + data.patientCode + '&resultCode=' + data.code
      })
      //		location.href="../../../../health-education/login.html?origin=jbsc"
    },
    view: function (data) {
      layer.open({
        type: 2,
        //				  offset: ['100px'], //右下角弹出
        area: ['568px', '100%'],
        shade: 0.5,
        title: '查看筛选结果',
        fixed: true, //不固定
        maxmin: true,
        closeBtn: 1,
        shift: 5,
        shadeClose: false, //点击遮罩关闭层
        content: '../../jbsc/html/view_screening_results.html?isView=true&resultCode=' + data.code
      })
    },
    //筛查
    shaicha: function (data, isNew) {
      var vm = this
      if (isNew) {
        //再次筛查数+1
        layer.open({
          type: 2,
          area: ['820px', '648px'],
          shade: 0.5,
          id: 'questionnaire',
          title: '筛选统计',
          fixed: true, //不固定
          maxmin: true,
          closeBtn: 1,
          shift: 5,
          shadeClose: false, //点击遮罩关闭层
          content:
            '../../jbsc/html/questionnaire.html?fliter_code=' +
            data.templateCode +
            '&fliter_title=' +
            data.templateTitle +
            '&resident_code=' +
            data.patientCode +
            '&resident_name=' +
            data.patientName
        })
        return
      }
      layer.open({
        type: 2,
        offset: 'rb', //右下角弹出
        id: 'filter_type',
        area: ['280px', '100%'],
        shade: 0.5,
        title: false,
        fixed: true, //不固定
        maxmin: false,
        closeBtn: 0,
        shift: 5,
        shadeClose: true, //点击遮罩关闭层
        content: '../../jbsc/html/filter_type.html'
      })
    },
    //健康跟踪
    jkgz: function (data) {
      var vm = this
      //跳转到筛查结果页面
      var index = layer.open({
        type: 2,
        area: ['500px', '550px'],
        shade: 0.5,
        title: '家医建议',
        fixed: true, //不固定
        maxmin: false,
        closeBtn: 1,
        shift: 5,
        shadeClose: false, //点击遮罩关闭层
        content: '../../jbsc/html/advice.html?resultCode=' + data.code + '&filter_code=' + data.templateCode
      })
      console.log(index)
    },
    datamodeltap: function () {
      var vm = this
      $('#sc_datamodel').toggle('normal', function () {
        if (vm.datamodelshow) {
          vm.datamodelshow = false
          $('#datamodeltap').removeClass('up_datamodel').addClass('down_datamodel')
          $('#datamodeltap span').text('展开')
        } else {
          vm.datamodelshow = true
          $('#datamodeltap').removeClass('down_datamodel').addClass('up_datamodel')
          $('#datamodeltap span').text('收起')
        }
      })
    },
    sqsf: function () {
      var vm = this
      vm.centerDialogVisible = true
    }
  }
})

+ 213 - 201
component/guidance/person-edit-panel.js

@ -1,5 +1,6 @@
var PersonEditPanel = {
    template: '<div>\
  template:
    '<div>\
    			<div style="height: 34px;" >\
		    		指导模板\
		    		<div class="save-btn ml10" @click="save" v-show="sendMode">\
@ -40,212 +41,223 @@ var PersonEditPanel = {
		    		</a>\
		    	</div>\
    </div>',
	beforeRouteEnter: function(to, from, next) {
	    next(function(vm) {
	      	var query = vm.$route.query
	    	vm.modelCode = query.modelCode
	    	if(!storage.patient && !query.patient) {
	    		vm.sendMode = false
	    	} else {
	    		storage.patient = storage.patient || query.patient
	    		storage.planId = storage.planId || query.planId
	    		vm.sendMode = true
	    	}
	    	
	    	if(vm.modelCode && from.path != "/preview-panel") {
	    		vm.editable = true
	    		vm.listDetail()
	    	}
	    })
	},
    props: [],
    data: function() {
        return {
			words: 1000,
			count: 0,
			content: "",
			modelName: "",
			imgs: [],
			modelCode: "",
			editable: true,
			sendMode: false // 根据url中是否携带patient来判断是否是"发送"模式
        }
  beforeRouteEnter: function (to, from, next) {
    next(function (vm) {
      var query = vm.$route.query
      vm.modelCode = query.modelCode
      console.log(storage.patient, query.patient, 'xxxxxxxxxxxxxxxxxxx')
      if (!storage.patient && !query.patient) {
        vm.sendMode = false
      } else {
        storage.patient = storage.patient || query.patient
        storage.planId = storage.planId || query.planId
        vm.sendMode = true
      }
      if (vm.modelCode && from.path != '/preview-panel') {
        vm.editable = true
        vm.listDetail()
      }
    })
  },
  props: [],
  data: function () {
    return {
      words: 1000,
      count: 0,
      content: '',
      modelName: '',
      imgs: [],
      modelCode: '',
      editable: true,
      sendMode: false // 根据url中是否携带patient来判断是否是"发送"模式
    }
  },
  mounted: function () {
    var vm = this
    EventBus.$emit('active-nav-tab', 0)
  },
  methods: {
    countWord: function () {
      if (this.content.length <= this.words) {
        this.count = this.content.length
      } else {
        this.content = this.content.slice(0, this.words)
      }
    },
    mounted: function() {
    	var vm = this
    	EventBus.$emit('active-nav-tab', 0)
    listDetail: function () {
      var vm = this
      guidanceAPI
        .listDetail({
          modelCode: vm.modelCode
        })
        .then(function (res) {
          var data = res.data
          if (data) {
            vm.content = data.content
            vm.modelName = data.modelName
            vm.imgs = _.map(data.imagesUrls, function (s) {
              return httpRequest.getImgUrl(s)
            })
          }
        })
    },
    methods: {
        countWord: function() {
        	if(this.content.length <= this.words) {
        		this.count = this.content.length
        	} else {
        		this.content = this.content.slice(0, this.words)	
        	}
        },
        listDetail: function() {
        	var vm = this
        	guidanceAPI.listDetail({
        		modelCode: vm.modelCode
        	}).then(function(res) {
        		var data = res.data
        		if(data) {
        			vm.content = data.content
        			vm.modelName = data.modelName
        			vm.imgs = _.map(data.imagesUrls, function(s) {
        				return httpRequest.getImgUrl(s)
        			})
        		}
        	})
        },
        imgUploaded: function(url) {
        	var vm = this
        	vm.imgs.push(httpRequest.getImgUrl(url))
        },
        removeImg: function(url, idx) {
        	var vm = this
        	vm.imgs.splice(idx, 1)
        },
        save: function() {
        	var vm = this
        	if(!vm.modelCode) {
        		toastr && toastr.error("请选择模板")
        		return
        	}
        	if(!vm.modelName) {
        		toastr && toastr.error("模板名称不能为空")
        		return
        	}
        	if(!vm.content) {
        		toastr && toastr.error("模板内容不能为空")
        		return
        	}
        	guidanceAPI.modifyTemplate({
	            content: vm.content,
	            modelName: vm.modelName,
	            imagesUrl: vm.imgs.join(','),
	            code: vm.modelCode
        	}).then(function(res) {
        		if(res.status == 200) {
        			toastr && toastr.success("保存成功")
        			EventBus.$emit('refresh-person-panel')
        		}
        	}).catch(function(e) {
        		console.error(e)
        	})
        },
        deleteTemplate: function() {
        	var vm = this
        	var d = dialog({
        		width: 350,
				title: '删除模板',
				content: '删除后无法恢复,是否确认删除?',
				okValue: '确定',
				ok: function () {
					guidanceAPI.deleteTemplate( { code: vm.modelCode}).then(function(res) {
        				toastr && toastr.success("删除成功")
        				vm.editable = false
        				EventBus.$emit('refresh-person-panel')
		        	}).catch(function(e) {
		        		console.error(e)
		        	})
				},
				cancelValue: '取消',
				cancel: function () {}
			});
			d.showModal();
        	
    imgUploaded: function (url) {
      var vm = this
      vm.imgs.push(httpRequest.getImgUrl(url))
    },
    removeImg: function (url, idx) {
      var vm = this
      vm.imgs.splice(idx, 1)
    },
    save: function () {
      var vm = this
      if (!vm.modelCode) {
        toastr && toastr.error('请选择模板')
        return
      }
      if (!vm.modelName) {
        toastr && toastr.error('模板名称不能为空')
        return
      }
      if (!vm.content) {
        toastr && toastr.error('模板内容不能为空')
        return
      }
      guidanceAPI
        .modifyTemplate({
          content: vm.content,
          modelName: vm.modelName,
          imagesUrl: vm.imgs.join(','),
          code: vm.modelCode
        })
        .then(function (res) {
          if (res.status == 200) {
            toastr && toastr.success('保存成功')
            EventBus.$emit('refresh-person-panel')
          }
        })
        .catch(function (e) {
          console.error(e)
        })
    },
    deleteTemplate: function () {
      var vm = this
      var d = dialog({
        width: 350,
        title: '删除模板',
        content: '删除后无法恢复,是否确认删除?',
        okValue: '确定',
        ok: function () {
          guidanceAPI
            .deleteTemplate({ code: vm.modelCode })
            .then(function (res) {
              toastr && toastr.success('删除成功')
              vm.editable = false
              EventBus.$emit('refresh-person-panel')
            })
            .catch(function (e) {
              console.error(e)
            })
        },
        sendTemplate: function() {
        	var vm = this
            if(!vm.modelName) {
        		toastr && toastr.error("模板名称不能为空")
        		return
        	}
        	if(!vm.content) {
        		toastr && toastr.error("模板内容不能为空")
        		return
        	}
            var d = dialog({
            	width: 350,
				content: '发出后无法变更,是否确认发送给居民?',
				okValue: '继续发送',
				ok: function () {
					guidanceAPI.sendTemplate( {
		                patient: storage.patient,
		                content: vm.content,
		                modelCode: vm.modelCode,
		                images: vm.imgs.join(',')
		            }).then(function(res) {
        				toastr && toastr.success("发送成功")
        				
        				var obj = {
        					rehabilitationDetailId: storage.planId,
				            patientCode: storage.patient,
				            // patientName: patientName,
				            doctorCode: storage.docInfo.code,
				            doctorName: storage.docInfo.name,
				            relationRecordType: 2, //健康指导
				            relationRecordCode: res.data.id
        				}
        				guidanceAPI.saveRehabilitationOperateRecord({
        					dataJson: JSON.stringify(obj)
        				}).then(function(res) {
        					if(res.status == 200) {
        						var index = parent.layer && parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
								parent.layer && parent.layer.close(index)
        					} else {
        						toastr && toastr.success(res.msg)
        					}
        				})
        				
		        	}).catch(function(e) {
		        		console.error(e)
		        	})
				},
				cancelValue: '取消',
				cancel: function () {}
			});
			d.showModal();
			
        cancelValue: '取消',
        cancel: function () {}
      })
      d.showModal()
    },
    sendTemplate: function () {
      var vm = this
      if (!vm.modelName) {
        toastr && toastr.error('模板名称不能为空')
        return
      }
      if (!vm.content) {
        toastr && toastr.error('模板内容不能为空')
        return
      }
      var d = dialog({
        width: 350,
        content: '发出后无法变更,是否确认发送给居民?',
        okValue: '继续发送',
        ok: function () {
          guidanceAPI
            .sendTemplate({
              patient: storage.patient,
              content: vm.content,
              modelCode: vm.modelCode,
              images: vm.imgs.join(',')
            })
            .then(function (res) {
              toastr && toastr.success('发送成功')
              var obj = {
                rehabilitationDetailId: storage.planId,
                patientCode: storage.patient,
                // patientName: patientName,
                doctorCode: storage.docInfo.code,
                doctorName: storage.docInfo.name,
                relationRecordType: 2, //健康指导
                relationRecordCode: res.data.id
              }
              guidanceAPI
                .saveRehabilitationOperateRecord({
                  dataJson: JSON.stringify(obj)
                })
                .then(function (res) {
                  if (res.status == 200) {
                    var index = parent.layer && parent.layer.getFrameIndex(window.name) //先得到当前iframe层的索引
                    parent.layer && parent.layer.close(index)
                  } else {
                    toastr && toastr.success(res.msg)
                  }
                })
            })
            .catch(function (e) {
              console.error(e)
            })
        },
        preview: function() {
        	var vm = this
			
			var query = {
        		modelCode: vm.modelCode,
        		patient: storage.patient || "",
        		timestemp: $.now()
        	}
        	this.$router.push({path:'/preview-panel',query:query})
        }
        cancelValue: '取消',
        cancel: function () {}
      })
      d.showModal()
    },
    watch: {
    preview: function () {
      var vm = this
      var query = {
        modelCode: vm.modelCode,
        patient: storage.patient || '',
        timestemp: $.now()
      }
      this.$router.push({ path: '/preview-panel', query: query })
    }
  },
  watch: {
    '$route': function (to, from) {
    	var vm = this
      	var query = vm.$route.query
    	if(query && query.modelCode && from.path == "/person-edit-panel" && to.path == "/person-edit-panel") {
    		vm.modelCode = query.modelCode
    		vm.editable = true
    		vm.listDetail()
    	}
    	
    	if(storage.patient) {
    		vm.sendMode = true
    	} else {
    		vm.sendMode = false
    	}
    	
    	if(to.path == "/preview-panel") {
    		EventBus.$emit('preview-template', {
    			content: vm.content,
	            modelName: vm.modelName,
	            imgs: vm.imgs
    		})
    	}
      var vm = this
      var query = vm.$route.query
      if (query && query.modelCode && from.path == '/person-edit-panel' && to.path == '/person-edit-panel') {
        vm.modelCode = query.modelCode
        vm.editable = true
        vm.listDetail()
      }
      if (storage.patient) {
        vm.sendMode = true
      } else {
        vm.sendMode = false
      }
      if (to.path == '/preview-panel') {
        EventBus.$emit('preview-template', {
          content: vm.content,
          modelName: vm.modelName,
          imgs: vm.imgs
        })
      }
    },
    'content': function(v) {
    	this.countWord()
    'content': function (v) {
      this.countWord()
    }
  }
}
}

Fichier diff supprimé car celui-ci est trop grand
+ 5 - 0
css/bootstrap.min14ed.css


+ 851 - 0
css/jqgrid/ui.jqgridffe4.css

@ -0,0 +1,851 @@
/*Grid*/
.ui-jqgrid {
	position: relative;
	border: 1px solid #ddd;
    overflow: hidden;
}
.ui-jqgrid .ui-jqgrid-view {
	position: relative;
	left:0;
	top: 0;
	padding: 0;
}
.ui-jqgrid .ui-common-table {}
/* Caption*/
.ui-jqgrid .ui-jqgrid-titlebar {
	font-weight: normal;
	min-height:37px;
	padding: 4px 8px;
	position: relative;
	margin-right: 2px;
	border-bottom: 1px solid #ddd; //default
}
.ui-jqgrid .ui-jqgrid-caption {
	text-align: left;
}
.ui-jqgrid .ui-jqgrid-title {
	padding-top: 5px;
	vertical-align: middle;
}
.ui-jqgrid .ui-jqgrid-titlebar-close {
	color: inherit;
	position: absolute;
	top: 50%;
	margin: -10px 7px 0 0;
	padding: 1px;
	cursor:pointer;
}
.ui-jqgrid .ui-jqgrid-titlebar-close span {
	display: block;
	margin: 1px;
}
.ui-jqgrid .ui-jqgrid-titlebar-close:hover {  }
/* Header*/
.ui-jqgrid .ui-jqgrid-hdiv {
	position: relative;
	margin: 0;
	padding: 0;
	overflow: hidden;
}
.ui-jqgrid .ui-jqgrid-hbox {
	float: left;
	padding-right: 20px;
}
.ui-jqgrid .ui-jqgrid-htable {
	margin-bottom: 0;
	table-layout: fixed;
	border-top:none;
}
.ui-jqgrid .ui-jqgrid-htable thead th {
	overflow : hidden;
	border-bottom : none;
	padding-right: 2px;
}
.ui-jqgrid .ui-jqgrid-htable thead th div {
	overflow: hidden;
	position:relative;
}
.ui-th-column, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column {
	overflow: hidden;
	white-space: nowrap;
}
.ui-th-column-header,
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header {
	overflow: hidden;
	white-space: nowrap;
}
.ui-th-ltr, .ui-jqgrid .ui-jqgrid-htable th.ui-th-ltr {}
.ui-th-rtl, .ui-jqgrid .ui-jqgrid-htable th.ui-th-rtl {text-align: center; }
.ui-first-th-ltr { }
.ui-first-th-rtl { }
.ui-jqgrid tr.jqg-first-row-header th {
	height:auto;
	border-top:none;
	padding-bottom: 0;
	padding-top: 0;
	border-bottom: none;
	padding-right: 2px;
	text-align: center;
}
.ui-jqgrid tr.jqg-second-row-header th,
.ui-jqgrid tr.jqg-third--row-header th
{
	border-top:none;
	text-align: center;
}
.ui-jqgrid .ui-th-div-ie {
	white-space: nowrap;
	zoom :1;
	height:17px;
}
.ui-jqgrid .ui-jqgrid-resize {
	height:20px !important;
	position: relative;
	cursor :e-resize;
	display: inline;
	overflow: hidden;
}
.ui-jqgrid .ui-grid-ico-sort {
	margin-left:5px;
	overflow:hidden;
	position:absolute;
	right: 3px;
	font-size:12px;
}
.ui-jqgrid .ui-icon-asc {
	margin-top:-3px;
}
.ui-jqgrid .ui-icon-desc {
	margin-top:4px;
}
.ui-jqgrid .ui-i-asc {
	margin-top:0;
}
.ui-jqgrid .ui-i-desc {
	margin-top:0;
	margin-right:13px;
}
.ui-jqgrid .ui-single-sort-asc {
	margin-top:0;
}
.ui-jqgrid .ui-single-sort-desc {}
.ui-jqgrid .ui-jqgrid-sortable {
	cursor:pointer;
}
.ui-jqgrid tr.ui-search-toolbar th { }
.ui-jqgrid .ui-search-table td.ui-search-clear { }
.ui-jqgrid tr.ui-search-toolbar td > input { }
.ui-jqgrid tr.ui-search-toolbar select {}
/* Body */
.ui-jqgrid .table-bordered,
.ui-jqgrid .table-bordered td,
.ui-jqgrid .table-bordered th.ui-th-ltr
{
	border-left:0px none !important;
}
.ui-jqgrid .table-bordered th.ui-th-rtl
{
	border-right:0px none !important;
}
.ui-jqgrid .table-bordered tr.ui-row-rtl td
{
	border-right:0px none !important;
	border-left: 1px solid #ddd !important;
}
div.tablediv > .table-bordered {
	border-left : 1px solid #ddd !important;
}
.ui-jqgrid  .ui-jqgrid-bdiv table.table-bordered td {
	border-top: 0px none;
}
.ui-jqgrid .ui-jqgrid-bdiv {
	position: relative;
	margin: 0;
	padding:0;
	overflow-x:hidden;
	text-align:left;
}
.ui-jqgrid .ui-jqgrid-btable {
	table-layout: fixed;
	border-left:none ;
	border-top:none;
	margin-bottom: 0px
}
.ui-jqgrid tr.jqgrow {
	outline-style: none;
}
.ui-jqgrid tr.jqgroup {
	outline-style: none;
}
.ui-jqgrid tr.jqgrow td {
	overflow: hidden;
	white-space: pre;
	padding-right: 2px;
}
.ui-jqgrid tr.jqgfirstrow  td {
	height:auto;
	border-top:none;
	padding-bottom: 0;
	padding-top: 0;
	border-bottom: none;
	padding-right: 2px;
}
.ui-jqgrid tr.jqgroup td { }
.ui-jqgrid tr.jqfoot td {}
.ui-jqgrid tr.ui-row-ltr td {}
.ui-jqgrid tr.ui-row-rtl td {}
.ui-jqgrid td.jqgrid-rownum { }
.ui-jqgrid .ui-jqgrid-resize-mark {
	width:2px;
	left:0;
	background-color:#777;
	cursor: e-resize;
	cursor: col-resize;
	position:absolute;
	top:0;
	height:100px;
	overflow:hidden;
	display:none;
	border:0 none;
	z-index: 99999;
}
/* Footer */
.ui-jqgrid .ui-jqgrid-sdiv {
	position: relative;
	margin: 0;
	padding: 0;
	overflow: hidden;
	border-left: 0 none !important;
	border-top : 0 none !important;
	border-right : 0 none !important;
}
.ui-jqgrid .ui-jqgrid-ftable {
	table-layout:fixed;
	margin-bottom:0;
}
.ui-jqgrid tr.footrow td {
	font-weight: bold;
	overflow: hidden;
	white-space:nowrap;
	padding-right: 2px;
	border-bottom: 0px none;
}
.ui-jqgrid tr.footrow-ltr td {
	text-align:left;
}
.ui-jqgrid tr.footrow-rtl td {
	text-align:right;
}
/* Pager*/
.ui-jqgrid .ui-jqgrid-pager,
.ui-jqgrid .ui-jqgrid-toppager
{
	border-left-width: 0px;
	border-top: 1px solid #ddd;
	padding : 4px 0px;
	position: relative;
	height: auto;
	white-space: nowrap;
	overflow: hidden;
}
.ui-jqgrid .ui-jqgrid-toppager {
	border-top-width :0;
	border-bottom : 1px solid #ddd;
}
.ui-jqgrid .ui-jqgrid-toppager .ui-pager-control,
.ui-jqgrid .ui-jqgrid-pager .ui-pager-control {
	position: relative;
	border-left: 0;
	border-bottom: 0;
	border-top: 0;
	height: 30px;
}
.ui-jqgrid .ui-pg-table {
	position: relative;
	padding: 1px 0;
	width:auto;
	margin: 0;
}
.ui-jqgrid .ui-pg-table td {
	font-weight:normal;
	vertical-align:middle;
	padding:0px 6px;
}
.ui-jqgrid .ui-pg-button  {
	height:auto;
}
.ui-jqgrid .ui-pg-button span {
	display: block;
	margin: 2px;
	float:left;
}
.ui-jqgrid .ui-pg-button:hover {  }
.ui-jqgrid .ui-disabled:hover {}
.ui-jqgrid .ui-pg-input,
.ui-jqgrid .ui-jqgrid-toppager .ui-pg-input {
	display: inline;
	height:auto;
	width: auto;
	font-size:.9em;
	margin:0;
	line-height: inherit;
	padding: 0px 5px
}
.ui-jqgrid .ui-pg-selbox,
.ui-jqgrid .ui-jqgrid-toppager .ui-pg-selbox {
	font-size:.9em;
	line-height:inherit;
	display:block;
	height:22px;
	margin: 0;
	padding: 3px 0px 3px 3px;
	border:none;
}
.ui-jqgrid .ui-separator {
	height: 18px;
	border : none;
	border-left: 2px solid #ccc ; //default
}
.ui-separator-li {
	height: 2px;
	border : none;
	border-top: 2px solid #ccc ;  //default
	margin: 0; padding: 0; width:100%
}
.ui-jqgrid .ui-jqgrid-pager .ui-pg-div,
.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div
{
	float:left;
	position:relative;
}
.ui-jqgrid .ui-jqgrid-pager .ui-pg-button,
.ui-jqgrid .ui-jqgrid-toppager .ui-pg-button
{
	cursor:pointer;
}
.ui-jqgrid .ui-jqgrid-pager .ui-pg-div  span,
.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div  span
{
	float:left;
}
.ui-jqgrid td input,
.ui-jqgrid td select,
.ui-jqgrid td textarea {
	margin: 0;
}
.ui-jqgrid td textarea {
	width:auto;
	height:auto;
}
.ui-jqgrid .ui-jqgrid-pager .ui-pager-table,
.ui-jqgrid .ui-jqgrid-toppager .ui-pager-table
{
	width:100%;
	table-layout:fixed;
	height:100%;
}
.ui-jqgrid .ui-jqgrid-pager .ui-paging-info,
.ui-jqgrid .ui-jqgrid-toppager .ui-paging-info
{
	font-weight: normal;
	height:auto;
	margin-top:3px;
	margin-right:4px;
	display: inline;
}
.ui-jqgrid .ui-jqgrid-pager .ui-paging-pager,
.ui-jqgrid .ui-jqgrid-toppager .ui-paging-pager
{
	table-layout:auto;
	height:100%;
}
.ui-jqgrid .ui-jqgrid-pager .navtable,
.ui-jqgrid .ui-jqgrid-toppager .navtable
{
	float:left;
	table-layout:auto;
	height:100%;
}
/*Subgrid*/
.ui-jqgrid .ui-jqgrid-btable .ui-sgcollapsed span {
	display: block;
}
.ui-jqgrid .ui-subgrid {
	margin:0;
	padding:0;
	width:100%;
}
.ui-jqgrid .ui-subgrid table {
	table-layout: fixed;
}
.ui-jqgrid .ui-subgrid tr.ui-subtblcell td {}
.ui-jqgrid .ui-subgrid td.subgrid-data {
	border-top:  0 none !important;
}
.ui-jqgrid .ui-subgrid td.subgrid-cell {
	vertical-align: middle
}
.ui-jqgrid a.ui-sghref {
	text-decoration: none;
	color : #010101; //default
}
.ui-jqgrid .ui-th-subgrid {height:20px;}
.tablediv > .row { margin: 0 0}
/* loading */
.ui-jqgrid .loading {
	position: absolute;
	top: 45%;
	left: 45%;
	width: auto;
	z-index:101;
	padding: 6px;
	margin: 5px;
	text-align: center;
	display: none;
	border: 1px solid #ddd;  //default
	font-size: 14px;
	background-color: #d9edf7;
}
.ui-jqgrid .jqgrid-overlay {
	display:none;
	z-index:100;
}
/* IE * html .jqgrid-overlay {width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');} */
* .jqgrid-overlay iframe {
	position:absolute;
	top:0;
	left:0;
	z-index:-1;
}
/* IE width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}*/
/* end loading div */
/* Toolbar */
.ui-jqgrid .ui-userdata {
	padding: 4px 0px;
	overflow: hidden;
	min-height: 32px;
}
.ui-jqgrid .ui-userdata-top {
	border-left-width: 0px;    //default
	border-bottom: 1px solid #ddd;
}
.ui-jqgrid .ui-userdata-bottom {
	border-left-width: 0px;    //default
	border-top: 1px solid #ddd;
}
/*Modal Window */
.ui-jqdialog { }
.ui-jqdialog {
	display: none;
	width: 500px;
	position: absolute;
	//padding: 5px;
	overflow:visible;
}
.ui-jqdialog .ui-jqdialog-titlebar {
	padding: .1em .1em;
	min-height: 35px;
}
.ui-jqdialog .ui-jqdialog-title {
	margin: .3em 0 .2em;
	font-weight: bold;
	padding-left :6px;
	padding-right:6px;
}
.ui-jqdialog .ui-jqdialog-titlebar-close {
	position: absolute;
	top: 0%;
	margin: 3px 5px 0 0;
	padding: 8px;
	cursor:pointer;
}
.ui-jqdialog .ui-jqdialog-titlebar-close span {  }
.ui-jqdialog .ui-jqdialog-titlebar-close:hover,
.ui-jqdialog .ui-jqdialog-titlebar-close:focus {
	padding: 8px;
}
.ui-jqdialog-content, .ui-jqdialog .ui-jqdialog-content {
	border: 0;
	padding: .3em .2em;
	background: none;
	height:auto;
}
.ui-jqdialog .ui-jqconfirm {
	padding: .4em 1em;
	border-width:3px;
	position:absolute;
	bottom:10px;
	right:10px;
	overflow:visible;
	display:none;
	height:120px;
	width:220px;
	text-align:center;
	background-color: #fff;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
}
.ui-jqdialog>.ui-resizable-se { }
.ui-jqgrid>.ui-resizable-se { }
/* end Modal window*/
/* Form edit */
.ui-jqdialog-content .FormGrid {
	margin: 0 8px 0 8px;
	overflow:auto;
	position:relative;
}
.ui-jqdialog-content .EditTable {
	width: 100%;
	margin-bottom:0;
}
.ui-jqdialog-content .DelTable {
	width: 100%;
	margin-bottom:0;
}
.EditTable td input,
.EditTable td select,
.EditTable td textarea {
	width: 98%;
	display: inline-block;
}
.EditTable td textarea {
	width:auto;
	height:auto;
}
.EditTable .FormData td {
	height:37px !important;
}
.ui-jqdialog-content td.EditButton {
	text-align: right;
	padding: 5px 5px 5px 0;
}
.ui-jqdialog-content td.navButton {
	text-align: center;
	border-left: 0 none;
	border-top: 0 none;
	border-right: 0 none;
	padding-bottom:5px;
	padding-top:5px;
}
.ui-jqdialog-content input.FormElement {
	padding: .5em .3em;
	margin-bottom: 5px
}
.ui-jqdialog-content select.FormElement {
	padding:.3em;
	margin-bottom: 3px;
}
.ui-jqdialog-content .data-line {
	padding-top:.1em;
	border: 0 none;
}
.ui-jqdialog-content .CaptionTD {
	vertical-align: middle;
	border: 0 none;
	padding: 2px;
	white-space: nowrap;
}
.ui-jqdialog-content .DataTD {
	padding: 2px;
	border: 0 none;
	vertical-align: top;
}
.ui-jqdialog-content .form-view-data {
	white-space:pre
}
.fm-button {  }
.fm-button-icon-left {
	margin-left: 4px;
	margin-right: 4px;
}
.fm-button-icon-right {
	margin-left: 4px;
	margin-right: 4px;
}
.fm-button-icon-left  {  }
.fm-button-icon-right  { }
#nData, #pData {
	margin-left: 4px;
	margin-right: 4px;
}
#sData span, #cData span {
	margin-left: 5px;
}
/* End Eorm edit */
/*.ui-jqgrid .edit-cell {}*/
.ui-jqgrid .selected-row,
div.ui-jqgrid .selected-row td {
	font-style : normal;
}
/* inline edit actions button*/
.ui-inline-del, .ui-inline-cancel {
    margin-left: 14px;
}
.ui-jqgrid .inline-edit-cell {}
/* Tree Grid */
.ui-jqgrid .tree-wrap {
	float: left;
	position: relative;
	height: 18px;
	white-space: nowrap;
	overflow: hidden;
}
.ui-jqgrid .tree-minus {
	position: absolute;
	height: 18px;
	width: 18px;
	overflow: hidden;
}
.ui-jqgrid .tree-plus {
	position: absolute;
	height: 18px;
	width: 18px;
	overflow: hidden;
}
.ui-jqgrid .tree-leaf {
	position: absolute;
	height: 18px;
	width: 18px;
	overflow: hidden;
}
.ui-jqgrid .treeclick {
	cursor: pointer;
}
/* moda dialog */
* iframe.jqm {
	position:absolute;
	top:0;
	left:0;
	z-index:-1;
}
/*	 width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}*/
.ui-jqgrid-dnd tr td {
	border-right-width: 1px;
	border-right-color: inherit;
	border-right-style: solid;
	height:20px
}
/* RTL Support */
.ui-jqgrid .ui-jqgrid-caption-rtl {
	text-align: right;
}
.ui-jqgrid .ui-jqgrid-hbox-rtl {
	float: right;
	padding-left: 20px;
}
.ui-jqgrid .ui-jqgrid-resize-ltr {
	float: right;
	margin: -2px -2px -2px 0;
	height:100%;
}
.ui-jqgrid .ui-jqgrid-resize-rtl {
	float: left;
	margin: -2px -2px -2px -0px;
}
.ui-jqgrid .ui-sort-rtl {
}
.ui-jqgrid .tree-wrap-ltr {
	float: left;
}
.ui-jqgrid .tree-wrap-rtl {
	float: right;
}
.ui-jqgrid .ui-ellipsis {
	-moz-text-overflow:ellipsis;
	text-overflow:ellipsis;
}
/* Toolbar Search Menu. Nav menu */
.ui-search-menu,
.ui-nav-menu {
	position: absolute;
	padding: 2px 5px;
	z-index:99999;
}
.ui-search-menu.ui-menu .ui-menu-item,
.ui-nav-menu.ui-menu .ui-menu-item
{
	list-style-image: none;
	padding-right: 0;
	padding-left: 0;
}
.ui-search-menu.ui-menu .ui-menu-item a,
.ui-nav-menu.ui-menu .ui-menu-item a
{
	display: block;
}
.ui-search-menu.ui-menu .ui-menu-item a.g-menu-item:hover,
.ui-nav-menu.ui-menu .ui-menu-item a.g-menu-item:hover
{
	margin: -1px;
	font-weight: normal;
}
.ui-jqgrid .ui-search-table {
	padding: 0;
	border: 0 none;
	height:20px;
	width:100%;
}
.ui-jqgrid .ui-search-table .ui-search-oper {
	width:20px;
}
a.g-menu-item, a.soptclass, a.clearsearchclass {
	cursor: pointer;
}
.ui-jqgrid .ui-jqgrid-view input,
.ui-jqgrid .ui-jqgrid-view select,
.ui-jqgrid .ui-jqgrid-view textarea,
.ui-jqgrid .ui-jqgrid-view button {
    //font-size: 11px
}
.ui-jqgrid .ui-scroll-popup {
	width: 100px;
}
.ui-search-table select,
.ui-search-table input
{
	padding: 4px 3px;
}
.ui-disabled {
	opacity: .35;
	filter:Alpha(Opacity=35); /* support: IE8 */
	background-image: none;
}
.ui-overlay {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background-color: rgba(0,0,0,0.5);
	opacity: .3;
	filter: Alpha(Opacity=30); /* support: IE8 */
}
.ui-jqgrid-pager .ui-pg-table .ui-pg-button:hover,
.ui-jqgrid-toppager .ui-pg-table .ui-pg-button:hover
{
	background-color: #ddd;
}
.ui-jqgrid-corner  {
	 border-radius: 5px
}
.ui-resizable-handle {
	//position: absolute;
	display: block;
	left :97%;
}
.ui-jqdialog .ui-resizable-se {
	width: 12px;
	height: 12px;
	right: -5px;
	bottom: -5px;
	background-position: 16px 16px;
}
.ui-resizable-se {
	cursor: se-resize;
	width: 12px;
	height: 12px;
	right: 1px;
	bottom: 1px;
}
.ui-top-corner {
	border-top-left-radius: 5px;
	border-top-right-radius: 5px;
}
.ui-bottom-corner {
	border-bottom-left-radius: 5px;
	border-bottom-right-radius: 5px;
}
.ui-search-table {
	margin-bottom: 0;
}
.ui-search-table .columns, .ui-search-table .operators {
	padding-right: 5px;
}
.opsel {
	float :left;
	width : 100px;
	margin-right : 5px;
}
.add-group, .add-rule, .delete-group {
	width: 14%;
	margin-right : 5px;
}
.delete-rule {
	width : 15px;
}
ul.ui-search-menu, ul.ui-nav-menu {
	 list-style-type:  none;
}
ul.ui-search-menu li a,
ul.ui-nav-menu li a,
.soptclass,
.clearsearchclass {
	text-decoration: none;
	color : #010101;
}
ul.ui-search-menu li a:hover, ul.ui-nav-menu li a:hover, a.soptclass:hover, a.clearsearchclass:hover {
	background-color: #ddd;
	padding: 1px 1px;
	text-decoration: none;
}
ul.ui-search-menu li, ul.ui-nav-menu li {
	padding : 5px 5px;
}
.ui-menu-item hr {
	margin-bottom: 0px;
	margin-top:0px;
}
.searchFilter .ui-search-table td,
.searchFilter .ui-search-table th
{
	border-top: 0px none !important;
}
.searchFilter .queryresult {
	margin-bottom: 5px;
}
.searchFilter .queryresult tr td{
	border-top: 0px none;
}
.ui-search-label {
	padding-left: 5px;
}
.frozen-div, .frozen-bdiv {
	background-color: #fff;
}
/*
.ui-jqgrid .ui-jqgrid-caption,
.ui-jqgrid .ui-jqgrid-pager,
.ui-jqgrid .ui-jqgrid-toppager,
.ui-jqgrid .ui-jqgrid-htable thead th,
.ui-jqgrid .ui-userdata-top,
.ui-jqgrid .ui-userdata-bottom,
.ui-jqgrid .ui-jqgrid-hdiv,
.ui-jqdialog .ui-jqdialog-titlebar
{
    background-image: none, linear-gradient(to bottom, #fff 0px, #e0e0e0 100%);
    background-repeat: repeat-x;
    border-color: #ccc;
    text-shadow: 0 1px 0 #fff;
}
*/

+ 7602 - 0
css/style1.min.css

@ -0,0 +1,7602 @@
h1,
h2,
h3,
h4,
h5,
h6 {
    font-weight: 100
}
h1 {
    font-size: 30px
}
h2 {
    font-size: 24px
}
h3 {
    font-size: 16px
}
h4 {
    font-size: 14px
}
h5 {
    font-size: 12px
}
h6 {
    font-size: 10px
}
h3,
h4,
h5 {
    margin-top: 5px;
    font-weight: 600
}
a:focus {
    outline: 0
}
.nav>li>a {
    color: #a7b1c2;
    font-weight: 600;
    padding: 14px 20px 14px 25px
}
.nav li>a {
    display: block
}
.nav.navbar-right>li>a {
    color: #999c9e
}
.nav>li.active>a {
    /*color: #fff*/
}
.navbar-default .nav>li>a:focus,
.navbar-default .nav>li>a:hover {
    background-color: #293846;
    color: #fff
}
.nav .open>a,
.nav .open>a:focus,
.nav .open>a:hover {
    background: #fff
}
.nav>li>a i {
    margin-right: 6px
}
.navbar {
    border: 0
}
.navbar-default {
    background-color: transparent;
    border-color: #2f4050;
    position: relative
}
.navbar-top-links li {
    display: inline-block
}
.navbar-top-links li:last-child {
    margin-right: 30px
}
body.body-small .navbar-top-links li:last-child {
    margin-right: 10px
}
.navbar-top-links li a {
    padding: 20px 10px;
    min-height: 50px
}
.dropdown-menu {
    border: medium none;
    display: none;
    float: left;
    font-size: 12px;
    left: 0;
    list-style: none outside none;
    padding: 0;
    position: absolute;
    text-shadow: none;
    top: 100%;
    z-index: 1000;
    border-radius: 0;
    box-shadow: 0 0 3px rgba(86, 96, 117, .3)
}
.dropdown-menu>li>a {
    border-radius: 3px;
    color: inherit;
    line-height: 25px;
    margin: 4px;
    text-align: left;
    font-weight: 400
}
.dropdown-menu>li>a.font-bold {
    font-weight: 600
}
.navbar-top-links .dropdown-menu li {
    display: block
}
.navbar-top-links .dropdown-menu li:last-child {
    margin-right: 0
}
.navbar-top-links .dropdown-menu li a {
    padding: 3px 20px;
    min-height: 0
}
.navbar-top-links .dropdown-menu li a div {
    white-space: normal
}
.navbar-top-links .dropdown-alerts,
.navbar-top-links .dropdown-messages,
.navbar-top-links .dropdown-tasks {
    width: 310px;
    min-width: 0
}
.navbar-top-links .dropdown-messages {
    margin-left: 5px
}
.navbar-top-links .dropdown-tasks {
    margin-left: -59px
}
.navbar-top-links .dropdown-alerts {
    margin-left: -123px
}
.navbar-top-links .dropdown-user {
    right: 0;
    left: auto
}
.dropdown-alerts,
.dropdown-messages {
    padding: 10px
}
.dropdown-alerts li a,
.dropdown-messages li a {
    font-size: 12px
}
.dropdown-alerts li em,
.dropdown-messages li em {
    font-size: 10px
}
.nav.navbar-top-links .dropdown-alerts a {
    font-size: 12px
}
.nav-header {
    padding: 33px 25px;
    background: url(patterns/header-profile.png) no-repeat
}
.nav>li.active {
    border-left: 4px solid #19aa8d;
    background: #293846
}
.nav.nav-second-level>li.active {
    border: none
}
.nav.nav-second-level.collapse[style] {
    height: auto!important
}
.nav-header a {
    color: #DFE4ED
}
.nav-header .text-muted {
    color: #8095a8
}
.minimalize-styl-2 {
    padding: 4px 12px;
    margin: 14px 5px 5px 20px;
    font-size: 14px;
    float: left
}
.navbar-form-custom {
    float: left;
    height: 50px;
    padding: 0;
    width: 200px;
    display: inline-table
}
.navbar-form-custom .form-group {
    margin-bottom: 0
}
.nav.navbar-top-links a {
    font-size: 14px
}
.navbar-form-custom .form-control {
    background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
    border: medium none;
    font-size: 14px;
    height: 60px;
    margin: 0;
    z-index: 2000
}
.count-info .label {
    line-height: 12px;
    padding: 1px 5px;
    position: absolute;
    right: 6px;
    top: 12px
}
.arrow {
    float: right;
    margin-top: 2px
}
.fa.arrow:before {
    content: "\f104"
}
.active>a>.fa.arrow:before {
    content: "\f107"
}
.nav-second-level li,
.nav-third-level li {
    border-bottom: none!important
}
.nav-second-level li a {
    padding: 7px 15px 7px 10px;
    padding-left: 52px
}
.nav-third-level li a {
    padding-left: 62px
}
.nav-second-level li:last-child {
    margin-bottom: 10px
}
.mini-navbar .nav li:focus>.nav-second-level,
body:not(.fixed-sidebar):not(.canvas-menu).mini-navbar .nav li:hover>.nav-second-level {
    display: block;
    border-radius: 0 2px 2px 0;
    min-width: 140px;
    height: auto
}
body.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
    font-size: 12px;
    border-radius: 0 2px 2px 0
}
.fixed-nav .slimScrollDiv #side-menu {
    padding-bottom: 60px;
    position: relative
}
.slimScrollDiv>* {
    overflow: hidden
}
.mini-navbar .nav-second-level li a {
    padding: 10px 10px 10px 15px
}
.canvas-menu.mini-navbar .nav-second-level {
    background: #293846
}
.mini-navbar li.active .nav-second-level {
    left: 65px
}
.navbar-default .special_link a {
    background: #1ab394;
    color: #fff
}
.navbar-default .special_link a:hover {
    background: #17987e!important;
    color: #fff
}
.navbar-default .special_link a span.label {
    background: #fff;
    color: #1ab394
}
.navbar-default .landing_link a {
    background: #1cc09f;
    color: #fff
}
.navbar-default .landing_link a:hover {
    background: #1ab394!important;
    color: #fff
}
.navbar-default .landing_link a span.label {
    background: #fff;
    color: #1cc09f
}
.logo-element {
    text-align: center;
    font-size: 18px;
    font-weight: 600;
    color: #fff;
    display: none;
    padding: 18px 0
}
.pace-done #page-wrapper,
.pace-done .footer,
.pace-done .nav-header,
.pace-done .navbar-static-side,
.pace-done li.active {
    -webkit-transition: all .5s;
    transition: all .5s
}
.navbar-fixed-top {
    -webkit-transition-duration: .5s;
    transition-duration: .5s;
    z-index: 2030
}
.navbar-fixed-top,
.navbar-static-top {
    /*background: #f3f3f4*/
    background-color: #fff;
    border: 1px solid #e1e1e1;
    border-radius: 2px;
    /*margin: 0 10px;*/
    padding: 10px;
}
.fixed-nav #wrapper {
    padding-top: 60px;
    box-sizing: border-box
}
.fixed-nav .minimalize-styl-2 {
    margin: 14px 5px 5px 15px
}
.body-small .navbar-fixed-top {
    margin-left: 0
}
body.mini-navbar .navbar-static-side {
    width: 70px
}
body.mini-navbar .nav-label,
body.mini-navbar .navbar-default .nav li a span,
body.mini-navbar .profile-element {
    display: none
}
body.canvas-menu .profile-element {
    display: block
}
body:not(.fixed-sidebar):not(.canvas-menu).mini-navbar .nav-second-level {
    display: none
}
body.mini-navbar .navbar-default .nav>li>a {
    font-size: 16px
}
body.mini-navbar .logo-element {
    display: block
}
body.canvas-menu .logo-element {
    display: none
}
body.mini-navbar .nav-header {
    padding: 0;
    background-color: #1ab394
}
body.canvas-menu .nav-header {
    padding: 33px 25px
}
body.mini-navbar #page-wrapper {
    margin: 0 0 0 70px
}
body.canvas-menu.mini-navbar #page-wrapper,
body.canvas-menu.mini-navbar .footer {
    margin: 0
}
body.canvas-menu .navbar-static-side,
body.fixed-sidebar .navbar-static-side {
    position: fixed;
    width: 220px;
    z-index: 2001;
    height: 100%
}
body.fixed-sidebar.mini-navbar .navbar-static-side {
    width: 70px
}
body.body-small.fixed-sidebar.mini-navbar #page-wrapper,
body.fixed-sidebar.mini-navbar #page-wrapper {
    margin: 0 0 0 70px
}
body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
    width: 70px
}
.fixed-sidebar.mini-navbar .nav li>.nav-second-level {
    display: none
}
.fixed-sidebar.mini-navbar .nav li.active {
    border-left-width: 0
}
.canvas-menu.mini-navbar .nav li:hover>.nav-second-level,
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
    position: absolute;
    left: 70px;
    top: 0;
    background-color: #2f4050;
    padding: 10px 10px 0;
    font-size: 12px;
    display: block;
    min-width: 140px;
    border-radius: 2px
}
body.fixed-sidebar.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
    font-size: 12px;
    border-radius: 3px
}
body.canvas-menu.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
    font-size: 13px;
    border-radius: 3px
}
.canvas-menu.mini-navbar .nav-second-level li a,
.fixed-sidebar.mini-navbar .nav-second-level li a {
    padding: 10px 10px 10px 15px
}
.canvas-menu.mini-navbar .nav-second-level,
.fixed-sidebar.mini-navbar .nav-second-level {
    position: relative;
    padding: 0;
    font-size: 13px
}
.canvas-menu.mini-navbar li.active .nav-second-level,
.fixed-sidebar.mini-navbar li.active .nav-second-level {
    left: 0
}
body.canvas-menu nav.navbar-static-side {
    z-index: 2001;
    background: #2f4050;
    height: 100%;
    position: fixed;
    display: none
}
body.canvas-menu.mini-navbar nav.navbar-static-side {
    display: block;
    width: 70px
}
.top-navigation #page-wrapper {
    margin-left: 0
}
.top-navigation .navbar-nav .dropdown-menu>.active>a {
    background: #fff;
    color: #1ab394;
    font-weight: 700
}
.white-bg .navbar-fixed-top,
.white-bg .navbar-static-top {
    background: #fff
}
.top-navigation .navbar {
    margin-bottom: 0
}
.top-navigation .nav>li>a {
    padding: 15px 20px;
    color: #676a6c
}
.top-navigation .nav>li a:focus,
.top-navigation .nav>li a:hover {
    background: #fff;
    color: #1ab394
}
.top-navigation .nav>li.active {
    background: #fff;
    border: none
}
.top-navigation .nav>li.active>a {
    color: #1ab394
}
.top-navigation .navbar-right {
    padding-right: 10px
}
.top-navigation .navbar-nav .dropdown-menu {
    box-shadow: none;
    border: 1px solid #e7eaec
}
.top-navigation .dropdown-menu>li>a {
    margin: 0;
    padding: 7px 20px
}
.navbar .dropdown-menu {
    margin-top: 0
}
.top-navigation .navbar-brand {
    background: #1ab394;
    color: #fff;
    padding: 15px 25px
}
.top-navigation .navbar-top-links li:last-child {
    margin-right: 0
}
.body-small.fixed-sidebar.mini-navbar .top-navigation #page-wrapper,
.canvas-menu #page-wrapper,
.mini-navbar .top-navigation #page-wrapper,
.top-navigation.body-small.fixed-sidebar.mini-navbar #page-wrapper,
.top-navigation.mini-navbar #page-wrapper {
    margin: 0
}
.fixed-nav #wrapper.top-navigation,
.top-navigation.fixed-nav #wrapper {
    margin-top: 50px
}
.top-navigation .footer.fixed {
    margin-left: 0!important
}
.top-navigation .wrapper.wrapper-content {
    padding: 40px
}
.body-small .top-navigation .wrapper.wrapper-content,
.top-navigation.body-small .wrapper.wrapper-content {
    padding: 40px 0
}
.navbar-toggle {
    color: #fff;
    padding: 6px 12px;
    font-size: 14px
}
.top-navigation .navbar-nav .open .dropdown-menu .dropdown-header,
.top-navigation .navbar-nav .open .dropdown-menu>li>a {
    padding: 10px 15px 10px 20px
}
@media (max-width:768px) {
    .top-navigation .navbar-header {
        display: block;
        float: none
    }
}
.menu-visible-lg,
.menu-visible-md {
    display: none!important
}
@media (min-width:1200px) {
    .menu-visible-lg {
        display: block!important
    }
}
@media (min-width:992px) {
    .menu-visible-md {
        display: block!important
    }
}
@media (max-width:767px) {
    .menu-visible-lg,
    .menu-visible-md {
        display: block!important
    }
}
.btn {
    border-radius: 3px
}
.float-e-margins .btn {
    margin-bottom: 5px
}
.btn-w-m {
    min-width: 120px
}
.btn-primary.btn-outline {
    color: #1ab394
}
.btn-success.btn-outline {
    color: #1c84c6
}
.btn-info.btn-outline {
    color: #23c6c8
}
.btn-warning.btn-outline {
    color: #f8ac59
}
.btn-danger.btn-outline {
    color: #ed5565
}
.btn-danger.btn-outline:hover,
.btn-info.btn-outline:hover,
.btn-primary.btn-outline:hover,
.btn-success.btn-outline:hover,
.btn-warning.btn-outline:hover {
    color: #fff
}
.btn-primary {
    background-color: #1ab394;
    border-color: #1ab394;
    color: #FFF
}
.btn-primary.active,
.btn-primary:active,
.btn-primary:focus,
.btn-primary:hover,
.open .dropdown-toggle.btn-primary {
    background-color: #18a689;
    border-color: #18a689;
    color: #FFF
}
.btn-primary.active,
.btn-primary:active,
.open .dropdown-toggle.btn-primary {
    background-image: none
}
.btn-primary.active[disabled],
.btn-primary.disabled,
.btn-primary.disabled.active,
.btn-primary.disabled:active,
.btn-primary.disabled:focus,
.btn-primary.disabled:hover,
.btn-primary[disabled],
.btn-primary[disabled]:active,
.btn-primary[disabled]:focus,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-primary.active,
fieldset[disabled] .btn-primary:active,
fieldset[disabled] .btn-primary:focus,
fieldset[disabled] .btn-primary:hover {
    background-color: #1dc5a3;
    border-color: #1dc5a3
}
.btn-success {
    background-color: #1c84c6;
    border-color: #1c84c6;
    color: #FFF
}
.btn-success.active,
.btn-success:active,
.btn-success:focus,
.btn-success:hover,
.open .dropdown-toggle.btn-success {
    background-color: #1a7bb9;
    border-color: #1a7bb9;
    color: #FFF
}
.btn-success.active,
.btn-success:active,
.open .dropdown-toggle.btn-success {
    background-image: none
}
.btn-success.active[disabled],
.btn-success.disabled,
.btn-success.disabled.active,
.btn-success.disabled:active,
.btn-success.disabled:focus,
.btn-success.disabled:hover,
.btn-success[disabled],
.btn-success[disabled]:active,
.btn-success[disabled]:focus,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-success.active,
fieldset[disabled] .btn-success:active,
fieldset[disabled] .btn-success:focus,
fieldset[disabled] .btn-success:hover {
    background-color: #1f90d8;
    border-color: #1f90d8
}
.btn-info {
    background-color: #23c6c8;
    border-color: #23c6c8;
    color: #FFF
}
.btn-info.active,
.btn-info:active,
.btn-info:focus,
.btn-info:hover,
.open .dropdown-toggle.btn-info {
    background-color: #21b9bb;
    border-color: #21b9bb;
    color: #FFF
}
.btn-info.active,
.btn-info:active,
.open .dropdown-toggle.btn-info {
    background-image: none
}
.btn-info.active[disabled],
.btn-info.disabled,
.btn-info.disabled.active,
.btn-info.disabled:active,
.btn-info.disabled:focus,
.btn-info.disabled:hover,
.btn-info[disabled],
.btn-info[disabled]:active,
.btn-info[disabled]:focus,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-info.active,
fieldset[disabled] .btn-info:active,
fieldset[disabled] .btn-info:focus,
fieldset[disabled] .btn-info:hover {
    background-color: #26d7d9;
    border-color: #26d7d9
}
.btn-default {
    background-color: #c2c2c2;
    border-color: #c2c2c2;
    color: #FFF
}
.btn-default.active,
.btn-default:active,
.btn-default:focus,
.btn-default:hover,
.open .dropdown-toggle.btn-default {
    background-color: #bababa;
    border-color: #bababa;
    color: #FFF
}
.btn-default.active,
.btn-default:active,
.open .dropdown-toggle.btn-default {
    background-image: none
}
.btn-default.active[disabled],
.btn-default.disabled,
.btn-default.disabled.active,
.btn-default.disabled:active,
.btn-default.disabled:focus,
.btn-default.disabled:hover,
.btn-default[disabled],
.btn-default[disabled]:active,
.btn-default[disabled]:focus,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-default.active,
fieldset[disabled] .btn-default:active,
fieldset[disabled] .btn-default:focus,
fieldset[disabled] .btn-default:hover {
    background-color: #ccc;
    border-color: #ccc
}
.btn-warning {
    background-color: #f8ac59;
    border-color: #f8ac59;
    color: #FFF
}
.btn-warning.active,
.btn-warning:active,
.btn-warning:focus,
.btn-warning:hover,
.open .dropdown-toggle.btn-warning {
    background-color: #f7a54a;
    border-color: #f7a54a;
    color: #FFF
}
.btn-warning.active,
.btn-warning:active,
.open .dropdown-toggle.btn-warning {
    background-image: none
}
.btn-warning.active[disabled],
.btn-warning.disabled,
.btn-warning.disabled.active,
.btn-warning.disabled:active,
.btn-warning.disabled:focus,
.btn-warning.disabled:hover,
.btn-warning[disabled],
.btn-warning[disabled]:active,
.btn-warning[disabled]:focus,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-warning.active,
fieldset[disabled] .btn-warning:active,
fieldset[disabled] .btn-warning:focus,
fieldset[disabled] .btn-warning:hover {
    background-color: #f9b66d;
    border-color: #f9b66d
}
.btn-danger {
    background-color: #ed5565;
    border-color: #ed5565;
    color: #FFF
}
.btn-danger.active,
.btn-danger:active,
.btn-danger:focus,
.btn-danger:hover,
.open .dropdown-toggle.btn-danger {
    background-color: #ec4758;
    border-color: #ec4758;
    color: #FFF
}
.btn-danger.active,
.btn-danger:active,
.open .dropdown-toggle.btn-danger {
    background-image: none
}
.btn-danger.active[disabled],
.btn-danger.disabled,
.btn-danger.disabled.active,
.btn-danger.disabled:active,
.btn-danger.disabled:focus,
.btn-danger.disabled:hover,
.btn-danger[disabled],
.btn-danger[disabled]:active,
.btn-danger[disabled]:focus,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger,
fieldset[disabled] .btn-danger.active,
fieldset[disabled] .btn-danger:active,
fieldset[disabled] .btn-danger:focus,
fieldset[disabled] .btn-danger:hover {
    background-color: #ef6776;
    border-color: #ef6776
}
.btn-link {
    color: inherit
}
.btn-link.active,
.btn-link:active,
.btn-link:focus,
.btn-link:hover,
.open .dropdown-toggle.btn-link {
    color: #1ab394;
    text-decoration: none
}
.btn-link.active,
.btn-link:active,
.open .dropdown-toggle.btn-link {
    background-image: none
}
.btn-link.active[disabled],
.btn-link.disabled,
.btn-link.disabled.active,
.btn-link.disabled:active,
.btn-link.disabled:focus,
.btn-link.disabled:hover,
.btn-link[disabled],
.btn-link[disabled]:active,
.btn-link[disabled]:focus,
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link,
fieldset[disabled] .btn-link.active,
fieldset[disabled] .btn-link:active,
fieldset[disabled] .btn-link:focus,
fieldset[disabled] .btn-link:hover {
    color: #cacaca
}
.btn-white {
    color: inherit;
    background: #fff;
    border: 1px solid #e7eaec
}
.btn-white.active,
.btn-white:active,
.btn-white:focus,
.btn-white:hover,
.open .dropdown-toggle.btn-white {
    color: inherit;
    border: 1px solid #d2d2d2
}
.btn-white.active,
.btn-white:active {
    box-shadow: 0 2px 5px rgba(0, 0, 0, .15)inset
}
.btn-white.active,
.btn-white:active,
.open .dropdown-toggle.btn-white {
    background-image: none
}
.btn-white.active[disabled],
.btn-white.disabled,
.btn-white.disabled.active,
.btn-white.disabled:active,
.btn-white.disabled:focus,
.btn-white.disabled:hover,
.btn-white[disabled],
.btn-white[disabled]:active,
.btn-white[disabled]:focus,
.btn-white[disabled]:hover,
fieldset[disabled] .btn-white,
fieldset[disabled] .btn-white.active,
fieldset[disabled] .btn-white:active,
fieldset[disabled] .btn-white:focus,
fieldset[disabled] .btn-white:hover {
    color: #cacaca
}
.form-control,
.form-control:focus,
.has-error .form-control:focus,
.has-success .form-control:focus,
.has-warning .form-control:focus,
.navbar-collapse,
.navbar-form,
.navbar-form-custom .form-control:focus,
.navbar-form-custom .form-control:hover,
.open .btn.dropdown-toggle,
.panel,
.popover,
.progress,
.progress-bar {
    box-shadow: none
}
.btn-outline {
    color: inherit;
    background-color: transparent;
    -webkit-transition: all .5s;
    transition: all .5s
}
.btn-rounded {
    border-radius: 50px
}
.btn-large-dim {
    width: 90px;
    height: 90px;
    font-size: 42px
}
button.dim {
    display: inline-block;
    color: #fff;
    text-decoration: none;
    text-transform: uppercase;
    text-align: center;
    padding-top: 6px;
    margin-right: 10px;
    position: relative;
    cursor: pointer;
    border-radius: 5px;
    font-weight: 600;
    margin-bottom: 20px!important
}
button.dim:active {
    top: 3px
}
button.btn-primary.dim {
    box-shadow: inset 0 0 0 #16987e, 0 5px 0 0 #16987e, 0 10px 5px #999
}
button.btn-primary.dim:active {
    box-shadow: inset 0 0 0 #16987e, 0 2px 0 0 #16987e, 0 5px 3px #999
}
button.btn-default.dim {
    box-shadow: inset 0 0 0 #b3b3b3, 0 5px 0 0 #b3b3b3, 0 10px 5px #999
}
button.btn-default.dim:active {
    box-shadow: inset 0 0 0 #b3b3b3, 0 2px 0 0 #b3b3b3, 0 5px 3px #999
}
button.btn-warning.dim {
    box-shadow: inset 0 0 0 #f79d3c, 0 5px 0 0 #f79d3c, 0 10px 5px #999
}
button.btn-warning.dim:active {
    box-shadow: inset 0 0 0 #f79d3c, 0 2px 0 0 #f79d3c, 0 5px 3px #999
}
button.btn-info.dim {
    box-shadow: inset 0 0 0 #1eacae, 0 5px 0 0 #1eacae, 0 10px 5px #999
}
button.btn-info.dim:active {
    box-shadow: inset 0 0 0 #1eacae, 0 2px 0 0 #1eacae, 0 5px 3px #999
}
button.btn-success.dim {
    box-shadow: inset 0 0 0 #1872ab, 0 5px 0 0 #1872ab, 0 10px 5px #999
}
button.btn-success.dim:active {
    box-shadow: inset 0 0 0 #1872ab, 0 2px 0 0 #1872ab, 0 5px 3px #999
}
button.btn-danger.dim {
    box-shadow: inset 0 0 0 #ea394c, 0 5px 0 0 #ea394c, 0 10px 5px #999
}
button.btn-danger.dim:active {
    box-shadow: inset 0 0 0 #ea394c, 0 2px 0 0 #ea394c, 0 5px 3px #999
}
button.dim:before {
    font-size: 50px;
    line-height: 1em;
    font-weight: 400;
    color: #fff;
    display: block;
    padding-top: 10px
}
button.dim:active:before {
    top: 7px;
    font-size: 50px
}
.label {
    background-color: #d1dade;
    color: #5e5e5e;
    font-size: 10px;
    font-weight: 600;
    padding: 3px 8px;
    text-shadow: none
}
.badge {
    background-color: #d1dade;
    color: #5e5e5e;
    font-size: 11px;
    font-weight: 600;
    padding-bottom: 4px;
    padding-left: 6px;
    padding-right: 6px;
    text-shadow: none
}
.badge-primary,
.label-primary {
    background-color: #1ab394;
    color: #FFF
}
.badge-success,
.label-success {
    background-color: #1c84c6;
    color: #FFF
}
.badge-warning,
.label-warning {
    background-color: #f8ac59;
    color: #FFF
}
.badge-warning-light,
.label-warning-light {
    background-color: #f8ac59;
    color: #fff
}
.badge-danger,
.label-danger {
    background-color: #ed5565;
    color: #FFF
}
.badge-info,
.label-info {
    background-color: #23c6c8;
    color: #FFF
}
.badge-inverse,
.label-inverse {
    background-color: #262626;
    color: #FFF
}
.badge-white,
.label-white {
    background-color: #FFF;
    color: #5E5E5E
}
.badge-disable,
.label-white {
    background-color: #2A2E36;
    color: #8B91A0
}
.chosen-container-single .chosen-single {
    background: #fff;
    box-shadow: none;
    -moz-box-sizing: border-box;
    background-color: #FFF;
    border: 1px solid #CBD5DD;
    border-radius: 2px;
    cursor: text;
    height: auto!important;
    margin: 0;
    min-height: 30px;
    overflow: hidden;
    padding: 4px 12px;
    position: relative;
    width: 100%
}
.chosen-container-multi .chosen-choices li.search-choice {
    background: #f1f1f1;
    border: 1px solid #ededed;
    border-radius: 2px;
    box-shadow: none;
    color: #333;
    cursor: default;
    line-height: 13px;
    margin: 3px 0 3px 5px;
    padding: 3px 20px 3px 5px;
    position: relative
}
.pagination>.active>a,
.pagination>.active>a:focus,
.pagination>.active>a:hover,
.pagination>.active>span,
.pagination>.active>span:focus,
.pagination>.active>span:hover {
    background-color: #f4f4f4;
    border-color: #DDD;
    color: inherit;
    cursor: default;
    z-index: 2
}
.pagination>li>a,
.pagination>li>span {
    background-color: #FFF;
    border: 1px solid #DDD;
    color: inherit;
    float: left;
    line-height: 1.42857;
    margin-left: -1px;
    padding: 4px 10px;
    position: relative;
    text-decoration: none
}
.tooltip-inner {
    background-color: #2F4050
}
.tooltip.top .tooltip-arrow {
    border-top-color: #2F4050
}
.tooltip.right .tooltip-arrow {
    border-right-color: #2F4050
}
.tooltip.bottom .tooltip-arrow {
    border-bottom-color: #2F4050
}
.tooltip.left .tooltip-arrow {
    border-left-color: #2F4050
}
.easypiechart {
    position: relative;
    text-align: center
}
.easypiechart .h2 {
    margin-left: 10px;
    margin-top: 10px;
    display: inline-block
}
.easypiechart canvas {
    top: 0;
    left: 0
}
.easypiechart .easypie-text {
    line-height: 1;
    position: absolute;
    top: 33px;
    width: 100%;
    z-index: 1
}
.easypiechart img {
    margin-top: -4px
}
.jqstooltip {
    box-sizing: content-box
}
.fc-state-default {
    background-color: #fff;
    background-image: none;
    background-repeat: repeat-x;
    box-shadow: none;
    color: #333;
    text-shadow: none;
    border: 1px solid
}
.fc-button {
    color: inherit;
    border: 1px solid #e7eaec;
    cursor: pointer;
    display: inline-block;
    height: 1.9em;
    line-height: 1.9em;
    overflow: hidden;
    padding: 0 .6em;
    position: relative;
    white-space: nowrap
}
.fc-state-active {
    background-color: #1ab394;
    border-color: #1ab394;
    color: #fff
}
.fc-header-title h2 {
    font-size: 16px;
    font-weight: 600;
    color: inherit
}
.fc-content .fc-widget-content,
.fc-content .fc-widget-header {
    border-color: #e7eaec;
    font-weight: 400
}
.fc-border-separate tbody {
    background-color: #F8F8F8
}
.fc-state-highlight {
    background: none repeat scroll 0 0 #FCF8E3
}
.external-event {
    padding: 5px 10px;
    border-radius: 2px;
    cursor: pointer;
    margin-bottom: 5px
}
.fc-ltr .fc-event-hori.fc-event-end,
.fc-rtl .fc-event-hori.fc-event-start {
    border-radius: 2px
}
.fc-agenda .fc-event-time,
.fc-event,
.fc-event a {
    padding: 4px 6px;
    background-color: #1ab394;
    border-color: #1ab394
}
.fc-event-time,
.fc-event-title {
    color: #717171;
    padding: 0 1px
}
.ui-calendar .fc-event-time,
.ui-calendar .fc-event-title {
    color: #fff
}
.chat-activity-list .chat-element {
    border-bottom: 1px solid #e7eaec
}
.chat-element:first-child {
    margin-top: 0
}
.chat-element {
    padding-bottom: 15px
}
.chat-element,
.chat-element .media {
    margin-top: 15px
}
.chat-element,
.media-body {
    overflow: hidden
}
.media-body {
    display: block;
    width: auto
}
.chat-element>.pull-left {
    margin-right: 10px
}
.chat-element img.img-circle,
.dropdown-messages-box img.img-circle {
    width: 38px;
    height: 38px
}
.chat-element .well {
    border: 1px solid #e7eaec;
    box-shadow: none;
    margin-top: 10px;
    margin-bottom: 5px;
    padding: 10px 20px;
    font-size: 11px;
    line-height: 16px
}
.chat-element .actions {
    margin-top: 10px
}
.chat-element .photos {
    margin: 10px 0
}
.right.chat-element>.pull-right {
    margin-left: 10px
}
.chat-photo {
    max-height: 180px;
    border-radius: 4px;
    overflow: hidden;
    margin-right: 10px;
    margin-bottom: 10px
}
.chat {
    margin: 0;
    padding: 0;
    list-style: none
}
.chat li {
    margin-bottom: 10px;
    padding-bottom: 5px;
    border-bottom: 1px dotted #B3A9A9
}
.chat li.left .chat-body {
    margin-left: 60px
}
.chat li.right .chat-body {
    margin-right: 60px
}
.chat li .chat-body p {
    margin: 0;
    color: #777
}
.chat .glyphicon,
.panel .slidedown .glyphicon {
    margin-right: 5px
}
.chat-panel .panel-body {
    height: 350px;
    overflow-y: scroll
}
a.list-group-item.active,
a.list-group-item.active:focus,
a.list-group-item.active:hover {
    background-color: #1ab394;
    border-color: #1ab394;
    color: #FFF;
    z-index: 2
}
.list-group-item-heading {
    margin-top: 10px
}
.list-group-item-text {
    margin: 0 0 10px;
    color: inherit;
    font-size: 12px;
    line-height: inherit
}
.no-padding .list-group-item {
    border-left: none;
    border-right: none;
    border-bottom: none
}
.no-padding .list-group-item:first-child {
    border-left: none;
    border-right: none;
    border-bottom: none;
    border-top: none
}
.no-padding .list-group {
    margin-bottom: 0
}
.list-group-item {
    background-color: inherit;
    border: 1px solid #e7eaec;
    display: block;
    margin-bottom: -1px;
    padding: 10px 15px;
    position: relative
}
.elements-list .list-group-item {
    border-left: none;
    border-right: none;
    padding: 15px 25px
}
.elements-list .list-group-item:first-child {
    border-left: none;
    border-right: none;
    border-top: none!important
}
.elements-list .list-group {
    margin-bottom: 0
}
.elements-list a {
    color: inherit
}
.elements-list .list-group-item.active,
.elements-list .list-group-item:hover {
    background: #f3f3f4;
    color: inherit;
    border-color: #e7eaec;
    border-radius: 0
}
.elements-list li.active {
    -webkit-transition: none;
    transition: none
}
.element-detail-box {
    padding: 25px
}
.flot-chart {
    display: block;
    height: 200px
}
.widget .flot-chart.dashboard-chart {
    display: block;
    height: 120px;
    margin-top: 40px
}
.flot-chart.dashboard-chart {
    display: block;
    height: 180px;
    margin-top: 40px
}
.flot-chart-content {
    width: 100%;
    height: 100%
}
.flot-chart-pie-content {
    width: 200px;
    height: 200px;
    margin: auto
}
.jqstooltip {
    position: absolute;
    display: block;
    left: 0;
    top: 0;
    visibility: hidden;
    background: #2b303a;
    background-color: rgba(43, 48, 58, .8);
    color: #fff;
    text-align: left;
    white-space: nowrap;
    z-index: 10000;
    padding: 5px;
    min-height: 22px;
    border-radius: 3px
}
.jqsfield {
    color: #fff;
    text-align: left
}
.h-200 {
    min-height: 200px
}
.legendLabel {
    padding-left: 5px
}
.stat-list li:first-child {
    margin-top: 0
}
.stat-list {
    list-style: none;
    padding: 0;
    margin: 0
}
.stat-percent {
    float: right
}
.stat-list li {
    margin-top: 15px;
    position: relative
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_desc_disabled {
    background: 0 0
}
table.dataTable thead .sorting_asc:after {
    float: right;
    font-family: fontawesome
}
table.dataTable thead .sorting_desc:after {
    content: "\f0dd";
    float: right;
    font-family: fontawesome
}
table.dataTable thead .sorting:after {
    content: "\f0dc";
    float: right;
    font-family: fontawesome;
    color: rgba(50, 50, 50, .5)
}
.dataTables_wrapper {
    padding-bottom: 30px
}
.img-circle {
    border-radius: 50%
}
.btn-circle {
    width: 30px;
    height: 30px;
    padding: 6px 0;
    border-radius: 15px;
    text-align: center;
    font-size: 12px;
    line-height: 1.428571429
}
.btn-circle.btn-lg {
    width: 50px;
    height: 50px;
    padding: 10px 16px;
    border-radius: 25px;
    font-size: 18px;
    line-height: 1.33
}
.btn-circle.btn-xl {
    width: 70px;
    height: 70px;
    padding: 10px 16px;
    border-radius: 35px;
    font-size: 24px;
    line-height: 1.33
}
.show-grid [class^=col-] {
    padding-top: 10px;
    padding-bottom: 10px;
    border: 1px solid #ddd;
    background-color: #eee!important
}
.show-grid {
    margin: 15px 0
}
.css-animation-box h1 {
    font-size: 44px
}
.animation-efect-links a {
    padding: 4px 6px;
    font-size: 12px
}
#animation_box {
    background-color: #f9f8f8;
    border-radius: 16px;
    width: 80%;
    margin: 0 auto;
    padding-top: 80px
}
.animation-text-box {
    position: absolute;
    margin-top: 40px;
    left: 50%;
    margin-left: -100px;
    width: 200px
}
.animation-text-info {
    position: absolute;
    margin-top: -60px;
    left: 50%;
    margin-left: -100px;
    width: 200px;
    font-size: 10px
}
.animation-text-box h2 {
    font-size: 54px;
    font-weight: 600;
    margin-bottom: 5px
}
.animation-text-box p {
    font-size: 12px;
    text-transform: uppercase
}
.pace {
    -webkit-pointer-events: none;
    pointer-events: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none
}
.pace .pace-progress {
    background: #1ab394;
    position: fixed;
    z-index: 2000;
    top: 0;
    width: 100%;
    height: 2px
}
.pace-inactive {
    display: none
}
.widget {
    border-radius: 5px;
    padding: 15px 20px;
    margin-bottom: 10px;
    margin-top: 10px
}
.widget.style1 h2 {
    font-size: 30px
}
.widget h2,
.widget h3 {
    margin-top: 5px;
    margin-bottom: 0
}
.widget-text-box {
    padding: 20px;
    border: 1px solid #e7eaec;
    background: #fff
}
.widget-head-color-box {
    border-radius: 5px 5px 0 0;
    margin-top: 10px
}
.widget .flot-chart {
    height: 100px
}
.vertical-align div {
    display: inline-block;
    vertical-align: middle
}
.vertical-align h2,
.vertical-align h3 {
    margin: 0
}
.todo-list {
    list-style: none outside none;
    margin: 0;
    padding: 0;
    font-size: 14px
}
.todo-list.small-list {
    font-size: 12px
}
.todo-list.small-list>li {
    background: #f3f3f4;
    border-left: none;
    border-right: none;
    border-radius: 4px;
    color: inherit;
    margin-bottom: 2px;
    padding: 6px 6px 6px 12px
}
.todo-list.small-list .btn-group-xs>.btn,
.todo-list.small-list .btn-xs {
    border-radius: 5px;
    font-size: 10px;
    line-height: 1.5;
    padding: 1px 2px 1px 5px
}
.todo-list>li {
    background: #f3f3f4;
    border-left: 6px solid #e7eaec;
    border-right: 6px solid #e7eaec;
    border-radius: 4px;
    color: inherit;
    margin-bottom: 2px;
    padding: 10px
}
.todo-list .handle {
    cursor: move;
    display: inline-block;
    font-size: 16px;
    margin: 0 5px
}
.todo-list>li .label {
    font-size: 9px;
    margin-left: 10px
}
.check-link {
    font-size: 16px
}
.todo-completed {
    text-decoration: line-through
}
.geo-statistic h1 {
    font-size: 36px;
    margin-bottom: 0
}
.glyphicon.fa {
    font-family: FontAwesome
}
.inline {
    display: inline-block!important
}
.input-s-sm {
    width: 120px
}
.input-s {
    width: 200px
}
.input-s-lg {
    width: 250px
}
.i-checks {
    padding-left: 0
}
.form-control,
.single-line {
    background-color: #FFF;
    background-image: none;
    border: 1px solid #e5e6e7;
    border-radius: 1px;
    color: inherit;
    display: block;
    padding: 6px 12px;
    -webkit-transition: border-color .15s ease-in-out 0s, box-shadow .15s ease-in-out 0s;
    transition: border-color .15s ease-in-out 0s, box-shadow .15s ease-in-out 0s;
    width: 100%;
    font-size: 14px
}
.form-control:focus,
.single-line:focus {
    border-color: #1ab394!important
}
.has-success .form-control {
    border-color: #1ab394
}
.has-warning .form-control {
    border-color: #f8ac59
}
.has-error .form-control {
    border-color: #ed5565
}
.has-success .control-label {
    color: #1ab394
}
.has-warning .control-label {
    color: #f8ac59
}
.has-error .control-label {
    color: #ed5565
}
.input-group-addon {
    background-color: #fff;
    border: 1px solid #E5E6E7;
    border-radius: 1px;
    color: inherit;
    font-size: 14px;
    font-weight: 400;
    line-height: 1;
    padding: 6px 12px;
    text-align: center
}
.spinner-buttons.input-group-btn .btn-xs {
    line-height: 1.13
}
.spinner-buttons.input-group-btn {
    width: 20%
}
.noUi-connect {
    background: none repeat scroll 0 0 #1ab394;
    box-shadow: none
}
.slider_red .noUi-connect {
    background: none repeat scroll 0 0 #ed5565;
    box-shadow: none
}
.ui-sortable .ibox-title {
    cursor: move
}
.ui-sortable-placeholder {
    border: 1px dashed #cecece!important;
    visibility: visible!important;
    background: #e7eaec
}
.ibox.ui-sortable-placeholder {
    margin: 0 0 23px!important
}
.tabs-container .panel-body {
    background: #fff;
    border: 1px solid #e7eaec;
    border-radius: 2px;
    padding: 20px;
    position: relative
}
.tabs-container .nav-tabs>li.active>a,
.tabs-container .nav-tabs>li.active>a:focus,
.tabs-container .nav-tabs>li.active>a:hover {
    background-color: #fff
}
.tabs-container .nav-tabs>li {
    float: left;
    margin-bottom: -1px
}
.tabs-container .nav-tabs>li.active>a,
.tabs-container .nav-tabs>li.active>a:focus,
.tabs-container .nav-tabs>li.active>a:hover {
    border: 1px solid #e7eaec;
    border-bottom-color: transparent
}
.tabs-container .nav-tabs {
    border-bottom: 1px solid #e7eaec
}
.tabs-container .tab-pane .panel-body {
    border-top: none
}
.tabs-container .tabs-left .tab-pane .panel-body,
.tabs-container .tabs-right .tab-pane .panel-body {
    border-top: 1px solid #e7eaec
}
.tabs-container .nav-tabs>li a:hover {
    background: 0 0;
    border-color: transparent
}
.tabs-container .tabs-below>.nav-tabs,
.tabs-container .tabs-left>.nav-tabs,
.tabs-container .tabs-right>.nav-tabs {
    border-bottom: 0
}
.tabs-container .tabs-left .panel-body {
    position: static
}
.tabs-container .tabs-left>.nav-tabs,
.tabs-container .tabs-right>.nav-tabs {
    width: 20%
}
.tabs-container .tabs-left .panel-body {
    width: 80%;
    margin-left: 20%
}
.tabs-container .tabs-right .panel-body {
    width: 80%;
    margin-right: 20%
}
.tabs-container .pill-content>.pill-pane,
.tabs-container .tab-content>.tab-pane {
    display: none
}
.tabs-container .pill-content>.active,
.tabs-container .tab-content>.active {
    display: block
}
.tabs-container .tabs-below>.nav-tabs {
    border-top: 1px solid #e7eaec
}
.tabs-container .tabs-below>.nav-tabs>li {
    margin-top: -1px;
    margin-bottom: 0
}
.tabs-container .tabs-below>.nav-tabs>li>a {
    border-radius: 0 0 4px 4px
}
.tabs-container .tabs-below>.nav-tabs>li>a:focus,
.tabs-container .tabs-below>.nav-tabs>li>a:hover {
    border-top-color: #e7eaec;
    border-bottom-color: transparent
}
.tabs-container .tabs-left>.nav-tabs>li,
.tabs-container .tabs-right>.nav-tabs>li {
    float: none
}
.tabs-container .tabs-left>.nav-tabs>li>a,
.tabs-container .tabs-right>.nav-tabs>li>a {
    min-width: 74px;
    margin-right: 0;
    margin-bottom: 3px
}
.tabs-container .tabs-left>.nav-tabs {
    float: left;
    margin-right: 19px
}
.tabs-container .tabs-left>.nav-tabs>li>a {
    margin-right: -1px;
    border-radius: 4px 0 0 4px
}
.tabs-container .tabs-left>.nav-tabs .active>a,
.tabs-container .tabs-left>.nav-tabs .active>a:focus,
.tabs-container .tabs-left>.nav-tabs .active>a:hover {
    border-color: #e7eaec transparent #e7eaec #e7eaec;
    *border-right-color: #fff
}
.tabs-container .tabs-right>.nav-tabs {
    float: right;
    margin-left: 19px
}
.tabs-container .tabs-right>.nav-tabs>li>a {
    margin-left: -1px;
    border-radius: 0 4px 4px 0
}
.tabs-container .tabs-right>.nav-tabs .active>a,
.tabs-container .tabs-right>.nav-tabs .active>a:focus,
.tabs-container .tabs-right>.nav-tabs .active>a:hover {
    border-color: #e7eaec #e7eaec #e7eaec transparent;
    *border-left-color: #fff;
    z-index: 1
}
.onoffswitch {
    position: relative;
    width: 54px;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none
}
.onoffswitch-checkbox {
    display: none
}
.onoffswitch-label {
    display: block;
    overflow: hidden;
    cursor: pointer;
    border: 2px solid #1AB394;
    border-radius: 3px
}
.onoffswitch-inner {
    display: block;
    width: 200%;
    margin-left: -100%;
    -webkit-transition: margin .3s ease-in 0s;
    transition: margin .3s ease-in 0s
}
.onoffswitch-inner:after,
.onoffswitch-inner:before {
    display: block;
    float: left;
    width: 50%;
    height: 16px;
    padding: 0;
    line-height: 16px;
    font-size: 10px;
    font-family: Trebuchet, Arial, sans-serif;
    font-weight: 700;
    box-sizing: border-box
}
.onoffswitch-inner:before {
    content: "ON";
    padding-left: 7px;
    background-color: #1AB394;
    color: #FFF
}
.onoffswitch-inner:after {
    content: "OFF";
    padding-right: 7px;
    background-color: #FFF;
    color: #919191;
    text-align: right
}
.onoffswitch-switch {
    display: block;
    width: 18px;
    margin: 0;
    background: #FFF;
    border: 2px solid #1AB394;
    border-radius: 3px;
    position: absolute;
    top: 0;
    bottom: 0;
    right: 36px;
    -webkit-transition: all .3s ease-in 0s;
    transition: all .3s ease-in 0s
}
.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner {
    margin-left: 0
}
.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch {
    right: 0
}
.dd {
    position: relative;
    display: block;
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 13px;
    line-height: 20px
}
.dd-list {
    display: block;
    position: relative;
    margin: 0;
    padding: 0;
    list-style: none
}
.dd-list .dd-list {
    padding-left: 30px
}
.dd-collapsed .dd-list {
    display: none
}
.dd-empty,
.dd-item,
.dd-placeholder {
    display: block;
    position: relative;
    margin: 0;
    padding: 0;
    min-height: 20px;
    font-size: 13px;
    line-height: 20px
}
.dd-handle {
    display: block;
    margin: 5px 0;
    padding: 5px 10px;
    color: #333;
    text-decoration: none;
    border: 1px solid #e7eaec;
    background: #f5f5f5;
    border-radius: 3px;
    box-sizing: border-box;
    -moz-box-sizing: border-box
}
.dd-handle span {
    font-weight: 700
}
.dd-handle:hover {
    background: #f0f0f0;
    cursor: pointer;
    font-weight: 700
}
.dd-item>button {
    display: block;
    position: relative;
    cursor: pointer;
    float: left;
    width: 25px;
    height: 20px;
    margin: 5px 0;
    padding: 0;
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
    border: 0;
    background: 0 0;
    font-size: 12px;
    line-height: 1;
    text-align: center;
    font-weight: 700
}
.dd-item>button:before {
    content: '+';
    display: block;
    position: absolute;
    width: 100%;
    text-align: center;
    text-indent: 0
}
.dd-item>button[data-action=collapse]:before {
    content: '-'
}
#nestable2 .dd-item>button {
    font-family: FontAwesome;
    height: 34px;
    width: 33px;
    color: #c1c1c1
}
#nestable2 .dd-item>button:before {
    content: "\f067"
}
#nestable2 .dd-item>button[data-action=collapse]:before {
    content: "\f068"
}
.dd-empty,
.dd-placeholder {
    margin: 5px 0;
    padding: 0;
    min-height: 30px;
    background: #f2fbff;
    border: 1px dashed #b6bcbf;
    box-sizing: border-box;
    -moz-box-sizing: border-box
}
.dd-empty {
    border: 1px dashed #bbb;
    min-height: 100px;
    background-color: #e5e5e5;
    background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
    background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
    background-size: 60px 60px;
    background-position: 0 0, 30px 30px
}
.dd-dragel {
    position: absolute;
    z-index: 9999;
    pointer-events: none
}
.dd-dragel>.dd-item .dd-handle {
    margin-top: 0
}
.dd-dragel .dd-handle {
    box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1)
}
.nestable-lists {
    display: block;
    clear: both;
    padding: 30px 0;
    width: 100%;
    border: 0;
    border-top: 2px solid #ddd;
    border-bottom: 2px solid #ddd
}
#nestable-menu {
    padding: 0;
    margin: 10px 0 20px
}
#nestable-output,
#nestable2-output {
    width: 100%;
    line-height: 1.333333em;
    font-family: lucida grande, lucida sans unicode, helvetica, arial, sans-serif
}
#nestable2 .dd-handle {
    color: inherit;
    border: 1px dashed #e7eaec;
    background: #f3f3f4;
    padding: 10px
}
#nestable2 span.label {
    margin-right: 10px
}
#nestable-output,
#nestable2-output {
    font-size: 12px;
    padding: 25px;
    box-sizing: border-box;
    -moz-box-sizing: border-box
}
.CodeMirror {
    border: 1px solid #eee;
    height: auto
}
.CodeMirror-scroll {
    overflow-y: hidden;
    overflow-x: auto
}
.google-map {
    height: 300px
}
label.error {
    color: #cc5965;
    display: inline-block;
    margin-left: 5px
}
.form-control.error {
    border: 1px dotted #cc5965
}
.gridStyle {
    border: 1px solid #d4d4d4;
    width: 100%;
    height: 400px
}
.gridStyle2 {
    border: 1px solid #d4d4d4;
    width: 500px;
    height: 300px
}
.ngH eaderCell {
    border-right: none;
    border-bottom: 1px solid #e7eaec
}
.ngCell {
    border-right: none
}
.ngTopPanel {
    background: #F5F5F6
}
.ngRow.even {
    background: #f9f9f9
}
.ngRow.selected {
    background: #EBF2F1
}
.ngRow {
    border-bottom: 1px solid #e7eaec
}
.ngCell {
    background-color: transparent
}
.ngHeaderCell {
    border-right: none
}
#toast-container>.toast {
    background-image: none!important
}
#toast-container>.toast:before {
    position: fixed;
    font-family: FontAwesome;
    font-size: 24px;
    line-height: 24px;
    float: left;
    color: #FFF;
    padding-right: .5em;
    margin: auto .5em auto -1.5em
}
#toast-container>div {
    box-shadow: 0 0 3px #999;
    opacity: .9;
    -ms-filter: alpha(opacity=90);
    filter: alpha(opacity=90)
}
#toast-container>:hover {
    box-shadow: 0 0 4px #999;
    opacity: 1;
    -ms-filter: alpha(opacity=100);
    filter: alpha(opacity=100);
    cursor: pointer
}
.toast,
.toast-success {
    background-color: #1ab394
}
.toast-error {
    background-color: #ed5565
}
.toast-info {
    background-color: #23c6c8
}
.toast-warning {
    background-color: #f8ac59
}
.toast-top-full-width {
    margin-top: 20px
}
.toast-bottom-full-width {
    margin-bottom: 20px
}
.img-container,
.img-preview {
    overflow: hidden;
    text-align: center;
    width: 100%
}
.img-preview-sm {
    height: 130px;
    width: 200px
}
.forum-post-container .media {
    margin: 10px;
    padding: 20px 10px;
    border-bottom: 1px solid #f1f1f1
}
.forum-avatar {
    float: left;
    margin-right: 20px;
    text-align: center;
    width: 110px
}
.forum-avatar .img-circle {
    height: 48px;
    width: 48px
}
.author-info {
    color: #676a6c;
    font-size: 11px;
    margin-top: 5px;
    text-align: center
}
.forum-post-info {
    padding: 9px 12px 6px;
    background: #f9f9f9;
    border: 1px solid #f1f1f1
}
.media-body>.media {
    background: #f9f9f9;
    border-radius: 3px;
    border: 1px solid #f1f1f1
}
.forum-post-container .media-body .photos {
    margin: 10px 0
}
.forum-photo {
    max-width: 140px;
    border-radius: 3px
}
.media-body>.media .forum-avatar {
    width: 70px;
    margin-right: 10px
}
.media-body>.media .forum-avatar .img-circle {
    height: 38px;
    width: 38px
}
.mid-icon {
    font-size: 66px
}
.forum-item {
    margin: 10px 0;
    padding: 10px 0 20px;
    border-bottom: 1px solid #f1f1f1
}
.views-number {
    font-size: 24px;
    line-height: 18px;
    font-weight: 400
}
.forum-container,
.forum-post-container {
    padding: 30px!important
}
.forum-item small {
    color: #999
}
.forum-item .forum-sub-title {
    color: #999;
    margin-left: 50px
}
.forum-title {
    margin: 15px 0
}
.forum-info {
    text-align: center
}
.forum-desc {
    color: #999
}
.forum-icon {
    float: left;
    width: 30px;
    margin-right: 20px;
    text-align: center
}
a.forum-item-title {
    color: inherit;
    display: block;
    font-size: 18px;
    font-weight: 600
}
a.forum-item-title:hover {
    color: inherit
}
.forum-icon .fa {
    font-size: 30px;
    margin-top: 8px;
    color: #9b9b9b
}
.forum-item.active .fa,
.forum-item.active a.forum-item-title {
    color: #1ab394
}
@media (max-width:992px) {
    .forum-info {
        margin: 15px 0 10px;
        display: none
    }
    .forum-desc {
        float: none!important
    }
}
.vertical-container {
    width: 90%;
    max-width: 1170px;
    margin: 0 auto
}
.vertical-container::after {
    content: '';
    display: table;
    clear: both
}
#vertical-timeline {
    position: relative;
    padding: 0;
    margin-top: 2em;
    margin-bottom: 2em
}
#vertical-timeline::before {
    content: '';
    position: absolute;
    top: 0;
    left: 18px;
    height: 100%;
    width: 4px;
    background: #f1f1f1
}
.vertical-timeline-content .btn {
    float: right
}
#vertical-timeline.light-timeline:before {
    background: #e7eaec
}
.dark-timeline .vertical-timeline-content:before {
    border-color: transparent #f5f5f5 transparent transparent
}
.dark-timeline.center-orientation .vertical-timeline-content:before {
    border-color: transparent transparent transparent #f5f5f5
}
.dark-timeline .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before,
.dark-timeline.center-orientation .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before {
    border-color: transparent #f5f5f5 transparent transparent
}
.dark-timeline .vertical-timeline-content,
.dark-timeline.center-orientation .vertical-timeline-content {
    background: #f5f5f5
}
@media only screen and (min-width:1170px) {
    #vertical-timeline.center-orientation {
        margin-top: 3em;
        margin-bottom: 3em
    }
    #vertical-timeline.center-orientation:before {
        left: 50%;
        margin-left: -2px
    }
}
@media only screen and (max-width:1170px) {
    .center-orientation.dark-timeline .vertical-timeline-content:before {
        border-color: transparent #f5f5f5 transparent transparent
    }
}
.vertical-timeline-block {
    position: relative;
    margin: 2em 0
}
.vertical-timeline-block:after {
    content: "";
    display: table;
    clear: both
}
.vertical-timeline-block:first-child {
    margin-top: 0
}
.vertical-timeline-block:last-child {
    margin-bottom: 0
}
@media only screen and (min-width:1170px) {
    .center-orientation .vertical-timeline-block {
        margin: 4em 0
    }
    .center-orientation .vertical-timeline-block:first-child {
        margin-top: 0
    }
    .center-orientation .vertical-timeline-block:last-child {
        margin-bottom: 0
    }
}
.vertical-timeline-icon {
    position: absolute;
    top: 0;
    left: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    font-size: 16px;
    border: 3px solid #f1f1f1;
    text-align: center
}
.vertical-timeline-icon i {
    display: block;
    width: 24px;
    height: 24px;
    position: relative;
    left: 50%;
    top: 50%;
    margin-left: -12px;
    margin-top: -9px
}
@media only screen and (min-width:1170px) {
    .center-orientation .vertical-timeline-icon {
        width: 50px;
        height: 50px;
        left: 50%;
        margin-left: -25px;
        -webkit-transform: translateZ(0);
        -webkit-backface-visibility: hidden;
        font-size: 19px
    }
    .center-orientation .vertical-timeline-icon i {
        margin-left: -12px;
        margin-top: -10px
    }
    .center-orientation .cssanimations .vertical-timeline-icon.is-hidden {
        visibility: hidden
    }
}
.vertical-timeline-content {
    position: relative;
    margin-left: 60px;
    background: #fff;
    border-radius: .25em;
    padding: 1em
}
.vertical-timeline-content:after {
    content: "";
    display: table;
    clear: both
}
.vertical-timeline-content h2 {
    font-weight: 400;
    margin-top: 4px
}
.vertical-timeline-content p {
    margin: 1em 0;
    line-height: 1.6
}
.vertical-timeline-content .vertical-date {
    float: left;
    font-weight: 500
}
.vertical-date small {
    color: #1ab394;
    font-weight: 400
}
.vertical-timeline-content::before {
    content: '';
    position: absolute;
    top: 16px;
    right: 100%;
    height: 0;
    width: 0;
    border: 7px solid transparent;
    border-right: 7px solid #fff
}
@media only screen and (min-width:768px) {
    .vertical-timeline-content h2 {
        font-size: 18px
    }
    .vertical-timeline-content p {
        font-size: 13px
    }
}
@media only screen and (min-width:1170px) {
    .center-orientation .vertical-timeline-content {
        margin-left: 0;
        padding: 1.6em;
        width: 45%
    }
    .center-orientation .vertical-timeline-content::before {
        top: 24px;
        left: 100%;
        border-color: transparent;
        border-left-color: #fff
    }
    .center-orientation .vertical-timeline-content .btn {
        float: left
    }
    .center-orientation .vertical-timeline-content .vertical-date {
        position: absolute;
        width: 100%;
        left: 122%;
        top: 2px;
        font-size: 14px
    }
    .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content {
        float: right
    }
    .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content::before {
        top: 24px;
        left: auto;
        right: 100%;
        border-color: transparent;
        border-right-color: #fff
    }
    .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .btn {
        float: right
    }
    .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .vertical-date {
        left: auto;
        right: 122%;
        text-align: right
    }
    .center-orientation .cssanimations .vertical-timeline-content.is-hidden {
        visibility: hidden
    }
}
.sidebard-panel {
    width: 220px;
    background: #ebebed;
    padding: 10px 20px;
    position: absolute;
    right: 0
}
.sidebard-panel .feed-element img.img-circle {
    width: 32px;
    height: 32px
}
.media-body,
.sidebard-panel .feed-element,
.sidebard-panel p {
    font-size: 12px
}
.sidebard-panel .feed-element {
    margin-top: 20px;
    padding-bottom: 0
}
.sidebard-panel .list-group {
    margin-bottom: 10px
}
.sidebard-panel .list-group .list-group-item {
    padding: 5px 0;
    font-size: 12px;
    border: 0
}
.sidebar-content .wrapper,
.wrapper.sidebar-content {
    padding-right: 240px!important
}
#right-sidebar {
    background-color: #fff;
    border-left: 1px solid #e7eaec;
    border-top: 1px solid #e7eaec;
    overflow: hidden;
    position: fixed;
    top: 60px;
    width: 260px!important;
    z-index: 1009;
    bottom: 0;
    right: -260px
}
#right-sidebar.sidebar-open {
    right: 0
}
#right-sidebar.sidebar-open.sidebar-top {
    top: 0;
    border-top: none
}
.sidebar-container ul.nav-tabs {
    border: none
}
.sidebar-container ul.nav-tabs.navs-4 li {
    width: 25%
}
.sidebar-container ul.nav-tabs.navs-3 li {
    width: 33.3333%
}
.sidebar-container ul.nav-tabs.navs-2 li {
    width: 50%
}
.sidebar-container ul.nav-tabs li {
    border: none
}
.sidebar-container ul.nav-tabs li a {
    border: none;
    padding: 12px 10px;
    margin: 0;
    border-radius: 0;
    background: #2f4050;
    color: #fff;
    text-align: center;
    border-right: 1px solid #334556
}
.sidebar-container ul.nav-tabs li.active a {
    border: none;
    background: #f9f9f9;
    color: #676a6c;
    font-weight: 700
}
.sidebar-container .nav-tabs>li.active>a:focus,
.sidebar-container .nav-tabs>li.active>a:hover {
    border: none
}
.sidebar-container ul.sidebar-list {
    margin: 0;
    padding: 0
}
.sidebar-container ul.sidebar-list li {
    border-bottom: 1px solid #e7eaec;
    padding: 15px 20px;
    list-style: none;
    font-size: 12px
}
.sidebar-container .sidebar-message:nth-child(2n+2) {
    background: #f9f9f9
}
.sidebar-container ul.sidebar-list li a {
    text-decoration: none;
    color: inherit
}
.sidebar-container .sidebar-content {
    padding: 15px 20px;
    font-size: 12px
}
.sidebar-container .sidebar-title {
    background: #f9f9f9;
    padding: 20px;
    border-bottom: 1px solid #e7eaec
}
.sidebar-container .sidebar-title h3 {
    margin-bottom: 3px;
    padding-left: 2px
}
.sidebar-container .tab-content h4 {
    margin-bottom: 5px
}
.sidebar-container .sidebar-message>a>.pull-left {
    margin-right: 10px
}
.sidebar-container .sidebar-message>a {
    text-decoration: none;
    color: inherit
}
.sidebar-container .sidebar-message {
    padding: 15px 20px
}
.sidebar-container .sidebar-message .message-avatar {
    height: 38px;
    width: 38px;
    border-radius: 50%
}
.sidebar-container .setings-item {
    padding: 15px 20px;
    border-bottom: 1px solid #e7eaec
}
body {
    font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 13px;
    color: #676a6c;
    overflow-x: hidden
}
body,
body.full-height-layout #page-wrapper,
body.full-height-layout #wrapper,
html {
    height: 100%;
}
#page-wrapper {
    min-height: auto
}
body.boxed-layout {
    background: url(patterns/shattered.png)
}
body.boxed-layout #wrapper {
    background-color: #2f4050;
    max-width: 1200px;
    margin: 0 auto
}
.boxed-layout #wrapper.top-navigation,
.top-navigation.boxed-layout #wrapper {
    max-width: 1300px!important
}
.block {
    display: block
}
.clear {
    display: block;
    overflow: hidden
}
a {
    cursor: pointer
}
a:focus,
a:hover {
    text-decoration: none
}
.border-bottom {
    border-bottom: 1px solid #e7eaec!important
}
.font-bold {
    font-weight: 600
}
.font-noraml {
    font-weight: 400
}
.text-uppercase {
    text-transform: uppercase
}
.b-r {
    border-right: 1px solid #e7eaec
}
.hr-line-dashed {
    border-top: 1px dashed #e7eaec;
    color: #fff;
    background-color: #fff;
    height: 1px;
    margin: 20px 0
}
.hr-line-solid {
    border-bottom: 1px solid #e7eaec;
    background-color: rgba(0, 0, 0, 0);
    border-style: solid!important;
    margin-top: 15px;
    margin-bottom: 15px
}
video {
    width: 100%!important;
    height: auto!important
}
.gallery>.row>div {
    margin-bottom: 15px
}
.fancybox img {
    margin-bottom: 5px;
    width: 24%
}
.note-editor {
    height: auto!important;
    min-height: 100px;
    border: solid 1px #e5e6e7
}
.modal-content {
    background-clip: padding-box;
    background-color: #FFF;
    border: 1px solid rgba(0, 0, 0, 0);
    border-radius: 4px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    outline: 0 none
}
.modal-dialog {
    z-index: 1200
}
.modal-body {
    padding: 20px 30px 30px
}
.inmodal .modal-body {
    background: #f8fafb
}
.inmodal .modal-header {
    padding: 30px 15px;
    text-align: center
}
.animated.modal.fade .modal-dialog {
    -webkit-transform: none;
    -ms-transform: none;
    transform: none
}
.inmodal .modal-title {
    font-size: 26px
}
.inmodal .modal-icon {
    font-size: 84px;
    color: #e2e3e3
}
.modal-footer {
    margin-top: 0
}
#wrapper {
    width: 100%;
    overflow-x: hidden;
    background-color: #2f4050
}
.wrapper {
    padding: 0 20px
}
.wrapper-content {
    padding: 20px
}
#page-wrapper {
    padding: 0 10px;
    position: inherit;
    margin: 0 0 0 220px
}
.title-action {
    text-align: right;
    padding-top: 30px
}
.ibox-content h1,
.ibox-content h2,
.ibox-content h3,
.ibox-content h4,
.ibox-content h5,
.ibox-title h1,
.ibox-title h2,
.ibox-title h3,
.ibox-title h4,
.ibox-title h5 {
    margin-top: 5px
}
ol.unstyled,
ul.unstyled {
    list-style: none outside none;
    margin-left: 0
}
.big-icon {
    font-size: 160px;
    color: #e5e6e7
}
.footer {
    background: none repeat scroll 0 0 #fff;
    border-top: 1px solid #e7eaec;
    overflow: hidden;
    /*padding: 10px 20px;*/
    /*margin: 0 -15px;*/
    height: 36px;
    line-height: 36px;
}
.footer.fixed_full {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 1000;
    padding: 10px 20px;
    background: #fff;
    border-top: 1px solid #e7eaec
}
.footer.fixed {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 1000;
    padding: 10px 20px;
    background: #fff;
    border-top: 1px solid #e7eaec;
    margin-left: 220px
}
body.body-small.mini-navbar .footer.fixed,
body.mini-navbar .footer.fixed {
    margin: 0 0 0 70px
}
body.canvas-menu .footer.fixed,
body.mini-navbar.canvas-menu .footer.fixed {
    margin: 0!important
}
body.fixed-sidebar.body-small.mini-navbar .footer.fixed {
    margin: 0 0 0 220px
}
body.body-small .footer.fixed {
    margin-left: 0
}
.page-heading {
    border-top: 0;
    padding: 0 20px 20px
}
.panel-heading h1,
.panel-heading h2 {
    margin-bottom: 5px
}
.content-tabs {
    position: relative;
    height: 42px;
    background: #fafafa;
    line-height: 40px
}
.content-tabs .roll-nav,
.page-tabs-list {
    position: absolute;
    width: 40px;
    height: 40px;
    text-align: center;
    color: #999;
    z-index: 2;
    top: 0
}
.content-tabs .roll-left {
    left: 0;
    border-right: solid 1px #eee
}
.content-tabs .roll-right {
    right: 0;
    border-left: solid 1px #eee
}
.content-tabs button {
    background: #fff;
    border: 0;
    height: 40px;
    width: 40px;
    outline: 0
}
.content-tabs button:hover {
    /*background: #fafafa*/
}
nav.page-tabs {
    margin-left: 40px;
    width: 100000px;
    height: 40px;
    overflow: hidden;
    background-color: transparent;
}
nav.page-tabs .page-tabs-content {
    float: left
}
.page-tabs a {
    display: block;
    float: left;
    border-right: solid 1px #eee;
    padding: 0 15px
}
.page-tabs a i:hover {
    color: #c00
}
.content-tabs .roll-nav:hover,
.page-tabs a:hover {
    color: #777;
    /*background: #f2f2f2;*/
    cursor: pointer
}
.roll-right.J_tabRight {
    right: 140px
}
.roll-right.btn-group {
    right: 60px;
    width: 80px;
    padding: 0
}
.roll-right.btn-group button {
    width: 80px
}
.roll-right.J_tabExit {
    background: #fff;
    height: 40px;
    width: 60px;
    outline: 0
}
.dropdown-menu-right {
    left: auto
}
#content-main {
    height: calc(100% - 140px);
    overflow: hidden
}
.fixed-nav #content-main {
    height: calc(100% - 80px);
    overflow: hidden
}
.table-bordered {
    border: 1px solid #EBEBEB
}
.table-bordered>thead>tr>td,
.table-bordered>thead>tr>th {
    background-color: #F5F5F6
}
.table-bordered>tbody>tr>td,
.table-bordered>tbody>tr>th,
.table-bordered>tfoot>tr>td,
.table-bordered>tfoot>tr>th,
.table-bordered>thead>tr>td,
.table-bordered>thead>tr>th {
    border: 1px solid #e7e7e7
}
.table>thead>tr>th {
    border-bottom: 1px solid #DDD
}
.table>tbody>tr>td,
.table>tbody>tr>th,
.table>tfoot>tr>td,
.table>tfoot>tr>th,
.table>thead>tr>td,
.table>thead>tr>th {
    border-top: 1px solid #e7eaec;
    line-height: 1.42857;
    padding: 8px;
    vertical-align: middle
}
.panel.blank-panel {
    background: 0 0;
    margin: 0
}
.blank-panel .panel-heading {
    padding-bottom: 0
}
.nav-tabs>li.active>a,
.nav-tabs>li.active>a:focus,
.nav-tabs>li.active>a:hover {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background: 0 0;
    border-color: #ddd #ddd rgba(0, 0, 0, 0);
    border-bottom: #f3f3f4;
    -webkit-border-image: none;
    -o-border-image: none;
    border-image: none;
    border-style: solid;
    border-width: 1px;
    color: #555;
    cursor: default
}
.nav.nav-tabs li {
    background: 0 0;
    border: none
}
.nav-tabs>li>a {
    color: #A7B1C2;
    font-weight: 600;
    padding: 10px 20px 10px 25px
}
.nav-tabs>li>a:focus,
.nav-tabs>li>a:hover {
    background-color: #e6e6e6;
    color: #676a6c
}
.ui-tab .tab-content {
    padding: 20px 0
}
.no-padding {
    padding: 0!important
}
.no-borders {
    border: none!important
}
.no-margins {
    margin: 0!important
}
.no-top-border {
    border-top: 0!important
}
.ibox-content.text-box {
    padding-bottom: 0;
    padding-top: 15px
}
.border-left-right {
    border-left: 1px solid #e7eaec;
    border-right: 1px solid #e7eaec;
    border-top: none;
    border-bottom: none
}
.border-left {
    border-left: 1px solid #e7eaec;
    border-right: none;
    border-top: none;
    border-bottom: none
}
.border-right {
    border-left: none;
    border-right: 1px solid #e7eaec;
    border-top: none;
    border-bottom: none
}
.full-width {
    width: 100%!important
}
.link-block {
    font-size: 12px;
    padding: 10px
}
.nav.navbar-top-links .link-block a {
    font-size: 12px
}
.link-block a {
    font-size: 10px;
    color: inherit
}
body.mini-navbar .branding {
    display: none
}
img.circle-border {
    border: 6px solid #FFF;
    border-radius: 50%
}
.branding {
    float: left;
    color: #FFF;
    font-size: 18px;
    font-weight: 600;
    padding: 17px 20px;
    text-align: center;
    background-color: #1ab394
}
.login-panel {
    margin-top: 25%
}
.page-header {
    padding: 20px 0 9px;
    margin: 0 0 20px;
    border-bottom: 1px solid #eee
}
.fontawesome-icon-list {
    margin-top: 22px
}
.fontawesome-icon-list .fa-hover a {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    display: block;
    color: #222;
    line-height: 32px;
    height: 32px;
    padding-left: 10px;
    border-radius: 4px
}
.fontawesome-icon-list .fa-hover a .fa {
    width: 32px;
    font-size: 14px;
    display: inline-block;
    text-align: right;
    margin-right: 10px
}
.fontawesome-icon-list .fa-hover a:hover {
    background-color: #1d9d74;
    color: #fff;
    text-decoration: none
}
.fontawesome-icon-list .fa-hover a:hover .fa {
    font-size: 30px;
    vertical-align: -6px
}
.fontawesome-icon-list .fa-hover a:hover .text-muted {
    color: #bbe2d5
}
.feature-list .col-md-4 {
    margin-bottom: 22px
}
.feature-list h4 .fa:before {
    vertical-align: -10%;
    font-size: 28px;
    display: inline-block;
    width: 1.07142857em;
    text-align: center;
    margin-right: 5px
}
.ui-draggable .ibox-title {
    cursor: move
}
.breadcrumb {
    background-color: #fff;
    padding: 0;
    margin-bottom: 0
}
.breadcrumb>.active,
.breadcrumb>li a {
    color: inherit
}
code {
    background-color: #F9F2F4;
    border-radius: 4px;
    color: #ca4440;
    font-size: 90%;
    padding: 2px 4px;
    white-space: nowrap
}
.ibox {
    clear: both;
    margin-bottom: 25px;
    margin-top: 0;
    padding: 0
}
.ibox.collapsed .ibox-content {
    display: none
}
.ibox.collapsed .fa.fa-chevron-up:before {
    content: "\f078"
}
.ibox.collapsed .fa.fa-chevron-down:before {
    content: "\f077"
}
.ibox:after,
.ibox:before {
    display: table
}
.ibox-title {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #fff;
    border-color: #e7eaec;
    -webkit-border-image: none;
    -o-border-image: none;
    border-image: none;
    border-style: solid solid none;
    border-width: 4px 0 0;
    color: inherit;
    margin-bottom: 0;
    padding: 14px 15px 7px;
    min-height: 48px
}
.ibox-content {
    background-color: #fff;
    color: inherit;
    padding: 15px 20px 20px;
    border-color: #e7eaec;
    -webkit-border-image: none;
    -o-border-image: none;
    border-image: none;
    border-style: solid solid none;
    border-width: 1px 0
}
table.table-mail tr td {
    padding: 12px
}
.table-mail .check-mail {
    padding-left: 20px
}
.table-mail .mail-date {
    padding-right: 20px
}
.check-mail,
.star-mail {
    width: 40px
}
.unread td,
.unread td a {
    font-weight: 600;
    color: inherit
}
.read td,
.read td a {
    font-weight: 400;
    color: inherit
}
.unread td {
    background-color: #f9f8f8
}
.ibox-content {
    clear: both
}
.ibox-heading {
    background-color: #f3f6fb;
    border-bottom: none
}
.ibox-heading h3 {
    font-weight: 200;
    font-size: 24px
}
.ibox-title h5 {
    display: inline-block;
    font-size: 14px;
    margin: 0 0 7px;
    padding: 0;
    text-overflow: ellipsis;
    float: left
}
.ibox-title .label {
    float: left;
    margin-left: 4px
}
.ibox-tools {
    display: inline-block;
    float: right;
    margin-top: 0;
    position: relative;
    padding: 0
}
.ibox-tools a {
    cursor: pointer;
    margin-left: 5px;
    color: #c4c4c4
}
.ibox-tools a.btn-primary {
    color: #fff
}
.ibox-tools .dropdown-menu>li>a {
    padding: 4px 10px;
    font-size: 12px
}
.ibox .open>.dropdown-menu {
    left: auto;
    right: 0
}
.gray-bg {
    background-color: #f3f3f4
}
.white-bg {
    background-color: #fff
}
.navy-bg {
    background-color: #1ab394;
    color: #fff
}
.blue-bg {
    background-color: #1c84c6;
    color: #fff
}
.lazur-bg {
    background-color: #23c6c8;
    color: #fff
}
.yellow-bg {
    background-color: #f8ac59;
    color: #fff
}
.red-bg {
    background-color: #ed5565;
    color: #fff
}
.black-bg {
    background-color: #262626
}
.panel-primary {
    border-color: #1ab394
}
.panel-primary>.panel-heading {
    background-color: #1ab394;
    border-color: #1ab394
}
.panel-success {
    border-color: #1c84c6
}
.panel-success>.panel-heading {
    background-color: #1c84c6;
    border-color: #1c84c6;
    color: #fff
}
.panel-info {
    border-color: #23c6c8
}
.panel-info>.panel-heading {
    background-color: #23c6c8;
    border-color: #23c6c8;
    color: #fff
}
.panel-warning {
    border-color: #f8ac59
}
.panel-warning>.panel-heading {
    background-color: #f8ac59;
    border-color: #f8ac59;
    color: #fff
}
.panel-danger {
    border-color: #ed5565
}
.panel-danger>.panel-heading {
    background-color: #ed5565;
    border-color: #ed5565;
    color: #fff
}
.progress-bar {
    background-color: #1ab394
}
.progress-small,
.progress-small .progress-bar {
    height: 10px
}
.progress-mini,
.progress-small {
    margin-top: 5px
}
.progress-mini,
.progress-mini .progress-bar {
    height: 5px;
    margin-bottom: 0
}
.progress-bar-navy-light {
    background-color: #3dc7ab
}
.progress-bar-success {
    background-color: #1c84c6
}
.progress-bar-info {
    background-color: #23c6c8
}
.progress-bar-warning {
    background-color: #f8ac59
}
.progress-bar-danger {
    background-color: #ed5565
}
.panel-title {
    font-size: inherit
}
.jumbotron {
    border-radius: 6px;
    padding: 40px
}
.jumbotron h1 {
    margin-top: 0
}
.text-navy {
    color: #1ab394
}
.text-primary {
    color: inherit
}
.text-success {
    color: #1c84c6
}
.text-info {
    color: #23c6c8
}
.text-warning {
    color: #f8ac59
}
.text-danger {
    color: #ed5565
}
.text-muted {
    color: #888
}
.simple_tag {
    background-color: #f3f3f4;
    border: 1px solid #e7eaec;
    border-radius: 2px;
    color: inherit;
    font-size: 10px;
    margin-right: 5px;
    margin-top: 5px;
    padding: 5px 12px;
    display: inline-block
}
.img-shadow {
    box-shadow: 0 0 3px 0 #919191
}
.ComposeEmail .navbar.navbar-static-top,
.Dashboard_2 .navbar.navbar-static-top,
.Dashboard_3 .navbar.navbar-static-top,
.Dashboard_4_1 .navbar.navbar-static-top,
.EmailView .navbar.navbar-static-top,
.Inbox .navbar.navbar-static-top,
.dashboards\.dashboard_2 nav.navbar,
.dashboards\.dashboard_3 nav.navbar,
.dashboards\.dashboard_4_1 nav.navbar,
.mailbox\.email_compose nav.navbar,
.mailbox\.email_view nav.navbar,
.mailbox\.inbox nav.navbar {
    background: #fff
}
a.close-canvas-menu {
    position: absolute;
    top: 10px;
    right: 15px;
    z-index: 1011;
    color: #a7b1c2
}
a.close-canvas-menu:hover {
    color: #fff
}
.full-height {
    height: 100%
}
.fh-breadcrumb {
    height: calc(100% - 196px);
    margin: 0 -15px;
    position: relative
}
.fh-no-breadcrumb {
    height: calc(100% - 99px);
    margin: 0 -15px;
    position: relative
}
.fh-column {
    background: #fff;
    height: 100%;
    width: 240px;
    float: left
}
.modal-backdrop {
    z-index: 2040!important
}
.modal {
    z-index: 2050!important
}
.spiner-example {
    height: 200px;
    padding-top: 70px
}
.p-xxs {
    padding: 5px
}
.p-xs {
    padding: 10px
}
.p-sm {
    padding: 15px
}
.p-m {
    padding: 20px
}
.p-md {
    padding: 25px
}
.p-lg {
    padding: 30px
}
.p-xl {
    padding: 40px
}
.m-xxs {
    margin: 2px 4px
}
.m-xs {
    margin: 5px
}
.m-sm {
    margin: 10px
}
.m {
    margin: 15px
}
.m-md {
    margin: 20px
}
.m-lg {
    margin: 30px
}
.m-xl {
    margin: 50px
}
.m-n {
    margin: 0!important
}
.m-l-none {
    margin-left: 0
}
.m-l-xs {
    margin-left: 5px
}
.m-l-sm {
    margin-left: 10px
}
.m-l {
    margin-left: 15px
}
.m-l-md {
    margin-left: 20px
}
.m-l-lg {
    margin-left: 30px
}
.m-l-xl {
    margin-left: 40px
}
.m-l-n-xxs {
    margin-left: -1px
}
.m-l-n-xs {
    margin-left: -5px
}
.m-l-n-sm {
    margin-left: -10px
}
.m-l-n {
    margin-left: -15px
}
.m-l-n-md {
    margin-left: -20px
}
.m-l-n-lg {
    margin-left: -30px
}
.m-l-n-xl {
    margin-left: -40px
}
.m-t-none {
    margin-top: 0
}
.m-t-xxs {
    margin-top: 1px
}
.m-t-xs {
    margin-top: 5px
}
.m-t-sm {
    margin-top: 10px
}
.m-t {
    margin-top: 15px
}
.m-t-md {
    margin-top: 20px
}
.m-t-lg {
    margin-top: 30px
}
.m-t-xl {
    margin-top: 40px
}
.m-t-n-xxs {
    margin-top: -1px
}
.m-t-n-xs {
    margin-top: -5px
}
.m-t-n-sm {
    margin-top: -10px
}
.m-t-n {
    margin-top: -15px
}
.m-t-n-md {
    margin-top: -20px
}
.m-t-n-lg {
    margin-top: -30px
}
.m-t-n-xl {
    margin-top: -40px
}
.m-r-none {
    margin-right: 0
}
.m-r-xxs {
    margin-right: 1px
}
.m-r-xs {
    margin-right: 5px
}
.m-r-sm {
    margin-right: 10px
}
.m-r {
    margin-right: 15px
}
.m-r-md {
    margin-right: 20px
}
.m-r-lg {
    margin-right: 30px
}
.m-r-xl {
    margin-right: 40px
}
.m-r-n-xxs {
    margin-right: -1px
}
.m-r-n-xs {
    margin-right: -5px
}
.m-r-n-sm {
    margin-right: -10px
}
.m-r-n {
    margin-right: -15px
}
.m-r-n-md {
    margin-right: -20px
}
.m-r-n-lg {
    margin-right: -30px
}
.m-r-n-xl {
    margin-right: -40px
}
.m-b-none {
    margin-bottom: 0
}
.m-b-xxs {
    margin-bottom: 1px
}
.m-b-xs {
    margin-bottom: 5px
}
.m-b-sm {
    margin-bottom: 10px
}
.m-b {
    margin-bottom: 15px
}
.m-b-md {
    margin-bottom: 20px
}
.m-b-lg {
    margin-bottom: 30px
}
.m-b-xl {
    margin-bottom: 40px
}
.m-b-n-xxs {
    margin-bottom: -1px
}
.m-b-n-xs {
    margin-bottom: -5px
}
.m-b-n-sm {
    margin-bottom: -10px
}
.m-b-n {
    margin-bottom: -15px
}
.m-b-n-md {
    margin-bottom: -20px
}
.m-b-n-lg {
    margin-bottom: -30px
}
.m-b-n-xl {
    margin-bottom: -40px
}
.space-15 {
    margin: 15px 0
}
.space-20 {
    margin: 20px 0
}
.space-25 {
    margin: 25px 0
}
.space-30 {
    margin: 30px 0
}
body.modal-open {
    padding-right: inherit!important
}
.search-form {
    margin-top: 10px
}
.search-result h3 {
    margin-bottom: 0;
    color: #1E0FBE
}
.search-result .search-link {
    color: #006621
}
.search-result p {
    font-size: 12px;
    margin-top: 5px
}
.contact-box {
    background-color: #fff;
    border: 1px solid #e7eaec;
    padding: 20px;
    margin-bottom: 20px
}
.contact-box a {
    color: inherit
}
.invoice-table tbody>tr>td:last-child,
.invoice-table tbody>tr>td:nth-child(2),
.invoice-table tbody>tr>td:nth-child(3),
.invoice-table tbody>tr>td:nth-child(4),
.invoice-table thead>tr>th:last-child,
.invoice-table thead>tr>th:nth-child(2),
.invoice-table thead>tr>th:nth-child(3),
.invoice-table thead>tr>th:nth-child(4),
.invoice-total>tbody>tr>td:first-child {
    text-align: right
}
.invoice-total>tbody>tr>td {
    border: 0 none
}
.invoice-total>tbody>tr>td:last-child {
    border-bottom: 1px solid #DDD;
    text-align: right;
    width: 15%
}
.middle-box {
    max-width: 400px;
    z-index: 100;
    margin: 0 auto;
    padding-top: 40px
}
.lockscreen.middle-box {
    width: 200px;
    padding-top: 110px
}
.loginscreen.middle-box {
    width: 300px
}
.loginColumns {
    max-width: 800px;
    margin: 0 auto;
    padding: 100px 20px 20px
}
.passwordBox {
    max-width: 460px;
    margin: 0 auto;
    padding: 100px 20px 20px
}
.logo-name {
    color: #e6e6e6;
    font-size: 180px;
    font-weight: 800;
    letter-spacing: -10px;
    margin-bottom: 0
}
.middle-box h1 {
    font-size: 170px
}
.wrapper .middle-box {
    margin-top: 140px
}
.lock-word {
    z-index: 10;
    position: absolute;
    top: 110px;
    left: 50%;
    margin-left: -470px
}
.lock-word span {
    font-size: 100px;
    font-weight: 600;
    color: #e9e9e9;
    display: inline-block
}
.lock-word .first-word {
    margin-right: 160px
}
.dashboard-header {
    border-top: 0;
    padding: 20px
}
.dashboard-header h2 {
    margin-top: 10px;
    font-size: 26px
}
.fist-item {
    border-top: none!important
}
.statistic-box {
    margin-top: 40px
}
.dashboard-header .list-group-item span.label {
    margin-right: 10px
}
.list-group.clear-list .list-group-item {
    border-top: 1px solid #e7eaec;
    border-bottom: 0;
    border-right: 0;
    border-left: 0;
    padding: 10px 0
}
ul.clear-list:first-child {
    border-top: none!important
}
.timeline-item .date i {
    position: absolute;
    top: 0;
    right: 0;
    padding: 5px;
    width: 30px;
    text-align: center;
    border-top: 1px solid #e7eaec;
    border-bottom: 1px solid #e7eaec;
    border-left: 1px solid #e7eaec;
    background: #f8f8f8
}
.timeline-item .date {
    text-align: right;
    width: 110px;
    position: relative;
    padding-top: 30px
}
.timeline-item .content {
    border-left: 1px solid #e7eaec;
    border-top: 1px solid #e7eaec;
    padding-top: 10px;
    min-height: 100px
}
.timeline-item .content:hover {
    background: #f6f6f6
}
ul.notes li,
ul.tag-list li {
    list-style: none
}
ul.notes li h4 {
    margin-top: 20px;
    font-size: 16px
}
ul.notes li div {
    position: relative
}
ul.notes li div small {
    position: absolute;
    top: 5px;
    right: 5px;
    font-size: 10px
}
ul.notes li div a {
    position: absolute;
    right: 10px;
    bottom: 10px;
    color: inherit
}
ul.notes li {
    margin: 10px 40px 50px 0;
    float: left
}
ul.notes li div p {
    font-size: 12px
}
ul.notes li div {
    -webkit-transform: rotate(-6deg);
    -o-transform: rotate(-6deg);
    -moz-transform: rotate(-6deg)
}
ul.notes li:nth-child(even) div {
    -o-transform: rotate(4deg);
    -webkit-transform: rotate(4deg);
    -moz-transform: rotate(4deg);
    position: relative;
    top: 5px
}
ul.notes li:nth-child(3n) div {
    -o-transform: rotate(-3deg);
    -webkit-transform: rotate(-3deg);
    -moz-transform: rotate(-3deg);
    position: relative;
    top: -5px
}
ul.notes li:nth-child(5n) div {
    -o-transform: rotate(5deg);
    -webkit-transform: rotate(5deg);
    -moz-transform: rotate(5deg);
    position: relative;
    top: -10px
}
ul.notes li div:focus,
ul.notes li div:hover {
    -webkit-transform: scale(1.1);
    -moz-transform: scale(1.1);
    -o-transform: scale(1.1);
    position: relative;
    z-index: 5
}
ul.notes li div {
    text-decoration: none;
    color: #000;
    background: #ffc;
    display: block;
    height: 210px;
    width: 210px;
    padding: 1em;
    box-shadow: 5px 5px 7px rgba(33, 33, 33, .7);
    -webkit-transition: -webkit-transform .15s linear
}
.file-box {
    float: left;
    width: 220px
}
.file-manager h5 {
    text-transform: uppercase
}
.file-manager {
    list-style: none outside none;
    margin: 0;
    padding: 0
}
.folder-list li a {
    color: #666;
    display: block;
    padding: 5px 0
}
.folder-list li {
    border-bottom: 1px solid #e7eaec;
    display: block
}
.folder-list li i {
    margin-right: 8px;
    color: #3d4d5d
}
.category-list li a {
    color: #666;
    display: block;
    padding: 5px 0
}
.category-list li {
    display: block
}
.category-list li i {
    margin-right: 8px;
    color: #3d4d5d
}
.category-list li a .text-navy {
    color: #1ab394
}
.category-list li a .text-primary {
    color: #1c84c6
}
.category-list li a .text-info {
    color: #23c6c8
}
.category-list li a .text-danger {
    color: #EF5352
}
.category-list li a .text-warning {
    color: #F8AC59
}
.file-manager h5.tag-title {
    margin-top: 20px
}
.tag-list li {
    float: left
}
.tag-list li a {
    font-size: 10px;
    background-color: #f3f3f4;
    padding: 5px 12px;
    color: inherit;
    border-radius: 2px;
    border: 1px solid #e7eaec;
    margin-right: 5px;
    margin-top: 5px;
    display: block
}
.file {
    border: 1px solid #e7eaec;
    padding: 0;
    background-color: #fff;
    position: relative;
    margin-bottom: 20px;
    margin-right: 20px
}
.file-manager .hr-line-dashed {
    margin: 15px 0
}
.file .icon,
.file .image {
    height: 100px;
    overflow: hidden
}
.file .icon {
    padding: 15px 10px;
    text-align: center
}
.file-control {
    color: inherit;
    font-size: 11px;
    margin-right: 10px
}
.file-control.active {
    text-decoration: underline
}
.file .icon i {
    font-size: 70px;
    color: #dadada
}
.file .file-name {
    padding: 10px;
    background-color: #f8f8f8;
    border-top: 1px solid #e7eaec
}
.file-name small {
    color: #676a6c
}
.corner {
    position: absolute;
    display: inline-block;
    width: 0;
    height: 0;
    line-height: 0;
    border: .6em solid transparent;
    border-right: .6em solid #f1f1f1;
    border-bottom: .6em solid #f1f1f1;
    right: 0;
    bottom: 0
}
a.compose-mail {
    padding: 8px 10px
}
.mail-search {
    max-width: 300px
}
.profile-content {
    border-top: none!important
}
.feed-activity-list .feed-element {
    border-bottom: 1px solid #e7eaec
}
.feed-element:first-child {
    margin-top: 0
}
.feed-element {
    padding-bottom: 15px
}
.feed-element,
.feed-element .media {
    margin-top: 15px
}
.feed-element,
.media-body {
    overflow: hidden
}
.feed-element>.pull-left {
    margin-right: 10px
}
.dropdown-messages-box img.img-circle,
.feed-element img.img-circle {
    width: 38px;
    height: 38px
}
.feed-element .well {
    border: 1px solid #e7eaec;
    box-shadow: none;
    margin-top: 10px;
    margin-bottom: 5px;
    padding: 10px 20px;
    font-size: 11px;
    line-height: 16px
}
.feed-element .actions {
    margin-top: 10px
}
.feed-element .photos {
    margin: 10px 0
}
.feed-photo {
    max-height: 180px;
    border-radius: 4px;
    overflow: hidden;
    margin-right: 10px;
    margin-bottom: 10px
}
.mail-box {
    background-color: #fff;
    border: 1px solid #e7eaec;
    border-top: 0;
    padding: 0;
    margin-bottom: 20px
}
.mail-box-header {
    background-color: #fff;
    border: 1px solid #e7eaec;
    border-bottom: 0;
    padding: 30px 20px 20px
}
.mail-box-header h2 {
    margin-top: 0
}
.mailbox-content .tag-list li a {
    background: #fff
}
.mail-body {
    border-top: 1px solid #e7eaec;
    padding: 20px
}
.mail-text {
    border-top: 1px solid #e7eaec
}
.mail-text .note-toolbar {
    padding: 10px 15px
}
.mail-body .form-group {
    margin-bottom: 5px
}
.mail-text .note-editor .note-toolbar {
    background-color: #F9F8F8
}
.mail-attachment {
    border-top: 1px solid #e7eaec;
    padding: 20px;
    font-size: 12px
}
.mailbox-content {
    background: 0 0;
    border: none;
    padding: 10px
}
.mail-ontact {
    width: 23%
}
.project-actions,
.project-people {
    text-align: right;
    vertical-align: middle
}
dd.project-people {
    text-align: left;
    margin-top: 5px
}
.project-people img {
    width: 32px;
    height: 32px
}
.project-title a {
    font-size: 14px;
    color: #676a6c;
    font-weight: 600
}
.project-list table tr td {
    border-top: none;
    border-bottom: 1px solid #e7eaec;
    padding: 15px 10px;
    vertical-align: middle
}
.project-manager .tag-list li a {
    font-size: 10px;
    background-color: #fff;
    padding: 5px 12px;
    color: inherit;
    border-radius: 2px;
    border: 1px solid #e7eaec;
    margin-right: 5px;
    margin-top: 5px;
    display: block
}
.project-files li a {
    font-size: 11px;
    color: #676a6c;
    margin-left: 10px;
    line-height: 22px
}
.faq-item {
    padding: 20px;
    margin-bottom: 2px;
    background: #fff
}
.faq-question {
    font-size: 18px;
    font-weight: 600;
    color: #1ab394;
    display: block
}
.faq-question:hover {
    color: #179d82
}
.faq-answer {
    margin-top: 10px;
    background: #f3f3f4;
    border: 1px solid #e7eaec;
    border-radius: 3px;
    padding: 15px
}
.faq-item .tag-item {
    background: #f3f3f4;
    padding: 2px 6px;
    font-size: 10px;
    text-transform: uppercase
}
.message-input {
    height: 90px!important
}
.chat-avatar {
    white: 36px;
    height: 36px;
    float: left;
    margin-right: 10px
}
.chat-user-name {
    padding: 10px
}
.chat-user {
    padding: 8px 10px;
    border-bottom: 1px solid #e7eaec
}
.chat-user a {
    color: inherit
}
.chat-view {
    z-index: 20012
}
.chat-statistic,
.chat-users {
    margin-left: -30px
}
@media (max-width:992px) {
    .chat-statistic,
    .chat-users {
        margin-left: 0
    }
}
.chat-view .ibox-content {
    padding: 0
}
.chat-message {
    padding: 10px 20px
}
.message-avatar {
    height: 48px;
    width: 48px;
    border: 1px solid #e7eaec;
    border-radius: 4px;
    margin-top: 1px
}
.chat-discussion .chat-message:nth-child(2n+1) .message-avatar {
    float: left;
    margin-right: 10px
}
.chat-discussion .chat-message:nth-child(2n) .message-avatar {
    float: right;
    margin-left: 10px
}
.message {
    background-color: #fff;
    border: 1px solid #e7eaec;
    text-align: left;
    display: block;
    padding: 10px 20px;
    position: relative;
    border-radius: 4px
}
.chat-discussion .chat-message:nth-child(2n+1) .message-date {
    float: right
}
.chat-discussion .chat-message:nth-child(2n) .message-date {
    float: left
}
.chat-discussion .chat-message:nth-child(2n+1) .message {
    text-align: left;
    margin-left: 55px
}
.chat-discussion .chat-message:nth-child(2n) .message {
    text-align: right;
    margin-right: 55px
}
.message-date {
    font-size: 10px;
    color: #888
}
.message-content {
    display: block
}
.chat-discussion {
    background: #eee;
    padding: 15px;
    height: 400px;
    overflow-y: auto
}
.chat-users {
    overflow-y: auto;
    height: 400px
}
.chat-message-form .form-group {
    margin-bottom: 0
}
.jstree-open>.jstree-anchor>.fa-folder:before {
    content: "\f07c"
}
.jstree-default .jstree-icon.none {
    width: 0
}
.clients-list {
    margin-top: 20px
}
.clients-list .tab-pane {
    position: relative;
    height: 600px
}
.client-detail {
    position: relative;
    height: 620px
}
.clients-list table tr td {
    height: 46px;
    vertical-align: middle;
    border: none
}
.client-link {
    font-weight: 600;
    color: inherit
}
.client-link:hover {
    color: inherit
}
.client-avatar {
    width: 42px
}
.client-avatar img {
    width: 28px;
    height: 28px;
    border-radius: 50%
}
.contact-type {
    width: 20px;
    color: #c1c3c4
}
.client-status {
    text-align: left
}
.client-detail .vertical-timeline-content p {
    margin: 0
}
.client-detail .vertical-timeline-icon.gray-bg {
    color: #a7aaab
}
.clients-list .nav-tabs>li.active>a,
.clients-list .nav-tabs>li.active>a:focus,
.clients-list .nav-tabs>li.active>a:hover {
    border-bottom: 1px solid #fff
}
.blog h2 {
    font-weight: 700
}
.blog .btn,
.blog h5 {
    margin: 0 0 5px
}
.article h1 {
    font-size: 48px;
    font-weight: 700;
    color: #2F4050
}
.article p {
    font-size: 15px;
    line-height: 26px
}
.article-title {
    text-align: center;
    margin: 60px 0 40px
}
.article .ibox-content {
    padding: 40px
}
.issue-tracker .btn-link {
    color: #1ab394
}
table.issue-tracker tbody tr td {
    vertical-align: middle;
    height: 50px
}
.issue-info {
    width: 50%
}
.issue-info a {
    font-weight: 600;
    color: #676a6c
}
.issue-info small {
    display: block
}
.team-members {
    margin: 10px 0
}
.team-members img.img-circle {
    width: 42px;
    height: 42px;
    margin-bottom: 5px
}
.sortable-list {
    padding: 10px 0
}
.agile-list {
    list-style: none;
    margin: 0
}
.agile-list li {
    background: #FAFAFB;
    border: 1px solid #e7eaec;
    margin: 0 0 10px;
    padding: 10px;
    border-radius: 2px
}
.agile-list li:hover {
    cursor: pointer;
    background: #fff
}
.agile-list li.warning-element {
    border-left: 3px solid #f8ac59
}
.agile-list li.danger-element {
    border-left: 3px solid #ed5565
}
.agile-list li.info-element {
    border-left: 3px solid #1c84c6
}
.agile-list li.success-element {
    border-left: 3px solid #1ab394
}
.agile-detail {
    margin-top: 5px;
    font-size: 12px
}
ins {
    background-color: #c6ffc6;
    text-decoration: none
}
del {
    background-color: #ffc6c6
}
#small-chat {
    position: fixed;
    bottom: 50px;
    right: 26px;
    z-index: 100
}
#small-chat .badge {
    position: absolute;
    top: -3px;
    right: -4px
}
.open-small-chat {
    height: 38px;
    width: 38px;
    display: block;
    background: #1ab394;
    padding: 9px 8px;
    text-align: center;
    color: #fff;
    border-radius: 50%
}
.open-small-chat:hover {
    color: #fff;
    background: #1ab394
}
.small-chat-box {
    display: none;
    position: fixed;
    bottom: 50px;
    right: 80px;
    background: #fff;
    border: 1px solid #e7eaec;
    width: 230px;
    height: 320px;
    border-radius: 4px
}
.small-chat-box.ng-small-chat {
    display: block
}
.body-small .small-chat-box {
    bottom: 70px;
    right: 20px
}
.small-chat-box.active {
    display: block
}
.small-chat-box .heading {
    background: #2f4050;
    padding: 8px 15px;
    font-weight: 700;
    color: #fff
}
.small-chat-box .chat-date {
    opacity: .6;
    font-size: 10px;
    font-weight: 400
}
.small-chat-box .content {
    padding: 15px
}
.small-chat-box .content .author-name {
    font-weight: 700;
    margin-bottom: 3px;
    font-size: 11px
}
.small-chat-box .content>div {
    padding-bottom: 20px
}
.small-chat-box .content .chat-message {
    padding: 5px 10px;
    border-radius: 6px;
    font-size: 11px;
    line-height: 14px;
    max-width: 80%;
    background: #f3f3f4;
    margin-bottom: 10px
}
.small-chat-box .content .chat-message.active {
    background: #1ab394;
    color: #fff
}
.small-chat-box .content .left {
    text-align: left;
    clear: both
}
.small-chat-box .content .left .chat-message {
    float: left
}
.small-chat-box .content .right {
    text-align: right;
    clear: both
}
.small-chat-box .content .right .chat-message {
    float: right
}
.small-chat-box .form-chat {
    padding: 10px
}
.sk-spinner-rotating-plane.sk-spinner {
    width: 30px;
    height: 30px;
    background-color: #1ab394;
    margin: 0 auto;
    -webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out;
    animation: sk-rotatePlane 1.2s infinite ease-in-out
}
@-webkit-keyframes sk-rotatePlane {
    0% {
        -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
        transform: perspective(120px) rotateX(0deg) rotateY(0deg)
    }
    50% {
        -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
        transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
    }
    100% {
        -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
        transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg)
    }
}
@keyframes sk-rotatePlane {
    0% {
        -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
        transform: perspective(120px) rotateX(0deg) rotateY(0deg)
    }
    50% {
        -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
        transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
    }
    100% {
        -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
        transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg)
    }
}
.sk-spinner-double-bounce.sk-spinner {
    width: 40px;
    height: 40px;
    position: relative;
    margin: 0 auto
}
.sk-spinner-double-bounce .sk-double-bounce1,
.sk-spinner-double-bounce .sk-double-bounce2 {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background-color: #1ab394;
    opacity: .6;
    position: absolute;
    top: 0;
    left: 0;
    -webkit-animation: sk-doubleBounce 2s infinite ease-in-out;
    animation: sk-doubleBounce 2s infinite ease-in-out
}
.sk-spinner-double-bounce .sk-double-bounce2 {
    -webkit-animation-delay: -1s;
    animation-delay: -1s
}
@-webkit-keyframes sk-doubleBounce {
    0%,
    100% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    50% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
@keyframes sk-doubleBounce {
    0%,
    100% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    50% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
.sk-spinner-wave.sk-spinner {
    margin: 0 auto;
    width: 50px;
    height: 30px;
    text-align: center;
    font-size: 10px
}
.sk-spinner-wave div {
    background-color: #1ab394;
    height: 100%;
    width: 6px;
    display: inline-block;
    -webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out;
    animation: sk-waveStretchDelay 1.2s infinite ease-in-out
}
.sk-spinner-wave .sk-rect2 {
    -webkit-animation-delay: -1.1s;
    animation-delay: -1.1s
}
.sk-spinner-wave .sk-rect3 {
    -webkit-animation-delay: -1s;
    animation-delay: -1s
}
.sk-spinner-wave .sk-rect4 {
    -webkit-animation-delay: -.9s;
    animation-delay: -.9s
}
.sk-spinner-wave .sk-rect5 {
    -webkit-animation-delay: -.8s;
    animation-delay: -.8s
}
@-webkit-keyframes sk-waveStretchDelay {
    0%,
    100%,
    40% {
        -webkit-transform: scaleY(0.4);
        transform: scaleY(0.4)
    }
    20% {
        -webkit-transform: scaleY(1);
        transform: scaleY(1)
    }
}
@keyframes sk-waveStretchDelay {
    0%,
    100%,
    40% {
        -webkit-transform: scaleY(0.4);
        transform: scaleY(0.4)
    }
    20% {
        -webkit-transform: scaleY(1);
        transform: scaleY(1)
    }
}
.sk-spinner-wandering-cubes.sk-spinner {
    margin: 0 auto;
    width: 32px;
    height: 32px;
    position: relative
}
.sk-spinner-wandering-cubes .sk-cube1,
.sk-spinner-wandering-cubes .sk-cube2 {
    background-color: #1ab394;
    width: 10px;
    height: 10px;
    position: absolute;
    top: 0;
    left: 0;
    -webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out;
    animation: sk-wanderingCubeMove 1.8s infinite ease-in-out
}
.sk-spinner-wandering-cubes .sk-cube2 {
    -webkit-animation-delay: -.9s;
    animation-delay: -.9s
}
@-webkit-keyframes sk-wanderingCubeMove {
    25% {
        -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
        transform: translateX(42px) rotate(-90deg) scale(0.5)
    }
    50% {
        -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
        transform: translateX(42px) translateY(42px) rotate(-179deg)
    }
    50.1% {
        -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
        transform: translateX(42px) translateY(42px) rotate(-180deg)
    }
    75% {
        -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
        transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5)
    }
    100% {
        -webkit-transform: rotate(-360deg);
        transform: rotate(-360deg)
    }
}
@keyframes sk-wanderingCubeMove {
    25% {
        -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
        transform: translateX(42px) rotate(-90deg) scale(0.5)
    }
    50% {
        -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
        transform: translateX(42px) translateY(42px) rotate(-179deg)
    }
    50.1% {
        -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
        transform: translateX(42px) translateY(42px) rotate(-180deg)
    }
    75% {
        -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
        transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5)
    }
    100% {
        -webkit-transform: rotate(-360deg);
        transform: rotate(-360deg)
    }
}
.sk-spinner-pulse.sk-spinner {
    width: 40px;
    height: 40px;
    margin: 0 auto;
    background-color: #1ab394;
    border-radius: 100%;
    -webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out;
    animation: sk-pulseScaleOut 1s infinite ease-in-out
}
@-webkit-keyframes sk-pulseScaleOut {
    0% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    100% {
        -webkit-transform: scale(1);
        transform: scale(1);
        opacity: 0
    }
}
@keyframes sk-pulseScaleOut {
    0% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    100% {
        -webkit-transform: scale(1);
        transform: scale(1);
        opacity: 0
    }
}
.sk-spinner-chasing-dots.sk-spinner {
    margin: 0 auto;
    width: 40px;
    height: 40px;
    position: relative;
    text-align: center;
    -webkit-animation: sk-chasingDotsRotate 2s infinite linear;
    animation: sk-chasingDotsRotate 2s infinite linear
}
.sk-spinner-chasing-dots .sk-dot1,
.sk-spinner-chasing-dots .sk-dot2 {
    width: 60%;
    height: 60%;
    display: inline-block;
    position: absolute;
    top: 0;
    background-color: #1ab394;
    border-radius: 100%;
    -webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out;
    animation: sk-chasingDotsBounce 2s infinite ease-in-out
}
.sk-spinner-chasing-dots .sk-dot2 {
    top: auto;
    bottom: 0;
    -webkit-animation-delay: -1s;
    animation-delay: -1s
}
@-webkit-keyframes sk-chasingDotsRotate {
    100% {
        -webkit-transform: rotate(360deg);
        transform: rotate(360deg)
    }
}
@keyframes sk-chasingDotsRotate {
    100% {
        -webkit-transform: rotate(360deg);
        transform: rotate(360deg)
    }
}
@-webkit-keyframes sk-chasingDotsBounce {
    0%,
    100% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    50% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
@keyframes sk-chasingDotsBounce {
    0%,
    100% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    50% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
.sk-spinner-three-bounce.sk-spinner {
    margin: 0 auto;
    width: 70px;
    text-align: center
}
.sk-spinner-three-bounce div {
    width: 18px;
    height: 18px;
    background-color: #1ab394;
    border-radius: 100%;
    display: inline-block;
    -webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
    animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
    -webkit-animation-fill-mode: both;
    animation-fill-mode: both
}
.sk-spinner-three-bounce .sk-bounce1 {
    -webkit-animation-delay: -.32s;
    animation-delay: -.32s
}
.sk-spinner-three-bounce .sk-bounce2 {
    -webkit-animation-delay: -.16s;
    animation-delay: -.16s
}
@-webkit-keyframes sk-threeBounceDelay {
    0%,
    100%,
    80% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    40% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
@keyframes sk-threeBounceDelay {
    0%,
    100%,
    80% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    40% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
.sk-spinner-circle.sk-spinner {
    margin: 0 auto;
    width: 22px;
    height: 22px;
    position: relative
}
.sk-spinner-circle .sk-circle {
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0
}
.sk-spinner-circle .sk-circle:before {
    content: '';
    display: block;
    margin: 0 auto;
    width: 20%;
    height: 20%;
    background-color: #1ab394;
    border-radius: 100%;
    -webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
    animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
    -webkit-animation-fill-mode: both;
    animation-fill-mode: both
}
.sk-spinner-circle .sk-circle2 {
    -webkit-transform: rotate(30deg);
    -ms-transform: rotate(30deg);
    transform: rotate(30deg)
}
.sk-spinner-circle .sk-circle3 {
    -webkit-transform: rotate(60deg);
    -ms-transform: rotate(60deg);
    transform: rotate(60deg)
}
.sk-spinner-circle .sk-circle4 {
    -webkit-transform: rotate(90deg);
    -ms-transform: rotate(90deg);
    transform: rotate(90deg)
}
.sk-spinner-circle .sk-circle5 {
    -webkit-transform: rotate(120deg);
    -ms-transform: rotate(120deg);
    transform: rotate(120deg)
}
.sk-spinner-circle .sk-circle6 {
    -webkit-transform: rotate(150deg);
    -ms-transform: rotate(150deg);
    transform: rotate(150deg)
}
.sk-spinner-circle .sk-circle7 {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg)
}
.sk-spinner-circle .sk-circle8 {
    -webkit-transform: rotate(210deg);
    -ms-transform: rotate(210deg);
    transform: rotate(210deg)
}
.sk-spinner-circle .sk-circle9 {
    -webkit-transform: rotate(240deg);
    -ms-transform: rotate(240deg);
    transform: rotate(240deg)
}
.sk-spinner-circle .sk-circle10 {
    -webkit-transform: rotate(270deg);
    -ms-transform: rotate(270deg);
    transform: rotate(270deg)
}
.sk-spinner-circle .sk-circle11 {
    -webkit-transform: rotate(300deg);
    -ms-transform: rotate(300deg);
    transform: rotate(300deg)
}
.sk-spinner-circle .sk-circle12 {
    -webkit-transform: rotate(330deg);
    -ms-transform: rotate(330deg);
    transform: rotate(330deg)
}
.sk-spinner-circle .sk-circle2:before {
    -webkit-animation-delay: -1.1s;
    animation-delay: -1.1s
}
.sk-spinner-circle .sk-circle3:before {
    -webkit-animation-delay: -1s;
    animation-delay: -1s
}
.sk-spinner-circle .sk-circle4:before {
    -webkit-animation-delay: -.9s;
    animation-delay: -.9s
}
.sk-spinner-circle .sk-circle5:before {
    -webkit-animation-delay: -.8s;
    animation-delay: -.8s
}
.sk-spinner-circle .sk-circle6:before {
    -webkit-animation-delay: -.7s;
    animation-delay: -.7s
}
.sk-spinner-circle .sk-circle7:before {
    -webkit-animation-delay: -.6s;
    animation-delay: -.6s
}
.sk-spinner-circle .sk-circle8:before {
    -webkit-animation-delay: -.5s;
    animation-delay: -.5s
}
.sk-spinner-circle .sk-circle9:before {
    -webkit-animation-delay: -.4s;
    animation-delay: -.4s
}
.sk-spinner-circle .sk-circle10:before {
    -webkit-animation-delay: -.3s;
    animation-delay: -.3s
}
.sk-spinner-circle .sk-circle11:before {
    -webkit-animation-delay: -.2s;
    animation-delay: -.2s
}
.sk-spinner-circle .sk-circle12:before {
    -webkit-animation-delay: -.1s;
    animation-delay: -.1s
}
@-webkit-keyframes sk-circleBounceDelay {
    0%,
    100%,
    80% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    40% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
@keyframes sk-circleBounceDelay {
    0%,
    100%,
    80% {
        -webkit-transform: scale(0);
        transform: scale(0)
    }
    40% {
        -webkit-transform: scale(1);
        transform: scale(1)
    }
}
.sk-spinner-cube-grid.sk-spinner {
    width: 30px;
    height: 30px;
    margin: 0 auto
}
.sk-spinner-cube-grid .sk-cube {
    width: 33%;
    height: 33%;
    background-color: #1ab394;
    float: left;
    -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
    animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out
}
.sk-spinner-cube-grid .sk-cube:nth-child(1) {
    -webkit-animation-delay: .2s;
    animation-delay: .2s
}
.sk-spinner-cube-grid .sk-cube:nth-child(2) {
    -webkit-animation-delay: .3s;
    animation-delay: .3s
}
.sk-spinner-cube-grid .sk-cube:nth-child(3) {
    -webkit-animation-delay: .4s;
    animation-delay: .4s
}
.sk-spinner-cube-grid .sk-cube:nth-child(4) {
    -webkit-animation-delay: .1s;
    animation-delay: .1s
}
.sk-spinner-cube-grid .sk-cube:nth-child(5) {
    -webkit-animation-delay: .2s;
    animation-delay: .2s
}
.sk-spinner-cube-grid .sk-cube:nth-child(6) {
    -webkit-animation-delay: .3s;
    animation-delay: .3s
}
.sk-spinner-cube-grid .sk-cube:nth-child(7) {
    -webkit-animation-delay: 0s;
    animation-delay: 0s
}
.sk-spinner-cube-grid .sk-cube:nth-child(8) {
    -webkit-animation-delay: .1s;
    animation-delay: .1s
}
.sk-spinner-cube-grid .sk-cube:nth-child(9) {
    -webkit-animation-delay: .2s;
    animation-delay: .2s
}
@-webkit-keyframes sk-cubeGridScaleDelay {
    0%,
    100%,
    70% {
        -webkit-transform: scale3D(1, 1, 1);
        transform: scale3D(1, 1, 1)
    }
    35% {
        -webkit-transform: scale3D(0, 0, 1);
        transform: scale3D(0, 0, 1)
    }
}
@keyframes sk-cubeGridScaleDelay {
    0%,
    100%,
    70% {
        -webkit-transform: scale3D(1, 1, 1);
        transform: scale3D(1, 1, 1)
    }
    35% {
        -webkit-transform: scale3D(0, 0, 1);
        transform: scale3D(0, 0, 1)
    }
}
.sk-spinner-wordpress.sk-spinner {
    background-color: #1ab394;
    width: 30px;
    height: 30px;
    border-radius: 30px;
    position: relative;
    margin: 0 auto;
    -webkit-animation: sk-innerCircle 1s linear infinite;
    animation: sk-innerCircle 1s linear infinite
}
.sk-spinner-wordpress .sk-inner-circle {
    display: block;
    background-color: #fff;
    width: 8px;
    height: 8px;
    position: absolute;
    border-radius: 8px;
    top: 5px;
    left: 5px
}
@-webkit-keyframes sk-innerCircle {
    0% {
        -webkit-transform: rotate(0);
        transform: rotate(0)
    }
    100% {
        -webkit-transform: rotate(360deg);
        transform: rotate(360deg)
    }
}
@keyframes sk-innerCircle {
    0% {
        -webkit-transform: rotate(0);
        transform: rotate(0)
    }
    100% {
        -webkit-transform: rotate(360deg);
        transform: rotate(360deg)
    }
}
.sk-spinner-fading-circle.sk-spinner {
    margin: 0 auto;
    width: 22px;
    height: 22px;
    position: relative
}
.sk-spinner-fading-circle .sk-circle {
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0
}
.sk-spinner-fading-circle .sk-circle:before {
    content: '';
    display: block;
    margin: 0 auto;
    width: 18%;
    height: 18%;
    background-color: #1ab394;
    border-radius: 100%;
    -webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
    animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
    -webkit-animation-fill-mode: both;
    animation-fill-mode: both
}
.sk-spinner-fading-circle .sk-circle2 {
    -webkit-transform: rotate(30deg);
    -ms-transform: rotate(30deg);
    transform: rotate(30deg)
}
.sk-spinner-fading-circle .sk-circle3 {
    -webkit-transform: rotate(60deg);
    -ms-transform: rotate(60deg);
    transform: rotate(60deg)
}
.sk-spinner-fading-circle .sk-circle4 {
    -webkit-transform: rotate(90deg);
    -ms-transform: rotate(90deg);
    transform: rotate(90deg)
}
.sk-spinner-fading-circle .sk-circle5 {
    -webkit-transform: rotate(120deg);
    -ms-transform: rotate(120deg);
    transform: rotate(120deg)
}
.sk-spinner-fading-circle .sk-circle6 {
    -webkit-transform: rotate(150deg);
    -ms-transform: rotate(150deg);
    transform: rotate(150deg)
}
.sk-spinner-fading-circle .sk-circle7 {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg)
}
.sk-spinner-fading-circle .sk-circle8 {
    -webkit-transform: rotate(210deg);
    -ms-transform: rotate(210deg);
    transform: rotate(210deg)
}
.sk-spinner-fading-circle .sk-circle9 {
    -webkit-transform: rotate(240deg);
    -ms-transform: rotate(240deg);
    transform: rotate(240deg)
}
.sk-spinner-fading-circle .sk-circle10 {
    -webkit-transform: rotate(270deg);
    -ms-transform: rotate(270deg);
    transform: rotate(270deg)
}
.sk-spinner-fading-circle .sk-circle11 {
    -webkit-transform: rotate(300deg);
    -ms-transform: rotate(300deg);
    transform: rotate(300deg)
}
.sk-spinner-fading-circle .sk-circle12 {
    -webkit-transform: rotate(330deg);
    -ms-transform: rotate(330deg);
    transform: rotate(330deg)
}
.sk-spinner-fading-circle .sk-circle2:before {
    -webkit-animation-delay: -1.1s;
    animation-delay: -1.1s
}
.sk-spinner-fading-circle .sk-circle3:before {
    -webkit-animation-delay: -1s;
    animation-delay: -1s
}
.sk-spinner-fading-circle .sk-circle4:before {
    -webkit-animation-delay: -.9s;
    animation-delay: -.9s
}
.sk-spinner-fading-circle .sk-circle5:before {
    -webkit-animation-delay: -.8s;
    animation-delay: -.8s
}
.sk-spinner-fading-circle .sk-circle6:before {
    -webkit-animation-delay: -.7s;
    animation-delay: -.7s
}
.sk-spinner-fading-circle .sk-circle7:before {
    -webkit-animation-delay: -.6s;
    animation-delay: -.6s
}
.sk-spinner-fading-circle .sk-circle8:before {
    -webkit-animation-delay: -.5s;
    animation-delay: -.5s
}
.sk-spinner-fading-circle .sk-circle9:before {
    -webkit-animation-delay: -.4s;
    animation-delay: -.4s
}
.sk-spinner-fading-circle .sk-circle10:before {
    -webkit-animation-delay: -.3s;
    animation-delay: -.3s
}
.sk-spinner-fading-circle .sk-circle11:before {
    -webkit-animation-delay: -.2s;
    animation-delay: -.2s
}
.sk-spinner-fading-circle .sk-circle12:before {
    -webkit-animation-delay: -.1s;
    animation-delay: -.1s
}
@-webkit-keyframes sk-circleFadeDelay {
    0%,
    100%,
    39% {
        opacity: 0
    }
    40% {
        opacity: 1
    }
}
@keyframes sk-circleFadeDelay {
    0%,
    100%,
    39% {
        opacity: 0
    }
    40% {
        opacity: 1
    }
}
body.rtls #page-wrapper {
    margin: 0 220px 0 0
}
body.rtls .nav-second-level li a {
    padding: 7px 35px 7px 10px
}
body.rtls .ibox-title h5 {
    float: right
}
body.rtls .pull-right {
    float: left!important
}
body.rtls .pull-left {
    float: right!important
}
body.rtls .ibox-tools,
body.rtls .stat-percent {
    float: left
}
body.rtls .navbar-right {
    float: left!important
}
body.rtls .navbar-top-links li:last-child {
    margin-right: 0
}
body.rtls .minimalize-styl-2 {
    float: right;
    margin: 14px 20px 5px 5px
}
body.rtls .feed-element>.pull-left {
    margin-left: 10px;
    margin-right: 0
}
body.rtls .timeline-item .date {
    text-align: left
}
body.rtls .timeline-item .date i {
    left: 0;
    right: auto
}
body.rtls .timeline-item .content {
    border-right: 1px solid #e7eaec;
    border-left: none
}
body.rtls .toast-close-button {
    float: left
}
body.rtls #toast-container>.toast:before {
    margin: auto -1.5em auto .5em
}
body.rtls #toast-container>div {
    padding: 15px 50px 15px 15px
}
body.rtls .center-orientation .vertical-timeline-icon i {
    margin-left: 0;
    margin-right: -12px
}
body.rtls .vertical-timeline-icon i {
    right: 50%;
    left: auto;
    margin-left: auto;
    margin-right: -12px
}
body.rtls .file-box,
body.rtls ul.notes li {
    float: right
}
body.rtls .chat-statistic,
body.rtls .chat-users {
    margin-right: -30px;
    margin-left: auto
}
body.rtls .dropdown-menu>li>a {
    text-align: right
}
body.rtls .b-r {
    border-left: 1px solid #e7eaec;
    border-right: none
}
body.rtls .dd-list .dd-list {
    padding-right: 30px;
    padding-left: 0
}
body.rtls .dd-item>button {
    float: right
}
body.rtls .skin-setttings {
    margin-right: 40px;
    margin-left: 0;
    direction: ltr
}
body.rtls .footer.fixed {
    margin-right: 220px;
    margin-left: 0
}
@media (max-width:992px) {
    body.rtls .chat-statistic,
    body.rtls .chat-users {
        margin-right: 0
    }
}
body.body-small.mini-navbar .footer.fixed,
body.rtls.mini-navbar .footer.fixed {
    margin: 0 70px 0 0
}
body.body-small.mini-navbar .footer.fixed,
body.rtls.mini-navbar.fixed-sidebar .footer.fixed {
    margin: 0
}
body.rtls.top-navigation .navbar-toggle {
    float: right;
    margin-left: 15px;
    margin-right: 15px
}
.body-small.rtls.top-navigation .navbar-header {
    float: none
}
body.rtls.top-navigation #page-wrapper {
    margin: 0
}
body.rtls.mini-navbar #page-wrapper {
    margin: 0 70px 0 0
}
body.rtls.mini-navbar.fixed-sidebar #page-wrapper {
    margin: 0
}
body.rtls.body-small.fixed-sidebar.mini-navbar #page-wrapper {
    margin: 0 220px 0 0
}
body.rtls.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
    width: 220px
}
.body-small.rtls .navbar-fixed-top {
    margin-right: 0
}
.body-small.rtls .navbar-header {
    float: right
}
body.rtls .navbar-top-links li:last-child {
    margin-left: 20px
}
body.rtls .top-navigation #page-wrapper,
body.rtls .top-navigation .footer.fixed,
body.rtls.mini-navbar .top-navigation #page-wrapper,
body.rtls.mini-navbar.top-navigation #page-wrapper,
body.rtls.top-navigation .footer.fixed {
    margin: 0
}
@media (max-width:768px) {
    body.rtls .navbar-top-links li:last-child {
        margin-left: 20px
    }
    .body-small.rtls #page-wrapper {
        position: inherit;
        margin: 0;
        min-height: 1000px
    }
    .body-small.rtls .navbar-static-side {
        display: none;
        z-index: 2001;
        position: absolute;
        width: 70px
    }
    .body-small.rtls.mini-navbar .navbar-static-side {
        display: block
    }
    .rtls.fixed-sidebar.body-small .navbar-static-side {
        display: none;
        z-index: 2001;
        position: fixed;
        width: 220px
    }
    .rtls.fixed-sidebar.body-small.mini-navbar .navbar-static-side {
        display: block
    }
}
.rtls .ltr-support {
    direction: ltr
}
.skin-setttings .title {
    background: #efefef;
    text-align: center;
    text-transform: uppercase;
    font-weight: 600;
    display: block;
    padding: 10px 15px;
    font-size: 12px
}
.setings-item {
    padding: 10px 30px
}
.setings-item.nb {
    border: none
}
.setings-item.skin {
    text-align: center
}
.setings-item .switch {
    float: right
}
.skin-name a {
    text-transform: uppercase
}
.setings-item a {
    color: #fff
}
.blue-skin,
.default-skin,
.ultra-skin,
.yellow-skin {
    text-align: center
}
.default-skin {
    font-weight: 600;
    background: #1ab394
}
.default-skin:hover {
    background: #199d82
}
.blue-skin {
    font-weight: 600;
    background: url(patterns/header-profile-skin-1.png) repeat scroll 0 0
}
.blue-skin:hover {
    background: #0d8ddb
}
.yellow-skin {
    font-weight: 600;
    background: url(patterns/header-profile-skin-3.png) repeat scroll 0 100%
}
.yellow-skin:hover {
    background: #ce8735
}
.content-tabs {
    border-bottom: solid 2px #2f4050
}
.page-tabs a {
    color: #333;
    display: inline-block;
    position: relative;
}
.page-tabs a i {
    color: #ccc
}
.page-tabs a.active {
    /*background: #2f4050;
    color: #a7b1c2*/
    color: #17b3ec;
    background: #fff;
}
.page-tabs a.active:after{
    content: '';
    position: absolute;
    display: block;
    width: 100%;
    height: 2px;
    bottom: 0;
    left: 0;
    background-color: #17b3ec;
}
.page-tabs a.active i:hover,
.page-tabs a.active:hover {
    /*background: #293846;
    color: #fff*/
    color: #17b3ec;
    background: #fff;
}
.skin-1 .minimalize-styl-2 {
    margin: 14px 5px 5px 30px
}
.skin-1 .navbar-top-links li:last-child {
    margin-right: 30px
}
.skin-1.fixed-nav .minimalize-styl-2 {
    margin: 14px 5px 5px 15px
}
.skin-1 .spin-icon {
    background: #0e9aef!important
}
.skin-1 .nav-header {
    background: #0e9aef;
    background: url(patterns/header-profile-skin-1.png)
}
.skin-1.mini-navbar .nav-second-level {
    background: #3e495f
}
.skin-1 .breadcrumb {
    background: 0 0
}
.skin-1 .page-heading {
    border: none
}
.skin-1 .nav>li.active {
    background: #3a4459
}
.skin-1 .nav>li>a {
    color: #9ea6b9
}
.skin-1 .nav>li.active>a {
    color: #fff
}
.skin-1 .navbar-minimalize {
    background: #0e9aef;
    border-color: #0e9aef
}
body.skin-1 {
    background: #3e495f
}
.skin-1 .navbar-static-top {
    background: #fff
}
.skin-1 .dashboard-header {
    background: 0 0;
    border-bottom: none!important;
    border-top: none;
    padding: 20px 30px 10px
}
.fixed-nav.skin-1 .navbar-fixed-top {
    background: #fff
}
.skin-1 .wrapper-content {
    padding: 30px 15px
}
.skin-1 #page-wrapper {
    background: #f4f6fa
}
.skin-1 .ibox-content,
.skin-1 .ibox-title {
    border-width: 1px
}
.skin-1 .ibox-content:last-child {
    border-style: solid
}
.skin-1 .nav>li.active {
    border: none
}
.skin-1 .nav-header {
    padding: 35px 25px 25px
}
.skin-1 .nav-header a.dropdown-toggle {
    color: #fff;
    margin-top: 10px
}
.skin-1 .nav-header a.dropdown-toggle .text-muted {
    color: #fff;
    opacity: .8
}
.skin-1 .profile-element {
    text-align: center
}
.skin-1 .img-circle {
    border-radius: 5px
}
.skin-1 .navbar-default .nav>li>a:focus,
.skin-1 .navbar-default .nav>li>a:hover {
    background: #39aef5;
    color: #fff
}
.skin-1 .nav.nav-tabs>li.active>a {
    color: #555
}
.skin-1 .content-tabs {
    border-bottom: solid 2px #39aef5
}
.skin-1 .nav.nav-tabs>li.active {
    background: 0 0
}
.skin-1 .page-tabs a.active {
    background: #39aef5;
    color: #fff
}
.skin-1 .page-tabs a.active i:hover,
.skin-1 .page-tabs a.active:hover {
    background: #0e9aef;
    color: #fff
}
.skin-3 .minimalize-styl-2 {
    margin: 14px 5px 5px 30px
}
.skin-3 .navbar-top-links li:last-child {
    margin-right: 30px
}
.skin-3.fixed-nav .minimalize-styl-2 {
    margin: 14px 5px 5px 15px
}
.skin-3 .spin-icon {
    background: #ecba52!important
}
body.boxed-layout.skin-3 #wrapper {
    background: #3e2c42
}
.skin-3 .nav-header {
    background: #ecba52;
    background: url(patterns/header-profile-skin-3.png)
}
.skin-3.mini-navbar .nav-second-level {
    background: #3e2c42
}
.skin-3 .breadcrumb {
    background: 0 0
}
.skin-3 .page-heading {
    border: none
}
.skin-3 .nav>li.active {
    background: #38283c
}
.fixed-nav.skin-3 .navbar-fixed-top {
    background: #fff
}
.skin-3 .nav>li>a {
    color: #948b96
}
.skin-3 .nav>li.active>a {
    color: #fff
}
.skin-3 .navbar-minimalize {
    background: #ecba52;
    border-color: #ecba52
}
body.skin-3 {
    background: #3e2c42
}
.skin-3 .navbar-static-top {
    background: #fff
}
.skin-3 .dashboard-header {
    background: 0 0;
    border-bottom: none!important;
    border-top: none;
    padding: 20px 30px 10px
}
.skin-3 .wrapper-content {
    padding: 30px 15px
}
.skin-3 #page-wrapper {
    background: #f4f6fa
}
.skin-3 .ibox-content,
.skin-3 .ibox-title {
    border-width: 1px
}
.skin-3 .ibox-content:last-child {
    border-style: solid
}
.skin-3 .nav>li.active {
    border: none
}
.skin-3 .nav-header {
    padding: 35px 25px 25px
}
.skin-3 .nav-header a.dropdown-toggle {
    color: #fff;
    margin-top: 10px
}
.skin-3 .nav-header a.dropdown-toggle .text-muted {
    color: #fff;
    opacity: .8
}
.skin-3 .profile-element {
    text-align: center
}
.skin-3 .img-circle {
    border-radius: 5px
}
.skin-3 .navbar-default .nav>li>a:focus,
.skin-3 .navbar-default .nav>li>a:hover {
    background: #38283c;
    color: #fff
}
.skin-3 .nav.nav-tabs>li.active>a {
    color: #555
}
.skin-3 .content-tabs {
    border-bottom: solid 2px #3e2c42
}
.skin-3 .nav.nav-tabs>li.active {
    background: 0 0
}
.skin-3 .page-tabs a.active {
    background: #3e2c42;
    color: #fff
}
.skin-3 .page-tabs a.active i:hover,
.skin-3 .page-tabs a.active:hover {
    background: #38283c;
    color: #fff
}
@media (min-width:768px) {
    .navbar-top-links .dropdown-alerts,
    .navbar-top-links .dropdown-messages,
    .navbar-top-links .dropdown-tasks {
        margin-left: auto
    }
}
@media (max-width:768px) {
    body.fixed-sidebar .navbar-static-side {
        display: none
    }
    body.fixed-sidebar.mini-navbar .navbar-static-side {
        width: 70px
    }
    .lock-word,
    .navbar-form-custom {
        display: none
    }
    .navbar-header {
        display: inline;
        float: left
    }
    .sidebard-panel {
        z-index: 2;
        position: relative;
        width: auto;
        min-height: 100%!important
    }
    .sidebar-content .wrapper {
        padding-right: 0;
        z-index: 1
    }
    .fixed-sidebar.body-small .navbar-static-side {
        display: none;
        z-index: 2001;
        position: fixed;
        width: 220px
    }
    .fixed-sidebar.body-small.mini-navbar .navbar-static-side {
        display: block
    }
    .ibox-tools {
        float: none;
        text-align: right;
        display: block
    }
    .content-tabs {
        display: none
    }
    #content-main {
        height: calc(100% - 100px)
    }
    .fixed-nav #content-main {
        height: calc(100% - 38px)
    }
}
.navbar-static-side {
    background: #2f4050
}
.nav-close {
    padding: 10px;
    position: absolute;
    right: 5px;
    top: 5px;
    font-size: 1.4em;
    cursor: pointer;
    z-index: 10;
    display: none;
    color: rgba(255, 255, 255, .3)
}
@media (max-width:350px) {
    body.fixed-sidebar.mini-navbar .navbar-static-side {
        width: 0
    }
    .nav-close {
        display: block
    }
    #page-wrapper {
        margin-left: 0!important
    }
    .timeline-item .date {
        text-align: left;
        width: 110px;
        position: relative;
        padding-top: 30px
    }
    .timeline-item .date i {
        position: absolute;
        top: 0;
        left: 15px;
        padding: 5px;
        width: 30px;
        text-align: center;
        border: 1px solid #e7eaec;
        background: #f8f8f8
    }
    .timeline-item .content {
        border-left: none;
        border-top: 1px solid #e7eaec;
        padding-top: 10px;
        min-height: 100px
    }
    .nav.navbar-top-links li.dropdown {
        display: none
    }
    .ibox-tools {
        float: none;
        text-align: left;
        display: inline-block
    }
}
.ui-jqgrid-titlebar {
    height: 40px;
    line-height: 24px;
    color: #676a6c;
    background-color: #F9F9F9;
    text-shadow: 0 1px 0 rgba(255, 255, 255, .5)
}
.ui-jqgrid .ui-jqgrid-title {
    float: left;
    margin-left: 5px;
    font-weight: 700
}
.ui-jqgrid .ui-jqgrid-titlebar {
    position: relative;
    border-left: 0 solid;
    border-right: 0 solid;
    border-top: 0 solid
}
.social-feed-separated .social-feed-box {
    margin-left: 62px
}
.social-feed-separated .social-avatar {
    float: left;
    padding: 0
}
.social-feed-separated .social-avatar img {
    width: 52px;
    height: 52px;
    border: 1px solid #e7eaec
}
.social-feed-separated .social-feed-box .social-avatar {
    padding: 15px 15px 0;
    float: none
}
.social-feed-box {
    border: 1px solid #e7eaec;
    background: #fff;
    margin-bottom: 15px
}
.article .social-feed-box {
    margin-bottom: 0;
    border-bottom: none
}
.article .social-feed-box:last-child {
    margin-bottom: 0;
    border-bottom: 1px solid #e7eaec
}
.article .social-feed-box p {
    font-size: 13px;
    line-height: 18px
}
.social-action {
    margin: 15px
}
.social-avatar {
    padding: 15px 15px 0
}
.social-comment .social-comment {
    margin-left: 45px
}
.social-avatar img {
    height: 40px;
    width: 40px;
    margin-right: 10px
}
.social-avatar .media-body a {
    font-size: 14px;
    display: block
}
.social-body {
    padding: 15px
}
.social-body img {
    margin-bottom: 10px
}
.social-footer {
    border-top: 1px solid #e7eaec;
    padding: 10px 15px;
    background: #f9f9f9
}
.social-footer .social-comment img {
    width: 32px;
    margin-right: 10px
}
.social-comment:first-child {
    margin-top: 0
}
.social-comment {
    margin-top: 15px
}
.social-comment textarea {
    font-size: 12px
}
.checkbox input[type=checkbox],
.checkbox-inline input[type=checkbox],
.radio input[type=radio],
.radio-inline input[type=radio] {
    margin-top: -4px
}
@media (max-width:1000px) {
    .welcome-message {
        display: none
    }
}
.echarts {
    height: 240px
}
.checkbox-inline,
.checkbox-inline+.checkbox-inline,
.radio-inline,
.radio-inline+.radio-inline {
    margin: 0 15px 0 0
}
.navbar-toggle {
    background-color: #fff
}
.J_menuTab {
    -webkit-transition: all .3s ease-out 0s;
    transition: all .3s ease-out 0s
}
::-webkit-scrollbar-track {
    background-color: #F5F5F5
}
::-webkit-scrollbar {
    width: 6px;
    background-color: #F5F5F5
}
::-webkit-scrollbar-thumb {
    background-color: #999
}
.gohome {
    position: fixed;
    top: 20px;
    right: 20px;
    z-index: 100
}
.gohome a {
    height: 38px;
    width: 38px;
    display: block;
    background: #2f4050;
    padding: 9px 8px;
    text-align: center;
    color: #fff;
    border-radius: 50%;
    opacity: .5
}
.gohome a:hover {
    opacity: 1
}
@media only screen and (-webkit-min-device-pixel-ratio:2) {
    #content-main {
        -webkit-overflow-scrolling: touch;
    }
}
.navbar-header {
    width: 60%
}
.bs-glyphicons {
    margin: 0 -10px 20px;
    overflow: hidden
}
.bs-glyphicons-list {
    padding-left: 0;
    list-style: none
}
.bs-glyphicons li {
    float: left;
    width: 25%;
    height: 115px;
    padding: 10px;
    font-size: 10px;
    line-height: 1.4;
    text-align: center;
    background-color: #f9f9f9;
    border: 1px solid #fff
}
.bs-glyphicons .glyphicon {
    margin-top: 5px;
    margin-bottom: 10px;
    font-size: 24px
}
.bs-glyphicons .glyphicon-class {
    display: block;
    text-align: center;
    word-wrap: break-word
}
.bs-glyphicons li:hover {
    color: #fff;
    background-color: #1ab394
}
@media (min-width:768px) {
    .bs-glyphicons {
        margin-right: 0;
        margin-left: 0
    }
    .bs-glyphicons li {
        width: 12.5%;
        font-size: 12px
    }
}html,body,div,span,object,iframe,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,input,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video,h1,h2,h3,h4,h5,h6 {
    margin: 0;
    padding: 0;
    border: 0;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
    -webkit-touch-callout: none;
}
/*---------common-------------------------*/
.clearfix:after {visibility:hidden;display:block;font-size:0;content:".";clear:both;height:0;}
.clearfix {zoom:1;}
.fl,.fr {display:inline;}
.fl {float:left;}
.fr {float:right;}
/*----Cross css base
------------------------------*/
.c-hide {display:none;}
.c-block {display:block;}
.c-hidden {overflow:hidden; zoom:1;}
.c-boxs {-webkit-box-sizing:border-box;-ms-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
.c-main {margin:0 auto;}
.c-nowrap {max-width:100%; _width:100%; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;}
.c-break{word-wrap: break-word; word-break:break-all;}
.c-inline-block{ display:inline-block;}
.c-auto-y {overflow-y: auto;}
.c-cursor-p {cursor: pointer;}
.c-vam {vertical-align:middle;}
/* color and background
-----------------------------------------------------------------------------*/
.c-fff {color:#fff;}
.c-000 {color:#000;}
.c-222 {color:#222;}
.c-333 {color:#333;}
.c-555 {color:#555;}
.c-666 {color:#666;}
.c-999 {color:#999;}
.c-f00 {color:#f00;}
.c-f60 {color:#f60;}
.c-f90 {color:#f90;}
.c-37a6ed {color:#37a6ed;}
.c-5b5b5b {color:#5b5b5b;}
.c-909090 {color:#909090;}
.c-ff8100 {color:#ff8100;}
.c-007cd9 {color:#007cd9;}
.c-4dcd70 {color:#4dcd70;}
.bgc-fff {background-color:#fff;}
.bgc-f3f3f3 {background-color:#f3f3f3;}
.bgc-fdfdfd {background-color: #fdfdfd;}
.bgc-f9f9f9 {background-color:#f9f9f9;}
/* border
-----------------------------------------------------------------------------*/
.c-border , .c-border-t , .c-border-b , .c-border-l , .c-border-r , .c-border-tb {border-color:#e1e1e1; border-style:solid;}
.c-border {border-width:1px}
.c-border-t {border-top-width:1px}
.c-border-b {border-bottom-width:1px}
.c-border-l {border-left-width:1px}
.c-border-r {border-right-width:1px}
.c-border-tb {border-top-width:1px;border-bottom-width:1px}
.c-border-d {border-style:dashed}
/* position
-----------------------------------------------------------------------------*/
.c-position-a {position:absolute;}
.c-position-r {position:relative;*zoom:1;}
.c-position-f {position:fixed;}
.c-position-all {left: 0px; right: 0px; top: 0px; bottom: 0px;}
.c-position-lt0 {left: 0px; top: 0px;}.c-position-lt5 {left: 5px; top: 5px;}.c-position-lt10 {left: 10px; top: 10px;}.c-position-lt15 {left: 15px; top: 15px;}.c-position-lt20 {left: 20px; top: 20px;}
.c-position-rt0 {right: 0px; top: 0px;}.c-position-rt5 {right: 5px; top: 5px;}.c-position-rt10 {right: 10px; top: 10px;}.c-position-rt15 {right: 15px; top: 15px;}.c-position-rt20 {right: 20px; top: 20px;}
.c-position-lb0 {left: 0px; bottom: 0px;}.c-position-lb5 {left: 5px; bottom: 5px;}.c-position-lb10 {left: 10px; bottom: 10px;}.c-position-lb15 {left: 15px; bottom: 15px;}.c-position-lb20 {left: 20px; bottom: 20px;}
.c-position-rb0 {right: 0px; bottom: 0px;}.c-position-rb5 {right: 5px; bottom: 5px;}.c-position-rb10 {right: 10px; bottom: 10px;}.c-position-rb15 {right: 15px; bottom: 15px;}.c-position-rb20 {right: 20px; bottom: 20px;}
/* images  and   radius
-----------------------------------------------------------------------------*/
.c-images-rounded , .border-radius-rounded {border-radius:5px;}
.c-images-cycle , .border-radius-circle{border-radius:50%;}
.border-radius-pill {border-radius:1000px;}
.c-images-thumbnail {padding:5px;}
.c-images-block {display:block; width:100%; height:100%;}
/* width  and   height
-----------------------------------------------------------------------------*/
.w100 {width: 100px;}
.w150 {width: 150px;}
.w200 {width: 200px;}
.w250 {width: 250px;}
.w300 {width: 300px;}
.w350 {width: 350px;}
.w400 {width: 400px;}
.w450 {width: 450px;}
.w500 {width: 500px;}
.w550 {width: 550px;}
.w1000 {width: 1000px;}
.w1200 {width: 1200px;}
.h100 {height: 100px;}
.h150 {height: 150px;}
.h200 {height: 200px;}
.h250 {height: 250px;}
.h300 {height: 300px;}
.h350 {height: 350px;}
.h400 {height: 400px;}
.h450 {height: 450px;}
.h500 {height: 500px;}
.h550 {height: 550px;}
/* spacing
-----------------------------------------------------------------------------*/
.m0 { margin:0;}.m5 { margin:5px;}.m10 { margin:10px;}.m15 { margin:15px;}.m20 { margin:20px;}.m25 { margin:25px;}.m30 { margin:30px;}.m35 { margin:35px;}.m40 { margin:40px;}.m45 { margin:45px;}.m50 { margin:50px;}.m100 {margin:100px;}
.mb0 { margin-bottom:0;}.mb5 { margin-bottom: 5px;}.mb10 { margin-bottom: 10px;}.mb15 { margin-bottom: 15px;}.mb20 { margin-bottom: 20px;}.mb25 { margin-bottom: 25px;}.mb30 { margin-bottom: 30px;}.mb35 { margin-bottom: 35px;}.mb40 { margin-bottom: 40px;}.mb45 { margin-bottom: 45px;}.mb50 { margin-bottom: 50px;}.mb100 {margin-bottom:100px;}
.mt0 { margin-top:0;}.mt5 { margin-top: 5px;}.mt10 { margin-top: 10px;}.mt15 { margin-top: 15px;}.mt20 { margin-top: 20px;}.mt25 { margin-top: 25px;}.mt30 { margin-top: 30px;}.mt35 { margin-top: 35px;}.mt40 { margin-top: 40px;}.mt45 { margin-top: 45px;}.mt50 { margin-top: 50px;}.mt100 {margin-top:100px;}
.ml0 { margin-left:0;}.ml5 { margin-left: 5px;}.ml10 { margin-left: 10px;}.ml15 { margin-left: 15px;}.ml20 { margin-left: 20px;}.ml25 { margin-left: 25px;}.ml30 { margin-left: 30px;}.ml35 { margin-left: 35px;}.ml40 { margin-left: 40px;}.ml45 { margin-left: 45px;}.ml50 { margin-left: 50px;}.ml100 {margin-left:100px;}
.mr0 { margin-right:0;}.mr5 { margin-right: 5px;}.mr10 { margin-right: 10px;}.mr15 { margin-right: 15px;}.mr20 { margin-right: 20px;}.mr25 { margin-right: 25px;}.mr30 { margin-right: 30px;}.mr35 { margin-right: 35px;}.mr40 { margin-right: 40px;}.mr45 { margin-right: 45px;}.mr50 { margin-right: 50px;}.mr100 {margin-right:100px;}
.mlr5 {margin-left:5px; margin-right:5px;}.mlr10 {margin-left:10px; margin-right:10px;}.mlr15 {margin-left:15px; margin-right:15px;}.mlr20 {margin-left:20px; margin-right:20px;}.mlr30 {margin-left:30px; margin-right:30px;}.mlr40 {margin-left:40px; margin-right:40px;}.mlr50 {margin-left:50px; margin-right:50px;}.mlr100 {margin-left:100px; margin-right:100px;}
.mtb5 {margin-top:5px; margin-bottom:5px;}.mtb10 {margin-top:10px; margin-bottom:10px;}.mtb15 {margin-top:15px; margin-bottom:15px;}.mtb20 {margin-top:20px; margin-bottom:20px;}.mtb30 {margin-top:30px; margin-bottom:30px;}.mtb40 {margin-top:40px; margin-bottom:40px;}.mtb50 {margin-top:50px; margin-bottom:50px;}.mtb100 {margin-top:100px; margin-bottom:100px;}
.p0 { padding:0;}.p5 { padding:5px;}.p10 { padding:10px;}.p15 { padding:15px;}.p20 { padding:20px;}.p25 { padding:25px;}.p30 { padding:30px;}.p35 { padding:35px;}.p40 { padding:40px;}.p45 { padding:45px;}.p50 { padding:50px;}.p100 {padding:100px;}
.pb0 { padding-bottom:0;}.pb5 { padding-bottom: 5px;}.pb10 { padding-bottom: 10px;}.pb15 { padding-bottom: 15px;}.pb20 { padding-bottom: 20px;}.pb25 { padding-bottom: 25px;}.pb30 { padding-bottom: 30px;}.pb35 { padding-bottom: 35px;}.pb40 { padding-bottom: 40px;}.pb45 { padding-bottom: 45px;}.pb50 { padding-bottom: 50px;}.pb100 {padding-bottom:100px;}
.pt0 { padding-top:0;}.pt5 { padding-top: 5px;}.pt10 { padding-top: 10px;}.pt15 { padding-top: 15px;}.pt20 { padding-top: 20px;}.pt25 { padding-top: 25px;}.pt30 { padding-top: 30px;}.pt35 { padding-top: 35px;}.pt40 { padding-top: 40px;}.pt45 { padding-top: 45px;}.pt50 { padding-top: 50px;}.pt100 {padding-top:100px;}
.pl0 { padding-left:0;}.pl5 { padding-left: 5px;}.pl10 { padding-left: 10px;}.pl15 { padding-left: 15px;}.pl20 { padding-left: 20px;}.pl25 { padding-left: 25px;}.pl30 { padding-left: 30px;}.pl35 { padding-left: 35px;}.pl40 { padding-left: 40px;}.pl45 { padding-left: 45px;}.pl50 { padding-left: 50px;}.pl100 {padding-left:100px;}
.pr0 { padding-right:0;}.pr5 { padding-right: 5px;}.pr10 { padding-right: 10px;}.pr15 { padding-right: 15px;}.pr20 { padding-right: 20px;}.pr25 { padding-right: 25px;}.pr30 { padding-right: 30px;}.pr35 { padding-right: 35px;}.pr40 { padding-right: 40px;}.pr45 { padding-right: 45px;}.pr50 { padding-right: 50px;}.pr100 {padding-right:100px;}
.ptb5 {padding-top:5px; padding-bottom:5px;}.ptb10 {padding-top:10px; padding-bottom:10px;}.ptb15 {padding-top:15px; padding-bottom:15px;}.ptb20 {padding-top:20px; padding-bottom:20px;}
.ptb30 {padding-top:30px; padding-bottom:30px;}.ptb40 {padding-top:40px; padding-bottom:40px;}.ptb50 {padding-top:50px; padding-bottom:50px;}.ptb100 {padding-top:100px; padding-bottom:100px;}
.plr5 {padding-left:5px; padding-right:5px;}.plr10 {padding-left:10px; padding-right:10px;}.plr15 {padding-left:15px; padding-right:15px;}.plr20 {padding-left:20px; padding-right:20px;}
.plr30 {padding-left:30px; padding-right:30px;}.plr40 {padding-left:40px; padding-right:40px;}.plr50 {padding-left:50px; padding-right:50px;}.plr100 {padding-left:100px; padding-right:100px;}
/* lists
-----------------------------------------------------------------------------*/
.c-list-disc {list-style-type:disc;}
.c-list-circle {list-style-type:circle;}
.c-list-square {list-style-type:square;}
.c-list-decimal {list-style-type:decimal;}
.c-list-alpha {list-style-type:lower-alpha;}
.c-list-roman {list-style-type:lower-roman;}
.c-list-inline {padding-left:0; margin-left:-5px; list-style:none;}
.c-list-inline li {display:inline-block; padding-right:5px; padding-left:5px;}
/* font
-----------------------------------------------------------------------------*/
.c-simsun {font-family:\5b8b\4f53;}
.c-bold {font-weight:bold;}
.c-f12 {font-size:12px;}
.c-f13 {font-size:13px;}
.c-f14 {font-size:14px;}
.c-f15 {font-size:15px;}
.c-f16 {font-size:16px;}
.c-f17 {font-size:17px;}
.c-f18 {font-size:18px;}
.c-f20 {font-size:20px;}
.c-f22 {font-size:22px;}
.c-f24 {font-size:24px;}
.c-f28 {font-size:28px;}
.c-t-left {text-align:left;}
.c-t-center {text-align:center;}
.c-t-right {text-align:right;}
.c-line-h1 {line-height:1.8; _line-height: 24px;}
.c-line-h2 {line-height:2.2; _line-height: 32px;}
/* Grid
-----------------------------------------------------------------------------*/
.c-container:after,.c-row:after {content: ""; display:table; clear:both;}
.c-container {padding-top:1px; margin-top:-1px;}
.c-row {zoom:1}
.width-100,.c-100 {width:100%;}
.width-90,.c-90 {width:90%;}
.width-80,.c-80 {width:80%;}
.width-75,.c-75 {width:75%;}
.width-70,.c-70 {width:70%;}
.width-66,.c-66 {width:66.6%;}
.width-65,.c-65 {width:65%;}
.width-60,.c-60 {width:60%;}
.width-50,.c-50 {width:50%;}
.width-40,.c-40 {width:40%;}
.width-35,.c-35 {width:35%;}
.width-33,.c-33 {width:33.3%;}
.width-30,.c-30 {width:30%;}
.width-25,.c-25 {width:25%;}
.width-20,.c-20 {width:20%;}
.width-10,.c-10 {width:10%;}
.c-row .c-90,.c-row .c-80,.c-row .c-75,.c-row .c-70,.c-row .c-66,.c-row .c-65,.c-row .c-60,.c-row .c-50,.c-row .c-40,.c-row .c-35,.c-row .c-33,.c-row .c-30,.c-row .c-25,.c-row .c-20,.c-row .c-10 {float:left; margin-left:3%;}
.c-row .c-90:first-child,.c-row .c-80:first-child,.c-row .c-75:first-child,.c-row .c-70:first-child,.c-row .c-66:first-child,.c-row .c-65:first-child,.c-row .c-60:first-child,.c-row .c-50:first-child,.c-row .c-40:first-child,.c-row .c-35:first-child,.c-row .c-33:first-child,.c-row .c-30:first-child,.c-row .c-25:first-child,.c-row .c-20:first-child,.c-row .c-10:first-child {margin-left:0;}
.c-row .c-90 {width:89.7%;}
.c-row .c-80 {width:79.4%;}
.c-row .c-75 {width:74.25%;}
.c-row .c-70 {width:69.1%;}
.c-row .c-66 {width:65.66666666666666%;}
.c-row .c-65 {width:65.66666666666666%;}
.c-row .c-60 {width:58.800000000000004%;}
.c-row .c-50 {width:48.5%;}
.c-row .c-40 {width:38.2%;}
.c-row .c-35 {width:31.333333333333332%;}
.c-row .c-33 {width:31.333333333333332%;}
.c-row .c-30 {width:27.9%;}
.c-row .c-25 {width:22.75%;}
.c-row .c-20 {width:17.6%;}
.c-row .c-10 {width:7.3%;}
.c-push-90,.c-push-80,.c-push-75,.c-push-70,.c-push-66,.c-push-65,.c-push-60,.c-push-50,.c-push-40,.c-push-35,.c-push-33,.c-push-30,.c-push-25,.c-push-20,.c-push-10 {position:relative;}
.c-push-90 {left:92.7%;}
.c-push-80 {left:82.4%;}
.c-push-75 {left:77.25%;}
.c-push-70 {left:72.1%;}
.c-push-66 {left:68.66666666666666%;}
.c-push-65 {left:68.66666666666666%;}
.c-push-60 {left:61.800000000000004%;}
.c-push-50 {left:51.5%;}
.c-push-40 {left:41.2%;}
.c-push-35 {left:34.33333333333333%;}
.c-push-33 {left:34.33333333333333%;}
.c-push-30 {left:30.9%;}
.c-push-25 {left:25.75%;}
.c-push-20 {left:20.6%;}
.c-push-10 {left:10.3%;}
.c-row .c-push-right {float:right;}
.c-row .c-role-right {margin-left:3%; float:right;}
.c-row .c-role-left {margin-left: 0;}
.c-centered {float:none !important; margin:0 auto !important;}
.c-padding {padding:20px;}
.c-padding .c-100,.c-padding .c-90,.c-padding .c-80,.c-padding .c-75,.c-padding .c-70,.c-padding .c-66,.c-padding .c-65,.c-padding .c-60,.c-padding .c-50,.c-padding .c-40,.c-padding .c-35,.c-padding .c-33,.c-padding .c-30,.c-padding .c-25,.c-padding .c-20,.c-padding .c-10 {padding:20px;}
.c-split .c-90,.c-split .c-80,.c-split .c-75,.c-split .c-70,.c-split .c-66,.c-split .c-65,.c-split .c-60,.c-split .c-50,.c-split .c-40,.c-split .c-35,.c-split .c-33,.c-split .c-30,.c-split .c-25,.c-split .c-20,.c-split .c-10 {margin-left:0;}
.c-split .c-90 {width:90%;}
.c-split .c-80 {width:80%;}
.c-split .c-75 {width:75%;}
.c-split .c-70 {width:70%;}
.c-split .c-66 {width:66.6%;}
.c-split .c-65 {width:65%;}
.c-split .c-60 {width:60%;}
.c-split .c-50 {width:50%;}
.c-split .c-40 {width:40%;}
.c-split .c-35 {width:35%;}
.c-split .c-33 {width:33.3%;}
.c-split .c-30 {width:30%;}
.c-split .c-25 {width:25%;}
.c-split .c-20 {width:20%;}
.c-split .c-10 {width:10%;}
/* c-blocks
-----------------------------------------------------------------------------*/
.c-blocks-2,.c-blocks-3,.c-blocks-4,.c-blocks-5,.c-blocks-6 {padding-left:0; list-style: none;}
.c-blocks-2:after,.c-blocks-3:after,.c-blocks-4:after,.c-blocks-5:after,.c-blocks-6:after {content: ""; display:table; clear:both;}
.c-blocks-2 li,.c-blocks-3 li,.c-blocks-4 li,.c-blocks-5 li,.c-blocks-6 li , .c-blocks-2 div,.c-blocks-3 div,.c-blocks-4 div,.c-blocks-5 div,.c-blocks-6 div{height:auto; float:left;}
.c-blocks-2 li , .c-blocks-2 div{width:50%;}
.c-blocks-3 li , .c-blocks-3 div {width:33.333333333333332%;}
.c-blocks-4 li , .c-blocks-4 div {width:25%;}
.c-blocks-5 li , .c-blocks-5 div {width:20%;}
.c-blocks-6 li , .c-blocks-6 div {width:16.666666666666666%;}
.c-blocks-2 li li,.c-blocks-3 li li,.c-blocks-4 li li,.c-blocks-5 li li,.c-blocks-6 li li , .c-blocks-2 div div,.c-blocks-3 div div,.c-blocks-4 div div,.c-blocks-5 div div,.c-blocks-6 div div{float:none; margin:0;}
select{
    height: 30px;
    border-radius: 0;
    background-color: #fff;
    border-color: #e1e1e1;
    border-image: initial;
}
.layui-layer-setwin .layui-layer-close {
    background-position: 0 -40px;
    cursor: pointer;
}
.ui-th-ltr, .ui-jqgrid .ui-jqgrid-htable th.ui-th-ltr{
	text-align: center;
}
i.required {
	vertical-align: middle;
}
i.required:after{
    content: "*";
    color: red;
    font-size: 1.2em;
    vertical-align: middle;
    margin-left: -12px;
    margin-right: 5px;
}
/* css3-Grid
-----------------------------------------------------------------------------*/
.ui-grid { display: -webkit-box; display: box; }
.ui-grid-middle { -webkit-box-pack: center; -webkit-box-align: center; box-pack: center; box-align: center; }
.ui-grid-vertical { -webkit-box-orient: vertical; box-orient: vertical; }
.ui-grid-label { -webkit-box-flex: 0; box-flex: 0; width: 100px; font-weight: 600; }
.ui-col-0 { -webkit-box-flex: 0; box-flex: 0; }
.ui-col-1 { -webkit-box-flex: 1; box-flex: 1; }
.ui-col-2 { -webkit-box-flex: 2; box-flex: 2; }
.ui-col-3 { -webkit-box-flex: 3; box-flex: 3; }
.ui-col-4 { -webkit-box-flex: 4; box-flex: 3; }
.ui-col-5 { -webkit-box-flex: 5; box-flex: 5; }
.ui-col-6 { -webkit-box-flex: 6; box-flex: 6; }
.r0{
    right: 0px!important;
    transition:all 2s;
}
[v-cloak]{display: none;}

+ 59 - 48
js/util.js

@ -1,59 +1,70 @@
Date.prototype.format = function(formatStr)   
{   
    var str = formatStr;   
    var Week = ['日','一','二','三','四','五','六'];  
  
    str=str.replace(/yyyy|YYYY/,this.getFullYear());   
    str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));   
  
    str=str.replace(/MM/,this.getMonth()>8?(this.getMonth()+1).toString():'0' + (this.getMonth()+1)); 
    str=str.replace(/M/g,this.getMonth()+1);
  
    str=str.replace(/w|W/g,Week[this.getDay()]);   
  
    str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());   
    str=str.replace(/d|D/g,this.getDate());   
  
    str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());   
    str=str.replace(/h|H/g,this.getHours());   
    str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());   
    str=str.replace(/m/g,this.getMinutes());   
  
    str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());   
    str=str.replace(/s|S/g,this.getSeconds());   
  
    return str;   
} 
Date.prototype.format = function (formatStr) {
  var str = formatStr
  var Week = ['日', '一', '二', '三', '四', '五', '六']
  str = str.replace(/yyyy|YYYY/, this.getFullYear())
  str = str.replace(
    /yy|YY/,
    this.getYear() % 100 > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100)
  )
  str = str.replace(/MM/, this.getMonth() > 8 ? (this.getMonth() + 1).toString() : '0' + (this.getMonth() + 1))
  str = str.replace(/M/g, this.getMonth() + 1)
  str = str.replace(/w|W/g, Week[this.getDay()])
  str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate())
  str = str.replace(/d|D/g, this.getDate())
  str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours())
  str = str.replace(/h|H/g, this.getHours())
  str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes())
  str = str.replace(/m/g, this.getMinutes())
  str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds())
  str = str.replace(/s|S/g, this.getSeconds())
  return str
}
function isMobilePhone(n) {
	var reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/;
	return reg.test(n)
  var reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/
  return reg.test(n)
}
function isTelPhone(n) {
	var reg = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/
	return reg.test(n)
  var reg = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/
  return reg.test(n)
}
function getDateFromNow(days) {
	if(!days) {
		return new Date().format("yyyy-MM-dd")
	}
	var now = new Date().getTime()
	var diff = 24*3600*1000*days
	return new Date(now + diff).format("yyyy-MM-dd")
  if (!days) {
    return new Date().format('yyyy-MM-dd')
  }
  var now = new Date().getTime()
  var diff = 24 * 3600 * 1000 * days
  return new Date(now + diff).format('yyyy-MM-dd')
}
function GetRequest() {  
   var url = location.search; //获取url中"?"符后的字串
   var theRequest = new Object();
   if (url.indexOf("?") != -1) {
      var str = url.substr(1);
      strs = str.split("&");
      for(var i = 0; i < strs.length; i ++) {
         theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1]);
      }
   }
   return theRequest;
function GetRequest() {
  var url = location.search //获取url中"?"符后的字串
  var theRequest = new Object()
  if (url.indexOf('?') != -1) {
    var str = url.substr(1)
    strs = str.split('&')
    for (var i = 0; i < strs.length; i++) {
      theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]
    }
  }
  return theRequest
}
function getWeek(d) {
  var dateArray = d.split('/')
  var year = dateArray[0],
    month = dateArray[1],
    date = dateArray[2]
  var dt = new Date(year, month - 1, date)
  var weekDay = ['周天', '周一', '周二', '周三', '周四', '周五', '周六']
  return weekDay[dt.getDay()]
}

+ 1671 - 0
plugins/datepicker/bootstrap-datepicker.js

@ -0,0 +1,1671 @@
/* =========================================================
 * bootstrap-datepicker.js
 * Repo: https://github.com/eternicode/bootstrap-datepicker/
 * Demo: http://eternicode.github.io/bootstrap-datepicker/
 * Docs: http://bootstrap-datepicker.readthedocs.org/
 * Forked from http://www.eyecon.ro/bootstrap-datepicker
 * =========================================================
 * Started by Stefan Petre; improvements by Andrew Rowls + contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ========================================================= */
(function($, undefined){
	var $window = $(window);
	function UTCDate(){
		return new Date(Date.UTC.apply(Date, arguments));
	}
	function UTCToday(){
		var today = new Date();
		return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
	}
	function alias(method){
		return function(){
			return this[method].apply(this, arguments);
		};
	}
	var DateArray = (function(){
		var extras = {
			get: function(i){
				return this.slice(i)[0];
			},
			contains: function(d){
				// Array.indexOf is not cross-browser;
				// $.inArray doesn't work with Dates
				var val = d && d.valueOf();
				for (var i=0, l=this.length; i < l; i++)
					if (this[i].valueOf() === val)
						return i;
				return -1;
			},
			remove: function(i){
				this.splice(i,1);
			},
			replace: function(new_array){
				if (!new_array)
					return;
				if (!$.isArray(new_array))
					new_array = [new_array];
				this.clear();
				this.push.apply(this, new_array);
			},
			clear: function(){
				this.splice(0);
			},
			copy: function(){
				var a = new DateArray();
				a.replace(this);
				return a;
			}
		};
		return function(){
			var a = [];
			a.push.apply(a, arguments);
			$.extend(a, extras);
			return a;
		};
	})();
	// Picker object
	var Datepicker = function(element, options){
		this.dates = new DateArray();
		this.viewDate = UTCToday();
		this.focusDate = null;
		this._process_options(options);
		this.element = $(element);
		this.isInline = false;
		this.isInput = this.element.is('input');
		this.component = this.element.is('.date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
		this.hasInput = this.component && this.element.find('input').length;
		if (this.component && this.component.length === 0)
			this.component = false;
		this.picker = $(DPGlobal.template);
		this._buildEvents();
		this._attachEvents();
		if (this.isInline){
			this.picker.addClass('datepicker-inline').appendTo(this.element);
		}
		else {
			this.picker.addClass('datepicker-dropdown dropdown-menu');
		}
		if (this.o.rtl){
			this.picker.addClass('datepicker-rtl');
		}
		this.viewMode = this.o.startView;
		if (this.o.calendarWeeks)
			this.picker.find('tfoot th.today')
						.attr('colspan', function(i, val){
							return parseInt(val) + 1;
						});
		this._allow_update = false;
		this.setStartDate(this._o.startDate);
		this.setEndDate(this._o.endDate);
		this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);
		this.fillDow();
		this.fillMonths();
		this._allow_update = true;
		this.update();
		this.showMode();
		if (this.isInline){
			this.show();
		}
	};
	Datepicker.prototype = {
		constructor: Datepicker,
		_process_options: function(opts){
			// Store raw options for reference
			this._o = $.extend({}, this._o, opts);
			// Processed options
			var o = this.o = $.extend({}, this._o);
			// Check if "de-DE" style date is available, if not language should
			// fallback to 2 letter code eg "de"
			var lang = o.language;
			if (!dates[lang]){
				lang = lang.split('-')[0];
				if (!dates[lang])
					lang = defaults.language;
			}
			o.language = lang;
			switch (o.startView){
				case 2:
				case 'decade':
					o.startView = 2;
					break;
				case 1:
				case 'year':
					o.startView = 1;
					break;
				default:
					o.startView = 0;
			}
			switch (o.minViewMode){
				case 1:
				case 'months':
					o.minViewMode = 1;
					break;
				case 2:
				case 'years':
					o.minViewMode = 2;
					break;
				default:
					o.minViewMode = 0;
			}
			o.startView = Math.max(o.startView, o.minViewMode);
			// true, false, or Number > 0
			if (o.multidate !== true){
				o.multidate = Number(o.multidate) || false;
				if (o.multidate !== false)
					o.multidate = Math.max(0, o.multidate);
				else
					o.multidate = 1;
			}
			o.multidateSeparator = String(o.multidateSeparator);
			o.weekStart %= 7;
			o.weekEnd = ((o.weekStart + 6) % 7);
			var format = DPGlobal.parseFormat(o.format);
			if (o.startDate !== -Infinity){
				if (!!o.startDate){
					if (o.startDate instanceof Date)
						o.startDate = this._local_to_utc(this._zero_time(o.startDate));
					else
						o.startDate = DPGlobal.parseDate(o.startDate, format, o.language);
				}
				else {
					o.startDate = -Infinity;
				}
			}
			if (o.endDate !== Infinity){
				if (!!o.endDate){
					if (o.endDate instanceof Date)
						o.endDate = this._local_to_utc(this._zero_time(o.endDate));
					else
						o.endDate = DPGlobal.parseDate(o.endDate, format, o.language);
				}
				else {
					o.endDate = Infinity;
				}
			}
			o.daysOfWeekDisabled = o.daysOfWeekDisabled||[];
			if (!$.isArray(o.daysOfWeekDisabled))
				o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/);
			o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){
				return parseInt(d, 10);
			});
			var plc = String(o.orientation).toLowerCase().split(/\s+/g),
				_plc = o.orientation.toLowerCase();
			plc = $.grep(plc, function(word){
				return (/^auto|left|right|top|bottom$/).test(word);
			});
			o.orientation = {x: 'auto', y: 'auto'};
			if (!_plc || _plc === 'auto')
				; // no action
			else if (plc.length === 1){
				switch (plc[0]){
					case 'top':
					case 'bottom':
						o.orientation.y = plc[0];
						break;
					case 'left':
					case 'right':
						o.orientation.x = plc[0];
						break;
				}
			}
			else {
				_plc = $.grep(plc, function(word){
					return (/^left|right$/).test(word);
				});
				o.orientation.x = _plc[0] || 'auto';
				_plc = $.grep(plc, function(word){
					return (/^top|bottom$/).test(word);
				});
				o.orientation.y = _plc[0] || 'auto';
			}
		},
		_events: [],
		_secondaryEvents: [],
		_applyEvents: function(evs){
			for (var i=0, el, ch, ev; i < evs.length; i++){
				el = evs[i][0];
				if (evs[i].length === 2){
					ch = undefined;
					ev = evs[i][1];
				}
				else if (evs[i].length === 3){
					ch = evs[i][1];
					ev = evs[i][2];
				}
				el.on(ev, ch);
			}
		},
		_unapplyEvents: function(evs){
			for (var i=0, el, ev, ch; i < evs.length; i++){
				el = evs[i][0];
				if (evs[i].length === 2){
					ch = undefined;
					ev = evs[i][1];
				}
				else if (evs[i].length === 3){
					ch = evs[i][1];
					ev = evs[i][2];
				}
				el.off(ev, ch);
			}
		},
		_buildEvents: function(){
			if (this.isInput){ // single input
				this._events = [
					[this.element, {
						focus: $.proxy(this.show, this),
						keyup: $.proxy(function(e){
							if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)
								this.update();
						}, this),
						keydown: $.proxy(this.keydown, this)
					}]
				];
			}
			else if (this.component && this.hasInput){ // component: input + button
				this._events = [
					// For components that are not readonly, allow keyboard nav
					[this.element.find('input'), {
						focus: $.proxy(this.show, this),
						keyup: $.proxy(function(e){
							if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)
								this.update();
						}, this),
						keydown: $.proxy(this.keydown, this)
					}],
					[this.component, {
						click: $.proxy(this.show, this)
					}]
				];
			}
			else if (this.element.is('div')){  // inline datepicker
				this.isInline = true;
			}
			else {
				this._events = [
					[this.element, {
						click: $.proxy(this.show, this)
					}]
				];
			}
			this._events.push(
				// Component: listen for blur on element descendants
				[this.element, '*', {
					blur: $.proxy(function(e){
						this._focused_from = e.target;
					}, this)
				}],
				// Input: listen for blur on element
				[this.element, {
					blur: $.proxy(function(e){
						this._focused_from = e.target;
					}, this)
				}]
			);
			this._secondaryEvents = [
				[this.picker, {
					click: $.proxy(this.click, this)
				}],
				[$(window), {
					resize: $.proxy(this.place, this)
				}],
				[$(document), {
					'mousedown touchstart': $.proxy(function(e){
						// Clicked outside the datepicker, hide it
						if (!(
							this.element.is(e.target) ||
							this.element.find(e.target).length ||
							this.picker.is(e.target) ||
							this.picker.find(e.target).length
						)){
							this.hide();
						}
					}, this)
				}]
			];
		},
		_attachEvents: function(){
			this._detachEvents();
			this._applyEvents(this._events);
		},
		_detachEvents: function(){
			this._unapplyEvents(this._events);
		},
		_attachSecondaryEvents: function(){
			this._detachSecondaryEvents();
			this._applyEvents(this._secondaryEvents);
		},
		_detachSecondaryEvents: function(){
			this._unapplyEvents(this._secondaryEvents);
		},
		_trigger: function(event, altdate){
			var date = altdate || this.dates.get(-1),
				local_date = this._utc_to_local(date);
			this.element.trigger({
				type: event,
				date: local_date,
				dates: $.map(this.dates, this._utc_to_local),
				format: $.proxy(function(ix, format){
					if (arguments.length === 0){
						ix = this.dates.length - 1;
						format = this.o.format;
					}
					else if (typeof ix === 'string'){
						format = ix;
						ix = this.dates.length - 1;
					}
					format = format || this.o.format;
					var date = this.dates.get(ix);
					return DPGlobal.formatDate(date, format, this.o.language);
				}, this)
			});
		},
		show: function(){
			if (!this.isInline)
				this.picker.appendTo('body');
			this.picker.show();
			this.place();
			this._attachSecondaryEvents();
			this._trigger('show');
		},
		hide: function(){
			if (this.isInline)
				return;
			if (!this.picker.is(':visible'))
				return;
			this.focusDate = null;
			this.picker.hide().detach();
			this._detachSecondaryEvents();
			this.viewMode = this.o.startView;
			this.showMode();
			if (
				this.o.forceParse &&
				(
					this.isInput && this.element.val() ||
					this.hasInput && this.element.find('input').val()
				)
			)
				this.setValue();
			this._trigger('hide');
		},
		remove: function(){
			this.hide();
			this._detachEvents();
			this._detachSecondaryEvents();
			this.picker.remove();
			delete this.element.data().datepicker;
			if (!this.isInput){
				delete this.element.data().date;
			}
		},
		_utc_to_local: function(utc){
			return utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000));
		},
		_local_to_utc: function(local){
			return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));
		},
		_zero_time: function(local){
			return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
		},
		_zero_utc_time: function(utc){
			return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));
		},
		getDates: function(){
			return $.map(this.dates, this._utc_to_local);
		},
		getUTCDates: function(){
			return $.map(this.dates, function(d){
				return new Date(d);
			});
		},
		getDate: function(){
			return this._utc_to_local(this.getUTCDate());
		},
		getUTCDate: function(){
			return new Date(this.dates.get(-1));
		},
		setDates: function(){
			var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
			this.update.apply(this, args);
			this._trigger('changeDate');
			this.setValue();
		},
		setUTCDates: function(){
			var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
			this.update.apply(this, $.map(args, this._utc_to_local));
			this._trigger('changeDate');
			this.setValue();
		},
		setDate: alias('setDates'),
		setUTCDate: alias('setUTCDates'),
		setValue: function(){
			var formatted = this.getFormattedDate();
			if (!this.isInput){
				if (this.component){
					this.element.find('input').val(formatted).change();
				}
			}
			else {
				this.element.val(formatted).change();
			}
		},
		getFormattedDate: function(format){
			if (format === undefined)
				format = this.o.format;
			var lang = this.o.language;
			return $.map(this.dates, function(d){
				return DPGlobal.formatDate(d, format, lang);
			}).join(this.o.multidateSeparator);
		},
		setStartDate: function(startDate){
			this._process_options({startDate: startDate});
			this.update();
			this.updateNavArrows();
		},
		setEndDate: function(endDate){
			this._process_options({endDate: endDate});
			this.update();
			this.updateNavArrows();
		},
		setDaysOfWeekDisabled: function(daysOfWeekDisabled){
			this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
			this.update();
			this.updateNavArrows();
		},
		place: function(){
			if (this.isInline)
				return;
			var calendarWidth = this.picker.outerWidth(),
				calendarHeight = this.picker.outerHeight(),
				visualPadding = 10,
				windowWidth = $window.width(),
				windowHeight = $window.height(),
				scrollTop = $window.scrollTop();
			var zIndex = parseInt(this.element.parents().filter(function(){
					return $(this).css('z-index') !== 'auto';
				}).first().css('z-index'))+10;
			var offset = this.component ? this.component.parent().offset() : this.element.offset();
			var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
			var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
			var left = offset.left,
				top = offset.top;
			this.picker.removeClass(
				'datepicker-orient-top datepicker-orient-bottom '+
				'datepicker-orient-right datepicker-orient-left'
			);
			if (this.o.orientation.x !== 'auto'){
				this.picker.addClass('datepicker-orient-' + this.o.orientation.x);
				if (this.o.orientation.x === 'right')
					left -= calendarWidth - width;
			}
			// auto x orientation is best-placement: if it crosses a window
			// edge, fudge it sideways
			else {
				// Default to left
				this.picker.addClass('datepicker-orient-left');
				if (offset.left < 0)
					left -= offset.left - visualPadding;
				else if (offset.left + calendarWidth > windowWidth)
					left = windowWidth - calendarWidth - visualPadding;
			}
			// auto y orientation is best-situation: top or bottom, no fudging,
			// decision based on which shows more of the calendar
			var yorient = this.o.orientation.y,
				top_overflow, bottom_overflow;
			if (yorient === 'auto'){
				top_overflow = -scrollTop + offset.top - calendarHeight;
				bottom_overflow = scrollTop + windowHeight - (offset.top + height + calendarHeight);
				if (Math.max(top_overflow, bottom_overflow) === bottom_overflow)
					yorient = 'top';
				else
					yorient = 'bottom';
			}
			this.picker.addClass('datepicker-orient-' + yorient);
			if (yorient === 'top')
				top += height;
			else
				top -= calendarHeight + parseInt(this.picker.css('padding-top'));
			this.picker.css({
				top: top,
				left: left,
				zIndex: zIndex
			});
		},
		_allow_update: true,
		update: function(){
			if (!this._allow_update)
				return;
			var oldDates = this.dates.copy(),
				dates = [],
				fromArgs = false;
			if (arguments.length){
				$.each(arguments, $.proxy(function(i, date){
					if (date instanceof Date)
						date = this._local_to_utc(date);
					dates.push(date);
				}, this));
				fromArgs = true;
			}
			else {
				dates = this.isInput
						? this.element.val()
						: this.element.data('date') || this.element.find('input').val();
				if (dates && this.o.multidate)
					dates = dates.split(this.o.multidateSeparator);
				else
					dates = [dates];
				delete this.element.data().date;
			}
			dates = $.map(dates, $.proxy(function(date){
				return DPGlobal.parseDate(date, this.o.format, this.o.language);
			}, this));
			dates = $.grep(dates, $.proxy(function(date){
				return (
					date < this.o.startDate ||
					date > this.o.endDate ||
					!date
				);
			}, this), true);
			this.dates.replace(dates);
			if (this.dates.length)
				this.viewDate = new Date(this.dates.get(-1));
			else if (this.viewDate < this.o.startDate)
				this.viewDate = new Date(this.o.startDate);
			else if (this.viewDate > this.o.endDate)
				this.viewDate = new Date(this.o.endDate);
			if (fromArgs){
				// setting date by clicking
				this.setValue();
			}
			else if (dates.length){
				// setting date by typing
				if (String(oldDates) !== String(this.dates))
					this._trigger('changeDate');
			}
			if (!this.dates.length && oldDates.length)
				this._trigger('clearDate');
			this.fill();
		},
		fillDow: function(){
			var dowCnt = this.o.weekStart,
				html = '<tr>';
			if (this.o.calendarWeeks){
				var cell = '<th class="cw">&nbsp;</th>';
				html += cell;
				this.picker.find('.datepicker-days thead tr:first-child').prepend(cell);
			}
			while (dowCnt < this.o.weekStart + 7){
				html += '<th class="dow">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';
			}
			html += '</tr>';
			this.picker.find('.datepicker-days thead').append(html);
		},
		fillMonths: function(){
			var html = '',
			i = 0;
			while (i < 12){
				html += '<span class="month">'+dates[this.o.language].monthsShort[i++]+'</span>';
			}
			this.picker.find('.datepicker-months td').html(html);
		},
		setRange: function(range){
			if (!range || !range.length)
				delete this.range;
			else
				this.range = $.map(range, function(d){
					return d.valueOf();
				});
			this.fill();
		},
		getClassNames: function(date){
			var cls = [],
				year = this.viewDate.getUTCFullYear(),
				month = this.viewDate.getUTCMonth(),
				today = new Date();
			if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){
				cls.push('old');
			}
			else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){
				cls.push('new');
			}
			if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
				cls.push('focused');
			// Compare internal UTC date with local today, not UTC today
			if (this.o.todayHighlight &&
				date.getUTCFullYear() === today.getFullYear() &&
				date.getUTCMonth() === today.getMonth() &&
				date.getUTCDate() === today.getDate()){
				cls.push('today');
			}
			if (this.dates.contains(date) !== -1)
				cls.push('active');
			if (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||
				$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1){
				cls.push('disabled');
			}
			if (this.range){
				if (date > this.range[0] && date < this.range[this.range.length-1]){
					cls.push('range');
				}
				if ($.inArray(date.valueOf(), this.range) !== -1){
					cls.push('selected');
				}
			}
			return cls;
		},
		fill: function(){
			var d = new Date(this.viewDate),
				year = d.getUTCFullYear(),
				month = d.getUTCMonth(),
				startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
				startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
				endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
				endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
				todaytxt = dates[this.o.language].today || dates['en'].today || '',
				cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
				tooltip;
			this.picker.find('.datepicker-days thead th.datepicker-switch')
						.text(dates[this.o.language].months[month]+' '+year);
			this.picker.find('tfoot th.today')
						.text(todaytxt)
						.toggle(this.o.todayBtn !== false);
			this.picker.find('tfoot th.clear')
						.text(cleartxt)
						.toggle(this.o.clearBtn !== false);
			this.updateNavArrows();
			this.fillMonths();
			var prevMonth = UTCDate(year, month-1, 28),
				day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
			prevMonth.setUTCDate(day);
			prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);
			var nextMonth = new Date(prevMonth);
			nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
			nextMonth = nextMonth.valueOf();
			var html = [];
			var clsName;
			while (prevMonth.valueOf() < nextMonth){
				if (prevMonth.getUTCDay() === this.o.weekStart){
					html.push('<tr>');
					if (this.o.calendarWeeks){
						// ISO 8601: First week contains first thursday.
						// ISO also states week starts on Monday, but we can be more abstract here.
						var
							// Start of current week: based on weekstart/current date
							ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
							// Thursday of this week
							th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
							// First Thursday of year, year from thursday
							yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),
							// Calendar week: ms between thursdays, div ms per day, div 7 days
							calWeek =  (th - yth) / 864e5 / 7 + 1;
						html.push('<td class="cw">'+ calWeek +'</td>');
					}
				}
				clsName = this.getClassNames(prevMonth);
				clsName.push('day');
				if (this.o.beforeShowDay !== $.noop){
					var before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
					if (before === undefined)
						before = {};
					else if (typeof(before) === 'boolean')
						before = {enabled: before};
					else if (typeof(before) === 'string')
						before = {classes: before};
					if (before.enabled === false)
						clsName.push('disabled');
					if (before.classes)
						clsName = clsName.concat(before.classes.split(/\s+/));
					if (before.tooltip)
						tooltip = before.tooltip;
				}
				clsName = $.unique(clsName);
				html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>');
				if (prevMonth.getUTCDay() === this.o.weekEnd){
					html.push('</tr>');
				}
				prevMonth.setUTCDate(prevMonth.getUTCDate()+1);
			}
			this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
			var months = this.picker.find('.datepicker-months')
						.find('th:eq(1)')
							.text(year)
							.end()
						.find('span').removeClass('active');
			$.each(this.dates, function(i, d){
				if (d.getUTCFullYear() === year)
					months.eq(d.getUTCMonth()).addClass('active');
			});
			if (year < startYear || year > endYear){
				months.addClass('disabled');
			}
			if (year === startYear){
				months.slice(0, startMonth).addClass('disabled');
			}
			if (year === endYear){
				months.slice(endMonth+1).addClass('disabled');
			}
			html = '';
			year = parseInt(year/10, 10) * 10;
			var yearCont = this.picker.find('.datepicker-years')
								.find('th:eq(1)')
									.text(year + '-' + (year + 9))
									.end()
								.find('td');
			year -= 1;
			var years = $.map(this.dates, function(d){
					return d.getUTCFullYear();
				}),
				classes;
			for (var i = -1; i < 11; i++){
				classes = ['year'];
				if (i === -1)
					classes.push('old');
				else if (i === 10)
					classes.push('new');
				if ($.inArray(year, years) !== -1)
					classes.push('active');
				if (year < startYear || year > endYear)
					classes.push('disabled');
				html += '<span class="' + classes.join(' ') + '">'+year+'</span>';
				year += 1;
			}
			yearCont.html(html);
		},
		updateNavArrows: function(){
			if (!this._allow_update)
				return;
			var d = new Date(this.viewDate),
				year = d.getUTCFullYear(),
				month = d.getUTCMonth();
			switch (this.viewMode){
				case 0:
					if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){
						this.picker.find('.prev').css({visibility: 'hidden'});
					}
					else {
						this.picker.find('.prev').css({visibility: 'visible'});
					}
					if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){
						this.picker.find('.next').css({visibility: 'hidden'});
					}
					else {
						this.picker.find('.next').css({visibility: 'visible'});
					}
					break;
				case 1:
				case 2:
					if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()){
						this.picker.find('.prev').css({visibility: 'hidden'});
					}
					else {
						this.picker.find('.prev').css({visibility: 'visible'});
					}
					if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()){
						this.picker.find('.next').css({visibility: 'hidden'});
					}
					else {
						this.picker.find('.next').css({visibility: 'visible'});
					}
					break;
			}
		},
		click: function(e){
			e.preventDefault();
			var target = $(e.target).closest('span, td, th'),
				year, month, day;
			if (target.length === 1){
				switch (target[0].nodeName.toLowerCase()){
					case 'th':
						switch (target[0].className){
							case 'datepicker-switch':
								this.showMode(1);
								break;
							case 'prev':
							case 'next':
								var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);
								switch (this.viewMode){
									case 0:
										this.viewDate = this.moveMonth(this.viewDate, dir);
										this._trigger('changeMonth', this.viewDate);
										break;
									case 1:
									case 2:
										this.viewDate = this.moveYear(this.viewDate, dir);
										if (this.viewMode === 1)
											this._trigger('changeYear', this.viewDate);
										break;
								}
								this.fill();
								break;
							case 'today':
								var date = new Date();
								date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
								this.showMode(-2);
								var which = this.o.todayBtn === 'linked' ? null : 'view';
								this._setDate(date, which);
								break;
							case 'clear':
								var element;
								if (this.isInput)
									element = this.element;
								else if (this.component)
									element = this.element.find('input');
								if (element)
									element.val("").change();
								this.update();
								this._trigger('changeDate');
								if (this.o.autoclose)
									this.hide();
								break;
						}
						break;
					case 'span':
						if (!target.is('.disabled')){
							this.viewDate.setUTCDate(1);
							if (target.is('.month')){
								day = 1;
								month = target.parent().find('span').index(target);
								year = this.viewDate.getUTCFullYear();
								this.viewDate.setUTCMonth(month);
								this._trigger('changeMonth', this.viewDate);
								if (this.o.minViewMode === 1){
									this._setDate(UTCDate(year, month, day));
								}
							}
							else {
								day = 1;
								month = 0;
								year = parseInt(target.text(), 10)||0;
								this.viewDate.setUTCFullYear(year);
								this._trigger('changeYear', this.viewDate);
								if (this.o.minViewMode === 2){
									this._setDate(UTCDate(year, month, day));
								}
							}
							this.showMode(-1);
							this.fill();
						}
						break;
					case 'td':
						if (target.is('.day') && !target.is('.disabled')){
							day = parseInt(target.text(), 10)||1;
							year = this.viewDate.getUTCFullYear();
							month = this.viewDate.getUTCMonth();
							if (target.is('.old')){
								if (month === 0){
									month = 11;
									year -= 1;
								}
								else {
									month -= 1;
								}
							}
							else if (target.is('.new')){
								if (month === 11){
									month = 0;
									year += 1;
								}
								else {
									month += 1;
								}
							}
							this._setDate(UTCDate(year, month, day));
						}
						break;
				}
			}
			if (this.picker.is(':visible') && this._focused_from){
				$(this._focused_from).focus();
			}
			delete this._focused_from;
		},
		_toggle_multidate: function(date){
			var ix = this.dates.contains(date);
			if (!date){
				this.dates.clear();
			}
			else if (ix !== -1){
				this.dates.remove(ix);
			}
			else {
				this.dates.push(date);
			}
			if (typeof this.o.multidate === 'number')
				while (this.dates.length > this.o.multidate)
					this.dates.remove(0);
		},
		_setDate: function(date, which){
			if (!which || which === 'date')
				this._toggle_multidate(date && new Date(date));
			if (!which || which  === 'view')
				this.viewDate = date && new Date(date);
			this.fill();
			this.setValue();
			this._trigger('changeDate');
			var element;
			if (this.isInput){
				element = this.element;
			}
			else if (this.component){
				element = this.element.find('input');
			}
			if (element){
				element.change();
			}
			if (this.o.autoclose && (!which || which === 'date')){
				this.hide();
			}
		},
		moveMonth: function(date, dir){
			if (!date)
				return undefined;
			if (!dir)
				return date;
			var new_date = new Date(date.valueOf()),
				day = new_date.getUTCDate(),
				month = new_date.getUTCMonth(),
				mag = Math.abs(dir),
				new_month, test;
			dir = dir > 0 ? 1 : -1;
			if (mag === 1){
				test = dir === -1
					// If going back one month, make sure month is not current month
					// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
					? function(){
						return new_date.getUTCMonth() === month;
					}
					// If going forward one month, make sure month is as expected
					// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
					: function(){
						return new_date.getUTCMonth() !== new_month;
					};
				new_month = month + dir;
				new_date.setUTCMonth(new_month);
				// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
				if (new_month < 0 || new_month > 11)
					new_month = (new_month + 12) % 12;
			}
			else {
				// For magnitudes >1, move one month at a time...
				for (var i=0; i < mag; i++)
					// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
					new_date = this.moveMonth(new_date, dir);
				// ...then reset the day, keeping it in the new month
				new_month = new_date.getUTCMonth();
				new_date.setUTCDate(day);
				test = function(){
					return new_month !== new_date.getUTCMonth();
				};
			}
			// Common date-resetting loop -- if date is beyond end of month, make it
			// end of month
			while (test()){
				new_date.setUTCDate(--day);
				new_date.setUTCMonth(new_month);
			}
			return new_date;
		},
		moveYear: function(date, dir){
			return this.moveMonth(date, dir*12);
		},
		dateWithinRange: function(date){
			return date >= this.o.startDate && date <= this.o.endDate;
		},
		keydown: function(e){
			if (this.picker.is(':not(:visible)')){
				if (e.keyCode === 27) // allow escape to hide and re-show picker
					this.show();
				return;
			}
			var dateChanged = false,
				dir, newDate, newViewDate,
				focusDate = this.focusDate || this.viewDate;
			switch (e.keyCode){
				case 27: // escape
					if (this.focusDate){
						this.focusDate = null;
						this.viewDate = this.dates.get(-1) || this.viewDate;
						this.fill();
					}
					else
						this.hide();
					e.preventDefault();
					break;
				case 37: // left
				case 39: // right
					if (!this.o.keyboardNavigation)
						break;
					dir = e.keyCode === 37 ? -1 : 1;
					if (e.ctrlKey){
						newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);
						newViewDate = this.moveYear(focusDate, dir);
						this._trigger('changeYear', this.viewDate);
					}
					else if (e.shiftKey){
						newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);
						newViewDate = this.moveMonth(focusDate, dir);
						this._trigger('changeMonth', this.viewDate);
					}
					else {
						newDate = new Date(this.dates.get(-1) || UTCToday());
						newDate.setUTCDate(newDate.getUTCDate() + dir);
						newViewDate = new Date(focusDate);
						newViewDate.setUTCDate(focusDate.getUTCDate() + dir);
					}
					if (this.dateWithinRange(newDate)){
						this.focusDate = this.viewDate = newViewDate;
						this.setValue();
						this.fill();
						e.preventDefault();
					}
					break;
				case 38: // up
				case 40: // down
					if (!this.o.keyboardNavigation)
						break;
					dir = e.keyCode === 38 ? -1 : 1;
					if (e.ctrlKey){
						newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);
						newViewDate = this.moveYear(focusDate, dir);
						this._trigger('changeYear', this.viewDate);
					}
					else if (e.shiftKey){
						newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);
						newViewDate = this.moveMonth(focusDate, dir);
						this._trigger('changeMonth', this.viewDate);
					}
					else {
						newDate = new Date(this.dates.get(-1) || UTCToday());
						newDate.setUTCDate(newDate.getUTCDate() + dir * 7);
						newViewDate = new Date(focusDate);
						newViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7);
					}
					if (this.dateWithinRange(newDate)){
						this.focusDate = this.viewDate = newViewDate;
						this.setValue();
						this.fill();
						e.preventDefault();
					}
					break;
				case 32: // spacebar
					// Spacebar is used in manually typing dates in some formats.
					// As such, its behavior should not be hijacked.
					break;
				case 13: // enter
					focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
					this._toggle_multidate(focusDate);
					dateChanged = true;
					this.focusDate = null;
					this.viewDate = this.dates.get(-1) || this.viewDate;
					this.setValue();
					this.fill();
					if (this.picker.is(':visible')){
						e.preventDefault();
						if (this.o.autoclose)
							this.hide();
					}
					break;
				case 9: // tab
					this.focusDate = null;
					this.viewDate = this.dates.get(-1) || this.viewDate;
					this.fill();
					this.hide();
					break;
			}
			if (dateChanged){
				if (this.dates.length)
					this._trigger('changeDate');
				else
					this._trigger('clearDate');
				var element;
				if (this.isInput){
					element = this.element;
				}
				else if (this.component){
					element = this.element.find('input');
				}
				if (element){
					element.change();
				}
			}
		},
		showMode: function(dir){
			if (dir){
				this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));
			}
			this.picker
				.find('>div')
				.hide()
				.filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName)
					.css('display', 'block');
			this.updateNavArrows();
		}
	};
	var DateRangePicker = function(element, options){
		this.element = $(element);
		this.inputs = $.map(options.inputs, function(i){
			return i.jquery ? i[0] : i;
		});
		delete options.inputs;
		$(this.inputs)
			.datepicker(options)
			.bind('changeDate', $.proxy(this.dateUpdated, this));
		this.pickers = $.map(this.inputs, function(i){
			return $(i).data('datepicker');
		});
		this.updateDates();
	};
	DateRangePicker.prototype = {
		updateDates: function(){
			this.dates = $.map(this.pickers, function(i){
				return i.getUTCDate();
			});
			this.updateRanges();
		},
		updateRanges: function(){
			var range = $.map(this.dates, function(d){
				return d.valueOf();
			});
			$.each(this.pickers, function(i, p){
				p.setRange(range);
			});
		},
		dateUpdated: function(e){
			// `this.updating` is a workaround for preventing infinite recursion
			// between `changeDate` triggering and `setUTCDate` calling.  Until
			// there is a better mechanism.
			if (this.updating)
				return;
			this.updating = true;
			var dp = $(e.target).data('datepicker'),
				new_date = dp.getUTCDate(),
				i = $.inArray(e.target, this.inputs),
				l = this.inputs.length;
			if (i === -1)
				return;
			$.each(this.pickers, function(i, p){
				if (!p.getUTCDate())
					p.setUTCDate(new_date);
			});
			if (new_date < this.dates[i]){
				// Date being moved earlier/left
				while (i >= 0 && new_date < this.dates[i]){
					this.pickers[i--].setUTCDate(new_date);
				}
			}
			else if (new_date > this.dates[i]){
				// Date being moved later/right
				while (i < l && new_date > this.dates[i]){
					this.pickers[i++].setUTCDate(new_date);
				}
			}
			this.updateDates();
			delete this.updating;
		},
		remove: function(){
			$.map(this.pickers, function(p){ p.remove(); });
			delete this.element.data().datepicker;
		}
	};
	function opts_from_el(el, prefix){
		// Derive options from element data-attrs
		var data = $(el).data(),
			out = {}, inkey,
			replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
		prefix = new RegExp('^' + prefix.toLowerCase());
		function re_lower(_,a){
			return a.toLowerCase();
		}
		for (var key in data)
			if (prefix.test(key)){
				inkey = key.replace(replace, re_lower);
				out[inkey] = data[key];
			}
		return out;
	}
	function opts_from_locale(lang){
		// Derive options from locale plugins
		var out = {};
		// Check if "de-DE" style date is available, if not language should
		// fallback to 2 letter code eg "de"
		if (!dates[lang]){
			lang = lang.split('-')[0];
			if (!dates[lang])
				return;
		}
		var d = dates[lang];
		$.each(locale_opts, function(i,k){
			if (k in d)
				out[k] = d[k];
		});
		return out;
	}
	var old = $.fn.datepicker;
	$.fn.datepicker = function(option){
		var args = Array.apply(null, arguments);
		args.shift();
		var internal_return;
		this.each(function(){
			var $this = $(this),
				data = $this.data('datepicker'),
				options = typeof option === 'object' && option;
			if (!data){
				var elopts = opts_from_el(this, 'date'),
					// Preliminary otions
					xopts = $.extend({}, defaults, elopts, options),
					locopts = opts_from_locale(xopts.language),
					// Options priority: js args, data-attrs, locales, defaults
					opts = $.extend({}, defaults, locopts, elopts, options);
				if ($this.is('.input-daterange') || opts.inputs){
					var ropts = {
						inputs: opts.inputs || $this.find('input').toArray()
					};
					$this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));
				}
				else {
					$this.data('datepicker', (data = new Datepicker(this, opts)));
				}
			}
			if (typeof option === 'string' && typeof data[option] === 'function'){
				internal_return = data[option].apply(data, args);
				if (internal_return !== undefined)
					return false;
			}
		});
		if (internal_return !== undefined)
			return internal_return;
		else
			return this;
	};
	var defaults = $.fn.datepicker.defaults = {
		autoclose: false,
		beforeShowDay: $.noop,
		calendarWeeks: false,
		clearBtn: false,
		daysOfWeekDisabled: [],
		endDate: Infinity,
		forceParse: true,
		format: 'yyyy-mm-dd',
		keyboardNavigation: true,
		language: 'en',
		minViewMode: 0,
		multidate: false,
		multidateSeparator: ',',
		orientation: "auto",
		rtl: false,
		startDate: -Infinity,
		startView: 0,
		todayBtn: false,
		todayHighlight: false,
		weekStart: 0
	};
	var locale_opts = $.fn.datepicker.locale_opts = [
		'format',
		'rtl',
		'weekStart'
	];
	$.fn.datepicker.Constructor = Datepicker;
	var dates = $.fn.datepicker.dates = {
		en: {
			days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
			daysShort: ["日", "一", "二", "三", "四", "五", "六", "日"],
			daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
			months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
			monthsShort: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
			today: "今天",
			clear: "清空"
		}
	};
	var DPGlobal = {
		modes: [
			{
				clsName: 'days',
				navFnc: 'Month',
				navStep: 1
			},
			{
				clsName: 'months',
				navFnc: 'FullYear',
				navStep: 1
			},
			{
				clsName: 'years',
				navFnc: 'FullYear',
				navStep: 10
		}],
		isLeapYear: function(year){
			return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
		},
		getDaysInMonth: function(year, month){
			return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
		},
		validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
		nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
		parseFormat: function(format){
			// IE treats \0 as a string end in inputs (truncating the value),
			// so it's a bad format delimiter, anyway
			var separators = format.replace(this.validParts, '\0').split('\0'),
				parts = format.match(this.validParts);
			if (!separators || !separators.length || !parts || parts.length === 0){
				throw new Error("Invalid date format.");
			}
			return {separators: separators, parts: parts};
		},
		parseDate: function(date, format, language){
			if (!date)
				return undefined;
			if (date instanceof Date)
				return date;
			if (typeof format === 'string')
				format = DPGlobal.parseFormat(format);
			var part_re = /([\-+]\d+)([dmwy])/,
				parts = date.match(/([\-+]\d+)([dmwy])/g),
				part, dir, i;
			if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){
				date = new Date();
				for (i=0; i < parts.length; i++){
					part = part_re.exec(parts[i]);
					dir = parseInt(part[1]);
					switch (part[2]){
						case 'd':
							date.setUTCDate(date.getUTCDate() + dir);
							break;
						case 'm':
							date = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);
							break;
						case 'w':
							date.setUTCDate(date.getUTCDate() + dir * 7);
							break;
						case 'y':
							date = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);
							break;
					}
				}
				return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);
			}
			parts = date && date.match(this.nonpunctuation) || [];
			date = new Date();
			var parsed = {},
				setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
				setters_map = {
					yyyy: function(d,v){
						return d.setUTCFullYear(v);
					},
					yy: function(d,v){
						return d.setUTCFullYear(2000+v);
					},
					m: function(d,v){
						if (isNaN(d))
							return d;
						v -= 1;
						while (v < 0) v += 12;
						v %= 12;
						d.setUTCMonth(v);
						while (d.getUTCMonth() !== v)
							d.setUTCDate(d.getUTCDate()-1);
						return d;
					},
					d: function(d,v){
						return d.setUTCDate(v);
					}
				},
				val, filtered;
			setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
			setters_map['dd'] = setters_map['d'];
			date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
			var fparts = format.parts.slice();
			// Remove noop parts
			if (parts.length !== fparts.length){
				fparts = $(fparts).filter(function(i,p){
					return $.inArray(p, setters_order) !== -1;
				}).toArray();
			}
			// Process remainder
			function match_part(){
				var m = this.slice(0, parts[i].length),
					p = parts[i].slice(0, m.length);
				return m === p;
			}
			if (parts.length === fparts.length){
				var cnt;
				for (i=0, cnt = fparts.length; i < cnt; i++){
					val = parseInt(parts[i], 10);
					part = fparts[i];
					if (isNaN(val)){
						switch (part){
							case 'MM':
								filtered = $(dates[language].months).filter(match_part);
								val = $.inArray(filtered[0], dates[language].months) + 1;
								break;
							case 'M':
								filtered = $(dates[language].monthsShort).filter(match_part);
								val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
								break;
						}
					}
					parsed[part] = val;
				}
				var _date, s;
				for (i=0; i < setters_order.length; i++){
					s = setters_order[i];
					if (s in parsed && !isNaN(parsed[s])){
						_date = new Date(date);
						setters_map[s](_date, parsed[s]);
						if (!isNaN(_date))
							date = _date;
					}
				}
			}
			return date;
		},
		formatDate: function(date, format, language){
			if (!date)
				return '';
			if (typeof format === 'string')
				format = DPGlobal.parseFormat(format);
			var val = {
				d: date.getUTCDate(),
				D: dates[language].daysShort[date.getUTCDay()],
				DD: dates[language].days[date.getUTCDay()],
				m: date.getUTCMonth() + 1,
				M: dates[language].monthsShort[date.getUTCMonth()],
				MM: dates[language].months[date.getUTCMonth()],
				yy: date.getUTCFullYear().toString().substring(2),
				yyyy: date.getUTCFullYear()
			};
			val.dd = (val.d < 10 ? '0' : '') + val.d;
			val.mm = (val.m < 10 ? '0' : '') + val.m;
			date = [];
			var seps = $.extend([], format.separators);
			for (var i=0, cnt = format.parts.length; i <= cnt; i++){
				if (seps.length)
					date.push(seps.shift());
				date.push(val[format.parts[i]]);
			}
			return date.join('');
		},
		headTemplate: '<thead>'+
							'<tr>'+
								'<th class="prev">&laquo;</th>'+
								'<th colspan="5" class="datepicker-switch"></th>'+
								'<th class="next">&raquo;</th>'+
							'</tr>'+
						'</thead>',
		contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
		footTemplate: '<tfoot>'+
							'<tr>'+
								'<th colspan="7" class="today"></th>'+
							'</tr>'+
							'<tr>'+
								'<th colspan="7" class="clear"></th>'+
							'</tr>'+
						'</tfoot>'
	};
	DPGlobal.template = '<div class="datepicker">'+
							'<div class="datepicker-days">'+
								'<table class=" table-condensed">'+
									DPGlobal.headTemplate+
									'<tbody></tbody>'+
									DPGlobal.footTemplate+
								'</table>'+
							'</div>'+
							'<div class="datepicker-months">'+
								'<table class="table-condensed">'+
									DPGlobal.headTemplate+
									DPGlobal.contTemplate+
									DPGlobal.footTemplate+
								'</table>'+
							'</div>'+
							'<div class="datepicker-years">'+
								'<table class="table-condensed">'+
									DPGlobal.headTemplate+
									DPGlobal.contTemplate+
									DPGlobal.footTemplate+
								'</table>'+
							'</div>'+
						'</div>';
	$.fn.datepicker.DPGlobal = DPGlobal;
	/* DATEPICKER NO CONFLICT
	* =================== */
	$.fn.datepicker.noConflict = function(){
		$.fn.datepicker = old;
		return this;
	};
	/* DATEPICKER DATA-API
	* ================== */
	$(document).on(
		'focus.datepicker.data-api click.datepicker.data-api',
		'[data-provide="datepicker"]',
		function(e){
			var $this = $(this);
			if ($this.data('datepicker'))
				return;
			e.preventDefault();
			// component click requires us to explicitly show it
			$this.datepicker('show');
		}
	);
	$(function(){
		$('[data-provide="datepicker-inline"]').datepicker();
	});
}(window.jQuery));