Explorar o código

新增基本资质 以及财务tab 以及供应商模块修改

hurx hai 4 días
pai
achega
fe72bf4167

+ 17 - 0
src/api/customer/contact/index.ts

@@ -61,3 +61,20 @@ export const delContact = (id: string | number | Array<string | number>) => {
     method: 'delete'
   });
 };
+
+/**
+ * 设置主联系人
+ * @param id
+ * @param isPrimaryContact 状态
+ */
+export function changeIsPrimaryContact(id: string | number, isPrimaryContact: string) {
+  const data = {
+    id,
+    isPrimaryContact
+  };
+  return request({
+    url: '/customer/contact/changeIsPrimaryContact',
+    method: 'put',
+    data: data
+  });
+}

+ 8 - 5
src/api/customer/contact/types.ts

@@ -83,6 +83,8 @@ export interface ContactVO {
    * 备注
    */
   remark?: string;
+
+  gender?: string;
 }
 
 export interface ContactForm extends BaseEntity {
@@ -160,10 +162,11 @@ export interface ContactForm extends BaseEntity {
    * 备注
    */
   remark?: string;
+
+  gender?: string;
 }
 
 export interface ContactQuery extends PageQuery {
-
   /**
    * 供应商编号
    */
@@ -194,8 +197,8 @@ export interface ContactQuery extends PageQuery {
    */
   status?: string;
 
-    /**
-     * 日期范围参数
-     */
-    params?: any;
+  /**
+   * 日期范围参数
+   */
+  params?: any;
 }

+ 17 - 0
src/api/supplier/address/index.ts

@@ -61,3 +61,20 @@ export const delAddress = (id: string | number | Array<string | number>) => {
     method: 'delete'
   });
 };
+
+/**
+ * 设置默认地址
+ * @param id
+ * @param defaultAddress 状态
+ */
+export function changeDefaultAddress(id: string | number, isSelf: string) {
+  const data = {
+    id,
+    isSelf
+  };
+  return request({
+    url: '/customer/supplieraddress/changeDefaultAddress',
+    method: 'put',
+    data: data
+  });
+}

+ 10 - 16
src/api/supplier/address/types.ts

