diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java index 85f31d87c2ac63ca6cff64b3d65c122172394342..2129837e9b681e05f75a84e2a54fa23b4f41fde9 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java @@ -81,6 +81,33 @@ public class CustomerInfoController { return success(bean); } + @GetMapping("/getByCompanyName") + @Operation(summary = "通过公司名称带出基本信息") + @Parameter(name = "companyName", description = "公司名称", required = true, example = "郑州小牛") + public CommonResult> getCustomerInfoByCompanyName(@RequestParam("companyName") String companyName) { + List customerInfo = customerInfoService.getCustomerInfoByCompanyName(companyName); + List bean = BeanUtils.toBean(customerInfo, CustomerInfoRespVO.class); + return success(bean); + } + + + @GetMapping("/getByPhone") + @Operation(summary = "通过手机号带出基本信息") + @Parameter(name = "companyName", description = "联系方式", required = true, example = "156") + public CommonResult> getCustomerInfoByContact(@RequestParam("contact") String contact) { + List customerInfo = customerInfoService.getCustomerInfoByContact(contact); + List bean = BeanUtils.toBean(customerInfo, CustomerInfoRespVO.class); + return success(bean); + } + + @GetMapping("/getAll") + @Operation(summary = "查出所有") + public CommonResult> getAllCustomerInfo() { + List customerInfo = customerInfoService.getAllCustomerInfo(); + List bean = BeanUtils.toBean(customerInfo, CustomerInfoRespVO.class); + return success(bean); + } + @GetMapping("/page") @Operation(summary = "获得客户信息分页") @PreAuthorize("@ss.hasPermission('visit:customer-info:query')") diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoPageReqVO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoPageReqVO.java index 5688d0c2b2e60df6846650a5b4ce3ce8aa841911..fa04d7f3f5ccab892ffff28b0b4a76f5a0b0695c 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoPageReqVO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoPageReqVO.java @@ -31,6 +31,9 @@ public class CustomerInfoPageReqVO extends PageParam { @Schema(description = "市级行政区编码") private String cityCode; + @Schema(description = "品种名称(多选,逗号分隔)") + private String productNames; + @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoRespVO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoRespVO.java index 44aaafbc3d703172f73f93c17c0e6c609dfab343..db807ed428fcd7672fe3521102779e872744e93a 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoRespVO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoRespVO.java @@ -62,9 +62,12 @@ public class CustomerInfoRespVO { private BigDecimal latitude; @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("产品ID") private String productIds; + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("产品名称") + private String productNames; + @Schema(description = "客户所属部门", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("客户所属部门") @DictFormat("customer_dept") diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoSaveReqVO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoSaveReqVO.java index 104ec3320ad00db57d2fcac08bbfcca24b495ec8..20457860834837fc4875ffb7ff579ae51ba80ecd 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoSaveReqVO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/vo/CustomerInfoSaveReqVO.java @@ -64,6 +64,9 @@ public class CustomerInfoSaveReqVO { @Schema(description = "产品信息") private String productIds; + @Schema(description = "产品信息名称") + private String productNames; + @Schema(description = "客户部门") private String department; diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoPageReqVO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoPageReqVO.java index 6883ef85382150e09b30f36848dec3bba27e844d..3a0ded2fc5f5691b42a30b58470920818f1de8af 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoPageReqVO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoPageReqVO.java @@ -31,8 +31,8 @@ public class InfoPageReqVO extends PageParam { private String regionFullName; @Schema(description = "拜访日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) - private LocalDate[] visitDate; + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] visitDate; @Schema(description = "性质等级", example = "1") private Integer customerStatus; @@ -40,6 +40,9 @@ public class InfoPageReqVO extends PageParam { @Schema(description = "拜访品种(多选,逗号分隔)") private String visitProductIds; + @Schema(description = "拜访品种名称(多选,逗号分隔)") + private String visitProductNames; + @Schema(description = "拜访方式(字典)") private Integer visitMethod; diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoRespVO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoRespVO.java index cd49d04aa07e9e04c523b549df96ab8c8eade6ca..c62572384eb8050d0d9f08dda180a60c53e6c541 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoRespVO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoRespVO.java @@ -64,8 +64,7 @@ public class InfoRespVO { @Schema(description = "拜访日期", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("拜访日期") - @JsonFormat(pattern = "yyyy-MM-dd") - private LocalDate visitDate; + private LocalDateTime visitDate; @Schema(description = "性质等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty(value = "性质等级", converter = DictConvert.class) @@ -73,9 +72,12 @@ public class InfoRespVO { private Integer customerStatus; @Schema(description = "拜访品种(多选,逗号分隔)") - @ExcelProperty("拜访品种(多选,逗号分隔)") private String visitProductIds; + @Schema(description = "拜访品种(多选,逗号分隔)") + @ExcelProperty("拜访品种") + private String visitProductNames; + @Schema(description = "拜访方式(字典)") @ExcelProperty(value = "拜访方式(字典)", converter = DictConvert.class) @DictFormat("visit_method") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoSaveReqVO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoSaveReqVO.java index 0dcfd47d13c69c7f742fcf214a0e4c14ff6da2b2..c5e231df7038c6c02da14f331cfdebe91aba31e7 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoSaveReqVO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/info/vo/InfoSaveReqVO.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import javax.validation.constraints.*; import java.math.BigDecimal; @@ -40,6 +41,7 @@ public class InfoSaveReqVO { private String areaName; @Schema(description = "所在地区") + @NotEmpty(message = "所在地区不能为空") private String regionFullName; @Schema(description = "定位地址文字描述", requiredMode = Schema.RequiredMode.REQUIRED) @@ -60,7 +62,7 @@ public class InfoSaveReqVO { @Schema(description = "拜访日期", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "拜访日期不能为空") - private LocalDate visitDate; + private LocalDateTime visitDate; @Schema(description = "性质等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "性质等级不能为空") @@ -69,6 +71,9 @@ public class InfoSaveReqVO { @Schema(description = "拜访品种(多选,逗号分隔)") private String visitProductIds; + @Schema(description = "拜访品种名称(多选,逗号分隔)") + private String visitProductNames; + @Schema(description = "拜访方式(字典)") private Integer visitMethod; diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/customerinfo/CustomerInfoDO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/customerinfo/CustomerInfoDO.java index 23e73cb8ab06deaeede357e6f38fff510ddda4c0..9f06e5e88ac80c713f688fc1e0c00524451332d0 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/customerinfo/CustomerInfoDO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/customerinfo/CustomerInfoDO.java @@ -95,6 +95,10 @@ public class CustomerInfoDO extends BaseDO { * 产品信息 */ private String productIds; + /** + * 产品信息 + */ + private String productNames; /** * 客户部门 * diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/info/InfoDO.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/info/InfoDO.java index d3d220f1de9f0ec465f4f37f03675618867d4766..d1d3e6da79f3fa77280e6d28203e5b7f83070395 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/info/InfoDO.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/dataobject/info/InfoDO.java @@ -90,7 +90,7 @@ public class InfoDO extends BaseDO { /** * 拜访日期 */ - private LocalDate visitDate; + private LocalDateTime visitDate; /** * 性质等级 */ @@ -99,6 +99,10 @@ public class InfoDO extends BaseDO { * 拜访品种(多选,逗号分隔) */ private String visitProductIds; + /** + * 拜访品种(多选,逗号分隔) + */ + private String visitProductNames; /** * 拜访方式(字典) * diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java index 353339e9102f0cdbddcc5dffa100e5bd6d23c2f3..7d98de7c2c450105d7e7ff37984e28749fe2df70 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java @@ -28,4 +28,18 @@ public interface CustomerInfoMapper extends BaseMapperX { .orderByDesc(CustomerInfoDO::getId)); } + //根据公司名称查询客户信息(验证是否唯一使用) + default CustomerInfoDO selectByCompanyName(String companyName){ + return selectOne(CustomerInfoDO::getCompanyName, companyName); + } + + // 根据公司名称或手机号查询(根据任一条件带出符合条件的列表) + default List selectListByCompanyName(String companyName) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(CustomerInfoDO::getCompanyName, companyName)); + } + default List selectListByContact(String contact) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(CustomerInfoDO::getContact, contact)); + } } \ No newline at end of file diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java index 4fdec38f31293b88f222c48acc23d957d225e491..10f98d351727225da80f299e5f6ba278952bb1b6 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java @@ -52,4 +52,9 @@ public interface CustomerInfoService { */ PageResult getCustomerInfoPage(CustomerInfoPageReqVO pageReqVO); + List getCustomerInfoByCompanyName(String companyName); + List getCustomerInfoByContact(String contact); + + + List getAllCustomerInfo(); } \ No newline at end of file diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java index fccd2583b79cd4a9ca466e16c198082f0cb0cf85..18a776a5f83153a9444f335bbe66e8f553e96fde 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java @@ -71,4 +71,18 @@ public class CustomerInfoServiceImpl implements CustomerInfoService { return customerInfoMapper.selectPage(pageReqVO); } + @Override + public List getCustomerInfoByCompanyName(String companyName) { + return customerInfoMapper.selectListByCompanyName(companyName); + } + @Override + public List getCustomerInfoByContact(String contact) { + return customerInfoMapper.selectListByContact(contact); + } + + @Override + public List getAllCustomerInfo() { + return customerInfoMapper.selectList(); + } + } \ No newline at end of file diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/info/InfoServiceImpl.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/info/InfoServiceImpl.java index bdb2ee1497a3d8c3f4ecd1781aea8fac562a1ac2..ba35c9a48537ab68762b92cc94e5e4f08e7f0512 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/info/InfoServiceImpl.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/info/InfoServiceImpl.java @@ -1,21 +1,22 @@ package cn.iocoder.yudao.module.visit.service.info; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.visit.controller.admin.info.vo.*; -import cn.iocoder.yudao.module.visit.dal.dataobject.info.InfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - +import cn.iocoder.yudao.module.visit.controller.admin.customerinfo.vo.CustomerInfoSaveReqVO; +import cn.iocoder.yudao.module.visit.controller.admin.info.vo.InfoPageReqVO; +import cn.iocoder.yudao.module.visit.controller.admin.info.vo.InfoSaveReqVO; +import cn.iocoder.yudao.module.visit.dal.dataobject.customerinfo.CustomerInfoDO; +import cn.iocoder.yudao.module.visit.dal.dataobject.info.InfoDO; +import cn.iocoder.yudao.module.visit.dal.mysql.customerinfo.CustomerInfoMapper; import cn.iocoder.yudao.module.visit.dal.mysql.info.InfoMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.visit.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.visit.enums.ErrorCodeConstants.INFO_NOT_EXISTS; /** * 客户拜访记录 Service 实现类 @@ -29,11 +30,39 @@ public class InfoServiceImpl implements InfoService { @Resource private InfoMapper infoMapper; + @Resource + private CustomerInfoMapper customerInfoMapper; + @Override + @Transactional(rollbackFor = Exception.class) public Long createInfo(InfoSaveReqVO createReqVO) { // 插入 InfoDO info = BeanUtils.toBean(createReqVO, InfoDO.class); - infoMapper.insert(info); + int insert = infoMapper.insert(info); + if (insert >0){ + //拜访记录插入成功,根据【公司名称】判断该客户是否记录在案,如果没有,则插入一条客户信息 + CustomerInfoDO customerInfoDO = customerInfoMapper.selectByCompanyName(info.getCompanyName()); + if (customerInfoDO == null){ + //没查到说明该客户没有记录,插入一条客户信息 + CustomerInfoSaveReqVO customerInfoSaveReqVO = new CustomerInfoSaveReqVO(); + customerInfoSaveReqVO.setCustomerName(info.getCustomerName()); + customerInfoSaveReqVO.setContact(info.getContact()); + customerInfoSaveReqVO.setCompanyName(info.getCompanyName()); + customerInfoSaveReqVO.setCustomerType(info.getCustomerStatus()); + customerInfoSaveReqVO.setProvinceName(info.getProvinceName()); + customerInfoSaveReqVO.setCityName(info.getCityName()); + customerInfoSaveReqVO.setAreaName(info.getAreaName()); + customerInfoSaveReqVO.setRegionFullName(info.getRegionFullName()); + customerInfoSaveReqVO.setLocationText(info.getLocationText()); + customerInfoSaveReqVO.setLongitude(info.getLongitude()); + customerInfoSaveReqVO.setLatitude(info.getLatitude()); + customerInfoSaveReqVO.setLocationImage(info.getLocationImage()); + customerInfoSaveReqVO.setProductIds(info.getVisitProductIds()); + customerInfoSaveReqVO.setProductNames(info.getVisitProductNames()); + customerInfoMapper.insert(BeanUtils.toBean(customerInfoSaveReqVO, CustomerInfoDO.class)); + } + } + // 返回 return info.getId(); } diff --git a/yudao-ui/yudao-ui-admin-vue3/src/api/visit/customerinfo/index.ts b/yudao-ui/yudao-ui-admin-vue3/src/api/visit/customerinfo/index.ts index c469ec0bdeda0fc349b4987355072f1736dfd605..3e200b07ea2487cf7f2c5367ae4e3d5010831604 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/api/visit/customerinfo/index.ts +++ b/yudao-ui/yudao-ui-admin-vue3/src/api/visit/customerinfo/index.ts @@ -31,6 +31,20 @@ export const CustomerInfoApi = { return await request.get({ url: `/visit/customer-info/get?id=` + id }) }, + // 查询客户信息详情根据客户公司名称 + getCustomerInfoByCompanyName: async (param: string) => { + return await request.get({ url: `/visit/customer-info/getByCompanyName?companyName=` + param }) + }, + + // 查询客户信息详情根据手机号 + getCustomerInfoByPhone: async (param: string) => { + return await request.get({ url: `/visit/customer-info/getByPhone?contact=` + param }) + }, + // 查询所有客户信息详情 + getAll: async () => { + return await request.get({ url: `/visit/customer-info/getAll`}) + }, + // 查询客户信息中拜访品种详情 getProductSimpleList: async (id: number) => { return await request.get({ url: `/visit/customer-info/getProductSimpleList?id=` + id }) diff --git a/yudao-ui/yudao-ui-admin-vue3/src/api/visit/info/index.ts b/yudao-ui/yudao-ui-admin-vue3/src/api/visit/info/index.ts index cb575a5292e0da845e5f1e247e6e1a0b5ee51536..bb9d4878523cad12a7fdaa47c615a48577a6a8a1 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/api/visit/info/index.ts +++ b/yudao-ui/yudao-ui-admin-vue3/src/api/visit/info/index.ts @@ -1,57 +1,57 @@ -import request from '@/config/axios' - -// 客户拜访记录 VO -export interface InfoVO { - id: number // 主键ID - customerName: string // 客户姓名 - contact: string // 联系方式(客户手机号) - companyName: string // 客户公司名称 - provinceName: string // 省名称 - cityName: string // 市名称 - areaName: string // 区名称 - locationText: string // 定位地址文字描述 - longitude: number // 经度 - latitude: number // 纬度 - locationImage: string // 定位静态图URL - visitDate: Date // 拜访日期 - customerStatus: number // 性质等级 - visitProductIds: string // 拜访品种(多选,逗号分隔) - visitMethod: number // 拜访方式(字典) - visitType: number // 拜访类型(字典) - serviceContent: string // 服务内容 - customerFeedback: string // 客户反馈 - serviceImages: string // 服务记录图片URL列表(JSON数组) -} - -// 客户拜访记录 API -export const InfoApi = { - // 查询客户拜访记录分页 - getInfoPage: async (params: any) => { - return await request.get({ url: `/visit/info/page`, params }) - }, - - // 查询客户拜访记录详情 - getInfo: async (id: number) => { - return await request.get({ url: `/visit/info/get?id=` + id }) - }, - - // 新增客户拜访记录 - createInfo: async (data: InfoVO) => { - return await request.post({ url: `/visit/info/create`, data }) - }, - - // 修改客户拜访记录 - updateInfo: async (data: InfoVO) => { - return await request.put({ url: `/visit/info/update`, data }) - }, - - // 删除客户拜访记录 - deleteInfo: async (id: number) => { - return await request.delete({ url: `/visit/info/delete?id=` + id }) - }, - - // 导出客户拜访记录 Excel - exportInfo: async (params) => { - return await request.download({ url: `/visit/info/export-excel`, params }) - }, -} \ No newline at end of file +import request from '@/config/axios' + +// 客户拜访记录 VO +export interface InfoVO { + id: number // 主键ID + customerName: string // 客户姓名 + contact: string // 联系方式(客户手机号) + companyName: string // 客户公司名称 + provinceName: string // 省名称 + cityName: string // 市名称 + areaName: string // 区名称 + locationText: string // 定位地址文字描述 + longitude: number // 经度 + latitude: number // 纬度 + locationImage: string // 定位静态图URL + visitDate: Date // 拜访日期 + customerStatus: number // 性质等级 + visitProductIds: string // 拜访品种(多选,逗号分隔) + visitMethod: number // 拜访方式(字典) + visitType: number // 拜访类型(字典) + serviceContent: string // 服务内容 + customerFeedback: string // 客户反馈 + serviceImages: string // 服务记录图片URL列表(JSON数组) +} + +// 客户拜访记录 API +export const InfoApi = { + // 查询客户拜访记录分页 + getInfoPage: async (params: any) => { + return await request.get({ url: `/visit/info/page`, params }) + }, + + // 查询客户拜访记录详情 + getInfo: async (id: number) => { + return await request.get({ url: `/visit/info/get?id=` + id }) + }, + + // 新增客户拜访记录 + createInfo: async (data: InfoVO) => { + return await request.post({ url: `/visit/info/create`, data }) + }, + + // 修改客户拜访记录 + updateInfo: async (data: InfoVO) => { + return await request.put({ url: `/visit/info/update`, data }) + }, + + // 删除客户拜访记录 + deleteInfo: async (id: number) => { + return await request.delete({ url: `/visit/info/delete?id=` + id }) + }, + + // 导出客户拜访记录 Excel + exportInfo: async (params) => { + return await request.download({ url: `/visit/info/export-excel`, params }) + }, +} diff --git a/yudao-ui/yudao-ui-admin-vue3/src/components/UploadFile/src/UploadImgs.vue b/yudao-ui/yudao-ui-admin-vue3/src/components/UploadFile/src/UploadImgs.vue index 6c9b5a953af9d82067ddf7bd0b93bc17d01a9049..0e1ea0276c6c1721f9639b399f47de65f56eac29 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/components/UploadFile/src/UploadImgs.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/components/UploadFile/src/UploadImgs.vue @@ -140,8 +140,9 @@ watch( // 防止 val 为字符串、null、undefined 报错 let urls: string[] = [] + //过滤数组中的空字符串 if (Array.isArray(val)) { - urls = val + urls = val.filter((url) => url.trim() !== '') } else if (typeof val === 'string') { urls = val.split(',').filter((url) => url.trim() !== '') } diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/CustomerInfoForm.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/CustomerInfoForm.vue index 1d995369e755757c58cec71e67798352e0a03c58..c9e2dd42dadf566b15499e6ec917c0193c1533ce 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/CustomerInfoForm.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/CustomerInfoForm.vue @@ -71,7 +71,7 @@ @@ -130,6 +130,7 @@ interface CustomerFormData { latitude?: number; locationImage?: string; productIds?: string; + productNames?: string; department?: string; } const formData = ref({ @@ -147,6 +148,7 @@ const formData = ref({ latitude: undefined, locationImage: undefined, productIds: undefined, + productNames: undefined, department: undefined, }) const formRules = reactive({ @@ -173,10 +175,10 @@ const openProduct=()=>{ productListRef.value?.open(); // 调用子组件暴露的方法 } -const handleUpdateProduct = (ids: string) => { - console.log('来自子组件的产品ID:', ids); +const handleUpdateProduct = (ids: string,names: string) => { //存入表单 formData.value.productIds = ids; + formData.value.productNames = names; }; //===========================================地图相关操作================================= const mapPickerRef = ref() @@ -285,6 +287,7 @@ const resetForm = () => { latitude: undefined, locationImage: undefined, productIds: undefined, + productNames: undefined, department: undefined, } formRef.value?.resetFields() diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/productTable.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/productTable.vue index 75f620f4b34fb228239cd7092eb30f44e3f6c5a4..979aaff0efc4a927baa6dee604748b76b4585556 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/productTable.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/customerinfo/productTable.vue @@ -126,12 +126,13 @@ const props = defineProps({ const tableRef = ref();//表单 // 定义事件名和参数类型(可选) const emit = defineEmits<{ - (e: 'updateProduct', data: string): void; + (e: 'updateProduct', ids: string, names: string): void; }>(); const sendToParent = () => { const joinedIds = multipleSelection.value.join(','); // ✅ 转为 "101,203,305" - emit('updateProduct', joinedIds); // ✅ 传 string 给父组件 + const joinedNames = multipleSelectionName.value.join(','); // ✅ 转为 "阿莫西林,银翘片" + emit('updateProduct', joinedIds,joinedNames); // ✅ 传 string 给父组件 dialogTableVisible.value = false; // ✅ 关闭弹窗 }; @@ -149,6 +150,7 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const multipleSelection = ref([]) //存储多选内容 +const multipleSelectionName = ref([]) //存储多选内容 // 打开弹窗 const open = () => { dialogTableVisible.value = true @@ -164,7 +166,10 @@ const open = () => { /** 多选操作**/ const handleSelectionChange = (val) => { multipleSelection.value = val.map(item=>item.id) - console.log(val,multipleSelection) + multipleSelectionName.value = val.map(item=>item.productName) + console.log(val) + console.log("=========") + console.log(multipleSelectionName) } /** 查询列表 */ const getList = async () => { diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/InfoForm.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/InfoForm.vue index 7811b0a76cdad16ddffc622386dc778281694c48..7616c09147256f32544117d7ea58d4ace72bb229 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/InfoForm.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/InfoForm.vue @@ -14,20 +14,15 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - @@ -79,9 +62,9 @@ /> - + @@ -111,10 +94,24 @@ - + - + @@ -130,10 +127,11 @@ diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/index.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/index.vue index 2e27bf6db09a9c01a14bf274f3f6576e780526f3..0f9a10e560ad67f059b419d215b10b4a17d137ce 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/index.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/visit/info/index.vue @@ -135,16 +135,26 @@ - - - - + + + + - + + +