Explorar o código

增加登录页面、修改续方详情及续方调整页面

yezehua %!s(int64=7) %!d(string=hai) anos
pai
achega
546cb54f52

+ 17 - 0
.project

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>PC-prescription</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>com.aptana.ide.core.unifiedBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>com.aptana.projects.webnature</nature>
	</natures>
</projectDescription>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
css/style.min862f.css


BIN=BIN
img/BG.jpg


BIN=BIN
img/icon_chahua.png


BIN=BIN
img/icon_chaxun.png


BIN=BIN
img/icon_yanj.png


+ 246 - 5
js/buz/prescription-adjustment.js

@ -1,10 +1,251 @@
$(function(){
	//获取团队信息
	var request = getRequest(),
	    teamCode = request.id,
	    isLeader = request.isLeader || true;
	    isLeader = isTeamLeader(),
	    prescriptionCode = request.code;
    
	$('select').on('change',function() {
		
	})
    var medicineFreqData = []
    var usageDict = []
    
    var $main = $('#main');
    
    template.helper('toJson',function(o) {
    	if(o) {
    		return JSON.stringify(o)
    	}
    	return "";
    })
    
    Promise.all([
    	prescriptionDetailApis.getContinuedPrescriptionAsDoctor({
	    	data: {
	    		code: prescriptionCode, // 续方CODE
	    		type: isLeader?1:2 // 是否为团队长,1:是,2:否
	    	}
	    }),
	    prescriptionDetailApis.getRateList({data:{}}),
	    prescriptionDetailApis.getUsageDict({data:{}})
    ]).then(function(responses) {
    	$main.html(template('detailTmpl',responses[0].data))
    	medicineFreqData = responses[1].data
    	usageDict = responses[2].data
		bindEvents()
		initDiagnosisSuggestInput()
		initDrugNameSuggestInput()
		initFreqSuggestInput()
		initDaySuggestInput()
		initUsageSuggestInput()
		calcWorldWithTextarea()
    }).catch(function(e) {
    	console && console.error(e)
    })
    
    function bindEvents() {
    	
    	$('#addDrugBtn').click(function() {
    		var html = template('drugTmpl',{})
    		$('#drugs').append(html)
    		initDrugNameSuggestInput()
    		initFreqSuggestInput()
			initDaySuggestInput()
			initUsageSuggestInput()
    	})
    	
    	$('#adjustReason').on('click','li',function() {
    		$('#disagreeReason').val($.trim($(this).text()))
    		$(this).siblings().removeClass('active');
    		$(this).addClass('active')
    	})
    	
    	$('#drugs').on('click','.icon-shanchu',function() {
    		$(this).closest('.ibox-content').remove();
    	}).on('click','.icon-jianshao',function() {
    		var $input = $(this).closest('li').find('input').eq(0);
    		var amount = parseInt($input.val()||'0')
    		if(amount > 0) {
    			$input.val(amount - 1)
    		} else {
    			$input.val(0)
    		}
    		countMediSum($(this).closest('.ibox-content'))
    	}).on('click','.icon-xinzeng',function() {
    		var $input = $(this).closest('li').find('input').eq(0);
    		var amount = parseInt($input.val()||'0')
    		$input.val(amount + 1)
    	})
    	
    	$('.diagnosis-wrap').on('click',function() {
    		$('#placeholdText').hide()
    		$('#diagnosisInput').show()
    		$('#diagnosisInput').focus()
    	})
    	
    	$('#addDiagnosisBtn').on('click',function() {
    		$(this).hide();
    		$('.diagnosis-wrap').show();
    		setTimeout(function() {
    			$('#diagnosisInput').click()
    		},100)
    	})
    	
    	$('#diagnosisInput').on('blur keydown',function(e) {
    		if(e.type == 'keydown' && e.keyCode == 13) {
    			$('#diagnosisInput').blur()
    		} else {
    			if(e.type == 'blur') {
	    			$('#placeholdText').show()
	    			$('#diagnosisInput').hide()
	    			var name = $('#diagnosisInput').val()
	    			var code = $('#diagnosisInput').attr('data-code')
	    			if(name && code) {
	    				var html = template('diagnosisTmpl', {name: name})
	    				$('#diagnosis').append(html)
	    			}
	    			$('#diagnosisInput').val('')
	    			$('#diagnosisInput').attr('data-code','')
	    			$('#addDiagnosisBtn').show()
	    			$('.diagnosis-wrap').hide()
	    		}
    		}
    	})
    	
    	$('#diagnosis').on('click', '.fa-close' ,function() {
    		$(this).closest('li').remove()
    	})
    }
	
	function initDiagnosisSuggestInput() {
		$('#diagnosisInput').bsSuggest({
	      url: APIService.server+'doctor/prescriptionInfo/getIcd10Info?nameKey=',
	      getDataMethod:'url',
	      idField: "code",
          keyField: "name",
	      effectiveFields: ['name'],
	      ignorecase: true,
	      fnProcessData: function(res) {
	      	return {
	      		value: res.data
	      	}
	      }
	    }).on('onSetSelectValue', function (e, v) {
	        $(this).attr('data-code', v.id)
	    })
	}
	
	function initDrugNameSuggestInput() {
		$("input.j-drugName").bsSuggest({
	      url: APIService.server+'doctor/prescriptionInfo/findDictByName?name=',
	      getDataMethod:'url',
	      idField: "drugCode",
          keyField: "drugName",
	      effectiveFields: ['drugName','drugFormat'],
	      effectiveFieldsAlias:{drugName: "药品名称",drugFormat:"规格"},
	      ignorecase: true,
	      fnProcessData: function(res) {
	      	return {
	      		value: res.data
	      	}
	      }
	    }).on('onSetSelectValue', function (e, v) {
	        var $box = $(this).closest('.ibox-content'),
	        	$single = $box.find(".j-medi-single"),
	        	$doseUnit = $box.find('.j-dose-unit'),
				$freq = $box.find(".j-selFreq"),
				$date = $box.find(".j-selDate");
			var json = v.json;	
			$single.val(json.physicDose)
			$single.attr('data-code', json.physicDoseUnit)
			$doseUnit.text(json.physicDoseUnitName)
			$freq.val(json.drugRateName||"")
			$freq.attr('data-code', json.drugRate)
			$date.val(json.dayCount||"")
	    })
	}
	
	function initFreqSuggestInput() {
		$("input.j-selFreq").bsSuggest({
	      data: {value: medicineFreqData},
	      idField: "code",
          keyField: "name",
	      getDataMethod:'data',
	      effectiveFields: ['name'],
	      ignorecase: true
	    }).on('onSetSelectValue', function (e, v) {
	        $(this).attr('data-code', v.id)
	    })
	}
	
	function initDaySuggestInput() {
		$("input.j-selDate").bsSuggest({
	      data: {value: _.map(_.range(1, 31),function(v) {
	      	return {
	      		day: v
	      	}
	      })},
	      idField: "day",
          keyField: "day",
	      getDataMethod:'data',
	      effectiveFields: ['day'],
	      ignorecase: true
	    }).on('onSetSelectValue', function (e, v) {
	        
	    })
	}
	
	function initUsageSuggestInput() {
		$("input.j-method").bsSuggest({
	      data: {value: usageDict},
	      idField: "code",
          keyField: "name",
	      getDataMethod:'data',
	      effectiveFields: ['name'],
	      ignorecase: true
	    }).on('onSetSelectValue', function (e, v) {
	        
	    })
	}
	
	//计算药品总量
	function countMediSum($box){
		var $single = $box.find(".j-medi-single").val().trim(),
			$freq = $box.find(".j-selFreq").attr('data-code').trim(),
			$date = $box.find(".j-selDate").val().trim(),
			$info = JSON.parse($ul.attr('data-info'));
		if($name && $single && $freq && $date){
			toFreqRate($freq,function(rate){
				var num = $single*rate*$date
				var sum="";
				if($info.pakeSpec){
					//新增药品
					sum = Math.ceil(num/$info.minDose)
					showResultSum(sum);
				}else{
					var drugNumUnit = $info.drugNumUnit,
						physicDoseUnit = $info.physicDoseUnit;			
					//请求药品信息
					var drugCode = $info.drugCode;
					toMediMsg(drugCode,function(msg){
						$ul.find(".j-medi-name").attr('data-storage',msg.storageConditions);//冷藏
						$ul.find(".j-medi-name").attr('data-class',msg.subjectClass);
						if(drugNumUnit == physicDoseUnit){
							sum = num
						}else{
							if(drugNumUnit == msg.pack_unit){
								sum = Math.ceil(num/msg.packSpec)
							}else{
								sum = Math.ceil(num/msg.minDose)
							}
						}
						showResultSum(sum);
					})
				}		
			})
		}
		function showResultSum(sum){
			$ul.find(".j-sumMedicine").html(sum+$info.drugNumUnitName);
			$ul.find(".j-sumMedicine").attr('data-num',sum);
			$ul.find(".j-sumMedicine").attr('data-name',$info.drugNumUnitName);
			$ul.find(".j-sumMedicine").attr('data-unit',$info.drugNumUnit);
		}
	}	
})

