AuditInfo.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <view class="audit-info">
  3. <view class="font-bold mt-16" style="padding: 0 20rpx">
  4. 该书共{{ detail.num }}本,其中:良好{{ getAuditCateNum(1) }}本,一般{{ getAuditCateNum(2) }}本,极差{{ getAuditCateNum(3) }}本
  5. </view>
  6. <view class="mt-10 bind-code" style="padding: 10rpx 20rpx">
  7. SH码:未绑码
  8. </view>
  9. <view class="mt-20 bg-white flex flex-j-a flex-a-c" style="padding:20rpx;border-radius: 10rpx;">
  10. <view class="u-page__tag-item" v-for="(item, index) in auditList" :key="index">
  11. <u-tag size="large" :text="item.label" :plain="current != item.sts" type="primary" :name="item.sts"
  12. @click="radioClick">
  13. </u-tag>
  14. </view>
  15. </view>
  16. <view class="mt-20 bg-white" style="padding:20rpx;border-radius: 10rpx;" v-if="current == 3">
  17. <view class="flex flex-a-c flex-wrap">
  18. <text class="mr-10 reason-item" v-for="(item, index) in reasonList" :key="index"
  19. @click="toggleReason(item)" :class="{ 'selected': selectedReasons.includes(item.label) }">
  20. <view class="ml-10">{{ item.label }}</view>
  21. </text>
  22. </view>
  23. </view>
  24. </view>
  25. </template>
  26. <script setup>
  27. import { ref } from 'vue';
  28. const props = defineProps({
  29. detail: {
  30. type: Object,
  31. default: () => ({})
  32. }
  33. })
  34. const auditList = ref([{ sts: 1, label: '品相良好' }, { sts: 2, label: '品相一般', disabled: true }, { sts: 3, label: '品相极差' }])
  35. const current = ref(0)
  36. const radioClick = (index) => {
  37. current.value = index
  38. let data = formatReason()
  39. emit('selected', data)
  40. }
  41. const getAuditCateNum = (cate) => {
  42. return props.detail.auditCommentList?.filter(item => item.sts == cate)?.length || 0
  43. }
  44. let reasonList = ref([
  45. { sts: 3, label: '明显泛黄水印/发霉/明显异味' },
  46. { sts: 3, label: '老化泛黄褪色/污渍' },
  47. { sts: 3, label: '明显破损/脱胶缺页/书籍变型' },
  48. { sts: 3, label: '无此书' },
  49. { sts: 3, label: '印刷不清晰' },
  50. { sts: 3, label: '无防伪' },
  51. { sts: 3, label: '无外护封/无ISBN' },
  52. { sts: 3, label: '无此书多其他书' },
  53. { sts: 3, label: '笔记杂乱/习题做完' },
  54. { sts: 3, label: '有笔记贴' },
  55. { sts: 3, label: '套装缺册' },
  56. { sts: 3, label: '听力无光盘' },
  57. { sts: 3, label: '图书馆/藏书印章' }
  58. ])
  59. function formatReason() {
  60. return [
  61. {
  62. "isbn": props.detail.isbn,
  63. "sts": current.value,
  64. "com": selectedReasons.value.join(',')
  65. }
  66. ]
  67. }
  68. const emit = defineEmits(['selected'])
  69. const selectedReasons = ref([]);
  70. const toggleReason = (item) => {
  71. const index = selectedReasons.value.indexOf(item.label);
  72. if (index > -1) {
  73. selectedReasons.value.splice(index, 1);
  74. } else {
  75. selectedReasons.value.push(item.label);
  76. }
  77. let data = formatReason()
  78. emit('selected', data)
  79. };
  80. </script>
  81. <style lang="scss" scoped>
  82. .bind-code {
  83. background-color: #cecece;
  84. border-radius: 4rpx;
  85. }
  86. .reason-item {
  87. background-color: #f0f0f0;
  88. border-radius: 4rpx;
  89. padding: 14rpx 20rpx;
  90. margin-bottom: 16rpx;
  91. }
  92. .selected {
  93. background-color: #d0e8ff;
  94. }
  95. </style>