index.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. import config from '@/config/axios/config'
  2. import { MockMethod } from 'vite-plugin-mock'
  3. import { toAnyString } from '@/utils'
  4. import Mock from 'mockjs'
  5. const { code } = config
  6. const timeout = 1000
  7. const count = 100
  8. const baseContent =
  9. '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>'
  10. interface ListProps {
  11. id: string
  12. author: string
  13. title: string
  14. content: string
  15. importance: number
  16. display_time: string
  17. pageviews: number
  18. image_uri: string
  19. }
  20. interface TreeListProps {
  21. id: string
  22. author: string
  23. title: string
  24. content: string
  25. importance: number
  26. display_time: string
  27. pageviews: number
  28. children: TreeListProps[]
  29. }
  30. let List: ListProps[] = []
  31. for (let i = 0; i < count; i++) {
  32. List.push(
  33. Mock.mock({
  34. id: toAnyString(),
  35. // timestamp: +Mock.Random.date('T'),
  36. author: '@first',
  37. title: '@title(5, 10)',
  38. content: baseContent,
  39. importance: '@integer(1, 3)',
  40. display_time: '@datetime',
  41. pageviews: '@integer(100, 500)',
  42. image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)'),
  43. video_uri:
  44. '//sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-720p.mp4'
  45. })
  46. )
  47. }
  48. const treeList: TreeListProps[] = []
  49. for (let i = 0; i < count; i++) {
  50. treeList.push(
  51. Mock.mock({
  52. id: toAnyString(),
  53. // timestamp: +Mock.Random.date('T'),
  54. author: '@first',
  55. title: '@title(5, 10)',
  56. content: baseContent,
  57. importance: '@integer(1, 3)',
  58. display_time: '@datetime',
  59. pageviews: '@integer(300, 5000)',
  60. children: [
  61. {
  62. id: toAnyString(),
  63. // timestamp: +Mock.Random.date('T'),
  64. author: '@first',
  65. title: '@title(5, 10)',
  66. content: baseContent,
  67. importance: '@integer(1, 3)',
  68. display_time: '@datetime',
  69. pageviews: '@integer(300, 5000)',
  70. children: [
  71. {
  72. id: toAnyString(),
  73. // timestamp: +Mock.Random.date('T'),
  74. author: '@first',
  75. title: '@title(5, 10)',
  76. content: baseContent,
  77. importance: '@integer(1, 3)',
  78. display_time: '@datetime',
  79. pageviews: '@integer(300, 5000)'
  80. },
  81. {
  82. id: toAnyString(),
  83. // timestamp: +Mock.Random.date('T'),
  84. author: '@first',
  85. title: '@title(5, 10)',
  86. content: baseContent,
  87. importance: '@integer(1, 3)',
  88. display_time: '@datetime',
  89. pageviews: '@integer(300, 5000)'
  90. }
  91. ]
  92. },
  93. {
  94. id: toAnyString(),
  95. // timestamp: +Mock.Random.date('T'),
  96. author: '@first',
  97. title: '@title(5, 10)',
  98. content: baseContent,
  99. importance: '@integer(1, 3)',
  100. display_time: '@datetime',
  101. pageviews: '@integer(300, 5000)'
  102. },
  103. {
  104. id: toAnyString(),
  105. // timestamp: +Mock.Random.date('T'),
  106. author: '@first',
  107. title: '@title(5, 10)',
  108. content: baseContent,
  109. importance: '@integer(1, 3)',
  110. display_time: '@datetime',
  111. pageviews: '@integer(300, 5000)'
  112. },
  113. {
  114. id: toAnyString(),
  115. // timestamp: +Mock.Random.date('T'),
  116. author: '@first',
  117. title: '@title(5, 10)',
  118. content: baseContent,
  119. importance: '@integer(1, 3)',
  120. display_time: '@datetime',
  121. pageviews: '@integer(300, 5000)'
  122. }
  123. ]
  124. // image_uri
  125. })
  126. )
  127. }
  128. export default [
  129. // 树形列表接口
  130. {
  131. url: '/example/treeList',
  132. method: 'get',
  133. timeout,
  134. response: ({ query }) => {
  135. const { title, pageIndex, pageSize } = query
  136. const mockList = treeList.filter((item) => {
  137. if (title && item.title.indexOf(title) < 0) return false
  138. return true
  139. })
  140. const pageList = mockList.filter(
  141. (_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1)
  142. )
  143. return {
  144. code: code,
  145. data: {
  146. total: mockList.length,
  147. list: pageList
  148. }
  149. }
  150. }
  151. },
  152. // 列表接口
  153. {
  154. url: '/example/list',
  155. method: 'get',
  156. timeout,
  157. response: ({ query }) => {
  158. const { title, pageIndex, pageSize } = query
  159. const mockList = List.filter((item) => {
  160. if (title && item.title.indexOf(title) < 0) return false
  161. return true
  162. })
  163. const pageList = mockList.filter(
  164. (_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1)
  165. )
  166. return {
  167. code: code,
  168. data: {
  169. total: mockList.length,
  170. list: pageList
  171. }
  172. }
  173. }
  174. },
  175. // 保存接口
  176. {
  177. url: '/example/save',
  178. method: 'post',
  179. timeout,
  180. response: ({ body }) => {
  181. if (!body.id) {
  182. List = [
  183. Object.assign(body, {
  184. id: toAnyString()
  185. })
  186. ].concat(List)
  187. return {
  188. code: code,
  189. data: 'success'
  190. }
  191. } else {
  192. List.map((item) => {
  193. if (item.id === body.id) {
  194. for (const key in item) {
  195. item[key] = body[key]
  196. }
  197. }
  198. })
  199. return {
  200. code: code,
  201. data: 'success'
  202. }
  203. }
  204. }
  205. },
  206. // 详情接口
  207. {
  208. url: '/example/detail',
  209. method: 'get',
  210. response: ({ query }) => {
  211. const { id } = query
  212. for (const example of List) {
  213. if (example.id === id) {
  214. return {
  215. code: code,
  216. data: example
  217. }
  218. }
  219. }
  220. }
  221. },
  222. // 删除接口
  223. {
  224. url: '/example/delete',
  225. method: 'post',
  226. response: ({ body }) => {
  227. const ids = body.ids
  228. if (!ids) {
  229. return {
  230. code: 500,
  231. message: '请选择需要删除的数据'
  232. }
  233. } else {
  234. let i = List.length
  235. while (i--) {
  236. if (ids.indexOf(List[i].id) !== -1) {
  237. List.splice(i, 1)
  238. }
  239. }
  240. return {
  241. code: code,
  242. data: 'success'
  243. }
  244. }
  245. }
  246. }
  247. ] as MockMethod[]