HeadDynamic.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <div :class="classes">
  3. <!-- write -->
  4. <div
  5. class="head-dynamic-part head-dynamic-write"
  6. v-if="data.examNumberStyle !== 'fill' && data.writeSign"
  7. >
  8. <div class="stdinfo-item">
  9. <span>手写签名</span>
  10. <span>:</span>
  11. <span></span>
  12. </div>
  13. <p>
  14. 注意:签名则表示您认可答题卡提供的信息与您本人信息相符;如签名与信息不符或者未签名,试卷作废。
  15. </p>
  16. </div>
  17. <!-- miss-fill -->
  18. <div class="head-dynamic-part head-dynamic-missfill">
  19. <div class="head-dynamic-miss" v-if="data.missAndFill">
  20. <div class="head-dynamic-content">
  21. <span class="dynamic-miss-title">缺考标记</span>
  22. <span class="dynamic-miss-body"
  23. ><i class="head-dynamic-rect" id="dynamic-miss-area"></i
  24. ></span>
  25. </div>
  26. </div>
  27. <div class="head-dynamic-fill">
  28. <div class="head-dynamic-content">
  29. <p><span>正确填涂:</span><i></i></p>
  30. <p>
  31. <span>错误填涂:</span>
  32. <i></i>
  33. <i></i>
  34. <i></i>
  35. <i></i>
  36. </p>
  37. </div>
  38. </div>
  39. </div>
  40. <!-- aorb -->
  41. <div
  42. :class="[
  43. 'head-dynamic-part',
  44. 'head-dynamic-aorb',
  45. `head-dynamic-aorb-${data.aOrBType}`
  46. ]"
  47. id="head-dynamic-aorb"
  48. v-if="data.aOrB"
  49. >
  50. <div class="dynamic-aorb-item dynamic-aorb-title">
  51. <p class="dynamic-aorb-content">试卷类型:</p>
  52. </div>
  53. <div
  54. class="dynamic-aorb-item dynamic-aorb-rects"
  55. v-if="data.aOrBType === 'fill'"
  56. >
  57. <div class="dynamic-aorb-content">
  58. <span class="head-dynamic-rect"><i>A</i></span>
  59. <span class="head-dynamic-rect"><i>B</i></span>
  60. </div>
  61. </div>
  62. <div
  63. class="dynamic-aorb-item dynamic-aorb-info"
  64. v-if="data.aOrBType === 'auto'"
  65. >
  66. <div class="dynamic-aorb-content">
  67. <i>{{ aorbBarcodeName }}</i>
  68. </div>
  69. </div>
  70. <div
  71. class="dynamic-aorb-item dynamic-aorb-barcode"
  72. id="dynamic-aorb-barcode"
  73. v-if="data.aOrBType === 'auto'"
  74. >
  75. <div class="dynamic-aorb-content">
  76. <img :src="aorbBarcodeSrc" v-if="aorbBarcodeSrc" />
  77. <img src="../../../assets/images/barcode-sample-notext.png" v-else />
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </template>
  83. <script>
  84. import { calcSum } from "../../../plugins/utils";
  85. export default {
  86. name: "head-dynamic",
  87. props: {
  88. data: {
  89. type: Object
  90. }
  91. },
  92. data() {
  93. return {
  94. aorbBarcodeSrc:
  95. this.data["fieldInfos"] && this.data["fieldInfos"]["paperType"],
  96. aorbBarcodeName:
  97. (this.data["fieldInfos"] && this.data["fieldInfos"]["paperTypeName"]) ||
  98. "A"
  99. };
  100. },
  101. computed: {
  102. classes() {
  103. let partNum = 1;
  104. if (this.data.examNumberStyle !== "fill" && this.data.writeSign)
  105. partNum++;
  106. if (this.data.aOrB) partNum++;
  107. return ["head-dynamic", "card-head-body-spin", `head-dynamic-${partNum}`];
  108. }
  109. },
  110. mounted() {
  111. this.initStyles();
  112. },
  113. methods: {
  114. initStyles() {
  115. if (this.data.examNumberStyle === "fill" || this.data.columnNumber !== 2)
  116. return;
  117. const parentHeight = this.$el.parentNode.offsetHeight;
  118. this.$el.style.height = parentHeight + "px";
  119. const childrenCount = this.$el.children.length;
  120. if (childrenCount > 1) {
  121. let heights = [];
  122. for (let i = 0; i < childrenCount; i++) {
  123. heights[i] = this.$el.children[i].offsetHeight;
  124. }
  125. const lastChildHeight = parentHeight - calcSum(heights.slice(0, -1));
  126. this.$el.children[childrenCount - 1].style.height =
  127. lastChildHeight + "px";
  128. }
  129. }
  130. }
  131. };
  132. </script>