index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <script setup lang="tsx">
  2. import { NButton, NImage, NSwitch } from 'naive-ui';
  3. // import dayjs from 'dayjs';
  4. import { router } from '@/router';
  5. import {
  6. // fetchGetAllChannelList,
  7. fetchActivityList,
  8. fetchDelActivity
  9. } from '@/service/api/djk-manage/activity';
  10. import { useTable } from '@/components/zt/Table/hooks/useTable';
  11. // const TypeName = ['企业用户', 'B端用户', 'C端用户'];
  12. // const statusList = ['上架', '下架'];
  13. const columns: NaiveUI.TableColumn<Api.goods.ShopSku>[] = [
  14. {
  15. key: 'activityImg',
  16. title: '活动封面',
  17. align: 'center',
  18. width: 120,
  19. render: (row: any) => {
  20. return <NImage src={row.activityImg} class={'h90px w90px'}></NImage>;
  21. }
  22. },
  23. {
  24. key: 'activityName',
  25. title: '活动名称',
  26. align: 'center',
  27. width: 100,
  28. ellipsis: {
  29. tooltip: true
  30. }
  31. },
  32. {
  33. key: 'activityType',
  34. title: '活动类型',
  35. align: 'center',
  36. width: 120,
  37. ellipsis: {
  38. tooltip: true
  39. }
  40. },
  41. {
  42. key: 'productAName',
  43. title: '商品A',
  44. align: 'center',
  45. width: 120,
  46. ellipsis: {
  47. tooltip: true
  48. }
  49. },
  50. {
  51. key: 'productBName',
  52. title: '商品B',
  53. align: 'center',
  54. width: 120,
  55. ellipsis: {
  56. tooltip: true
  57. }
  58. },
  59. {
  60. key: 'sales',
  61. title: '活动时间',
  62. align: 'center',
  63. width: 120,
  64. ellipsis: {
  65. tooltip: true
  66. },
  67. render: (row: any) => {
  68. return `${row.activityStartTime} ~ ${row.activityEndTime}`;
  69. }
  70. },
  71. {
  72. key: 'activityStatus',
  73. title: '活动状态',
  74. align: 'center',
  75. width: 120,
  76. ellipsis: {
  77. tooltip: true
  78. },
  79. render: (row: any) => {
  80. let status = '';
  81. switch (row.activityStatus) {
  82. case 1:
  83. status = '未开始';
  84. break;
  85. case 2:
  86. status = '进行中';
  87. break;
  88. case 3:
  89. status = '已结束';
  90. break;
  91. default:
  92. status = '未知状态';
  93. break;
  94. }
  95. return status;
  96. }
  97. },
  98. {
  99. key: 'price',
  100. title: '领取/库存',
  101. align: 'center',
  102. width: 120,
  103. ellipsis: {
  104. tooltip: true
  105. },
  106. render: (row: any) => {
  107. return `${row.quantityClaimed}/${row.inventory}`;
  108. }
  109. },
  110. {
  111. key: 'shelfStatus',
  112. title: '状态',
  113. align: 'center',
  114. width: 120,
  115. render: (row: any) => {
  116. return <NSwitch uncheckedValue={0} checkedValue={1} value={row.shelfStatus} disabled></NSwitch>;
  117. }
  118. }
  119. ];
  120. const [registerTable, { refresh }] = useTable({
  121. searchFormConfig: {
  122. schemas: [
  123. {
  124. label: '活动名称',
  125. component: 'NInput',
  126. field: 'activityName'
  127. },
  128. {
  129. label: '状态',
  130. field: 'activityStatus',
  131. component: 'NSelect',
  132. componentProps: {
  133. options: [
  134. {
  135. label: '未开始',
  136. value: 1
  137. },
  138. {
  139. label: '进行中',
  140. value: 2
  141. },
  142. {
  143. label: '已结束',
  144. value: 3
  145. }
  146. ]
  147. }
  148. }
  149. ],
  150. inline: false,
  151. size: 'small',
  152. labelPlacement: 'left',
  153. isFull: false
  154. },
  155. tableConfig: {
  156. opWdith: 160,
  157. keyField: 'skuId',
  158. title: '活动列表',
  159. showAddButton: true,
  160. scrollX: 1800,
  161. fieldMapToTime: [
  162. ['price', ['minPrice', 'maxPrice']],
  163. ['createTime', ['startTime', 'endTime']]
  164. ]
  165. }
  166. });
  167. function handleAdd() {
  168. router.push({
  169. path: '/djk-manage/edit-activity'
  170. });
  171. }
  172. function handleDetail(row: any) {
  173. router.push({
  174. path: '/djk-manage/edit-activity',
  175. query: {
  176. id: row.id,
  177. mode: 'detail'
  178. }
  179. });
  180. }
  181. function handleEdit(row: any) {
  182. console.log('edit', row);
  183. router.push({
  184. path: '/djk-manage/edit-activity',
  185. query: {
  186. id: row.id,
  187. mode: 'edit'
  188. }
  189. });
  190. }
  191. function handleDelete(row: any) {
  192. window.$dialog?.info({
  193. title: '提示',
  194. content: `你确定要删除吗?`,
  195. positiveText: '确定',
  196. negativeText: '取消',
  197. onPositiveClick: async () => {
  198. const { error } = await fetchDelActivity(row.id as string);
  199. if (!error) {
  200. refresh();
  201. }
  202. }
  203. });
  204. }
  205. </script>
  206. <template>
  207. <LayoutTable>
  208. <ZTable :columns="columns" :api="fetchActivityList" @add="handleAdd" @register="registerTable">
  209. <template #op="{ row }">
  210. <NSpace>
  211. <NButton size="small" @click="handleDetail(row)">商品详情</NButton>
  212. <NButton size="small" @click="handleEdit(row)">编辑</NButton>
  213. <NButton size="small" @click="handleDelete(row)">删除</NButton>
  214. </NSpace>
  215. </template>
  216. </ZTable>
  217. </LayoutTable>
  218. </template>
  219. <style scoped></style>