@@ -65,9 +65,9 @@ export interface AddressVO {
   modify: string;
 
   /**
-   * 是否为自身地址(1-是, 0-否
+   * 是否为自身地址(1-否, 0-是
    */
-  isSelf: number;
+  isSelf: string;
 
   /**
    * 地址类型(例如:1-注册地址, 2-经营地址, 3-发货地址)
@@ -78,7 +78,6 @@ export interface AddressVO {
    * 地址编码
    */
   addressNo: string;
-
 }
 
 export interface AddressForm extends BaseEntity {
@@ -153,9 +152,9 @@ export interface AddressForm extends BaseEntity {
   modify?: string;
 
   /**
-   * 是否为自身地址(1-是, 0-否
+   * 是否为自身地址(1-否, 0-是
    */
-  isSelf?: number;
+  isSelf?: string;
 
   /**
    * 地址类型(例如:1-注册地址, 2-经营地址, 3-发货地址)
@@ -166,11 +165,9 @@ export interface AddressForm extends BaseEntity {
    * 地址编码
    */
   addressNo?: string;
-
 }
 
 export interface AddressQuery extends PageQuery {
-
   /**
    * 供应商ID
    */
@@ -237,9 +234,9 @@ export interface AddressQuery extends PageQuery {
   modify?: string;
 
   /**
-   * 是否为自身地址(1-是, 0-否
+   * 是否为自身地址(1-否, 0-是
    */
-  isSelf?: number;
+  isSelf?: string;
 
   /**
    * 地址类型(例如:1-注册地址, 2-经营地址, 3-发货地址)
@@ -251,11 +248,8 @@ export interface AddressQuery extends PageQuery {
    */
   addressNo?: string;
 
-    /**
-     * 日期范围参数
-     */
-    params?: any;
+  /**
+   * 日期范围参数
+   */
+  params?: any;
 }
-
-
-

+ 63 - 0
src/api/supplier/qualification/index.ts

@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { QualificationVO, QualificationForm, QualificationQuery } from '@/api/supplier/qualification/types';
+
+/**
+ * 查询供应商资质信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listQualification = (query?: QualificationQuery): AxiosPromise<QualificationVO[]> => {
+  return request({
+    url: '/customer/qualification/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询供应商资质信息详细
+ * @param id
+ */
+export const getQualification = (id: string | number): AxiosPromise<QualificationVO> => {
+  return request({
+    url: '/customer/qualification/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增供应商资质信息
+ * @param data
+ */
+export const addQualification = (data: QualificationForm) => {
+  return request({
+    url: '/customer/qualification',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改供应商资质信息
+ * @param data
+ */
+export const updateQualification = (data: QualificationForm) => {
+  return request({
+    url: '/customer/qualification',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除供应商资质信息
+ * @param id
+ */
+export const delQualification = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/customer/qualification/' + id,
+    method: 'delete'
+  });
+};

+ 186 - 0
src/api/supplier/qualification/types.ts

@@ -0,0 +1,186 @@
+export interface QualificationVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 供应商ID
+   */
+  supplierId: string | number;
+
+  /**
+   * 资质名称(对应表单“资质名称”)
+   */
+  qualificationName: string;
+
+  /**
+   * 资质级别(对应表单“资质级别”)
+   */
+  qualificationLevel: string;
+
+  /**
+   * 证件编号(对应表单“证件编号”)
+   */
+  certificateNo: string;
+
+  /**
+   * 发证机构(对应表单“发证机构”)
+   */
+  issuingAuthority: string;
+
+  /**
+   * 资质有效期-开始日期(对应表单“开始日期”)
+   */
+  startDate: string;
+
+  /**
+   * 资质有效期-结束日期(对应表单“结束日期”,长期有效时为NULL)
+   */
+  endDate: string;
+
+  /**
+   * 是否长期有效(0=否 1=是,对应表单“长期有效”复选框)
+   */
+  isLongValid: string | number;
+
+  /**
+   * 附件存储地址(对应表单“上传附件”)
+   */
+  attachmentUrl: string;
+
+  /**
+   * 附件原文件名
+   */
+  attachmentName: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+
+}
+
+export interface QualificationForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 供应商ID
+   */
+  supplierId: string | number;
+
+  /**
+   * 资质名称(对应表单“资质名称”)
+   */
+  qualificationName?: string;
+
+  /**
+   * 资质级别(对应表单“资质级别”)
+   */
+  qualificationLevel?: string;
+
+  /**
+   * 证件编号(对应表单“证件编号”)
+   */
+  certificateNo?: string;
+
+  /**
+   * 发证机构(对应表单“发证机构”)
+   */
+  issuingAuthority?: string;
+
+  /**
+   * 资质有效期-开始日期(对应表单“开始日期”)
+   */
+  startDate?: string;
+
+  /**
+   * 资质有效期-结束日期(对应表单“结束日期”,长期有效时为NULL)
+   */
+  endDate?: string;
+
+  /**
+   * 是否长期有效(0=否 1=是,对应表单“长期有效”复选框)
+   */
+  isLongValid?: string | number;
+
+  /**
+   * 附件存储地址(对应表单“上传附件”)
+   */
+  attachmentUrl?: string;
+
+  /**
+   * 附件原文件名
+   */
+  attachmentName?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+
+}
+
+export interface QualificationQuery extends PageQuery {
+
+  /**
+   * 供应商ID
+   */
+  supplierId: string | number;
+
+  /**
+   * 资质名称(对应表单“资质名称”)
+   */
+  qualificationName?: string;
+
+  /**
+   * 资质级别(对应表单“资质级别”)
+   */
+  qualificationLevel?: string;
+
+  /**
+   * 证件编号(对应表单“证件编号”)
+   */
+  certificateNo?: string;
+
+  /**
+   * 发证机构(对应表单“发证机构”)
+   */
+  issuingAuthority?: string;
+
+  /**
+   * 资质有效期-开始日期(对应表单“开始日期”)
+   */
+  startDate?: string;
+
+  /**
+   * 资质有效期-结束日期(对应表单“结束日期”,长期有效时为NULL)
+   */
+  endDate?: string;
+
+  /**
+   * 是否长期有效(0=否 1=是,对应表单“长期有效”复选框)
+   */
+  isLongValid?: string | number;
+
+  /**
+   * 附件存储地址(对应表单“上传附件”)
+   */
+  attachmentUrl?: string;
+
+  /**
+   * 附件原文件名
+   */
+  attachmentName?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+}
+
+
+

+ 43 - 0
src/views/customer/info/components/AccountTab.vue

@@ -0,0 +1,43 @@
+<template>
+  <div class="tab-content">
+    <div class="info-section">
+      <div class="section-title-row">
+        <div class="section-title-left">
+          <span class="section-title-text">付款信息</span>
+        </div>
+        <el-button v-if="!isViewMode" type="primary" icon="Plus" @click="emit('addPayment')">新增付款信息</el-button>
+      </div>
+      <el-table :data="paymentInfoList" border style="width: 100%">
+        <el-table-column prop="isture" label="是否主账号" align="center">
+          <template #default="scope">
+            <span>{{ Number(scope.row.isture) === 1 ? '是' : '否' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="bankName" label="开户银行" align="center" />
+        <el-table-column prop="bankNo" label="银行账户" align="center" />
+
+        <el-table-column label="操作" align="center" width="120">
+          <template #default="scope">
+            <el-button link type="primary" @click="emit('viewPayment', scope.row)">查看</el-button>
+            <el-button v-if="!isViewMode" link type="primary" @click="emit('editPayment', scope.row)">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineProps<{
+  paymentInfoList: any[];
+  isViewMode: boolean;
+}>();
+
+const emit = defineEmits<{
+  (e: 'addPayment'): void;
+  (e: 'viewPayment', row: any): void;
+  (e: 'editPayment', row: any): void;
+  (e: 'delete', row: any): void;
+  (e: 'change-deafult', row: any): void;
+}>();
+</script>

+ 5 - 4
src/views/customer/info/components/AddressTab.vue

@@ -8,13 +8,13 @@
         <el-button v-if="!isViewMode" icon="Plus" type="primary" @click="emit('add')">添加地址</el-button>
       </div>
       <el-table :data="addressList" border style="width: 100%">
-        <el-table-column prop="supplierNo" label="供应商编号" align="center" />
+        <!-- <el-table-column prop="supplierNo" label="供应商编号" align="center" /> -->
         <el-table-column prop="addressNo" label="地址编号" align="center" />
         <el-table-column prop="shipperName" label="姓名" align="center" />
         <el-table-column prop="shipperPhone" label="手机号码" align="center" />
-        <el-table-column prop="shippingProvincial" label="省份" align="center" />
+        <!-- <el-table-column prop="shippingProvincial" label="省份" align="center" />
         <el-table-column prop="shippingCity" label="市" align="center" />
-        <el-table-column prop="shippingCounty" label="区县" align="center" />
+        <el-table-column prop="shippingCounty" label="区县" align="center" /> -->
         <el-table-column label="详细地址" align="center">
           <template #default="scope">
             <span>{{ scope.row.shippingAddress || '-' }}</span>
@@ -23,7 +23,7 @@
         <el-table-column prop="shippingPostCode" label="邮政编码" align="center" />
         <el-table-column prop="isSelf" label="默认地址" align="center">
           <template #default="scope">
-            <span>{{ scope.row.isSelf === 1 || scope.row.isSelf === '1' ? '是' : '否' }}</span>
+            <el-switch v-model="scope.row.isSelf" active-value="0" inactive-value="1" @change="emit('change-deafult', scope.row)"></el-switch>
           </template>
         </el-table-column>
         <el-table-column label="操作" align="center" width="150">
@@ -47,5 +47,6 @@ const emit = defineEmits<{
   (e: 'add'): void;
   (e: 'edit', row: any): void;
   (e: 'delete', row: any): void;
+  (e: 'change-deafult', row: any): void;
 }>();
 </script>

+ 37 - 39
src/views/customer/info/components/BasicInfoTab.vue

@@ -30,8 +30,8 @@
                 v-model="localDetailData.businessName"
                 :disabled="isViewMode"
                 placeholder="请输入工商名称"
-                @blur="isAddMode && !isBasicInfoSaved && !isViewMode && emit('getBusinessInfo')"
-                @keyup.enter="isAddMode && !isBasicInfoSaved && !isViewMode && emit('getBusinessInfo')"
+                @blur="!isBasicInfoSaved && !isViewMode && emit('getBusinessInfo')"
+                @keyup.enter="!isBasicInfoSaved && !isViewMode && emit('getBusinessInfo')"
               />
             </el-form-item>
           </el-col>
@@ -53,17 +53,34 @@
                 style="width: 100%"
                 :disabled="isViewMode"
               >
-                <el-option v-for="level in supplierLevelOptions" :key="level.id" :label="level.supplierLevelName" :value="String(level.id)" />
+                <el-option
+                  v-for="level in supplierLevelOptions"
+                  :key="level.id"
+                  :label="`${level.supplierLevelNo} , ${level.supplierLevelName}`"
+                  :value="String(level.id)"
+                />
               </el-select>
             </el-form-item>
           </el-col>
-          <!-- <el-col :span="8">
+          <el-col :span="8">
             <el-form-item label="企业规模:" required>
-              <el-select v-model="detailData.membershipSize" placeholder="请选择" clearable filterable style="width: 100%" :disabled="isViewMode">
-                <el-option v-for="scale in enterpriseScaleOptions" :key="scale.id" :label="scale.enterpriseScaleName" :value="scale.id" />
+              <el-select
+                v-model="localDetailData.membershipSize"
+                placeholder="请选择"
+                clearable
+                filterable
+                style="width: 100%"
+                :disabled="isViewMode"
+              >
+                <el-option
+                  v-for="scale in enterpriseScaleOptions"
+                  :key="scale.id"
+                  :label="`${scale.enterpriseScaleCode} , ${scale.enterpriseScaleName}`"
+                  :value="scale.id"
+                />
               </el-select>
             </el-form-item>
-          </el-col> -->
+          </el-col>
         </el-row>
 
         <el-row :gutter="12" class="form-row">
@@ -82,7 +99,12 @@
           <el-col :span="8">
             <el-form-item label="供应商类型:" required>
               <el-select v-model="localDetailData.supplierType" placeholder="请选择" clearable filterable style="width: 100%" :disabled="isViewMode">
-                <el-option v-for="type in supplierTypeOptions" :key="type.id" :label="type.supplierTypeName" :value="type.id" />
+                <el-option
+                  v-for="type in supplierTypeOptions"
+                  :key="type.id"
+                  :label="`${type.supplierTypeNo} , ${type.supplierTypeName}`"
+                  :value="type.id"
+                />
               </el-select>
             </el-form-item>
           </el-col>
@@ -110,7 +132,7 @@
               <el-input v-model="localDetailData.mailbox" placeholder="请输入企业邮箱" :disabled="isViewMode" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+          <!-- <el-col :span="8">
             <el-form-item label="开始时间:">
               <el-date-picker
                 v-model="localDetailData.validityFromDate"
@@ -120,15 +142,15 @@
                 :disabled="isViewMode"
               />
             </el-form-item>
-          </el-col>
+          </el-col> -->
         </el-row>
 
         <el-row :gutter="12" class="form-row">
-          <el-col :span="8">
+          <!-- <el-col :span="8">
             <el-form-item label="结束时间:">
               <el-date-picker v-model="localDetailData.validityToDate" type="date" placeholder="请选择" style="width: 100%" :disabled="isViewMode" />
             </el-form-item>
-          </el-col>
+          </el-col> -->
           <el-col :span="8">
             <el-form-item label="邮政编码:" :error="postCodeError">
               <el-input v-model="localDetailData.postCode" placeholder="请输入邮政编码" @blur="onPostCodeBlur" :disabled="isViewMode" />
@@ -235,7 +257,7 @@
       </el-row>
 
       <el-row :gutter="12" class="form-row">
-        <el-col :span="8">
+        <!-- <el-col :span="8">
           <div class="form-item">
             <span class="label">营业执照:</span>
             <ImageUpload
@@ -262,36 +284,12 @@
               value-type="url"
             />
           </div>
-        </el-col>
+        </el-col> -->
         <el-col :span="8" />
       </el-row>
     </div>
 
-    <div class="info-section">
-      <div class="section-title-row">
-        <div class="section-title-left">
-          <span class="section-title-text">付款信息</span>
-        </div>
-        <el-button v-if="!isViewMode" type="primary" icon="Plus" @click="emit('addPayment')">新增付款信息</el-button>
-      </div>
-      <el-table :data="paymentInfoList" border style="width: 100%">
-        <el-table-column prop="isture" label="是否主账号" align="center">
-          <template #default="scope">
-            <span>{{ Number(scope.row.isture) === 1 ? '是' : '否' }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="bankName" label="开户银行" align="center" />
-        <el-table-column prop="bankNo" label="银行账户" align="center" />
-
-        <el-table-column label="操作" align="center" width="120">
-          <template #default="scope">
-            <el-button link type="primary" @click="emit('viewPayment', scope.row)">查看</el-button>
-            <el-button v-if="!isViewMode" link type="primary" @click="emit('editPayment', scope.row)">编辑</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-
+   
     <div class="section-title">ERP供应商信息</div>
     <el-form :model="erpSupplierInfoForm" label-width="120px" class="detail-form">
       <el-row :gutter="12" class="form-row">

+ 20 - 12
src/views/customer/info/components/ContactTab.vue

@@ -3,12 +3,12 @@
     <div class="info-section">
       <div class="section-title">业务联系人</div>
 
-      <el-form :model="contactSearchParams" :inline="true" style="margin-bottom: 20px;">
-        <el-form-item label="用户ID">
-          <el-input v-model="contactSearchParams.userNo" placeholder="用户ID" clearable style="width: 200px;" />
+      <el-form :model="contactSearchParams" :inline="true" style="margin-bottom: 20px">
+        <el-form-item label="姓名">
+          <el-input v-model="contactSearchParams.userName" placeholder="请输入姓名" clearable style="width: 200px" />
         </el-form-item>
-        <el-form-item label="员工姓名">
-          <el-input v-model="contactSearchParams.userName" placeholder="员工姓名" clearable style="width: 200px;" />
+        <el-form-item label="手机号">
+          <el-input v-model="contactSearchParams.phone" placeholder="请输入手机号" clearable style="width: 200px" />
         </el-form-item>
         <el-form-item>
           <el-button type="primary" icon="Search" @click="emit('search')">搜索</el-button>
@@ -18,17 +18,22 @@
       </el-form>
 
       <el-table v-loading="contactLoading" :data="contactList" border style="width: 100%">
-        <el-table-column prop="supplierName" label="所属供应商" align="center" />
-        <el-table-column prop="userNo" label="用户ID" align="center" />
-        
-        <el-table-column prop="userName" label="员工姓名" align="center" />
+        <!-- <el-table-column prop="supplierName" label="所属供应商" align="center" /> -->
+        <el-table-column prop="userNo" label="用户编号" align="center" />
+        <el-table-column prop="userName" label="姓名" align="center" />
         <el-table-column prop="phone" label="手机号" align="center" />
-        <el-table-column prop="roleNo" label="角色" align="center" />
         <el-table-column prop="departmentNo" label="部门" align="center" />
         <el-table-column prop="position" label="职位" align="center" />
+        <el-table-column prop="roleNo" label="角色" align="center" />
+
         <el-table-column prop="isPrimaryContact" label="主要联系人" align="center">
           <template #default="scope">
-            <span>{{ scope.row.isPrimaryContact === '1' ? '是' : '否' }}</span>
+            <el-switch
+              v-model="scope.row.isPrimaryContact"
+              active-value="0"
+              inactive-value="1"
+              @change="emit('change-primary', scope.row)"
+            ></el-switch>
           </template>
         </el-table-column>
         <el-table-column prop="isRegister" label="允许登录供应商端" align="center">
@@ -40,6 +45,7 @@
           <template #default="scope">
             <el-button link type="primary" @click="emit('view', scope.row)">查看</el-button>
             <el-button v-if="!isViewMode" link type="primary" @click="emit('edit', scope.row)">编辑</el-button>
+            <el-button v-if="!isViewMode" link type="primary" @click="emit('delete', scope.row)">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -49,7 +55,7 @@
 
 <script setup lang="ts">
 defineProps<{
-  contactSearchParams: { userNo: string; userName: string };
+  contactSearchParams: { phone: string; userName: string };
   contactList: any[];
   contactLoading: boolean;
   isViewMode: boolean;
@@ -61,5 +67,7 @@ const emit = defineEmits<{
   (e: 'add'): void;
   (e: 'view', row: any): void;
   (e: 'edit', row: any): void;
+  (e: 'delete', row: any): void;
+  (e: 'change-primary', row: any): void;
 }>();
 </script>

+ 5 - 5
src/views/customer/info/components/ContractTab.vue

@@ -75,17 +75,17 @@
             <span>{{ scope.row.contractEndTime ? formatDate(scope.row.contractEndTime) : '-' }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="上传时间" align="center">
+        <!-- <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">
+        </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="emit('viewAttachment', scope.row)">查看附件</el-button>
             <span v-else>-</span>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column prop="contractStatus" label="状态" align="center">
           <template #default="scope">
             <span>{{ getContractStatusText(scope.row.contractStatus) }}</span>
@@ -94,7 +94,7 @@
         <el-table-column label="操作" align="center" width="120">
           <template #default="scope">
             <el-button link type="primary" @click="emit('view', scope.row)">查看</el-button>
-            <el-button v-if="!isViewMode" link type="primary" @click="emit('edit', scope.row)">编辑</el-button>
+            <el-button v-if="!isViewMode" link type="primary" @click="emit('edit', scope.row)">下载</el-button>
           </template>
         </el-table-column>
       </el-table>

+ 74 - 0
src/views/customer/info/components/QualificationTab.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="tab-content">
+    <div class="info-section">
+      <div class="section-title-row">
+        <div class="section-title-left">
+          <span class="section-title-text">基本资质</span>
+        </div>
+      </div>
+
+      <!-- 资质信息列表 -->
+
+      <el-table :data="qualificationList" border style="width: 100%">
+        <el-table-column prop="qualificationName" label="资质名称" align="center" />
+
+        <el-table-column prop="qualificationLevel" label="资质级别" align="center" />
+
+        <el-table-column prop="certificateNo" label="证件编号" align="center" />
+
+        <el-table-column prop="issuingAuthority" label="发证机构" align="center" />
+
+        <el-table-column label="资质到期日" align="center">
+          <template #default="scope">
+            <span v-if="scope.row.isLongValid == 1"> {{ formatDate(scope.row.endDate) }} 长期有效 </span>
+
+            <span v-else>{{ formatDate(scope.row.endDate) }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="资质文件" align="center" min-width="300">
+          <template #default="scope">
+            <el-button v-if="scope.row.attachmentUrl" link type="primary" @click="emit('downloadQualification', scope.row)">
+              {{ scope.row.attachmentName || '下载文件' }}
+            </el-button>
+
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
+
+        <!-- <el-table-column label="操作" align="center" width="200" fixed="right">
+          <template #default="scope">
+            <el-button link type="primary" @click="emit('viewQualification', scope.row)">查看</el-button>
+          </template>
+        </el-table-column> -->
+      </el-table>
+
+      <!-- 空状态 -->
+
+      <!-- <div v-if="qualificationList.length === 0" class="empty-state">暂无资质信息</div> -->
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineProps<{
+  qualificationList: any[];
+  isViewMode: boolean;
+}>();
+
+/** 格式化日期 */
+
+const formatDate = (dateStr: string) => {
+  if (!dateStr) return '';
+
+  // 去掉时分秒,只保留日期部分
+
+  return dateStr.split(' ')[0];
+};
+
+const emit = defineEmits<{
+  (e: 'downloadQualification', row: any): void;
+  (e: 'viewQualification', row: any): void;
+  (e: 'delete', row: any): void;
+}>();
+</script>

+ 41 - 17
src/views/customer/info/components/SupplyInfoTab.vue

@@ -1,6 +1,27 @@
 <template>
   <div class="tab-content">
-    <div class="info-section">
+    <el-card shadow="hover">
+      <el-form ref="queryFormRef" :inline="true" label-width="100px">
+        <el-form-item label="类别" prop="supplierNo">
+          <el-input placeholder="" clearable />
+        </el-form-item>
+        <el-form-item label="品牌" prop="enterpriseName">
+          <el-input placeholder="" clearable />
+        </el-form-item>
+
+        <el-form-item label="资质状态" prop="buyer">
+          <el-select placeholder="" clearable> </el-select>
+        </el-form-item>
+        <el-form-item label="到期时间" prop="supplyStatus">
+          <el-date-picker></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="Search">搜索</el-button>
+          <el-button icon="Refresh">重置</el-button>
+        </el-form-item>
+      </el-form>
+    </el-card>
+    <!-- <div class="info-section">
       <div class="section-title-row">
         <div class="section-title-left">
           <span class="section-title-text">供货类目</span>
@@ -13,9 +34,9 @@
           {{ category.categoryName }}
         </el-checkbox>
       </el-checkbox-group>
-    </div>
+    </div> -->
 
-    <div class="info-section">
+    <!-- <div class="info-section">
       <div class="section-title-row">
         <div class="section-title-left">
           <span class="section-title-text">供货品牌</span>
@@ -36,9 +57,9 @@
         </el-tag>
         <span v-if="selectedBrands.length === 0" style="color: #999">暂无品牌信息</span>
       </div>
-    </div>
+    </div> -->
 
-    <div class="info-section">
+    <!-- <div class="info-section">
       <div class="section-title-row">
         <div class="section-title-left">
           <span class="section-title-text">供货区域</span>
@@ -58,44 +79,47 @@
           </template>
         </el-table-column>
       </el-table>
-    </div>
+    </div> -->
 
     <div class="info-section">
       <div class="section-title">授权详情信息列表</div>
       <el-table :data="authorizationList" border style="width: 100%">
         <el-table-column type="index" label="序号" align="center" width="80" />
-        <el-table-column prop="supplierName" label="供应商名称" align="center" />
-        <el-table-column prop="brandName" label="品牌名称" align="center" />
-        <el-table-column label="一级类" align="center">
+        <!-- <el-table-column prop="supplierName" label="供应商名称" align="center" /> -->
+        <el-table-column prop="brandName" label="名称" align="center" />
+        <el-table-column label="一级类" align="center">
           <template #default="scope">
             <span>{{ scope.row.categorysMap?.oneLevelName || '-' }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="二级类" align="center">
+        <el-table-column label="二级类" align="center">
           <template #default="scope">
             <span>{{ scope.row.categorysMap?.twoLevelName || '-' }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="三级类" align="center">
+        <el-table-column label="三级类" align="center">
           <template #default="scope">
             <span>{{ scope.row.categorysMap?.threeLevelName || '-' }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="authorizationEndTime" label="禁止时间" align="center">
+        <el-table-column prop="authorizedStatus" label="状态" align="center">
           <template #default="scope">
-            <span>{{ scope.row.authorizationEndTime ? formatDate(scope.row.authorizationEndTime) : '-' }}</span>
+            <span>{{ getAuthorizedStatusText(scope.row.authorizedStatus) }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="province" label="授权区域(省)" align="center" />
-        <el-table-column prop="city" label="授权区域(市)" align="center" />
-        <el-table-column prop="authorizedStatus" label="状态" align="center">
+        <el-table-column prop="authorizationEndTime" label="资质到期时间" align="center">
           <template #default="scope">
-            <span>{{ getAuthorizedStatusText(scope.row.authorizedStatus) }}</span>
+            <span>{{ scope.row.authorizationEndTime ? formatDate(scope.row.authorizationEndTime) : '-' }}</span>
           </template>
         </el-table-column>
+        <!-- <el-table-column prop="province" label="授权区域(省)" align="center" />
+        <el-table-column prop="city" label="授权区域(市)" align="center" /> -->
+
         <el-table-column label="操作" align="center" width="100">
           <template #default="scope">
             <el-button link type="primary" @click="handleView(scope.row)">查看</el-button>
+            <el-button link type="primary" @click="handleView(scope.row)">编辑</el-button>
+            <el-button link type="primary" @click="handleView(scope.row)">隐藏</el-button>
           </template>
         </el-table-column>
       </el-table>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 267 - 264
src/views/customer/info/detail.vue


+ 189 - 275
src/views/customer/info/index.vue

@@ -56,43 +56,49 @@
     <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-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" class="no-resize-table" @selection-change="handleSelectionChange">
-        <el-table-column label="供应商编号" align="center" prop="supplierNo" width="150" fixed="left" />
-        <el-table-column label="供应商名称" align="left" prop="enterpriseName" width="250" fixed="left" />
-        <el-table-column label="供应商类型" align="center" prop="supplierTypeName" width="150">
-        
-        </el-table-column>
-        
-        <el-table-column label="产品经理" align="center" prop="productManager" width="120" />
-        <el-table-column label="采购人员" align="center" prop="buyer" width="120" />
-        <el-table-column label="供应品牌" align="center" prop="brandName" width="200" />
+        <el-table-column label="编号" align="center" prop="supplierNo" width="150" fixed="left" />
+        <el-table-column label="名称" align="left" prop="enterpriseName" fixed="left" />
+        <el-table-column label="类型" align="center" prop="supplierTypeName" />
+        <el-table-column label="等级" align="left" prop="enterpriseScaleName" fixed="left" />
+        <el-table-column label="企业规模" align="left" prop="enterpriseScaleName" fixed="left" />
+        <el-table-column label="评价" align="left" prop="" fixed="left" />
+
+        <el-table-column label="采销经理" align="center" prop="productManager" />
+        <el-table-column label="产品专员" align="center" prop="buyer" />
+        <!-- <el-table-column label="供应品牌" align="center" prop="brandName" width="200" />
         <el-table-column label="供应区域(省)" align="left" prop="province" width="250">
           <template #default="scope">
-            <el-tooltip :content="scope.row.province" placement="top" :disabled="!scope.row.province || scope.row.province.split(',').filter(p => p.trim()).length <= 3">
+            <el-tooltip
+              :content="scope.row.province"
+              placement="top"
+              :disabled="!scope.row.province || scope.row.province.split(',').filter((p) => p.trim()).length <= 3"
+            >
               <span>{{ formatProvinceDisplay(scope.row.province) }}</span>
             </el-tooltip>
           </template>
         </el-table-column>
         <el-table-column label="供应区域(市)" align="left" prop="city" width="300">
           <template #default="scope">
-            <el-tooltip :content="scope.row.city" placement="top" :disabled="!scope.row.city || scope.row.city.split(',').filter(c => c.trim()).length <= 10">
+            <el-tooltip
+              :content="scope.row.city"
+              placement="top"
+              :disabled="!scope.row.city || scope.row.city.split(',').filter((c) => c.trim()).length <= 10"
+            >
               <span>{{ formatCityDisplay(scope.row.city) }}</span>
             </el-tooltip>
           </template>
         </el-table-column>
         <el-table-column label="合同到期时间" align="center" prop="contractEndTime" width="150" />
-        
+
         <el-table-column label="合作情况" align="center" prop="cooperative" width="120">
           <template #default="scope">
             <span>{{ getCooperationStatusDisplayName(scope.row.cooperative) }}</span>
@@ -102,23 +108,32 @@
           <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" width="250" fixed="right">
           <template #default="scope">
             <!-- 状态 0、3、4:待审核、审核未通过、待修改审核 -->
-            <template v-if="scope.row.supplyStatus === '0' || scope.row.supplyStatus === 0 || scope.row.supplyStatus === '3' || scope.row.supplyStatus === 3 || scope.row.supplyStatus === '4' || scope.row.supplyStatus === 4">
+            <template
+              v-if="
+                scope.row.supplyStatus === '0' ||
+                scope.row.supplyStatus === 0 ||
+                scope.row.supplyStatus === '3' ||
+                scope.row.supplyStatus === 3 ||
+                scope.row.supplyStatus === '4' ||
+                scope.row.supplyStatus === 4
+              "
+            >
               <el-button link type="primary" @click="handleView(scope.row)" v-hasPermi="['customer:info:query']">查看</el-button>
               <el-button link type="primary" @click="handleApprove(scope.row)" v-hasPermi="['customer:info:edit']">审核通过</el-button>
               <el-button link type="danger" @click="handleReject(scope.row)" v-hasPermi="['customer:info:edit']">驳回</el-button>
             </template>
-            
+
             <!-- 状态 1:正式供应商 -->
             <template v-else-if="scope.row.supplyStatus === '1' || scope.row.supplyStatus === 1">
               <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>
-            
+
             <!-- 状态 2:停用 -->
             <template v-else-if="scope.row.supplyStatus === '2' || scope.row.supplyStatus === 2">
               <el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['customer:info:edit']">编辑</el-button>
@@ -143,7 +158,7 @@
           <el-input v-model="form.membershipSize" placeholder="请输入人员规模" />
         </el-form-item>
         <el-form-item label="固定电话" prop="fixedPhone">
-            <el-input v-model="form.fixedPhone" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.fixedPhone" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="传真" prop="fax">
           <el-input v-model="form.fax" placeholder="请输入传真" />
@@ -197,7 +212,7 @@
           <el-input v-model="form.businessAddress" placeholder="请输入注册详细地址" />
         </el-form-item>
         <el-form-item label="营业执照图片路径" prop="businessLicense">
-            <el-input v-model="form.businessLicense" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.businessLicense" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="发票抬头" prop="invoiceHeader">
           <el-input v-model="form.invoiceHeader" placeholder="请输入发票抬头" />
@@ -221,7 +236,7 @@
           <el-input v-model="form.invoiceLandline" placeholder="请输入发票电话" />
         </el-form-item>
         <el-form-item label="供货范围" prop="scopeSupply">
-            <el-input v-model="form.scopeSupply" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.scopeSupply" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="合作方式" prop="cooperateWay">
           <el-input v-model="form.cooperateWay" placeholder="请输入合作方式" />
@@ -230,11 +245,13 @@
           <el-input v-model="form.cooperateLevel" placeholder="请输入合作等级" />
         </el-form-item>
         <el-form-item label="合同到期时间" prop="contractEndTime">
-          <el-date-picker clearable
+          <el-date-picker
+            clearable
             v-model="form.contractEndTime"
             type="datetime"
             value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择合同到期时间">
+            placeholder="请选择合同到期时间"
+          >
           </el-date-picker>
         </el-form-item>
         <el-form-item label="供应评分" prop="supplyScore">
@@ -256,10 +273,10 @@
           <el-input v-model="form.operatingCategory" placeholder="请输入经营品类" />
         </el-form-item>
         <el-form-item label="经营品牌" prop="operatingBrand">
-            <el-input v-model="form.operatingBrand" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.operatingBrand" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="其他客户" prop="otherCustomers">
-            <el-input v-model="form.otherCustomers" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.otherCustomers" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="简称" prop="shortName">
           <el-input v-model="form.shortName" placeholder="请输入简称" />
@@ -271,42 +288,38 @@
           <el-input v-model="form.ownedCompany" placeholder="请输入所属公司" />
         </el-form-item>
         <el-form-item label="创建时间" prop="created">
-          <el-date-picker clearable
-            v-model="form.created"
-            type="datetime"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择创建时间">
+          <el-date-picker clearable v-model="form.created" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择创建时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="修改时间" prop="modify">
-          <el-date-picker clearable
-            v-model="form.modify"
-            type="datetime"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择修改时间">
+          <el-date-picker clearable v-model="form.modify" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择修改时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="有效期开始时间" prop="validityFromDate">
-          <el-date-picker clearable
+          <el-date-picker
+            clearable
             v-model="form.validityFromDate"
             type="datetime"
             value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择有效期开始时间">
+            placeholder="请选择有效期开始时间"
+          >
           </el-date-picker>
         </el-form-item>
         <el-form-item label="有效期结束时间" prop="validityToDate">
-          <el-date-picker clearable
+          <el-date-picker
+            clearable
             v-model="form.validityToDate"
             type="datetime"
             value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择有效期结束时间">
+            placeholder="请选择有效期结束时间"
+          >
           </el-date-picker>
         </el-form-item>
         <el-form-item label="行号" prop="rowNo">
           <el-input v-model="form.rowNo" placeholder="请输入行号" />
         </el-form-item>
         <el-form-item label="法人身份证图片路径" prop="personImage">
-          <image-upload v-model="form.personImage"/>
+          <image-upload v-model="form.personImage" />
         </el-form-item>
         <el-form-item label="对接次数" prop="abutmentNo">
           <el-input v-model="form.abutmentNo" placeholder="请输入对接次数" />
@@ -423,9 +436,9 @@ const initFormData: InfoForm = {
   personImage: undefined,
   abutmentNo: undefined,
   cooperative: undefined
-}
+};
 const data = reactive<PageData<InfoForm, InfoQuery>>({
-  form: {...initFormData},
+  form: { ...initFormData },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
@@ -491,166 +504,61 @@ const data = reactive<PageData<InfoForm, InfoQuery>>({
     buyer: undefined,
     province: undefined,
     city: undefined,
-    params: {
-    }
+    params: {}
   },
   rules: {
-    supplierNo: [
-      { required: true, message: "供应商编号不能为空", trigger: "blur" }
-    ],
-    enterpriseName: [
-      { required: true, message: "企业名称不能为空", trigger: "blur" }
-    ],
-    membershipSize: [
-      { required: true, message: "人员规模不能为空", trigger: "blur" }
-    ],
-    supplierType: [
-      { required: true, message: "供应商类型不能为空", trigger: "change" }
-    ],
-    cooperationType: [
-      { required: true, message: "合作类型不能为空", trigger: "change" }
-    ],
-    fixedPhone: [
-      { required: true, message: "固定电话不能为空", trigger: "blur" }
-    ],
-    fax: [
-      { required: true, message: "传真不能为空", trigger: "blur" }
-    ],
-    url: [
-      { required: true, message: "网址不能为空", trigger: "blur" }
-    ],
-    postCode: [
-      { required: true, message: "邮政编码不能为空", trigger: "blur" }
-    ],
-    mailbox: [
-      { required: true, message: "邮箱不能为空", trigger: "blur" }
-    ],
-    officeProvince: [
-      { required: true, message: "办公地址-省不能为空", trigger: "blur" }
-    ],
-    officeCity: [
-      { required: true, message: "办公地址-市不能为空", trigger: "blur" }
-    ],
-    officeCounty: [
-      { required: true, message: "办公地址-区/县不能为空", trigger: "blur" }
-    ],
-    officeAddress: [
-      { required: true, message: "办公详细地址不能为空", trigger: "blur" }
-    ],
-    businessName: [
-      { required: true, message: "营业执照名称不能为空", trigger: "blur" }
-    ],
-    socialCreditCode: [
-      { required: true, message: "统一社会信用代码不能为空", trigger: "blur" }
-    ],
-    legalPersonName: [
-      { required: true, message: "法人姓名不能为空", trigger: "blur" }
-    ],
-    legalPersonId: [
-      { required: true, message: "法人身份证号不能为空", trigger: "blur" }
-    ],
-    registeredCapital: [
-      { required: true, message: "注册资本不能为空", trigger: "blur" }
-    ],
-    businessProvince: [
-      { required: true, message: "注册地址-省不能为空", trigger: "blur" }
-    ],
-    businessCity: [
-      { required: true, message: "注册地址-市不能为空", trigger: "blur" }
-    ],
-    businessCounty: [
-      { required: true, message: "注册地址-区/县不能为空", trigger: "blur" }
-    ],
-    businessAddress: [
-      { required: true, message: "注册详细地址不能为空", trigger: "blur" }
-    ],
-    businessLicense: [
-      { required: true, message: "营业执照图片路径不能为空", trigger: "blur" }
-    ],
-    invoiceType: [
-      { required: true, message: "发票类型不能为空", trigger: "change" }
-    ],
-    invoiceHeader: [
-      { required: true, message: "发票抬头不能为空", trigger: "blur" }
-    ],
-    taxpayerIdentifier: [
-      { required: true, message: "纳税人识别号不能为空", trigger: "blur" }
-    ],
-    depositaryBank: [
-      { required: true, message: "开户银行不能为空", trigger: "blur" }
-    ],
-    rowNum: [
-      { required: true, message: "行号不能为空", trigger: "blur" }
-    ],
-    bankAccounts: [
-      { required: true, message: "银行账号不能为空", trigger: "blur" }
-    ],
-    invoiceAddress: [
-      { required: true, message: "发票地址不能为空", trigger: "blur" }
-    ],
-    invoiceLandline: [
-      { required: true, message: "发票电话不能为空", trigger: "blur" }
-    ],
-    scopeSupply: [
-      { required: true, message: "供货范围不能为空", trigger: "blur" }
-    ],
-    cooperateWay: [
-      { required: true, message: "合作方式不能为空", trigger: "blur" }
-    ],
-    contractEndTime: [
-      { required: true, message: "合同到期时间不能为空", trigger: "blur" }
-    ],
-    yearSales: [
-      { required: true, message: "年销售额不能为空", trigger: "blur" }
-    ],
-    supplierName: [
-      { required: true, message: "供应商联系人姓名不能为空", trigger: "blur" }
-    ],
-    supplierPhone: [
-      { required: true, message: "供应商联系人电话不能为空", trigger: "blur" }
-    ],
-    supplierPassword: [
-      { required: true, message: "供应商登录密码不能为空", trigger: "blur" }
-    ],
-    operatingCategory: [
-      { required: true, message: "经营品类不能为空", trigger: "blur" }
-    ],
-    operatingBrand: [
-      { required: true, message: "经营品牌不能为空", trigger: "blur" }
-    ],
-    otherCustomers: [
-      { required: true, message: "其他客户不能为空", trigger: "blur" }
-    ],
-    shortName: [
-      { required: true, message: "简称不能为空", trigger: "blur" }
-    ],
-    industrCategory: [
-      { required: true, message: "所属行业不能为空", trigger: "blur" }
-    ],
-    type: [
-      { required: true, message: "类型不能为空", trigger: "change" }
-    ],
-    ownedCompany: [
-      { required: true, message: "所属公司不能为空", trigger: "blur" }
-    ],
-    modify: [
-      { required: true, message: "修改时间不能为空", trigger: "blur" }
-    ],
-    validityFromDate: [
-      { required: true, message: "有效期开始时间不能为空", trigger: "blur" }
-    ],
-    validityToDate: [
-      { required: true, message: "有效期结束时间不能为空", trigger: "blur" }
-    ],
-    rowNo: [
-      { required: true, message: "行号不能为空", trigger: "blur" }
-    ],
-    personImage: [
-      { required: true, message: "法人身份证图片路径不能为空", trigger: "blur" }
-    ],
-    cooperative: [
-      { required: true, message: "是否合作不能为空", trigger: "blur" }
-    ]
+    supplierNo: [{ required: true, message: '供应商编号不能为空', trigger: 'blur' }],
+    enterpriseName: [{ required: true, message: '企业名称不能为空', trigger: 'blur' }],
+    membershipSize: [{ required: true, message: '人员规模不能为空', trigger: 'blur' }],
+    supplierType: [{ required: true, message: '供应商类型不能为空', trigger: 'change' }],
+    cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
+    fixedPhone: [{ required: true, message: '固定电话不能为空', trigger: 'blur' }],
+    fax: [{ required: true, message: '传真不能为空', trigger: 'blur' }],
+    url: [{ required: true, message: '网址不能为空', trigger: 'blur' }],
+    postCode: [{ required: true, message: '邮政编码不能为空', trigger: 'blur' }],
+    mailbox: [{ required: true, message: '邮箱不能为空', trigger: 'blur' }],
+    officeProvince: [{ required: true, message: '办公地址-省不能为空', trigger: 'blur' }],
+    officeCity: [{ required: true, message: '办公地址-市不能为空', trigger: 'blur' }],
+    officeCounty: [{ required: true, message: '办公地址-区/县不能为空', trigger: 'blur' }],
+    officeAddress: [{ required: true, message: '办公详细地址不能为空', trigger: 'blur' }],
+    businessName: [{ required: true, message: '营业执照名称不能为空', trigger: 'blur' }],
+    socialCreditCode: [{ required: true, message: '统一社会信用代码不能为空', trigger: 'blur' }],
+    legalPersonName: [{ required: true, message: '法人姓名不能为空', trigger: 'blur' }],
+    legalPersonId: [{ required: true, message: '法人身份证号不能为空', trigger: 'blur' }],
+    registeredCapital: [{ required: true, message: '注册资本不能为空', trigger: 'blur' }],
+    businessProvince: [{ required: true, message: '注册地址-省不能为空', trigger: 'blur' }],
+    businessCity: [{ required: true, message: '注册地址-市不能为空', trigger: 'blur' }],
+    businessCounty: [{ required: true, message: '注册地址-区/县不能为空', trigger: 'blur' }],
+    businessAddress: [{ required: true, message: '注册详细地址不能为空', trigger: 'blur' }],
+    businessLicense: [{ required: true, message: '营业执照图片路径不能为空', trigger: 'blur' }],
+    invoiceType: [{ required: true, message: '发票类型不能为空', trigger: 'change' }],
+    invoiceHeader: [{ required: true, message: '发票抬头不能为空', trigger: 'blur' }],
+    taxpayerIdentifier: [{ required: true, message: '纳税人识别号不能为空', trigger: 'blur' }],
+    depositaryBank: [{ required: true, message: '开户银行不能为空', trigger: 'blur' }],
+    rowNum: [{ required: true, message: '行号不能为空', trigger: 'blur' }],
+    bankAccounts: [{ required: true, message: '银行账号不能为空', trigger: 'blur' }],
+    invoiceAddress: [{ required: true, message: '发票地址不能为空', trigger: 'blur' }],
+    invoiceLandline: [{ required: true, message: '发票电话不能为空', trigger: 'blur' }],
+    scopeSupply: [{ required: true, message: '供货范围不能为空', trigger: 'blur' }],
+    cooperateWay: [{ required: true, message: '合作方式不能为空', trigger: 'blur' }],
+    contractEndTime: [{ required: true, message: '合同到期时间不能为空', trigger: 'blur' }],
+    yearSales: [{ required: true, message: '年销售额不能为空', trigger: 'blur' }],
+    supplierName: [{ required: true, message: '供应商联系人姓名不能为空', trigger: 'blur' }],
+    supplierPhone: [{ required: true, message: '供应商联系人电话不能为空', trigger: 'blur' }],
+    supplierPassword: [{ required: true, message: '供应商登录密码不能为空', trigger: 'blur' }],
+    operatingCategory: [{ required: true, message: '经营品类不能为空', trigger: 'blur' }],
+    operatingBrand: [{ required: true, message: '经营品牌不能为空', trigger: 'blur' }],
+    otherCustomers: [{ required: true, message: '其他客户不能为空', trigger: 'blur' }],
+    shortName: [{ required: true, message: '简称不能为空', trigger: 'blur' }],
+    industrCategory: [{ required: true, message: '所属行业不能为空', trigger: 'blur' }],
+    type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
+    ownedCompany: [{ required: true, message: '所属公司不能为空', trigger: 'blur' }],
+    modify: [{ required: true, message: '修改时间不能为空', trigger: 'blur' }],
+    validityFromDate: [{ required: true, message: '有效期开始时间不能为空', trigger: 'blur' }],
+    validityToDate: [{ required: true, message: '有效期结束时间不能为空', trigger: 'blur' }],
+    rowNo: [{ required: true, message: '行号不能为空', trigger: 'blur' }],
+    personImage: [{ required: true, message: '法人身份证图片路径不能为空', trigger: 'blur' }],
+    cooperative: [{ required: true, message: '是否合作不能为空', trigger: 'blur' }]
   }
 });
 
@@ -663,38 +571,38 @@ const getList = async () => {
   infoList.value = res.rows;
   total.value = res.total;
   loading.value = false;
-}
+};
 
 /** 取消按钮 */
 const cancel = () => {
   reset();
   dialog.visible = false;
-}
+};
 
 /** 表单重置 */
 const reset = () => {
-  form.value = {...initFormData};
+  form.value = { ...initFormData };
   infoFormRef.value?.resetFields();
-}
+};
 
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
   getList();
-}
+};
 
 /** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
   handleQuery();
-}
+};
 
 /** 多选框选中数据 */
 const handleSelectionChange = (selection: InfoVO[]) => {
-  ids.value = selection.map(item => item.id);
+  ids.value = selection.map((item) => item.id);
   single.value = selection.length != 1;
   multiple.value = !selection.length;
-}
+};
 
 /** 新增按钮操作 */
 const handleAdd = () => {
@@ -706,7 +614,7 @@ const handleAdd = () => {
       mode: 'add'
     }
   });
-}
+};
 
 /** 修改按钮操作 */
 const handleUpdate = async (row?: InfoVO) => {
@@ -720,7 +628,7 @@ const handleUpdate = async (row?: InfoVO) => {
       mode: 'edit'
     }
   });
-}
+};
 
 /** 提交按钮 */
 const submitForm = () => {
@@ -728,25 +636,25 @@ const submitForm = () => {
     if (valid) {
       buttonLoading.value = true;
       if (form.value.id) {
-        await updateInfo(form.value).finally(() =>  buttonLoading.value = false);
+        await updateInfo(form.value).finally(() => (buttonLoading.value = false));
       } else {
-        await addInfo(form.value).finally(() =>  buttonLoading.value = false);
+        await addInfo(form.value).finally(() => (buttonLoading.value = false));
       }
-      proxy?.$modal.msgSuccess("操作成功");
+      proxy?.$modal.msgSuccess('操作成功');
       dialog.visible = false;
       await getList();
     }
   });
-}
+};
 
 /** 删除按钮操作 */
 const handleDelete = async (row?: InfoVO) => {
   const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除供应商信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
+  await proxy?.$modal.confirm('是否确认删除供应商信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
   await delInfo(_ids);
-  proxy?.$modal.msgSuccess("删除成功");
+  proxy?.$modal.msgSuccess('删除成功');
   await getList();
-}
+};
 
 /** 查看按钮操作 */
 const handleView = (row: InfoVO) => {
@@ -758,66 +666,70 @@ const handleView = (row: InfoVO) => {
       id: row.id
     }
   });
-}
+};
 
 /** 停止合作按钮操作 */
 const handleStopCooperation = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认停止与供应商"' + row.enterpriseName + '"的合作?');
   // 只传id和supplyStatus
