WidgetFormItem.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <div>
  3. <span v-if="item.type == 'title'"
  4. :style="item.styles"
  5. style="margin-left: 5px;">
  6. {{item.value}}
  7. </span>
  8. <component v-else
  9. :is="getComponent(item.type, item.component)"
  10. v-bind="Object.assign(deepClone(item), params, { size:item.size || 'small' })"
  11. :multiple="false"
  12. :placeholder="item.placeholder || getPlaceholder(item)"
  13. :dic="item.dicData"
  14. :value="['time', 'timerange', 'checkbox'].includes(item.type) ? item.dicData: undefined">
  15. <span v-if="params.html"
  16. v-html="params.html"></span>
  17. </component>
  18. </div>
  19. </template>
  20. <script>
  21. export default {
  22. name: 'widget-form-item',
  23. props: {
  24. item: {
  25. type: Object,
  26. default: () => {
  27. return {}
  28. }
  29. },
  30. params: {
  31. type: Object,
  32. default: () => {
  33. return {}
  34. }
  35. }
  36. },
  37. data () {
  38. return {
  39. form: {}
  40. }
  41. },
  42. methods: {
  43. getComponent (type, component) {
  44. let KEY_COMPONENT_NAME = 'avue-';
  45. let result = 'input';
  46. if (component) return component
  47. else if (['array', 'img', 'url'].includes(type)) result = 'array';
  48. else if (type === 'select') result = 'select';
  49. else if (type === 'radio') result = 'radio';
  50. else if (type === 'checkbox') result = 'checkbox';
  51. else if (['time', 'timerange'].includes(type)) result = 'time';
  52. else if (['dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(type))
  53. result = 'date';
  54. else if (type === 'cascader') result = 'cascader';
  55. else if (type === 'number') result = 'input-number';
  56. else if (type === 'password') result = 'input';
  57. else if (type === 'switch') result = 'switch';
  58. else if (type === 'rate') result = 'rate';
  59. else if (type === 'upload') result = 'upload';
  60. else if (type === 'slider') result = 'slider';
  61. else if (type === 'dynamic') result = 'dynamic';
  62. else if (type === 'icon') result = 'input-icon';
  63. else if (type === 'color') result = 'input-color';
  64. else if (type === 'map') result = 'input-map';
  65. return KEY_COMPONENT_NAME + result;
  66. },
  67. getPlaceholder (item) {
  68. const label = item.label;
  69. if (['select', 'checkbox', 'radio', 'tree', 'color', 'dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year', 'map', 'icon'].includes(item.type))
  70. return `請選擇 ${label}`;
  71. else return `請输入 ${label}`;
  72. },
  73. }
  74. }
  75. </script>