crud.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import * as api from './api'
  2. import { dict, UserPageQuery, AddReq, DelReq, EditReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet } from '@fast-crud/fast-crud'
  3. import { inject, nextTick, ref, watch } from 'vue'
  4. import { BaseColumn } from '/@/views/adManage/utils/commonTabColumn.js'
  5. import emitter from '/@/utils/emitter'
  6. import {storeToRefs} from 'pinia'
  7. import { usePublicData } from '/@/stores/publicData'
  8. const publicData = usePublicData()
  9. const { dateRange } = storeToRefs(publicData)
  10. export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
  11. // 通过 update 控制趋势图刷新
  12. let update = 0
  13. const pageRequest = async (query: UserPageQuery) => {
  14. update++
  15. console.log('update', update)
  16. emitter.emit('protfolios-update', update)
  17. return await api.GetList(query)
  18. }
  19. const editRequest = async ({ form, row }: EditReq) => {
  20. form.id = row.id
  21. return await api.UpdateObj(form)
  22. }
  23. const delRequest = async ({ row }: DelReq) => {
  24. return await api.DelObj(row.id)
  25. }
  26. const addRequest = async ({ form }: AddReq) => {
  27. return await api.AddObj(form)
  28. }
  29. //权限判定
  30. const hasPermissions = inject('$hasPermissions')
  31. return {
  32. crudOptions: {
  33. table: {
  34. height: 800,
  35. },
  36. container: {
  37. fixedHeight: false,
  38. },
  39. request: {
  40. pageRequest,
  41. addRequest,
  42. editRequest,
  43. delRequest,
  44. },
  45. rowHandle: {
  46. fixed: 'right',
  47. width: 80,
  48. buttons: {
  49. view: {
  50. show: false,
  51. },
  52. edit: {
  53. iconRight: 'Edit',
  54. type: 'text',
  55. text: null,
  56. // show: hasPermissions('dictionary:Update'),
  57. },
  58. remove: {
  59. iconRight: 'Delete',
  60. type: 'text',
  61. text: null,
  62. // show: hasPermissions('dictionary:Delete'),
  63. },
  64. // custom: {
  65. // text: '字典配置',
  66. // type: 'text',
  67. // // show: hasPermissions('dictionary:Update'),
  68. // tooltip: {
  69. // placement: 'top',
  70. // content: '字典配置',
  71. // },
  72. // //@ts-ignore
  73. // click: (ctx: any) => {
  74. // const { row } = ctx;
  75. // context!.subDictRef.value.drawer = true;
  76. // nextTick(() => {
  77. // context!.subDictRef.value.setSearchFormData({ form: { parent: row.id } });
  78. // context!.subDictRef.value.doRefresh();
  79. // });
  80. // },
  81. // },
  82. },
  83. },
  84. actionbar: {
  85. buttons: {
  86. add: {
  87. text: '新建广告组合',
  88. },
  89. },
  90. },
  91. toolbar: {
  92. buttons: {
  93. search: {
  94. show: true,
  95. },
  96. compact: {
  97. show: false,
  98. },
  99. },
  100. },
  101. columns: {
  102. // _index: {
  103. // title: '序号',
  104. // form: { show: false },
  105. // column: {
  106. // //type: 'index',
  107. // align: 'center',
  108. // width: '70px',
  109. // columnSetDisabled: true, //禁止在列设置中选择
  110. // formatter: (context) => {
  111. // //计算序号,你可以自定义计算规则,此处为翻页累加
  112. // let index = context.index ?? 1;
  113. // let pagination = crudExpose!.crudBinding.value.pagination;
  114. // // @ts-ignore
  115. // return ((pagination.currentPage ?? 1) - 1) * pagination.pageSize + index + 1;
  116. // },
  117. // },
  118. // },
  119. name: {
  120. title: '广告组合',
  121. column: {
  122. width: '150px',
  123. },
  124. search: {
  125. show: true,
  126. component: {
  127. props: {
  128. clearable: true,
  129. },
  130. },
  131. },
  132. form: {
  133. rules: [{ required: true, message: '必填项' }],
  134. },
  135. },
  136. state: {
  137. title: '状态',
  138. type: 'dict-select',
  139. dict: dict({
  140. data: [
  141. { value: 'enabled', label: '投放中' },
  142. { value: 'disable', label: '禁用' },
  143. ],
  144. }),
  145. form: {
  146. show: false,
  147. },
  148. },
  149. budget_policy: {
  150. title: '预算类型',
  151. type: 'dict-select',
  152. dict: dict({
  153. data: [
  154. { value: '', label: '无预算上限' },
  155. { value: 'dateRange', label: '日期范围' },
  156. { value: 'monthlyRecurring', label: '按月' },
  157. ],
  158. }),
  159. form: {
  160. value: '',
  161. },
  162. },
  163. budget_startDate: {
  164. title: '开始日期',
  165. type: 'date',
  166. form: {
  167. show: compute((context) => context.form.budget_policy === 'dateRange'),
  168. rules: [{ required: true, message: '必填项' }],
  169. },
  170. },
  171. budget_endDate: {
  172. title: '结束日期',
  173. type: 'date',
  174. form: {
  175. show: compute((context) => context.form.budget_policy !== ''),
  176. },
  177. },
  178. budget_amount: {
  179. title: '预算',
  180. type: 'number',
  181. form: {
  182. value: 0,
  183. show: compute((context) => context.form.budget_policy !== ''),
  184. rules: [{ required: true, message: '必填项' }],
  185. component: {
  186. min: 0,
  187. precision: 2,
  188. controlsPosition: 'right',
  189. },
  190. },
  191. },
  192. inBudget: {
  193. title: '是否预算内',
  194. form: {
  195. show: false,
  196. },
  197. },
  198. ...BaseColumn,
  199. },
  200. },
  201. }
  202. }