index.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <template>
  2. <PageWrapper contentBackground>
  3. <template #footer>
  4. <a-tabs v-model:activeKey="searchInfo.type" @change="tabChange">
  5. <a-tab-pane key="1" :tab="t('routes.product.sdkType.1')" />
  6. <a-tab-pane key="2" :tab="t('routes.product.sdkType.2')" />
  7. </a-tabs>
  8. </template>
  9. <div class="desc-wrap-BasicTable">
  10. <BasicTable @register="registerTimeTable">
  11. <template #toolbar>
  12. <a-button
  13. type="primary"
  14. v-if="getTypeCheckPerm('sdk-add')"
  15. @click="
  16. () => {
  17. openAddModal(true, searchInfo.type);
  18. }
  19. "
  20. >{{ t('routes.product.addVstive') }}</a-button
  21. >
  22. </template>
  23. <template #action="{ record }">
  24. <TableAction
  25. :actions="[
  26. {
  27. label: '编辑',
  28. icon: 'ep:edit',
  29. ifShow: getTypeCheckPerm('sdk-update'),
  30. onClick: handleEdit.bind(null, record),
  31. },
  32. {
  33. label: '下架',
  34. ifShow: getTypeCheckPerm('sdk-update') && record.status == 1,
  35. icon: 'akar-icons:statistic-down',
  36. onClick: handleOff.bind(null, record),
  37. },
  38. {
  39. label: '删除',
  40. ifShow: getTypeCheckPerm('sdk-delete'),
  41. icon: 'ic:outline-delete-outline',
  42. popConfirm: {
  43. title: '是否确认删除',
  44. confirm: handleDelete.bind(null, record),
  45. },
  46. },
  47. ]"
  48. />
  49. </template>
  50. </BasicTable>
  51. </div>
  52. <AddModal @update="reload" @register="registerAddModal" />
  53. <EditModal @register="registerEditModal" @update="reload" />
  54. </PageWrapper>
  55. </template>
  56. <script lang="ts">
  57. import { defineComponent, reactive, h } from 'vue';
  58. import { Time } from '/@/components/Time';
  59. import { BasicTable, useTable, FormProps, TableAction, BasicColumn } from '/@/components/Table';
  60. import { PageWrapper } from '/@/components/Page';
  61. import { Divider, Card, Empty, Descriptions, Steps, Tabs,Switch } from 'ant-design-vue';
  62. import { SpaceSdkList, SpaceSdkDelete, SpaceSdkOnline } from '/@/api/product';
  63. import { SpaceSdkTop } from '/@/api/product/index';
  64. import { useModal } from '/@/components/Modal';
  65. import { useI18n } from '/@/hooks/web/useI18n';
  66. import AddModal from './AddModal.vue';
  67. import EditModal from './EditModal.vue';
  68. import { useMessage } from '/@/hooks/web/useMessage';
  69. import { usePermissionStore } from '/@/store/modules/permission';
  70. export default defineComponent({
  71. components: {
  72. BasicTable,
  73. AddModal,
  74. EditModal,
  75. TableAction,
  76. PageWrapper,
  77. [Divider.name]: Divider,
  78. [Card.name]: Card,
  79. Empty,
  80. [Descriptions.name]: Descriptions,
  81. [Descriptions.Item.name]: Descriptions.Item,
  82. [Steps.name]: Steps,
  83. [Steps.Step.name]: Steps.Step,
  84. [Tabs.name]: Tabs,
  85. [Tabs.TabPane.name]: Tabs.TabPane,
  86. },
  87. setup() {
  88. const { t } = useI18n();
  89. const permissionStore = usePermissionStore();
  90. const { getCheckPerm } = permissionStore;
  91. const searchInfo = reactive<Recordable>({
  92. type: '1',
  93. });
  94. const [registerAddModal, { openModal: openAddModal }] = useModal();
  95. const [registerEditModal, { openModal: openEditModal }] = useModal();
  96. const { createMessage } = useMessage();
  97. const searchForm: Partial<FormProps> = {
  98. labelWidth: 100,
  99. schemas: [
  100. {
  101. field: 'version',
  102. label: '版本号',
  103. component: 'Input',
  104. componentProps: {
  105. maxLength: 100,
  106. },
  107. colProps: {
  108. xl: 6,
  109. xxl: 6,
  110. },
  111. },
  112. ],
  113. };
  114. const sdkTableSchema: BasicColumn[] = [
  115. {
  116. title: '版本号',
  117. width: 80,
  118. dataIndex: 'version',
  119. },
  120. {
  121. title: '版本更新说明',
  122. width: 240,
  123. dataIndex: 'imprintCh',
  124. },
  125. {
  126. title: '版本更新说明',
  127. width: 150,
  128. ifShow:true,
  129. dataIndex: 'status',
  130. },
  131. {
  132. title: '首次发布时间',
  133. width: 120,
  134. dataIndex: 'publishTime',
  135. customRender: ({ record }) => {
  136. return (
  137. record.publishTime &&
  138. h(Time, {
  139. value: record.publishTime,
  140. mode: 'datetime',
  141. })
  142. );
  143. },
  144. },{
  145. title: '创建人',
  146. width: 80,
  147. dataIndex: 'recStatus',
  148. },{
  149. title: '创建时间',
  150. width: 120,
  151. dataIndex: 'createTime',
  152. customRender: ({ record }) => {
  153. return (
  154. record.createTime &&
  155. h(Time, {
  156. value: record.createTime,
  157. mode: 'datetime',
  158. })
  159. );
  160. },
  161. },{
  162. title: '置顶',
  163. dataIndex: 'isTop',
  164. ifShow: getCheckPerm('sdk-top'),
  165. width: 80,
  166. customRender: ({ record }) => {
  167. if (!Reflect.has(record, 'isTop')) {
  168. record.pendingStatus = false;
  169. }
  170. return h(Switch, {
  171. checked: record.isTop == 1 ? true : false,
  172. checkedChildren: '启用',
  173. unCheckedChildren: '禁用',
  174. loading: false,
  175. onChange: async (checked: boolean) => {
  176. record.pendingStatus = true;
  177. const newStatus = checked?1:0;
  178. await SpaceSdkTop({...record,isTop:newStatus});
  179. Reflect.set(record, 'isTop', checked);
  180. createMessage.success(t('common.optSuccess'));
  181. reload()
  182. },
  183. });
  184. },
  185. },{
  186. title: '发布状态',
  187. dataIndex: 'status',
  188. width: 80,
  189. customRender: ({ record }) => {
  190. return renderType(record.status)
  191. },
  192. },
  193. ];
  194. const [registerTimeTable, { reload }] = useTable({
  195. api: SpaceSdkList,
  196. title: 'SDK列表',
  197. columns: sdkTableSchema,
  198. useSearchForm: true,
  199. formConfig: searchForm,
  200. showTableSetting: true,
  201. showIndexColumn:false,
  202. rowKey: 'id',
  203. fetchSetting: {
  204. pageField: 'pageNum',
  205. sizeField: 'pageSize',
  206. listField: 'list',
  207. totalField: 'total',
  208. },
  209. searchInfo: searchInfo,
  210. actionColumn: {
  211. width: 200,
  212. title: '操作',
  213. dataIndex: 'action',
  214. slots: { customRender: 'action' },
  215. },
  216. canResize: false,
  217. });
  218. function tabChange(val: string) {
  219. console.log('tabChange', val);
  220. reload();
  221. }
  222. function renderType(type: number): string {
  223. switch (type) {
  224. case 0:
  225. return t(`routes.product.statusType.0`);
  226. case 1:
  227. return t(`routes.product.statusType.1`);
  228. default:
  229. return t(`routes.product.statusType.1`);
  230. }
  231. }
  232. async function handleDelete(record: Recordable) {
  233. console.log('点击了删除', record);
  234. await SpaceSdkDelete({ id: record.id });
  235. createMessage.success(t('common.optSuccess'));
  236. reload();
  237. }
  238. function handleOpen(record: Recordable) {
  239. console.log('点击了启用', record);
  240. }
  241. async function handleOff(record: Recordable) {
  242. await SpaceSdkOnline({ id: record.id, status:2 });//状态 0 - 未发布 1 -发布 2-下架
  243. createMessage.success(t('common.optSuccess'));
  244. reload();
  245. }
  246. function handleEdit(record: Recordable) {
  247. console.log('record', record);
  248. openEditModal(true, {
  249. ...record,
  250. });
  251. }
  252. function getTypeCheckPerm(val){
  253. let myType = searchInfo.type
  254. return getCheckPerm(val) || getCheckPerm(`${val}-${myType}`)
  255. }
  256. return {
  257. registerTimeTable,
  258. handleDelete,
  259. handleOpen,
  260. tabChange,
  261. handleOff,
  262. reload,
  263. registerAddModal,
  264. registerEditModal,
  265. openAddModal,
  266. handleEdit,
  267. getTypeCheckPerm,
  268. t,
  269. searchInfo,
  270. };
  271. },
  272. });
  273. </script>
  274. <style lang="less" scoped>
  275. .desc-wrap-BasicTable {
  276. background-color: #f0f2f5;
  277. .vben-basic-table-form-container {
  278. padding: 0;
  279. }
  280. }
  281. </style>