hurx 2 дней назад
Родитель
Сommit
9e35cc8d90

+ 2 - 2
src/api/partner/merchant/types.ts

@@ -3,7 +3,7 @@ export interface PartnerMerchantVO {
   partnerNo: string;
   partnerName: string;
   company?: string;
-  partnerCooperateType?: number;
+  partnerCooperateType?: string;
   legal?: string;
   telephone?: string;
   fax?: string;
@@ -19,7 +19,7 @@ export interface PartnerMerchantForm {
   partnerNo?: string;
   partnerName: string;
   company?: string;
-  partnerCooperateType?: number;
+  partnerCooperateType?: string;
   legal?: string;
   telephone?: string;
   fax?: string;

+ 50 - 10
src/views/partner/merchant/components/ContractDialog.vue

@@ -23,11 +23,18 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="合作开始时间">
-            <el-date-picker v-model="form.startTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
+            <el-date-picker
+              v-model="form.startTime"
+              type="date"
+              placeholder="请选择日期"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+              @change="formRef?.validateField('endTime')"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="合作结束时间">
+          <el-form-item label="合作结束时间" prop="endTime">
             <el-date-picker v-model="form.endTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
           </el-form-item>
         </el-col>
@@ -41,8 +48,7 @@
         <el-col :span="12">
           <el-form-item label="合同类型">
             <el-select v-model="form.contractType" placeholder="请选择" style="width: 100%">
-              <el-option label="战略合作" :value="1" />
-              <el-option label="项目合作" :value="2" />
+              <el-option v-for="dict in contract_type" :key="dict.value" :label="dict.label" :value="dict.value" />
             </el-select>
           </el-form-item>
         </el-col>
@@ -50,12 +56,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="结算周期(天)">
-            <el-input v-model="form.settlementCycle" placeholder="请输入" />
+            <el-input
+              v-model="form.settlementCycle"
+              placeholder="请输入"
+              @input="form.settlementCycle = form.settlementCycle.replace(/[^0-9.]/g, '')"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="销售目标(万)">
-            <el-input v-model="form.salesTarget" placeholder="请输入" />
+            <el-input
+              v-model="form.salesTarget"
+              placeholder="请输入"
+              @input="
+                (e: any) => {
+                  form.salesTarget = e.target.value.replace(/[^0-9]/g, '') as any;
+                }
+              "
+            />
           </el-form-item>
         </el-col>
       </el-row>
@@ -101,10 +119,14 @@
 </template>
 
 <script setup lang="ts">
-import { ref, computed } from 'vue';
+import { ref, computed, watch, toRefs, getCurrentInstance } from 'vue';
+import type { ComponentInternalInstance } from 'vue';
 import FileUpload from '@/components/FileUpload/index.vue';
 import type { PartnerContractForm } from '@/api/partner/contract/types';
 import { listProjectInfo } from '@/api/project/projectInfo';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { contract_type } = toRefs<any>(proxy?.useDict('contract_type'));
 interface Props {
   visible: boolean;
   formData: PartnerContractForm;
@@ -125,16 +147,34 @@ const dialogVisible = computed({
   set: (value) => emit('update:visible', value)
 });
 
+const validateEndTime = (_rule: any, value: string, callback: any) => {
+  if (value && form.value.startTime && value < form.value.startTime) {
+    callback(new Error('结束时间不能早于开始时间'));
+  } else {
+    callback();
+  }
+};
+
 const rules = {
   contractNo: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
-  phone: [{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }]
+  phone: [{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }],
+  endTime: [{ validator: validateEndTime, trigger: 'change' }]
 };
 
 const formRef = ref();
 const form = ref<PartnerContractForm>({
   ...props.formData,
-  cooperationId: props.formData.cooperationId || null
-});
+  cooperationId: props.formData.cooperationId || null,
+  contractType: String(props.formData.contractType ?? '')
+} as any);
+
+watch(
+  () => props.formData,
+  (newVal) => {
+    form.value = { ...newVal, cooperationId: newVal.cooperationId || null, contractType: String(newVal.contractType ?? '') } as any;
+  },
+  { deep: true }
+);
 
 const handleClose = () => {
   emit('update:visible', false);

+ 2 - 2
src/views/partner/merchant/components/WarehouseDialog.vue

@@ -24,8 +24,8 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="仓库面积">
-            <el-input v-model="form.warehouseArea" placeholder="请输入" />
+          <el-form-item label="仓库面积(㎡)">
+            <el-input v-model="form.warehouseArea" placeholder="请输入" @input="form.warehouseArea = form.warehouseArea.replace(/[^0-9.]/g, '')" />
           </el-form-item>
         </el-col>
       </el-row>

+ 15 - 17
src/views/partner/merchant/index.vue

@@ -45,9 +45,7 @@
         <el-table-column label="公司简称" align="center" prop="company" min-width="100" />
         <el-table-column label="合作型态" align="center" prop="partnerCooperateType" min-width="100">
           <template #default="scope">
-            <span v-if="scope.row.partnerCooperateType === 0">伙伴商</span>
-            <span v-else-if="scope.row.partnerCooperateType === 1">经销商</span>
-            <span v-else-if="scope.row.partnerCooperateType === 2">代理商</span>
+            <dict-tag :options="cooperate_type" :value="scope.row.partnerCooperateType" />
           </template>
         </el-table-column>
         <el-table-column label="法人代表" align="center" prop="legal" min-width="100" />
@@ -57,7 +55,7 @@
         <el-table-column label="分司注册地址" align="center" prop="operatingAddress" :show-overflow-tooltip="true" min-width="150" />
         <el-table-column label="操作" align="center" width="120" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
-            <el-button link type="primary" @click="handleUpdate(scope.row)">详情</el-button>
+            <el-button link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
             <el-button link type="primary" @click="handleDelete(scope.row)">删除</el-button>
           </template>
         </el-table-column>
@@ -109,10 +107,8 @@
               </el-col>
               <el-col :span="12">
                 <el-form-item label="合作型态" prop="partnerCooperateType">
-                  <el-select v-model="form.partnerCooperateType" placeholder="请选择">
-                    <el-option label="伙伴商" :value="0" />
-                    <el-option label="经销商" :value="1" />
-                    <el-option label="代理商" :value="2" />
+                  <el-select v-model="form.partnerCooperateType" class="w-full">
+                    <el-option v-for="dict in cooperate_type" :key="dict.value" :label="dict.label" :value="dict.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -257,12 +253,14 @@
               <el-table-column label="合作项目名称" prop="cooperativeName" />
               <el-table-column label="合同类型" prop="contractType">
                 <template #default="scope">
-                  <span v-if="scope.row.contractType === 1">战略合作</span>
-                  <span v-else-if="scope.row.contractType === 2">项目合作</span>
-                  <span v-else>{{ scope.row.contractType }}</span>
+                  <dict-tag :options="contract_type" :value="scope.row.contractType" />
+                </template>
+              </el-table-column>
+              <el-table-column label="合同状态" prop="contractStatus">
+                <template #default="scope">
+                  <dict-tag :options="COOPERATION_STATUS" :value="scope.row.contractStatus" />
                 </template>
               </el-table-column>
-              <el-table-column label="合同状态" prop="contractStatus" />
               <el-table-column label="合作区域" prop="area" />
               <el-table-column label="操作" width="150">
                 <template #default="scope">
@@ -359,7 +357,7 @@ import { PartnerWarehouseVO, PartnerWarehouseForm } from '@/api/partner/warehous
 import { listPartnerWarehouse, addPartnerWarehouse, updatePartnerWarehouse, delPartnerWarehouse } from '@/api/partner/warehouse';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-
+const { cooperate_type, COOPERATION_STATUS, contract_type } = toRefs<any>(proxy?.useDict('cooperate_type', 'COOPERATION_STATUS', 'contract_type'));
 const merchantList = ref<PartnerMerchantVO[]>([]);
 const loading = ref(false);
 const showSearch = ref(true);
@@ -481,7 +479,7 @@ const initContractForm: PartnerContractForm = {
   endTime: '',
   categories: '',
   fee: 0,
-  contractType: 1,
+  contractType: 0,
   settlementCycle: '',
   salesTarget: 0,
   area: '',
@@ -529,7 +527,7 @@ const initFormData: PartnerMerchantForm = {
   partnerNo: '',
   partnerName: '',
   company: '',
-  partnerCooperateType: undefined,
+  partnerCooperateType: '0',
   legal: '',
   telephone: '',
   fax: '',
@@ -656,7 +654,7 @@ const handleUpdate = async (row?: PartnerMerchantVO) => {
       partnerNo: responseData.partnerNo || '',
       partnerName: responseData.partnerName || '',
       company: responseData.company || '',
-      partnerCooperateType: responseData.partnerCooperateType,
+      partnerCooperateType: String(responseData.partnerCooperateType ?? '0'),
       legal: responseData.legal || '',
       telephone: responseData.telephone || '',
       fax: responseData.fax || '',
@@ -1180,7 +1178,7 @@ const handleAddContract = () => {
     endTime: '',
     categories: '',
     fee: 0,
-    contractType: 1,
+    contractType: 0,
     settlementCycle: '',
     salesTarget: 0,
     area: '',