Bläddra i källkod

Merge remote-tracking branch 'origin/master' into master

# Conflicts:
#	src/api/customer/info/index.ts
#	src/views/customer/info/detail.vue
#	src/views/supplier/approve/index.vue
肖路 2 månader sedan
förälder
incheckning
69b37dd2cd

+ 113 - 0
src/api/customer/info/index.ts

@@ -205,6 +205,22 @@ export const getSupplierContractsById = (supplierId: string | number, params?: a
   });
 };
 
+/**
+ * 根据供应商ID获取合同列表(新接口)
+ * @param supplierId 供应商ID
+ * @param params 查询参数
+ */
+export const getContractListById = (supplierId: string | number, params?: any) => {
+  return request({
+    url: '/customer/supplierContract/getListbyId',
+    method: 'get',
+    params: {
+      supplierId: supplierId,
+      ...params
+    }
+  });
+};
+
 /**
  * 根据供应商ID获取银行账户信息
  * @param id 供应商ID
@@ -240,3 +256,100 @@ export const savePurchaseInfo = (data: { supplierId: string | number; productMan
     data: data
   });
 };
+/**
+ * 根据供应商ID获取地址列表
+ * @param supplierId 供应商ID
+ */
+export const getSupplierAddressById = (supplierId: string | number) => {
+  return request({
+    url: '/customer/supplieraddress/supplierAddressById',
+    method: 'get',
+    params: { supplierId }
+  });
+};
+
+/**
+ * 获取公司列表
+ */
+export const getCompanyList = () => {
+  return request({
+    url: '/system/company/list',
+    method: 'get'
+  });
+};
+
+/**
+ * 获取供应商类型列表
+ */
+export const getSupplierTypeList = (params?: any) => {
+  return request({
+    url: '/system/type/list',
+    method: 'get',
+    params: {
+
+
+      dataSource: 'youyi',
+      ...params
+    }
+  });
+};
+
+/**
+ * 获取供应商等级列表
+ */
+export const getSupplierLevelList = () => {
+  return request({
+    url: '/system/level/list',
+    method: 'get'
+  });
+};
+
+/**
+ * 获取企业规模列表
+ */
+export const getEnterpriseScaleList = () => {
+  return request({
+    url: '/customer/enterpriseScale/getlist',
+    method: 'get'
+  });
+};
+
+/**
+ * 获取行业类别列表
+ */
+export const getIndustryCategoryList = () => {
+  return request({
+    url: '/customer/industryCategory/getlist',
+    method: 'get'
+  });
+};
+
+/**
+ * 获取税率列表
+ */
+export const getTaxRateList = () => {
+  return request({
+    url: '/system/taxrate/list',
+    method: 'get'
+  });
+};
+
+/**
+ * 获取结算方式列表
+ */
+export const getSettlementMethodList = () => {
+  return request({
+    url: '/system/settlementMethod/list',
+    method: 'get'
+  });
+};
+
+/**
+ * 获取发票类型列表
+ */
+export const getInvoiceTypeList = () => {
+  return request({
+    url: '/system/invoiceType/list',
+    method: 'get'
+  });
+};

+ 119 - 0
src/api/supplier/contract/types.ts

@@ -1,12 +1,126 @@
 export interface ContractVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
   /**
    * 供应商编号
    */
   supplierNo: string;
 
+  /**
+   * 供应商名称
+   */
+  supplierName: string;
+
+  /**
+   * 合同数
+   */
+  contractNum: number;
+
+  /**
+   * 有效期内合同
+   */
+  validContract: number;
+
+  /**
+   * 失效合同
+   */
+  invalidContract: number;
+
+  /**
+   * 供应商ID
+   */
+  supplierId:  number;
+
 }
 
 export interface ContractForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+  
+  /**
+   * 供应商编号
+   */
+  supplierNo?: string;
+  
+  /**
+   * 供应商ID
+   */
+  supplierId?: string | number;
+  
+  /**
+   * 供应商名称
+   */
+  supplierName?: string;
+  
+  /**
+   * 合同编号
+   */
+  contractNo?: string;
+  
+  /**
+   * 合同名称
+   */
+  contractName?: string;
+  
+  /**
+   * 合同类型(年度合作/项目采购/其他合作)
+   */
+  contractType?: string | number;
+  
+  /**
+   * 合同生效时间
+   */
+  contractStartTime?: string;
+  
+  /**
+   * 合同到期时间
+   */
+  contractEndTime?: string;
+  
+  /**
+   * 合同状态(0待审核 1已签署 2已完成 3已到期 4审核未通过)
+   */
+  contractStatus?: string | number;
+  
+  /**
+   * 到期提醒时间(单位:天,如提前7天提醒)
+   */
+  demandReminderTime?: number;
+  
+  /**
+   * 税率
+   */
+  taxRate?: string | number;
+  
+  /**
+   * 合同金额
+   */
+  contractAmount?: string | number;
+  
+  /**
+   * 合同说明
+   */
+  contractDescription?: string;
+  
+  /**
+   * 合同附件存储地址(多个附件用分隔符区分)
+   */
+  contractAttachment?: string;
+  
+  /**
+   * 结算方式
+   */
+  settlementMethod?: string | number;
+  
+  /**
+   * 发票类型
+   */
+  invoiceType?: string | number;
 }
 
 export interface ContractQuery extends PageQuery {
@@ -16,6 +130,11 @@ export interface ContractQuery extends PageQuery {
    */
   supplierNo?: string;
 
+  /**
+   * 供应商名称
+   */
+  supplierName?: string;
+
     /**
      * 日期范围参数
      */

+ 1 - 1
src/api/supplier/supplierauthorize/index.ts

@@ -10,7 +10,7 @@ import { SupplierauthorizeVO, SupplierauthorizeForm, SupplierauthorizeQuery } fr
 
 export const listSupplierauthorize = (query?: SupplierauthorizeQuery): AxiosPromise<SupplierauthorizeVO[]> => {
   return request({
-    url: '/customer/supplierauthorize/list',
+    url: '/customer/supplierauthorize/getSupplyCapacityList',
     method: 'get',
     params: query
   });

+ 20 - 0
src/router/index.ts

@@ -102,6 +102,26 @@ export const constantRoutes: RouteRecordRaw[] = [
         meta: { title: '查看供应商', activeMenu: '/customer/info' }
       }
     ]
+  },
+  {
+    path: '/supplier',
+    component: Layout,
+    hidden: true,
+    redirect: 'noredirect',
+    children: [
+      {
+        path: 'contract/detail',
+        component: () => import('@/views/supplier/contract/detail.vue'),
+        name: 'SupplierContractDetail',
+        meta: { title: '合同信息', activeMenu: '/supplier/contract' }
+      },
+      {
+        path: 'contract/add',
+        component: () => import('@/views/supplier/contract/add.vue'),
+        name: 'SupplierContractAdd',
+        meta: { title: '创建合同', activeMenu: '/supplier/contract' }
+      }
+    ]
   }
 ];
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 169 - 169
src/views/customer/info/detail.vue


