TreeNodeDialog.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <div>
  3. <el-dialog
  4. v-bind="$attrs"
  5. :close-on-click-modal="false"
  6. :modal-append-to-body="false"
  7. v-on="$listeners"
  8. @open="onOpen"
  9. @close="onClose"
  10. >
  11. <el-row :gutter="0">
  12. <el-form
  13. ref="elForm"
  14. :model="formData"
  15. :rules="rules"
  16. size="small"
  17. label-width="100px"
  18. >
  19. <el-col :span="24">
  20. <el-form-item
  21. label="选项名"
  22. prop="label"
  23. >
  24. <el-input
  25. v-model="formData.label"
  26. placeholder="请输入选项名"
  27. clearable
  28. />
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="24">
  32. <el-form-item
  33. label="选项值"
  34. prop="value"
  35. >
  36. <el-input
  37. v-model="formData.value"
  38. placeholder="请输入选项值"
  39. clearable
  40. >
  41. <el-select
  42. slot="append"
  43. v-model="dataType"
  44. :style="{width: '100px'}"
  45. >
  46. <el-option
  47. v-for="(item, index) in dataTypeOptions"
  48. :key="index"
  49. :label="item.label"
  50. :value="item.value"
  51. :disabled="item.disabled"
  52. />
  53. </el-select>
  54. </el-input>
  55. </el-form-item>
  56. </el-col>
  57. </el-form>
  58. </el-row>
  59. <div slot="footer">
  60. <el-button
  61. type="primary"
  62. @click="handleConfirm"
  63. >
  64. 确定
  65. </el-button>
  66. <el-button @click="close">
  67. 取消
  68. </el-button>
  69. </div>
  70. </el-dialog>
  71. </div>
  72. </template>
  73. <script>
  74. import { isNumberStr } from '@/utils/index'
  75. export default {
  76. components: {},
  77. inheritAttrs: false,
  78. props: [],
  79. data() {
  80. return {
  81. id: 100,
  82. formData: {
  83. label: undefined,
  84. value: undefined
  85. },
  86. rules: {
  87. label: [
  88. {
  89. required: true,
  90. message: '请输入选项名',
  91. trigger: 'blur'
  92. }
  93. ],
  94. value: [
  95. {
  96. required: true,
  97. message: '请输入选项值',
  98. trigger: 'blur'
  99. }
  100. ]
  101. },
  102. dataType: 'string',
  103. dataTypeOptions: [
  104. {
  105. label: '字符串',
  106. value: 'string'
  107. },
  108. {
  109. label: '数字',
  110. value: 'number'
  111. }
  112. ]
  113. }
  114. },
  115. computed: {},
  116. watch: {
  117. // eslint-disable-next-line func-names
  118. 'formData.value': function (val) {
  119. this.dataType = isNumberStr(val) ? 'number' : 'string'
  120. }
  121. },
  122. created() {},
  123. mounted() {},
  124. methods: {
  125. onOpen() {
  126. this.formData = {
  127. label: undefined,
  128. value: undefined
  129. }
  130. },
  131. onClose() {},
  132. close() {
  133. this.$emit('update:visible', false)
  134. },
  135. handleConfirm() {
  136. this.$refs.elForm.validate(valid => {
  137. if (!valid) return
  138. if (this.dataType === 'number') {
  139. this.formData.value = parseFloat(this.formData.value)
  140. }
  141. this.formData.id = this.id++
  142. this.$emit('commit', this.formData)
  143. this.close()
  144. })
  145. }
  146. }
  147. }
  148. </script>