+ 16 - 0
js/login-api.js

@ -0,0 +1,16 @@
(function(){
    var loginApis = {
    	login: function(data) {
			return APIService.httpPost('login/doctor',{data: data})
		},
		publicKey: function(data) {
			return APIService.httpPost('login/public_key',{data: data})
		},
		getCaptcha: function(data) {
			return APIService.httpPost('common/captcha',{data: data})
		}
    };
    window.loginApis = loginApis;
})(jQuery)

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 997 - 8
js/plugins/suggest/bootstrap-suggest.min.js


+ 17 - 0
js/prescription-detail-api.js

@ -22,6 +22,23 @@
    	getReasonByType:function(data) {
    		return APIService.httpGet('doctor/prescriptionInfo/getReasonByType', data);
        }
        ,
        // 获取频率换算
        drugToRate:function(data) {
        	return APIService.httpGet('doctor/prescriptionInfo/drugToRate', data);
        },
        //获取药品信息
        getPhysicInfo:function(data) {
        	return APIService.httpGet('doctor/prescriptionInfo/getPhysicInfo', data);
        },
        //获取用药频率
        getRateList:function(data) {
        	return APIService.httpGet('doctor/prescriptionInfo/getRateList', data);
        },
        //获取药品用法
        getUsageDict:function(data) {
        	return APIService.httpGet('doctor/prescriptionInfo/getUsageDict', data);
        }
    };
    window.prescriptionDetailApis = prescriptionDetailApis;

