Selaa lähdekoodia

feat(api): 旧系统 product patch delete ensale unsale

gemercheung 3 vuotta sitten
vanhempi
commit
46702aaf2f

+ 32 - 0
src/api/product/list.ts

@@ -1,9 +1,13 @@
 import { defHttp } from '/@/utils/http/axios';
 import { PageParams, RentListGetResultModel } from './model';
+import { Result } from '/#/axios';
 
 enum Api {
   pageList = '/basic-api/goods/list',
   ref = '/basic-api/specification/list',
+  unSale = '/basic-api/goods/unSale',
+  enSale = '/basic-api/goods/enSale',
+  delete = '/basic-api/goods/delete',
 }
 
 /**
@@ -19,3 +23,31 @@ export const ListApi = (params: PageParams) =>
       ignoreCancelToken: true,
     },
   });
+export const UnSaleApi = (params: string[]) =>
+  defHttp.post<Result>({
+    url: Api.unSale,
+    data: params.join(','),
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const EnSaleApi = (params: string[]) =>
+  defHttp.post<Result>({
+    url: Api.enSale,
+    data: params.join(','),
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const DeleteApi = (params: string[]) =>
+  defHttp.post<Result>({
+    url: Api.delete,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 4 - 1
src/locales/lang/en/common.ts

@@ -19,5 +19,8 @@ export default {
   dark: 'Dark',
 
   yes: 'yes',
-  no: 'yes',
+  no: 'no',
+
+  optSuccess: 'opt success',
+  optFail: 'opt fail',
 };

+ 2 - 0
src/locales/lang/zh-CN/common.ts

@@ -20,4 +20,6 @@ export default {
 
   yes: '是',
   no: '否',
+  optSuccess: '操作成功',
+  optFail: '操作失败',
 };

+ 19 - 7
src/views/dashboard/product/list.data.ts

@@ -1,8 +1,10 @@
 import { BasicColumn, FormProps } from '/@/components/Table';
 
+import { UnSaleApi, EnSaleApi } from '/@/api/product/list';
 import { h } from 'vue';
 import { Switch } from 'ant-design-vue';
 import { useMessage } from '/@/hooks/web/useMessage';
+import { useI18n } from '/@/hooks/web/useI18n';
 
 export const searchForm: Partial<FormProps> = {
   labelWidth: 100,
@@ -37,14 +39,14 @@ export const columns: BasicColumn[] = [
   },
   {
     title: '购买链接',
-    dataIndex: 'link',
-    slots: { customRender: 'link' },
+    dataIndex: 'realShopUrl',
+    slots: { customRender: 'realShopUrl' },
     width: 150,
   },
   {
     title: '商品分类',
-    dataIndex: 'productType',
-    slots: { customRender: 'productType' },
+    dataIndex: 'categoryName',
+    // slots: { customRender: 'productType' },
     sorter: true,
     width: 120,
   },
@@ -95,11 +97,21 @@ export const columns: BasicColumn[] = [
         checkedChildren: '上架',
         unCheckedChildren: '下架',
         loading: false,
-        onChange(checked: boolean) {
+        onChange: async (checked: boolean) => {
           record.pendingStatus = true;
-          const newStatus = checked ? '1' : '0';
+          const id: string = record.id || '';
+          const newStatus = checked ? 1 : 0;
           const { createMessage } = useMessage();
-          createMessage.info(`暂未接入` + newStatus);
+          const { t } = useI18n();
+          if (checked) {
+            Reflect.set(record, 'isOnSale', newStatus);
+            await EnSaleApi([id]);
+          } else {
+            Reflect.set(record, 'isOnSale', newStatus);
+            await UnSaleApi([id]);
+          }
+          createMessage.success(t('common.optSuccess'));
+          // createMessage.info(`暂未接入` + newStatus);
         },
       });
     },

+ 88 - 21
src/views/dashboard/product/list.vue

@@ -48,14 +48,40 @@ updateUserId: 247
 -->
 <template>
   <div>
-    <BasicTable @register="registerTable">
+    <BasicTable
+      @register="registerTable"
+      :rowSelection="{ type: 'checkbox', onChange: onSelectChange }"
+    >
       <template #toolbar>
         <a-button type="primary" @click="handleCreate"> 新增商品</a-button>
+        <PopConfirmButton
+          title="是否确定批量删除?"
+          primary
+          color="error"
+          @confirm="handlePatchDelete"
+        >
+          批量删除</PopConfirmButton
+        >
+        <PopConfirmButton
+          title="是否确定批量上架?"
+          primary
+          color="warning"
+          @confirm="handlePatchEnSale"
+        >
+          批量上架</PopConfirmButton
+        >
+        <PopConfirmButton
+          title="是否确定批量下架?"
+          ghost
+          color="error"
+          @confirm="handlePatchUnSale"
+        >
+          批量下架</PopConfirmButton
+        >
       </template>
-      <template #link="{ record }">
-        <a :href="record.link" target="_blank">{{ record.link }}</a>
+      <template #realShopUrl="{ record }">
+        <a :href="record.realShopUrl" target="_blank">{{ record.realShopUrl }}</a>
       </template>
-      <template #orderType="{ record }"> {{ renderProductTypeLabel(record.orderType) }} </template>
 
       <template #addTime="{ record }">
         <Time :value="record.addTime" mode="datetime" />
@@ -75,7 +101,7 @@ updateUserId: 247
               popConfirm: {
                 title: '是否确认删除',
                 confirm: () => {
-                  createMessage.info(`暂未接入`);
+                  handleSingleDelete(record.id);
                 },
               },
             },
@@ -87,14 +113,15 @@ updateUserId: 247
   </div>
 </template>
 <script lang="ts">
-  import { defineComponent } from 'vue';
+  import { defineComponent, nextTick } from 'vue';
   import { BasicTable, useTable, TableAction } from '/@/components/Table';
-
+  import { PopConfirmButton } from '/@/components/Button';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { uploadApi } from '/@/api/sys/upload';
   // import { Switch } from 'ant-design-vue';
   // import { h } from 'vue';
-  import { ListApi } from '/@/api/product/list';
+  // UnSaleApi EnSaleApi
+  import { ListApi, DeleteApi, EnSaleApi, UnSaleApi } from '/@/api/product/list';
   import { useI18n } from '/@/hooks/web/useI18n';
   // import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
   import { useGo } from '/@/hooks/web/usePage';
@@ -105,14 +132,14 @@ updateUserId: 247
   import { Time } from '/@/components/Time';
 
   export default defineComponent({
-    components: { BasicTable, TableAction, ProductDrawer, Time },
+    components: { BasicTable, TableAction, ProductDrawer, Time, PopConfirmButton },
     setup() {
       const { createMessage } = useMessage();
       const go = useGo();
       const { t } = useI18n();
       const [registerDrawer, { openDrawer }] = useDrawer();
 
-      const [registerTable] = useTable({
+      const [registerTable, { reload, getSelectRowKeys }] = useTable({
         title: '商品列表',
         api: ListApi,
         columns: columns,
@@ -123,6 +150,7 @@ updateUserId: 247
         showIndexColumn: true,
         rowKey: 'id',
         pagination: { pageSize: 20 },
+        clickToRowSelect: false,
         bordered: true,
         fetchSetting: {
           pageField: 'page',
@@ -132,16 +160,6 @@ updateUserId: 247
         },
       });
 
-      function renderProductTypeLabel(type: number): string {
-        switch (type) {
-          case 0:
-            return '立即购买';
-          case 1:
-            return '延后购买';
-          default:
-            return '立即购买';
-        }
-      }
       function handleEdit(record: Recordable) {
         openDrawer(true, {
           record,
@@ -153,16 +171,65 @@ updateUserId: 247
           isUpdate: false,
         });
       }
+      function onSelectChange(): void {}
+      async function handleDelete(ids: string[]) {
+        await DeleteApi(ids);
+        nextTick(reload);
+      }
+      function handleSingleDelete(id: string) {
+        handleDelete([id]);
+      }
 
+      function handlePatchDelete() {
+        const keys = getSelectRowKeys();
+        console.log('key', keys);
+        if (keys.length === 0) {
+          createMessage.info('请至少选择一项');
+          return;
+        }
+        handleDelete(keys);
+      }
+      async function handlePatchEnSale() {
+        try {
+          const keys = getSelectRowKeys();
+          console.log('key', keys);
+          if (keys.length === 0) {
+            createMessage.info('请至少选择一项');
+            return;
+          }
+          await EnSaleApi(keys);
+          nextTick(reload);
+        } catch (error) {
+          nextTick(reload);
+        }
+      }
+      async function handlePatchUnSale() {
+        try {
+          const keys = getSelectRowKeys();
+          console.log('key', keys);
+          if (keys.length === 0) {
+            createMessage.info('请至少选择一项');
+            return;
+          }
+          await UnSaleApi(keys);
+          nextTick(reload);
+        } catch (error) {
+          nextTick(reload);
+        }
+      }
       return {
         registerTable,
         createMessage,
         t,
         go,
-        renderProductTypeLabel,
         registerDrawer,
         handleEdit,
         handleCreate,
+        onSelectChange,
+        handleSingleDelete,
+        handlePatchDelete,
+        handlePatchEnSale,
+        handlePatchUnSale,
         uploadApi: uploadApi as any,
       };
     },