WidgetFormItem.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <template>
  2. <component :is="getComponent(item.type, item.component)"
  3. v-model="form[item.prop]"
  4. :item="item"
  5. :action="item.action"
  6. :append="item.append"
  7. :accordion="item.accordion"
  8. :typeslot="item.typeslot"
  9. :appendClick="item.appendClick"
  10. :border="item.border"
  11. :change="item.change"
  12. :checked="item.checked"
  13. :clearable="item.clearable"
  14. :changeOnSelect="item.changeOnSelect"
  15. :click="item.click"
  16. :onRemove="item.onRemove"
  17. :showWordLimit="item.showWordLimit"
  18. :colors="item.colors"
  19. :canvasOption="item.canvasOption"
  20. :controls-position="item.controlsPosition"
  21. :dataType="item.dataType"
  22. :defaultExpandAll="item.defaultExpandAll"
  23. :defaultTime="item.defaultTime"
  24. :dic="item.dicData"
  25. :dicUrl="item.dicUrl"
  26. :dicMethod="item.dicMethod"
  27. :dicQuery="item.dicQuery"
  28. :disabled="item.disabled"
  29. :drag="item.drag"
  30. :endPlaceholder="item.endPlaceholder"
  31. :expand-trigger="item.expandTrigger"
  32. :filter="item.filter"
  33. :blur="item.blur"
  34. :focus="item.focus"
  35. :tpyeformat="item.tpyeformat"
  36. :filesize="item.filesize"
  37. :filterable="item.filterable"
  38. :format="item.format"
  39. :formatTooltip="item.formatTooltip"
  40. :iconClasses="item.iconClasses"
  41. :label="item.label"
  42. :limit="item.limit"
  43. :listType="item.listType"
  44. :loadText="item.loadText"
  45. :min="item.min"
  46. :max="item.max"
  47. :minlength="item.minlength"
  48. :maxlength="item.maxlength"
  49. :minRows="item.minRows"
  50. :maxRows="item.maxRows"
  51. :multiple="item.multiple"
  52. :nodeClick="item.nodeClick"
  53. :options="item.options"
  54. :oss="item.oss"
  55. :parent="item.parent"
  56. :pickerOptions="item.pickerOptions"
  57. :placeholder="item.placeholder || getPlaceholder(item)"
  58. :precision="item.precision"
  59. :prefixIcon="item.prefixIcon"
  60. :prepend="item.prepend"
  61. :prependClick="item.prependClick"
  62. :prop="item.prop"
  63. :props="item.props"
  64. :propsHttp="item.propsHttp"
  65. :range="item.range"
  66. :iconList="item.iconList"
  67. :readonly="item.readonly"
  68. :checkStrictly="item.checkStrictly"
  69. :separator="item.separator"
  70. :showFileList="item.showFileList"
  71. :showInput="item.showInput"
  72. :showStops="item.showStops"
  73. :showAllLevels="item.showAllLevels"
  74. :showText="item.showText"
  75. :size="item.size || 'small'"
  76. :startPlaceholder="item.startPlaceholder"
  77. :step="item.step"
  78. :suffixIcon="item.suffixIcon"
  79. :texts="item.texts"
  80. :tip="item.tip"
  81. :type="item.type"
  82. :accept="item.accept"
  83. :tags="item.tags"
  84. :value-format="item.valueFormat"
  85. :voidIconClass="item.voidIconClass"
  86. :remote="item.remote"
  87. :autocomplete="item.autocomplete"
  88. :allow-create="item.allowCreate"
  89. :default-first-option="item.defaultFirstOption"
  90. :is-img="item.isImg"></component>
  91. </template>
  92. <script>
  93. export default {
  94. name: 'widget-form-item',
  95. props: ['item'],
  96. data () {
  97. return {
  98. form: {}
  99. }
  100. },
  101. methods: {
  102. getComponent (type, component) {
  103. let KEY_COMPONENT_NAME = 'avue-';
  104. let result = 'input';
  105. if (!this.validatenull(component)) result = component;
  106. else if (type === 'array') result = 'array';
  107. else if (type === 'select') result = 'select';
  108. else if (type === 'radio') result = 'radio';
  109. else if (type === 'checkbox') result = 'checkbox';
  110. else if (['time', 'timerange'].includes(type)) result = 'time';
  111. else if (['dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(type))
  112. result = 'date';
  113. else if (type === 'cascader') result = 'cascader';
  114. else if (type === 'number') result = 'input-number';
  115. else if (type === 'password') result = 'input';
  116. else if (type === 'switch') result = 'switch';
  117. else if (type === 'rate') result = 'rate';
  118. else if (type === 'upload') result = 'upload';
  119. else if (type === 'slider') result = 'slider';
  120. else if (type === 'dynamic') result = 'dynamic';
  121. else if (type === 'icon-select') result = 'icon-select';
  122. else if (type === 'color') result = 'color';
  123. return KEY_COMPONENT_NAME + result;
  124. },
  125. getPlaceholder (item) {
  126. const label = item.label;
  127. if (['select', 'checkbox', 'radio', 'tree', 'color', 'dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(item.type))
  128. return `请选择${label}`;
  129. else return `请输入${label}`;
  130. },
  131. }
  132. }
  133. </script>