src/views/salesManagement/opportunityManagement/index.vue
@@ -78,6 +78,8 @@
        :row-key="(row) => row.id"
        height="calc(100vh - 18.5em)"
        stripe
        show-summary
        :summary-method="contractAmountSummaryMethod"
      >
        <el-table-column align="center" type="selection" width="55" fixed="left"/>
        <el-table-column align="center" label="序号" type="index" width="60" />
@@ -96,7 +98,7 @@
        <el-table-column label="客户名称" prop="customerName" show-overflow-tooltip />
        <el-table-column label="行业" prop="industry" show-overflow-tooltip />
        <el-table-column label="商机来源" prop="businessSource" show-overflow-tooltip />
        <el-table-column label="签约金额" prop="contractAmount" show-overflow-tooltip />
        <el-table-column label="签约金额" prop="contractAmount" show-overflow-tooltip width="150" />
        <!-- <el-table-column label="客户描述" prop="description" show-overflow-tooltip min-width="200" /> -->
        <el-table-column label="录入人" prop="entryPerson" show-overflow-tooltip width="120" />
        <el-table-column label="更新日期" prop="updateTime" width="120">
@@ -120,7 +122,7 @@
              size="small"
              @click="handleAddOperation(row)"
            >
              添加改造内容
              添加拜访记录
            </el-button>
            <el-button
              link
@@ -282,14 +284,25 @@
          </el-input>
        </el-form-item>
        
        <el-form-item label="改造内容" prop="description">
        <el-form-item label="拜访记录" prop="description">
          <el-input
            v-model="form.description"
            type="textarea"
            :autosize="{ minRows: 4, maxRows: 10 }"
            :placeholder="renovationPlaceholder"
            placeholder="请输入拜访记录"
            show-word-limit
            :disabled="operationType === 'detail'"
          />
        </el-form-item>
        <el-form-item label="改造内容" prop="renContent">
          <el-input
            v-model="form.renContent"
            type="textarea"
            :autosize="{ minRows: 3, maxRows: 8 }"
            :placeholder="renovationPlaceholder"
            show-word-limit
            :disabled="operationType === 'detail' || operationType === 'addOperation'"
          />
        </el-form-item>
@@ -300,7 +313,7 @@
            :autosize="{ minRows: 3, maxRows: 10 }"
            placeholder="是否垫资?企业是否开票?企业是否分补贴或额外出钱?"
            show-word-limit
            :disabled="operationType === 'detail'"
            :disabled="operationType === 'detail' || operationType === 'addOperation'"
          />
        </el-form-item>
        
@@ -325,9 +338,10 @@
          <el-col :span="24">
            <el-form-item label="附件材料:">
              <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
                :disabled="operationType === 'addOperation'"
                :headers="upload.headers" :data="upload.data" :before-upload="handleBeforeUpload" :on-error="handleUploadError"
                :on-success="handleUploadSuccess" :on-remove="handleRemove">
                <el-button type="primary">上传</el-button>
                <el-button type="primary" :disabled="operationType === 'addOperation'">上传</el-button>
                <template #tip>
                  <div class="el-upload__tip">
                    文件格式支持
@@ -386,7 +400,7 @@
                  </el-tag>
                </div>
                <div class="description-change" v-if="record.description">
                  <span class="label">改造内容:</span>
                  <span class="label">拜访记录:</span>
                  <span class="description-text">{{ record.description }}</span>
                </div>
              </div>
@@ -497,6 +511,7 @@
  businessSource: '',
  contractAmount: '',
  description: '',
  renContent: '',
  paymentDescription: '',
  entryPerson: userStore.nickName,
  entryDate: dayjs().format('YYYY-MM-DD')
@@ -551,10 +566,13 @@
const statusOptions = [
  { value: '新建', label: '新建' },
  { value: '项目跟踪', label: '项目跟踪' },
  { value: '放弃', label: '放弃' },
  { value: '合同签约', label: '合同签约' },
  { value: '备案申报', label: '备案申报' },
  { value: '项目交付', label: '项目交付' },
  { value: '项目验收', label: '项目验收' }
  { value: '项目验收', label: '项目验收' },
  { value: '项目回款', label: '项目回款' },
  { value: '回补贴', label: '回补贴' }
]
// 省份选项
@@ -566,10 +584,13 @@
  const typeMap = { 
    '新建': 'info', 
    '项目跟踪': 'primary', 
    '放弃': 'danger',
    '合同签约': 'warning', 
    '备案申报': 'primary',
    '项目交付': 'success',
    '项目验收': 'success'
    '项目验收': 'success',
    '项目回款': 'success',
    '回补贴': 'success'
  } 
  return typeMap[status] || 'info' 
@@ -579,10 +600,13 @@
  const textMap = { 
    '新建': '新建', 
    '项目跟踪': '项目跟踪', 
    '放弃': '放弃',
    '合同签约': '合同签约', 
    '备案申报': '备案申报',
    '项目交付': '项目交付',
    '项目验收': '项目验收'
    '项目验收': '项目验收',
    '项目回款': '项目回款',
    '回补贴': '回补贴'
  } 
  return textMap[status] || '未知' 
}
@@ -655,6 +679,11 @@
  })
}
// 签约金额合计(复用全局 summarizeTable)
const contractAmountSummaryMethod = (param) => {
  return proxy.summarizeTable(param, ["contractAmount"]);
}
// 分页变化
const paginationChange = (pagination) => {
  page.current = pagination.page
@@ -699,12 +728,11 @@
    customerOption.value = res
  })
  
  // 使用当前行数据作为基础,但只能修改状态和客户描述
  // 使用当前行数据作为基础,但只能修改状态和拜访记录;付款描述、改造内容等保留反显
  Object.assign(form, row, {
    // 保留原始商机ID,用于关联操作记录
    status: row.status,
    description: '', // 清空客户描述,允许重新填写
    paymentDescription: '', // 清空付款描述,允许重新填写
    description: '', // 清空拜访记录,允许重新填写
    entryPerson: userStore.nickName, // 设置录入人为当前账号
    entryDate: dayjs().format('YYYY-MM-DD') // 设置录入时间为当天
  })
@@ -926,6 +954,7 @@
    businessSource: '',
    contractAmount: '',
    description: '',
    renContent: '',
    paymentDescription: '',
    entryPerson: userStore.nickName,
    entryDate: dayjs().format('YYYY-MM-DD')