-  const updateData = { 
-    id: row.id, 
-    supplyStatus: '2' 
+  const updateData = {
+    id: row.id,
+    supplyStatus: '2'
   };
   await updateInfo(updateData);
-  proxy?.$modal.msgSuccess("操作成功");
+  proxy?.$modal.msgSuccess('操作成功');
   await getList();
-}
+};
 
 /** 审核通过按钮操作 */
 const handleApprove = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认审核通过供应商"' + row.enterpriseName + '"?');
   // 只传id和supplyStatus,避免将后端返回的名字字段传回去
-  const updateData = { 
-    id: row.id, 
-    supplyStatus: '1' 
+  const updateData = {
+    id: row.id,
+    supplyStatus: '1'
   };
   await updateInfo(updateData);
-  proxy?.$modal.msgSuccess("审核通过");
+  proxy?.$modal.msgSuccess('审核通过');
   await getList();
-}
+};
 
 /** 驳回按钮操作 */
 const handleReject = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认驳回供应商"' + row.enterpriseName + '"的审核?');
   // 只传id和supplyStatus
-  const updateData = { 
-    id: row.id, 
-    supplyStatus: '3' 
+  const updateData = {
+    id: row.id,
+    supplyStatus: '3'
   };
   await updateInfo(updateData);
-  proxy?.$modal.msgSuccess("已驳回");
+  proxy?.$modal.msgSuccess('已驳回');
   await getList();
-}
+};
 
 /** 恢复合作按钮操作 */
 const handleResumeCooperation = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认恢复与供应商"' + row.enterpriseName + '"的合作?');
   // 只传id和supplyStatus
