浏览代码

fix(商品列表模块): 修改商品列表的接口

tangning 3 年之前
父节点
当前提交
3e6431ee7e
共有 5 个文件被更改,包括 168 次插入54 次删除
  1. 1 1
      src/api/model/baseModel.ts
  2. 14 0
      src/api/scene/live.ts
  3. 9 0
      src/api/scene/model.ts
  4. 118 50
      src/views/product/goodsSpecs.vue
  5. 26 3
      src/views/product/productDrawer.vue

+ 1 - 1
src/api/model/baseModel.ts

@@ -13,7 +13,7 @@ export interface BasicFetchResult<T> {
   isFirstPage: boolean;
   isLastPage: boolean;
   lastPage: number;
-  list: any[];
+  list: T[];
   navigateFirstPage: number;
   navigateLastPage: number;
   navigatePages: number;

+ 14 - 0
src/api/scene/live.ts

@@ -1,10 +1,12 @@
 import { defHttp } from '/@/utils/http/axios';
 import {
   PageParams,
+  InfoParams,
   RentListGetResultModel,
   SceneLiveItem,
   bindAnchorListParam,
   GetAllSceneModel,
+  SceneLiveModel,
 } from './model';
 import { Result, UploadFileParams } from '/#/axios';
 enum Api {
@@ -18,6 +20,7 @@ enum Api {
   brandUpdate = '/basic-api/brand/update',
   upload = '/basic-api/sys/oss/upload',
   getAllScene = '/zfb-api/zfb/scene/list',
+  getBrandInfo = '/basic-api/brand/info',
 }
 export type SceneLiveItemResult = SceneLiveItem;
 /**
@@ -97,3 +100,14 @@ export const getAllSceneApi = (params: PageParams) => {
     },
   });
 };
+
+export const getLiveInfo = (params: InfoParams) => {
+  defHttp.post<SceneLiveModel>({
+    url: Api.getBrandInfo,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+};

+ 9 - 0
src/api/scene/model.ts

@@ -9,6 +9,10 @@ export interface bindAnchorListParam {
   type?: number;
   userId?: number | string;
 }
+export interface InfoParams {
+  id?: number | string;
+  token?: string;
+}
 export interface SceneDownloadParam {
   sceneNum?: string;
 }
@@ -71,6 +75,11 @@ export interface sceneItem {
   updateTime: number;
   updateUserId: number;
 }
+
+export interface SceneLiveModel {
+  brand: SceneLiveItem;
+  code?: number;
+}
 /**
  * @description: Request list return value
  */

+ 118 - 50
src/views/product/goodsSpecs.vue

@@ -1,40 +1,74 @@
 <template>
   <div>
-    <BasicForm @register="register" @submit="handleSubmit">
+    <BasicForm
+      @register="register"
+      :showResetButton="false"
+      :showSubmitButton="false"
+      @submit="handleSubmit"
+    >
       <template #but="{ field }">
         <Icon
           size="20px"
           v-if="showBut(field, false)"
           icon="ion:remove-circle-outline"
-          @click="del.bind(null, field)"
-        />{{ field }}
+          @click="del(field)"
+        />
       </template>
       <template #parentBut="{ field }">
         <Icon
           size="28px"
           v-if="showBut(field, true)"
           icon="ion:remove-circle-outline"
-          @click="parentDel.bind(null, field)"
-        />{{ field }}
+          @click="parentDel(field)"
+        />
       </template>
       <template #addAttribute="{ field }">
-        <a-button @click="addBut.bind(null, field)"> 添加属性值 </a-button>
+        <a-button @click="addBut(field)"> 添加属性值 </a-button>
+      </template>
+      <template #formFooter>
+        <div>
+          <a-button style="margin-right: 30px" @click="addBut">添加规格项目</a-button>
+          <a-button @click="handleSubmit">生成规格明细</a-button>
+        </div>
       </template>
     </BasicForm>
   </div>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, reactive } from 'vue';
+  import { defineComponent, ref, reactive, onMounted } from 'vue';
   import { Icon } from '/@/components/Icon';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { uploadApi } from '/@/api/advertisement/list';
-  import { useMessage } from '/@/hooks/web/useMessage';
+  // import { useMessage } from '/@/hooks/web/useMessage';
   import { queryAll } from '/@/api/product/list';
 
+  interface valList {
+    name: string;
+    picUrl: string;
+    uuid: string;
+  }
+  interface ProductListItem {
+    uuidLink: string;
+    goodsNumber?: string;
+    goodsSn?: string;
+    retailPrice?: string;
+    marketPrice?: string;
+  }
+  interface EditDataType {
+    name: string;
+    specificationId: string;
+    val: valList[];
+  }
   export default defineComponent({
     components: { BasicForm, Icon },
-    emits: ['update'],
-    setup(_, { emit }) {
+    props: {
+      editdata: {
+        type: Object,
+        default: () => {},
+      },
+    },
+    emits: ['update', 'editdata'],
+    setup(props, { emit }) {
       let ggList = reactive({
         goodsNumber: 1,
         specsNumber: 1,
@@ -46,6 +80,9 @@
         },
       });
       let specsObj = ref({});
+      onMounted(() => {
+        initialize();
+      });
       const addSchemas = (number = ggList.specsNumber, val = 1, type = true) => {
         console.log('addButlist', number + '_' + val, ggList);
         let parentList: FormSchema[] = [
@@ -131,20 +168,65 @@
         console.log('parentList', type, concatList, 'list', list);
         return type ? concatList : list;
       };
-      const { createMessage } = useMessage();
       const [
         register,
-        { setProps, removeSchemaByFiled, appendSchemaByField, validate, getFieldsValue },
+        {
+          setProps,
+          setFieldsValue,
+          removeSchemaByFiled,
+          appendSchemaByField,
+          validate,
+          getFieldsValue,
+        },
       ] = useForm({
         labelWidth: 120,
         schemas: addSchemas(ggList.specsNumber, ggList.goodsNumber, true),
         baseColProps: {
           span: 16,
         },
-        actionColOptions: {
-          span: 12,
-        },
       });
+      function initialize() {
+        //初始化组装数据
+        let goodsgg = [],
+          setVlaue: {};
+        if (props.editdata.guigeArr) {
+          let guigeArr = JSON.parse(props.editdata.guigeArr);
+          guigeArr.map((ele, index) => {
+            if (index == 0) {
+              if (ele.val.length == 1) {
+                //不需要新增form item 可直接赋值
+                setVlaue = {
+                  ...setVlaue,
+                  name_1: ele.specificationId,
+                  goodsSn_1_1: ele.val[0].name,
+                  picUrl_1_1: [ele.val[0].picUrl],
+                };
+              } else {
+                //新增一个属性值item
+                setVlaue[`name_${index}`] = ele.specificationId;
+                for (var valIndex = 1; valIndex < ele.val.length; valIndex++) {
+                  addBut(`add_${valIndex}`);
+                  setVlaue[`goodsSn_${index}_${valIndex}`] = ele.val[valIndex].name;
+                  setVlaue[`picUrl_${index}_${valIndex}`] = ele.val[valIndex].picUrl;
+                }
+              }
+            } else {
+              setVlaue[`name_${index}`] = ele.specificationId;
+              for (var valIndex = 1; valIndex < ele.val.length; valIndex++) {
+                addBut(`add_${valIndex}`);
+                setVlaue[`goodsSn_${index}_${valIndex}`] = ele.val[valIndex].name;
+                setVlaue[`picUrl_${index}_${valIndex}`] = ele.val[valIndex].picUrl;
+              }
+            }
+            setFieldsValue(setVlaue);
+            console.log('index', index, ele, setVlaue);
+          });
+          console.log('初始化数据', guigeArr, 'props', props.editdata, goodsgg);
+        }
+      }
+      function setForm() {
+        0;
+      }
       function del(field) {
         let number = Number(field.split('_')[0]);
         let item = Number(field.split('_')[1]);
@@ -183,19 +265,9 @@
         let goodsNumber = ggList.goodsNumber;
         let specsNumber = ggList.specsNumber;
         if (typeof val == 'string') {
-          console.log('addBut');
           let number = Number(val.split('_')[1]);
           let { value, list } = ggList.list[number];
           value++;
-          console.log(
-            'addBut',
-            list,
-            value,
-            'number',
-            number,
-            'ggList.goodsNumber.list',
-            ggList.list[number].value,
-          );
           list.push(value);
           let filed = number + '_' + ggList.list[number].value;
           ggList.list[number] = {
@@ -203,7 +275,6 @@
             list,
           };
           let listSchemas = addSchemas(number, goodsNumber + 1, false).reverse();
-          console.log('addButlist', filed, list, ggList);
           listSchemas.map((ele) => {
             appendSchemaByField(ele, filed);
           });
@@ -216,7 +287,6 @@
             list: [1],
           };
           let list = addSchemas(specsNumber, 1, true);
-          console.log('addSchemasList', list, await getFieldsValue());
           list.map((ele) => {
             appendSchemaByField(ele, '');
           });
@@ -251,19 +321,26 @@
       async function handleSubmit() {
         let data = await validate();
         let getData = await getFieldsValue();
-        let goodsSpecificationList = [],
-          productList = [];
-        console.log('ggList', ggList.list, data);
-        for (let index = 0; index < ggList.specsNumber; index++) {
-          let ele = ggList.list[index + 1];
-          let name = getData[`name_${index + 1}`];
-          let val = [];
+        let goodsSpecificationList: EditDataType[] = [],
+          productList: ProductListItem[] = [];
+        console.log('ggList', ggList.list, data, ggList.specsNumber);
+        for (let index = 1; index < ggList.specsNumber + 1; index++) {
+          let ele = ggList.list[index];
+          let name = getData[`name_${index}`];
+          let val: valList[] = [];
           ele.list.map((element) => {
-            console.log('element', getData, `picUrl_${index + 1}_${element}`);
+            console.log('element', getData, `picUrl_${index}_${element}`);
             val.push({
-              name: getData[`goodsSn_${index + 1}_${element}`],
-              picUrl: getData[`picUrl_${index + 1}_${element}`][0],
-              uuid: `${index + 1}-${element}`,
+              name: getData[`goodsSn_${index}_${element}`],
+              picUrl: getData[`picUrl_${index}_${element}`][0],
+              uuid: `${index}-${element}`,
+            });
+            productList.push({
+              goodsNumber: '',
+              goodsSn: '',
+              marketPrice: '',
+              retailPrice: '',
+              uuidLink: `${index}_${element}`,
             });
           });
           console.log('ggList', val, specsObj.value);
@@ -273,22 +350,11 @@
             val,
           };
           goodsSpecificationList.push(item);
-          productList.push({
-            goodsNumber: null,
-            goodsSn: null,
-            marketPrice: null,
-            retailPrice: null,
-            uuidLink: '1-1',
-          });
         }
         console.log('update', { goodsSpecificationList, productList });
         emit('update', { goodsSpecificationList, productList });
-        createMessage.success('click search,values:' + JSON.stringify(values));
+        // createMessage.success('click search,values:' + JSON.stringify(values));
       }
-
-      // const submitButtonOptions = { type: 'default', text: '生成规格明细' } as UseButtonProps;
-      // const resetButtonOptions = { text: '添加规格项目', onClick: addBut } as UseButtonProps;
-
       return {
         register,
         handleSubmit,
@@ -301,6 +367,8 @@
         showBut,
         getData,
         specsObj,
+        initialize,
+        setForm,
       };
     },
   });

+ 26 - 3
src/views/product/productDrawer.vue

@@ -9,7 +9,7 @@
   >
     <BasicForm @register="registerForm">
       <template #goodsgg>
-        <goodsSpecs @update="setEditData" ref="goodsRef" />
+        <goodsSpecs :key="editData.id" :editdata="editData" @update="setEditData" ref="goodsRef" />
       </template>
       <template #detailed>
         <table class="detailed">
@@ -62,8 +62,21 @@
   interface EditDataType {
     categoryName: string;
     productList: ProductListItem[];
+    goodsSpecificationList?: goodsSpecificationList[];
+    id: number;
+  }
+  interface goodsSpecificationList {
+    brandName: string;
+    goodsId?: number;
+    goodsName: string;
+    id?: number;
+    picUrl: string;
+    specificationId?: number;
+    specificationName: string;
+    uuid: string;
+    val?: string | number | [];
+    value: string;
   }
-
   interface ProductListItem {
     uuidLink: string;
     goodsNumber?: string;
@@ -85,6 +98,7 @@
       let editData = ref<EditDataType>({
         categoryName: '',
         productList: [],
+        id: 0,
       });
 
       const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
@@ -153,6 +167,10 @@
         }
       });
       function setEditData(value) {
+        editData.value = {
+          ...editData.value,
+          ...value,
+        };
         console.log('setEditData', value);
       }
       const getTitle = computed(() => (!unref(isUpdate) ? '新增商品' : '编辑商品'));
@@ -161,9 +179,14 @@
         try {
           const values = await validate();
           console.log('values', values);
-          let subData = await UpdateSaleApi({
+          let apiData = {
             ...editData.value,
             ...values,
+          };
+          let subData = await UpdateSaleApi({
+            ...apiData,
+            primaryPicUrl: apiData.primaryPicUrl[0],
+            listPicUrl: apiData.listPicUrl[0],
           });
           console.log('setFieldsValue', subData);
           setDrawerProps({ confirmLoading: true });