Browse Source

feat:供应商支持分类

snow 7 months ago
parent
commit
4ce6ee120e

+ 7 - 0
src/api/purchaseIn/workbench/index.ts

@@ -0,0 +1,7 @@
+import { http } from "/@/utils/http";
+import { loadEnv } from "@build/index";
+const { VITE_PROXY_DOMAIN_REAL, VITE_PROXY_USER_REAL } = loadEnv();
+const userAPi = VITE_PROXY_DOMAIN_REAL;
+const yewuApi = VITE_PROXY_USER_REAL + "/admin/";
+
+export const httpList = (data: object): any => { return http.request("post", `${yewuApi}crontablist`, { data }); };

+ 5 - 9
src/api/serviceParam/supplierCat/index.ts

@@ -8,18 +8,14 @@ export const httpList = (data: object): any => {
   return http.request("post", `${yewuApi}supplierCatList`, { data });
 };
 
-export const httpAdd = (data: object): any => {
-  return http.request("post", `${yewuApi}keepbcreate`, { data });
-};
-
-export const httpDetail= (data: object): any => {
-  return http.request("post", `${yewuApi}keepbinfo`, { data });
+export const httpCatList = (data: object): any => {
+  return http.request("post", `http://project.test241.wanyuhengtong.com/admin/catplist`, { data });
 };
 
-export const httpUpdate = (data: object): any => {
-  return http.request("post", `${yewuApi}keepbedit`, { data });
+export const httpAdd = (data: object): any => {
+  return http.request("post", `${yewuApi}supplierCatAdd`, { data });
 };
 
 export const httpStatus = (data: object): any => {
-  return http.request("post", `${yewuApi}keepbstatus`, { data });
+  return http.request("post", `${yewuApi}supplierCatStatus`, { data });
 };

+ 2 - 2
src/components/PageContent/src/types.ts

@@ -14,9 +14,9 @@ import PageContent from "./page-content";
  */
 export interface ContentConfig {
   statusListProp?:string
-  superForceAction: boolean
+  superForceAction?: boolean
   title: string;
-  transformCompany: boolean;
+  transformCompany?: boolean;
   maxHeight?: string;
   showTitle?: boolean;
   apis: ContentApis | any;

+ 21 - 25
src/hooks/core/useTask.ts

@@ -32,43 +32,39 @@ interface TaskOptions<D>{
 }
 
 export function useTask<D = any>({ initialData, root = true, success }: TaskOptions<D> = {  root: true } ) {
-  const data = ref<D>(initialData);
-  const isError = ref(false);
+  const error = ref(false);
   const loading = ref(false);
-  const responseHandle = useResponseHandle();
+  const { logout } = useNav();
+  const data = ref<D>(initialData);
 
-  const setData = (_data: D) => (data.value = _data as any);
 
   function run(promise: Promise<IDataType<D>>) {
     loading.value = true
-
-
     return promise.then(response => {
       loading.value = false
-      const { code, message, data } = response;
-      if (String(code) !== "0") {  isError.value = true;  }
-      responseHandle({
-        code,
-        message,
-        handler: () => {
-          isError.value = false;
-          setData(root ? data : (data as any).list);
-          success && success(unref(data));
-        }
-      });
+      let { code, message } = response
+      code = Number(code)
+      if(code === 0){
+        error.value = false
+        data.value = root ? response.data : (response.data as unknown as any).list
+        success && success(unref(response.data));
+      }else if(code >= 100 && code <= 140){
+        logout()
+        error.value = true
+      }else{
+        ElMessage.warning(message)
+        error.value = true
+      }
     });
   }
 
-  return reactive({
-    run,
-    data,
-    setData,
-    loading,
-    isError
-  })
+  return reactive({ run, data, error, loading })
 }
 
 
 export function useTasks(...tasks: ReturnType<typeof useTask>[]){
-  return computed(() => tasks.some(task => task.loading))
+  return computed(() => ({
+    loading: tasks.some(task => task.loading),
+    error: tasks.some(task => task.error)
+  }))
 }

+ 94 - 0
src/views/purchaseIn/workbench/index.vue

@@ -0,0 +1,94 @@
+<script setup lang="ts">
+import { httpList } from "/@/api/purchaseIn/workbench";
+import { useTask } from "/@/hooks/core"
+
+const bidTask = useTask({ initialData: [] })
+bidTask.run(httpList({ size: 1000, page: 1, status: '1' }))
+</script>
+
+<template>
+  <div class="bg-white" v-loading="bidTask.loading">
+    <ElRow class="mb-[10px]" :gutter="10">
+      <ElCol :span="8">
+        <ElSelect style="width:100%" placeholder="排序">
+          <ElOption />
+        </ElSelect>
+      </ElCol>
+    </ElRow>
+
+    <ElScrollbar style="height: calc(100vh - 120px)">
+      <ul class="flex flex-wrap border-1 border-[#ccc]">
+        <li 
+          class="bid-item w-[20%] border-1 border-dashed border-[#ccc] mb-[-1px] ml-[-1px] p-[5px] cursor-pointer" 
+          v-for="item in bidTask.data.list" 
+          :key="item.infoNo"
+          style="font-size: 12px"
+        >
+          <div class="flex justify-between mb-[2px]">
+            <p>任务编号:</p>
+            <p>{{ item.infoNo }}</p>
+          </div>
+
+          <div class="flex justify-between mb-[2px]">
+            <p>截止时间:</p>
+            <p>{{ item.endtime }}</p>
+          </div>
+
+          <div class="flex justify-between mb-[2px]">
+            <p>商品分类:</p>
+            <p>{{ item.cat_name }}</p>
+          </div>
+          
+          <div class="flex justify-between mb-[2px]">
+            <p>商品品牌:</p>
+            <p>{{ item.brand_name }}</p>
+          </div>
+          
+          <div class="flex justify-between mb-[2px]">
+            <p class="min-width:100px">商品名称:</p>
+            <div class="flex items-center">
+              <ElImage  
+                v-if="item.good_img" 
+                :src="item.good_img" 
+                :preview-src-list="[item.good_img]" 
+                style="width:20px;height:20px;"
+              />
+              <p>{{ item.good_name }}</p>
+            </div>
+          </div>
+
+          <div class="flex justify-between mb-[2px]">
+            <p>商品预算:</p>
+            <p>
+              {{ item.original_price }}元 / {{ item.num }}
+            </p>
+          </div>
+
+          <div class="flex justify-between mb-[2px]">
+            <p>业务公司编码:</p>
+            <p>{{ item.companyNo }}</p>
+          </div>
+
+          <div class="flex justify-between mb-[2px]">
+            <p>业务公司名称:</p>
+            <p>{{ item.companyName }}</p>
+          </div>
+          
+          <div class="flex justify-between mb-[2px]">
+            <p>所属平台:</p>
+            <p>{{ item.platform_name }}</p>
+          </div>
+        </li>
+      </ul>
+    </ElScrollbar>
+ </div>
+</template>
+
+
+<style lang="scss" scoped>
+.bid-item {
+  div {
+
+  }
+}
+</style>

+ 5 - 1
src/views/sellOut/zixunOrder/components/activityProductModal.vue

@@ -133,10 +133,14 @@ async function onSubmit(){
             <ElInput v-model="data.remark" placeholder="产品备注" />
           </ElFormItem>
         </ElCol>
+
         <ElCol :span="12">
-          <ElFormItem label="商品名称" prop="good_name">
+          <ElFormItem 
+            label="商品名称" 
+            prop="good_name">
             <ElInput v-model="data.good_name"  placeholder='商品名称' />
           </ElFormItem>
+          
           <SpecForm v-model:specs="data.specs" />
         </ElCol>
       </ElRow>

+ 2 - 2
src/views/sellOut/zixunOrder/components/baseForm.vue

@@ -80,10 +80,10 @@ function handleAreaChange(row){
   areaInfo.name = row.search_name
 }
 
-watch(() => data.value.is_project,() => {
-  selection.value = []
+watch(() => data.value.is_project, () => {
   data.value.platform_code = ""
   data.value.khNo = ""
+  selection.value = []
 }, {
   immediate: true
 })

+ 6 - 8
src/views/sellOut/zixunOrder/index.vue

@@ -1,26 +1,24 @@
 <script setup lang="ts">
 import { ref } from "vue";
-import contentConfig from "./config/content.config";
 import searchConfig from "./config/search.config";
+import contentConfig from "./config/content.config";
 import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
 import { useRouter } from "vue-router"
 
 const PageName = "zixunOrder";
 const instance = ref<any>(null);
-
-const hooks: PageHooks = {
-  pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
-};
+const hooks: PageHooks = { pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig) };
 
 const router = useRouter()
 
+
 const events: PageEvents = {
   content: {
     create: () => router.push('/sellOut/zixunOrderDetail'),
-    preview: _data => { },
-    update: _data => { }
+    update: () => router.push('/sellOut/zixunOrderDetail?id=&type=update'),
+    preview: () => router.push('/sellOut/zixunOrderDetail?id=&type=preview')
   }
-};
+}
 </script>
 
 <template>

+ 2 - 2
src/views/serviceParam/business/cpns/modal.vue

@@ -61,7 +61,7 @@ const enterpriseCreateTask = useTask({ success })
 const enterpriseUpdateTask = useTask({ success })
 
 
-const loading = useTasks(
+const taskState = useTasks(
   organizeCreateTask,
   organizeUpdateTask, 
   enterpriseUpdateTask,
@@ -261,7 +261,7 @@ watch(() => visible.value, (visible) => {
       <div class="w-full flex justify-end">
         <ElButton 
           type="primary" 
-          :loading="loading" 
+          :loading="taskState.loading" 
           @click="onSubmit"
         >保存</ElButton>
       </div>

+ 2 - 2
src/views/serviceParam/supplier/base-form.vue

@@ -123,7 +123,7 @@ const supplierInfoTask = useTask({
 const supplierCreateTask = useTask({ success: () =>  router.push('/supplierSettings/supplier')})
 const suppierUpdateTask = useTask({ success:() =>  supplierInfoTask.run(httpInfo({ code: route.query.id })) })
 
-const loading = useTasks(supplierCreateTask, suppierUpdateTask)
+const taskState = useTasks(supplierCreateTask, suppierUpdateTask)
 
 async function onSubmit() {
   try {
@@ -324,7 +324,7 @@ route.query.id && supplierInfoTask.run(httpInfo({ code: route.query.id }))
 
       <ElCol :span="24">
         <div class="flex w-full justify-end">
-          <ElButton @click="onSubmit" type="primary" :loading="loading">保 存</ElButton>
+          <ElButton @click="onSubmit" type="primary" :loading="taskState.loading">保 存</ElButton>
         </div>
       </ElCol>
     </ElRow>

+ 3 - 15
src/views/serviceParam/supplierBrand/config/search.config.ts

@@ -1,24 +1,12 @@
 import { FormConfig } from "/@/components/PageSearch";
-import { statusOptions } from "/@/utils/details/_purchase/orderRecord";
 
 const searchFormConfig: FormConfig = {
   formItems: [
     {
-      field: "status",
-      type: "select",
-      options: statusOptions,
-      placeholder:'状态'
+      field: "gyscode",
+      type: "supplier-query",
+      placeholder:'供应商'
     },
-    {
-      type: "input",
-      field: "channel_name",
-      placeholder:'渠道名称'
-    },
-    {
-      type: "input",
-      field: "apply_name",
-      placeholder:'创建人'
-    }
   ]
 };
 

+ 2 - 2
src/views/serviceParam/supplierBrand/modal.vue

@@ -64,7 +64,7 @@ function success(){
 
 const supportCreateTask = useTask({ success })
 const supportUpdateTask = useTask({ success })
-const loading = useTasks(supportCreateTask, supportUpdateTask)
+const taskState = useTasks(supportCreateTask, supportUpdateTask)
 
 watch(() => props.visible, (visible) => {
   if(!visible) { return }
@@ -169,7 +169,7 @@ async function onSubmit(){
 
       <ElFormItem>
         <div class="w-full flex justify-end">
-          <ElButton type="primary" :loading="loading" @click="onSubmit">提交</ElButton>
+          <ElButton type="primary" :loading="taskState.loading" @click="onSubmit">提交</ElButton>
         </div>
       </ElFormItem>
     </ElForm>

+ 74 - 0
src/views/serviceParam/supplierCat/category-modal.vue

@@ -0,0 +1,74 @@
+<script setup lang="ts">
+import { ref , watch } from "vue"
+import { httpCatList } from "/@/api/serviceParam/supplierCat"
+import { useVModel } from "@vueuse/core"
+import { useTask } from "/@/hooks/core"
+
+import { ElMessage } from "element-plus"
+
+
+const initialParameter = { page: 1, size: 10,  level: 3, total: 0 , search: '', pid: '' }
+const props = defineProps<{ visible: boolean }>()
+const emit = defineEmits(['change'])
+
+const selection = ref<any[]>([])
+const parameter = ref({ ...initialParameter })
+const visible = useVModel(props, 'visible')
+const categoryTask = useTask({ initialData: [], success(data: any){ parameter.value.total = data.count }})
+const requestCategorylist = () => categoryTask.run(httpCatList(parameter.value))
+
+function onSubmit(){
+  if(selection.value.length === 0){
+    ElMessage.warning('至少选择一个分类')
+    return
+  }
+
+  visible.value = false
+  emit('change', selection.value)
+}
+
+watch(() => visible.value, () => {
+  if(!visible.value) { return }
+  requestCategorylist()
+})
+</script>
+
+<template>
+  <ElDialog v-model="visible" title="添加分类" center @close="parameter = {...initialParameter}">
+    <div class="flex flex-col" v-loading="categoryTask.loading">
+      <div class="flex mb-[10px]">
+        <ElInput placeholder="分类名" v-model="parameter.search" clearable @change="requestCategorylist" />
+      </div>
+
+      <ElTable 
+        border 
+        size="small" 
+        :data="categoryTask.data.list"
+        @selection-change="val => selection = val"
+      >
+        <ElTableColumn type="selection" width="40px" />
+        <ElTableColumn type="index" width="50px" label="序号" />
+        <ElTableColumn prop="search" label="分类名称" show-overflow-tooltip />
+      </ElTable>
+
+       <div class="flex justify-between mt-[10px]">
+          <ElPagination
+            v-model:current-page="parameter.page"
+            v-model:page-size="parameter.size"
+            @size-change="requestCategorylist"
+            @current-change="requestCategorylist"
+            :page-sizes="[10, 30, 50, 100]"
+            layout="sizes, prev, pager, next"
+            :total="parameter.total"
+            :size="'small'"
+            background
+          />
+
+          <ElButton 
+            type="primary" 
+            @click="onSubmit"
+          >保存</ElButton>
+        </div>
+      </div>
+  </ElDialog>
+</template>

+ 2 - 5
src/views/serviceParam/supplierCat/config/_options.ts

@@ -10,9 +10,6 @@ export const longOptions = [
 
 
 export const rules = {
-  gyscode: [ { required: true, message: '供应商不能为空', trigger: 'blur' } ],
-  brand_id: [{ required: true, message: '请选择支持品牌', trigger: 'blur' }],
-  long: [{ required: true, message: '请选择授权类型', trigger: 'blur' }],
-  starttime: [{ required: true, message: '请选择授权开始日期', trigger: 'blur' }],
-  endtime: [ { required: true, message: '请选择授权结果日期', trigger: 'blur' }]
+  supplierNo: [ { required: true, message: '供应商不能为空', trigger: 'blur' } ],
+  endtime: [ { required: true, message: '供应商支持分类不能为空', trigger: 'blur' }]
 }

+ 4 - 8
src/views/serviceParam/supplierCat/config/content.config.ts

@@ -2,7 +2,7 @@ import { httpList, httpStatus } from "/@/api/serviceParam/supplierCat";
 
 import { h } from "vue";
 import { ContentConfig } from "/@/components/PageContent";
-import { ElImage, ElTag } from "element-plus";
+import { ElTag } from "element-plus";
 
 const columns = [
   { type: "selection", fixed: "left", _noset_: true },
@@ -46,7 +46,7 @@ const columns = [
     prop: "",
     label: "操作",
     fixed: "right",
-    width: "140px",
+    width: "50px",
     _noset_: true,
     slot: "operation",
   },
@@ -55,12 +55,8 @@ const columns = [
 const contentConfig: ContentConfig = {
   title: "公司账号角色查询",
   columns,
-  apis: {
-    httpList,
-    httpAdd: true,
-    httpStatus,
-    httpUpdate: true
-  }
+  notPreview: true,
+  apis: { httpList, httpStatus: ({ id, status }) => httpStatus({ id: [id], status }), httpAdd: true }
 };
 
 export default contentConfig;

+ 0 - 66
src/views/serviceParam/supplierCat/config/modal.config.ts

@@ -1,66 +0,0 @@
-import { longOptions } from "./_options";
-import { ModalConfig } from "/@/components/PageModal/src/types";
-
-const modalConfig: ModalConfig = {
-  title: "品牌支持",
-  support: ['brand'],
-  colLayout: { span: 24 },
-  itemStyle: {},
-  labelWidth:'120px',
-  formItems: [
-    {
-      field: "gyscode",
-      type: "supplier-query",
-      label: "供应商",
-      labelWidth: "120px",
-      placeholder: "请选择供应商",
-      rules: [{ required: true, trigger: "change", message: "请选择供应商" }]
-    },
-    {
-      field: "brand_id",
-      type: "brand-query",
-      label: "支持品牌",
-      labelWidth: "120px",
-      placeholder: "请选择支持品牌",
-      rules: [{ required: true, trigger: "change", message: "请选择支持品牌" }]
-    },
-    {
-      field:'long',
-      type: 'radio',
-      label: '授权类型',
-      options: longOptions,
-      rules: [{ required: true, trigger: "change", message: "请选择授权类型" }]
-    },
-    {
-      field: "create_timer",
-      type: "date_picker",
-      label: '授权时间',
-      otherOptions: {
-        type: "daterange",
-        startProp: "starttime",
-        endProp: "endtime",
-        startPlaceholder: "开始时间",
-        endPlaceholder: "结束时间"
-      }
-    },
-    {
-      field:'brand_book',
-      type: 'img_upload',
-      label: '授权图片',
-      options: longOptions,
-      rules: [{ required: true, trigger: "change", message: "请选择授权图片" }],
-      otherOptions: { size: 'small' }
-    },
-    {
-      field: 'remark',
-      type: 'input',
-      label: '备注',
-      placeholder:'备注',
-      otherOptions: {
-        type: 'textarea'
-      }
-    }
-  ]
-};
-
-export default modalConfig;

+ 5 - 5
src/views/serviceParam/supplierCat/config/search.config.ts

@@ -14,11 +14,11 @@ const searchFormConfig: FormConfig = {
       options: statusOptions,
       placeholder:'状态'
     },
-    {
-      type: "input",
-      field: "creater",
-      placeholder:'创建人'
-    },
+    // {
+    //   type: "input",
+    //   field: "creater",
+    //   placeholder:'创建人'
+    // },
   ]
 };
 

+ 7 - 45
src/views/serviceParam/supplierCat/index.vue

@@ -1,48 +1,16 @@
 <script setup lang="ts">
-import { ref, reactive } from "vue";
+import { ref, shallowRef } from "vue";
 import contentConfig from "./config/content.config";
 import searchConfig from "./config/search.config";
-import modalConfig from "./config/modal.config";
-import { usePageSearch, usePageModal, type PageHooks, type PageEvents } from "/@/hooks/page";
-
+import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
 import Modal from "./modal.vue"
 
-const PageName = "supplierBrand";
+const PageName = "supplierCat";
 const instance = ref<any>(null);
-const disabled = ref(false)
-const visible = ref(false)
-const data = ref<any>({})
-
-const brand = reactive({
-  visible: false,
-  type: 'create',
-  id: ''
-})
-
-const hooks: PageHooks = {
-  pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig),
-  pageModalHook: (pageContentRef) => usePageModal(pageContentRef)
-};
+const visible = shallowRef(false)
 
-const events: PageEvents = {
-  content: {
-    create(){
-      brand.id = ''
-      brand.type = 'create'
-      brand.visible = true
-    },
-    update(row){
-      brand.id = row.id
-      brand.type = 'update'
-      brand.visible = true
-    },
-    preview(row){
-      brand.id = row.id
-      brand.type = 'preview'
-      brand.visible = true
-    }
-  }
-};
+const hooks: PageHooks = { pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig) };
+const events: PageEvents = { content: { create(){ visible.value = true } }};
 </script>
 
 <template>
@@ -52,15 +20,9 @@ const events: PageEvents = {
       :events="events"
       :content-config="contentConfig"
       :search-config="searchConfig"
-      :modal-config="modalConfig"
       :get-content-ref="ref => (instance = ref)"
     />
 
-    <Modal 
-      v-model:visible="brand.visible"
-      :type="brand.type"
-      :id="brand.id"
-      @refresh="instance?.onSearch()"
-      />
+    <Modal v-model:visible="visible" @refresh="instance?.onSearch()" />
   </PageAuth>
 </template>

+ 77 - 134
src/views/serviceParam/supplierCat/modal.vue

@@ -1,118 +1,60 @@
 <script setup lang="ts">
-import {  ref , watch, computed } from "vue"
+import { ref, shallowRef } from "vue"
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks"
+import { httpAdd } from "/@/api/serviceParam/supplierCat";
+import { SupplierQuery } from "/@/components/BasicForm"
+import { rules } from "./config/_options"
 import { useVModel } from "@vueuse/core"
-import { SupplierQuery, BrandQuey } from "/@/components/BasicForm"
-import { ImageSingleUpload } from "/@/components/ImageUpload"
-import { httpDetail, httpAdd, httpUpdate } from "/@/api/serviceParam/supplierBrand";
-import { useTask, useTasks } from "/@/hooks/core"
+import { useTask } from "/@/hooks/core"
+import { ElForm, ElMessage } from "element-plus"
 
-import { rules } from "./config/_options"
-import { ElForm } from "element-plus"
+import CategoryModal from "./category-modal.vue"
 
-const initialData = { 
-  gyscode: '',  
-  brand_id: '', 
-  long: 0, 
-  authTimeLongTerm: [], 
-  authTime: '', 
-  brand_book: '', 
-  remark: '',
-  status: ''
-}
+const initialData = ():Record<string, any> => ({ 
+  supplierNo: '',
+  cat_id: []
+})
 
 const emit = defineEmits(['refresh'])
 const props = defineProps<{ visible: boolean; id: string, type: string }>()
 
+const formData = ref(initialData())
 const formRef = ref<InstanceType<typeof ElForm> | null>(null)
-const formData = ref({ ...initialData })
 
-const supplierQueryRef = ref<InstanceType<typeof SupplierQuery> | null>(null)
-const brandQueyRef = ref<InstanceType<typeof BrandQuey> | null>(null)
 const visible = useVModel(props, 'visible')
 
-const title = computed(() => {
-  const map = {
-    create : '创建',
-    preview: '查看',
-    update: '编辑'
-  }
-  return `${map[props.type]}支持品牌`
-})
-
-const supportDetailTask = useTask({ success (data){
-  const { brand_book, brand_id, brand_name, endtime, starttime, long, gyscode, remark, gysname: name, status } = data
-  formData.value = {
-    authTimeLongTerm: long === 1 ? [starttime, endtime] : [],
-    authTime: long === 0 ? starttime : '',
-    brand_book,
-    brand_id,
-    gyscode,
-    remark,
-    status,
-    long
-  }
-  supplierQueryRef.value.initialData({ name })
-  brandQueyRef.value.initialData({ brand_name })
-}})
-
+const categoryVisible = shallowRef(false)
+const supportCreateTask = useTask({ success })
 
 function success(){
   visible.value = false
   emit('refresh')
 }
 
-
-const supportCreateTask = useTask({ success })
-const supportUpdateTask = useTask({ success })
-const loading = useTasks(supportCreateTask, supportUpdateTask)
-
-watch(() => props.visible, (visible) => {
-  if(!visible) { return }
-  if(props.id){
-    supportDetailTask.run(httpDetail({ id: props.id }))
-  }else {
-    formData.value = { ...initialData }
+function handleCategoryChange(values: Record<string, any>[]){
+  const ids =  formData.value.cat_id.map(({id}) => id)
+  for(const value of values){
+    if(ids.includes(value.id)){ continue }
+    formData.value.cat_id.push({ ...value })
   }
-}, {
-  immediate: true
-})
-
+}
 
 async function onSubmit(){
-  try{
+  try {
+    console.log(1)
    await formRef.value.validate()
-   const { long, gyscode, brand_id, authTimeLongTerm, authTime, remark, status } = formData.value
-   const isCreate = !props.id
-
-   const parameters = {
-    id: props.id,
-    long,
-    gyscode,
-    brand_id,
-    remark,
-    status,
-    starttime: '',
-    endtime: '',
-    brand_book: ''
-   }
-
-   if(long === 1){
-    const [ starttime, endtime ] = authTimeLongTerm
-    parameters.starttime = starttime + ' 00:00:00'
-    parameters.endtime = endtime + ' 23:59:59'
-   }else{
-    parameters.starttime = authTime + ' 00:00:00'
-    delete parameters['endtime']
-   }
-
-   if(isCreate) {
-    delete parameters.id
-    delete parameters.status
+   const { supplierNo, cat_id } = formData.value
+  
+   if(cat_id.length === 0){
+    ElMessage.warning('至少添加一个分类')
+    return
    }
 
-   const task = isCreate ? supportCreateTask : supportUpdateTask
-   const api = isCreate ? httpAdd : httpUpdate
-   task.run(api(parameters))
+   supportCreateTask
+   .run(httpAdd({
+    supplierNo,
+    cat_id: cat_id.map(({id}) => id)
+   }))
   }catch(err){
     console.log(err)
   }
@@ -120,58 +62,59 @@ async function onSubmit(){
 </script>
 
 <template>
-  <ElDialog v-model="visible" :title="title" center>
-    <ElForm v-model="formData" v-loading="supportDetailTask.loading" label-width="100px" :rules="rules" :disabled="type === 'preview'" ref="formRef">
-      <ElFormItem label="供应商" prop="gyscode">
-        <SupplierQuery v-model="formData.gyscode" placeholder="供应商" ref="supplierQueryRef" />
-      </ElFormItem>
-      
-      <ElFormItem label="支持品牌" prop="brand_id">
-        <BrandQuey v-model="formData.brand_id" placeholder="支持品牌" ref="brandQueyRef" />
-      </ElFormItem>
-      
-      <ElFormItem label="授权类型" prop="long">
-        <ElRadioGroup v-model="formData.long">
-          <ElRadio 
-            v-for="(opt, index) in [{ value: 1, label: '非长期' }, { value: 0, label: '长期' }]" :key="index" 
-            :label="opt.value"
-          >
-            {{ opt.label }}
-          </ElRadio>
-        </ElRadioGroup>
-      </ElFormItem>
-      
-      <ElFormItem label="授权时间" prop="authTimeLongTerm" v-if="formData.long === 1">
-        <ElDatePicker
-          type="daterange"
-          value-format="YYYY-MM-DD"
-          v-model="formData.authTimeLongTerm"
-          start-placeholder="开始时间"
-          end-placeholder="开始时间"
-        />
-      </ElFormItem>
-
-      <ElFormItem label="授权时间" prop="authTime" v-else>
-        <div class="flex">
-          <ElDatePicker type="date" value-format="YYYY-MM-DD" v-model="formData.authTime" placeholder="开始时间" />
-          <p class="mx-[10px]">-</p>
-          <p>长期有效</p>
-        </div>
+  <ElDialog v-model="visible" title="新建供应商支持分类" center>
+    <ElForm 
+      label-width="100px" 
+      :rules="rules" 
+      :model="formData" 
+      :disabled="type === 'preview'" 
+      ref="formRef"
+    >
+      <ElFormItem label="供应商" prop="supplierNo">
+        <SupplierQuery v-model="formData.supplierNo" placeholder="供应商" />
       </ElFormItem>
 
-      <ElFormItem label="授权图片" prop="brand_book">
-        <ImageSingleUpload v-model="formData.brand_book" placeholder="授权图片" />
+      <ElFormItem label="商品分类">
+        <ElTable border size="small" :data="formData.cat_id">
+          <ElTableColumn label="序号" width="80px" type="index" show-overflow-tooltip />
+          <ElTableColumn label="分类名称" prop="search" show-overflow-tooltip />
+          <ElTableColumn label="操作" width="80px" show-overflow-tooltip>
+            <template #header>
+              <div class="flex justify-between">
+                <span>操作</span>
+                <ElButton 
+                  link 
+                  type="primary" 
+                  size="small" 
+                  :icon="useRenderIcon('add')" 
+                  @click="categoryVisible = true"
+                />
+              </div> 
+            </template>
+
+            <template #="{ $index }">
+              <ElButton 
+                link 
+                type="danger"
+                size="small"
+                :icon="useRenderIcon('delete')"
+                @click="formData.cat_id.splice($index, 1)"></ElButton>
+            </template>
+          </ElTableColumn>
+        </ElTable>
       </ElFormItem>
       
-      <ElFormItem label="备注" prop="remark">
-        <ElInput type="textarea" v-model="formData.remark" placeholder="备注" />
-      </ElFormItem>
 
       <ElFormItem>
         <div class="w-full flex justify-end">
-          <ElButton type="primary" :loading="loading" @click="onSubmit">提交</ElButton>
+          <ElButton type="primary" :loading="supportCreateTask.loading" @click="onSubmit">提交</ElButton>
         </div>
       </ElFormItem>
     </ElForm>
+
+    <CategoryModal 
+      v-model:visible="categoryVisible" 
+      @change="handleCategoryChange"
+    />
   </ElDialog>
 </template>