更新若干功能

This commit is contained in:
hero920103 committed 2026-10-21 17:45:50 +08:00
1 parent 892ba5886d
commit 79d5ae6b66
45 files changed
+6755 -38

No files matched your search

+53 -3
View File
@@ -82,7 +82,7 @@
<el-table-column label="下次联系时间" width="160" align="center">
<template #default="{ row }">{{ formatDateTime(row.next_contact_time) }}</template>
</el-table-column>
<el-table-column label="操作" width="220" align="center" fixed="right">
<el-table-column label="操作" width="280" align="center" fixed="right">
<template #default="{ row }">
<el-button link type="primary" size="small" :disabled="row.locked === 1" @click="openEdit(row)">
编辑
@@ -91,11 +91,31 @@
link
type="warning"
size="small"
:disabled="row.locked === 1 || row.status === 2"
:disabled="row.locked === 1 || row.status === 2 || row.status === 3"
@click="openConvert(row)"
>
转项目
</el-button>
<el-button
v-if="row.status === 3"
link
type="success"
size="small"
:disabled="row.locked === 1"
@click="handleRestore(row)"
>
恢复
</el-button>
<el-button
v-else
link
type="info"
size="small"
:disabled="row.locked === 1 || row.status === 2"
@click="handleDiscard(row)"
>
废弃
</el-button>
<el-button
link
type="danger"
@@ -138,7 +158,7 @@
import { ref, reactive, onMounted } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { Plus, Search, Refresh } from "@element-plus/icons-vue";
import { getBusinessList, deleteBusiness } from "@/api/crmPipeline";
import { getBusinessList, deleteBusiness, changeBusinessStatus } from "@/api/crmPipeline";
import BusinessEdit from "./components/edit.vue";
import BusinessConvert from "./components/convert.vue";
import BusinessDetail from "./components/detail.vue";
@@ -228,6 +248,36 @@ function handleConvertSuccess() {
ElMessage.success("商机已转化为项目,可在项目管理中继续跟进");
}
/** 废弃商机:保留全部过程数据,仅把状态置为已废弃,可随时恢复 */
async function handleDiscard(row) {
try {
await ElMessageBox.confirm(
`确定废弃商机「${row.business_name}」吗?废弃后可随时恢复为「跟进中」。`,
"废弃确认",
{ type: "warning" }
);
await changeBusinessStatus(row.id, 3);
ElMessage.success("商机已废弃");
fetchList();
} catch (e) {
if (e !== "cancel") ElMessage.error(e.message || "废弃失败");
}
}
/** 恢复商机:把已废弃的商机恢复为跟进中 */
async function handleRestore(row) {
try {
await ElMessageBox.confirm(`确定将商机「${row.business_name}」恢复为「跟进中」吗?`, "恢复确认", {
type: "info",
});
await changeBusinessStatus(row.id, 1);
ElMessage.success("商机已恢复为跟进中");
fetchList();
} catch (e) {
if (e !== "cancel") ElMessage.error(e.message || "恢复失败");
}
}
async function handleDelete(row) {
try {
await ElMessageBox.confirm(`确定删除商机「${row.business_name}」吗?删除后不可恢复。`, "删除确认", {