|
|
@@ -34,6 +34,29 @@
|
|
|
/>
|
|
|
</el-tab-pane>
|
|
|
|
|
|
+ <el-tab-pane label="基本资质" name="qualification">
|
|
|
+ <QualificationTab :qualificationList="qualificationList" :isViewMode="false" @downloadQualification="handleDownload" />
|
|
|
+ </el-tab-pane>
|
|
|
+
|
|
|
+ <!-- 产品线及资质 -->
|
|
|
+ <el-tab-pane label="产品线及资质" name="supply">
|
|
|
+ <SupplyInfoTab
|
|
|
+ v-model:selectedCategories="selectedCategories"
|
|
|
+ :isViewMode="false"
|
|
|
+ :productCategoryList="productCategoryList"
|
|
|
+ :selectedBrands="selectedBrands"
|
|
|
+ :supplyAreaList="supplyAreaList"
|
|
|
+ :authorizationList="authorizationList"
|
|
|
+ :authorizationPagination="authorizationPagination"
|
|
|
+ :formatDate="formatDate"
|
|
|
+ :getAuthorizedStatusText="getAuthorizedStatusText"
|
|
|
+ @saveCategories="handleSaveCategories"
|
|
|
+ @addBrand="handleAddBrand"
|
|
|
+ @removeBrand="handleRemoveBrand"
|
|
|
+ @editSupplyArea="handleEditSupplyArea"
|
|
|
+ @authorizationPagination="getAuthorizationList"
|
|
|
+ />
|
|
|
+ </el-tab-pane>
|
|
|
<!-- 采购信息 -->
|
|
|
<el-tab-pane label="采销信息" name="purchase">
|
|
|
<PurchaseInfoTab
|
|
|
@@ -60,7 +83,7 @@
|
|
|
</el-tab-pane>
|
|
|
|
|
|
<!-- 供应信息 -->
|
|
|
- <el-tab-pane label="供应信息" name="supply">
|
|
|
+ <!-- <el-tab-pane label="供应信息" name="supply">
|
|
|
<SupplyInfoTab
|
|
|
v-model:selectedCategories="selectedCategories"
|
|
|
:isViewMode="false"
|
|
|
@@ -78,16 +101,21 @@
|
|
|
@editSupplyArea="handleEditSupplyArea"
|
|
|
@authorizationPagination="getAuthorizationList"
|
|
|
/>
|
|
|
- </el-tab-pane>
|
|
|
+ </el-tab-pane> -->
|
|
|
|
|
|
<!-- 地址管理 -->
|
|
|
<el-tab-pane label="地址管理" name="address">
|
|
|
- <AddressTab
|
|
|
- :addressList="addressList"
|
|
|
+ <AddressTab :addressList="addressList" :isViewMode="false" @add="handleAddAddress" @edit="handleEditAddress" @delete="handleDeleteAddress" />
|
|
|
+ </el-tab-pane>
|
|
|
+
|
|
|
+ <!-- 财务信息 -->
|
|
|
+ <el-tab-pane label="财务信息" name="account">
|
|
|
+ <AccountTab
|
|
|
+ :paymentInfoList="paymentInfoList"
|
|
|
:isViewMode="false"
|
|
|
- @add="handleAddAddress"
|
|
|
- @edit="handleEditAddress"
|
|
|
- @delete="handleDeleteAddress"
|
|
|
+ @addPayment="handleAddPayment"
|
|
|
+ @editPayment="handleEditPayment"
|
|
|
+ @viewPayment="handleViewPayment"
|
|
|
/>
|
|
|
</el-tab-pane>
|
|
|
|
|
|
@@ -116,41 +144,20 @@
|
|
|
</el-tabs>
|
|
|
|
|
|
<!-- 付款信息对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="paymentDialogVisible"
|
|
|
- :title="paymentDialogTitle"
|
|
|
- width="1000px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- >
|
|
|
- <el-form
|
|
|
- ref="paymentFormRef"
|
|
|
- :model="paymentForm"
|
|
|
- :rules="paymentFormRules"
|
|
|
- label-width="140px"
|
|
|
- :disabled="paymentDialogReadonly"
|
|
|
- >
|
|
|
+ <el-dialog v-model="paymentDialogVisible" :title="paymentDialogTitle" width="1000px" :close-on-click-modal="false">
|
|
|
+ <el-form ref="paymentFormRef" :model="paymentForm" :rules="paymentFormRules" label-width="140px" :disabled="paymentDialogReadonly">
|
|
|
<el-form-item label="开票类型:" prop="invoiceTypeNo">
|
|
|
- <el-select
|
|
|
- v-model="paymentForm.invoiceTypeNo"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- @change="handleInvoiceTypeChange"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in invoiceTypeList"
|
|
|
- :key="item.id"
|
|
|
- :label="item.invoiceTypeName"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-select v-model="paymentForm.invoiceTypeNo" placeholder="请选择" style="width: 100%" @change="handleInvoiceTypeChange">
|
|
|
+ <el-option v-for="item in invoiceTypeList" :key="item.id" :label="item.invoiceTypeName" :value="item.id" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="发票抬头:" prop="businessName">
|
|
|
- <el-input v-model="paymentForm.businessName" placeholder="企业工商名称" disabled/>
|
|
|
+ <el-input v-model="paymentForm.businessName" placeholder="企业工商名称" disabled />
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="纳税人识别号:" prop="circlesName">
|
|
|
- <el-input v-model="paymentForm.circlesName" placeholder="请输入纳税人识别号" disabled/>
|
|
|
+ <el-input v-model="paymentForm.circlesName" placeholder="请输入纳税人识别号" disabled />
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="开户行行号:" prop="bankNum">
|
|
|
@@ -158,18 +165,8 @@
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="开户行名称:" prop="bankInfoNo">
|
|
|
- <el-select
|
|
|
- v-model="paymentForm.bankInfoNo"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- @change="handleBankChange"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in systemBankList"
|
|
|
- :key="item.id"
|
|
|
- :label="item.bnName"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-select v-model="paymentForm.bankInfoNo" placeholder="请选择" style="width: 100%" @change="handleBankChange">
|
|
|
+ <el-option v-for="item in systemBankList" :key="item.id" :label="item.bnName" :value="item.id" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
@@ -202,19 +199,8 @@
|
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 联系人对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="contactDialogVisible"
|
|
|
- :title="contactDialogTitle"
|
|
|
- width="900px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- >
|
|
|
- <el-form
|
|
|
- ref="contactFormRef"
|
|
|
- :model="contactForm"
|
|
|
- :rules="contactFormRules"
|
|
|
- label-width="140px"
|
|
|
- :disabled="contactDialogReadonly"
|
|
|
- >
|
|
|
+ <el-dialog v-model="contactDialogVisible" :title="contactDialogTitle" width="900px" :close-on-click-modal="false">
|
|
|
+ <el-form ref="contactFormRef" :model="contactForm" :rules="contactFormRules" label-width="140px" :disabled="contactDialogReadonly">
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="员工姓名:" prop="userName">
|
|
|
@@ -223,12 +209,7 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="手机号:" prop="phone">
|
|
|
- <el-input
|
|
|
- v-model="contactForm.phone"
|
|
|
- placeholder="请输入手机号"
|
|
|
- maxlength="11"
|
|
|
- @input="onContactPhoneInput"
|
|
|
- />
|
|
|
+ <el-input v-model="contactForm.phone" placeholder="请输入手机号" maxlength="11" @input="onContactPhoneInput" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -262,7 +243,7 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="主要联系人:" prop="isPrimaryContact">
|
|
|
- <el-select v-model="contactForm.isPrimaryContact" placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-select v-model="contactForm.isPrimaryContact" placeholder="请选择" style="width: 100%">
|
|
|
<el-option label="是" value="1" />
|
|
|
<el-option label="否" value="0" />
|
|
|
</el-select>
|
|
|
@@ -270,7 +251,7 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="允许登录供应商端:" prop="isRegister">
|
|
|
- <el-select v-model="contactForm.isRegister" placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-select v-model="contactForm.isRegister" placeholder="请选择" style="width: 100%">
|
|
|
<el-option label="是" value="1" />
|
|
|
<el-option label="否" value="0" />
|
|
|
</el-select>
|
|
|
@@ -289,12 +270,7 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="备注:" prop="remark">
|
|
|
- <el-input
|
|
|
- v-model="contactForm.remark"
|
|
|
- type="textarea"
|
|
|
- :rows="3"
|
|
|
- placeholder="请输入备注"
|
|
|
- />
|
|
|
+ <el-input v-model="contactForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -309,12 +285,7 @@
|
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 重置联系人密码对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="resetPwdDialogVisible"
|
|
|
- title="重置密码"
|
|
|
- width="520px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- >
|
|
|
+ <el-dialog v-model="resetPwdDialogVisible" title="重置密码" width="520px" :close-on-click-modal="false">
|
|
|
<el-form ref="resetPwdFormRef" :model="resetPwdForm" :rules="resetPwdRules" label-width="120px">
|
|
|
<el-form-item label="新密码:" prop="password">
|
|
|
<el-input v-model="resetPwdForm.password" type="password" show-password placeholder="请输入新密码" />
|
|
|
@@ -333,12 +304,7 @@
|
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 供货区域编辑对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="supplyAreaDialogVisible"
|
|
|
- title="编辑供货区域"
|
|
|
- width="700px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- >
|
|
|
+ <el-dialog v-model="supplyAreaDialogVisible" title="编辑供货区域" width="700px" :close-on-click-modal="false">
|
|
|
<RegionCascader v-model="selectedSupplyAreaCodes" :multiple="true" :options="supplyAreaOptions" :show-district="false" />
|
|
|
|
|
|
<template #footer>
|
|
|
@@ -350,19 +316,8 @@
|
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 地址管理对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="addressDialogVisible"
|
|
|
- :title="addressDialogTitle"
|
|
|
- width="650px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- >
|
|
|
- <el-form
|
|
|
- ref="addressFormRef"
|
|
|
- :model="addressForm"
|
|
|
- :rules="addressFormRules"
|
|
|
- label-width="120px"
|
|
|
- :disabled="addressDialogReadonly"
|
|
|
- >
|
|
|
+ <el-dialog v-model="addressDialogVisible" :title="addressDialogTitle" width="650px" :close-on-click-modal="false">
|
|
|
+ <el-form ref="addressFormRef" :model="addressForm" :rules="addressFormRules" label-width="120px" :disabled="addressDialogReadonly">
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="供应商编号:">
|
|
|
@@ -398,7 +353,7 @@
|
|
|
placeholder="请选择"
|
|
|
clearable
|
|
|
filterable
|
|
|
- style="width: 100%;"
|
|
|
+ style="width: 100%"
|
|
|
@change="handleAddressRegionChange"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
@@ -408,12 +363,7 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="详细地址:" prop="shippingAddress" required>
|
|
|
- <el-input
|
|
|
- v-model="addressForm.shippingAddress"
|
|
|
- type="textarea"
|
|
|
- :rows="3"
|
|
|
- placeholder="请输入详细地址"
|
|
|
- />
|
|
|
+ <el-input v-model="addressForm.shippingAddress" type="textarea" :rows="3" placeholder="请输入详细地址" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -436,19 +386,8 @@
|
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 合同管理对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="contractDialogVisible"
|
|
|
- :title="contractDialogTitle"
|
|
|
- width="900px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- >
|
|
|
- <el-form
|
|
|
- ref="contractFormRef"
|
|
|
- :model="contractForm"
|
|
|
- :rules="contractFormRules"
|
|
|
- label-width="140px"
|
|
|
- :disabled="contractDialogReadonly"
|
|
|
- >
|
|
|
+ <el-dialog v-model="contractDialogVisible" :title="contractDialogTitle" width="900px" :close-on-click-modal="false">
|
|
|
+ <el-form ref="contractFormRef" :model="contractForm" :rules="contractFormRules" label-width="140px" :disabled="contractDialogReadonly">
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="合同名称:" prop="contractName">
|
|
|
@@ -460,25 +399,15 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="合同类型:" prop="contractType">
|
|
|
- <el-select v-model="contractForm.contractType" placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option
|
|
|
- v-for="item in contractTypeDict"
|
|
|
- :key="item.dictValue"
|
|
|
- :label="item.dictLabel"
|
|
|
- :value="item.dictValue"
|
|
|
- />
|
|
|
+ <el-select v-model="contractForm.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="contractForm.demandReminderTime"
|
|
|
- :min="1"
|
|
|
- :max="365"
|
|
|
- style="width: 150px;"
|
|
|
- />
|
|
|
- <span style="margin-left: 10px;">天</span>
|
|
|
+ <el-input-number v-model="contractForm.demandReminderTime" :min="1" :max="365" style="width: 150px" />
|
|
|
+ <span style="margin-left: 10px">天</span>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -486,22 +415,12 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="开始时间:" prop="contractStartTime">
|
|
|
- <el-date-picker
|
|
|
- v-model="contractForm.contractStartTime"
|
|
|
- type="date"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
+ <el-date-picker v-model="contractForm.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="contractForm.contractEndTime"
|
|
|
- type="date"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
+ <el-date-picker v-model="contractForm.contractEndTime" type="date" placeholder="请选择" style="width: 100%" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -509,13 +428,8 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="开票类型:" prop="invoiceType">
|
|
|
- <el-select v-model="contractForm.invoiceType" placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option
|
|
|
- v-for="item in invoiceTypeList"
|
|
|
- :key="item.id"
|
|
|
- :label="item.invoiceTypeName"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-select v-model="contractForm.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>
|
|
|
@@ -531,25 +445,15 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="税率:" prop="taxRate">
|
|
|
- <el-select v-model="contractForm.taxRate" placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option
|
|
|
- v-for="item in taxRateList"
|
|
|
- :key="item.id"
|
|
|
- :label="item.taxrateName"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-select v-model="contractForm.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-col :span="12">
|
|
|
<el-form-item label="结算方式:" prop="settlementMethod">
|
|
|
- <el-select v-model="contractForm.settlementMethod" placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option
|
|
|
- v-for="item in settlementMethodList"
|
|
|
- :key="item.id"
|
|
|
- :label="item.settlementName"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-select v-model="contractForm.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>
|
|
|
@@ -572,12 +476,7 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="合同说明:" prop="contractDescription">
|
|
|
- <el-input
|
|
|
- v-model="contractForm.contractDescription"
|
|
|
- type="textarea"
|
|
|
- :rows="4"
|
|
|
- placeholder="请输入合同说明"
|
|
|
- />
|
|
|
+ <el-input v-model="contractForm.contractDescription" type="textarea" :rows="4" placeholder="请输入合同说明" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -592,27 +491,17 @@
|
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 品牌新增对话框 -->
|
|
|
- <el-dialog
|
|
|
- v-model="brandDialogVisible"
|
|
|
- title="添加品牌"
|
|
|
- width="600px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- class="brand-dialog"
|
|
|
- >
|
|
|
+ <el-dialog v-model="brandDialogVisible" title="添加品牌" width="600px" :close-on-click-modal="false" class="brand-dialog">
|
|
|
<div class="brand-dialog__search">
|
|
|
<el-form @submit.prevent>
|
|
|
<el-row :gutter="12" align="middle">
|
|
|
<el-col :span="14">
|
|
|
- <el-form-item label="品牌名称:" style="margin-bottom: 0;">
|
|
|
- <el-input
|
|
|
- v-model="brandSearchKeyword"
|
|
|
- placeholder="请输入品牌名称"
|
|
|
- @keyup.enter="handleSearchBrand"
|
|
|
- />
|
|
|
+ <el-form-item label="品牌名称:" style="margin-bottom: 0">
|
|
|
+ <el-input v-model="brandSearchKeyword" placeholder="请输入品牌名称" @keyup.enter="handleSearchBrand" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10" style="display: flex; justify-content: flex-end;">
|
|
|
- <el-form-item label-width="0" style="margin-bottom: 0;">
|
|
|
+ <el-col :span="10" style="display: flex; justify-content: flex-end">
|
|
|
+ <el-form-item label-width="0" style="margin-bottom: 0">
|
|
|
<el-button type="primary" @click="handleSearchBrand" :loading="brandSearchLoading">搜索</el-button>
|
|
|
<el-button type="primary" @click="handleAddBrandToList()">添加</el-button>
|
|
|
</el-form-item>
|
|
|
@@ -624,11 +513,12 @@
|
|
|
<!-- 搜索结果列表 -->
|
|
|
<div v-if="brandSearchResults.length > 0" class="brand-search-results">
|
|
|
<div class="search-results-title">搜索结果(点击添加):</div>
|
|
|
- <div class="brand-result-item"
|
|
|
+ <div
|
|
|
+ class="brand-result-item"
|
|
|
v-for="brand in brandSearchResults"
|
|
|
:key="brand.id"
|
|
|
@click="handleAddBrandToList(brand)"
|
|
|
- style="cursor: pointer;"
|
|
|
+ style="cursor: pointer"
|
|
|
>
|
|
|
<span class="brand-result-name">{{ brand.brandName }}</span>
|
|
|
<span class="brand-result-no">编号: {{ brand.brandNo }}</span>
|
|
|
@@ -644,11 +534,11 @@
|
|
|
closable
|
|
|
@close="handleRemoveTempBrand(brand)"
|
|
|
type="info"
|
|
|
- style="margin-right: 10px; margin-bottom: 10px;"
|
|
|
+ style="margin-right: 10px; margin-bottom: 10px"
|
|
|
>
|
|
|
{{ brand.brandName }}
|
|
|
</el-tag>
|
|
|
- <span v-if="tempSelectedBrands.length === 0" style="color: #999; font-size: 14px;">暂无已选择品牌</span>
|
|
|
+ <span v-if="tempSelectedBrands.length === 0" style="color: #999; font-size: 14px">暂无已选择品牌</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
@@ -671,7 +561,21 @@ import { useUserStore } from '@/store/modules/user';
|
|
|
import RegionCascader from '@/components/RegionCascader/index.vue';
|
|
|
import FileUpload from '@/components/FileUpload/index.vue';
|
|
|
import Pagination from '@/components/Pagination/index.vue';
|
|
|
-import { getInfo, getStaffListSplice, getSupplierStaffIds, getContactListById, getSupplierCategories, getSupplierContractsById, getBankBySupplierId, getAuthorizeDetailList, getDictData, getTaxRateList, getSettlementMethodList, getInvoiceTypeList } from '@/api/customer/info/index';
|
|
|
+
|
|
|
+import {
|
|
|
+ getInfo,
|
|
|
+ getStaffListSplice,
|
|
|
+ getSupplierStaffIds,
|
|
|
+ getContactListById,
|
|
|
+ getSupplierCategories,
|
|
|
+ getSupplierContractsById,
|
|
|
+ getBankBySupplierId,
|
|
|
+ getAuthorizeDetailList,
|
|
|
+ getDictData,
|
|
|
+ getTaxRateList,
|
|
|
+ getSettlementMethodList,
|
|
|
+ getInvoiceTypeList
|
|
|
+} from '@/api/customer/info/index';
|
|
|
import { updateInfo as updateSupplierInfo } from '@/api/supplier/info';
|
|
|
import { getBank, updateBank, addBank } from '@/api/customer/bank/index';
|
|
|
import { BankForm } from '@/api/customer/bank/types';
|
|
|
@@ -712,6 +616,11 @@ import SupplyInfoTab from './components/SupplyInfoTab.vue';
|
|
|
import AddressTab from './components/AddressTab.vue';
|
|
|
import ContractTab from './components/ContractTab.vue';
|
|
|
|
|
|
+import { listQualification } from '@/api/supplier/qualification';
|
|
|
+import type { QualificationVO } from '@/api/supplier/qualification/types';
|
|
|
+import AccountTab from './components/AccountTab.vue';
|
|
|
+import QualificationTab from './components/QualificationTab.vue';
|
|
|
+
|
|
|
const scmEditInfo = (data: any) => updateSupplierInfo(data);
|
|
|
|
|
|
const route = useRoute();
|
|
|
@@ -741,6 +650,9 @@ const contactSearchParams = ref({
|
|
|
userName: ''
|
|
|
});
|
|
|
|
|
|
+// 供应商资质相关数据
|
|
|
+const qualificationList = ref<QualificationVO[]>([]);
|
|
|
+
|
|
|
// 联系人对话框相关
|
|
|
const contactDialogVisible = ref(false);
|
|
|
const contactDialogTitle = ref('');
|
|
|
@@ -790,7 +702,14 @@ const contactFormRules = {
|
|
|
const resetPwdDialogVisible = ref(false);
|
|
|
const resetPwdFormRef = ref<ElFormInstance>();
|
|
|
const resetPwdSubmitLoading = ref(false);
|
|
|
-const resetPwdForm = ref<{ id: string | number | null; userId: string | number | null; userName: string; phone: string; password: string; confirmPassword: string }>({
|
|
|
+const resetPwdForm = ref<{
|
|
|
+ id: string | number | null;
|
|
|
+ userId: string | number | null;
|
|
|
+ userName: string;
|
|
|
+ phone: string;
|
|
|
+ password: string;
|
|
|
+ confirmPassword: string;
|
|
|
+}>({
|
|
|
id: null,
|
|
|
userId: null,
|
|
|
userName: '',
|
|
|
@@ -967,6 +886,23 @@ const getSystemBankData = async () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+/** 获取资质列表 */
|
|
|
+const getQualificationList = async () => {
|
|
|
+ try {
|
|
|
+ const res = await listQualification({
|
|
|
+ supplierId: route.query.id as any,
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 99
|
|
|
+ });
|
|
|
+ qualificationList.value = res.rows || [];
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取资质列表失败:', e);
|
|
|
+
|
|
|
+ ElMessage.error('获取资质列表失败');
|
|
|
+ } finally {
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
/** 获取付款信息 */
|
|
|
const getPaymentInfo = async () => {
|
|
|
const id = route.query.id as string;
|
|
|
@@ -1213,10 +1149,10 @@ const getDetail = async () => {
|
|
|
// 使用临时表数据覆盖主表数据
|
|
|
const tempData: any = tempRes.data;
|
|
|
detailData.value = {
|
|
|
- ...detailData.value, // 保留主表的一些基础字段
|
|
|
- ...tempData, // 使用临时表的修改数据
|
|
|
- id: detailData.value.id, // 确保ID是主表的ID
|
|
|
- supplierNo: detailData.value.supplierNo // 确保supplierNo是主表的
|
|
|
+ ...detailData.value, // 保留主表的一些基础字段
|
|
|
+ ...tempData, // 使用临时表的修改数据
|
|
|
+ id: detailData.value.id, // 确保ID是主表的ID
|
|
|
+ supplierNo: detailData.value.supplierNo // 确保supplierNo是主表的
|
|
|
} as any;
|
|
|
console.log('已加载临时表数据:', tempData);
|
|
|
}
|
|
|
@@ -1690,7 +1626,7 @@ const handleAddBrandToList = (brand?: BrandVO) => {
|
|
|
}
|
|
|
|
|
|
// 检查品牌是否已存在
|
|
|
- const exists = tempSelectedBrands.value.some(b => b.id === brand!.id);
|
|
|
+ const exists = tempSelectedBrands.value.some((b) => b.id === brand!.id);
|
|
|
|
|
|
if (exists) {
|
|
|
ElMessage.warning('该品牌已添加');
|
|
|
@@ -1707,7 +1643,7 @@ const handleAddBrandToList = (brand?: BrandVO) => {
|
|
|
|
|
|
/** 删除临时品牌 */
|
|
|
const handleRemoveTempBrand = (brand: BrandVO) => {
|
|
|
- const index = tempSelectedBrands.value.findIndex(b => b.id === brand.id);
|
|
|
+ const index = tempSelectedBrands.value.findIndex((b) => b.id === brand.id);
|
|
|
if (index > -1) {
|
|
|
tempSelectedBrands.value.splice(index, 1);
|
|
|
}
|
|
|
@@ -1715,7 +1651,7 @@ const handleRemoveTempBrand = (brand: BrandVO) => {
|
|
|
|
|
|
/** 删除已选择的品牌 */
|
|
|
const handleRemoveBrand = async (brand: BrandVO) => {
|
|
|
- const index = selectedBrands.value.findIndex(b => b.id === brand.id);
|
|
|
+ const index = selectedBrands.value.findIndex((b) => b.id === brand.id);
|
|
|
if (index > -1) {
|
|
|
selectedBrands.value.splice(index, 1);
|
|
|
// 立即保存到后端
|
|
|
@@ -1759,7 +1695,7 @@ const saveBrandsToServer = async () => {
|
|
|
}
|
|
|
|
|
|
// 将品牌ID用逗号分隔保存
|
|
|
- const brandIds = selectedBrands.value.map(brand => brand.id).join(',');
|
|
|
+ const brandIds = selectedBrands.value.map((brand) => brand.id).join(',');
|
|
|
|
|
|
// 方案B:只提交必要字段,避免EditGroup校验因缺字段失败
|
|
|
await scmEditInfo({
|
|
|
@@ -1772,25 +1708,28 @@ const saveBrandsToServer = async () => {
|
|
|
const initBrandList = async () => {
|
|
|
if (detailData.value.operatingBrand) {
|
|
|
// 后端返回的是用逗号分隔的品牌ID
|
|
|
- const brandIds = detailData.value.operatingBrand.split(',').filter(id => id.trim());
|
|
|
+ const brandIds = detailData.value.operatingBrand.split(',').filter((id) => id.trim());
|
|
|
|
|
|
if (brandIds.length > 0) {
|
|
|
try {
|
|
|
// 根据品牌ID获取品牌详细信息
|
|
|
- const brandPromises = brandIds.map(id => getBrand(id.trim()));
|
|
|
+ const brandPromises = brandIds.map((id) => getBrand(id.trim()));
|
|
|
const brandResults = await Promise.allSettled(brandPromises);
|
|
|
|
|
|
selectedBrands.value = brandResults
|
|
|
- .filter(result => result.status === 'fulfilled')
|
|
|
- .map(result => (result as PromiseFulfilledResult<any>).value.data)
|
|
|
- .filter(brand => brand); // 过滤掉空值
|
|
|
+ .filter((result) => result.status === 'fulfilled')
|
|
|
+ .map((result) => (result as PromiseFulfilledResult<any>).value.data)
|
|
|
+ .filter((brand) => brand); // 过滤掉空值
|
|
|
} catch (e) {
|
|
|
console.error('获取品牌详情失败:', e);
|
|
|
// 降级处理:如果获取品牌详情失败,使用ID作为显示名称
|
|
|
- selectedBrands.value = brandIds.map(id => ({
|
|
|
- id: id.trim(),
|
|
|
- brandName: id.trim()
|
|
|
- } as BrandVO));
|
|
|
+ selectedBrands.value = brandIds.map(
|
|
|
+ (id) =>
|
|
|
+ ({
|
|
|
+ id: id.trim(),
|
|
|
+ brandName: id.trim()
|
|
|
+ }) as BrandVO
|
|
|
+ );
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1844,9 +1783,7 @@ const getSupplyAreaList = async () => {
|
|
|
});
|
|
|
|
|
|
// 转换为数组
|
|
|
- supplyAreaList.value = Object.values(provinceMap).filter((item: any) =>
|
|
|
- item.province || item.city
|
|
|
- );
|
|
|
+ supplyAreaList.value = Object.values(provinceMap).filter((item: any) => item.province || item.city);
|
|
|
|
|
|
console.log('供货区域列表:', supplyAreaList.value);
|
|
|
console.log('保存的原始数据:', savedAreaData.value);
|
|
|
@@ -2056,11 +1993,11 @@ const formatDate = (date: string | Date) => {
|
|
|
/** 获取合同状态类型 */
|
|
|
const getContractStatusType = (status: number) => {
|
|
|
const statusMap = {
|
|
|
- 0: 'info', // 草稿
|
|
|
+ 0: 'info', // 草稿
|
|
|
1: 'success', // 已生效
|
|
|
2: 'warning', // 已到期
|
|
|
- 3: 'danger', // 已终止
|
|
|
- 4: 'danger' // 已作废
|
|
|
+ 3: 'danger', // 已终止
|
|
|
+ 4: 'danger' // 已作废
|
|
|
};
|
|
|
return statusMap[status] || 'info';
|
|
|
};
|
|
|
@@ -2071,7 +2008,6 @@ const getContractStatusText = (status: number) => {
|
|
|
0: '待审核',
|
|
|
1: '生效',
|
|
|
2: '失效'
|
|
|
-
|
|
|
};
|
|
|
return statusMap[status] || '未知';
|
|
|
};
|
|
|
@@ -2081,7 +2017,7 @@ const getContractTypeText = (type: string | number) => {
|
|
|
const typeMap = {
|
|
|
'0': '年度合作',
|
|
|
'1': '项目采购',
|
|
|
- '2': '其他合作',
|
|
|
+ '2': '其他合作'
|
|
|
};
|
|
|
return typeMap[type] || '未知';
|
|
|
};
|
|
|
@@ -2424,7 +2360,7 @@ const handleAddPayment = () => {
|
|
|
|
|
|
/** 发票类型选择改变 */
|
|
|
const handleInvoiceTypeChange = (value: string | number) => {
|
|
|
- const selectedInvoice = invoiceTypeList.value.find(item => item.id === value);
|
|
|
+ const selectedInvoice = invoiceTypeList.value.find((item) => item.id === value);
|
|
|
if (selectedInvoice) {
|
|
|
paymentForm.value.invoiceTypeNo = selectedInvoice.id;
|
|
|
paymentForm.value.invoiceTypeName = selectedInvoice.invoiceTypeName;
|
|
|
@@ -2433,7 +2369,7 @@ const handleInvoiceTypeChange = (value: string | number) => {
|
|
|
|
|
|
/** 银行选择改变 */
|
|
|
const handleBankChange = (value: string | number) => {
|
|
|
- const selectedBank = systemBankList.value.find(item => item.id === value);
|
|
|
+ const selectedBank = systemBankList.value.find((item) => item.id === value);
|
|
|
if (selectedBank) {
|
|
|
paymentForm.value.bankInfoNo = selectedBank.id;
|
|
|
paymentForm.value.bankName = selectedBank.bnName;
|
|
|
@@ -2480,6 +2416,47 @@ const handlePaymentSubmit = async () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+/** 下载附件 */
|
|
|
+const handleDownload = async (row: QualificationVO) => {
|
|
|
+ if (!row.attachmentUrl) {
|
|
|
+ ElMessage.warning('暂无附件可下载');
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 使用 fetch 获取文件并强制下载
|
|
|
+
|
|
|
+ const response = await fetch(row.attachmentUrl);
|
|
|
+
|
|
|
+ if (!response.ok) throw new Error('下载失败');
|
|
|
+
|
|
|
+ const blob = await response.blob();
|
|
|
+
|
|
|
+ const url = window.URL.createObjectURL(blob);
|
|
|
+
|
|
|
+ const link = document.createElement('a');
|
|
|
+
|
|
|
+ link.href = url;
|
|
|
+
|
|
|
+ link.download = row.attachmentName || '附件';
|
|
|
+
|
|
|
+ document.body.appendChild(link);
|
|
|
+
|
|
|
+ link.click();
|
|
|
+
|
|
|
+ document.body.removeChild(link);
|
|
|
+
|
|
|
+ window.URL.revokeObjectURL(url);
|
|
|
+
|
|
|
+ ElMessage.success('开始下载');
|
|
|
+ } catch (e) {
|
|
|
+ console.error('下载附件失败:', e);
|
|
|
+
|
|
|
+ ElMessage.error('下载失败');
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
/** 获取地址列表 */
|
|
|
const getAddressList = async () => {
|
|
|
const id = route.query.id as string;
|
|
|
@@ -2745,6 +2722,7 @@ onMounted(async () => {
|
|
|
getAuthorizationList(); // 获取授权详情列表
|
|
|
getAddressList(); // 获取地址列表
|
|
|
getSupplyAreaList(); // 获取供货区域列表
|
|
|
+ getQualificationList();
|
|
|
}
|
|
|
});
|
|
|
</script>
|