|
@@ -14,42 +14,116 @@
|
|
|
action: () => openModal('add'),
|
|
|
},
|
|
|
]"
|
|
|
- @get-list="getList">
|
|
|
+ @get-list="getList"
|
|
|
+ >
|
|
|
<template #address="{ item }">
|
|
|
<span>{{ item.countryName }}</span>
|
|
|
<span v-if="item.provinceName"> ,{{ item.provinceName }}</span>
|
|
|
<span v-if="item.cityName"> ,{{ item.cityName }}</span>
|
|
|
</template>
|
|
|
<template #name="{ item }">
|
|
|
- <div style="cursor: pointer; color: #409eff" @click="handleClickName(item)">
|
|
|
+ <div
|
|
|
+ style="cursor: pointer; color: #409eff"
|
|
|
+ @click="handleClickName(item)"
|
|
|
+ >
|
|
|
{{ item.name }}
|
|
|
</div>
|
|
|
</template>
|
|
|
+ <template #tags="{ item }">
|
|
|
+ <div>
|
|
|
+ <el-tag
|
|
|
+ style="margin-right: 10px"
|
|
|
+ type="success"
|
|
|
+ v-for="(tag, index) in item.tag"
|
|
|
+ :key="index"
|
|
|
+ >{{ dictValueLabel(tag, customerTag) }}</el-tag
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #follow="{ item }">
|
|
|
+ <div style="width: 100%; display: flex">
|
|
|
+ <div
|
|
|
+ v-for="(follow, index) in item.customerFollowRecordsList"
|
|
|
+ :key="index"
|
|
|
+ style="width: 190px; padding: 0 5px; border-right: 1px solid #ccc"
|
|
|
+ >
|
|
|
+ <div style="display: flex; align-items: center">
|
|
|
+ <span>{{ follow.date }}</span>
|
|
|
+ <el-icon
|
|
|
+ style="margin: 0 10px; cursor: pointer"
|
|
|
+ @click="updateFollow(follow)"
|
|
|
+ ><Edit
|
|
|
+ /></el-icon>
|
|
|
+ <el-icon style="cursor: pointer" @click="deleteFollow(follow)"
|
|
|
+ ><Delete
|
|
|
+ /></el-icon>
|
|
|
+ </div>
|
|
|
+ <div style="margin-top: 5px">
|
|
|
+ {{ follow.content }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</byTable>
|
|
|
</div>
|
|
|
|
|
|
- <el-dialog :title="modalType == 'add' ? '新增' : '编辑'" v-if="dialogVisible" v-model="dialogVisible" width="800" v-loading="loadingOperation">
|
|
|
- <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="submit">
|
|
|
+ <el-dialog
|
|
|
+ :title="modalType == 'add' ? '新增' : '编辑'"
|
|
|
+ v-if="dialogVisible"
|
|
|
+ v-model="dialogVisible"
|
|
|
+ width="800"
|
|
|
+ v-loading="loadingOperation"
|
|
|
+ >
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfig"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formData.data"
|
|
|
+ :rules="rules"
|
|
|
+ ref="submit"
|
|
|
+ >
|
|
|
<template #address>
|
|
|
<el-row style="width: 100%">
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="countryId">
|
|
|
- <el-select v-model="formData.data.countryId" placeholder="国家" @change="(val) => getCityData(val, '20', true)">
|
|
|
- <el-option v-for="item in countryData" :label="item.chineseName" :value="item.id"> </el-option>
|
|
|
+ <el-select
|
|
|
+ v-model="formData.data.countryId"
|
|
|
+ placeholder="国家"
|
|
|
+ @change="(val) => getCityData(val, '20', true)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in countryData"
|
|
|
+ :label="item.chineseName"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="provinceId">
|
|
|
- <el-select v-model="formData.data.provinceId" placeholder="省/洲" @change="(val) => getCityData(val, '30', true)">
|
|
|
- <el-option v-for="item in provinceData" :label="item.name" :value="item.id"> </el-option>
|
|
|
+ <el-select
|
|
|
+ v-model="formData.data.provinceId"
|
|
|
+ placeholder="省/洲"
|
|
|
+ @change="(val) => getCityData(val, '30', true)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in provinceData"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="cityId">
|
|
|
<el-select v-model="formData.data.cityId" placeholder="城市">
|
|
|
- <el-option v-for="item in cityData" :label="item.name" :value="item.id"> </el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in cityData"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
@@ -57,7 +131,8 @@
|
|
|
<el-row style="margin-top: 20px; width: 100%">
|
|
|
<el-col :span="24">
|
|
|
<el-form-item prop="address">
|
|
|
- <el-input v-model="formData.data.address" type="textarea"> </el-input>
|
|
|
+ <el-input v-model="formData.data.address" type="textarea">
|
|
|
+ </el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
@@ -65,29 +140,110 @@
|
|
|
<template #person>
|
|
|
<div>
|
|
|
<el-button type="primary" @click="clickAddPerson"> 添加 </el-button>
|
|
|
- <byTable :source="formData.data.customerUserList" :config="configPerson" hideSearch hidePagination> </byTable>
|
|
|
+ <byTable
|
|
|
+ :source="formData.data.customerUserList"
|
|
|
+ :config="configPerson"
|
|
|
+ hideSearch
|
|
|
+ hidePagination
|
|
|
+ >
|
|
|
+ </byTable>
|
|
|
</div>
|
|
|
</template>
|
|
|
</byForm>
|
|
|
<template #footer>
|
|
|
<el-button @click="dialogVisible = false" size="large">取 消</el-button>
|
|
|
- <el-button type="primary" @click="submitForm('submit')" size="large" :loading="submitLoading"> 确 定 </el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="submitForm('submit')"
|
|
|
+ size="large"
|
|
|
+ :loading="submitLoading"
|
|
|
+ >
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
|
|
|
<el-dialog title="添加联系人" v-model="openPerson" width="400">
|
|
|
- <byForm :formConfig="formConfigPerson" :formOption="formOption" v-model="formPerson.data" :rules="rulesPerson" ref="person"> </byForm>
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfigPerson"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formPerson.data"
|
|
|
+ :rules="rulesPerson"
|
|
|
+ ref="person"
|
|
|
+ >
|
|
|
+ </byForm>
|
|
|
<template #footer>
|
|
|
<el-button @click="openPerson = false" size="large">取 消</el-button>
|
|
|
- <el-button type="primary" @click="submitPerson('person')" size="large"> 确 定 </el-button>
|
|
|
+ <el-button type="primary" @click="submitPerson('person')" size="large">
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
|
|
|
<el-dialog title="分配" v-model="openAllocation" width="300">
|
|
|
- <byForm :formConfig="formConfigAllocation" :formOption="formOption" v-model="formAllocation.data" ref="allocation"> </byForm>
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfigAllocation"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formAllocation.data"
|
|
|
+ ref="allocation"
|
|
|
+ >
|
|
|
+ </byForm>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="openAllocation = false" size="large"
|
|
|
+ >取 消</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="submitAllocation('allocation')"
|
|
|
+ size="large"
|
|
|
+ >
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog title="跟进" v-model="openFollow" width="500" destroy-on-close>
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfigAFollow"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formFollow.data"
|
|
|
+ :rules="rulesFollow"
|
|
|
+ ref="follow"
|
|
|
+ >
|
|
|
+ <template #fileSlot>
|
|
|
+ <div>
|
|
|
+ <el-upload
|
|
|
+ v-model:fileList="fileList"
|
|
|
+ :show-file-list="false"
|
|
|
+ class="upload-demo"
|
|
|
+ action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
|
|
|
+ :data="uploadData"
|
|
|
+ :before-upload="handleBeforeUpload"
|
|
|
+ >
|
|
|
+ <el-button type="primary">文件上传</el-button>
|
|
|
+ </el-upload>
|
|
|
+ <div>
|
|
|
+ <div style="margin-top: 15px">
|
|
|
+ <el-tag
|
|
|
+ style="margin-right: 10px"
|
|
|
+ class="ml-2"
|
|
|
+ type="info"
|
|
|
+ v-for="(item, index) in fileListCopy"
|
|
|
+ :key="index"
|
|
|
+ closable
|
|
|
+ @close="handleClose(index)"
|
|
|
+ >{{ item.fileName }}</el-tag
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byForm>
|
|
|
<template #footer>
|
|
|
- <el-button @click="openAllocation = false" size="large">取 消</el-button>
|
|
|
- <el-button type="primary" @click="submitAllocation('allocation')" size="large"> 确 定 </el-button>
|
|
|
+ <el-button @click="openFollow = false" size="large">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="submitFollow('follow')" size="large">
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
@@ -106,9 +262,13 @@ const loadingOperation = ref(false);
|
|
|
const submitLoading = ref(false);
|
|
|
const openPerson = ref(false);
|
|
|
const openAllocation = ref(false);
|
|
|
+const customerTag = ref([]);
|
|
|
const customerSource = ref([]);
|
|
|
const customerStatus = ref([]);
|
|
|
const userList = ref([]);
|
|
|
+const fileList = ref([]);
|
|
|
+const fileListCopy = ref([]);
|
|
|
+const uploadData = ref({});
|
|
|
const sourceList = ref({
|
|
|
data: [],
|
|
|
pagination: {
|
|
@@ -155,6 +315,7 @@ const config = computed(() => {
|
|
|
label: "客户名称",
|
|
|
prop: "name",
|
|
|
slot: "name",
|
|
|
+ fixed: "left",
|
|
|
},
|
|
|
},
|
|
|
{
|
|
@@ -203,6 +364,13 @@ const config = computed(() => {
|
|
|
},
|
|
|
{
|
|
|
attrs: {
|
|
|
+ label: "客户标签",
|
|
|
+ slot: "tags",
|
|
|
+ width: 200,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
label: "业务员",
|
|
|
prop: "userId",
|
|
|
width: 140,
|
|
@@ -218,9 +386,17 @@ const config = computed(() => {
|
|
|
},
|
|
|
{
|
|
|
attrs: {
|
|
|
+ label: "跟进",
|
|
|
+ slot: "follow",
|
|
|
+ width: 700,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
label: "操作",
|
|
|
- width: "160",
|
|
|
+ width: "200",
|
|
|
align: "center",
|
|
|
+ fixed: "right",
|
|
|
},
|
|
|
renderHTML(row) {
|
|
|
return [
|
|
@@ -240,6 +416,23 @@ const config = computed(() => {
|
|
|
},
|
|
|
{
|
|
|
attrs: {
|
|
|
+ label: "跟进",
|
|
|
+ type: "primary",
|
|
|
+ text: true,
|
|
|
+ },
|
|
|
+ el: "button",
|
|
|
+ click() {
|
|
|
+ formFollow.data = {
|
|
|
+ customerId: row.id,
|
|
|
+ };
|
|
|
+ fileList.value = [];
|
|
|
+ fileListCopy.value = [];
|
|
|
+ modalType.value = "add";
|
|
|
+ openFollow.value = true;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
label: "修改",
|
|
|
type: "primary",
|
|
|
text: true,
|
|
@@ -257,11 +450,15 @@ const config = computed(() => {
|
|
|
},
|
|
|
el: "button",
|
|
|
click() {
|
|
|
- ElMessageBox.confirm("此操作将永久删除该数据, 是否继续?", "提示", {
|
|
|
- confirmButtonText: "确定",
|
|
|
- cancelButtonText: "取消",
|
|
|
- type: "warning",
|
|
|
- }).then(() => {
|
|
|
+ ElMessageBox.confirm(
|
|
|
+ "此操作将永久删除该数据, 是否继续?",
|
|
|
+ "提示",
|
|
|
+ {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }
|
|
|
+ ).then(() => {
|
|
|
proxy
|
|
|
.post("/customer/delete", {
|
|
|
id: row.id,
|
|
@@ -283,6 +480,7 @@ const config = computed(() => {
|
|
|
});
|
|
|
let modalType = ref("add");
|
|
|
let dialogVisible = ref(false);
|
|
|
+let openFollow = ref(false);
|
|
|
let formData = reactive({
|
|
|
data: {
|
|
|
countryId: "China",
|
|
@@ -294,6 +492,9 @@ let formPerson = reactive({
|
|
|
let formAllocation = reactive({
|
|
|
data: {},
|
|
|
});
|
|
|
+let formFollow = reactive({
|
|
|
+ data: {},
|
|
|
+});
|
|
|
const formOption = reactive({
|
|
|
inline: true,
|
|
|
labelWidth: 100,
|
|
@@ -346,6 +547,18 @@ const formConfig = computed(() => {
|
|
|
data: userList.value,
|
|
|
},
|
|
|
{
|
|
|
+ type: "select",
|
|
|
+ label: "客户标签",
|
|
|
+ prop: "tag",
|
|
|
+ itemWidth: 100,
|
|
|
+ multiple: true,
|
|
|
+ data: customerTag.value,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
type: "slot",
|
|
|
slotName: "person",
|
|
|
label: "客户联系人",
|
|
@@ -411,6 +624,30 @@ const configPerson = computed(() => {
|
|
|
},
|
|
|
];
|
|
|
});
|
|
|
+const formConfigAFollow = computed(() => {
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ type: "date",
|
|
|
+ itemType: "datetime",
|
|
|
+ label: "跟进时间",
|
|
|
+ prop: "date",
|
|
|
+ itemWidth: 100,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ itemType: "textarea",
|
|
|
+ label: "跟进内容",
|
|
|
+ prop: "content",
|
|
|
+ itemWidth: 100,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ label: "上传附件",
|
|
|
+ prop: "fileList",
|
|
|
+ slotName: "fileSlot",
|
|
|
+ },
|
|
|
+ ];
|
|
|
+});
|
|
|
const formConfigPerson = computed(() => {
|
|
|
return [
|
|
|
{
|
|
@@ -435,13 +672,25 @@ let rulesPerson = ref({
|
|
|
name: [{ required: true, message: "请输入联系人名称", trigger: "blur" }],
|
|
|
phone: [{ required: true, message: "请输入联系人电话", trigger: "blur" }],
|
|
|
});
|
|
|
+let rulesFollow = ref({
|
|
|
+ date: [{ required: true, message: "请选择跟进时间", trigger: "change" }],
|
|
|
+ content: [{ required: true, message: "请输入跟进内容", trigger: "blur" }],
|
|
|
+});
|
|
|
+
|
|
|
const submit = ref(null);
|
|
|
const person = ref(null);
|
|
|
const allocation = ref(null);
|
|
|
+const follow = ref(null);
|
|
|
+
|
|
|
const getList = async (req) => {
|
|
|
sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
|
|
|
loading.value = true;
|
|
|
proxy.post("/customer/page", sourceList.value.pagination).then((res) => {
|
|
|
+ res.rows.forEach((x) => {
|
|
|
+ if (x.tag) {
|
|
|
+ x.tag = x.tag.split(",");
|
|
|
+ }
|
|
|
+ });
|
|
|
sourceList.value.data = res.rows;
|
|
|
sourceList.value.pagination.total = res.total;
|
|
|
setTimeout(() => {
|
|
@@ -453,6 +702,7 @@ const openModal = () => {
|
|
|
modalType.value = "add";
|
|
|
formData.data = {
|
|
|
countryId: "China",
|
|
|
+ tag: [],
|
|
|
};
|
|
|
getCityData(formData.data.countryId, "20");
|
|
|
loadingOperation.value = false;
|
|
@@ -469,6 +719,11 @@ const update = (row) => {
|
|
|
customerId: item.customerId,
|
|
|
};
|
|
|
});
|
|
|
+ if (res.tag) {
|
|
|
+ res.tag = res.tag.split(",");
|
|
|
+ } else {
|
|
|
+ res.tag = [];
|
|
|
+ }
|
|
|
formData.data = res;
|
|
|
getCityData(formData.data.countryId, "20");
|
|
|
getCityData(formData.data.provinceId, "30");
|
|
@@ -514,9 +769,38 @@ const submitAllocation = () => {
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
+
|
|
|
+const submitFollow = () => {
|
|
|
+ follow.value.handleSubmit(() => {
|
|
|
+ formFollow.data.fileList =
|
|
|
+ fileListCopy.value.map((x) => ({
|
|
|
+ id: x.id,
|
|
|
+ fileName: x.fileName,
|
|
|
+ })) || [];
|
|
|
+ proxy
|
|
|
+ .post("/customerFollowRecords/" + modalType.value, formFollow.data)
|
|
|
+ .then(
|
|
|
+ () => {
|
|
|
+ ElMessage({
|
|
|
+ message: modalType.value == "add" ? "添加成功" : "编辑成功",
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ openFollow.value = false;
|
|
|
+ getList();
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
const submitPerson = () => {
|
|
|
person.value.handleSubmit(() => {
|
|
|
- if (formData.data.customerUserList && formData.data.customerUserList.length > 0) {
|
|
|
+ if (
|
|
|
+ formData.data.customerUserList &&
|
|
|
+ formData.data.customerUserList.length > 0
|
|
|
+ ) {
|
|
|
formData.data.customerUserList.push({
|
|
|
name: formPerson.data.name,
|
|
|
phone: formPerson.data.phone,
|
|
@@ -534,7 +818,11 @@ const submitPerson = () => {
|
|
|
};
|
|
|
const submitForm = () => {
|
|
|
submit.value.handleSubmit(() => {
|
|
|
- if (formData.data.customerUserList && formData.data.customerUserList.length > 0) {
|
|
|
+ if (
|
|
|
+ formData.data.customerUserList &&
|
|
|
+ formData.data.customerUserList.length > 0
|
|
|
+ ) {
|
|
|
+ formData.data.tag = formData.data.tag.join(",");
|
|
|
submitLoading.value = true;
|
|
|
proxy.post("/customer/" + modalType.value, formData.data).then(
|
|
|
() => {
|
|
@@ -556,6 +844,7 @@ const submitForm = () => {
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
+
|
|
|
const getDict = () => {
|
|
|
proxy
|
|
|
.post("/dictTenantData/page", {
|
|
@@ -601,6 +890,12 @@ const getDict = () => {
|
|
|
};
|
|
|
});
|
|
|
});
|
|
|
+ proxy.getDictOne(["customer_tag"]).then((res) => {
|
|
|
+ customerTag.value = res["customer_tag"].map((x) => ({
|
|
|
+ label: x.dictValue,
|
|
|
+ value: x.dictKey,
|
|
|
+ }));
|
|
|
+ });
|
|
|
};
|
|
|
getDict();
|
|
|
getList();
|
|
@@ -613,6 +908,56 @@ const handleClickName = (row) => {
|
|
|
},
|
|
|
});
|
|
|
};
|
|
|
+
|
|
|
+const handleBeforeUpload = async (file) => {
|
|
|
+ const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
|
|
|
+ uploadData.value = res.uploadBody;
|
|
|
+ fileListCopy.value.push({
|
|
|
+ id: res.id,
|
|
|
+ fileName: res.fileName,
|
|
|
+ path: res.fileUrl,
|
|
|
+ url: res.fileUrl,
|
|
|
+ uid: file.uid,
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const handleClose = (index) => {
|
|
|
+ fileList.value.splice(index, 1);
|
|
|
+ fileListCopy.value.splice(index, 1);
|
|
|
+};
|
|
|
+
|
|
|
+const updateFollow = (data) => {
|
|
|
+ modalType.value = "edit";
|
|
|
+ formFollow.data = {
|
|
|
+ ...data,
|
|
|
+ };
|
|
|
+ proxy
|
|
|
+ .post("/fileInfo/getList", { businessIdList: [data.id] })
|
|
|
+ .then((fileObj) => {
|
|
|
+ fileList.value = fileObj[data.id] || [];
|
|
|
+ fileListCopy.value = fileObj[data.id] || [];
|
|
|
+ });
|
|
|
+ openFollow.value = true;
|
|
|
+};
|
|
|
+const deleteFollow = (data) => {
|
|
|
+ ElMessageBox.confirm("是否确认删除该跟进?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ proxy
|
|
|
+ .post("/customerFollowRecords/delete", {
|
|
|
+ id: data.id,
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ ElMessage({
|
|
|
+ message: "删除成功",
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ getList();
|
|
|
+ });
|
|
|
+ });
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|