-  const updateData = { 
-    id: row.id, 
-    supplyStatus: '1' 
+  const updateData = {
+    id: row.id,
+    supplyStatus: '1'
   };
   await updateInfo(updateData);
-  proxy?.$modal.msgSuccess("已恢复合作");
+  proxy?.$modal.msgSuccess('已恢复合作');
   await getList();
-}
+};
 
 /** 导出按钮操作 */
 const handleExport = () => {
-  proxy?.download('customer/info/export', {
-    ...queryParams.value
-  }, `info_${new Date().getTime()}.xlsx`)
-}
+  proxy?.download(
+    'customer/info/export',
+    {
+      ...queryParams.value
+    },
+    `info_${new Date().getTime()}.xlsx`
+  );
+};
 
 /** 获取供应商类型列表 */
 const getSupplierTypeList = async () => {
@@ -842,7 +754,7 @@ const getProductCategoryData = async () => {
   } catch (e) {
     console.error('获取产品分类失败', e);
   }
-}
+};
 
 /** 获取人员信息列表 */
 const getComStaffData = async () => {
@@ -855,49 +767,49 @@ const getComStaffData = async () => {
   } catch (e) {
     console.error('获取人员信息失败', e);
   }
-}
+};
 
 /** 根据供应商类型ID或名称获取显示名称 */
 const getSupplierTypeName = (typeValue: string | number) => {
   if (!typeValue) return '';
-  
+
   // 先尝试按 ID 匹配
-  let item = supplierTypeList.value.find(t => t.id === typeValue);
-  
+  let item = supplierTypeList.value.find((t) => t.id === typeValue);
+
   // 如果按 ID 没找到,再尝试按名称匹配
   if (!item) {
-    item = supplierTypeList.value.find(t => t.supplierTypeName === typeValue);
+    item = supplierTypeList.value.find((t) => t.supplierTypeName === typeValue);
   }
-  
+
   return item ? item.supplierTypeName : String(typeValue);
 };
 
 /** 根据categoryNo获取categoryName */
 const getCategoryName = (categoryNo: string) => {
-  const item = productCategoryList.value.find(c => c.categoryNo === categoryNo);
+  const item = productCategoryList.value.find((c) => c.categoryNo === categoryNo);
   return item ? item.categoryName : categoryNo;
-}
+};
 
 /** 根据staffId获取staffName */
 const getStaffName = (staffId: string) => {
-  const item = comStaffList.value.find(s => s.staffId === staffId);
+  const item = comStaffList.value.find((s) => s.staffId === staffId);
   return item ? item.staffName : staffId;
-}
+};
 
 /** 根据状态码获取状态显示名称 */
 const getStatusDisplayName = (statusCode: number) => {
   return getSupplierStatusDisplayName(statusCode);
-}
+};
 
 /** 根据合作状态码获取合作状态显示名称 */
 const getCooperationStatusDisplayName = (statusCode: number) => {
   return getSupplierCooperationStatusDisplayName(statusCode);
-}
+};
 
 /** 格式化省份显示:显示前3个省份,其余用...表示 */
 const formatProvinceDisplay = (province: string) => {
   if (!province) return '';
-  const provinces = province.split(',').filter(p => p.trim());
+  const provinces = province.split(',').filter((p) => p.trim());
   if (provinces.length === 0) return '';
   if (provinces.length <= 3) return provinces.join(',');
   return `${provinces.slice(0, 3).join(',')}...`;
@@ -906,7 +818,7 @@ const formatProvinceDisplay = (province: string) => {
 /** 格式化城市显示:显示前10个城市,其余用...表示 */
 const formatCityDisplay = (city: string) => {
   if (!city) return '';
-  const cities = city.split(',').filter(c => c.trim());
+  const cities = city.split(',').filter((c) => c.trim());
   if (cities.length === 0) return '';
   if (cities.length <= 10) return cities.join(',');
   return `${cities.slice(0, 10).join(',')}...`;
@@ -915,7 +827,7 @@ const formatCityDisplay = (city: string) => {
 onMounted(async () => {
   getSupplierTypeList();
   getProductCategoryData();
-  
+
   // 直接调用人员接口测试
   try {
     console.log('开始获取人员数据...');
@@ -928,23 +840,26 @@ onMounted(async () => {
   } catch (e) {
     console.error('人员接口调用失败:', e);
   }
-  
+
   getList();
-  
+
   // 禁用表格列宽调整
   nextTick(() => {
     const table = document.querySelector('.no-resize-table');
     if (table) {
-      table.addEventListener('mousedown', (e: any) => {
-        const target = e.target as HTMLElement;
-        // 阻止在表头边界处的鼠标按下事件
-        if (target.classList.contains('el-table__column-resize-proxy') || 
-            target.closest('.el-table__column-resize-proxy')) {
-          e.preventDefault();
-          e.stopPropagation();
-          return false;
-        }
-      }, true);
+      table.addEventListener(
+        'mousedown',
+        (e: any) => {
+          const target = e.target as HTMLElement;
+          // 阻止在表头边界处的鼠标按下事件
+          if (target.classList.contains('el-table__column-resize-proxy') || target.closest('.el-table__column-resize-proxy')) {
+            e.preventDefault();
+            e.stopPropagation();
+            return false;
+          }
+        },
+        true
+      );
     }
   });
 });
@@ -985,7 +900,7 @@ onMounted(async () => {
 }
 
 .no-resize-table :deep(.el-table__header th.el-table__cell) {
-  border-right: 1px solid #EBEEF5;
+  border-right: 1px solid #ebeef5;
 }
 
 /* 禁用拖动事件 */
@@ -1001,4 +916,3 @@ onMounted(async () => {
   pointer-events: auto;
 }
 </style>
-

+ 194 - 268
src/views/supplier/approve/index.vue

@@ -56,37 +56,44 @@
     <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-col>
         </el-row>
       </template>
 
       <el-table v-loading="loading" border :data="infoList" class="no-resize-table" @selection-change="handleSelectionChange">
-        <el-table-column label="供应商编号" align="center" prop="supplierNo" width="150" fixed="left" />
-        <el-table-column label="供应商名称" align="left" prop="enterpriseName" width="250" fixed="left" />
-
-        <el-table-column label="企业规模" align="center" prop="enterpriseScaleName" width="120">
-          
-        </el-table-column>
-        <el-table-column label="注册时间" align="center" prop="createTime" width="150">
+        <el-table-column label="编号" align="center" prop="supplierNo" width="150" fixed="left" />
+        <el-table-column label="名称" align="left" prop="enterpriseName" fixed="left" />
+        <el-table-column label="注册时间" align="center" prop="createTime">
           <template #default="scope">
             <span>{{ formatDate(scope.row.createTime) }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="经营类目" align="center" prop="operatingCategory" width="150" />
+        <el-table-column label="企业规模" align="center" prop="enterpriseScaleName"> </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="buyer" />
+        <!-- 类型:新增/更新 -->
+
+        <!-- <el-table-column label="经营类目" align="center" prop="operatingCategory" width="150" />
         <el-table-column label="供应品牌" align="center" prop="brandName" width="200" />
         <el-table-column label="供应区域(省)" align="left" prop="province" width="250">
           <template #default="scope">
-            <el-tooltip :content="scope.row.province" placement="top" :disabled="!scope.row.province || scope.row.province.split(',').filter(p => p.trim()).length <= 3">
+            <el-tooltip
+              :content="scope.row.province"
+              placement="top"
+              :disabled="!scope.row.province || scope.row.province.split(',').filter((p) => p.trim()).length <= 3"
+            >
               <span>{{ formatProvinceDisplay(scope.row.province) }}</span>
             </el-tooltip>
           </template>
         </el-table-column>
         <el-table-column label="供应区域(市)" align="left" prop="city" width="300">
           <template #default="scope">
-            <el-tooltip :content="scope.row.city" placement="top" :disabled="!scope.row.city || scope.row.city.split(',').filter(c => c.trim()).length <= 10">
+            <el-tooltip
+              :content="scope.row.city"
+              placement="top"
+              :disabled="!scope.row.city || scope.row.city.split(',').filter((c) => c.trim()).length <= 10"
+            >
               <span>{{ formatCityDisplay(scope.row.city) }}</span>
             </el-tooltip>
           </template>
@@ -102,23 +109,32 @@
           <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" width="250" fixed="right">
           <template #default="scope">
             <!-- 状态 0、3、4:待审核、审核未通过、待修改审核 -->
-            <template v-if="scope.row.supplyStatus === '0' || scope.row.supplyStatus === 0 || scope.row.supplyStatus === '3' || scope.row.supplyStatus === 3 || scope.row.supplyStatus === '4' || scope.row.supplyStatus === 4">
+            <template
+              v-if="
+                scope.row.supplyStatus === '0' ||
+                scope.row.supplyStatus === 0 ||
+                scope.row.supplyStatus === '3' ||
+                scope.row.supplyStatus === 3 ||
+                scope.row.supplyStatus === '4' ||
+                scope.row.supplyStatus === 4
+              "
+            >
               <el-button link type="primary" @click="handleView(scope.row)" v-hasPermi="['customer:info:query']">查看</el-button>
               <el-button link type="primary" @click="handleApprove(scope.row)" v-hasPermi="['customer:info:edit']">审核通过</el-button>
               <el-button link type="danger" @click="handleReject(scope.row)" v-hasPermi="['customer:info:edit']">驳回</el-button>
             </template>
-            
+
             <!-- 状态 1:正式供应商 -->
             <template v-else-if="scope.row.supplyStatus === '1' || scope.row.supplyStatus === 1">
               <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>
-            
+
             <!-- 状态 2:停用 -->
             <template v-else-if="scope.row.supplyStatus === '2' || scope.row.supplyStatus === 2">
               <el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['customer:info:edit']">编辑</el-button>
@@ -143,7 +159,7 @@
           <el-input v-model="form.membershipSize" placeholder="请输入人员规模" />
         </el-form-item>
         <el-form-item label="固定电话" prop="fixedPhone">
-            <el-input v-model="form.fixedPhone" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.fixedPhone" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="传真" prop="fax">
           <el-input v-model="form.fax" placeholder="请输入传真" />
@@ -197,7 +213,7 @@
           <el-input v-model="form.businessAddress" placeholder="请输入注册详细地址" />
         </el-form-item>
         <el-form-item label="营业执照图片路径" prop="businessLicense">
-            <el-input v-model="form.businessLicense" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.businessLicense" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="发票抬头" prop="invoiceHeader">
           <el-input v-model="form.invoiceHeader" placeholder="请输入发票抬头" />
@@ -221,7 +237,7 @@
           <el-input v-model="form.invoiceLandline" placeholder="请输入发票电话" />
         </el-form-item>
         <el-form-item label="供货范围" prop="scopeSupply">
-            <el-input v-model="form.scopeSupply" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.scopeSupply" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="合作方式" prop="cooperateWay">
           <el-input v-model="form.cooperateWay" placeholder="请输入合作方式" />
@@ -230,11 +246,13 @@
           <el-input v-model="form.cooperateLevel" placeholder="请输入合作等级" />
         </el-form-item>
         <el-form-item label="合同到期时间" prop="contractEndTime">
-          <el-date-picker clearable
+          <el-date-picker
+            clearable
             v-model="form.contractEndTime"
             type="datetime"
             value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择合同到期时间">
+            placeholder="请选择合同到期时间"
+          >
           </el-date-picker>
         </el-form-item>
         <el-form-item label="供应评分" prop="supplyScore">
@@ -256,10 +274,10 @@
           <el-input v-model="form.operatingCategory" placeholder="请输入经营品类" />
         </el-form-item>
         <el-form-item label="经营品牌" prop="operatingBrand">
-            <el-input v-model="form.operatingBrand" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.operatingBrand" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="其他客户" prop="otherCustomers">
-            <el-input v-model="form.otherCustomers" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.otherCustomers" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="简称" prop="shortName">
           <el-input v-model="form.shortName" placeholder="请输入简称" />
@@ -271,42 +289,38 @@
           <el-input v-model="form.ownedCompany" placeholder="请输入所属公司" />
         </el-form-item>
         <el-form-item label="创建时间" prop="created">
-          <el-date-picker clearable
-            v-model="form.created"
-            type="datetime"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择创建时间">
+          <el-date-picker clearable v-model="form.created" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择创建时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="修改时间" prop="modify">
-          <el-date-picker clearable
-            v-model="form.modify"
-            type="datetime"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择修改时间">
+          <el-date-picker clearable v-model="form.modify" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择修改时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="有效期开始时间" prop="validityFromDate">
-          <el-date-picker clearable
+          <el-date-picker
+            clearable
             v-model="form.validityFromDate"
             type="datetime"
             value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择有效期开始时间">
+            placeholder="请选择有效期开始时间"
+          >
           </el-date-picker>
         </el-form-item>
         <el-form-item label="有效期结束时间" prop="validityToDate">
-          <el-date-picker clearable
+          <el-date-picker
+            clearable
             v-model="form.validityToDate"
             type="datetime"
             value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请选择有效期结束时间">
+            placeholder="请选择有效期结束时间"
+          >
           </el-date-picker>
         </el-form-item>
         <el-form-item label="行号" prop="rowNo">
           <el-input v-model="form.rowNo" placeholder="请输入行号" />
         </el-form-item>
         <el-form-item label="法人身份证图片路径" prop="personImage">
-          <image-upload v-model="form.personImage"/>
+          <image-upload v-model="form.personImage" />
         </el-form-item>
         <el-form-item label="对接次数" prop="abutmentNo">
           <el-input v-model="form.abutmentNo" placeholder="请输入对接次数" />
@@ -326,7 +340,17 @@
 </template>
 
 <script setup name="Info" lang="ts">
-import { getApproveList, getInfo, delInfo, addInfo, updateInfo, getComSupTyList, getProductCategoryList, getComStaffList, getDictData } 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';
@@ -424,9 +448,9 @@ const initFormData: InfoForm = {
   personImage: undefined,
   abutmentNo: undefined,
   cooperative: undefined
-}
+};
 const data = reactive<PageData<InfoForm, InfoQuery>>({
-  form: {...initFormData},
+  form: { ...initFormData },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
@@ -492,166 +516,61 @@ const data = reactive<PageData<InfoForm, InfoQuery>>({
     buyer: undefined,
     province: undefined,
     city: undefined,
-    params: {
-    }
+    params: {}
   },
   rules: {
-    supplierNo: [
-      { required: true, message: "供应商编号不能为空", trigger: "blur" }
-    ],
-    enterpriseName: [
-      { required: true, message: "企业名称不能为空", trigger: "blur" }
-    ],
-    membershipSize: [
-      { required: true, message: "人员规模不能为空", trigger: "blur" }
-    ],
-    supplierType: [
-      { required: true, message: "供应商类型不能为空", trigger: "change" }
-    ],
-    cooperationType: [
-      { required: true, message: "合作类型不能为空", trigger: "change" }
-    ],
-    fixedPhone: [
-      { required: true, message: "固定电话不能为空", trigger: "blur" }
-    ],
-    fax: [
-      { required: true, message: "传真不能为空", trigger: "blur" }
-    ],
-    url: [
-      { required: true, message: "网址不能为空", trigger: "blur" }
-    ],
-    postCode: [
-      { required: true, message: "邮政编码不能为空", trigger: "blur" }
-    ],
-    mailbox: [
-      { required: true, message: "邮箱不能为空", trigger: "blur" }
-    ],
-    officeProvince: [
-      { required: true, message: "办公地址-省不能为空", trigger: "blur" }
-    ],
-    officeCity: [
-      { required: true, message: "办公地址-市不能为空", trigger: "blur" }
-    ],
-    officeCounty: [
-      { required: true, message: "办公地址-区/县不能为空", trigger: "blur" }
-    ],
-    officeAddress: [
-      { required: true, message: "办公详细地址不能为空", trigger: "blur" }
-    ],
-    businessName: [
-      { required: true, message: "营业执照名称不能为空", trigger: "blur" }
-    ],
-    socialCreditCode: [
-      { required: true, message: "统一社会信用代码不能为空", trigger: "blur" }
-    ],
-    legalPersonName: [
-      { required: true, message: "法人姓名不能为空", trigger: "blur" }
-    ],
-    legalPersonId: [
-      { required: true, message: "法人身份证号不能为空", trigger: "blur" }
-    ],
-    registeredCapital: [
-      { required: true, message: "注册资本不能为空", trigger: "blur" }
-    ],
-    businessProvince: [
-      { required: true, message: "注册地址-省不能为空", trigger: "blur" }
-    ],
-    businessCity: [
-      { required: true, message: "注册地址-市不能为空", trigger: "blur" }
-    ],
-    businessCounty: [
-      { required: true, message: "注册地址-区/县不能为空", trigger: "blur" }
-    ],
-    businessAddress: [
-      { required: true, message: "注册详细地址不能为空", trigger: "blur" }
-    ],
-    businessLicense: [
-      { required: true, message: "营业执照图片路径不能为空", trigger: "blur" }
-    ],
-    invoiceType: [
-      { required: true, message: "发票类型不能为空", trigger: "change" }
-    ],
-    invoiceHeader: [
-      { required: true, message: "发票抬头不能为空", trigger: "blur" }
-    ],
-    taxpayerIdentifier: [
-      { required: true, message: "纳税人识别号不能为空", trigger: "blur" }
-    ],
-    depositaryBank: [
-      { required: true, message: "开户银行不能为空", trigger: "blur" }
-    ],
-    rowNum: [
-      { required: true, message: "行号不能为空", trigger: "blur" }
-    ],
-    bankAccounts: [
-      { required: true, message: "银行账号不能为空", trigger: "blur" }
-    ],
-    invoiceAddress: [
-      { required: true, message: "发票地址不能为空", trigger: "blur" }
-    ],
-    invoiceLandline: [
-      { required: true, message: "发票电话不能为空", trigger: "blur" }
-    ],
-    scopeSupply: [
-      { required: true, message: "供货范围不能为空", trigger: "blur" }
-    ],
-    cooperateWay: [
-      { required: true, message: "合作方式不能为空", trigger: "blur" }
-    ],
-    contractEndTime: [
-      { required: true, message: "合同到期时间不能为空", trigger: "blur" }
-    ],
-    yearSales: [
-      { required: true, message: "年销售额不能为空", trigger: "blur" }
-    ],
-    supplierName: [
-      { required: true, message: "供应商联系人姓名不能为空", trigger: "blur" }
-    ],
-    supplierPhone: [
-      { required: true, message: "供应商联系人电话不能为空", trigger: "blur" }
-    ],
-    supplierPassword: [
-      { required: true, message: "供应商登录密码不能为空", trigger: "blur" }
-    ],
-    operatingCategory: [
-      { required: true, message: "经营品类不能为空", trigger: "blur" }
-    ],
-    operatingBrand: [
-      { required: true, message: "经营品牌不能为空", trigger: "blur" }
-    ],
-    otherCustomers: [
-      { required: true, message: "其他客户不能为空", trigger: "blur" }
-    ],
-    shortName: [
-      { required: true, message: "简称不能为空", trigger: "blur" }
-    ],
-    industrCategory: [
-      { required: true, message: "所属行业不能为空", trigger: "blur" }
-    ],
-    type: [
-      { required: true, message: "类型不能为空", trigger: "change" }
-    ],
-    ownedCompany: [
-      { required: true, message: "所属公司不能为空", trigger: "blur" }
-    ],
-    modify: [
-      { required: true, message: "修改时间不能为空", trigger: "blur" }
-    ],
-    validityFromDate: [
-      { required: true, message: "有效期开始时间不能为空", trigger: "blur" }
-    ],
-    validityToDate: [
-      { required: true, message: "有效期结束时间不能为空", trigger: "blur" }
-    ],
-    rowNo: [
-      { required: true, message: "行号不能为空", trigger: "blur" }
-    ],
-    personImage: [
-      { required: true, message: "法人身份证图片路径不能为空", trigger: "blur" }
-    ],
-    cooperative: [
-      { required: true, message: "是否合作不能为空", trigger: "blur" }
-    ]
+    supplierNo: [{ required: true, message: '供应商编号不能为空', trigger: 'blur' }],
+    enterpriseName: [{ required: true, message: '企业名称不能为空', trigger: 'blur' }],
+    membershipSize: [{ required: true, message: '人员规模不能为空', trigger: 'blur' }],
+    supplierType: [{ required: true, message: '供应商类型不能为空', trigger: 'change' }],
+    cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
+    fixedPhone: [{ required: true, message: '固定电话不能为空', trigger: 'blur' }],
+    fax: [{ required: true, message: '传真不能为空', trigger: 'blur' }],
+    url: [{ required: true, message: '网址不能为空', trigger: 'blur' }],
+    postCode: [{ required: true, message: '邮政编码不能为空', trigger: 'blur' }],
+    mailbox: [{ required: true, message: '邮箱不能为空', trigger: 'blur' }],
+    officeProvince: [{ required: true, message: '办公地址-省不能为空', trigger: 'blur' }],
+    officeCity: [{ required: true, message: '办公地址-市不能为空', trigger: 'blur' }],
+    officeCounty: [{ required: true, message: '办公地址-区/县不能为空', trigger: 'blur' }],
+    officeAddress: [{ required: true, message: '办公详细地址不能为空', trigger: 'blur' }],
+    businessName: [{ required: true, message: '营业执照名称不能为空', trigger: 'blur' }],
+    socialCreditCode: [{ required: true, message: '统一社会信用代码不能为空', trigger: 'blur' }],
+    legalPersonName: [{ required: true, message: '法人姓名不能为空', trigger: 'blur' }],
+    legalPersonId: [{ required: true, message: '法人身份证号不能为空', trigger: 'blur' }],
+    registeredCapital: [{ required: true, message: '注册资本不能为空', trigger: 'blur' }],
+    businessProvince: [{ required: true, message: '注册地址-省不能为空', trigger: 'blur' }],
+    businessCity: [{ required: true, message: '注册地址-市不能为空', trigger: 'blur' }],
+    businessCounty: [{ required: true, message: '注册地址-区/县不能为空', trigger: 'blur' }],
+    businessAddress: [{ required: true, message: '注册详细地址不能为空', trigger: 'blur' }],
+    businessLicense: [{ required: true, message: '营业执照图片路径不能为空', trigger: 'blur' }],
+    invoiceType: [{ required: true, message: '发票类型不能为空', trigger: 'change' }],
+    invoiceHeader: [{ required: true, message: '发票抬头不能为空', trigger: 'blur' }],
+    taxpayerIdentifier: [{ required: true, message: '纳税人识别号不能为空', trigger: 'blur' }],
+    depositaryBank: [{ required: true, message: '开户银行不能为空', trigger: 'blur' }],
+    rowNum: [{ required: true, message: '行号不能为空', trigger: 'blur' }],
+    bankAccounts: [{ required: true, message: '银行账号不能为空', trigger: 'blur' }],
+    invoiceAddress: [{ required: true, message: '发票地址不能为空', trigger: 'blur' }],
+    invoiceLandline: [{ required: true, message: '发票电话不能为空', trigger: 'blur' }],
+    scopeSupply: [{ required: true, message: '供货范围不能为空', trigger: 'blur' }],
+    cooperateWay: [{ required: true, message: '合作方式不能为空', trigger: 'blur' }],
+    contractEndTime: [{ required: true, message: '合同到期时间不能为空', trigger: 'blur' }],
+    yearSales: [{ required: true, message: '年销售额不能为空', trigger: 'blur' }],
+    supplierName: [{ required: true, message: '供应商联系人姓名不能为空', trigger: 'blur' }],
+    supplierPhone: [{ required: true, message: '供应商联系人电话不能为空', trigger: 'blur' }],
+    supplierPassword: [{ required: true, message: '供应商登录密码不能为空', trigger: 'blur' }],
+    operatingCategory: [{ required: true, message: '经营品类不能为空', trigger: 'blur' }],
+    operatingBrand: [{ required: true, message: '经营品牌不能为空', trigger: 'blur' }],
+    otherCustomers: [{ required: true, message: '其他客户不能为空', trigger: 'blur' }],
+    shortName: [{ required: true, message: '简称不能为空', trigger: 'blur' }],
+    industrCategory: [{ required: true, message: '所属行业不能为空', trigger: 'blur' }],
+    type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
+    ownedCompany: [{ required: true, message: '所属公司不能为空', trigger: 'blur' }],
+    modify: [{ required: true, message: '修改时间不能为空', trigger: 'blur' }],
+    validityFromDate: [{ required: true, message: '有效期开始时间不能为空', trigger: 'blur' }],
+    validityToDate: [{ required: true, message: '有效期结束时间不能为空', trigger: 'blur' }],
+    rowNo: [{ required: true, message: '行号不能为空', trigger: 'blur' }],
+    personImage: [{ required: true, message: '法人身份证图片路径不能为空', trigger: 'blur' }],
+    cooperative: [{ required: true, message: '是否合作不能为空', trigger: 'blur' }]
   }
 });
 
@@ -664,7 +583,7 @@ const getList = async () => {
   infoList.value = res.rows;
   total.value = res.total;
   loading.value = false;
-}
+};
 
 /** 获取企业规模字典 */
 const getMembershipSizeDict = async () => {
@@ -679,7 +598,7 @@ const getMembershipSizeDict = async () => {
 
 /** 根据字典值获取字典标签 */
 const getMembershipSizeLabel = (dictValue: string) => {
-  const dict = membershipSizeDict.value.find(item => item.dictValue === dictValue);
+  const dict = membershipSizeDict.value.find((item) => item.dictValue === dictValue);
   return dict ? dict.dictLabel : dictValue;
 };
 
@@ -693,51 +612,51 @@ const formatDate = (dateStr: string) => {
 const cancel = () => {
   reset();
   dialog.visible = false;
-}
+};
 
 /** 表单重置 */
 const reset = () => {
-  form.value = {...initFormData};
+  form.value = { ...initFormData };
   infoFormRef.value?.resetFields();
-}
+};
 
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
   getList();
-}
+};
 
 /** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
   handleQuery();
-}
+};
 
 /** 多选框选中数据 */
 const handleSelectionChange = (selection: InfoVO[]) => {
-  ids.value = selection.map(item => item.id);
+  ids.value = selection.map((item) => item.id);
   single.value = selection.length != 1;
   multiple.value = !selection.length;
-}
+};
 
 /** 新增按钮操作 */
 const handleAdd = () => {
   reset();
   dialog.visible = true;
-  dialog.title = "添加供应商信息";
+  dialog.title = '添加供应商信息';
   dialog.readonly = false;
-}
+};
 
 /** 修改按钮操作 */
 const handleUpdate = async (row?: InfoVO) => {
   reset();
-  const _id = row?.id || ids.value[0]
+  const _id = row?.id || ids.value[0];
   const res = await getInfo(_id);
   Object.assign(form.value, res.data);
   dialog.visible = true;
-  dialog.title = "修改供应商信息";
+  dialog.title = '修改供应商信息';
   dialog.readonly = false;
-}
+};
 
 /** 提交按钮 */
 const submitForm = () => {
@@ -745,25 +664,25 @@ const submitForm = () => {
     if (valid) {
       buttonLoading.value = true;
       if (form.value.id) {
-        await updateInfo(form.value).finally(() =>  buttonLoading.value = false);
+        await updateInfo(form.value).finally(() => (buttonLoading.value = false));
       } else {
-        await addInfo(form.value).finally(() =>  buttonLoading.value = false);
+        await addInfo(form.value).finally(() => (buttonLoading.value = false));
       }
-      proxy?.$modal.msgSuccess("操作成功");
+      proxy?.$modal.msgSuccess('操作成功');
       dialog.visible = false;
       await getList();
     }
   });
-}
+};
 
 /** 删除按钮操作 */
 const handleDelete = async (row?: InfoVO) => {
   const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除供应商信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
+  await proxy?.$modal.confirm('是否确认删除供应商信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
   await delInfo(_ids);
-  proxy?.$modal.msgSuccess("删除成功");
+  proxy?.$modal.msgSuccess('删除成功');
   await getList();
-}
+};
 
 /** 查看按钮操作 */
 const handleView = (row: InfoVO) => {
@@ -775,72 +694,76 @@ const handleView = (row: InfoVO) => {
       id: row.id
     }
   });
-}
+};
 
 /** 审核通过按钮操作 */
 const handleApprove = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认审核通过供应商"' + row.enterpriseName + '"?');
   try {
     // 只传id和supplyStatus,避免将后端返回的名字字段传回去
-    await updateInfo({ 
+    await updateInfo({
       id: row.id,
-      supplyStatus: '1' 
+      supplyStatus: '1'
     });
-    proxy?.$modal.msgSuccess("审核通过成功");
+    proxy?.$modal.msgSuccess('审核通过成功');
     await getList();
   } catch (e) {
     console.error('审核通过失败:', e);
   }
-}
+};
 
 /** 驳回按钮操作 */
 const handleReject = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认驳回供应商"' + row.enterpriseName + '"?');
   try {
     // 只传id和supplyStatus
-    await updateInfo({ 
+    await updateInfo({
       id: row.id,
-      supplyStatus: '3' 
+      supplyStatus: '3'
     });
-    proxy?.$modal.msgSuccess("驳回成功");
+    proxy?.$modal.msgSuccess('驳回成功');
     await getList();
   } catch (e) {
     console.error('驳回失败:', e);
   }
-}
+};
 
 /** 停止合作按钮操作 */
 const handleStopCooperation = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认停止与供应商"' + row.enterpriseName + '"的合作?');
   // 只传id和supplyStatus
