HeadDynamic.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. <!-- file -->
  18. <div class="head-dynamic-part head-dynamic-fill">
  19. <div class="head-dynamic-content">
  20. <p><span>正确填涂:</span><i></i></p>
  21. <p>
  22. <span>错误填涂:</span>
  23. <i>√</i>
  24. <i>×</i>
  25. <i></i>
  26. <i></i>
  27. </p>
  28. </div>
  29. </div>
  30. <!-- miss discipline -->
  31. <div
  32. v-if="data.examAbsent || data.discipline"
  33. class="head-dynamic-part head-dynamic-missfill"
  34. >
  35. <div class="head-dynamic-miss" v-if="data.examAbsent">
  36. <div class="head-dynamic-content">
  37. <span class="dynamic-miss-title">缺考标记</span>
  38. <span class="dynamic-miss-body"
  39. ><i class="head-dynamic-rect" id="dynamic-miss-area"></i
  40. ></span>
  41. </div>
  42. </div>
  43. <div class="head-dynamic-miss" v-if="data.discipline">
  44. <div class="head-dynamic-content">
  45. <span class="dynamic-miss-title">违纪标记</span>
  46. <span class="dynamic-miss-body"
  47. ><i class="head-dynamic-rect" id="dynamic-miss-area"></i
  48. ></span>
  49. </div>
  50. </div>
  51. </div>
  52. <!-- aorb -->
  53. <div
  54. :class="[
  55. 'head-dynamic-part',
  56. 'head-dynamic-aorb',
  57. `head-dynamic-aorb-${data.paperType.toLowerCase()}`
  58. ]"
  59. id="head-dynamic-aorb"
  60. v-if="data.aOrB"
  61. >
  62. <div class="dynamic-aorb-item dynamic-aorb-title">
  63. <p class="dynamic-aorb-content">试卷类型:</p>
  64. </div>
  65. <div
  66. class="dynamic-aorb-item dynamic-aorb-rects"
  67. v-if="data.paperType === 'FILL'"
  68. >
  69. <div class="dynamic-aorb-content">
  70. <span class="head-dynamic-rect"><i>A</i></span>
  71. <span class="head-dynamic-rect"><i>B</i></span>
  72. </div>
  73. </div>
  74. <!-- <div
  75. class="dynamic-aorb-item dynamic-aorb-info"
  76. v-if="data.paperType === 'PRINT'"
  77. >
  78. <div class="dynamic-aorb-content">
  79. <i>{{ aorbBarcodeName }}</i>
  80. </div>
  81. </div> -->
  82. <div
  83. class="dynamic-aorb-item dynamic-aorb-barcode"
  84. id="dynamic-aorb-barcode"
  85. v-if="data.paperType === 'PRINT'"
  86. >
  87. <div class="dynamic-aorb-content">
  88. <img :src="aorbBarcodeSrc" v-if="aorbBarcodeSrc" />
  89. <img src="../../../assets/images/barcode-sample-notext.png" v-else />
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. </template>
  95. <script>
  96. import { calcSum } from "../../../plugins/utils";
  97. export default {
  98. name: "head-dynamic",
  99. props: {
  100. data: {
  101. type: Object
  102. }
  103. },
  104. data() {
  105. return {
  106. aorbBarcodeSrc:
  107. this.data["fieldInfos"] && this.data["fieldInfos"]["paperType"],
  108. aorbBarcodeName:
  109. (this.data["fieldInfos"] && this.data["fieldInfos"]["paperTypeName"]) ||
  110. "A"
  111. };
  112. },
  113. computed: {
  114. classes() {
  115. let partNum = 1;
  116. if (this.data.examNumberStyle !== "FILL" && this.data.writeSign)
  117. partNum++;
  118. if (this.data.aOrB) partNum++;
  119. if (this.data.examAbsent || this.data.discipline) partNum++;
  120. return ["head-dynamic", "card-head-body-spin", `head-dynamic-${partNum}`];
  121. }
  122. },
  123. mounted() {
  124. this.initStyles();
  125. },
  126. methods: {
  127. initStyles() {
  128. const { examNumberStyle, columnNumber, pageSize } = this.data;
  129. if (
  130. examNumberStyle === "FILL" ||
  131. (pageSize === "A3" && columnNumber !== 2) ||
  132. (pageSize === "A4" && columnNumber !== 1)
  133. )
  134. return;
  135. const parentHeight = this.$el.parentNode.offsetHeight;
  136. this.$el.style.height = parentHeight + "px";
  137. const childrenCount = this.$el.children.length;
  138. if (childrenCount > 1) {
  139. let heights = [];
  140. for (let i = 0; i < childrenCount; i++) {
  141. heights[i] = this.$el.children[i].offsetHeight;
  142. }
  143. const lastChildHeight = parentHeight - calcSum(heights.slice(0, -1));
  144. this.$el.children[childrenCount - 1].style.height =
  145. lastChildHeight + "px";
  146. }
  147. }
  148. }
  149. };
  150. </script>