user.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <vxe-grid v-bind="gridOptions" style="width:98%"></vxe-grid>
  3. </template>
  4. <script lang='ts'>
  5. import { reactive } from "vue";
  6. import { VxeGridProps } from "vxe-table";
  7. export default {
  8. name: "user",
  9. setup() {
  10. const gridOptions = reactive({
  11. border: true,
  12. resizable: true,
  13. keepSource: true,
  14. height: 500,
  15. printConfig: {},
  16. importConfig: {},
  17. exportConfig: {},
  18. pagerConfig: {
  19. perfect: true,
  20. pageSize: 15,
  21. },
  22. editConfig: {
  23. trigger: "click",
  24. mode: "row",
  25. showStatus: true,
  26. },
  27. toolbarConfig: {
  28. buttons: [
  29. {
  30. code: "insert_actived",
  31. name: "新增",
  32. status: "perfect",
  33. icon: "fa fa-plus",
  34. },
  35. {
  36. code: "mark_cancel",
  37. name: "标记/取消",
  38. status: "perfect",
  39. icon: "fa fa-trash-o",
  40. },
  41. {
  42. code: "save",
  43. name: "保存",
  44. status: "perfect",
  45. icon: "fa fa-save",
  46. },
  47. ],
  48. perfect: true,
  49. refresh: {
  50. icon: "fa fa-refresh",
  51. iconLoading: "fa fa-spinner fa-spin",
  52. },
  53. import: {
  54. icon: "fa fa-upload",
  55. },
  56. export: {
  57. icon: "fa fa-download",
  58. },
  59. print: {
  60. icon: "fa fa-print",
  61. },
  62. // zoom: {
  63. // iconIn: "fa fa-arrows-alt",
  64. // iconOut: "fa fa-expand",
  65. // },
  66. custom: {
  67. icon: "fa fa-cog",
  68. },
  69. },
  70. proxyConfig: {
  71. props: {
  72. result: "result",
  73. total: "page.total",
  74. },
  75. ajax: {
  76. // 接收 Promise
  77. query: ({ page }) => {
  78. return new Promise((resolve) => {
  79. setTimeout(() => {
  80. const list = [
  81. {
  82. id: 10001,
  83. name: "Test1",
  84. nickname: "T1",
  85. role: "Develop",
  86. sex: "Man",
  87. age: 28,
  88. address: "Shenzhen",
  89. },
  90. {
  91. id: 10002,
  92. name: "Test2",
  93. nickname: "T2",
  94. role: "Test",
  95. sex: "Women",
  96. age: 22,
  97. address: "Guangzhou",
  98. },
  99. {
  100. id: 10003,
  101. name: "Test3",
  102. nickname: "T3",
  103. role: "PM",
  104. sex: "Man",
  105. age: 32,
  106. address: "Shanghai",
  107. },
  108. {
  109. id: 10004,
  110. name: "Test4",
  111. nickname: "T4",
  112. role: "Designer",
  113. sex: "Women ",
  114. age: 23,
  115. address: "Shenzhen",
  116. },
  117. {
  118. id: 10005,
  119. name: "Test5",
  120. nickname: "T5",
  121. role: "Develop",
  122. sex: "Women ",
  123. age: 30,
  124. address: "Shanghai",
  125. },
  126. {
  127. id: 10006,
  128. name: "Test6",
  129. nickname: "T6",
  130. role: "Designer",
  131. sex: "Women ",
  132. age: 21,
  133. address: "Shenzhen",
  134. },
  135. {
  136. id: 10007,
  137. name: "Test7",
  138. nickname: "T7",
  139. role: "Test",
  140. sex: "Man ",
  141. age: 29,
  142. address: "vxe-table 从入门到放弃",
  143. },
  144. {
  145. id: 10008,
  146. name: "Test8",
  147. nickname: "T8",
  148. role: "Develop",
  149. sex: "Man ",
  150. age: 35,
  151. address: "Shenzhen",
  152. },
  153. {
  154. id: 10009,
  155. name: "Test9",
  156. nickname: "T9",
  157. role: "Develop",
  158. sex: "Man ",
  159. age: 35,
  160. address: "Shenzhen",
  161. },
  162. {
  163. id: 100010,
  164. name: "Test10",
  165. nickname: "T10",
  166. role: "Develop",
  167. sex: "Man ",
  168. age: 35,
  169. address: "Guangzhou",
  170. },
  171. {
  172. id: 100011,
  173. name: "Test11",
  174. nickname: "T11",
  175. role: "Test",
  176. sex: "Women ",
  177. age: 26,
  178. address: "vxe-table 从入门到放弃",
  179. },
  180. {
  181. id: 100012,
  182. name: "Test12",
  183. nickname: "T12",
  184. role: "Develop",
  185. sex: "Man ",
  186. age: 34,
  187. address: "Guangzhou",
  188. },
  189. {
  190. id: 100013,
  191. name: "Test13",
  192. nickname: "T13",
  193. role: "Test",
  194. sex: "Women ",
  195. age: 22,
  196. address: "Shenzhen",
  197. },
  198. ];
  199. resolve({
  200. page: {
  201. total: list.length,
  202. },
  203. result: list.slice(
  204. (page.currentPage - 1) * page.pageSize,
  205. page.currentPage * page.pageSize
  206. ),
  207. });
  208. }, 100);
  209. });
  210. },
  211. // body 对象: { removeRecords }
  212. delete: () => {
  213. return new Promise((resolve) => {
  214. setTimeout(() => {
  215. resolve({});
  216. }, 100);
  217. });
  218. },
  219. // body 对象: { insertRecords, updateRecords, removeRecords, pendingRecords }
  220. save: () => {
  221. return new Promise((resolve) => {
  222. setTimeout(() => {
  223. resolve({});
  224. }, 100);
  225. });
  226. },
  227. },
  228. },
  229. columns: [
  230. { type: "checkbox", width: 50 },
  231. { type: "seq", width: 60 },
  232. { field: "name", title: "Name", editRender: { name: "input" } },
  233. { field: "nickname", title: "Nickname", editRender: { name: "input" } },
  234. { field: "role", title: "Role", editRender: { name: "input" } },
  235. {
  236. field: "address",
  237. title: "Address",
  238. showOverflow: true,
  239. editRender: { name: "input" },
  240. },
  241. ],
  242. } as VxeGridProps);
  243. return {
  244. gridOptions,
  245. };
  246. },
  247. };
  248. </script>
  249. <style scoped>
  250. </style>