HeadDynamic.vue 4.5 KB

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