dialog.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. // https://plus-pro-components.com/components/dialog-form.html
  4. import "plus-pro-components/es/components/dialog-form/style/css";
  5. import {
  6. type PlusColumn,
  7. type FieldValues,
  8. PlusDialogForm
  9. } from "plus-pro-components";
  10. const columns: PlusColumn[] = [
  11. {
  12. label: "名称",
  13. width: 120,
  14. prop: "name",
  15. valueType: "copy",
  16. tooltip: "名称最多显示6个字符"
  17. },
  18. {
  19. label: "状态",
  20. width: 120,
  21. prop: "status",
  22. valueType: "select",
  23. options: [
  24. {
  25. label: "未解决",
  26. value: "0",
  27. color: "red"
  28. },
  29. {
  30. label: "已解决",
  31. value: "1",
  32. color: "blue"
  33. },
  34. {
  35. label: "解决中",
  36. value: "2",
  37. color: "yellow"
  38. },
  39. {
  40. label: "失败",
  41. value: "3",
  42. color: "red"
  43. }
  44. ]
  45. },
  46. {
  47. label: "是否显示",
  48. width: 100,
  49. prop: "switch",
  50. valueType: "switch"
  51. },
  52. {
  53. label: "时间",
  54. prop: "time",
  55. valueType: "date-picker"
  56. },
  57. {
  58. label: "数量",
  59. prop: "number",
  60. valueType: "input-number",
  61. fieldProps: { precision: 2, step: 2 }
  62. },
  63. {
  64. label: "城市",
  65. prop: "city",
  66. valueType: "cascader",
  67. options: [
  68. {
  69. value: "0",
  70. label: "陕西",
  71. children: [
  72. {
  73. value: "0-0",
  74. label: "西安",
  75. children: [
  76. {
  77. value: "0-0-0",
  78. label: "新城区"
  79. },
  80. {
  81. value: "0-0-1",
  82. label: "高新区"
  83. },
  84. {
  85. value: "0-0-2",
  86. label: "灞桥区"
  87. }
  88. ]
  89. }
  90. ]
  91. },
  92. {
  93. value: "1",
  94. label: "山西",
  95. children: [
  96. {
  97. value: "1-0",
  98. label: "太原",
  99. children: [
  100. {
  101. value: "1-0-0",
  102. label: "小店区"
  103. },
  104. {
  105. value: "1-0-1",
  106. label: "古交市"
  107. },
  108. {
  109. value: "1-0-2",
  110. label: "万柏林区"
  111. }
  112. ]
  113. }
  114. ]
  115. }
  116. ]
  117. },
  118. {
  119. label: "地区",
  120. prop: "place",
  121. tooltip: "请精确到门牌号",
  122. fieldProps: {
  123. placeholder: "请精确到门牌号"
  124. }
  125. },
  126. {
  127. label: "要求",
  128. prop: "demand",
  129. valueType: "checkbox",
  130. options: [
  131. {
  132. label: "四六级",
  133. value: "0"
  134. },
  135. {
  136. label: "计算机二级证书",
  137. value: "1"
  138. },
  139. {
  140. label: "普通话证书",
  141. value: "2"
  142. }
  143. ]
  144. },
  145. {
  146. label: "梦想",
  147. prop: "gift",
  148. valueType: "radio",
  149. options: [
  150. {
  151. label: "诗",
  152. value: "0"
  153. },
  154. {
  155. label: "远方",
  156. value: "1"
  157. },
  158. {
  159. label: "美食",
  160. value: "2"
  161. }
  162. ]
  163. },
  164. {
  165. label: "到期时间",
  166. prop: "endTime",
  167. valueType: "date-picker",
  168. fieldProps: {
  169. type: "datetimerange",
  170. startPlaceholder: "请选择开始时间",
  171. endPlaceholder: "请选择结束时间"
  172. }
  173. },
  174. {
  175. label: "说明",
  176. prop: "desc",
  177. valueType: "textarea",
  178. fieldProps: {
  179. maxlength: 10,
  180. showWordLimit: true,
  181. autosize: { minRows: 2, maxRows: 4 }
  182. }
  183. }
  184. ];
  185. const visible = ref(false);
  186. const values = ref<FieldValues>({});
  187. const handleOpen = () => {
  188. visible.value = true;
  189. };
  190. </script>
  191. <template>
  192. <div>
  193. <el-button @click="handleOpen">打开弹窗表单</el-button>
  194. <PlusDialogForm
  195. v-model:visible="visible"
  196. v-model="values"
  197. :form="{ columns }"
  198. />
  199. </div>
  200. </template>