utils.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import config from '@config/index.js';
  2. import {getLabelIndex} from './tools';
  3. /**
  4. * 各类标签统一的处理函数
  5. *
  6. * */
  7. //数字键盘选中事件
  8. export function setNumberValue(state,action){
  9. let res = Object.assign({},state);
  10. const param = action.params;
  11. const ikey = param.ikey;
  12. let labelInx = getLabelIndex(ikey);
  13. const subInx = ikey.split("-")[2];
  14. let item = res.data[labelInx];
  15. if(+item.tagType===1){ //独立数字键盘组件
  16. item.value = param.text;
  17. res.saveText[labelInx] = param.text?item.labelPrefix+param.text+item.labelSuffix:'';
  18. }else{ //内嵌血压类型组件的数字键盘组件
  19. item.questionMapping[subInx].value = param.text;
  20. let hasValue = false;
  21. const sub = item.questionMapping.map((it)=>{
  22. if(it.value){ //至少有一个子值才黑显
  23. hasValue = true;
  24. }
  25. if(it.tagType===8){ //维护时的连接词无value
  26. return it.name;
  27. }else{
  28. //组合中未填值的子标签预览中不显示
  29. if(!it.value){
  30. return '';
  31. }
  32. return (it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||'');
  33. }
  34. });
  35. res.saveText[labelInx] = hasValue?sub.join(''):'';
  36. }
  37. res.update = Math.random();
  38. return res;
  39. }
  40. //单选下拉选中
  41. export function setRadioValue(state,action){
  42. let res = Object.assign({},state);
  43. const {ikey,id,text} = action;
  44. let labelInx = getLabelIndex(ikey);
  45. const subInx = ikey.split("-")[2];
  46. let item = res.data[labelInx];
  47. if(+item.tagType===1){
  48. item.value = text;
  49. res.saveText[labelInx] = item.labelPrefix+text+item.labelSuffix;
  50. item.questionDetailList.map((its)=>{
  51. if(its.id === id){
  52. its.selected = true;
  53. }else{
  54. its.selected = false;
  55. }
  56. });
  57. }else{
  58. item.questionMapping[subInx].value = text;
  59. let hasValue = false;
  60. const sub = item.questionMapping.map((it)=>{
  61. //添加选中状态
  62. it.questionDetailList.map((its)=>{
  63. if(its.id === id){
  64. its.selected = true;
  65. }else{
  66. its.selected = false;
  67. }
  68. });
  69. if(it.value){ //至少有一个子值才黑显
  70. hasValue = true;
  71. }
  72. if(it.tagType===8){ //维护时的连接词无value
  73. return it.name;
  74. }else{
  75. //组合中未填值的子标签预览中不显示
  76. if(!it.value){
  77. return '';
  78. }
  79. return (it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||'');
  80. }
  81. });
  82. res.saveText[labelInx] = hasValue?sub.join(''):'';
  83. item.value = sub.join('');
  84. }
  85. res.update = Math.random();
  86. return res;
  87. }
  88. //单选带输入值保存,该类型不可加入血压类型中
  89. export const setRadioInputValue = (state,action)=>{
  90. const res = Object.assign({},state);
  91. const {ikey,values,id} = action.data;
  92. let index = getLabelIndex(ikey);
  93. let item = res.data[index];
  94. let str='',temp='',obj=item.questionDetailList;
  95. if(!values){ //清空
  96. let sld=obj.find((item)=>{
  97. return item.selected==true;
  98. });
  99. sld?sld.selected=false:'';
  100. item.vals = null;
  101. item.value = '';
  102. res.saveText[index] = '';
  103. res.update = Math.random();
  104. return res;
  105. }
  106. //存值
  107. for(let i in values){
  108. temp = values[i];
  109. if(typeof temp=='object'){
  110. str+=temp.value;
  111. }else{
  112. str+=temp;
  113. }
  114. }
  115. //选中状态
  116. if(id){
  117. obj.map((its)=>{
  118. if(its.id === id){
  119. its.selected = true;
  120. }else{
  121. its.selected = false;
  122. }
  123. });
  124. }
  125. item.vals = values;
  126. item.value = str;
  127. res.saveText[index] = str;
  128. res.update = Math.random();
  129. return res;
  130. }