wk-field-tag.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <view class="wk-field wk-field-tag">
  3. <view v-if="_label" class="wk-field__label">
  4. <view v-if="field.isNull === 1" class="line" />
  5. {{ _label }}
  6. </view>
  7. <view class="wk-field__body" @click.stop="handleToChoose">
  8. <view class="wk-field__body-core">
  9. <template v-if="formValue.length > 0">
  10. <view
  11. v-for="(item, index) in formValue"
  12. :key="index"
  13. :style="{ backgroundColor: item.color }"
  14. class="tag-item">
  15. {{ item.name }}
  16. </view>
  17. </template>
  18. </view>
  19. <text class="wk wk-arrow-right icon-right" />
  20. </view>
  21. </view>
  22. </template>
  23. <script>
  24. import mixins from './mixins'
  25. export default {
  26. name: 'WkFieldTag',
  27. mixins: [mixins],
  28. data() {
  29. return {
  30. guid: null,
  31. valueStr: '',
  32. formValue: []
  33. }
  34. },
  35. watch: {
  36. value: {
  37. handler() {
  38. if (this.value && this.value === 'string') {
  39. let val = []
  40. try {
  41. val = JSON.parse(this.value)
  42. } catch (e) {
  43. val = []
  44. }
  45. this.formValue = []
  46. } else {
  47. this.formValue = this.value || []
  48. }
  49. },
  50. deep: true,
  51. immediate: true
  52. }
  53. },
  54. created() {
  55. this.guid = this.$guid()
  56. },
  57. methods: {
  58. handleToChoose() {
  59. if (this.field.disabled) {
  60. if (this.config && this.config.disabledMsg) {
  61. this.$toast(this.config.disabledMsg)
  62. }
  63. return
  64. }
  65. const bridge = getApp().globalData.selectedValBridge
  66. bridge.tag = {
  67. guid: this.guid,
  68. maxlength: 1 / 0,
  69. title: '选择' + this.field.name,
  70. defaultVal: this.formValue || [],
  71. list: this.field.setting || []
  72. }
  73. uni.$on('selected-tag', this.selectedTag)
  74. this.$Router.navigateTo('/pages_common/selectList/tag')
  75. },
  76. selectedTag(data) {
  77. if (this.guid === data.guid) {
  78. this.formValue = data.data
  79. this.emitChangeEvt(this.formValue)
  80. }
  81. uni.$off('selected-tag')
  82. }
  83. }
  84. }
  85. </script>
  86. <style scoped lang="scss">
  87. @import './wkField.scss';
  88. .wk-field {
  89. .wk-field__body {
  90. .wk-field__body-core {
  91. padding-right: 32rpx;
  92. display: flex;
  93. align-items: center;
  94. justify-content: flex-start;
  95. flex-wrap: wrap;
  96. .tag-item {
  97. font-size: $wk-font-sm;
  98. color: white;
  99. border-radius: 6rpx;
  100. padding: 5rpx 15rpx;
  101. margin: 5rpx;
  102. }
  103. }
  104. }
  105. }
  106. </style>