You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.2 KiB

  1. <template>
  2. <base-card
  3. :disabled="!valid"
  4. :title="$t('labels.createLabel')"
  5. :agree-text="$t('generic.create')"
  6. :cancel-text="$t('generic.cancel')"
  7. @agree="$emit('save')"
  8. @cancel="$emit('cancel')"
  9. >
  10. <template #content>
  11. <v-form v-model="valid">
  12. <v-text-field
  13. v-model="item.text"
  14. :label="$t('labels.labelName')"
  15. :rules="[rules.required, rules.counter, rules.nameDuplicated]"
  16. prepend-icon="label"
  17. single-line
  18. counter
  19. autofocus
  20. />
  21. <v-select
  22. v-model="item.suffix_key"
  23. :items="shortkeys"
  24. :label="$t('labels.key')"
  25. :rules="[rules.keyDuplicated]"
  26. prepend-icon="mdi-keyboard"
  27. />
  28. <v-color-picker
  29. v-model="item.background_color"
  30. :rules="[rules.required]"
  31. show-swatches
  32. hide-mode-switch
  33. width="800"
  34. />
  35. </v-form>
  36. </template>
  37. </base-card>
  38. </template>
  39. <script lang="ts">
  40. import Vue from 'vue'
  41. import BaseCard from '@/components/molecules/BaseCard.vue'
  42. export default Vue.extend({
  43. components: {
  44. BaseCard
  45. },
  46. props: {
  47. value: {
  48. type: Object,
  49. default: () => {},
  50. required: true
  51. },
  52. usedNames: {
  53. type: Array,
  54. default: () => [],
  55. required: true
  56. },
  57. usedKeys: {
  58. type: Array,
  59. default: () => [],
  60. required: true
  61. }
  62. },
  63. data() {
  64. return {
  65. valid: false,
  66. rules: {
  67. required: (v: string) => !!v || 'Required',
  68. // @ts-ignore
  69. counter: (v: string) => (v && v.length <= 30) || this.$t('rules.labelNameRules').labelLessThan30Chars,
  70. // @ts-ignore
  71. nameDuplicated: (v: string) => (!this.usedNames.includes(v)) || this.$t('rules.labelNameRules').duplicated,
  72. // @ts-ignore
  73. keyDuplicated: (v: string) => !this.usedKeys.includes(v) || this.$t('rules.keyNameRules').duplicated,
  74. }
  75. }
  76. },
  77. computed: {
  78. shortkeys() {
  79. return '0123456789abcdefghijklmnopqrstuvwxyz'.split('')
  80. },
  81. item: {
  82. get() {
  83. // @ts-ignore
  84. return this.value
  85. },
  86. set(val) {
  87. // @ts-ignore
  88. this.$emit('input', val)
  89. }
  90. }
  91. }
  92. })
  93. </script>