-  const updateData = { 
-    id: row.id, 
-    supplyStatus: '2' 
+  const updateData = {
+    id: row.id,
+    supplyStatus: '2'
   };
   await updateInfo(updateData);
-  proxy?.$modal.msgSuccess("操作成功");
+  proxy?.$modal.msgSuccess('操作成功');
   await getList();
-}
+};
 
 /** 恢复合作按钮操作 */
 const handleResumeCooperation = async (row: InfoVO) => {
   await proxy?.$modal.confirm('是否确认恢复与供应商"' + row.enterpriseName + '"的合作?');
   // 只传id和supplyStatus
-  const updateData = { 
-    id: row.id, 
-    supplyStatus: '1' 
+  const updateData = {
+    id: row.id,
+    supplyStatus: '1'
   };
   await updateInfo(updateData);
-  proxy?.$modal.msgSuccess("已恢复合作");
+  proxy?.$modal.msgSuccess('已恢复合作');
   await getList();
-}
+};
 
 /** 导出按钮操作 */
 const handleExport = () => {
-  proxy?.download('customer/info/export', {
-    ...queryParams.value
-  }, `info_${new Date().getTime()}.xlsx`)
-}
+  proxy?.download(
+    'customer/info/export',
+    {
+      ...queryParams.value
+    },
+    `info_${new Date().getTime()}.xlsx`
+  );
+};
 
 /** 获取供应商类型列表 */
 const getSupplierTypeList = async () => {
@@ -865,7 +788,7 @@ const getProductCategoryData = async () => {
   } catch (e) {
     console.error('获取产品分类失败', e);
   }
-}
+};
 
 /** 获取人员信息列表 */
 const getComStaffData = async () => {
@@ -878,40 +801,40 @@ const getComStaffData = async () => {
   } catch (e) {
     console.error('获取人员信息失败', e);
   }
-}
+};
 
 /** 根据供应商类型名称获取显示名称 */
 const getSupplierTypeName = (typeName: string) => {
-  const item = supplierTypeList.value.find(t => t.supplierTypeName === typeName);
+  const item = supplierTypeList.value.find((t) => t.supplierTypeName === typeName);
   return item ? item.supplierTypeName : typeName;
 };
 
 /** 根据categoryNo获取categoryName */
 const getCategoryName = (categoryNo: string) => {
-  const item = productCategoryList.value.find(c => c.categoryNo === categoryNo);
+  const item = productCategoryList.value.find((c) => c.categoryNo === categoryNo);
   return item ? item.categoryName : categoryNo;
-}
+};
 
 /** 根据staffId获取staffName */
 const getStaffName = (staffId: string) => {
-  const item = comStaffList.value.find(s => s.staffId === staffId);
+  const item = comStaffList.value.find((s) => s.staffId === staffId);
   return item ? item.staffName : staffId;
-}
+};
 
 /** 根据状态码获取状态显示名称 */
 const getStatusDisplayName = (statusCode: number) => {
   return getSupplierStatusDisplayName(statusCode);
-}
+};
 
 /** 根据合作状态码获取合作状态显示名称 */
 const getCooperationStatusDisplayName = (statusCode: number) => {
   return getSupplierCooperationStatusDisplayName(statusCode);
-}
+};
 
 /** 格式化省份显示:只显示第一个省份,其余用...表示 */
 const formatProvinceDisplay = (province: string) => {
   if (!province) return '';
-  const provinces = province.split(',').filter(p => p.trim());
+  const provinces = province.split(',').filter((p) => p.trim());
   if (provinces.length === 0) return '';
   if (provinces.length === 1) return provinces[0];
   return `${provinces[0]}...`;
@@ -920,7 +843,7 @@ const formatProvinceDisplay = (province: string) => {
 /** 格式化城市显示:显示前10个城市,其余用...表示 */
 const formatCityDisplay = (city: string) => {
   if (!city) return '';
-  const cities = city.split(',').filter(c => c.trim());
+  const cities = city.split(',').filter((c) => c.trim());
   if (cities.length === 0) return '';
   if (cities.length <= 10) return cities.join(',');
   return `${cities.slice(0, 10).join(',')}...`;
@@ -945,21 +868,24 @@ onMounted(async () => {
   }
 
   getList();
-  
+
   // 禁用表格列宽调整
   nextTick(() => {
     const table = document.querySelector('.no-resize-table');
     if (table) {
-      table.addEventListener('mousedown', (e: any) => {
-        const target = e.target as HTMLElement;
-        // 阻止在表头边界处的鼠标按下事件
-        if (target.classList.contains('el-table__column-resize-proxy') || 
-            target.closest('.el-table__column-resize-proxy')) {
-          e.preventDefault();
-          e.stopPropagation();
-          return false;
-        }
-      }, true);
+      table.addEventListener(
+        'mousedown',
+        (e: any) => {
+          const target = e.target as HTMLElement;
+          // 阻止在表头边界处的鼠标按下事件
+          if (target.classList.contains('el-table__column-resize-proxy') || target.closest('.el-table__column-resize-proxy')) {
+            e.preventDefault();
+            e.stopPropagation();
+            return false;
+          }
+        },
+        true
+      );
     }
   });
 });
@@ -1000,7 +926,7 @@ onMounted(async () => {
 }
 
 .no-resize-table :deep(.el-table__header th.el-table__cell) {
-  border-right: 1px solid #EBEEF5;
+  border-right: 1px solid #ebeef5;
 }
 
 /* 禁用拖动事件 */

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio