TreeNodeDialog.vue 3.6 KB

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