feat(shop): 新增客户跟进记录功能

- 新增客户跟进记录模型定义
- 实现客户跟进记录的增删改查接口
- 在客户详情页添加跟进记录提交功能
-优化文章列表组件的UI展示效果
- 调整分享功能回调参数处理方式
This commit is contained in:
2025-10-04 17:23:13 +08:00
parent d469f29468
commit b7e8d52cf0
5 changed files with 169 additions and 8 deletions

View File

@@ -0,0 +1,105 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { ShopDealerRecord, ShopDealerRecordParam } from './model';
/**
* 分页查询客户跟进情况
*/
export async function pageShopDealerRecord(params: ShopDealerRecordParam) {
const res = await request.get<ApiResult<PageResult<ShopDealerRecord>>>(
'/shop/shop-dealer-record/page',
{
params
}
);
if (res.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.message));
}
/**
* 查询客户跟进情况列表
*/
export async function listShopDealerRecord(params?: ShopDealerRecordParam) {
const res = await request.get<ApiResult<ShopDealerRecord[]>>(
'/shop/shop-dealer-record',
{
params
}
);
if (res.code === 0 && res.data) {
return res.data;
}
return Promise.reject(new Error(res.message));
}
/**
* 添加客户跟进情况
*/
export async function addShopDealerRecord(data: ShopDealerRecord) {
const res = await request.post<ApiResult<unknown>>(
'/shop/shop-dealer-record',
data
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 修改客户跟进情况
*/
export async function updateShopDealerRecord(data: ShopDealerRecord) {
const res = await request.put<ApiResult<unknown>>(
'/shop/shop-dealer-record',
data
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 删除客户跟进情况
*/
export async function removeShopDealerRecord(id?: number) {
const res = await request.del<ApiResult<unknown>>(
'/shop/shop-dealer-record/' + id
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 批量删除客户跟进情况
*/
export async function removeBatchShopDealerRecord(data: (number | undefined)[]) {
const res = await request.del<ApiResult<unknown>>(
'/shop/shop-dealer-record/batch',
{
data
}
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 根据id查询客户跟进情况
*/
export async function getShopDealerRecord(id: number) {
const res = await request.get<ApiResult<ShopDealerRecord>>(
'/shop/shop-dealer-record/' + id
);
if (res.code === 0 && res.data) {
return res.data;
}
return Promise.reject(new Error(res.message));
}

View File

@@ -0,0 +1,39 @@
import type { PageParam } from '@/api';
/**
* 客户跟进情况
*/
export interface ShopDealerRecord {
// ID
id?: number;
// 上级id, 0是顶级
parentId?: number;
// 客户ID
dealerId?: number;
// 内容
content?: string;
// 用户ID
userId?: number;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0待处理, 1已完成
status?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
}
/**
* 客户跟进情况搜索条件
*/
export interface ShopDealerRecordParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -1,15 +1,25 @@
import {Image, Cell} from '@nutui/nutui-react-taro'
import {View, Text} from '@tarojs/components'
import Taro from '@tarojs/taro'
const ArticleList = (props: any) => {
return (
<>
<div className={'px-3'}>
{props.data.map((item, index) => {
<View className={'px-3'}>
{props.data.map((item: any, index: number) => {
return (
<Cell
title={item.title}
title={
<View>
<View className="text-base font-medium mb-1">{item.title}</View>
{item.comments && (
<Text className="text-sm text-gray-500 leading-relaxed">
{item.comments}
</Text>
)}
</View>
}
extra={
<Image src={item.image} mode={'aspectFit'} lazyLoad={false} width={100} height="100"/>
}
@@ -18,7 +28,7 @@ const ArticleList = (props: any) => {
/>
)
})}
</div>
</View>
</>
)
}

View File

@@ -53,11 +53,11 @@ function Category() {
return {
title: `${nav?.categoryName}_九运售电云`,
path: `/shop/category/index?id=${categoryId}`,
success: function (res) {
console.log('分享成功', res);
success: function () {
console.log('分享成功');
},
fail: function (res) {
console.log('分享失败', res);
fail: function () {
console.log('分享失败');
}
};
});

View File

@@ -15,6 +15,7 @@ import {
import FixedButton from "@/components/FixedButton";
import navTo from "@/utils/common";
import {pageShopDealerApply, removeShopDealerApply, updateShopDealerApply} from "@/api/shop/shopDealerApply";
import {addShopDealerRecord} from "@/api/shop/shopDealerRecord";
// 扩展User类型添加客户状态和保护天数
interface CustomerUser extends UserType {
@@ -73,6 +74,12 @@ const CustomerIndex = () => {
// @ts-ignore
if (res.confirm && res.content !== undefined) {
try {
// 添加跟进记录
await addShopDealerRecord({
dealerId: customer.userId,
// @ts-ignore
content: res.content.trim()
})
// 更新跟进情况
await updateShopDealerApply({
...customer,