number.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <div>
  3. <el-form-item label="占位内容">
  4. <el-input v-model="data.placeholder"
  5. clearable
  6. placeholder="占位内容"></el-input>
  7. </el-form-item>
  8. <el-form-item label="最小值">
  9. <el-input-number v-model="data.minRows"
  10. controls-position="right"
  11. placeholder="最小值"></el-input-number>
  12. </el-form-item>
  13. <el-form-item label="最大值">
  14. <el-input-number v-model="data.maxRows"
  15. controls-position="right"
  16. placeholder="最大值"></el-input-number>
  17. </el-form-item>
  18. <el-form-item label="步长">
  19. <el-input-number v-model="data.step"
  20. controls-position="right"
  21. placeholder="步长"></el-input-number>
  22. </el-form-item>
  23. <el-form-item label="数值精度">
  24. <el-input-number v-model="data.precision"
  25. controls-position="right"
  26. placeholder="数值精度"
  27. :min="0"
  28. :max="10"></el-input-number>
  29. </el-form-item>
  30. <el-form-item label="开启控制器"
  31. label-width="100px">
  32. <el-switch v-model="data.controls"></el-switch>
  33. </el-form-item>
  34. <el-form-item label="控制器位置"
  35. label-width="100px"
  36. v-if="data.controls">
  37. <el-radio v-model="data.controlsPosition"
  38. label="">默认
  39. </el-radio>
  40. <el-radio v-model="data.controlsPosition"
  41. label="right">右
  42. </el-radio>
  43. </el-form-item>
  44. <el-form-item label="是否只读">
  45. <el-switch v-model="data.readonly"></el-switch>
  46. </el-form-item>
  47. <el-form-item label="是否可见">
  48. <el-switch v-model="data.display"></el-switch>
  49. </el-form-item>
  50. <el-form-item label="是否必填">
  51. <el-switch v-model="data.required"></el-switch>
  52. <el-input v-if="data.required"
  53. v-model.lazy="data.pattern"
  54. clearable
  55. placeholder="正则表达式"></el-input>
  56. </el-form-item>
  57. </div>
  58. </template>
  59. <script>
  60. export default {
  61. name: "config-number",
  62. props: ['data'],
  63. data() {
  64. return {
  65. validator: {
  66. type: null,
  67. required: null,
  68. pattern: null,
  69. length: null
  70. }
  71. }
  72. },
  73. methods: {
  74. generateRule() {
  75. const rules = [];
  76. Object.keys(this.validator).forEach(key => {
  77. if (this.validator[key]) rules.push(this.validator[key])
  78. })
  79. this.data.rules = rules
  80. },
  81. },
  82. watch: {
  83. 'data.required': function (val) {
  84. if (val) this.validator.required = { required: true, message: `${this.data.label}必须填写` }
  85. else this.validator.required = null
  86. this.generateRule()
  87. },
  88. 'data.pattern': function (val) {
  89. if (val) this.validator.pattern = { pattern: new RegExp(val), message: `${this.data.label}格式不匹配` }
  90. else this.validator.pattern = null
  91. // delete this.data.pattern
  92. this.generateRule()
  93. }
  94. }
  95. }
  96. </script>