浏览代码

'整理床位页面'

yaodeguang 3 周之前
父节点
当前提交
f4852fd0a4
共有 2 个文件被更改,包括 1000 次插入97 次删除
  1. 934 0
      src/utils/index.js
  2. 66 97
      src/views/medical-advice/patient-info/AdjustBed.vue

+ 934 - 0
src/utils/index.js

@@ -0,0 +1,934 @@
+Date.prototype.Format = function (fmt) {
+    let o = {
+        'y+': this.getFullYear(),
+        'M+': this.getMonth() + 1, // 月份
+        'd+': this.getDate(), // 日
+        'H+': this.getHours(), // 小时
+        'm+': this.getMinutes(), // 分
+        's+': this.getSeconds(), // 秒
+        'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
+        'S': this.getMilliseconds() // 毫秒
+    }
+    if (!fmt) fmt = 'yyyy-MM-dd HH:mm:ss'
+    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
+    for (let k in o) {
+        if (new RegExp('(' + k + ')').test(fmt)) {
+            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
+        }
+    }
+    return fmt
+}
+
+let parseTimeOne = (time, cFormat) => {
+    if (!time) {
+        return ''
+    }
+    if (arguments.length === 0) {
+        return null
+    }
+    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+    let date
+    if (typeof time === 'object') {
+        date = time
+    } else {
+        if (('' + time).length === 10) time = parseInt(time) * 1000
+        date = new Date(parseInt(time))
+    }
+    const formatObj = {
+        y: date.getFullYear(),
+        m: date.getMonth() + 1,
+        d: date.getDate(),
+        h: date.getHours(),
+        i: date.getMinutes(),
+        s: date.getSeconds(),
+        a: date.getDay()
+    }
+    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+        let value = formatObj[key]
+        if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
+        if (key === 'h') {
+            if (4 <= formatObj['h'] && formatObj['h'] < 6) {
+                formatObj['h'] = '凌晨' + formatObj['h']
+            } else if (6 <= formatObj['h'] && formatObj['h'] < 8) {
+                formatObj['h'] = '早上' + formatObj['h']
+            } else if (8 <= formatObj['h'] && formatObj['h'] < 12) {
+                formatObj['h'] = '上午' + formatObj['h']
+            } else if (12 <= formatObj['h'] && formatObj['h'] < 15) {
+                formatObj['h'] = '中午' + formatObj['h']
+            } else if (15 <= formatObj['h'] && formatObj['h'] < 18) {
+                formatObj['h'] = '下午' + formatObj['h']
+            } else if (18 <= formatObj['h'] && formatObj['h'] < 20) {
+                formatObj['h'] = '傍晚' + formatObj['h']
+            } else {
+                formatObj['h'] = '晚上' + formatObj['h']
+            }
+            return formatObj['h']
+        }
+        return value || 0
+    })
+    return time_str
+}
+let parseTime = (time, cFormat) => {
+    if (!time) {
+        return ''
+    }
+    // if (arguments.length === 0) {
+    //     return null
+    // }
+    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+    let date
+    if (typeof time === 'object') {
+        date = time
+    } else {
+        if (('' + time).length === 10) time = parseInt(time) * 1000
+        date = new Date(parseInt(time))
+    }
+    const formatObj = {
+        y: date.getFullYear(),
+        m: date.getMonth() + 1,
+        d: date.getDate(),
+        h: date.getHours(),
+        i: date.getMinutes(),
+        s: date.getSeconds(),
+        a: date.getDay()
+    }
+    const time_str
+    = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+        let value = formatObj[key]
+        if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
+        if (result.length > 0 && value < 10) {
+            value = '0' + value
+        }
+        return value || 0
+    })
+    return time_str
+}
+
+let parseTimeTwo = (time, cFormat) => {
+    if (!time) {
+        return ''
+    }
+    if (arguments.length === 0) {
+        return null
+    }
+    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+    let date
+    if (typeof time === 'object') {
+        date = time
+    } else {
+        if (('' + time).length === 10) time = parseInt(time) * 1000
+        date = new Date(parseInt(time))
+    }
+    const formatObj = {
+        y: date.getFullYear(),
+        m: date.getMonth() + 1,
+        d: date.getDate(),
+        h: date.getHours(),
+        i: date.getMinutes(),
+        s: date.getSeconds(),
+        a: date.getDay()
+    }
+    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+        let value = formatObj[key]
+        if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
+        return value || 0
+    })
+    return time_str
+}
+
+function isValidOrgCode(value) {
+    if (value) {
+        let part1 = value.substring(0, 8);
+        let part2 = value.substring(value.length - 1, 1);
+        let ws = [3, 7, 9, 10, 5, 8, 4, 2];
+        let str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+        let reg = /^([0-9A-Z]){8}$/;
+        if (!reg.test(part1)) {
+            return true
+        }
+        let sum = 0;
+        for (let i = 0; i < 8; i++) {
+            sum += str.indexOf(part1.charAt(i)) * ws[i];
+        }
+        let C9 = 11 - (sum % 11);
+        let YC9 = part2 + '';
+        if (C9 === 11) {
+            C9 = '0';
+        } else if (C9 === 10) {
+            C9 = 'X';
+        } else {
+            C9 = C9 + '';
+        }
+        return YC9 === C9;
+    }
+}
+
+function checkAddressCode(addressCode) {
+    let provinceAndCitys = {
+        11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江",
+        31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东",
+        45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏",
+        65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外"
+    };
+    let check = /^[1-9]\d{5}$/.test(addressCode);
+    if (!check) return false;
+    if (provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
+        return true;
+    } else {
+        return false;
+    }
+
+}
+
+let checkTaxpayerId = (taxpayerId) => {
+    if (taxpayerId && taxpayerId.length === 15) {
+        let addressCode = taxpayerId.substring(0, 6);
+        // 校验地址码
+        let check = checkAddressCode(addressCode);
+        if (!check) {
+            return false;
+        }
+        // 校验组织机构代码
+        let orgCode = taxpayerId.substring(6, 9);
+        check = isValidOrgCode(orgCode);
+        if (!check) {
+            return false;
+        }
+        return true;
+    } else {
+        return false;
+    }
+}
+
+/**
+ * @description 判断是否为银行卡号
+ * @param {String} str_cardNo 待校验的数据
+ * @returns {Boolean}, true:是银行卡号
+ **/
+let isBankCard = (str_cardNo) => {
+    str_cardNo = str_cardNo || String(this);
+    if ("" === str_cardNo.trim() || undefined === str_cardNo) {
+        return false;
+    }
+    //console.log('llllllllllstr_cardNo', str_cardNo);
+    let lastNum = str_cardNo.substr(str_cardNo.length - 1, 1);//取出最后一位(与luhm进行比较)
+    let first15Num = str_cardNo.substr(0, str_cardNo.length - 1);//前15或18位
+    //console.log('llllllllllfirst15Num', first15Num);
+    let newArr = [];
+    for (let i = first15Num.length - 1; i > -1; i--) {    //前15或18位倒序存进数组
+        newArr.push(first15Num.substr(i, 1));
+    }
+    let arrJiShu = [];  //奇数位*2的积 <9
+    let arrJiShu2 = []; //奇数位*2的积 >9
+
+    let arrOuShu = [];  //偶数位数组
+    for (let j = 0; j < newArr.length; j++) {
+        if ((j + 1) % 2 === 1) {//奇数位
+            if (parseInt(newArr[j]) * 2 < 9)
+                arrJiShu.push(parseInt(newArr[j]) * 2);
+            else
+                arrJiShu2.push(parseInt(newArr[j]) * 2);
+        } else //偶数位
+            arrOuShu.push(newArr[j]);
+    }
+
+    let jishu_child1 = [];//奇数位*2 >9 的分割之后的数组个位数
+    let jishu_child2 = [];//奇数位*2 >9 的分割之后的数组十位数
+    for (let h = 0; h < arrJiShu2.length; h++) {
+        jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
+        jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
+    }
+
+    let sumJiShu = 0; //奇数位*2 < 9 的数组之和
+    let sumOuShu = 0; //偶数位数组之和
+    let sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
+    let sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
+    let sumTotal = 0;
+    for (let m = 0; m < arrJiShu.length; m++) {
+        sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
+    }
+
+    for (let n = 0; n < arrOuShu.length; n++) {
+        sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
+    }
+
+    for (let p = 0; p < jishu_child1.length; p++) {
+        sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
+        sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
+    }
+    //计算总和
+    sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);
+    //console.log('sumTotal', sumJiShu, sumOuShu, sumJiShuChild1, sumJiShuChild2);
+
+    //计算Luhm值
+    let k = parseInt(sumTotal) % 10 === 0 ? 10 : parseInt(sumTotal) % 10;
+    let luhm = 10 - k;
+    //console.log('iiiiiiiiisbank', lastNum, luhm);
+    return lastNum === luhm;
+}
+
+let fmoney = (str, flag = true) => { //金额按千位逗号分割
+    if (/[^0-9.]/.test(str))
+        return "0.00";
+    if (str == null || str === "null" || str === "")
+        return "0.00";
+    str = str.toString().replace(/^(\d*)$/, "$1.");
+    str = (str + "00").replace(/(\d*\.\d\d)\d*/, "$1");
+    str = str.replace(".", ",");
+    let re = /(\d)(\d{3},)/;
+    while (re.test(str))
+        str = str.replace(re, "$1,$2");
+    str = str.replace(/,(\d\d)$/, ".$1");
+    if (!flag) {
+        let a = str.split(".");
+        if (a[1] === "00") {
+            str = a[0];
+        }
+    }
+    return str;
+};
+let rmoney = (s) => {   //还原
+    return parseFloat(s.replace(/[^\d.-]/g, ""));
+};
+
+let DataLength = (fData) => {
+    let intLength = 0;
+    for (let i = 0; i < fData.length; i++) {
+        if ((fData.charCodeAt(i) < 0) || (fData.charCodeAt(i) > 255))
+            intLength = intLength + 2;
+        else
+            intLength = intLength + 1;
+    }
+    return intLength;
+}
+
+let keepTwoDecimalFull = (num) => {
+    let result = parseFloat(num);
+    if (isNaN(result)) {
+        return false;
+    }
+    result = Math.round(num * 100) / 100;
+    let s_x = result.toString();
+    let pos_decimal = s_x.indexOf('.');
+    if (pos_decimal < 0) {
+        pos_decimal = s_x.length;
+        s_x += '.';
+    }
+    while (s_x.length <= pos_decimal + 2) {
+        s_x += '0';
+    }
+    return s_x;
+};
+
+/**
+ * 文件转 Base64
+ * @param file
+ * @returns {Promise<any>}
+ */
+let fileToDataUrl = file => {
+    return new Promise((resolve, reject) => {
+        let reader = new FileReader();
+        reader.onloadend = function (e) {
+            resolve(e.target.result)
+        };
+        reader.readAsDataURL(file);
+    })
+}
+
+
+/**
+ * 两个集合的交集
+ * @param base
+ * @param target
+ * @returns {Array}
+ */
+let intersectionSet = (base, target) => {
+    if (!base ||
+        !target ||
+        !base.length ||
+        !target.length) {
+        return []
+    }
+    let baseSet = new Set(base)
+    let targetSet = new Set(target)
+    let result = new Set([...baseSet].filter(x => targetSet.has(x)))
+    return Array.from(result)
+}
+
+/**
+ * 获取对象类型
+ * @param object
+ * @returns {string}
+ */
+ let getType = (object) => {
+    let _t;
+    return ((_t = typeof (object)) == "object" ? object == null && "null" ||
+        Object.prototype.toString.call(object).slice(8, -1) : _t).toLowerCase();
+}
+
+/**
+ * 数据判空
+ * @param data
+ * @returns {Boolean}
+ */
+ let dataIsEmpty = (data) => {
+    // console.log("dataIsEmpty",data,getType(data))
+    switch (getType(data)) {
+        case 'string':return data=='';
+        case 'object':return Object.keys()(data).length===0;
+        case 'array':return data.length===0;
+    
+        default:true
+            break;
+    }
+}
+
+/**
+ * 深拷贝
+ * @param p 目标对象
+ * @param c 结果对象
+ * @returns Object
+ */
+let deepCopy = (p, c) => {
+    let t = getType(p)
+    if (t !== 'array' && t !== 'object') {
+        return p
+    }
+    let x = c || (t === 'array' ? [] : {})
+    for (let i in p) {
+        if (!p.hasOwnProperty(i)) {
+            continue
+        }
+        if (getType(p[i]) === 'object') {
+            x[i] = {}
+            deepCopy(p[i], x[i])
+        } else if (getType(p[i]) === 'array') {
+            x[i] = []
+            deepCopy(p[i], x[i])
+        } else {
+            x[i] = p[i]
+        }
+    }
+    return x
+}
+
+/**
+ * 防抖
+ * @param func 事件
+ * @param wait 抖动时间
+ * @returns {debounced}
+ */
+let debounce = (func, wait, immediate) => {
+    let timeout, result;
+
+    let debounced = function () {
+        let _that = this;
+        let args = arguments;
+
+        if (timeout) clearTimeout(timeout);
+
+        if (immediate) {
+            // 如果执行过,则不再执行
+            let callnow = !timeout;
+
+            timeout = setTimeout(() => {
+                timeout = null;
+            }, wait)
+            if (callnow) result = func.apply(_that, args);
+        } else {
+            timeout = setTimeout(function () {
+                func.apply(_that, args);
+            }, wait);
+        }
+        return result;
+    }
+
+    debounced.cancel = function () {
+        clearTimeout(timeout);
+        timeout = null;
+    }
+    return debounced;
+}
+
+let throttle = (func, wait, options) => {
+    let timeout, context, args;
+    let previous = 0;
+    if (!options) options = {};
+
+    let later = function () {
+        previous = options.leading === false ? 0 : new Date().getTime();
+        timeout = null;
+        func.apply(context, args);
+        if (!timeout) context = args = null;
+    };
+
+    return function () {
+        let now = new Date().getTime();
+        if (!previous && options.leading === false) previous = now;
+        let remaining = wait - (now - previous);
+        context = this;
+        args = arguments;
+        if (remaining <= 0 || remaining > wait) {
+            if (timeout) {
+                clearTimeout(timeout);
+                timeout = null;
+            }
+            previous = now;
+            func.apply(context, args);
+            if (!timeout) context = args = null;
+        } else if (!timeout && options.trailing !== false) {
+            timeout = setTimeout(later, remaining);
+        }
+    }
+}
+
+let createIndexFinder = dir => {
+    return function (array, predicate, context) {
+        let length = array.length;
+        let index = dir > 0 ? 0 : length - 1;
+        for (; index >= 0 && index < length; index += dir) {
+            if (predicate.call(context, array[index], index, array)) return index;
+        }
+        return -1;
+    }
+}
+
+let convertImgToBase64 = (url, callback, outputFormat) => {
+    let canvas = document.createElement('CANVAS'),
+        ctx = canvas.getContext('2d'),
+        img = new Image();
+    img.setAttribute('crossOrigin', 'anonymous');
+    // img.crossOrigin = 'Anonymous';
+    img.onload = function () {
+        canvas.height = img.height;
+        canvas.width = img.width;
+        ctx.drawImage(img, 0, 0);
+        let dataURL = canvas.toDataURL(outputFormat || 'image/png');
+        // callback.call(this, dataURL);
+        callback(dataURL);
+        canvas = null;
+    };
+    img.src = url;
+};
+
+/**
+ * 身份证号码验证
+ * @param num
+ */
+let isIdCardNo = (num) => {
+    num = num.toUpperCase();           //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
+    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
+        //alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。');
+        return false;
+    } //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+    //下面分别分析出生日期和校验位
+    let len, re;
+    len = num.length;
+    if (len == 15) {
+        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
+        let arrSplit = num.match(re);  //检查生日日期是否正确
+        let dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
+        let bGoodDay;
+        bGoodDay = (dtmBirth.getYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(arrSplit[3])) && (dtmBirth.getDate() === Number(arrSplit[4]));
+        if (!bGoodDay) {
+            //alert('输入的身份证号里出生日期不对!');
+            return false;
+        } else { //将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+            let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
+            let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+            let nTemp = 0, i;
+            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
+            for (i = 0; i < 17; i++) {
+                nTemp += num.substr(i, 1) * arrInt[i];
+            }
+            num += arrCh[nTemp % 11];
+            return true;
+        }
+    }
+    if (len === 18) {
+        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
+        let arrSplit = num.match(re);  //检查生日日期是否正确
+        let dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
+        let bGoodDay;
+        bGoodDay = (dtmBirth.getFullYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(arrSplit[3])) && (dtmBirth.getDate() === Number(arrSplit[4]));
+        if (!bGoodDay) {
+            /*alert(dtmBirth.getYear());
+            alert(arrSplit[2]);
+            alert('输入的身份证号里出生日期不对!');*/
+            return false;
+        } else { //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+            let valnum;
+            let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
+            let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+            let nTemp = 0, i;
+            for (i = 0; i < 17; i++) {
+                nTemp += num.substr(i, 1) * arrInt[i];
+            }
+            valnum = arrCh[nTemp % 11];
+            if (valnum != num.substr(17, 1)) {
+                //alert('18位身份证的校验码不正确!应该为:' + valnum);
+                return false;
+            }
+            return true;
+        }
+    }
+    return false;
+
+}
+
+/**
+ * 验证特殊字符
+ * @param str
+ */
+let checkSpecialCharacter = (str) => {
+    let regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
+        regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
+    if (regEn.test(str) || regCn.test(str)) {
+        return false;
+    } else {
+        return true;
+    }
+}
+
+/**
+ * 获取uuid
+ */
+let uuid = () => {
+    let s = [];
+    let hexDigits = "0123456789abcdef";
+    for (let i = 0; i < 36; i++) {
+        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
+    }
+    s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
+    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
+    s[8] = s[13] = s[18] = s[23] = "";
+    return s.join("");
+}
+
+let findIndex = createIndexFinder(1)
+let findLastIndex = createIndexFinder(-1)
+
+/**
+ * 深层合并json
+ * @param targetObj
+ * @param mergeObj
+ */
+let deepMergeObj = (targetObj, mergeObj) => {
+    let fieldArr = [], target, targetType = getType(targetObj);
+    if (targetType === 'array') {
+        target = deepCopy(targetObj);
+    } else if (targetType === 'object') {
+        target = deepCopy(targetObj);
+    }
+    getFieldArr(mergeObj, '', fieldArr)
+    fieldArr.forEach(item => {
+        let evalString;
+        let evalPrefix = `target${item.key} = `;
+        let evalSuffix;
+        let valueType = getType(item.value);
+        if (valueType === 'string') {
+            item.value.replace('\'', '\\\'');
+            evalSuffix = `'${item.value}'`;
+        } else if (valueType === 'array') {
+            evalSuffix = `['${item.value.join('\',\'')}']`;
+        } else {
+            evalSuffix = item.value;
+        }
+        evalString = evalPrefix + evalSuffix;
+        try {
+            if (!eval(`target${item.key}`) || evalSuffix !== null) {
+                eval(evalString);
+            }
+        } catch (e) {
+            console.warn('合并异常,键不存在!---', evalString);
+        }
+    })
+    return target
+};
+
+let isIE = function () {
+    return !!window.ActiveXObject || "ActiveXObject" in window;
+};
+
+/**
+ * 将对象所有键值以数组方式可视化
+ * @param obj
+ * @param prefixKey
+ * @param fieldArr
+ */
+
+let getFieldArr = (obj, prefixKey, fieldArr) => {
+    let fieldKey = '', objType = getType(obj);
+    for (let key in obj) {
+        if (objType === 'array') {
+            fieldKey = `${prefixKey ? prefixKey : ''}[${key}]`;
+        } else if (objType === 'object') {
+            fieldKey = prefixKey + '.' + key;
+        }
+        let valueType = getType(obj[key]);
+        if (valueType === 'array' && !isColorArr(obj[key])) {
+            getFieldArr(obj[key], fieldKey, fieldArr);
+        } else if (valueType === 'object') {
+            getFieldArr(obj[key], fieldKey, fieldArr);
+        } else {
+            fieldArr.push({
+                key: fieldKey,
+                value: obj[key]
+            });
+        }
+    }
+}
+
+const isColorArr = arr => {
+    if (!arr || !(arr instanceof Array)) {
+        return false;
+    }
+    return arr.filter(item => typeof item !== 'string' || (item.indexOf('#') === -1 && item.indexOf('rgb') === -1)).length === 0;
+}
+
+const equalsObj = (obj1, obj2) => {
+    let type1 = getType(obj1), type2 = getType(obj2);
+    if (type1 !== type2) {
+        let int1 = parseFloat(obj1), int2 = parseFloat(obj2);
+        if (isNaN(int1) || isNaN(int2)) {
+            return false;
+        } else {
+            return int1 === int2;
+        }
+    } else {
+        switch (type1) {
+            case 'array': {
+                let len1 = obj1.length, len2 = obj2.length;
+                if (len1 !== len2) {
+                    return false;
+                }
+                for (let i = 0; i < len1; i++) {
+                    if (!obj1.hasOwnProperty(i)) {
+                        continue;
+                    }
+                    if (!equalsObj(obj1[i], obj2[i])) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            case 'object': {
+                let keys1 = Object.keys(obj1), keys2 = Object.keys(obj2);
+                let len1 = keys1.length, len2 = keys2.length;
+                if (len1 !== len2) {
+                    return false;
+                }
+                if (!equalsObj(keys1, keys2)) {
+                    return false;
+                }
+                for (let i = 0; i < len1; i++) {
+                    if (!obj1.hasOwnProperty(keys1[i]) || !obj2.hasOwnProperty(keys2[i])) {
+                        continue;
+                    }
+                    if (!equalsObj(obj1[keys1[i]], obj2[keys2[i]])) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            case 'number': {
+                if (isNaN(obj1) && isNaN(obj2)) {
+                    return true;
+                }
+                return obj1 === obj2;
+            }
+            case 'string': {
+                return obj1 === obj2;
+            }
+            default: {
+                return obj1 === obj2;
+            }
+        }
+    }
+}
+
+//获取url参数
+const getURLParameters = url => url.match(/([^?=&]+)(=([^&]*))/g).reduce((a, v) => (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1), a), {});
+
+//const _import_pages = path => r => require.ensure([], () => r(require("@/pages/" + path + ".vue")));
+
+let chnNumChar = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
+
+let chnUnitSection = ["", "万", "亿", "万亿", "亿亿"];
+
+let chnUnitChar = ["", "十", "百", "千"];
+
+const SectionToChinese = function (section) {
+    let strIns = '', chnStr = '';
+    let unitPos = 0;
+    let zero = true;
+    while (section > 0) {
+        let v = section % 10;
+        if (v === 0) {
+            if (!zero) {
+                zero = true;
+                chnStr = chnNumChar[v] + chnStr;
+            }
+        } else {
+            zero = false;
+            strIns = chnNumChar[v];
+            strIns += chnUnitChar[unitPos];
+            chnStr = strIns + chnStr;
+        }
+        unitPos++;
+        section = Math.floor(section / 10);
+    }
+    return chnStr;
+}
+
+const NumberToChinese = function (num) {
+    let unitPos = 0;
+    let strIns = '', chnStr = '';
+    let needZero = false;
+
+    if (num === 0) {
+        return chnNumChar[0];
+    }
+
+    while (num > 0) {
+        let section = num % 10000;
+        if (needZero) {
+            chnStr = chnNumChar[0] + chnStr;
+        }
+        strIns = SectionToChinese(section);
+        strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0];
+        chnStr = strIns + chnStr;
+        needZero = (section < 1000) && (section > 0);
+        num = Math.floor(num / 10000);
+        unitPos++;
+    }
+    return chnStr;
+}
+
+//将表格  导出为 excel
+
+/**
+ *
+ * @param tableDom 需要导出的表格dom对象
+ * @param downDom 隐藏的a标签
+ * @param fileName 下载的文件名
+ */
+const tableToExcel = function (tableDom, downDom, fileName) {
+    let tableClone = tableDom.cloneNode(true);
+    let uri = 'data:application/vnd.ms-excel;base64,'
+        ,
+        template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><?xml version="1.0" encoding="UTF-8" standalone="yes"?><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table style="vnd.ms-excel.numberformat:@">{table}</table></body></html>'
+        , base64 = function (s) {
+            return window.btoa(unescape(encodeURIComponent(s)));
+        }
+        , format = function (s, c) {
+            return s.replace(/{(\w+)}/g, function (m, p) {
+                return c[p];
+            });
+        };
+    let ctx = {worksheet: name || 'Worksheet', table: tableClone.innerHTML};
+    downDom.download = fileName + '.xls';
+    downDom.href = uri + base64(format(template, ctx));
+    downDom.click();
+};
+
+const getList = function (arr) {
+    if (arr.length !== 0) {
+        arr.forEach(item => {
+            item.children || getList(item.children);
+            if (item.children.length === 0) {
+                delete item.children
+            }
+        })
+    }
+};
+
+const setDepData = function (obj) {
+    obj.$store.dispatch('GetCompany').then(res => {
+        let dep = {
+            label: '部门',
+            key: 'department',
+            data: res,
+            props: {
+                value: 'id',
+                label: 'label',
+                children: 'children'
+            },
+            type: 'cascader',
+            value: []
+        };
+        obj.testData.push(dep);
+    });
+};
+
+const digitUppercase = function (n) {
+    let fraction = ['角', '分'];
+    let digit = [
+        '零', '壹', '贰', '叁', '肆',
+        '伍', '陆', '柒', '捌', '玖'
+    ];
+    let unit = [
+        ['元', '万', '亿'],
+        ['', '拾', '佰', '仟']
+    ];
+    let IsNum = Number(n);
+    if (!isNaN(IsNum)) {
+        let head = n < 0 ? '欠' : '';
+        n = Math.abs(n);
+        let s = '';
+        for (let i = 0; i < fraction.length; i++) {
+            s += (digit[Math.floor(n * 100 / 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
+        }
+        s = s || '整';
+        n = Math.floor(n);
+        for (let i = 0; i < unit[0].length && n > 0; i++) {
+            let p = '';
+            for (let j = 0; j < unit[1].length && n > 0; j++) {
+                p = digit[n % 10] + unit[1][j] + p;
+                n = Math.floor(n / 10);
+            }
+            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
+        }
+        return head + s.replace(/(零.)*零元/, '元')
+            .replace(/(零.)+/g, '零')
+            .replace(/^整$/, '零元整');
+    }
+    else {
+        return "";
+    }
+
+};
+
+
+export {
+    DataLength,
+    isBankCard,
+    keepTwoDecimalFull,
+    checkTaxpayerId,
+    fmoney,
+    rmoney,
+    parseTime,
+    parseTimeOne,
+    parseTimeTwo,
+    fileToDataUrl,
+    getType,
+    dataIsEmpty,
+    deepCopy,
+    debounce,
+    throttle,
+    isIdCardNo,
+    convertImgToBase64,
+    findIndex,
+    findLastIndex,
+    uuid,
+    deepMergeObj,
+    equalsObj,
+    getURLParameters,
+    NumberToChinese,
+    tableToExcel,
+    checkSpecialCharacter,
+    getList,
+    setDepData,
+    isIE,
+    digitUppercase
+}

+ 66 - 97
src/views/medical-advice/patient-info/AdjustBed.vue

@@ -95,106 +95,41 @@
                 border: 1px solid #66b1ff;
               "
             >
-              <div
-                v-if="item.sex == '1'"
-                style="
-                  margin-top: -15px;
-                  margin-left: -15px;
-                  border: 1px solid black;
-                  width: 50px;
-                  height: 15px;
-                  font-weight: bold;
-                  background-color: #1294fb;
-                "
-              >
-                {{ item.bedNo }}
-              </div>
-              <div
-                v-else-if="item.sex == '2'"
-                style="
-                  margin-top: -15px;
-                  margin-left: -15px;
-                  border: 1px solid black;
-                  width: 50px;
-                  height: 15px;
-                  font-weight: bold;
-                  background-color: #f56c6c;
-                "
-              >
-                {{ item.bedNo }}
-              </div>
-              <div
-                v-else
-                style="
-                  margin-top: -15px;
-                  margin-left: -15px;
-                  border: 1px solid black;
-                  width: 50px;
-                  height: 15px;
-                  font-weight: bold;
-                "
-              >
-                {{ item.bedNo }}
-              </div>
-              <div style="margin-left: -15px; width: 130px; height: 20px">
-                {{ item.inpatientNo }}
+              <div class="bedNoOuter">
+                <div class="inlineBlock">{{ item.bedNo + '床'}}</div>
+                <div class="inlineBlock">{{ item.name }}</div>
               </div>
-              <div
-                style="
-                  margin-left: -15px;
-                  margin-top: 5px;
-                  margin-bottom: 8px;
-                  width: 130px;
-                  height: 20px;
-                "
-              >
-                {{ item.name }}
-              </div>
-              <div
-                style="
-                  margin-left: -15px;
-                  margin-bottom: 5px;
-                  width: 130px;
-                  height: 20px;
-                "
-              >
-                {{ item.admissDate }}
+              <div class="bodyOuter">
+                <div class="inlineBlock">{{ item.roomNo }}</div>
+                <div class="inlineBlock" v-if="item.name">{{ item.sexName }} 22岁</div>
               </div>
-              <div
-                style="
-                  margin-left: -15px;
-                  margin-bottom: 5px;
-                  width: 130px;
-                  height: 20px;
-                "
-              >
-                管床医生: {{ item.referPhysicianName }}
-              </div>
-              <div
-                style="
-                  margin-left: -15px;
-                  width: 130px;
-                  height: 20px;
-                  display: flex;
-                "
-              >
-                <div style="width: 40%; border: 1px solid black"></div>
-                <div
-                  v-if="item.responceType == '01'"
-                  style="width: 49%; border: 1px solid black; font-weight: bold"
-                >
-                  {{ item.responceTypeName }}
+              <div v-if="item.name" style="width:100%">
+                <div class="bodyOuter">
+                  <div class="inlineBlockLine">住院号:{{ item.inpatientNo }}</div>
                 </div>
-                <div
-                  v-else
-                  style="
-                    width: 49%;
-                    border: 1px solid black;
-                    font-weight: bold;
-                    color: red;
-                  "
-                >
-                  {{ item.responceTypeName }}
+                <div class="bodyOuter">
+                  <div class="inlineBlockLine">患者身份:{{ item.responceTypeName }}</div>
+                </div>
+                <div class="bodyOuter">
+                  <div class="inlineBlockLine" :title="item.admissDate">入院日期:{{ parseTime(new Date(item.admissDate).getTime(),'{y}/{m}/{d}') }}</div>
+                </div>
+                <div class="bodyOuter">
+                  <div class="inlineBlockLine" :title="item.admissDiagStr">入院诊断:{{ item.admissDiagStr }}</div>
+                </div>
+                <div class="bodyOuter">
+                  <div class="inlineBlockLine">住院医生:{{ item.zyDoctorName }}</div>
+                </div>
+                <div class="bodyOuter">
+                  <div class="inlineBlockLine">就诊科室:{{ item.smallDeptName }}</div>
+                </div>
+<!--                <div class="bodyOuter">-->
+<!--                  护理级别: {{ item.referPhysicianName }}-->
+<!--                </div>-->
+<!--                <div class="bodyOuter">-->
+<!--                  病情饮食: {{ item.referPhysicianName }}-->
+<!--                </div>-->
+                <div :class="['bodyOuter',{fontRed:item.balance < 0}]">
+                  余额: {{ item.balance }}
                 </div>
               </div>
             </el-card>
@@ -381,6 +316,7 @@
 </template>
 
 <script setup name="AdjustBed">
+import {parseTime} from "@/utils/index"
 import { onMounted } from "vue";
 import { stringNotBlank, stringIsBlank } from "@/utils/blank-utils";
 import { ElMessage, ElMessageBox } from "element-plus";
@@ -699,6 +635,39 @@ onMounted(() => {
 </script>
 
 <style scoped>
+.bedNoOuter {
+  margin-top: -15px;
+  margin-left: -15px;
+  width: 100%;
+  height: 15px;
+  font-weight: bold;
+  position: relative;
+}
+.inlineBlock {
+  display: inline-block;
+  width: 50%;
+}
+.inlineBlockLine {
+  display: inline-block;
+  width: 100%;
+  white-space: nowrap;
+}
+.bodyOuter {
+  margin-left: -15px;
+  //margin-top: 5px;
+  //margin-bottom: 8px;
+  width: 100%;
+  height: 15px;
+}
+.fontRed {
+  color: red;
+}
+.backgroundBlue {
+  background-color: #1294fb;
+}
+.backgroundRed {
+  background-color: #f56c6c;
+}
 .el-row {
   margin-bottom: 5px;
 }