MarkerImageView.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <div class="marker-image-view">
  3. <image-view-contain
  4. ref="ImageViewContain"
  5. :image="image"
  6. @to-review="toReview"
  7. ></image-view-contain>
  8. <div class="image-view-footer">
  9. <slot>
  10. <div v-if="IS_LEVEL" class="image-info">
  11. <div v-if="image.level" class="image-level">
  12. {{ image.level | levelNameFilter }}
  13. </div>
  14. <div v-if="image.sample" class="image-sample">标</div>
  15. <div
  16. v-else
  17. :class="[
  18. 'image-checkbox',
  19. {
  20. 'image-selected': image.selected
  21. }
  22. ]"
  23. @click="toSelect"
  24. >
  25. <Icon v-if="image.selected" type="md-checkmark" />
  26. </div>
  27. </div>
  28. <div v-else class="image-info">
  29. <div v-if="image.level" class="image-level">
  30. {{ image.level }}
  31. </div>
  32. <div v-if="image.score" class="image-level">{{ image.score }}</div>
  33. </div>
  34. <div class="image-title" :title="image.title" @click="toSelect">
  35. {{ image.title }}
  36. </div>
  37. <div class="image-action">
  38. <div
  39. :class="['image-action-li', { 'is-disabled': image.markDisabled }]"
  40. @click="toMark"
  41. >
  42. <Icon :class="{ 'mark-act': image.mark }" type="md-bookmark" />
  43. </div>
  44. <div class="image-action-li" @click="toRotate">
  45. <Icon type="md-refresh-circle" />
  46. </div>
  47. </div>
  48. </slot>
  49. </div>
  50. </div>
  51. </template>
  52. <script>
  53. import ImageViewContain from "@/components/ImageViewContain";
  54. import { markTask, markPaper } from "@/api";
  55. export default {
  56. name: "marker-image-view",
  57. components: { ImageViewContain },
  58. props: {
  59. data: {
  60. type: Object,
  61. default() {
  62. return {};
  63. }
  64. },
  65. stage: {
  66. type: String,
  67. default: "LEVEL"
  68. },
  69. canSelect: {
  70. type: Boolean,
  71. default: true
  72. }
  73. },
  74. computed: {
  75. IS_LEVEL() {
  76. return this.stage === "LEVEL" || this.stage === "ROUGH_LEVEL";
  77. }
  78. },
  79. created() {
  80. this.initData();
  81. },
  82. watch: {
  83. "data.selected": {
  84. handler() {
  85. this.initData();
  86. }
  87. }
  88. },
  89. data() {
  90. return {
  91. curUserRoleType: this.$ls.get("user", { role: "" }).role,
  92. initImage: {
  93. id: "",
  94. thumbSrc: "",
  95. title: "",
  96. level: "",
  97. score: "",
  98. deg: 0,
  99. mark: false,
  100. markDisabled: false,
  101. sample: false,
  102. selected: false
  103. },
  104. loading: false,
  105. image: {}
  106. };
  107. },
  108. methods: {
  109. initData() {
  110. this.image = this.$objAssign(this.initImage, this.data);
  111. if (this.stage === "ROUGH_LEVEL") this.image.level = this.data.roughLevel;
  112. },
  113. toReview() {
  114. this.$emit("to-review", this.image);
  115. },
  116. toRotate() {
  117. const image = this.image;
  118. image.deg += 90;
  119. if (image.deg === 360) image.deg = 0;
  120. this.$refs.ImageViewContain.resizeImage(image.deg);
  121. },
  122. async toMark() {
  123. if (this.image.markDisabled) return;
  124. if (this.loading) return;
  125. this.loading = true;
  126. let res = null;
  127. if (this.curUserRoleType === "MARK_LEADER") {
  128. res = await markPaper({
  129. paperId: this.image.id,
  130. isMark: !this.image.mark,
  131. role: this.curUserRoleType
  132. }).catch(() => {});
  133. } else {
  134. res = await markTask({
  135. markTaskId: this.image.id,
  136. isMark: !this.image.mark
  137. }).catch(() => {});
  138. }
  139. this.loading = false;
  140. if (!res) return;
  141. this.image.mark = !this.image.mark;
  142. },
  143. toSelect() {
  144. if (this.image.sample || !this.IS_LEVEL) return;
  145. this.image.selected = !this.image.selected;
  146. this.$emit("to-select", this.image);
  147. },
  148. changeSelect(selected) {
  149. if (this.image.sample) return;
  150. this.image.selected = selected;
  151. this.$emit("to-select", this.image);
  152. }
  153. }
  154. };
  155. </script>