+ 719 - 0
js/security.js

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

+ 1 - 1
js/util.js

@ -216,7 +216,7 @@ function showWarningMsg(msg) {
function calcWorldWithTextarea() {
	var preVule = ''
	$('textarea[calcWorld]').on('input',function() {
	$('textarea[calcWorld]').on('input focus',function() {
		var num = $(this).attr('calcWorld');
		var len = $(this).val().length;
		var value = $(this).val();

+ 402 - 0
login.html

@ -0,0 +1,402 @@
<!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="登录">
		<!--[if lt IE 9]>
    <meta http-equiv="refresh" content="0;ie.html" />
    <![endif]-->
		<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/animate.min.css" rel="stylesheet">
		<link href="css/style.min862f.css?v=4.1.0" rel="stylesheet">
		<link href="css/plugins/toastr/toastr.min.css" rel="stylesheet">
		<style>
			body {
				background: url(img/BG.jpg);
			}
			#main {
				width: 1200px;
				margin: 0 auto;
			}
			.tabs-container {
				margin-top: 40;
				border: 10px solid rgba(255,255,255,0.2);
			}
			.tabs-container .nav-tabs {
				border: 0;
			}
			.nav.nav-tabs {
				background-color: #fff;
			}
			.nav.nav-tabs li {
				width: 50%;
				text-align: center;
				padding: 0 15px;
			}
			.nav.nav-tabs li.active a {
				color: #1eaaff;
			}
			.tabs-container .nav-tabs>li.active>a, 
			.tabs-container .nav-tabs>li.active>a:focus, 
			.tabs-container .nav-tabs>li.active>a:hover {
				border: 0;
				border-bottom: 3px solid #1eaaff;
			}
			#loginForm {
				margin-top: 120px;
			}
			
			button[type="submit"] {
				margin-top: 40px;
			}
			
			.form-group {
					position: relative;
				}
				
			.fa-eye,
			.fa-eye-slash {
				position: absolute;
				top: 16px;
				right: 10px;
				margin-top: -8px;
				font-size: 16px;
				cursor: pointer;
			}
			
			#getCaptcha {
				position: absolute;
				top: 8px;
				right: 10px;
			}
			
			#getCaptcha.disabled{
				cursor: not-allowed;
				filter: alpha(opacity=65);
				-webkit-box-shadow: none;
				box-shadow: none;
				opacity: .65;
			}
			
			@media only screen and (max-width: 1200px) {
				
				#main,.left-img,#loginForm {
					width: 100%;
				}
				
				#loginForm {
					margin-top: 0px;
				}
			
				.left-img > img{
					display: block;
					width: 400px;
					margin: 0 auto;
				}
	
				.tabs-container {
					width: 400px;
					margin: -40px auto 0;
				}
			}
		</style>
		<div id="main">
			<div class="row">
				<div class="col-sm-8 left-img">
					<img src="img/icon_chahua.png" />
				</div>
				<div id="loginForm" class="col-sm-4">
					<div class="tabs-container">
	                    <ul class="nav nav-tabs">
	                        <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">手机号登录</a>
	                        </li>
	                        <li class=""><a data-toggle="tab" href="#tab-2" aria-expanded="false">验证码登录</a>
	                        </li>
	                    </ul>
	                    <div class="tab-content">
	                        <div id="tab-1" class="tab-pane active">
	                            <div class="panel-body">
	                                <form id="form1" class="m-t" role="form" onsubmit="return false;">
						                <div class="form-group">
						                    <input id="mobile1" mobile type="text" name="mobile1" class="form-control" placeholder="请输入手机号码" required="">
						                </div>
						                <div class="form-group">
						                    <input id="password" type="password" name="password" class="form-control" placeholder="初始密码为手机号码后六位" required="">
						                    <i class="fa fa-eye-slash psw-eye" aria-hidden="true"></i>
						                </div>
						                <button type="submit" class="btn btn-success block full-width m-b">登 录</button>
						
						                <p class="text-muted text-center"> <a href="login.html#"><small>忘记密码了?</small></a> | <a href="register.html">注册一个新账号</a>
						                </p>
						
						            </form>
	                            </div>
	                        </div>
	                        <div id="tab-2" class="tab-pane">
	                            <div class="panel-body">
	                            	<form id="form2" class="m-t" role="form" onsubmit="return false;">
						                <div class="form-group">
						                    <input id="mobile2" name="mobile2" mobile  type="text" class="form-control" placeholder="请输入手机号码" required="">
						                </div>
						                <div class="form-group">
						                    <input id="captcha" name="captcha" type="text" class="form-control" placeholder="请输入短信验证码" required="">
						                	<a id="getCaptcha" href="javascript:void(0);">获取验证码</a>
						                </div>
						                <button type="submit" class="btn btn-success block full-width m-b">登 录</button>
						            </form>    
	                            </div>
	                        </div>
	                    </div>
	                </div>
				</div>
			</div>
		</div>
	</head>
	<body >
		<script src="js/jquery.min.js?v=2.1.4"></script>
		<script src="js/bootstrap.min.js?v=3.3.6"></script>
		<script src="js/plugins/metisMenu/jquery.metisMenu.js"></script>
		<script src="js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
		<script src="js/plugins/layer/layer.min.js"></script>
		<script src="js/hplus.min.js?v=4.1.0"></script>
		<script type="text/javascript" src="js/contabs.min.js"></script>
		<script src="js/plugins/pace/pace.min.js"></script>
		<script src="js/plugins/validate/jquery.validate.min.js"></script>
    	<script src="js/plugins/validate/messages_zh.min.js"></script>
    	<script src="js/plugins/toastr/toastr.min.js"></script>
		<script src="js/security.js"></script>
    	<script src="js/api-service.js"></script>
    	<script src="js/login-api.js"></script>
		<script>
			//获取链接上的参数
			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;
			}
		</script>
		<script>
			
			$(function() {
				var Requests = GetRequest();
				var redirect_url = Requests.redirect_url;
				var userAgent = Requests.userAgent;
				var agentName = "wlyyAgent";
           
				toastr.options = {
					"closeButton": true,
					"positionClass": "toast-top-center"
				}
				
				var $eyeIcon = $('.psw-eye'),
					$mobile1 = $('#mobile1'),
					$password = $('#password'),
					$mobile2 = $('#mobile2'),
					$captcha = $('#captcha'),
					$mobile = $('input[mobile]'),
					$tabs = $('.nav-tabs'),
					$getCaptcha = $('#getCaptcha'),
					$submit = $('button[type="submit"]');
				
				var timer = null;
				
				if(userAgent) {
					userAgent = decodeURIComponent(userAgent)
					localStorage.setItem(agentName, userAgent)
					return ;
				}
				
				function login(data) {
					
					loginApis.login(data)
					.then(function(res) {
						$submit.removeAttr('disabled')
						if(res.status == 200) {
							var data = res.data;
							localStorage.setItem(agentName,JSON.stringify({
								id: data.id,
								uid: data.uid,
								token: data.token,
								imei: localStorage.getItem('WLYY_IMEI'),
								platform: 4
							}))
						   if(redirect_url) {
								window.location.href = decodeURIComponent(redirect_url)
						   }
							
						} else {
							toastr.error(res.msg || "登录失败!")
						}
					})
					.catch(function(e) {
						$submit.removeAttr('disabled')
						console && console.error(e)
					})
				}
				
				function setTimer() {
					$getCaptcha.addClass('disabled');
					var seconds = 59;
					timer = setInterval(function() {
						if(seconds == 0) {
							clearInterval(timer);
							timer = null;
							seconds = 59;
							$getCaptcha.text("获取验证码");
							$getCaptcha.removeClass('disabled');
							return ;
						}
						$getCaptcha.text((seconds--)+"s后重新获取");
					}, 1000)
				}
				
				$eyeIcon.click(function() {
					$el = $(this);
					if($el.hasClass('fa-eye')) {
						$el.removeClass('fa-eye').addClass('fa-eye-slash');
						$password.attr('type','password')
					} else {
						$el.removeClass('fa-eye-slash').addClass('fa-eye');
						$password.attr('type','text')
					}
				})
				
				$getCaptcha.click(function() {
					if($getCaptcha.hasClass('disabled')) {
						return ;
					}
					if(validator2.element($mobile2)) {
						setTimer();
						loginApis.getCaptcha({
							mobile: $mobile2.val(),
							type: 5,
							captchaToken: 5
						}).then(function(res) {
							if(res.status == 200) {
								toastr.success("短信发送成功!")
							} else {
								toastr.error(res.msg || "短信发送失败!")
							}
						}).catch(function(e) {
							console && console.error(e)
						})
					}
					
				})
				$submit.click(function() {
					var index = $('.nav-tabs>li.active').index();
					var mobile = '',
						password = '',
						captcha = '';
					
					if(index == 0) { // 点击手机登陆选项卡
						if($("#form1").valid()) {
							$(this).attr('disabled','disabled')
							mobile = $mobile1.val();
							password = $password.val();
							loginApis.publicKey().then(function(res) {
								if (res.status == 200) {
									var mod = res.data.modulus;
									var exp = res.data.exponent;
									key = RSAUtils.getKeyPair(exp, "", mod);
									if (key) {
										encryedPwd = RSAUtils.encryStr(key, password);
										login({
											mobile: mobile,
											password: encryedPwd
										})
									}else {
									   toastr.error(res.msg || "登录失败!")
									   $submit.removeAttr('disabled')
									}
								}
							})
						}
						
					} else { // 点击验证码登录选项卡
						if($("#form2").valid()) {
							$(this).attr('disabled','disabled')
							mobile = $mobile2.val();
							captcha = $captcha.val();
							login({
								mobile: mobile,
								captcha: captcha
							})
						}
						
					}
				})
				
				var validator1 = $("#form1").validate({
					onsubmit: false,
					onfocusout: function(ele) {
						validator1.element(ele)
					},
				   rules: {
				      mobile1: {
							required: true,
							mobile: true,
						},
					   password: "required",
					}
				});
				
				var validator2 = $("#form2").validate({
					onsubmit: false,
					onfocusout: function(ele) {
						validator2.element(ele)
					},
				   rules: {
				      mobile2: {
							required: true,
							mobile: true,
						},
					   captcha: "required",
					}
				});
				
				
				$tabs.on('click','li',function() {
					var idx = $(this).index(),
						mob = '';
						
					if(idx == 1) { // 点击验证码登录选项卡
						mob = $mobile1.val();
						if(mob) {
							$mobile.val(mob);
							validator2.element($mobile2)
						}
					} else { // 点击手机登陆选项卡
						mob = $mobile2.val();
						if(mob) {
							$mobile.val(mob);
							validator1.element($mobile1)
						}
					}
				})
				
				//$("#form1").valid();
				jQuery.validator.addMethod("mobile", function(value, element, param) {
					var reg=/^[1][3,4,5,7,8][0-9]{9}$/;  
				  return reg.test(value);  
				}, "手机号码有误");
			})
		</script>
	</body>
</html>

+ 234 - 72
prescription-adjustment.html

@ -22,6 +22,18 @@
			height: 15px;
			background: url(img/tianjia_icon.png) no-repeat;
			background-size: 15px;
			cursor: pointer;
		}
		.noselect {
			-webkit-touch-callout: none; /* iOS Safari */
			-webkit-user-select: none; /* Chrome/Safari/Opera */
			-khtml-user-select: none; /* Konqueror */
			-moz-user-select: none; /* Firefox */
			-ms-user-select: none; /* Internet Explorer/Edge */
			user-select: none; /* Non-prefixed version, currently */
		}
		.fa-close {
			cursor: pointer;
		}
		.icon-xinzeng {
			display: inline-block;
@ -29,6 +41,7 @@
			height: 20px;
			background: url(img/xinzeng_icon.png) no-repeat;
			background-size: 20px;
			cursor: pointer;
		}
		.icon-jianshao {
			display: inline-block;
@ -36,6 +49,7 @@
			height: 20px;
			background: url(img/jianshao_icon.png) no-repeat;
			background-size: 20px;
			cursor: pointer;
		}
		.icon-shanchu {
			position: absolute;
@ -46,8 +60,12 @@
			margin-top: -10px;
			background: url(img/qingchu_icon.png) no-repeat;
			background-size: 20px;
			cursor: pointer;
		}
		ul { list-style: none; padding-left: 0; }
		#adjustReason li{
			cursor: pointer;
		}
		#adjustReason li.active {
			background-color: #12b7f5;
			color: #fff;
