base.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. // https://plus-pro-components.com/components/form.html
  4. import "plus-pro-components/es/components/form/style/css";
  5. import {
  6. type PlusColumn,
  7. type FieldValues,
  8. PlusForm
  9. } from "plus-pro-components";
  10. const state = ref<FieldValues>({
  11. status: "1",
  12. name: "",
  13. rate: 4,
  14. progress: 100,
  15. switch: true,
  16. time: new Date().toString(),
  17. endTime: []
  18. });
  19. const rules = {
  20. name: [
  21. {
  22. required: true,
  23. message: "请输入名称"
  24. }
  25. ]
  26. };
  27. const columns: PlusColumn[] = [
  28. {
  29. label: "名称",
  30. width: 120,
  31. prop: "name",
  32. valueType: "copy",
  33. tooltip: "我是名称"
  34. },
  35. {
  36. label: "状态",
  37. width: 120,
  38. prop: "status",
  39. valueType: "select",
  40. options: [
  41. {
  42. label: "未解决",
  43. value: "0",
  44. color: "red"
  45. },
  46. {
  47. label: "已解决",
  48. value: "1",
  49. color: "blue"
  50. },
  51. {
  52. label: "解决中",
  53. value: "2",
  54. color: "yellow"
  55. },
  56. {
  57. label: "失败",
  58. value: "3",
  59. color: "red"
  60. }
  61. ]
  62. },
  63. {
  64. label: "执行进度",
  65. width: 200,
  66. prop: "progress"
  67. },
  68. {
  69. label: "评分",
  70. width: 200,
  71. prop: "rate",
  72. valueType: "rate"
  73. },
  74. {
  75. label: "是否显示",
  76. width: 100,
  77. prop: "switch",
  78. valueType: "switch"
  79. },
  80. {
  81. label: "时间",
  82. prop: "time",
  83. valueType: "date-picker"
  84. },
  85. {
  86. label: "数量",
  87. prop: "number",
  88. valueType: "input-number",
  89. fieldProps: { precision: 2, step: 2 }
  90. },
  91. {
  92. label: "梦想",
  93. prop: "gift",
  94. valueType: "radio",
  95. options: [
  96. {
  97. label: "诗",
  98. value: "0"
  99. },
  100. {
  101. label: "远方",
  102. value: "1"
  103. },
  104. {
  105. label: "美食",
  106. value: "2"
  107. }
  108. ]
  109. },
  110. {
  111. label: "到期时间",
  112. prop: "endTime",
  113. valueType: "date-picker",
  114. fieldProps: {
  115. type: "datetimerange",
  116. startPlaceholder: "请选择开始时间",
  117. endPlaceholder: "请选择结束时间"
  118. }
  119. },
  120. {
  121. label: "说明",
  122. prop: "desc",
  123. valueType: "textarea",
  124. fieldProps: {
  125. maxlength: 10,
  126. showWordLimit: true,
  127. autosize: { minRows: 2, maxRows: 4 }
  128. }
  129. }
  130. ];
  131. const handleChange = (values: FieldValues, prop: PlusColumn) => {
  132. console.log(values, prop, "change");
  133. };
  134. const handleSubmit = (values: FieldValues) => {
  135. console.log(values, "Submit");
  136. };
  137. const handleSubmitError = (err: any) => {
  138. console.log(err, "err");
  139. };
  140. const handleReset = () => {
  141. console.log("handleReset");
  142. };
  143. </script>
  144. <template>
  145. <PlusForm
  146. v-model="state"
  147. class="w-[450px] m-auto"
  148. :columns="columns"
  149. :rules="rules"
  150. label-position="right"
  151. @change="handleChange"
  152. @submit="handleSubmit"
  153. @submit-error="handleSubmitError"
  154. @reset="handleReset"
  155. />
  156. </template>