AuditInfo.vue 4.0 KB

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