123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- import $ from 'jquery';
- function getWindowInnerHeight() {
- if (window.innerHeight != undefined) {
- return window.innerHeight;
- } else {
- let by = document.body, ele = document.documentElement;
- return Math.min(by.clientHeight, ele.clientHeight);
- }
- };
- function getWindowInnerWidth() {
- let width = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth
- return width
- };
- function getPageCoordinate(event, stic) {//获取鼠标点击的位置
- let e = event || window.event;
- var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
- var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
- var x = e.pageX || (e.clientX + scrollX);
- var y = (e.pageY + (stic ? 25 : 0)) || (e.clientY + scrollY + (stic ? 25 : 0));//弹窗位置偏下25
- let obj = {
- boxLeft: x,
- boxTop: y + 18
- }
- return obj;
- }
- /**
- * @param {拖动元素/清除拖动事件监听} type add:添加事件监听 del:移除事件监听
- * @param {展开元素id} addDom
- */
- let width = '',//屏幕宽度
- height = '', //屏幕高度
- dragWrapper = '',//拖拽元素
- mouseX = 0,//鼠标距离页面左侧
- mouseY = 0,//鼠标距离页面上部
- dragX = 0,//鼠标可拖拽到左边的最大距离(元素定位左侧距离)
- dragY = 0,//鼠标可拖拽到上边的最大距离(元素定位上边距离)
- isDrag = false,//元素是否处于拖拽中
- addPart = null;//展开区域,这个展开的宽度应当是固定宽度了
- /**
- *
- * @param {事件对象} event
- * @param {被拖动的元素} dragModalWrap
- * @param {可拖动的区域} dragModalTitle
- */
- function handleMove(event) {
- let wrap = $("#" + dragWrapper); //被拖拽的元素
- let dragDes = $("#" + addPart); //展開区域
- let page = getPageCoordinate(event, '0');//获取鼠标位置
- let maxDragX = 0, dragDesWidth = 0;
- let wrapHeight = wrap[0].offsetHeight;//直接用.height()获取的高度不准确
- let wrapWidth = wrap[0].offsetWidth;
- let maxDragY = height - wrapHeight; //最大可拖拽y方向距离
- if (dragDes[0]) { //存在就有类似治疗方案的弹窗,最大可推拽x方向距离
- dragDesWidth = dragDes[0].offsetWidth//展开元素的宽度
- maxDragX = width - wrapWidth - dragDesWidth
- } else {
- maxDragX = width - wrapWidth
- }
- if (isDrag) {
- dragX = page.boxLeft - mouseX //鼠标可拖拽到左边的最大距离
- dragY = page.boxTop - mouseY //鼠标可拖拽到上边的最大距离
- if (dragX < 300) { //不能超出左边界
- dragX = 300
- }
- if (dragY < 100) { //不能超出上边界
- dragY = 100
- }
- if (dragDes[0]) {
- if (width - dragX - dragDesWidth < wrapWidth) { //不能超出右边界
- dragX = maxDragX
- }
- } else {
- if (width - dragX < wrapWidth) { //不能超出右边界
- dragX = maxDragX
- }
- }
- if (height - dragY < wrapHeight) { //不能超出下边界
- dragY = maxDragY
- }
- // isMove = true
- wrap.css({
- left: dragX + 'px',
- marginLeft: 0 + 'px',
- marginTop: 0 + 'px',
- top: dragY + 'px',
- bottom: 'auto',
- right: 'inherit',
- })
- }
- }
- /**
- * 鼠标弹起弹窗不在跟随鼠标移动
- */
- function handleUp() {
- isDrag = false;
- return
- }
- export default {
- //判断字符串是否能转成json
- isJsonStr(str) {
- if (typeof str === 'string') {
- try {
- const myStr = str.replace(/^\s*/, '');
- const obj = JSON.parse(str);
- if (myStr[0] === '{') {
- return true;
- } else {
- return false;
- }
- } catch (e) {
- return false;
- }
- }
- },
- tranformDate(time, str, flag = '-') {
- if (!time) {
- return time;
- }
- const year = time.getFullYear();
- const month = time.getMonth() + 1;
- const day = time.getDate();
- return year + flag + (month > 9 ? month : '0' + month) + flag + (day > 9 ? day : '0' + day) + str;
- },
- //获取两个时间间隔天数
- getTimeRangeDay(timeArr) {
- if (!timeArr || timeArr.length == 0) {
- return null;
- }
- return (new Date(timeArr[1]) - new Date(timeArr[0])) / (1000 * 60 * 60 * 24);
- },
- //导出接口返回流下载
- downloadExportedData(data, fileName) {
- var blob = new Blob([data],
- { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }
- ); //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型
- var downloadElement = document.createElement('a');
- var href = window.URL.createObjectURL(blob); //创建下载的链接
- downloadElement.href = href;
- downloadElement.download = fileName; //下载后文件名
- document.body.appendChild(downloadElement);
- downloadElement.click(); //点击下载
- document.body.removeChild(downloadElement); //下载完成移除元素
- window.URL.revokeObjectURL(href);
- },
- emailReg: /^([a-zA-Z0-9_\.-]+)@([\da-zA-Z\.-]+)\.([a-z\.]{2,6})$/,
- // pswReg: /^(?![0-9]+$)(?![a-zA-Z]+$)/,
- pswReg: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\W_]{6,16}$/,//与后台保持一致
- phoneReg: new RegExp(/^((13|14|15|16|17|18|19)\d{9})$/),
- url: /[a-zA-z]+:\/\/[^\s]*/,
- getDateStr(string, str) {
- var str_before = string.split(str)[0];
- var str_after = string.split(str)[1];
- },
- exportCondition(time) {
- const rangeDay = this.getTimeRangeDay(time);
- if (!time || time.length == 0) {
- return '请先选择导出时间';
- }
- if (rangeDay > 30) {
- return '目前只能导出30天内数据,请重新筛选时间';
- }
- return true;
- },
- /**
- *
- * @param {arr} 被操作的数组
- * @param {val} 需要剔除或者判断的值
- * @param {type} 是剔除(1)还是判断(2)是否存在,不存在返回[]
- * @param {des} 1数組元素是对象
- *
- */
- filterArr(arr, val, type, des) { //数组剔除指定元素
- if (type == 1) {
- if (des) {
- return arr.filter(item => item.id != val) //判断id
- } else {
- return arr.filter(item => item != val) //判断值
- }
- } else {
- let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val)) //判读是否存在
- if (JSON.stringify(tmp) == '[]') {
- return false;
- } else {
- return true;
- }
- }
- },
- /**
- *
- * @param {dataArr} 右侧选中的数据二维数组
- * @param {tmpArrAdd} 既往史自动生成的组合标签的id存储
- * @param {type} 填写单类型
- */
- dataRecombination(dataArr, type, tmpArrAdd) {
- // console.log(11111,tmpArrAdd,dataArr)
- let tmpArr = [];
- for (let i = 0; i < dataArr.length; i++) {
- let tmpData = dataArr[i];
- let mapping = {
- "sonQuestion": "",
- "position": 0, //默认值,传0
- "formPosition": 1, // 填写单显示位置(0:左, 1:上)
- "exclusionType": 1, //互斥:1
- "text": "", //如果有文本内容,上面的值都置空
- "symptomType": 0, //0:默认值 1:主症状特有 2:伴随症状特有
- }
- let sonQuestionMap = { //目前只在既往史中用到,同层数据置空
- "id": "",
- "questionMappings": []
- }
- if (type == 6 && tmpData.length > 0) {//既往史
- let sonMappingArr = [];
- for (let j = 0; j < tmpData.length; j++) { //多个标签
- let sonMappingObj = {};
- if (i == 0) {
- mapping.formPosition = 1;
- mapping.exclusionType = 1;
- mapping.sonQuestion = tmpData[j];
- } else if (i == 1) {
- mapping.formPosition = 0;
- mapping.exclusionType = 0;
- mapping.sonQuestion = tmpData[j];
- } else {
- mapping.formPosition = 0;
- mapping.exclusionType = 0;
- mapping.sonQuestion = tmpArrAdd[i][0] || ''; //既往史新增标签的id
- sonMappingObj.sonQuestion = tmpData[j]; //{sonQuestion:18}
- sonQuestionMap.id = tmpArrAdd[i][0] || ''; //{sonQuestion:18}
- sonQuestionMap.questionMappings = sonMappingArr; //{id:"",[{sonQuestion:18},{sonQuestion:18}]}
- mapping.questionMappingSon = sonQuestionMap;
- }
- sonMappingArr.push(sonMappingObj); //[{sonQuestion:18},{sonQuestion:19}]
- }
- tmpArr.push(mapping)
- } else if (type == 2 && tmpData.length > 0) {//杂音
- if (i == 0) {
- mapping.formPosition = 1;
- mapping.exclusionType = 1;
- } else {
- mapping.formPosition = 0;
- mapping.exclusionType = 0;
- }
- mapping.sonQuestion = tmpData[0]; //{sonQuestion:18}
- tmpArr.push(mapping)
- } else if (type == 4 || type == 3 || type == 7) { //横铺展开(如咳嗽)
- mapping.formPosition = 0;
- mapping.exclusionType = 0;
- mapping.symptomType = dataArr[i].symptomType
- if (dataArr[i].type) {
- if (dataArr[i].type === 'input') {
- if (dataArr[i].text) { //过滤掉输入框未输入内容项
- mapping.text = dataArr[i].text
- tmpArr.push(mapping)
- }
- } else {
- mapping.sonQuestion = dataArr[i].id
- tmpArr.push(mapping)
- }
- }
- } else if (type == 11) { //推送症状类型(添加症状)
- mapping.formPosition = 0;
- mapping.exclusionType = 0;
- mapping.sonQuestion = dataArr[i].id
- tmpArr.push(mapping)
- }
- }
- return tmpArr;
- },
- /**
- * 单选数据转换提交
- * **/
- simpleOptionData(data) {
- let arr = [];
- data.map((it, i) => {
- let code = '';
- let abnormal = 0
- if (it.isError) {
- abnormal = 1;
- }
- if (it.isNone) {
- code = '2';
- }
- if (it.isBan) {
- code = '1';
- }
- if (it.name) {
- arr.push({ name: it.name, defaultSelect: it.defaultSelect ? '1' : '0', code, abnormal, remark: '单选项-' + it.name });
- }
- });
- return arr;
- },
- /**
- *将提交的参数转换成对应的组件form中的key
- *
- */
- transformKeys(data, tagFlag) { //tagFlag:独立标签还是标签组 (2是标签组)
- const maps = {
- "controlType": 'region2', //控件类型(0:默认值 1:下拉单选 2:下拉多选 6:文本框 7:数字键盘文本框 99:联合推送)
- // "tagType": 'region2',(这个注释掉,不要解开了!!!!)
- "id": "id", //新增id置空
- "type": 'region1', //标签归属
- "tagName": 'region3', //系统名称
- "name": 'region4', //界面名称
- "joint": 'region5', //标签间的连接符
- "subType": 'region6', //0:可以,1:不可以(当项目检索)
- "sexType": 'region7', //1:男,2:女,3:通用
- "ageBegin": 'region8', //最小年龄
- "ageEnd": 'region9', //最大年龄
- "copyType": 'region10', //是否复制主标签
- "showAdd": 'region11', //是否复制当前模块
- "itemType": 'region12',
- "disType": 'region13',
- "labelPrefix": 'prefix', //前缀
- "labelSuffix": 'suffix', //后缀
- "maxValue": 'maxNormalVal', //前缀
- "minValue": 'minNormalVal', //后缀
- "specFlag": 'specFlag', //标记状态(0:没有标记,1:主诉高亮,2:诱因记录)
- "selFlag": 'selFlag',
- };
- if (tagFlag == 2) {
- maps["tagType"] = 'region2'
- }
- let obj = {};
- for (let it in maps) {
- obj[maps[it]] = typeof data[it] == 'number' ? data[it] + '' : data[it];
- }
- return obj;
- },
- /**
- * 模板数据提交转化函数
- */
- orderTemplateData(data) {
- let tmpArr = [];
- for (let i = 0; i < data.length; i++) {
- let obj = {
- "flag": '',
- "questionId": '',
- "relationModule": '',
- "text": ""
- };
- if (data[i].type == 'sub') { //这是子模板
- obj.relationModule = parseInt(data[i].id)
- } else if (data[i].type == 'input') { //这个是输入框文字
- if (data[i].text) { //去掉空输入框
- obj.text = data[i].text
- }
- } else { //这个是标签
- obj.questionId = data[i].id
- }
- obj.flag = data[i].flag || ''
- tmpArr.push(obj)
- }
- return tmpArr;
- },
- /*返回n个row的数组
- *n:Number
- * row:Object
- * orderName:编号字段名称,默认orderNo
- */
- getInitRow(row, n, orderName) {
- let arr = [];
- let obj = {};
- for (let i = 0; i < n; i++) {
- obj = Object.assign({}, row);
- obj[orderName || 'orderNo'] = i;
- arr.push(obj);
- }
- return arr;
- },
- /**
- * 预问诊-字段转换
- *
- * **/
- transPretreatKeys(org, isDpt) {
- let maps = {
- name: 'region4',
- description: 'region5',
- itemType: 'region12',
- sexType: 'region7',
- ageBegin: 'region8',
- ageEnd: 'region9',
- tagName: 'region3',
- //tagType:isDpt?'':'region2',
- //controlType:isDpt?'region2':'',
- type: 'region1',
- url: 'region13',
- specFlag: 'specFlag',
- required: 'required',
- explains: 'explains',
- flag: 'flag'
- };
- isDpt ? maps.controlType = 'region2' : maps.tagType = 'region2';
- let obj = {};
- for (let i in org) {
- if (maps[i]) {
- obj[maps[i]] = org[i] + '' === 'null' ? '' : org[i] + '';
- }
- }
- return obj;
- },
- //获取图片名称
- getImgName(url) {
- const arr = url.split("/");
- return arr[arr.length - 1];
- },
- dragBox(dragWrap, dragTop, type, addDom, img) {
- let drag = $("#" + dragTop); //拖拽区域
- let wrap = $("#" + dragWrap); //被拖拽的元素
- width = getWindowInnerWidth();
- height = getWindowInnerHeight();
- addPart = addDom || null;
- dragWrapper = dragWrap;
- if (type === 'del') {
- $(document).off('mousemove', handleMove)
- $(document).off('mouseup', handleUp)
- } else {
- drag.on('mousedown', function (event) {
- let lenHeight = wrap.height()
- if (img) {
- $("#preImg").css("height", (lenHeight) + 'px')
- $("#dragModalWrap").css("height", (lenHeight) + 'px')
- }
- let page = getPageCoordinate(event, '0');
- mouseX = page.boxLeft - wrap.offset().left; //鼠标到拖拽元素的左边界的距离
- mouseY = page.boxTop - wrap.offset().top; //鼠标到拖拽元素的上边界的距离
- isDrag = true
- })
- $(document).on('mousemove', handleMove)
- $(document).on('mouseup', handleUp)
- }
- },
- getCurrentPage(currentChange, total, pageSize) {
- const currentPage = currentChange > Math.ceil(total / pageSize) ? Math.ceil(total / pageSize) : currentChange
- return currentPage;
- },
- formatObj(data, key) {
- let obj = {};
- data.map((it) => {
- obj[it[key]] = it.subMenuList;
- });
- return obj;
- },
- delNullObj(arr) {
- return arr.filter((it) => it !== null);
- },
- importExcel(){
-
- }
- }
|