@ -57,90 +75,232 @@
			bottom: 5px;
			right: 15px;
		}
		#addDrugBtn {
			cursor: pointer;
		}
		#diagnosisInput {
			display: none;
			height: 30px;
			border: 0;
		}
		.diagnosis-wrap {
			display: none;
		}
	</style>
</head>
<body class="white-bg plr5">
    <div class="ibox">
        <div class="mt15">
            <p class="c-333 c-f16 mb5">临床诊断</p>
        </div>
        <div class="ibox-content">
            <div class="pt10">
            	<span class="c-999 c-vam c-display-ib mb10">诊断结果:</span>
	            <div class="clearfix c-display-ib c-vam">
	            	<ul class="fl">
		            	<li class="fl bc-12b7f5 c-fff ptb5 plr10 c-b-r5">
		            		高血压
		            		<i class="fa fa-close"></i>
		            	</li>
		            </ul>
		            <div class="mb10 fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr15 c-b-r5 ml20">
	            		<i class="icon-tianjia c-vam mr5"></i>添加
	            	</div>
    <div id="main"></div>
    <script id="detailTmpl" type="text/html">
    	<div class="ibox">
	        <div class="mt15">
	            <p class="c-333 c-f16 mb5">临床诊断</p>
	        </div>
	        <div class="ibox-content">
	            <div class="pt10">
	            	<span class="c-999 c-vam c-display-ib mb10">诊断结果:</span>
		            <div class="clearfix c-display-ib c-vam">
		            	<ul id="diagnosis" class="fl">
		            		{{each diagnosis as d i}}
			            	<li class="fl bc-12b7f5 c-fff ptb5 plr10 c-b-r5" data-json="{{d | toJson}}">
			            		{{d.name}}
			            		<i class="fa fa-close"></i>
			            	</li>
			            	{{/each}}
			            </ul>
			            <div class="fl ml10 plr5 c-12b7f5 diagnosis-wrap" style="
						    border: 1px solid #12b7f5;
						    border-radius: 5px;
						"><span id="placeholdText">请输入临床诊断名称</span>
						
						<div class="input-group ">
	                        <input id="diagnosisInput" value="" type="text" class="form-control c-display-ib c-w120" autocomplete="on">
	                        <div class="input-group-btn">
	                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
	                        </div>
	                        <!-- /btn-group -->
	                    </div>
			            </div>
						
			            <div id="addDiagnosisBtn" class="mb10 fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr15 c-b-r5 ml20">
		            		<i class="icon-tianjia c-vam mr5"></i>添加
		            	</div>
		            </div>
	            </div>
            </div>
        </div>
    </div>
    <div class="ibox">
        <div class="mt15">
            <p class="c-333 c-f16 mb5">RP</p>
        </div>
        <div class="ibox-content ">
        	<div class="pb10 plr15 mtb10 bc-f5f5fa pr">
	        </div>
	    </div>
	    <div id="drugs" class="ibox">
	        <div class="mt15">
	            <p class="c-333 c-f16 mb5">RP</p>
	        </div>
	        {{each prescriptionInfo as p i}}
	        <div class="ibox-content ">
	        	<div class="pb10 plr15 mtb10 bc-f5f5fa pr" data-json="{{p | toJson}}">
		        	<ul class="clearfix">
		        		<li class="fl pt10">药品: 
		        			<div class="c-w200 c-vam c-display-ib">
			        			<div class="input-group ">
			                        <input value="{{p.drugName}}" placeholder="请输入药品名称或拼音首码" type="text" class="j-drugName form-control c-display-ib c-w120" autocomplete="on">
			                        <div class="input-group-btn">
			                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
			                        </div>
			                        <!-- /btn-group -->
			                    </div>
		                    </div>
		        		</li>
		        		<li class="fl ml10 pt10">
		        			次剂量:<i class="icon-jianshao c-vam mr5 noselect"></i> 
		        			<input value="{{p.physicDose}}" type="text" placeholder="" class="j-medi-single form-control c-w80 c-display-ib c-vam">
		        			<i class="icon-xinzeng c-vam ml5 noselect"></i>
		        			<span class="j-dose-unit">{{p.physicDoseUnitName}}</span>
		        		</li>
		        		<li class="fl ml10 pt10">天数:
		        			<div class="c-w140 c-vam c-display-ib">
			        			<div class="input-group ">
			                        <input value="{{p.dayCount}}" placeholder="请输入药品天数" type="text" class="j-selDate form-control c-display-ib c-w120" autocomplete="on">
			                        <div class="input-group-btn">
			                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
			                        </div>
			                        <!-- /btn-group -->
			                    </div>
		                    </div>
		        		</li>
		        	</ul>
		        	<ul class="clearfix">
		        		<li class="fl">频次:
		        			<div class="c-w120 c-vam c-display-ib">
			        			<div class="input-group ">
			                        <input value="{{p.drugRateName}}" data-code="{{p.drugRate}}" placeholder="请输入频次" type="text" class="form-control j-selFreq form-control c-display-ib c-w120" autocomplete="on">
			                        <div class="input-group-btn">
			                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
			                        </div>
			                        <!-- /btn-group -->
			                    </div>
		                    </div>
		        		</li>
		        		<li class="fl ml10">用法:
		        			<div class="c-w120 c-vam c-display-ib">
			        			<div class="input-group ">
			                        <input value="{{p.usageName}}" data-code="{{p.drugUsage}}" placeholder="请输入用法" type="text" class="j-method form-control c-display-ib c-w120" autocomplete="on">
			                        <div class="input-group-btn">
			                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
			                        </div>
			                        <!-- /btn-group -->
			                    </div>
		                    </div>
		        		
		        		</li>
		        		<li class="fl ml10 pt7">总量:{{p.num}}{{p.drugNumUnitName}}</li>
		        	</ul>
		        	<i class="icon-shanchu"></i>
	        	</div>
	        </div>
	        {{/each}}
	    </div>
	    <div class="ibox">
	        <div class="ibox-content">
	            <div id="addDrugBtn" class="mt10 c-12b7f5 c-display-ib">
	            	<i class="icon-xinzeng c-vam ml5 mr5"></i>新增药品
	            </div>
	        </div>
	    </div>
	    <div class="ibox">
	        <div class="mt15">
	            <p class="c-333 c-f16 mb5">调整原因</p>
	        </div>
	        <div class="ibox-content">
	            <ul id="adjustReason" class="clearfix">
	            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 ptb5 plr20 c-b-r20 mt10">
	            		原处方药品库存不足
	            	</li>
	            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr20 c-b-r20 ml10 mt10">
	            		居民体征有变化,调整用药
	            	</li>
	            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr20 c-b-r20 ml10 mt10">
	            		居民要求变更处方药品
	            	</li>
	            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr20 c-b-r20 ml10 mt10">
	            		其它
	            	</li>
	            </ul>
	        </div>
	        <div class="plr10 pr">
	        	<textarea id="disagreeReason" class="c-wp100 mt10 c-h100 ptb10 plr10" calcWorld="200"></textarea>
				<span class="c-999 wordCount">0/200</span>
	        </div>
	        <div class="c-tac mb15 mt15">
				<button type="button" class="btn btn-w-m btn-success mlr20">确认</button>
				<button type="button" class="btn btn-w-m btn-danger mlr20">返回</button>
			</div>
	    </div>
    </script>
    <script id="diagnosisTmpl" type="text/html">
    	<li class="fl bc-12b7f5 c-fff ptb5 plr10 c-b-r5 ml10">
			{{name}}
			<i class="fa fa-close"></i>
		</li>
    </script>
    <script id="drugTmpl" type="text/html">
    	<div class="ibox-content ">
        	<div class="pb10 plr15 mtb10 bc-f5f5fa pr" >
	        	<ul class="clearfix">
	        		<li class="fl pt10">药品: <input type="text" placeholder="请输入药品名称或拼音首码" class="form-control c-w200 c-display-ib"></li>
	        		<li class="fl pt10">药品:
	        			<div class="c-w200 c-vam c-display-ib">
		        			<div class="input-group ">
		                        <input value="" placeholder="请输入药品名称或拼音首码" type="text" class="j-drugName form-control c-display-ib c-w120" autocomplete="on">
		                        <div class="input-group-btn">
		                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
		                        </div>
		                        <!-- /btn-group -->
		                    </div>
	                    </div>
	        		</li>
	        		<li class="fl ml10 pt10">
	        			次剂量:<i class="icon-jianshao c-vam mr5"></i> 
	        			<input type="text" placeholder="" class="form-control c-w80 c-display-ib c-vam">
	        			<i class="icon-xinzeng c-vam ml5"></i>
	        			次剂量:<i class="icon-jianshao c-vam mr5 noselect"></i> 
	        			<input type="text" placeholder="" class="j-medi-single form-control c-w80 c-display-ib c-vam">
	        			<i class="icon-xinzeng c-vam ml5 noselect"></i>
	        			<span class="j-dose-unit"></span>
	        		</li>
	        		<li class="fl ml10 pt10">天数: 
	        			<div class="c-w140 c-vam c-display-ib">
		        			<div class="input-group ">
		                        <input value="" placeholder="请输入药品天数" type="text" class="j-selDate form-control c-display-ib c-w120" autocomplete="on">
		                        <div class="input-group-btn">
		                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
		                        </div>
		                        <!-- /btn-group -->
		                    </div>
	                    </div>
	        		</li>
	        		<li class="fl ml10 pt10">天数: <input type="text" placeholder="请输入药品天数" class="form-control c-w140 c-display-ib"></li>
	        	</ul>
	        	<ul class="clearfix mb0">
	        		<li class="fl">频次: <input type="text" placeholder="请输入频次" class="form-control c-display-ib c-w120"></li>
	        		<li class="fl ml10">用法: <input type="text" placeholder="请输入用法" class="form-control c-display-ib c-w120"></li>
	        		<li class="fl ml10 pt7">总量:28片</li>
	        	<ul class="clearfix">
	        		<li class="fl">频次: 
	        			<div class="c-w120 c-vam c-display-ib">
		        			<div class="input-group ">
		                        <input value="" placeholder="请输入频次" type="text" class="form-control j-selFreq form-control c-display-ib c-w120" autocomplete="on">
		                        <div class="input-group-btn">
		                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
		                        </div>
		                        <!-- /btn-group -->
		                    </div>
	                    </div>
	        		</li>
	        		<li class="fl ml10">用法: 
	        			<div class="c-w120 c-vam c-display-ib">
		        			<div class="input-group ">
		                        <input value="" data-code="" placeholder="请输入用法" type="text" class="j-method form-control c-display-ib c-w120" autocomplete="on">
		                        <div class="input-group-btn">
		                            <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
		                        </div>
		                        <!-- /btn-group -->
		                    </div>
	                    </div>
	        		</li>
	        		<li class="fl ml10">总量:<input readonly="readonly" type="text" class="form-control c-w140 c-display-ib"></li>
	        	</ul>
	        	<i class="icon-shanchu"></i>
        	</div>
        </div>
    </div>
    <div class="ibox">
        <div class="ibox-content">
            <div class="mt10 c-12b7f5">
            	<i class="icon-xinzeng c-vam ml5 mr5"></i>新增药品
            </div>
        </div>
    </div>
    <div class="ibox">
        <div class="mt15">
            <p class="c-333 c-f16 mb5">调整原因</p>
        </div>
        <div class="ibox-content">
            <ul id="adjustReason">
            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 ptb5 plr20 c-b-r20 mt10">
            		原处方药品库存不足
            	</li>
            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr20 c-b-r20 ml10 mt10">
            		居民体征有变化,调整用药
            	</li>
            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr20 c-b-r20 ml10 mt10">
            		居民要求变更处方药品
            	</li>
            	<li class="fl c-b-c12b7f5 c-border c-12b7f5 c-fff ptb5 plr20 c-b-r20 ml10 mt10">
            		其它
            	</li>
            </ul>
        </div>
        <div class="plr10 pr">
        	<textarea class="c-wp100 mt10 c-h100 ptb10 plr10"></textarea>
        	<span class="c-999 wordCount">0/200</span>
        </div>
        <div class="c-tac mb15 mt15">
			<button type="button" class="btn btn-w-m btn-success mlr20">确认</button>
			<button type="button" class="btn btn-w-m btn-danger mlr20">返回</button>
		</div>
    </div>
    </script>
    <script src="js/jquery.min.js?v=2.1.4"></script>
    <script src="js/bootstrap.min.js?v=3.3.6"></script>
    <script src="js/content.min.js?v=1.0.0"></script>
@ -148,12 +308,14 @@
    <script src="js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
    <script src="js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
    <script src="js/plugins/toastr/toastr.min.js"></script>
    <script src="js/plugins/suggest/bootstrap-suggest.min.js"></script>
    <script src="js/es6-promise.js"></script>
    <script src="js/underscore.js"></script>
    <script src="js/api-service.js"></script>
    <script src="js/management-api.js"></script>
    <script src="js/util.js"></script>
    <script src="js/template.js"></script>
    <script src="js/prescription-detail-api.js"></script>
    <script src="js/buz/prescription-adjustment.js"></script>
</body>
</html>

+ 3 - 0
prescription-detail.html

@ -22,6 +22,9 @@
			background-color: #12b7f5;
			color: #fff;
		}
		#adjustReason li{
			cursor: pointer;
		}
		.wordCount {
			position:absolute;
			bottom: 5px;