utils.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. export default {
  2. //判断字符串是否能转成json
  3. isJsonStr(str) {
  4. if (typeof str === 'string') {
  5. try {
  6. const myStr = str.replace(/^\s*/, '');
  7. const obj = JSON.parse(str);
  8. if (myStr[0] === '{') {
  9. return true;
  10. } else {
  11. return false;
  12. }
  13. } catch (e) {
  14. return false;
  15. }
  16. }
  17. },
  18. //获取两个时间间隔天数
  19. getTimeRangeDay(timeArr) {
  20. if(!timeArr||timeArr.length==0){
  21. return null;
  22. }
  23. return (new Date(timeArr[1]) - new Date(timeArr[0])) / (1000 * 60 * 60 * 24);
  24. },
  25. //导出接口返回流下载
  26. downloadExportedData(data, fileName) {
  27. var blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}); //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型
  28. var downloadElement = document.createElement('a');
  29. var href = window.URL.createObjectURL(blob); //创建下载的链接
  30. downloadElement.href = href;
  31. downloadElement.download = fileName; //下载后文件名
  32. document.body.appendChild(downloadElement);
  33. downloadElement.click(); //点击下载
  34. document.body.removeChild(downloadElement); //下载完成移除元素
  35. window.URL.revokeObjectURL(href);
  36. },
  37. emailReg: /^([a-zA-Z0-9_\.-]+)@([\da-zA-Z\.-]+)\.([a-z\.]{2,6})$/,
  38. // pswReg: /^(?![0-9]+$)(?![a-zA-Z]+$)/,
  39. pswReg: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\W_]{6,16}$/,//与后台保持一致
  40. phoneReg: new RegExp(/^((13|14|15|16|17|18|19)\d{9})$/),
  41. url:/[a-zA-z]+:\/\/[^\s]*/,
  42. getDateStr(string,str){
  43. var str_before = string.split(str)[0];
  44. var str_after = string.split(str)[1];
  45. },
  46. exportCondition(time){
  47. const rangeDay = this.getTimeRangeDay(time);
  48. if (!time||time.length==0) {
  49. return '请先选择导出时间';
  50. }
  51. if (rangeDay > 30) {
  52. return '目前只能导出30天内数据,请重新筛选时间';
  53. }
  54. return true;
  55. },
  56. /**
  57. *
  58. * @param {arr} 被操作的数组
  59. * @param {val} 需要剔除或者判断的值
  60. * @param {type} 是剔除(1)还是判断(2)是否存在,不存在返回[]
  61. * @param {des} 1数組元素是对象
  62. *
  63. */
  64. filterArr(arr,val,type,des){ //数组剔除指定元素
  65. if(type == 1){
  66. if(des){
  67. return arr.filter(item => item.id != val) //判断id
  68. }else{
  69. return arr.filter(item => item != val) //判断值
  70. }
  71. }else{
  72. let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val)) //判读是否存在
  73. if(JSON.stringify(tmp) == '[]'){
  74. return false;
  75. }else{
  76. return true;
  77. }
  78. }
  79. },
  80. /**
  81. *
  82. * @param {dataArr} 右侧选中的数据二维数组
  83. * @param {type} 填写单类型
  84. */
  85. dataRecombination(dataArr,type){
  86. // console.log(dataArr,type)
  87. let tmpArr = [];
  88. for(let i = 0;i < dataArr.length;i++){
  89. let tmpData = dataArr[i];
  90. let mapping = {
  91. "sonQuestion": "",
  92. "position": 0, //默认值,传0
  93. "formPosition": 1, // 填写单显示位置(0:左, 1:上)
  94. "exclusionType": 1, //互斥:1
  95. "text": "", //如果有文本内容,上面的值都置空
  96. "symptomType": 0, //0:默认值 1:主症状特有 2:伴随症状特有
  97. }
  98. let sonQuestionMap = { //目前只在既往史中用到,同层数据置空
  99. "id": "",
  100. "questionMappings": []
  101. }
  102. if(type == 6 && tmpData.length > 0){//既往史
  103. let sonMappingArr=[];
  104. for(let j = 0; j < tmpData.length;j++){ //多个标签
  105. let sonMappingObj = {};
  106. if(i == 0){
  107. mapping.formPosition = 1;
  108. mapping.exclusionType = 1;
  109. mapping.sonQuestion = tmpData[j];
  110. }else if(i == 1){
  111. mapping.formPosition = 0;
  112. mapping.exclusionType = 0;
  113. mapping.sonQuestion = tmpData[j];
  114. }else{
  115. mapping.formPosition = 0;
  116. mapping.exclusionType = 0;
  117. sonMappingObj.sonQuestion = tmpData[j]; //{sonQuestion:18}
  118. sonQuestionMap.questionMappings = sonMappingArr; //{id:"",[{sonQuestion:18},{sonQuestion:18}]}
  119. mapping.questionMappingSon = sonQuestionMap;
  120. }
  121. sonMappingArr.push(sonMappingObj); //[{sonQuestion:18},{sonQuestion:19}]
  122. }
  123. tmpArr.push(mapping)
  124. }else if(type == 2 && tmpData.length > 0){//杂音
  125. if(i == 0){
  126. mapping.formPosition = 1;
  127. mapping.exclusionType = 1;
  128. }else{
  129. mapping.formPosition = 0;
  130. mapping.exclusionType = 0;
  131. }
  132. mapping.sonQuestion = tmpData[0]; //{sonQuestion:18}
  133. tmpArr.push(mapping)
  134. }else if (type == 4 || type == 3 || type == 7) { //横铺展开(如咳嗽)
  135. mapping.formPosition = 0;
  136. mapping.exclusionType = 0;
  137. mapping.symptomType = dataArr[i].symptomType
  138. if(dataArr[i].type === 'input') {
  139. if(dataArr[i].text) { //过滤掉输入框未输入内容项
  140. mapping.text = dataArr[i].text
  141. tmpArr.push(mapping)
  142. }
  143. } else {
  144. mapping.sonQuestion = dataArr[i].id
  145. tmpArr.push(mapping)
  146. }
  147. } else if(type == 11) { //推送症状类型(添加症状)
  148. mapping.formPosition = 0;
  149. mapping.exclusionType = 0;
  150. mapping.sonQuestion = dataArr[i].id
  151. tmpArr.push(mapping)
  152. }
  153. }
  154. return tmpArr;
  155. },
  156. /**
  157. * 单选数据转换提交
  158. * **/
  159. simpleOptionData(data){
  160. let arr = [];
  161. data.map((it,i)=>{
  162. let code = '';
  163. let abnormal = 0
  164. if(it.isError){
  165. abnormal = 1;
  166. }
  167. if(it.isNone){
  168. code = '2';
  169. }
  170. if(it.isBan){
  171. code = '1';
  172. }
  173. if(it.name){
  174. arr.push({name:it.name,defaultSelect:it.defaultSelect?'1':'0',code,abnormal,remark:'单选项-'+it.name});
  175. }
  176. });
  177. return arr;
  178. },
  179. /**
  180. *将提交的参数转换成对应的组件form中的key
  181. *
  182. */
  183. transformKeys(data, tagFlag){ //tagFlag:独立标签还是标签组 (2是标签组)
  184. const maps = {
  185. "controlType": 'region2', //控件类型(0:默认值 1:下拉单选 2:下拉多选 6:文本框 7:数字键盘文本框 99:联合推送)
  186. // "tagType": 'region2',(这个注释掉,不要解开了!!!!)
  187. "id": "id", //新增id置空
  188. "type": 'region1', //标签归属
  189. "tagName": 'region3', //系统名称
  190. "name": 'region4', //界面名称
  191. "joint": 'region5', //标签间的连接符
  192. "subType": 'region6', //0:可以,1:不可以(当项目检索)
  193. "sexType": 'region7', //1:男,2:女,3:通用
  194. "ageBegin": 'region8', //最小年龄
  195. "ageEnd": 'region9', //最大年龄
  196. "copyType":'region10', //是否复制主标签
  197. "showAdd":'region11', //是否复制当前模块
  198. "itemType": 'region12',
  199. "disType": 'region13',
  200. "labelPrefix":'prefix', //前缀
  201. "labelSuffix":'suffix', //后缀
  202. "maxValue":'maxNormalVal', //前缀
  203. "minValue":'minNormalVal' //后缀
  204. };
  205. if (tagFlag == 2) {
  206. maps["tagType"] = 'region2'
  207. }
  208. let obj = {};
  209. for(let it in maps){
  210. obj[maps[it]] = typeof data[it]=='number'?data[it]+'':data[it];
  211. }
  212. return obj;
  213. },
  214. /**
  215. * 模板数据提交转化函数
  216. */
  217. orderTemplateData(data){
  218. let tmpArr = [];
  219. for(let i =0;i<data.length;i++){
  220. let obj={
  221. "flag": '',
  222. "questionId": '',
  223. "relationModule": '',
  224. "text": ""
  225. };
  226. if(data[i].type == 'sub'){ //这是子模板
  227. obj.relationModule = parseInt(data[i].id)
  228. }else if(data[i].type == 'input'){ //这个是输入框文字
  229. if(data[i].text){ //去掉空输入框
  230. obj.text = data[i].text
  231. }
  232. }else{ //这个是标签
  233. obj.questionId = data[i].id
  234. }
  235. obj.flag = data[i].flag || ''
  236. tmpArr.push(obj)
  237. }
  238. return tmpArr;
  239. },
  240. /*返回n个row的数组
  241. *n:Number
  242. * row:Object
  243. * orderName:编号字段名称,默认orderNo
  244. */
  245. getInitRow(row,n,orderName){
  246. let arr = [];
  247. let obj = {};
  248. for(let i=0;i<n;i++){
  249. obj = Object.assign({},row);
  250. obj[orderName||'orderNo'] = i;
  251. arr.push(obj);
  252. }
  253. return arr;
  254. },
  255. /**
  256. * 预问诊-字段转换
  257. *
  258. * **/
  259. transPretreatKeys(org,isDpt){
  260. let maps = {
  261. name:'region4',
  262. description:'region5',
  263. itemType:'region12',
  264. sexType:'region7',
  265. ageBegin:'region8',
  266. ageEnd:'region9',
  267. tagName:'region3',
  268. //tagType:isDpt?'':'region2',
  269. //controlType:isDpt?'region2':'',
  270. type:'region1',
  271. url:'region13',
  272. };
  273. isDpt?maps.controlType = 'region2':maps.tagType = 'region2';
  274. let obj = {};
  275. for(let i in org){
  276. if(maps[i]){
  277. obj[maps[i]] = org[i]+'';
  278. }
  279. }
  280. return obj;
  281. },
  282. //获取图片名称
  283. getImgName(url){
  284. const arr = url.split("/");
  285. return arr[arr.length-1];
  286. }
  287. }