+ 43 - 14
src/views/supplier/approve/index.vue

@@ -59,32 +59,36 @@
           <el-col :span="1.5" >
            供应商信息列表
           </el-col>
-          
+
           <el-col :span="1.5">
             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['customer:info:add']">新增供应商</el-button>
           </el-col>
-          
+
         </el-row>
       </template>
 
       <el-table v-loading="loading" border :data="infoList" @selection-change="handleSelectionChange">
-        
+
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="供应商编号" align="center" prop="supplierNo" />
         <el-table-column label="供应商名称" align="center" prop="enterpriseName" />
-        <el-table-column label="供应商类型" align="center" prop="supplierType">
+
+        <el-table-column label="企业规模" align="center" prop="membershipSize">
+          <template #default="scope">
+            <span>{{ getMembershipSizeLabel(scope.row.membershipSize) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="注册时间" align="center" prop="createTime">
           <template #default="scope">
-            <span>{{ getSupplierTypeName(scope.row.supplierType) }}</span>
+            <span>{{ formatDate(scope.row.createTime) }}</span>
           </template>
         </el-table-column>
-        
-        <el-table-column label="产品经理" align="center" prop="productManager" />
-        <el-table-column label="采购人员" align="center" prop="buyer" />
+        <el-table-column label="经营类目" align="center" prop="operatingCategory" />
         <el-table-column label="供应品牌" align="center" prop="operatingBrand" />
         <el-table-column label="供应区域(省)" align="center" prop="province" />
         <el-table-column label="供应区域(市)" align="center" prop="city" />
         <el-table-column label="合同到期时间" align="center" prop="contractEndTime" />
-        
+
         <el-table-column label="合作情况" align="center" prop="cooperative">
           <template #default="scope">
             <span>{{ getCooperationStatusDisplayName(scope.row.cooperative) }}</span>
@@ -94,7 +98,7 @@
           <template #default="scope">
             <span>{{ getStatusDisplayName(scope.row.supplyStatus) }}</span>
           </template>
-        </el-table-column>  
+        </el-table-column>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button link type="primary" @click="handleView(scope.row)" v-hasPermi="['customer:info:query']">查看</el-button>
@@ -302,7 +306,7 @@
 </template>
 
 <script setup name="Info" lang="ts">
-import { getApproveList, getInfo, delInfo, addInfo, updateInfo, getProductCategoryList, getComStaffList } from '@/api/customer/info';
+import { getApproveList, getInfo, delInfo, addInfo, updateInfo, getComSupTyList, getProductCategoryList, getComStaffList, getDictData } from '@/api/customer/info';
 import { InfoVO, InfoQuery, InfoForm } from '@/api/customer/info/types';
 import { listType } from '@/api/system/type';
 import { TypeVO } from '@/api/system/type/types';
@@ -326,6 +330,7 @@ const total = ref(0);
 const supplierTypeList = ref<TypeVO[]>([]);
 const productCategoryList = ref<{ categoryNo: string; categoryName: string; id?: number }[]>([]);
 const comStaffList = ref<{ staffCode: string; staffName: string }[]>([]);
+const membershipSizeDict = ref<any[]>([]); // 企业规模字典
 // 使用枚举获取供应商状态选项,搜索框显示原始名称
 const supplierStatusOptions = getSupplierStatusOptions(true);
 console.log('供应商状态选项:', supplierStatusOptions);
@@ -641,6 +646,29 @@ const getList = async () => {
   loading.value = false;
 }
 
+/** 获取企业规模字典 */
+const getMembershipSizeDict = async () => {
+  try {
+    const res = await getDictData('membership_size');
+    membershipSizeDict.value = res.data || [];
+    console.log('企业规模字典:', membershipSizeDict.value);
+  } catch (e) {
+    console.error('获取企业规模字典失败:', e);
+  }
+};
+
+/** 根据字典值获取字典标签 */
+const getMembershipSizeLabel = (dictValue: string) => {
+  const dict = membershipSizeDict.value.find(item => item.dictValue === dictValue);
+  return dict ? dict.dictLabel : dictValue;
+};
+
+/** 格式化日期,只显示日期部分 */
+const formatDate = (dateStr: string) => {
+  if (!dateStr) return '-';
+  return dateStr.split(' ')[0]; // 只取空格前的日期部分
+};
+
 /** 取消按钮 */
 const cancel = () => {
   reset();
@@ -816,7 +844,8 @@ const getCooperationStatusDisplayName = (statusCode: number) => {
 onMounted(async () => {
   getSupplierTypeList();
   getProductCategoryData();
-  
+  getMembershipSizeDict(); // 获取企业规模字典
+
   // 直接调用人员接口测试
   try {
     console.log('开始获取人员数据...');
@@ -829,7 +858,7 @@ onMounted(async () => {
   } catch (e) {
     console.error('人员接口调用失败:', e);
   }
-  
+
   getList();
 });
 </script>
@@ -860,4 +889,4 @@ onMounted(async () => {
 :deep(.el-select .el-input__inner) {
   font-size: 15px;
 }
-</style>
+</style>

+ 1 - 0
src/views/supplier/contact/index.vue

@@ -45,6 +45,7 @@
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="主键ID" align="center" prop="id" v-if="false" />
         <el-table-column label="供应商编号" align="center" prop="supplierNo" />
+        <el-table-column label="所属供应商" align="center" prop="supplierName" />
         <el-table-column label="用户ID" align="center" prop="userNo" />
         <el-table-column label="员工姓名" align="center" prop="userName" />
         <el-table-column label="手机号" align="center" prop="phone" />

+ 374 - 0
src/views/supplier/contract/add.vue

@@ -0,0 +1,374 @@
+<template>
+  <div class="app-container">
+    <!-- 页面头部 -->
+    <div class="detail-header">
+      <el-icon class="back-icon" @click="goBack"><ArrowLeft /></el-icon>
+      <span class="header-title">创建合同</span>
+    </div>
+
+    <!-- 表单卡片 -->
+    <el-card shadow="never" class="form-card">
+      <div class="section-title">基本设置</div>
+      
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="合同名称" prop="contractName">
+              <el-input v-model="form.contractName" placeholder="请输入合同名称" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="合同类型" prop="contractType">
+              <el-select v-model="form.contractType" placeholder="请选择" style="width: 100%;">
+                <el-option 
+                  v-for="item in contractTypeDict" 
+                  :key="item.dictValue" 
+                  :label="item.dictLabel" 
+                  :value="item.dictValue" 
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="提醒时间" prop="demandReminderTime">
+              <el-input-number 
+                v-model="form.demandReminderTime" 
+                :min="1" 
+                :max="365"
+                style="width: 150px;"
+              />
+              <span style="margin-left: 10px;">天</span>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="开始时间" prop="contractStartTime">
+              <el-date-picker
+                v-model="form.contractStartTime"
+                type="date"
+                placeholder="请选择"
+                style="width: 100%;"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="截止时间" prop="contractEndTime">
+              <el-date-picker
+                v-model="form.contractEndTime"
+                type="date"
+                placeholder="请选择"
+                style="width: 100%;"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="开票类型" prop="invoiceType">
+              <el-select v-model="form.invoiceType" placeholder="请选择" style="width: 100%;">
+                <el-option 
+                  v-for="item in invoiceTypeList" 
+                  :key="item.id" 
+                  :label="item.invoiceTypeName" 
+                  :value="item.id" 
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="合同金额" prop="contractAmount">
+              <el-input v-model="form.contractAmount" placeholder="">
+                <template #append>万元</template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="税率" prop="taxRate">
+              <el-select v-model="form.taxRate" placeholder="请选择" style="width: 100%;">
+                <el-option 
+                  v-for="item in taxRateList" 
+                  :key="item.id" 
+                  :label="item.taxrateName" 
+                  :value="item.id" 
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="结算方式" prop="settlementMethod">
+              <el-select v-model="form.settlementMethod" placeholder="请选择" style="width: 100%;">
+                <el-option 
+                  v-for="item in settlementMethodList" 
+                  :key="item.id" 
+                  :label="item.settlementName" 
+                  :value="item.id" 
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="合同附件" prop="contractAttachment">
+              <el-button type="primary" plain @click="openFileManager">
+                <el-icon><Upload /></el-icon>
+                上传附件
+              </el-button>
+              <div v-if="selectedFiles.length > 0" style="margin-top: 10px;">
+                <el-tag 
+                  v-for="(file, index) in selectedFiles" 
+                  :key="index"
+                  closable
+                  @close="removeFile(index)"
+                  style="margin-right: 10px; margin-bottom: 5px;"
+                >
+                  {{ file.name }}
+                </el-tag>
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="合同说明" prop="contractDescription">
+              <el-input 
+                v-model="form.contractDescription" 
+                type="textarea" 
+                :rows="4"
+                placeholder="请选择"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="24" style="text-align: left;">
+            <el-button type="primary" @click="handleSubmit">提交</el-button>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+
+    <!-- 文件管理对话框 -->
+    <el-dialog 
+      v-model="showFileDialog" 
+      title="选择文件" 
+      width="80%" 
+      :close-on-click-modal="false"
+    >
+      <iframe 
+        :src="'/file/info'" 
+        style="width: 100%; height: 600px; border: none;"
+      />
+      <template #footer>
+        <el-button @click="showFileDialog = false">关闭</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted } from 'vue';
+import { useRoute, useRouter } from 'vue-router';
+import { ArrowLeft, Upload } from '@element-plus/icons-vue';
+import { getDictData, getTaxRateList, getSettlementMethodList, getInvoiceTypeList } from '@/api/customer/info';
+import { addContract } from '@/api/supplier/contract';
+import { ElMessage } from 'element-plus';
+
+const route = useRoute();
+const router = useRouter();
+
+const formRef = ref();
+const contractTypeDict = ref<any[]>([]);
+const taxRateList = ref<any[]>([]);
+const settlementMethodList = ref<any[]>([]);
+const invoiceTypeList = ref<any[]>([]);
+const selectedFiles = ref<any[]>([]);
+const showFileDialog = ref(false);
+
+const form = ref({
+  supplierId: '',
+  supplierNo: '',
+  supplierName: '',
+  contractNo: '',
+  contractName: '',
+  contractType: '',
+  demandReminderTime: 4,
+  contractStartTime: '',
+  contractEndTime: '',
+  contractAmount: '',
+  taxRate: '',
+  invoiceType: '',
+  settlementMethod: '',
+  contractAttachment: '',
+  contractDescription: ''
+});
+
+const rules = {
+  contractName: [
+    { required: true, message: '请输入合同名称', trigger: 'blur' }
+  ],
+  contractType: [
+    { required: true, message: '请选择合同类型', trigger: 'change' }
+  ],
+  contractStartTime: [
+    { required: true, message: '请选择开始时间', trigger: 'change' }
+  ],
+  contractEndTime: [
+    { required: true, message: '请选择截止时间', trigger: 'change' }
+  ]
+};
+
+/** 返回上一页 */
+const goBack = () => {
+  router.back();
+};
+
+/** 获取合同类型字典 */
+const getContractTypeDict = async () => {
+  try {
+    const res = await getDictData('contract_type');
+    contractTypeDict.value = res.data || [];
+  } catch (e) {
+    console.error('获取合同类型字典失败:', e);
+  }
+};
+
+/** 获取税率列表 */
+const getTaxRateData = async () => {
+  try {
+    const res = await getTaxRateList();
+    taxRateList.value = res.rows || res.data || [];
+  } catch (e) {
+    console.error('获取税率列表失败:', e);
+  }
+};
+
+/** 获取结算方式列表 */
+const getSettlementMethodData = async () => {
+  try {
+    const res = await getSettlementMethodList();
+    settlementMethodList.value = res.rows || res.data || [];
+  } catch (e) {
+    console.error('获取结算方式列表失败:', e);
+  }
+};
+
+/** 获取发票类型列表 */
+const getInvoiceTypeData = async () => {
+  try {
+    const res = await getInvoiceTypeList();
+    invoiceTypeList.value = res.rows || res.data || [];
+  } catch (e) {
+    console.error('获取发票类型列表失败:', e);
+  }
+};
+
+/** 打开文件管理页面 */
+const openFileManager = () => {
+  // 打开文件管理对话框
+  showFileDialog.value = true;
+};
+
+/** 移除文件 */
+const removeFile = (index: number) => {
+  selectedFiles.value.splice(index, 1);
+  // 更新表单中的附件字段
+  const urls = selectedFiles.value.map(f => f.url).join(',');
+  form.value.contractAttachment = urls;
+};
+
+/** 提交表单 */
+const handleSubmit = async () => {
+  formRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      try {
+        await addContract(form.value);
+        ElMessage.success('创建成功');
+        // 返回上一页
+        router.back();
+      } catch (e) {
+        console.error('创建合同失败:', e);
+        ElMessage.error('创建失败');
+      }
+    }
+  });
+};
+
+onMounted(() => {
+  // 从 URL 获取 supplierId
+  const urlParams = new URLSearchParams(window.location.search);
+  const supplierId = urlParams.get('supplierId');
+  if (supplierId) {
+    form.value.supplierId = supplierId;
+  }
+  
+  getContractTypeDict();
+  getTaxRateData();
+  getSettlementMethodData();
+  getInvoiceTypeData();
+});
+</script>
+
+<style scoped>
+.app-container {
+  background: #f0f2f5;
+  min-height: 100vh;
+  padding: 0;
+}
+
+.detail-header {
+  background: #fff;
+  padding: 16px 24px;
+  display: flex;
+  align-items: center;
+  border-bottom: 1px solid #e8e8e8;
+  margin-bottom: 16px;
+}
+
+.back-icon {
+  font-size: 18px;
+  cursor: pointer;
+  margin-right: 12px;
+  color: #666;
+}
+
+.back-icon:hover {
+  color: #409eff;
+}
+
+.header-title {
+  font-size: 16px;
+  font-weight: 500;
+  color: #333;
+}
+
+.form-card {
+  margin: 16px;
+  padding: 24px;
+}
+
+.section-title {
+  font-size: 15px;
+  font-weight: 500;
+  color: #333;
+  margin-bottom: 24px;
+  padding-bottom: 12px;
+  border-bottom: 1px solid #e8e8e8;
+}
+</style>

+ 337 - 0
src/views/supplier/contract/detail.vue

@@ -0,0 +1,337 @@
+<template>
+  <div class="app-container">
+    <!-- 页面头部 -->
+    <div class="detail-header">
+      <el-icon class="back-icon" @click="goBack"><ArrowLeft /></el-icon>
+      <span class="header-title">合同信息</span>
+    </div>
+
+    <!-- 搜索表单 -->
+    <el-card shadow="hover" class="search-card">
+      <el-form :model="queryParams" :inline="true">
+        <el-form-item label="合同编号">
+          <el-input v-model="queryParams.contractNo" placeholder="请输入合同编号" clearable style="width: 200px;" />
+        </el-form-item>
+        <el-form-item label="合同名称">
+          <el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable style="width: 200px;" />
+        </el-form-item>
+        <el-form-item label="合同类型">
+          <el-select v-model="queryParams.contractType" placeholder="请选择" clearable style="width: 150px;">
+            <el-option 
+              v-for="item in contractTypeDict" 
+              :key="item.dictValue" 
+              :label="item.dictLabel" 
+              :value="item.dictValue" 
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="开始时间">
+          <el-date-picker
+            v-model="queryParams.contractStartTime"
+            type="date"
+            placeholder="请选择"
+            style="width: 150px;"
+          />
+        </el-form-item>
+        <el-form-item label="结束时间">
+          <el-date-picker
+            v-model="queryParams.contractEndTime"
+            type="date"
+            placeholder="请选择"
+            style="width: 150px;"
+          />
+        </el-form-item>
+        <el-form-item label="合同状态">
+          <el-select v-model="queryParams.contractStatus" placeholder="请选择" clearable style="width: 150px;">
+            <el-option 
+              v-for="item in contractStatusDict" 
+              :key="item.dictValue" 
+              :label="item.dictLabel" 
+              :value="item.dictValue" 
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="Search" @click="handleSearch">搜索</el-button>
+          <el-button icon="Refresh" @click="handleReset">重置</el-button>
+          <el-button type="success" @click="handleAdd">创建合同</el-button>
+        </el-form-item>
+      </el-form>
+    </el-card>
+
+    <!-- 合同信息列表 -->
+    <el-card shadow="never" class="table-card">
+      <div class="section-title">合同信息列表</div>
+      
+      <el-table v-loading="loading" :data="contractList" border style="width: 100%">
+        <el-table-column prop="contractNo" label="合同编号" align="center" />
+        <el-table-column prop="contractName" label="合同名称" align="center" />
+        <el-table-column prop="contractType" label="合同类型" align="center">
+          <template #default="scope">
+            <span>{{ getDictLabel(contractTypeDict, scope.row.contractType) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="contractAmount" label="金额(万)" align="center">
+          <template #default="scope">
+            <span>{{ scope.row.contractAmount || '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="contractStartTime" label="起始时间" align="center">
+          <template #default="scope">
+            <span>{{ scope.row.contractStartTime ? formatDate(scope.row.contractStartTime) : '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="contractEndTime" label="截止时间" align="center">
+          <template #default="scope">
+            <span>{{ scope.row.contractEndTime ? formatDate(scope.row.contractEndTime) : '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="上传时间" align="center">
+          <template #default="scope">
+            <span>{{ scope.row.createTime ? formatDate(scope.row.createTime) : '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="contractAttachment" label="附件管理" align="center">
+          <template #default="scope">
+            <el-button v-if="scope.row.contractAttachment" link type="primary" @click="handleViewAttachment(scope.row)">查看附件</el-button>
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="contractStatus" label="状态" align="center">
+          <template #default="scope">
+            <span>{{ getContractStatusText(scope.row.contractStatus) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="120">
+          <template #default="scope">
+            
+          </template>
+        </el-table-column>
+      </el-table>
+      
+      
+    </el-card>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted, nextTick } from 'vue';
+import { useRoute, useRouter } from 'vue-router';
+import { ArrowLeft } from '@element-plus/icons-vue';
+import { getContractListById, getDictData } from '@/api/customer/info';
+
+const route = useRoute();
+const router = useRouter();
+
+const loading = ref(false);
+const contractList = ref<any[]>([]);
+
+// 数据字典
+const contractStatusDict = ref<any[]>([]);
+const contractTypeDict = ref<any[]>([]);
+
+const queryParams = ref({
+  contractNo: '',
+  contractName: '',
+  contractType: '',
+  contractStartTime: '',
+  contractEndTime: '',
+  contractStatus: ''
+});
+
+const pagination = ref({
+  pageNum: 1,
+  pageSize: 10,
+  total: 0
+});
+
+/** 返回上一页 */
+const goBack = () => {
+  router.back();
+};
+
+/** 获取合同状态字典 */
+const getContractStatusDict = async () => {
+  try {
+    const res = await getDictData('supplier_status');
+    contractStatusDict.value = res.data || [];
+  } catch (e) {
+    console.error('获取合同状态字典失败:', e);
+  }
+};
+
+/** 获取合同类型字典 */
+const getContractTypeDict = async () => {
+  try {
+    const res = await getDictData('contract_type');
+    contractTypeDict.value = res.data || [];
+  } catch (e) {
+    console.error('获取合同类型字典失败:', e);
+  }
+};
+
+/** 根据字典值获取标签 */
+const getDictLabel = (dictList: any[], dictValue: string | number) => {
+  if (!dictValue && dictValue !== 0) return '-';
+  const dict = dictList.find(item => String(item.dictValue) === String(dictValue));
+  return dict ? dict.dictLabel : dictValue;
+};
+
+/** 获取合同列表 */
+const getContractList = async () => {
+  const urlParams = new URLSearchParams(window.location.search);
+  const supplierId = urlParams.get('supplierId');
+  
+  if (!supplierId) {
+    return;
+  }
+  
+  loading.value = true;
+  try {
+    const res = await getContractListById(supplierId, {
+      ...queryParams.value
+    });
+    
+    if (Array.isArray(res.data)) {
+      contractList.value = res.data;
+      pagination.value.total = res.data.length;
+    } else {
+      contractList.value = res.rows || [];
+      pagination.value.total = res.total || 0;
+    }
+  } catch (e) {
+    console.error('获取合同列表失败:', e);
+  } finally {
+    loading.value = false;
+  }
+};
+
+/** 搜索 */
+const handleSearch = () => {
+  pagination.value.pageNum = 1;
+  getContractList();
+};
+
+/** 重置 */
+const handleReset = () => {
+  queryParams.value = {
+    contractNo: '',
+    contractName: '',
+    contractType: '',
+    contractStartTime: '',
+    contractEndTime: '',
+    contractStatus: ''
+  };
+  handleSearch();
+};
+
+/** 创建合同 */
+const handleAdd = () => {
+  const urlParams = new URLSearchParams(window.location.search);
+  const supplierId = urlParams.get('supplierId');
+  
+  router.push({
+    path: '/supplier/contract/add',
+    query: {
+      supplierId: supplierId
+    }
+  });
+};
+
+/** 查看合同 */
+const handleView = (row: any) => {
+  console.log('查看合同:', row);
+};
+
+/** 编辑合同 */
+const handleEdit = (row: any) => {
+  console.log('编辑合同:', row);
+};
+
+/** 查看附件 */
+const handleViewAttachment = (row: any) => {
+  console.log('查看附件:', row);
+};
+
+/** 格式化日期 */
+const formatDate = (date: string | Date) => {
+  if (!date) return '-';
+  const d = new Date(date);
+  return d.toISOString().split('T')[0];
+};
+
+/** 获取合同状态文本 */
+const getContractStatusText = (status: number | string) => {
+  return getDictLabel(contractStatusDict.value, status);
+};
+
+/** 分页大小改变 */
+const handleSizeChange = (size: number) => {
+  pagination.value.pageSize = size;
+  getContractList();
+};
+
+/** 当前页改变 */
+const handleCurrentChange = (page: number) => {
+  pagination.value.pageNum = page;
+  getContractList();
+};
+
+onMounted(async () => {
+  await nextTick();
+  getContractStatusDict();
+  getContractTypeDict();
+  getContractList();
+});
+</script>
+
+<style scoped>
+.app-container {
+  background: #f0f2f5;
+  min-height: 100vh;
+  padding: 0;
+}
+
+.detail-header {
+  background: #fff;
+  padding: 16px 24px;
+  display: flex;
+  align-items: center;
+  border-bottom: 1px solid #e8e8e8;
+  margin-bottom: 16px;
+}
+
+.back-icon {
+  font-size: 18px;
+  cursor: pointer;
+  margin-right: 12px;
+  color: #666;
+}
+
+.back-icon:hover {
+  color: #409eff;
+}
+
+.header-title {
+  font-size: 16px;
+  font-weight: 500;
+  color: #333;
+}
+
+.search-card {
+  margin-bottom: 16px;
+}
+
+.table-card {
+  padding: 24px;
+}
+
+.section-title {
+  font-size: 15px;
+  font-weight: 500;
+  color: #333;
+  margin-bottom: 16px;
+  padding-bottom: 12px;
+  border-bottom: 1px solid #e8e8e8;
+}
+</style>

+ 23 - 6
src/views/supplier/contract/index.vue

@@ -7,6 +7,10 @@
             <el-form-item label="供应商编号" prop="supplierNo">
               <el-input v-model="queryParams.supplierNo" placeholder="请输入供应商编号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
+            <el-form-item label="供应商名称" prop="supplierName">
+              <el-input v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+          
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -39,14 +43,13 @@
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="主键ID" align="center" prop="id" v-if="false" />
         <el-table-column label="供应商编号" align="center" prop="supplierNo" />
+        <el-table-column label="供应商名称" align="center" prop="supplierName" />
+        <el-table-column label="合同数" align="center" prop="contractNum" />
+        <el-table-column label="有效期内合同" align="center" prop="validContract" />
+        <el-table-column label="失效合同" align="center" prop="invalidContract" />
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
-            <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['supplier:contract:edit']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['supplier:contract:remove']"></el-button>
-            </el-tooltip>
+            <el-button link type="primary" @click="handleManage(scope.row)">管理</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -70,7 +73,9 @@
 <script setup name="Contract" lang="ts">
 import { listContract, getContract, delContract, addContract, updateContract } from '@/api/supplier/contract';
 import { ContractVO, ContractQuery, ContractForm } from '@/api/supplier/contract/types';
+import { useRouter } from 'vue-router';
 
+const router = useRouter();
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
 const contractList = ref<ContractVO[]>([]);
@@ -98,6 +103,7 @@ const data = reactive<PageData<ContractForm, ContractQuery>>({
     pageNum: 1,
     pageSize: 10,
     supplierNo: undefined,
+    supplierName: undefined,
     params: {
     }
   },
@@ -164,6 +170,17 @@ const handleUpdate = async (row?: ContractVO) => {
   dialog.title = "修改合同管理";
 }
 
+/** 管理按钮操作 - 路由到合同详情页 */
+const handleManage = (row: ContractVO) => {
+  router.push({
+    // name: 'SupplierContractDetail',
+    path: `/supplier/contract/detail`,
+    query: {
+      supplierId: row.supplierId
+    }
+  });
+}
+
 /** 提交按钮 */
 const submitForm = () => {
   contractFormRef.value?.validate(async (valid: boolean) => {

+ 2 - 0
src/views/supplier/contractsupply/index.vue

@@ -56,6 +56,7 @@
         <el-table-column label="主键ID" align="center" prop="id" v-if="false" />
         <el-table-column label="协议单号" align="center" prop="contractSupplyNo" />
         <el-table-column label="供应商编号" align="center" prop="supplyNo" />
+        <el-table-column label="供应商名称" align="center" prop="supplierName" />
         <el-table-column label="商品数量" align="center" prop="productNumber" />
         <el-table-column label="开始时间" align="center" prop="startTime" width="180">
           <template #default="scope">
@@ -67,6 +68,7 @@
             <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
           </template>
         </el-table-column>
+        <el-table-column label="剩余时限(天)" align="center" prop="timeRemaining" />
         <el-table-column label="状态" align="center" prop="status">
           <template #default="scope">
             <dict-tag :options="contract_supplier_status" :value="scope.row.status"/>

+ 183 - 34
src/views/supplier/none/index.vue

@@ -3,21 +3,42 @@
     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
-          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
             <el-form-item label="供应商编号" prop="supplierNo">
-              <el-input v-model="queryParams.supplierNo" placeholder="请输入供应商编号" clearable @keyup.enter="handleQuery" />
+              <el-input v-model="queryParams.supplierNo" placeholder="供应商编号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="企业名称" prop="enterpriseName">
-              <el-input v-model="queryParams.enterpriseName" placeholder="请输入企业名称" clearable @keyup.enter="handleQuery" />
-            </el-form-item>
-            <el-form-item label="供应商联系人姓名" prop="supplierName">
-              <el-input v-model="queryParams.supplierName" placeholder="请输入供应商联系人姓名" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="供应商名称" prop="enterpriseName">
+              <el-input v-model="queryParams.enterpriseName" placeholder="供应商名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item label="供应商类型" prop="supplierType">
               <el-select v-model="queryParams.supplierType" placeholder="请选择供应商类型" clearable>
                 <el-option v-for="item in supplierTypeList" :key="item.typeId" :label="item.typeName" :value="item.typeId" />
               </el-select>
             </el-form-item>
+            <el-form-item label="供应品牌" prop="operatingBrand">
+              <el-input v-model="queryParams.operatingBrand" placeholder="供应品牌" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="供应类别" prop="operatingCategory">
+              <el-select v-model="queryParams.operatingCategory" placeholder="请选择供应类别" clearable>
+                <el-option v-for="item in productCategoryList" :key="item.categoryNo" :label="item.categoryName" :value="item.categoryNo" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="供应区域" prop="province">
+              <el-input v-model="queryParams.province" placeholder="供应区域(省)" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="供应区域" prop="city">
+              <el-input v-model="queryParams.city" placeholder="供应区域(市)" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="产品经理" prop="productManager">
+              <el-select v-model="queryParams.productManager" placeholder="请选择产品经理" clearable>
+                <el-option v-for="item in comStaffList" :key="item.staffCode" :label="item.staffName" :value="item.staffCode" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="采购人员" prop="buyer">
+              <el-select v-model="queryParams.buyer" placeholder="请选择采购人员" clearable>
+                <el-option v-for="item in comStaffList" :key="item.staffCode" :label="item.staffName" :value="item.staffCode" />
+              </el-select>
+            </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -26,59 +47,81 @@
         </el-card>
       </div>
     </transition>
+
     <el-card shadow="never">
       <template #header>
         <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5" >
+           供应商信息列表
+          </el-col>
+          
           <el-col :span="1.5">
-            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:info:remove']">删除</el-button>
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['customer:info:add']">新增供应商</el-button>
           </el-col>
-          <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+          
         </el-row>
       </template>
+
       <el-table v-loading="loading" border :data="infoList" @selection-change="handleSelectionChange">
+        
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="供应商编号" align="center" prop="supplierNo" />
-        <el-table-column label="企业名称" align="center" prop="enterpriseName" />
+        <el-table-column label="供应商名称" align="center" prop="enterpriseName" />
         <el-table-column label="供应商类型" align="center" prop="supplierType">
           <template #default="scope">
             <span>{{ getSupplierTypeName(scope.row.supplierType) }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="供应商联系人姓名" align="center" prop="supplierName" />
-        <el-table-column label="供应商联系人电话" align="center" prop="supplierPhone" />
-        <el-table-column label="供应状态" align="center" prop="supplyStatus" />
-        <el-table-column label="创建时间" align="center" prop="created" width="180">
+        
+        <el-table-column label="产品经理" align="center" prop="productManager" />
+        <el-table-column label="采购人员" align="center" prop="buyer" />
+        <el-table-column label="上架产品数" align="center" prop="listedNum" />
+        <el-table-column label="供应品牌" align="center" prop="operatingBrand" />
+        <el-table-column label="供应区域(省)" align="center" prop="province" />
+        <el-table-column label="供应区域(市)" align="center" prop="city" />
+        
+        
+        
+        <el-table-column label="审核状态" align="center" prop="supplyStatus">
           <template #default="scope">
-            <span>{{ parseTime(scope.row.created, '{y}-{m}-{d}') }}</span>
+            <span>{{ getStatusDisplayName(scope.row.supplyStatus) }}</span>
           </template>
-        </el-table-column>
+        </el-table-column>  
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
-            <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:info:remove']"></el-button>
-            </el-tooltip>
+            <el-button link type="primary" @click="handleView(scope.row)" v-hasPermi="['customer:info:query']">查看</el-button>
+            <el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['customer:info:edit']">编辑</el-button>
+            <el-button link type="primary" @click="handleStopCooperation(scope.row)" v-hasPermi="['customer:info:edit']">停止合作</el-button>
           </template>
         </el-table-column>
       </el-table>
+
       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
     </el-card>
   </div>
 </template>
 
 <script setup name="None" lang="ts">
-import { listInfo, delInfo } from '@/api/customer/info';
-import { InfoVO, InfoQuery } from '@/api/customer/info/types';
+import { getInfoList, getInfo, delInfo, addInfo, updateInfo, getComSupTyList, getProductCategoryList, getComStaffList } from '@/api/customer/info';
+import { InfoVO, InfoQuery, InfoForm } from '@/api/customer/info/types';
+import { getSupplierStatusOptions, getSupplierStatusDisplayName } from '@/enums/supplierStatus';
+import { getSupplierCooperationStatusDisplayName } from '@/enums/supplierCooperationStatus';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
 const infoList = ref<InfoVO[]>([]);
+const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
 const ids = ref<Array<string | number>>([]);
+const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
-const queryFormRef = ref<ElFormInstance>();
 const supplierTypeList = ref<{ typeId: string; typeName: string }[]>([]);
+const productCategoryList = ref<{ categoryNo: string; categoryName: string; id?: number }[]>([]);
+const comStaffList = ref<{ staffCode: string; staffName: string }[]>([]);
+
+const queryFormRef = ref<ElFormInstance>();
 
 const data = reactive<{ queryParams: InfoQuery }>({
   queryParams: {
@@ -86,43 +129,63 @@ const data = reactive<{ queryParams: InfoQuery }>({
     pageSize: 10,
     supplierNo: undefined,
     enterpriseName: undefined,
-    supplierName: undefined,
-    supplyStatus: 2,
+    supplierType: undefined,
+    operatingBrand: undefined,
+    operatingCategory: undefined,
+    province: undefined,
+    city: undefined,
+    productManager: undefined,
+    buyer: undefined,
+    supplyStatus: 2, // 固定为2
     params: {}
   }
 });
 
 const { queryParams } = toRefs(data);
 
+/** 查询供应商信息列表 */
 const getList = async () => {
   loading.value = true;
-  try {
-    const res = await listInfo(queryParams.value);
-    infoList.value = res.rows;
-    total.value = res.total;
-  } catch (e) {
-    console.error('获取列表失败', e);
-  } finally {
-    loading.value = false;
-  }
+  // 确保 supplyStatus 始终为 2
+  queryParams.value.supplyStatus = 2;
+  const res = await getInfoList(queryParams.value);
+  infoList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
 }
 
+/** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
   getList();
 }
 
+/** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
+  // 重置后仍然保持 supplyStatus = 2
   queryParams.value.supplyStatus = 2;
   handleQuery();
 }
 
+/** 多选框选中数据 */
 const handleSelectionChange = (selection: InfoVO[]) => {
   ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
   multiple.value = !selection.length;
 }
 
+/** 新增按钮操作 */
+const handleAdd = () => {
+  // 新增逻辑
+}
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: InfoVO) => {
+  // 修改逻辑
+}
+
+/** 删除按钮操作 */
 const handleDelete = async (row?: InfoVO) => {
   const _ids = row?.id || ids.value;
   await proxy?.$modal.confirm('是否确认删除供应商信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
@@ -131,7 +194,45 @@ const handleDelete = async (row?: InfoVO) => {
   await getList();
 }
 
+/** 查看按钮操作 */
+const handleView = (row: InfoVO) => {
+  const router = proxy?.$router;
+  router?.push({
+    path: '/customer/info/detail',
+    query: {
+      id: row.id
+    }
+  });
+}
+
+/** 停止合作按钮操作 */
+const handleStopCooperation = async (row: InfoVO) => {
+  await proxy?.$modal.confirm('是否确认停止与供应商"' + row.enterpriseName + '"的合作?');
+  const updateData = { ...row, cooperative: 0 };
+  await updateInfo(updateData);
+  proxy?.$modal.msgSuccess("操作成功");
+  await getList();
+}
+
+/** 获取供应商类型列表 */
+const getSupplierTypeList = async () => {
+  try {
+    const res = await getComSupTyList();
+    supplierTypeList.value = res.data || res;
+  } catch (e) {
+    console.error('获取供应商类型失败', e);
+  }
+}
 
+/** 获取产品分类列表 */
+const getProductCategoryData = async () => {
+  try {
+    const res = await getProductCategoryList();
+    productCategoryList.value = res.data;
+  } catch (e) {
+    console.error('获取产品分类失败', e);
+  }
+}
 
 /** 根据typeId获取typeName */
 const getSupplierTypeName = (typeId: string) => {
@@ -139,7 +240,55 @@ const getSupplierTypeName = (typeId: string) => {
   return item ? item.typeName : typeId;
 }
 
-onMounted(() => {
+/** 根据状态码获取状态显示名称 */
+const getStatusDisplayName = (statusCode: number) => {
+  return getSupplierStatusDisplayName(statusCode);
+}
+
+/** 根据合作状态码获取合作状态显示名称 */
+const getCooperationStatusDisplayName = (statusCode: number) => {
+  return getSupplierCooperationStatusDisplayName(statusCode);
+}
+
+onMounted(async () => {
+  getSupplierTypeList();
+  getProductCategoryData();
+  
+  try {
+    const staffRes = await getComStaffList({ pageNum: 1, pageSize: 100000 });
+    comStaffList.value = staffRes.rows || [];
+  } catch (e) {
+    console.error('人员接口调用失败:', e);
+  }
+  
   getList();
 });
 </script>
+
+<style scoped>
+:deep(.el-form-item__label) {
+  text-align: left !important;
+  font-size: 16px;
+}
+
+:deep(.el-form-item) {
+  margin-right: 30px;
+  margin-bottom: 20px;
+}
+
+:deep(.el-input__wrapper) {
+  font-size: 15px;
+}
+
+:deep(.el-input__inner) {
+  font-size: 15px;
+}
+
+:deep(.el-select) {
+  font-size: 15px;
+}
+
+:deep(.el-select .el-input__inner) {
+  font-size: 15px;
+}
+</style>

+ 21 - 29
src/views/supplier/supplierauthorize/index.vue

@@ -7,13 +7,25 @@
             <el-form-item label="供应商编号" prop="supplierNo">
               <el-input v-model="queryParams.supplierNo" placeholder="请输入供应商编号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="品牌名称" prop="brandName">
+            <el-form-item label="供应商名称" prop="supplierName">
+              <el-input v-model="queryParams.supplierName" placeholder="请输入供应商编号" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="供货区域(省)" prop="province">
+              <el-input v-model="queryParams.province" placeholder="供货区域(省)" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="供货区域(市)" prop="city">
+              <el-input v-model="queryParams.city" placeholder="供货区域(市)" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="可供货品牌" prop="brandName">
+              <el-input v-model="queryParams.supplyBrand" placeholder="请输入可供货品牌" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="授权品牌" prop="brandName">
               <el-input v-model="queryParams.brandName" placeholder="请输入品牌名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item label="授权品类" prop="authorizationCategory">
               <el-input v-model="queryParams.authorizationCategory" placeholder="请输入授权品类" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="品牌授权方" prop="brandLicensor">
+            <el-form-item label="授权品牌" prop="brandLicensor">
               <el-input v-model="queryParams.brandLicensor" placeholder="请输入品牌授权方" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             
@@ -53,33 +65,13 @@
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="主键ID" align="center" prop="id" v-if="false" />
         <el-table-column label="供应商编号" align="center" prop="supplierNo" />
-        <el-table-column label="供应商ID" align="center" prop="supplierId" />
-        <el-table-column label="授权单编号" align="center" prop="authorizeNo" />
-        <el-table-column label="品牌编号" align="center" prop="brandNo" />
-        <el-table-column label="品牌名称" align="center" prop="brandName" />
-        <el-table-column label="品牌英文名称" align="center" prop="brandEnglishName" />
-        <el-table-column label="品牌LOGO图片地址" align="center" prop="brandLogo" />
-        <el-table-column label="授权类型" align="center" prop="authorizeType" />
-        <el-table-column label="授权品类" align="center" prop="authorizationCategory" />
-        <el-table-column label="品牌授权方" align="center" prop="brandLicensor" />
-        <el-table-column label="授权关系文件存储地址" align="center" prop="authorizationRelationshipFile" />
-        <el-table-column label="授权开始时间" align="center" prop="authorizationStartTime" width="180">
-          <template #default="scope">
-            <span>{{ parseTime(scope.row.authorizationStartTime, '{y}-{m}-{d}') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="授权结束时间" align="center" prop="authorizationEndTime" width="180">
-          <template #default="scope">
-            <span>{{ parseTime(scope.row.authorizationEndTime, '{y}-{m}-{d}') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="授权区域" align="center" prop="authorizedArea" />
-        <el-table-column label="品牌持有类型" align="center" prop="brandHoldType" />
-        <el-table-column label="授权层级" align="center" prop="authorizeLevel" />
-        <el-table-column label="授权审核状态" align="center" prop="authorizedStatus" />
-        <el-table-column label="授权关系文件原文件名" align="center" prop="authorizationRelationshipFileName" />
-        <el-table-column label="品牌注册人" align="center" prop="brandRegistrant" />
-        <el-table-column label="审核反馈意见" align="center" prop="reviewFeedback" />
+        <el-table-column label="供应商名称" align="center" prop="supplierName" />
+        <el-table-column label="供货区域(省)" align="center" prop="province" />
+        <el-table-column label="供货区域(市)" align="center" prop="city" />
+        <el-table-column label="供货类目" align="center" prop="supplyProCate" />
+        <el-table-column label="可供货品牌" align="center" prop="supplyBrand" />
+        <el-table-column label="有授权品牌" align="center" prop="authBrand" />
+        
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-tooltip content="修改" placement="top">

Vissa filer visades inte eftersom för många filer har ändrats