修改代理产品权限

master
username 8 months ago
parent 68d23664b4
commit 2b35818720

@ -241,9 +241,9 @@ public class DfBizClueController extends BaseController {
} }
/** /**
* ID * ID
*/ */
@ApiOperation("经人ID") @ApiOperation("经人ID")
@PostMapping("/changeUserId") @PostMapping("/changeUserId")
public AjaxResult changeUserId(@RequestBody DfBizClue dfBizClue) { public AjaxResult changeUserId(@RequestBody DfBizClue dfBizClue) {
List<DfBizClue> list = dfBizClueService.list(new LambdaQueryWrapper<DfBizClue>().eq(DfBizClue::getShareUser, dfBizClue.getOldUserId())); List<DfBizClue> list = dfBizClueService.list(new LambdaQueryWrapper<DfBizClue>().eq(DfBizClue::getShareUser, dfBizClue.getOldUserId()));

@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletResponse;
import com.bs.common.core.domain.entity.SysUser; import com.bs.common.core.domain.entity.SysUser;
import com.bs.common.utils.SecurityUtils; import com.bs.common.utils.SecurityUtils;
import com.bs.df.domain.DfProductPoster; import com.bs.df.domain.DfProductPoster;
import com.bs.df.mapper.DfBrokerMapper;
import com.bs.df.utils.HtmlUtils; import com.bs.df.utils.HtmlUtils;
import com.bs.system.service.ISysUserService; import com.bs.system.service.ISysUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -50,6 +51,9 @@ public class DfBrokerController extends BaseController {
private IDfBrokerService dfBrokerService; private IDfBrokerService dfBrokerService;
@Resource @Resource
private ISysUserService sysUserService; private ISysUserService sysUserService;
@Resource
private DfBrokerMapper dfBrokerMapper;
/** /**
* *
*/ */
@ -221,6 +225,9 @@ public class DfBrokerController extends BaseController {
@Log(title = "代理商经纪修改", businessType = BusinessType.UPDATE) @Log(title = "代理商经纪修改", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@RequestBody DfBroker dfBroker) { public AjaxResult edit(@RequestBody DfBroker dfBroker) {
if (null == dfBroker.getParentId()) {
dfBrokerMapper.updateByNull(dfBroker);
}
return toAjax(dfBrokerService.updateById(dfBroker)); return toAjax(dfBrokerService.updateById(dfBroker));
} }

@ -15,6 +15,7 @@ import com.bs.df.domain.DfBizClue;
import com.bs.df.domain.DfProductMoment; import com.bs.df.domain.DfProductMoment;
import com.bs.df.domain.DfProductPoster; import com.bs.df.domain.DfProductPoster;
import com.bs.df.utils.HtmlUtils; import com.bs.df.utils.HtmlUtils;
import com.bs.system.mapper.SysUserMapper;
import com.bs.system.service.ISysUserService; import com.bs.system.service.ISysUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -56,6 +57,8 @@ public class DfProductArticleController extends BaseController {
private ICmAttachService cmAttachService; private ICmAttachService cmAttachService;
@Resource @Resource
private ISysUserService userService; private ISysUserService userService;
@Autowired
private SysUserMapper sysUserMapper;
/** /**
* *
*/ */
@ -63,6 +66,11 @@ public class DfProductArticleController extends BaseController {
@GetMapping("/pageList") @GetMapping("/pageList")
public TableDataInfo pageList(DfProductArticle dfProductArticle) { public TableDataInfo pageList(DfProductArticle dfProductArticle) {
startPage(); startPage();
SysUser sysUser = sysUserMapper.selectById(getUserId());
String reviewStatus = sysUser.getReviewStatus();
if ("1".equals(reviewStatus)) {
return null;
}
LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper();
boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId()); boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId());
if (!admin) { if (!admin) {

@ -75,11 +75,34 @@ public class DfProductInfoController extends BaseController {
@GetMapping("/pageList") @GetMapping("/pageList")
public TableDataInfo pageList(DfProductInfo dfProductInfo) { public TableDataInfo pageList(DfProductInfo dfProductInfo) {
startPage(); startPage();
SysUser sysUser = sysUserMapper.selectById(getUserId());
String reviewStatus = sysUser.getReviewStatus();
if ("1".equals(reviewStatus)) {
return null;
}
LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper();
String brokerIds = dfProductInfo.getBrokerIds(); String brokerIds = dfProductInfo.getBrokerIds();
if ("1".equals(dfProductInfo.getSelectByBroker())) { if ("1".equals(dfProductInfo.getSelectByBroker())) {
if (Validator.isNotEmpty(dfProductInfo.getUserId())) {
if ("1".equals(dfProductInfo.getIsSelectBroker())) {
String userId = dfProductInfo.getUserId();
List<Long> productIdsByBrokerIdByUserId = dfBrokerService.getProductIdsByBrokerIdByUserId(Long.valueOf(userId));
if (productIdsByBrokerIdByUserId == null || productIdsByBrokerIdByUserId.isEmpty()) {
productIdsByBrokerIdByUserId.add(0L);
}
queryWrapper.in(DfProductInfo::getId,productIdsByBrokerIdByUserId);
} else {
String userId = dfProductInfo.getUserId();
List<Long> productIdsByBrokerIdByUserId = dfBrokerService.getProductIdsByBrokerIdByUserId(Long.valueOf(userId));
if (productIdsByBrokerIdByUserId == null || productIdsByBrokerIdByUserId.isEmpty()) {
productIdsByBrokerIdByUserId.add(0L);
}
queryWrapper.inSql(DfProductInfo::getId,"select product_id from df_broker_product where user_id in (" + userId + ") and del_flag = '0' and staus = '1'");
}
} else {
queryWrapper.inSql(DfProductInfo::getId,"select product_id from df_broker_product where broker_id in (" + brokerIds + ") and del_flag = '0' and staus = '1'"); queryWrapper.inSql(DfProductInfo::getId,"select product_id from df_broker_product where broker_id in (" + brokerIds + ") and del_flag = '0' and staus = '1'");
} }
}
if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
List<Long> productIdsByBrokerId = dfBrokerService.getProductIdsByBrokerId(); List<Long> productIdsByBrokerId = dfBrokerService.getProductIdsByBrokerId();
if (productIdsByBrokerId.size() == 0) { if (productIdsByBrokerId.size() == 0) {
@ -117,11 +140,15 @@ public class DfProductInfoController extends BaseController {
for (DfArea city : allCities) { for (DfArea city : allCities) {
cityMap.put(city.getAreaId(), city.getName()); cityMap.put(city.getAreaId(), city.getName());
} }
Map<Long, String> brokerProductMap = new HashMap<>();
DfBroker byId = null; DfBroker byId = null;
SysUser userInfo = null;
if ("1".equals(dfProductInfo.getSelectByBroker())) { if ("1".equals(dfProductInfo.getSelectByBroker())) {
if (Validator.isNotEmpty(dfProductInfo.getUserId())) {
userInfo = sysUserMapper.selectById(dfProductInfo.getUserId());
} else {
byId = dfBrokerService.getById(brokerIds); byId = dfBrokerService.getById(brokerIds);
} }
}
for (DfProductInfo productInfo : list) { for (DfProductInfo productInfo : list) {
productInfo.setInterestRate(productInfo.getInterestRateBegin() + "%-" + productInfo.getInterestRateEnd() + "%"); productInfo.setInterestRate(productInfo.getInterestRateBegin() + "%-" + productInfo.getInterestRateEnd() + "%");
productInfo.setProductIntro(HtmlUtils.stripHtmlTags(productInfo.getProductIntro())); productInfo.setProductIntro(HtmlUtils.stripHtmlTags(productInfo.getProductIntro()));
@ -142,8 +169,17 @@ public class DfProductInfoController extends BaseController {
productInfo.setBusinessCity(translatedCities.toString()); productInfo.setBusinessCity(translatedCities.toString());
} }
if ("1".equals(dfProductInfo.getSelectByBroker())) { if ("1".equals(dfProductInfo.getSelectByBroker())) {
if (Validator.isNotEmpty(dfProductInfo.getUserId())) {
if ("1".equals(dfProductInfo.getIsSelectBroker())) {
Long deptId = userInfo.getDeptId();
DfBroker byIdNew = dfBrokerService.getById(deptId);
productInfo.setBrokerName(byIdNew.getBrokerName());
} else {
productInfo.setBrokerName(userInfo.getUserName());
}
} else {
productInfo.setBrokerName(byId.getBrokerName()); productInfo.setBrokerName(byId.getBrokerName());
// productInfo.setBrokerName(brokerProductMap.get(productInfo.getId())); }
} }
} }
return getDataTable(list); return getDataTable(list);
@ -166,6 +202,27 @@ public class DfProductInfoController extends BaseController {
return success(list); return success(list);
} }
/**
* userId
*/
@ApiOperation("根据userId查询产品信息列表")
@GetMapping("/listByUserId")
public AjaxResult listByUserId(DfProductInfo dfProductInfo) {
LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper();
List<Long> productIdsByBrokerIdByUserId = dfBrokerService.getProductIdsByBrokerIdByUserId(Long.valueOf(dfProductInfo.getUserId()));
queryWrapper.notInSql(DfProductInfo::getId,
"select product_id from df_broker_product where del_flag = '0' and user_id = " + dfProductInfo.getUserId() + "")
.or()
.eq(DfProductInfo::getId,dfProductInfo.getId());
condition(queryWrapper,dfProductInfo);
List<DfProductInfo> list = dfProductInfoService.list(queryWrapper);
Set<Long> idsToRemove = productIdsByBrokerIdByUserId.stream().collect(Collectors.toSet());
List<DfProductInfo> filteredList = list.stream()
.filter(product -> !idsToRemove.contains(product.getId()))
.collect(Collectors.toList());
return success(filteredList);
}
/** /**
* id * id
@ -183,7 +240,8 @@ public class DfProductInfoController extends BaseController {
List<Long> productIds = listBrokerProduct.stream() List<Long> productIds = listBrokerProduct.stream()
.map(DfBrokerProduct::getProductId) .map(DfBrokerProduct::getProductId)
.collect(Collectors.toList()); .collect(Collectors.toList());
productIds.removeIf(id -> id.equals(dfProductInfo.getId())); productIds.removeIf(id -> Objects.equals(id, dfProductInfo.getId()));
// productIds.removeIf(id -> id.equals(dfProductInfo.getId()));
if (null != productIds && productIds.size() == 0) { if (null != productIds && productIds.size() == 0) {
productIds.add(0L); productIds.add(0L);
} }
@ -363,6 +421,7 @@ public class DfProductInfoController extends BaseController {
@PutMapping(value = "/getInfoByBroker") @PutMapping(value = "/getInfoByBroker")
@Anonymous @Anonymous
public AjaxResult getInfoByBroker(@RequestBody DfProductInfo dfProductInfo) { public AjaxResult getInfoByBroker(@RequestBody DfProductInfo dfProductInfo) {
if(Validator.isNotEmpty(dfProductInfo.getBrokerId())) {
DfProductInfo byId = dfProductInfoService.getById(dfProductInfo.getId()); DfProductInfo byId = dfProductInfoService.getById(dfProductInfo.getId());
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>() List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.eq(DfBrokerProduct::getBrokerId, dfProductInfo.getBrokerId()) .eq(DfBrokerProduct::getBrokerId, dfProductInfo.getBrokerId())
@ -381,6 +440,27 @@ public class DfProductInfoController extends BaseController {
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
byId.setBusinessCityByName(concatenatedNames); byId.setBusinessCityByName(concatenatedNames);
return success(byId); return success(byId);
} else {
DfProductInfo byId = dfProductInfoService.getById(dfProductInfo.getId());
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.eq(DfBrokerProduct::getUserId, dfProductInfo.getUserId())
.eq(DfBrokerProduct::getProductId, dfProductInfo.getId()));
if (list.size() > 0 && list != null) {
byId.setUserId(list.get(0).getUserId());
}
String businessCity = byId.getBusinessCity();
if (Validator.isEmpty(businessCity)) {
return success(byId);
}
List<String> businessCityList = Arrays.asList(businessCity.split(","));
List<DfArea> douAreas = dfAreaService.listByIds(businessCityList);
String concatenatedNames = douAreas.stream()
.map(DfArea::getName)
.collect(Collectors.joining(","));
byId.setBusinessCityByName(concatenatedNames);
return success(byId);
}
} }
/** /**
@ -496,6 +576,50 @@ public class DfProductInfoController extends BaseController {
} }
} }
/**
*
*/
@ApiOperation("修改代理产品权限")
@Log(title = "代理产品权限修改", businessType = BusinessType.UPDATE)
@PutMapping("/editByBrokers")
public AjaxResult editByBrokers(@RequestBody DfProductInfo dfProductInfo) {
for (Long id : dfProductInfo.getIds()) {
if (Validator.isNotEmpty(dfProductInfo.getUserId())) {
Long productInfoId = id;
String userId = dfProductInfo.getUserId();
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.eq(DfBrokerProduct::getProductId, productInfoId)
.eq(DfBrokerProduct::getBrokerId, userId));
if (list != null && list.size() > 0) {
DfBrokerProduct dfBrokerProduct = new DfBrokerProduct().setUserId(userId).setProductId(productInfoId).setId(list.get(0).getId());
dfBrokerProduct.setStaus("1");
dfBrokerProductService.updateById(dfBrokerProduct);
} else {
DfBrokerProduct dfBrokerProduct = new DfBrokerProduct().setUserId(userId).setProductId(productInfoId);
dfBrokerProduct.setStaus("1");
dfBrokerProductService.save(dfBrokerProduct);
}
} else {
Long productInfoId = id;
Long brokerId = dfProductInfo.getBrokerId();
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.eq(DfBrokerProduct::getProductId, productInfoId)
.eq(DfBrokerProduct::getBrokerId, brokerId));
if (list != null && list.size() > 0) {
DfBrokerProduct dfBrokerProduct = new DfBrokerProduct().setBrokerId(brokerId).setProductId(productInfoId).setId(list.get(0).getId());
dfBrokerProduct.setStaus("1");
dfBrokerProductService.updateById(dfBrokerProduct);
} else {
DfBrokerProduct dfBrokerProduct = new DfBrokerProduct().setBrokerId(brokerId).setProductId(productInfoId);
dfBrokerProduct.setStaus("1");
dfBrokerProductService.save(dfBrokerProduct);
}
}
}
System.out.println(dfProductInfo);
return toAjax(true);
}
/** /**
* *
*/ */
@ -505,9 +629,13 @@ public class DfProductInfoController extends BaseController {
public AjaxResult removeByBroker(@RequestBody DfProductInfo dfProductInfo) { public AjaxResult removeByBroker(@RequestBody DfProductInfo dfProductInfo) {
Long[] ids = dfProductInfo.getIds(); Long[] ids = dfProductInfo.getIds();
Long brokerId = dfProductInfo.getBrokerId(); Long brokerId = dfProductInfo.getBrokerId();
// List<DfBroker> list = dfBrokerService.list(new LambdaQueryWrapper<DfBroker>().eq(DfBroker::getParentId, brokerId)); if (Validator.isNotEmpty(dfProductInfo.getUserId())) {
boolean remove = dfBrokerProductService.remove(new LambdaQueryWrapper<DfBrokerProduct>()
.in(DfBrokerProduct::getProductId, ids)
.in(DfBrokerProduct::getUserId, dfProductInfo.getUserId()));
return toAjax(remove);
} else {
List<DfBroker> allSubordinates = dfBrokerService.findAllSubordinates(brokerId); List<DfBroker> allSubordinates = dfBrokerService.findAllSubordinates(brokerId);
// List<DfBroker> allSubordinates = findAllSubordinates(brokerId);
List<Long> brokerIds = allSubordinates.stream() List<Long> brokerIds = allSubordinates.stream()
.map(DfBroker::getId) .map(DfBroker::getId)
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -517,6 +645,7 @@ public class DfProductInfoController extends BaseController {
.in(DfBrokerProduct::getBrokerId, brokerIds)); .in(DfBrokerProduct::getBrokerId, brokerIds));
return toAjax(remove); return toAjax(remove);
} }
}
/** /**

@ -13,6 +13,7 @@ import com.bs.common.utils.SecurityUtils;
import com.bs.df.domain.DfProductArticle; import com.bs.df.domain.DfProductArticle;
import com.bs.df.domain.DfProductPoster; import com.bs.df.domain.DfProductPoster;
import com.bs.df.utils.HtmlUtils; import com.bs.df.utils.HtmlUtils;
import com.bs.system.mapper.SysUserMapper;
import com.bs.system.service.ISysUserService; import com.bs.system.service.ISysUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -54,6 +55,8 @@ public class DfProductMomentController extends BaseController {
private ICmAttachService cmAttachService; private ICmAttachService cmAttachService;
@Resource @Resource
private ISysUserService userService; private ISysUserService userService;
@Autowired
private SysUserMapper sysUserMapper;
/** /**
* *
*/ */
@ -61,6 +64,11 @@ public class DfProductMomentController extends BaseController {
@GetMapping("/pageList") @GetMapping("/pageList")
public TableDataInfo pageList(DfProductMoment dfProductMoment) { public TableDataInfo pageList(DfProductMoment dfProductMoment) {
startPage(); startPage();
SysUser sysUser = sysUserMapper.selectById(getUserId());
String reviewStatus = sysUser.getReviewStatus();
if ("1".equals(reviewStatus)) {
return null;
}
LambdaQueryWrapper<DfProductMoment> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductMoment> queryWrapper = new LambdaQueryWrapper();
condition(queryWrapper,dfProductMoment); condition(queryWrapper,dfProductMoment);
boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId()); boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId());

@ -62,6 +62,8 @@ public class DfProductPosterController extends BaseController {
private IDfBrokerService dfBrokerService;; private IDfBrokerService dfBrokerService;;
@Resource @Resource
private ISysUserService userService; private ISysUserService userService;
@Autowired
private SysUserMapper sysUserMapper;
/** /**
* *
*/ */
@ -69,6 +71,11 @@ public class DfProductPosterController extends BaseController {
@GetMapping("/pageList") @GetMapping("/pageList")
public TableDataInfo pageList(DfProductPoster dfProductPoster) { public TableDataInfo pageList(DfProductPoster dfProductPoster) {
startPage(); startPage();
SysUser sysUser = sysUserMapper.selectById(getUserId());
String reviewStatus = sysUser.getReviewStatus();
if ("1".equals(reviewStatus)) {
return null;
}
MPJLambdaWrapper<DfProductPoster> queryWrapper = new MPJLambdaWrapper(); MPJLambdaWrapper<DfProductPoster> queryWrapper = new MPJLambdaWrapper();
queryWrapper.selectAll(DfProductPoster.class) queryWrapper.selectAll(DfProductPoster.class)
.select(DfProductInfo::getProductName) .select(DfProductInfo::getProductName)

@ -41,6 +41,18 @@ public class DfBrokerProduct extends BaseEntity{
@ApiModelProperty(value = "产品id") @ApiModelProperty(value = "产品id")
private Long productId; private Long productId;
/** 用户id */
@Excel(name = "用户id")
@ApiModelProperty(value = "用户id")
private String userId;
/** 代理商类型 */
// @Excel(name = "代理商类型")
// @ApiModelProperty(value = "代理商类型")
// private String type;
/** 备注 */ /** 备注 */
@Excel(name = "备注") @Excel(name = "备注")

@ -180,6 +180,10 @@ public class DfProductInfo extends BaseEntity{
@TableField(exist = false) @TableField(exist = false)
private Long brokerId; private Long brokerId;
@TableField(exist = false)
private String userId;
@TableField(exist = false) @TableField(exist = false)
private Long[] ids; private Long[] ids;
@ -188,4 +192,7 @@ public class DfProductInfo extends BaseEntity{
@TableField(exist = false) @TableField(exist = false)
private String isBroker; private String isBroker;
@TableField(exist = false)
private String isSelectBroker;
} }

@ -2,6 +2,7 @@ package com.bs.df.mapper;
import com.bs.common.mybatis.mapper.BaseMapperX; import com.bs.common.mybatis.mapper.BaseMapperX;
import com.bs.df.domain.DfBroker; import com.bs.df.domain.DfBroker;
import org.apache.ibatis.annotations.Param;
/** /**
* Mapper * Mapper
@ -11,4 +12,5 @@ import com.bs.df.domain.DfBroker;
*/ */
public interface DfBrokerMapper extends BaseMapperX<DfBroker> { public interface DfBrokerMapper extends BaseMapperX<DfBroker> {
void updateByNull(@Param("dfBroker") DfBroker dfBroker);
} }

@ -19,6 +19,12 @@ public interface IDfBrokerService extends MPJBaseService<DfBroker>{
*/ */
public List<Long> filterByUser(); public List<Long> filterByUser();
/**
* id
* @return
*/
public List<Long> filterByUserId(Long userId);
/** /**
* id * id
* @return * @return

@ -72,7 +72,9 @@ public class DfBrokerServiceImpl extends MPJBaseServiceImpl<DfBrokerMapper, DfB
List<Long> longs = filterByUser(); List<Long> longs = filterByUser();
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>() List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.in(DfBrokerProduct::getBrokerId, longs) .in(DfBrokerProduct::getBrokerId, longs)
.eq(DfBrokerProduct::getStaus, "1")); .eq(DfBrokerProduct::getStaus, "1")
.or()
.in(DfBrokerProduct::getUserId, SecurityUtils.getUserId()));
return list.stream().map(DfBrokerProduct::getProductId).collect(Collectors.toList()); return list.stream().map(DfBrokerProduct::getProductId).collect(Collectors.toList());
} }

@ -206,16 +206,16 @@ public class SysLoginController
@Log(title = "用户获取公众号id", businessType = BusinessType.GRANT) @Log(title = "用户获取公众号id", businessType = BusinessType.GRANT)
public AjaxResult bindingWx(@RequestBody LoginBody loginBody) { public AjaxResult bindingWx(@RequestBody LoginBody loginBody) {
// 生成令牌 // 生成令牌
if (StringUtils.isEmpty(loginBody.getWxCode())) { // if (StringUtils.isEmpty(loginBody.getWxCode())) {
return AjaxResult.error("请传入微信Code"); // return AjaxResult.error("请传入微信Code");
} // }
if (StringUtils.isEmpty(loginBody.getGzhCode())) { if (StringUtils.isEmpty(loginBody.getGzhCode())) {
return AjaxResult.error("请传ghzCode"); return AjaxResult.error("请传ghzCode");
} }
JSONObject xcxJo = weiXinUtil.getXCXOpenId(loginBody.getWxCode()); JSONObject xcxJo = weiXinUtil.getXCXOpenId(loginBody.getWxCode());
if (StringUtils.isEmpty(xcxJo.getString("openId"))) { // if (StringUtils.isEmpty(xcxJo.getString("openId"))) {
return AjaxResult.error("微信code错误"); // return AjaxResult.error("微信code错误");
} // }
JSONObject gzhJo = null; JSONObject gzhJo = null;
gzhJo = weiXinUtil.getGZHOpenId(loginBody.getGzhCode()); gzhJo = weiXinUtil.getGZHOpenId(loginBody.getGzhCode());
if (StringUtils.isEmpty(gzhJo.getString("openId"))) { if (StringUtils.isEmpty(gzhJo.getString("openId"))) {
@ -223,20 +223,27 @@ public class SysLoginController
} }
//判断微信是否被其他用户绑定 //判断微信是否被其他用户绑定
SysUser tempUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getGzhOpenId, gzhJo.getString("openId"))); SysUser tempUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getGzhOpenId, gzhJo.getString("openId")));
if (tempUser!=null) { if (tempUser!=null) {
return AjaxResult.error("此微信已被绑定"); return AjaxResult.error("此微信已被绑定");
} }
SysUser updateUser = new SysUser(); SysUser updateUser = new SysUser();
updateUser.setXcxOpenId(""); updateUser.setXcxOpenId("");
if (StringUtils.isEmpty(loginBody.getWxCode())) {
sysUserMapper.update(updateUser,new LambdaUpdateWrapper<SysUser>().eq(SysUser::getXcxOpenId, gzhJo.getString("openId")));
} else {
sysUserMapper.update(updateUser,new LambdaUpdateWrapper<SysUser>().eq(SysUser::getXcxOpenId, xcxJo.getString("openId"))); sysUserMapper.update(updateUser,new LambdaUpdateWrapper<SysUser>().eq(SysUser::getXcxOpenId, xcxJo.getString("openId")));
}
SysUser sysUser = sysUserMapper.selectById(SecurityUtils.getUserId()); SysUser sysUser = sysUserMapper.selectById(SecurityUtils.getUserId());
if(StringUtils.isNotEmpty(sysUser.getGzhOpenId())&&!sysUser.getGzhOpenId().equals(gzhJo.getString("openId"))){ if(StringUtils.isNotEmpty(sysUser.getGzhOpenId())&&!sysUser.getGzhOpenId().equals(gzhJo.getString("openId"))){
return AjaxResult.error("您的账号已经绑定过其他微信,请先解绑"); return AjaxResult.error("您的账号已经绑定过其他微信,请先解绑");
} }
sysUser.setXcxOpenId(xcxJo.getString("openId")); sysUser.setXcxOpenId(xcxJo.getString("openId"));
sysUser.setGzhOpenId( gzhJo.getString("openId")); sysUser.setGzhOpenId( gzhJo.getString("openId"));
if (StringUtils.isEmpty(loginBody.getWxCode())) {
sysUser.setUnionId(gzhJo.getString("unionid"));
} else {
sysUser.setUnionId(xcxJo.getString("unionid")); sysUser.setUnionId(xcxJo.getString("unionid"));
}
sysUserMapper.updateById(sysUser); sysUserMapper.updateById(sysUser);
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
loginUser.getUser().setXcxOpenId(sysUser.getXcxOpenId()); loginUser.getUser().setXcxOpenId(sysUser.getXcxOpenId());
@ -260,18 +267,28 @@ public class SysLoginController
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
// 生成令牌 // 生成令牌
if (StringUtils.isEmpty(loginBody.getWxCode())) { if (StringUtils.isEmpty(loginBody.getWxCode())) {
return AjaxResult.error("请传入微信Code"); // return AjaxResult.error("请传入微信Code");
} }
SysUser sysUser; SysUser sysUser;
JSONObject xcxJo = weiXinUtil.getXCXOpenId(loginBody.getWxCode()); JSONObject xcxJo = new JSONObject();
if (!StringUtils.isEmpty(loginBody.getWxCode())) {
xcxJo = weiXinUtil.getXCXOpenId(loginBody.getWxCode());
}
// JSONObject xcxJo = weiXinUtil.getXCXOpenId(loginBody.getWxCode());
if (StringUtils.isEmpty(xcxJo.getString("openId"))) { if (StringUtils.isEmpty(xcxJo.getString("openId"))) {
return AjaxResult.error("code错误"); // return AjaxResult.error("code错误");
} }
JSONObject gzhJo = new JSONObject(); JSONObject gzhJo = new JSONObject();
if(StringUtils.isNotEmpty(loginBody.getGzhCode())){ if(StringUtils.isNotEmpty(loginBody.getGzhCode())){
gzhJo = weiXinUtil.getGZHOpenId(loginBody.getGzhCode()); gzhJo = weiXinUtil.getGZHOpenId(loginBody.getGzhCode());
} }
List<SysUser> lsUser = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getXcxOpenId, xcxJo.getString("openId"))); List<SysUser> lsUser = null;
if (!StringUtils.isEmpty(loginBody.getWxCode())) {
lsUser = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getXcxOpenId, xcxJo.getString("openId")));
} else {
lsUser = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getGzhOpenId, gzhJo.getString("openId")));
}
// List<SysUser> lsUser = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getXcxOpenId, xcxJo.getString("openId")));
if (lsUser != null && lsUser.size() > 0) { if (lsUser != null && lsUser.size() > 0) {
sysUser = lsUser.get(0); sysUser = lsUser.get(0);
} else { } else {
@ -280,14 +297,23 @@ public class SysLoginController
.put("gzhOpenId", gzhJo.getString("openId")!=null?gzhJo.getString("openId"):"").put("unionId", xcxJo.getString("unionid")); .put("gzhOpenId", gzhJo.getString("openId")!=null?gzhJo.getString("openId"):"").put("unionId", xcxJo.getString("unionid"));
} }
if(StringUtils.isEmpty(sysUser.getXcxOpenId())){ if(StringUtils.isEmpty(sysUser.getXcxOpenId())){
if (StringUtils.isEmpty(loginBody.getWxCode())) {
sysUser.setXcxOpenId(gzhJo.getString("openId"));
} else {
sysUser.setXcxOpenId(xcxJo.getString("openId")); sysUser.setXcxOpenId(xcxJo.getString("openId"));
} }
}
if(StringUtils.isEmpty(sysUser.getGzhOpenId())){ if(StringUtils.isEmpty(sysUser.getGzhOpenId())){
sysUser.setGzhOpenId(gzhJo.getString("openId")!=null?gzhJo.getString("openId"):""); sysUser.setGzhOpenId(gzhJo.getString("openId")!=null?gzhJo.getString("openId"):"");
} }
if(StringUtils.isEmpty(sysUser.getUnionId())){ if(StringUtils.isEmpty(sysUser.getUnionId())){
if (StringUtils.isEmpty(loginBody.getWxCode())) {
sysUser.setUnionId(gzhJo.getString("unionid"));
} else {
sysUser.setUnionId(xcxJo.getString("unionid")); sysUser.setUnionId(xcxJo.getString("unionid"));
} }
// sysUser.setUnionId(xcxJo.getString("unionid"));
}
String token = setLoginUser(sysUser); String token = setLoginUser(sysUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
return ajax; return ajax;
@ -299,8 +325,8 @@ public class SysLoginController
//登入成功,查询租户配置 //登入成功,查询租户配置
if (null != user.getTenantId()) { if (null != user.getTenantId()) {
// SysTenant tenant = tenantService.getById(user.getTenantId()); // SysTenant tenant = tenantService.getById(user.getTenantId());
SysTenant tenant = tenantService.getById("5"); SysTenant tenant = new SysTenant();
TenantConfig config = tenantConfigService.getOne(new LambdaQueryWrapper<TenantConfig>().eq(TenantConfig::getId, tenant.getId())); TenantConfig config = tenantConfigService.getOne(new LambdaQueryWrapper<TenantConfig>().eq(TenantConfig::getId, "5"));
if (config == null) { if (config == null) {
config = new TenantConfig(); config = new TenantConfig();
config.setIsUserAstrict("0"); config.setIsUserAstrict("0");

@ -1,5 +1,20 @@
package com.bs.web.controller.system; package com.bs.web.controller.system;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bs.common.constant.Constants;
import com.bs.common.core.domain.entity.SysRole;
import com.bs.common.core.domain.entity.SysTenant;
import com.bs.common.core.domain.entity.SysUser;
import com.bs.common.core.domain.model.LoginUser;
import com.bs.framework.web.service.SysLoginService;
import com.bs.framework.web.service.SysPermissionService;
import com.bs.framework.web.service.TokenService;
import com.bs.system.domain.SysUserRole;
import com.bs.system.mapper.SysRoleMapper;
import com.bs.system.mapper.SysUserMapper;
import com.bs.system.mapper.SysUserRoleMapper;
import com.bs.system.service.ISysUserService;
import io.swagger.util.Json;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -11,6 +26,10 @@ import com.bs.common.utils.StringUtils;
import com.bs.framework.web.service.SysRegisterService; import com.bs.framework.web.service.SysRegisterService;
import com.bs.system.service.ISysConfigService; import com.bs.system.service.ISysConfigService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* *
* *
@ -25,14 +44,54 @@ public class SysRegisterController extends BaseController
@Autowired @Autowired
private ISysConfigService configService; private ISysConfigService configService;
@Autowired
private ISysUserService userService;
@Autowired
private SysUserMapper userMapper;
@Autowired
private SysLoginService loginService;
@Autowired
private TokenService tokenService;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private SysRoleMapper sysRoleMapper;
@Autowired
private SysPermissionService permissionService;
@PostMapping("/register") @PostMapping("/register")
public AjaxResult register(@RequestBody RegisterBody user) public AjaxResult register(@RequestBody RegisterBody user)
{ {
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) // if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
{ // {
return error("当前系统没有开启注册功能!"); // return error("当前系统没有开启注册功能!");
} // }
String msg = registerService.register(user); String msg = registerService.register(user);
return StringUtils.isEmpty(msg) ? success() : error(msg); LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getUserName,user.getUsername());
List<SysUser> sysUsers = userMapper.selectList(wrapper);
SysUser sysUser = sysUsers.get(0);
userService.insertUserAuth(sysUser.getUserId(), new Long[]{2L});
LoginUser loginUser = createLoginUser(sysUser, null);
String token = tokenService.createToken(loginUser);
AjaxResult ajax = AjaxResult.success();
ajax.put(Constants.TOKEN, token);
return ajax;
}
public LoginUser createLoginUser(SysUser user, SysTenant tenant) {
//查询用户下的权限
LambdaQueryWrapper<SysUserRole> userRoleWrapper = new LambdaQueryWrapper<>();
userRoleWrapper.select(SysUserRole::getRoleId);
userRoleWrapper.eq(SysUserRole::getUserId,user.getUserId());
List<Object> roleIds = sysUserRoleMapper.selectObjs(userRoleWrapper);
//查询用户下的权限
LambdaQueryWrapper<SysRole> roleWrapper = new LambdaQueryWrapper<>();
roleWrapper.in(SysRole::getRoleId,roleIds);
user.setRoles(sysRoleMapper.selectList(roleWrapper));
return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
} }
} }

@ -85,6 +85,12 @@ public class SysUserController extends BaseController {
return getDataTable(list); return getDataTable(list);
} }
@GetMapping("/listUserAll")
public AjaxResult listUserAll(SysUser user) {
List<SysUser> list = userService.selectUserList(user);
return success(list);
}
@GetMapping("/listByType") @GetMapping("/listByType")
public TableDataInfo listByType(SysUser user) { public TableDataInfo listByType(SysUser user) {
if (!"1".equals(user.getSelectAll())) { if (!"1".equals(user.getSelectAll())) {
@ -355,6 +361,18 @@ public class SysUserController extends BaseController {
return toAjax(userService.updateUserStatus(user)); return toAjax(userService.updateUserStatus(user));
} }
/**
*
*/
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping("/changeUserReviewStatus")
public AjaxResult changeUserReviewStatus(@RequestBody SysUser user) {
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
user.setUpdateBy(getUsername());
return toAjax(userService.updateUserStatus(user));
}
/** /**
* *
*/ */
@ -441,6 +459,12 @@ public class SysUserController extends BaseController {
queryWrapper.like(SysUser::getPhonenumber,sysUser.getPhonenumber()); queryWrapper.like(SysUser::getPhonenumber,sysUser.getPhonenumber());
} }
//真实姓名
if(Validator.isNotEmpty(sysUser.getRealName())){
queryWrapper.like(SysUser::getRealName,sysUser.getRealName());
}
//用户性别0男 1女 2未知 //用户性别0男 1女 2未知
if(Validator.isNotEmpty(sysUser.getSex())){ if(Validator.isNotEmpty(sysUser.getSex())){
queryWrapper.eq(SysUser::getSex,sysUser.getSex()); queryWrapper.eq(SysUser::getSex,sysUser.getSex());

@ -64,7 +64,7 @@ public class TestController extends BaseController
@ApiOperation("新增用户") @ApiOperation("新增用户")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class), @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class),
@ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class), @ApiImplicitParam(name = "username", value = "登陆账号", dataType = "String", dataTypeClass = String.class),
@ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class), @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class),
@ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class) @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class)
}) })
@ -119,7 +119,7 @@ class UserEntity
@ApiModelProperty("用户ID") @ApiModelProperty("用户ID")
private Integer userId; private Integer userId;
@ApiModelProperty("用户名称") @ApiModelProperty("登陆账号")
private String username; private String username;
@ApiModelProperty("用户密码") @ApiModelProperty("用户密码")

@ -4,4 +4,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bs.df.mapper.DfBrokerMapper"> <mapper namespace="com.bs.df.mapper.DfBrokerMapper">
<insert id="updateByNull" parameterType="com.bs.df.domain.DfBroker">
UPDATE df_broker
<set>
<if test="dfBroker.parentId != null">
parent_id = #{dfBroker.parentId},
</if>
<if test="dfBroker.parentId == null">
parent_id = NULL,
</if>
<!-- 其他字段更新 -->
</set>
WHERE id = #{dfBroker.id}
</insert>
</mapper> </mapper>

@ -100,7 +100,7 @@ public class Constants
public static final String JWT_USERID = "userid"; public static final String JWT_USERID = "userid";
/** /**
* *
*/ */
public static final String JWT_USERNAME = Claims.SUBJECT; public static final String JWT_USERNAME = Claims.SUBJECT;

@ -43,10 +43,10 @@ public class SysUser extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
private String deptName; private String deptName;
/** 用户账号 */ /** 登陆账号 */
@Excel(name = "登录名称") @Excel(name = "登陆账号")
@Xss(message = "用户账号不能包含脚本字符") @Xss(message = "登陆账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空") @NotBlank(message = "登陆账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
private String userName; private String userName;
@ -89,10 +89,12 @@ public class SysUser extends BaseEntity
@ApiModelProperty(value = "公司") @ApiModelProperty(value = "公司")
private String company; private String company;
@Excel(name = "真实姓名")
@ApiModelProperty(value = "真实姓名")
private String realName;
/** 用户昵称 */ /** 用户昵称 */
@Excel(name = "用户称") @Excel(name = "用户称")
@Xss(message = "用户昵称不能包含脚本字符") @Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
private String nickName; private String nickName;
@ -199,6 +201,11 @@ public class SysUser extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
private String selectAll; private String selectAll;
//1为查询所有
@TableField(exist = false)
private String isBroker;
/** /**
* openId * openId
*/ */

@ -1,8 +1,11 @@
package com.bs.common.core.domain.model; package com.bs.common.core.domain.model;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.bs.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
/** /**
* *
* *
@ -15,6 +18,12 @@ public class LoginBody
*/ */
private String username; private String username;
/** 手机号码 */
private String phonenumber;
/** 推荐注册人 */
private String shareUser;
/** /**
* *
*/ */
@ -70,7 +79,6 @@ public class LoginBody
private String fromType; private String fromType;
private String shareUser;
private String businessLinks; private String businessLinks;
@ -235,5 +243,9 @@ public class LoginBody
this.shareUser = shareUser; this.shareUser = shareUser;
} }
public String getPhonenumber() { return phonenumber; }
public void setPhonenumber(String phonenumber) { this.phonenumber = phonenumber; }
} }

@ -43,14 +43,13 @@ public class SysRegisterService
String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword();
SysUser sysUser = new SysUser(); SysUser sysUser = new SysUser();
sysUser.setUserName(username); sysUser.setUserName(username);
sysUser.setReviewStatus("1");
// 验证码开关 // 验证码开关
boolean captchaEnabled = configService.selectCaptchaEnabled(); boolean captchaEnabled = configService.selectCaptchaEnabled();
if (captchaEnabled) if (captchaEnabled)
{ {
validateCaptcha(username, registerBody.getCode(), registerBody.getUuid()); validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
} }
if (StringUtils.isEmpty(username)) if (StringUtils.isEmpty(username))
{ {
msg = "用户名不能为空"; msg = "用户名不能为空";
@ -75,6 +74,17 @@ public class SysRegisterService
} }
else else
{ {
if (!StringUtils.isEmpty(registerBody.getShareUser())) {
SysUser sysUserShare = userService.selectUserById(Long.valueOf(registerBody.getShareUser()));
Long deptId = sysUserShare.getDeptId();
sysUser.setDeptId(deptId);
} else {
sysUser.setDeptId(116L);
}
sysUser.setPhonenumber(registerBody.getPhonenumber());
sysUser.setUserType("jj");
sysUser.setTenantId(0L);
sysUser.setNickName(username); sysUser.setNickName(username);
sysUser.setPassword(SecurityUtils.encryptPassword(password)); sysUser.setPassword(SecurityUtils.encryptPassword(password));
boolean regFlag = userService.registerUser(sysUser); boolean regFlag = userService.registerUser(sysUser);

@ -13,7 +13,7 @@ public class SysUserOnline
/** 部门名称 */ /** 部门名称 */
private String deptName; private String deptName;
/** 用户名称 */ /** 登陆账号 */
private String userName; private String userName;
/** 登录IP地址 */ /** 登录IP地址 */

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.bs.common.core.domain.entity.SysUser; import com.bs.common.core.domain.entity.SysUser;
import com.bs.common.mybatis.mapper.BaseMapperX; import com.bs.common.mybatis.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -42,9 +43,9 @@ public interface SysUserMapper extends BaseMapperX<SysUser> {
/** /**
* *
* *
* @param userName * @param userName
* @return * @return
*/ */
public SysUser checkUserNameUnique(String userName); public SysUser checkUserNameUnique(String userName);
@ -67,4 +68,7 @@ public interface SysUserMapper extends BaseMapperX<SysUser> {
* @return * @return
*/ */
public SysUser checkEmailUnique(String email); public SysUser checkEmailUnique(String email);
Boolean insertNew(@Param("user")SysUser user);
} }

@ -20,19 +20,19 @@ public interface ISysUserOnlineService
public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user);
/** /**
* *
* *
* @param userName * @param userName
* @param user * @param user
* @return 线 * @return 线
*/ */
public SysUserOnline selectOnlineByUserName(String userName, LoginUser user); public SysUserOnline selectOnlineByUserName(String userName, LoginUser user);
/** /**
* / * /
* *
* @param ipaddr * @param ipaddr
* @param userName * @param userName
* @param user * @param user
* @return 线 * @return 线
*/ */

@ -69,7 +69,7 @@ public interface ISysUserService extends MPJBaseService<SysUser>
public String selectUserPostGroup(String userName); public String selectUserPostGroup(String userName);
/** /**
* *
* *
* @param user * @param user
* @return * @return

@ -128,7 +128,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
/** /**
* ID * ID
* *
* @param userId * @param userId
* @return * @return
*/ */
@Override @Override

@ -32,9 +32,9 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService
} }
/** /**
* *
* *
* @param userName * @param userName
* @param user * @param user
* @return 线 * @return 线
*/ */
@ -49,10 +49,10 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService
} }
/** /**
* / * /
* *
* @param ipaddr * @param ipaddr
* @param userName * @param userName
* @param user * @param user
* @return 线 * @return 线
*/ */

@ -81,6 +81,7 @@ public class SysUserServiceImpl extends MPJBaseServiceImpl<SysUserMapper, SysUse
queryWrapper.eq(user.getTenantId()!=null, SysUser::getTenantId,user.getTenantId()); queryWrapper.eq(user.getTenantId()!=null, SysUser::getTenantId,user.getTenantId());
queryWrapper.like(StringUtils.isNotEmpty(user.getUserName()), SysUser::getUserName,user.getUserName()); queryWrapper.like(StringUtils.isNotEmpty(user.getUserName()), SysUser::getUserName,user.getUserName());
queryWrapper.like(StringUtils.isNotEmpty(user.getNickName()), SysUser::getNickName,user.getNickName()); queryWrapper.like(StringUtils.isNotEmpty(user.getNickName()), SysUser::getNickName,user.getNickName());
queryWrapper.like(StringUtils.isNotEmpty(user.getRealName()), SysUser::getRealName,user.getRealName());
queryWrapper.eq(StringUtils.isNotEmpty(user.getStatus()), SysUser::getStatus,user.getStatus()); queryWrapper.eq(StringUtils.isNotEmpty(user.getStatus()), SysUser::getStatus,user.getStatus());
queryWrapper.eq(StringUtils.isNotEmpty(user.getUserType()), SysUser::getUserType,user.getUserType()); queryWrapper.eq(StringUtils.isNotEmpty(user.getUserType()), SysUser::getUserType,user.getUserType());
queryWrapper.like(StringUtils.isNotEmpty(user.getPhonenumber()), SysUser::getPhonenumber,user.getPhonenumber()); queryWrapper.like(StringUtils.isNotEmpty(user.getPhonenumber()), SysUser::getPhonenumber,user.getPhonenumber());
@ -210,7 +211,7 @@ public class SysUserServiceImpl extends MPJBaseServiceImpl<SysUserMapper, SysUse
} }
/** /**
* *
* *
* @param user * @param user
* @return * @return
@ -325,7 +326,8 @@ public class SysUserServiceImpl extends MPJBaseServiceImpl<SysUserMapper, SysUse
@Override @Override
public boolean registerUser(SysUser user) public boolean registerUser(SysUser user)
{ {
return userMapper.insert(user) > 0; user.setUserType("jj");
return userMapper.insertNew(user);
} }
/** /**

@ -178,6 +178,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate() sysdate()
) )
</insert> </insert>
<insert id="insertNew" parameterType="com.bs.common.core.domain.entity.SysUser">
INSERT INTO sys_user (user_id, dept_id, user_name, nick_name, email, phonenumber, sex, avatar, password, status, review_status,
tenant_id,user_type )
VALUES (#{user.userId}, #{user.deptId}, #{user.userName}, #{user.nickName}, #{user.email},
#{user.phonenumber}, #{user.sex}, #{user.avatar}, #{user.password}, #{user.status}, #{user.reviewStatus},
#{user.tenantId}, #{user.userType})
</insert>
<update id="updateUser" parameterType="SysUser"> <update id="updateUser" parameterType="SysUser">
update sys_user update sys_user

@ -18,6 +18,15 @@ export function listInfo(query) {
}) })
} }
// 根据userId查询产品信息列表
export function listByUserId(query) {
return request({
url: '/product/info/listByUserId',
method: 'get',
params: query
})
}
// 根据代理商经纪id查询产品信息列表 // 根据代理商经纪id查询产品信息列表
export function listByBroker(query) { export function listByBroker(query) {
return request({ return request({
@ -79,7 +88,14 @@ export function editByBroker(data) {
}) })
} }
// 修改产品信息
export function editByBrokers(data) {
return request({
url: '/product/info/editByBrokers',
method: 'put',
data: data
})
}
// 删除产品信息 // 删除产品信息
export function delInfo(id) { export function delInfo(id) {

@ -10,6 +10,15 @@ export function listUser(query) {
}) })
} }
// 查询用户列表
export function listUserAll(query) {
return request({
url: '/system/user/listUserAll',
method: 'get',
params: query
})
}
export function listUserByType(query) { export function listUserByType(query) {
return request({ return request({
url: '/system/user/listByType', url: '/system/user/listByType',
@ -87,6 +96,19 @@ export function changeUserStatus(userId, status) {
}) })
} }
// 用户审核状态修改
export function changeUserReviewStatus(userId, reviewStatus) {
const data = {
userId,
reviewStatus
}
return request({
url: '/system/user/changeUserReviewStatus',
method: 'put',
data: data
})
}
// 查询用户个人信息 // 查询用户个人信息
export function getUserProfile() { export function getUserProfile() {
return request({ return request({

@ -1,10 +1,18 @@
<template> <template>
<div ref="list"> <div ref="list">
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px"> <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="真实姓名" prop="realName">
<el-input
v-model="queryParams.realName"
placeholder="请输入真实姓名"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -111,12 +119,13 @@
<el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="tableHeight - 150" <el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <el-table-column type="selection" width="50" align="center"/>
<el-table-column label="用户名称" key="userName" width="100" prop="userName" v-if="columns[1].visible" <el-table-column label="登陆账号" key="userName" width="100" prop="userName" v-if="columns[1].visible"
:show-overflow-tooltip="true" fixed="left"/> :show-overflow-tooltip="true" fixed="left"/>
<el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/> <el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/>
<el-table-column label="用户编号" key="userId" prop="userId" v-if="columns[0].visible"/> <!-- <el-table-column label="用户编号" key="userId" prop="userId" v-if="columns[0].visible"/>-->
<el-table-column label="用户昵称" key="nickName" prop="nickName" v-if="columns[2].visible" <el-table-column label="用户昵称" key="nickName" prop="nickName" v-if="columns[2].visible"
:show-overflow-tooltip="true"/> :show-overflow-tooltip="true"/>
<el-table-column label="真实姓名" key="realName" prop="realName" :show-overflow-tooltip="true"/>
<!-- <el-table-column label="简介" align="center" prop="userDesc" show-overflow-tooltip/> --> <!-- <el-table-column label="简介" align="center" prop="userDesc" show-overflow-tooltip/> -->
<el-table-column label="手机号码" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" <el-table-column label="手机号码" key="phonenumber" prop="phonenumber" v-if="columns[4].visible"
width="120"/> width="120"/>
@ -132,6 +141,16 @@
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="审核状态" key="status" v-if="columns[5].visible">
<template slot-scope="scope">
<el-switch
v-model="scope.row.reviewStatus"
active-value="0"
inactive-value="1"
@change="handleReviewChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160"> <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
@ -210,29 +229,34 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber"> <el-form-item label="真实姓名" prop="realName">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" :disabled="readonly"/> <el-input v-model="form.realName" placeholder="请输入真实姓名" maxlength="30" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="邮箱" prop="email"> <el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" :disabled="readonly"/> <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="title == '添加用户'" label="用户名称" prop="userName"> <el-form-item v-if="title == '添加用户'" label="用户密码" prop="password">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" :disabled="readonly"/> <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="title == '添加用户'" label="用户密码" prop="password"> <el-form-item v-if="title == '添加用户'" label="登陆账号" prop="userName">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password :disabled="readonly"/> <el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" :disabled="readonly"/>
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="用户性别"> <el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%" :disabled="readonly"> <el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%" :disabled="readonly">
@ -245,6 +269,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="状态"> <el-form-item label="状态">
<el-radio-group v-model="form.status" :disabled="readonly"> <el-radio-group v-model="form.status" :disabled="readonly">
@ -257,8 +283,6 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="岗位"> <el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择岗位" style="width: 100%" :disabled="readonly"> <el-select v-model="form.postIds" multiple placeholder="请选择岗位" style="width: 100%" :disabled="readonly">
@ -272,6 +296,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="角色" prop="roleIds"> <el-form-item label="角色" prop="roleIds">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%" :disabled="readonly"> <el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%" :disabled="readonly">
@ -285,30 +311,30 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="地址" prop="address"> <el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" :disabled="readonly"/> <el-input v-model="form.address" placeholder="请输入地址" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="公司" prop="company"> <el-form-item label="公司" prop="company">
<el-input v-model="form.company" placeholder="请输入公司" :disabled="readonly"/> <el-input v-model="form.company" placeholder="请输入公司" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="地址" prop="address"> <el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" :disabled="readonly"/> <el-input v-model="form.address" placeholder="请输入地址" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="审核状态"> <el-form-item label="审核状态">
<el-radio-group v-model="form.reviewStatus" :disabled="readonly"> <el-radio-group v-model="form.reviewStatus" :disabled="readonly">
<el-radio <el-radio
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.review_status"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{ dict.label }} >{{ dict.label }}
@ -352,6 +378,7 @@ import {
resetUserPwd, resetUserPwd,
changeUserStatus, changeUserStatus,
deptTreeSelect, deptTreeSelect,
changeUserReviewStatus,
} from "@/api/system/user"; } from "@/api/system/user";
import {getToken} from "@/utils/auth"; import {getToken} from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
@ -361,7 +388,7 @@ import {getMoment} from "@/api/moment/moment";
export default { export default {
name: "BrokerUser", name: "BrokerUser",
// mixins: [AutoTableHeight], // mixins: [AutoTableHeight],
dicts: ['sys_normal_disable', 'sys_user_sex'], dicts: ['sys_normal_disable', 'sys_user_sex', 'review_status'],
components: {Treeselect}, components: {Treeselect},
props: { props: {
rowData: { rowData: {
@ -440,7 +467,7 @@ export default {
// //
columns: [ columns: [
{key: 0, label: `用户编号`, visible: true}, {key: 0, label: `用户编号`, visible: true},
{key: 1, label: `用户名称`, visible: true}, {key: 1, label: `登陆账号`, visible: true},
{key: 2, label: `用户昵称`, visible: true}, {key: 2, label: `用户昵称`, visible: true},
{key: 3, label: `部门`, visible: true}, {key: 3, label: `部门`, visible: true},
{key: 4, label: `手机号码`, visible: true}, {key: 4, label: `手机号码`, visible: true},
@ -453,8 +480,8 @@ export default {
{required: true, message: "角色不能为空", trigger: "blur"} {required: true, message: "角色不能为空", trigger: "blur"}
], ],
userName: [ userName: [
{required: true, message: "用户名称不能为空", trigger: "blur"}, {required: true, message: "登陆账号不能为空", trigger: "blur"},
{min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur'} {min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur'}
], ],
nickName: [ nickName: [
{required: true, message: "用户昵称不能为空", trigger: "blur"} {required: true, message: "用户昵称不能为空", trigger: "blur"}
@ -578,6 +605,17 @@ export default {
row.status = row.status === "0" ? "1" : "0"; row.status = row.status === "0" ? "1" : "0";
}); });
}, },
//
handleReviewChange(row) {
let text = row.status === "0" ? "审核" : "待审核";
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () {
return changeUserReviewStatus(row.userId, row.reviewStatus);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function () {
row.status = row.status === "0" ? "1" : "0";
});
},
// //
cancel() { cancel() {
this.open = false; this.open = false;
@ -595,6 +633,7 @@ export default {
email: undefined, email: undefined,
sex: undefined, sex: undefined,
status: "0", status: "0",
reviewStatus: "0",
remark: undefined, remark: undefined,
postIds: [], postIds: [],
roleIds: [] roleIds: []

@ -225,10 +225,6 @@
>{{ dict.label }} >{{ dict.label }}
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
<!-- <el-select v-model="form.staus" placeholder="请选择状态" style="width: 100%">-->
<!-- <el-option v-for="dict in dict.type.df_broker_staus" :key="dict.value" :label="dict.label"-->
<!-- :value="dict.value"/>-->
<!-- </el-select>-->
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -393,6 +389,7 @@ export default {
this.loading = false; this.loading = false;
}); });
listBrokerByTree().then(response => { listBrokerByTree().then(response => {
response.data.unshift({ id: null, brokerName: '无' });
this.brokerOptions = response.data; this.brokerOptions = response.data;
}); });
// listBroker().then(response => { // listBroker().then(response => {

@ -63,23 +63,11 @@
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
:disabled="!brokerId" :disabled="!brokerId && !userId"
v-hasPermi="['product:info:add']" v-hasPermi="['product:info:add']"
>选择 >选择
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['product:info:edit']"
>修改
</el-button>
</el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
@ -92,23 +80,12 @@
>移除 >移除
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['product:info:export']"
>导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="infoList" @sort-change="handleSortChange" :height="tableHeight - 150" <el-table v-loading="loading" :data="infoList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/> <el-table-column type="selection" width="55" align="center"/>
<el-table-column label="所属代理商" prop="brokerName" fixed="left" width="100"/> <el-table-column label="产品归属" prop="brokerName" fixed="left" width="100"/>
<el-table-column label="产品名称" prop="productName" sortable='custom' fixed="left" width="100"/> <el-table-column label="产品名称" prop="productName" sortable='custom' fixed="left" width="100"/>
<el-table-column label="产品简称" prop="simpleName" sortable='custom' width="100"/> <el-table-column label="产品简称" prop="simpleName" sortable='custom' width="100"/>
<el-table-column label="产品类型" prop="productType" sortable='custom' width="100"> <el-table-column label="产品类型" prop="productType" sortable='custom' width="100">
@ -153,14 +130,14 @@
@click="handleRead(scope.row)" @click="handleRead(scope.row)"
>查看 >查看
</el-button> </el-button>
<el-button <!-- <el-button-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
icon="el-icon-edit" <!-- icon="el-icon-edit"-->
@click="handleUpdate(scope.row)" <!-- @click="handleUpdate(scope.row)"-->
v-hasPermi="['product:info:edit']" <!-- v-hasPermi="['product:info:edit']"-->
>修改 <!-- >修改-->
</el-button> <!-- </el-button>-->
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@ -179,8 +156,6 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false"> <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="115px"> <el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-row> <el-row>
@ -328,6 +303,46 @@
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :title="title" :visible.sync="openByAdd" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-row>
<el-col :span="8" v-show="brokerId">
<el-form-item label="所属代理商" prop="brokerId" >
<treeselect v-model="form.brokerId" :options="brokerList" props="lable" :show-count="true"
:disabled="readonly"
:defaultExpandLevel="Infinity" disabled
placeholder="请选择归属部门" :normalizer="tenantIdnormalizer"/>
</el-form-item>
</el-col>
<el-col :span="8" v-show="userId">
<el-form-item label="所属经纪人" prop="userId" >
<el-select style="width: 100%;" v-model="form.userId" clearable disabled>
<el-option v-for="info in userInfoList" :key="info.userId" :label="info.userName"
:value="info.userId"/>
</el-select>
<!-- <el-input v-model="form.userId" placeholder="请输入所属经纪人" disabled/>-->
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品名称" prop="ids">
<el-select style="width: 100%;" filterable multiple v-model="form.ids" placeholder="请选择产品名称"
:disabled="readonly"
clearable>
<el-option v-for="info in infoListAll" :key="info.id" :label="info.productName"
:value="info.id"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormByAdd" v-if="!readonly"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :visible.sync="showModal" title="选择城市" @close="closeModal"> <el-dialog :visible.sync="showModal" title="选择城市" @close="closeModal">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@ -385,15 +400,20 @@ import {
updateInfo, updateInfo,
listInfo, listInfo,
editByBroker, editByBroker,
editByBrokers,
delInfoByBroker, delInfoByBroker,
listByBroker, listByBroker,
getInfoByBroker, getInfoByBroker,
listByUserId,
} from "@/api/product/info"; } from "@/api/product/info";
import {listArea} from "@/api/system/area"; import {listArea} from "@/api/system/area";
import {listBrokerByTree} from "@/api/broker/broker"; import {listBrokerByTree} from "@/api/broker/broker";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {getUser} from "@/api/system/user"; import {getUser} from "@/api/system/user";
import {
listUserAll
} from "@/api/system/user";
export default { export default {
name: "BrokerUser", name: "BrokerUser",
@ -408,10 +428,14 @@ export default {
}, },
data() { data() {
return { return {
openByAddAndUser: false,
readonly:false,
// isReadOnly: false, // isReadOnly: false,
brokerList: [], brokerList: [],
userInfoList: [],
infoListAll: [], infoListAll: [],
brokerId: null, brokerId: null,
userId: null,
// //
dateRange: [], dateRange: [],
rowDataNew: {}, rowDataNew: {},
@ -443,6 +467,7 @@ export default {
title: "", title: "",
// //
open: false, open: false,
openByAdd: false,
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
@ -468,6 +493,9 @@ export default {
id: [ id: [
{required: true, message: "产品名称不能为空", trigger: "blur"} {required: true, message: "产品名称不能为空", trigger: "blur"}
], ],
ids: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
simpleName: [ simpleName: [
{required: true, message: "产品简称不能为空", trigger: "blur"} {required: true, message: "产品简称不能为空", trigger: "blur"}
], ],
@ -514,8 +542,9 @@ export default {
// rowData row // rowData row
this.rowDataNew = newVal; this.rowDataNew = newVal;
this.brokerId = this.rowDataNew.id; this.brokerId = this.rowDataNew.id;
// const allIds = this.getAllIds(this.rowDataNew); this.userId = this.rowDataNew.userId;
this.queryParams.brokerIds = this.brokerId; this.queryParams.brokerIds = this.brokerId;
this.queryParams.userId = this.rowDataNew.userId;
this.getList(); this.getList();
}, },
}, },
@ -554,6 +583,14 @@ export default {
this.getList(); this.getList();
}); });
}, },
getUserInfoList() {
var params = {
userType:"jj"
}
listUserAll(params).then(response => {
this.userInfoList = response.data;
});
},
getAllInfo(id) { getAllInfo(id) {
var params = { var params = {
selectByBroker: "1", selectByBroker: "1",
@ -564,6 +601,17 @@ export default {
this.infoListAll = response.data; this.infoListAll = response.data;
}); });
}, },
getAllInfoByUser(id) {
// selectByBroker: "1",
var params = {
selectByBroker: "1",
userId: this.rowData.userId,
id: id
}
listByUserId(params).then(response => {
this.infoListAll = response.data;
});
},
getAllIds(data) { getAllIds(data) {
let ids = []; let ids = [];
ids.push(data.id); ids.push(data.id);
@ -668,6 +716,7 @@ export default {
// //
cancel() { cancel() {
this.open = false; this.open = false;
this.openByAdd = false;
this.reset(); this.reset();
}, },
// //
@ -687,6 +736,7 @@ export default {
listEnd: null, listEnd: null,
status: null, status: null,
remark: null, remark: null,
userId: null,
maxAmountBegin: null, maxAmountBegin: null,
maxAmountEnd: null, maxAmountEnd: null,
}; };
@ -721,13 +771,24 @@ export default {
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.reset(); this.reset();
if (this.brokerId) {
this.getAllInfo(); this.getAllInfo();
this.getbrokerList(); this.getbrokerList();
this.readonly = false; this.readonly = false;
this.form.brokerId = this.brokerId; this.form.brokerId = this.brokerId;
this.open = true; this.openByAdd = true;
// this.isReadOnly = false; // this.isReadOnly = false;
this.title = "添加产品信息"; this.title = "添加产品信息";
} else {
this.getAllInfoByUser();
this.getUserInfoList();
this.readonly = false;
this.form.userId = this.userId;
// this.form.brokerId = this.brokerId;
this.openByAdd = true;
// this.isReadOnly = false;
this.title = "添加产品信息";
}
}, },
handleRead(row) { handleRead(row) {
this.reset(); this.reset();
@ -739,7 +800,11 @@ export default {
}; };
getInfoByBroker(param).then(response => { getInfoByBroker(param).then(response => {
this.form = response.data; this.form = response.data;
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id); this.getAllInfo(id);
}
this.open = true; this.open = true;
this.readonly = true; this.readonly = true;
this.title = "查看产品信息"; this.title = "查看产品信息";
@ -753,11 +818,16 @@ export default {
const id = row.id || this.ids; const id = row.id || this.ids;
var param = { var param = {
id: id, id: id,
brokerId: this.brokerId brokerId: this.brokerId,
userId: this.userId
}; };
getInfoByBroker(param).then(response => { getInfoByBroker(param).then(response => {
this.form = response.data; this.form = response.data;
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id); this.getAllInfo(id);
}
this.open = true; this.open = true;
this.readonly = false; this.readonly = false;
this.title = "修改产品信息"; this.title = "修改产品信息";
@ -779,6 +849,23 @@ export default {
if (response.code === 200) { if (response.code === 200) {
this.$modal.msgSuccess("保存成功"); this.$modal.msgSuccess("保存成功");
this.open = false; this.open = false;
this.openByAdd = false;
this.getList();
} else {
this.$modal.msgError(response.msg);
}
});
}
});
},
submitFormByAdd() {
this.$refs["form"].validate(valid => {
if (valid) {
editByBrokers(this.form).then(response => {
if (response.code === 200) {
this.$modal.msgSuccess("保存成功");
this.open = false;
this.openByAdd = false;
this.getList(); this.getList();
} else { } else {
this.$modal.msgError(response.msg); this.$modal.msgError(response.msg);
@ -794,7 +881,8 @@ export default {
const names = row.id || this.names; const names = row.id || this.names;
var param = { var param = {
ids: ids, ids: ids,
brokerId: this.brokerId brokerId: this.brokerId,
userId: this.userId
}; };
this.$modal.confirm('是否确认移除产品信息为"' + names + '"的数据项?').then(function () { this.$modal.confirm('是否确认移除产品信息为"' + names + '"的数据项?').then(function () {
return delInfoByBroker(param); return delInfoByBroker(param);

@ -0,0 +1,867 @@
<template>
<div ref="list">
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="产品名称" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
:disabled="!brokerId && !userId"
v-hasPermi="['product:info:add']"
>选择
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['product:info:remove']"
>移除
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="infoList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="产品归属" prop="brokerName" fixed="left" />
<el-table-column label="产品名称" prop="productName" sortable='custom' fixed="left" />
<!-- <el-table-column label="备注" align="center" prop="remark" sortable='custom' show-overflow-tooltip/> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120" fixed="right">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleRead(scope.row)"
>查看
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['product:info:remove']"
>移除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-row>
<el-col :span="8">
<el-form-item label="所属代理商" prop="brokerId">
<treeselect v-model="form.brokerId" :options="brokerList" props="lable" :show-count="true"
:disabled="readonly"
:defaultExpandLevel="Infinity" disabled
placeholder="请选择归属部门" :normalizer="tenantIdnormalizer"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品名称" prop="id">
<el-select style="width: 100%;" filterable v-model="form.id" placeholder="请选择产品名称" @change="handleChange"
:disabled="readonly"
clearable>
<el-option v-for="info in infoListAll" :key="info.id" :label="info.productName"
:value="info.id"/>
</el-select>
<!-- <el-input v-model="form.productName" placeholder="请输入产品名称"/>-->
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品简称" prop="simpleName">
<el-input v-model="form.simpleName" placeholder="请输入产品简称" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="产品类型" prop="productType">
<el-select style="width: 100%;" v-model="form.productType" placeholder="选择产品类型" clearable disabled>
<el-option v-for="dict in dict.type.product_type" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品细类" prop="productSubtype">
<el-input v-model="form.productSubtype" placeholder="请输入产品细类" disabled/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最高额度(万)" prop="maxAmount">
<el-input-number v-model="form.maxAmount" placeholder="请输入最高额度(万)" style="width: 100%;" :min="0"
disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="还款周期" prop="repaymentCycle">
<el-input v-model="form.repaymentCycle" placeholder="请输入还款周期" disabled/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="还款方式" prop="repaymentMethod">
<el-input v-model="form.repaymentMethod" placeholder="请输入还款方式" disabled/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="综合费率" prop="combinedRates">
<el-input v-model="form.combinedRates" placeholder="请输入综合费率" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="上架时间起" prop="listBegin">
<el-date-picker clearable
disabled
v-model="form.listBegin"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间起"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="上架时间止" prop="listEnd">
<el-date-picker clearable
disabled
v-model="form.listEnd"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间止"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="状态" prop="status">
<el-select style="width: 100%;" v-model="form.status" placeholder="选择状态" clearable disabled>
<el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="展业城市" prop="businessCityByName">
<el-input v-model="form.businessCityByName" placeholder="选择展业城市" style="width: 100%;" readonly>
<el-button slot="append" icon="el-icon-arrow-down" @click="openModal"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年利率(单利%)" prop="interestRateBegin">
<el-input-number v-model="form.interestRateBegin" style="width: 150px;" :min="0" :precision="2" disabled/>
-
<el-input-number v-model="form.interestRateEnd" style="width: 150px;" :min="0" :precision="2" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品简介" prop="productIntro">
<editor v-model="form.productIntro" :min-height="92" disabled/>
<!-- <el-input v-model="form.productIntro" type="textarea" placeholder="请输入内容"/>-->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品详情" prop="productDetail">
<editor v-model="form.productDetail" :min-height="152" disabled/>
<!-- <el-input v-model="form.productDetail" type="textarea" placeholder="请输入内容"/>-->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" disabled/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" v-if="!readonly"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :title="title" :visible.sync="openByAdd" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-row>
<el-col :span="8" v-show="brokerId">
<el-form-item label="所属代理商" prop="brokerId" >
<treeselect v-model="form.brokerId" :options="brokerList" props="lable" :show-count="true"
:disabled="readonly"
:defaultExpandLevel="Infinity" disabled
placeholder="请选择归属部门" :normalizer="tenantIdnormalizer"/>
</el-form-item>
</el-col>
<el-col :span="8" v-show="userId">
<el-form-item label="所属经纪人" prop="userId" >
<el-select style="width: 100%;" v-model="form.userId" clearable disabled>
<el-option v-for="info in userInfoList" :key="info.userId" :label="info.userName"
:value="info.userId"/>
</el-select>
<!-- <el-input v-model="form.userId" placeholder="请输入所属经纪人" disabled/>-->
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品名称" prop="ids">
<el-select style="width: 100%;" filterable multiple v-model="form.ids" placeholder="请选择产品名称"
:disabled="readonly"
clearable>
<el-option v-for="info in infoListAll" :key="info.id" :label="info.productName"
:value="info.id"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormByAdd" v-if="!readonly"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :visible.sync="showModal" title="选择城市" @close="closeModal">
<el-row>
<el-col :span="12">
<h3 class="section-title">城市列表</h3>
<el-input v-model="searchText" placeholder="请输入城市名称" clearable></el-input>
<div class="city-tree-container">
<el-tree
:data="filteredCities"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree"
node-key="id"
:default-expand-all="false"
highlight-current
>
<template v-slot="{ node, data }">
<div class="city-item">
<span>{{ node.label }}</span>
<!-- <el-button @click="selectCity(data)" type="text" size="mini" class="add-button">添加</el-button>-->
</div>
</template>
</el-tree>
</div>
</el-col>
<el-col :span="12">
<h3 class="section-title">已选择城市</h3>
<ul class="selected-city-list">
<li v-for="(city, index) in selectedCities" :key="index">
<div class="selected-city-item">
{{ city.name }}
<!-- <el-button @click="removeCity(index)" type="text" size="mini">移除</el-button>-->
</div>
</li>
</ul>
</el-col>
</el-row>
<div slot="footer">
<el-button @click="confirmSelection"></el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import AutoTableHeight from '@/views/broker/AutoTableHeight';
import {
pageListInfo,
getInfo,
delInfo,
addInfo,
updateInfo,
listInfo,
editByBroker,
editByBrokers,
delInfoByBroker,
listByBroker,
getInfoByBroker,
listByUserId,
} from "@/api/product/info";
import {listArea} from "@/api/system/area";
import {listBrokerByTree} from "@/api/broker/broker";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {getUser} from "@/api/system/user";
import {
listUserAll
} from "@/api/system/user";
export default {
name: "BrokerUser",
mixins: [AutoTableHeight],
dicts: ['product_type', "product_status"],
components: {Treeselect},
props: {
rowData: {
type: Object,
default: () => ({})
}
},
data() {
return {
openByAddAndUser: false,
readonly:false,
// isReadOnly: false,
brokerList: [],
userInfoList: [],
infoListAll: [],
brokerId: null,
userId: null,
//
dateRange: [],
rowDataNew: {},
defaultProps: {
children: "children",
label: "name"
},
searchText: '',
showModal: false,
selectedCities: [],
cityList: [],
//
loading: true,
//
ids: [],
//
names: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
infoList: [],
//
title: "",
//
open: false,
openByAdd: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
productName: null,
simpleName: null,
productType: null,
productSubtype: null,
maxAmount: null,
interestRate: null,
productIntro: null,
productDetail: null,
listBegin: null,
listEnd: null,
status: null,
maxAmountBegin: undefined,
maxAmountEnd: undefined,
},
//
form: {},
//
rules: {
id: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
ids: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
simpleName: [
{required: true, message: "产品简称不能为空", trigger: "blur"}
],
productType: [
{required: true, message: "产品类型不能为空", trigger: "change"}
],
// productSubtype: [
// {required: true, message: "", trigger: "change"}
// ],
maxAmount: [
{required: true, message: "最高额度(万)不能为空", trigger: "blur"}
],
interestRateBegin: [
{required: true, message: "年利率(单利)不能为空", trigger: "blur"}
],
// productIntro: [
// {required: true, message: "", trigger: "blur"}
// ],
// productDetail: [
// {required: true, message: "", trigger: "blur"}
// ],
// listBegin: [
// {required: true, message: "", trigger: "blur"}
// ],
// listEnd: [
// {required: true, message: "", trigger: "blur"}
// ],
status: [
{required: true, message: "状态不能为空", trigger: "change"}
],
// remark: [
// {required: true, message: "", trigger: "blur"}
// ],
}
};
},
mounted() {
// rowData row
this.rowDataNew = this.rowData;
},
watch: {
// rowData
rowData: function (newVal, oldVal) {
this.rowDataNew = newVal;
this.brokerId = this.rowDataNew.id;
this.userId = this.rowDataNew.userId;
this.queryParams.brokerIds = this.brokerId;
this.queryParams.userId = this.rowDataNew.userId;
this.getList();
},
},
computed: {
filteredCities() {
//
return this.cityList.filter(city => city.name.includes(this.searchText));
}
},
created() {
this.getList();
this.getAreaList();
},
methods: {
tenantIdnormalizer(node, instanceId) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.id,
label: node.brokerName,
children: node.children
}
},
getbrokerList() {
listBrokerByTree().then(response => {
this.brokerList = response.data;
});
},
handleChange() {
getInfo(this.form.id).then(response => {
var brokerId = this.form.brokerId;
this.form = response.data;
this.form.brokerId = brokerId;
this.getAllInfo();
this.getList();
});
},
getUserInfoList() {
var params = {
userType:"jj"
}
listUserAll(params).then(response => {
this.userInfoList = response.data;
});
},
getAllInfo(id) {
var params = {
selectByBroker: "1",
brokerId: this.rowData.id,
id: id
}
listByBroker(params).then(response => {
this.infoListAll = response.data;
});
},
getAllInfoByUser(id) {
// selectByBroker: "1",
var params = {
selectByBroker: "1",
userId: this.rowData.userId,
id: id
}
listByUserId(params).then(response => {
this.infoListAll = response.data;
});
},
getAllIds(data) {
let ids = [];
ids.push(data.id);
if (data.children && Array.isArray(data.children)) {
// children
data.children.forEach(child => {
// getAllIds id ids
ids = ids.concat(this.getAllIds(child));
});
}
return ids.join(',');
},
filterNode(value, data) {
if (!value) return true;
return data.name.indexOf(value) !== -1;
},
openModal() {
this.showModal = true;
let selectedCities = [];
let businessCities = this.form.businessCity.split(',');
businessCities.forEach(cityId => {
let matchedCity = this.cityList.find(city => city.areaId == cityId);
if (matchedCity) {
selectedCities.push({
areaId: matchedCity.areaId,
name: matchedCity.name
});
}
});
this.selectedCities = selectedCities;
},
closeModal() {
//
this.showModal = false;
this.searchText = '';
this.selectedCities = [];
},
selectCity(city) {
//
if (this.isCitySelected(city)) {
this.$message.warning('该城市已经添加过了!');
} else {
this.selectedCities.push(city);
this.$message.success('成功添加城市!');
}
},
isCitySelected(city) {
//
return this.selectedCities.some(selectedCity => selectedCity.areaId == city.areaId);
},
removeCity(index) {
//
this.selectedCities.splice(index, 1);
},
confirmSelection() {
//
this.form.businessCity = this.selectedCities.map(city => city.areaId).join(',');
this.form.businessCityByName = this.selectedCities.map(city => city.name).join(',');
this.showModal = false;
},
getAreaList() {
listArea().then(response => {
this.cityList = this.buildTree(response.data);
});
},
buildTree(data) {
let tree = [];
let map = {};
data.forEach(node => {
map[node.areaId] = node;
node.children = [];
});
//
if (map[0]) {
tree.push(map[0]);
delete map[0];
}
data.forEach(node => {
if (node.parentId != 0) {
const parent = map[node.parentId];
if (parent) {
parent.children.push(node);
}
} else if (node.areaId != 0) {
tree.push(node);
}
});
return tree;
},
/** 查询产品信息列表 */
getList() {
this.loading = true;
this.queryParams.selectByBroker = "1";
pageListInfo(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.infoList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(e => {
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.openByAdd = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
productName: null,
simpleName: null,
productType: null,
productSubtype: null,
maxAmount: null,
interestRateBegin: null,
interestRateEnd: null,
productIntro: null,
productDetail: null,
listBegin: null,
listEnd: null,
status: null,
remark: null,
userId: null,
maxAmountBegin: null,
maxAmountEnd: null,
};
this.resetForm("form");
},
//
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.queryParams.maxAmountBegin = undefined;
this.queryParams.maxAmountEnd = undefined;
this.queryParams.interestRateEnd = undefined;
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.names = selection.map(item => item.productName);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
if (this.brokerId) {
this.getAllInfo();
this.getbrokerList();
this.readonly = false;
this.form.brokerId = this.brokerId;
this.openByAdd = true;
// this.isReadOnly = false;
this.title = "添加产品信息";
} else {
this.getAllInfoByUser();
this.getUserInfoList();
this.readonly = false;
this.form.userId = this.userId;
// this.form.brokerId = this.brokerId;
this.openByAdd = true;
// this.isReadOnly = false;
this.title = "添加产品信息";
}
},
handleRead(row) {
this.reset();
this.getbrokerList();
const id = row.id || this.ids;
var param = {
id: id,
brokerId: this.brokerId
};
getInfoByBroker(param).then(response => {
this.form = response.data;
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id);
}
this.open = true;
this.readonly = true;
this.title = "查看产品信息";
// this.isReadOnly = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getbrokerList();
const id = row.id || this.ids;
var param = {
id: id,
brokerId: this.brokerId,
userId: this.userId
};
getInfoByBroker(param).then(response => {
this.form = response.data;
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id);
}
this.open = true;
this.readonly = false;
this.title = "修改产品信息";
// this.isReadOnly = true;
});
// getInfo(id).then(response => {
// this.form = response.data;
// this.form.brokerId = this.brokerId;
// this.getAllInfo(id);
// this.open = true;
// this.title = "";
// });
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
editByBroker(this.form).then(response => {
if (response.code === 200) {
this.$modal.msgSuccess("保存成功");
this.open = false;
this.openByAdd = false;
this.getList();
} else {
this.$modal.msgError(response.msg);
}
});
}
});
},
submitFormByAdd() {
this.$refs["form"].validate(valid => {
if (valid) {
editByBrokers(this.form).then(response => {
if (response.code === 200) {
this.$modal.msgSuccess("保存成功");
this.open = false;
this.openByAdd = false;
this.getList();
} else {
this.$modal.msgError(response.msg);
}
});
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const rowIds = Array.isArray(row.id) ? row.id : [row.id];
const ids = [...rowIds, ...this.ids];
const names = row.id || this.names;
var param = {
ids: ids,
brokerId: this.brokerId,
userId: this.userId
};
this.$modal.confirm('是否确认移除产品信息为"' + names + '"的数据项?').then(function () {
return delInfoByBroker(param);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
this.download('product/info/export', {
...this.queryParams
}, `产品信息数据_${new Date().getTime()}.xlsx`)
}
}
}
;
</script>
<style scoped>
.add-button {
margin-left: 10px; /* 将添加按钮向右移动 */
}
.section-title {
font-size: 16px;
margin-bottom: 10px;
}
.city-tree-container {
flex: 1;
overflow-y: auto;
max-height: 400px; /* 设置最大高度 */
}
.city-item {
display: flex;
align-items: center;
justify-content: space-between;
margin-right: 10px;
}
.city-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
}
.selected-city-list {
list-style: none;
padding: 0;
margin: 0;
max-height: 440px; /* 设置最大高度 */
flex: 1;
overflow-y: auto;
}
.selected-city-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
}
</style>

@ -0,0 +1,851 @@
<template>
<div ref="list">
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="产品名称" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- :disabled="!brokerId && !userId"-->
<!-- v-hasPermi="['product:info:add']"-->
<!-- >选择-->
<!-- </el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['product:info:remove']"-->
<!-- >移除-->
<!-- </el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="infoList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="产品归属" prop="brokerName" fixed="left" />
<el-table-column label="产品名称" prop="productName" sortable='custom' fixed="left" />
<!-- <el-table-column label="备注" align="center" prop="remark" sortable='custom' show-overflow-tooltip/> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120" fixed="right">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleRead(scope.row)"
>查看
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-row>
<el-col :span="8">
<el-form-item label="所属代理商" prop="brokerId">
<treeselect v-model="form.brokerId" :options="brokerList" props="lable" :show-count="true"
:disabled="readonly"
:defaultExpandLevel="Infinity" disabled
placeholder="请选择归属部门" :normalizer="tenantIdnormalizer"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品名称" prop="id">
<el-select style="width: 100%;" filterable v-model="form.id" placeholder="请选择产品名称" @change="handleChange"
:disabled="readonly"
clearable>
<el-option v-for="info in infoListAll" :key="info.id" :label="info.productName"
:value="info.id"/>
</el-select>
<!-- <el-input v-model="form.productName" placeholder="请输入产品名称"/>-->
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品简称" prop="simpleName">
<el-input v-model="form.simpleName" placeholder="请输入产品简称" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="产品类型" prop="productType">
<el-select style="width: 100%;" v-model="form.productType" placeholder="选择产品类型" clearable disabled>
<el-option v-for="dict in dict.type.product_type" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品细类" prop="productSubtype">
<el-input v-model="form.productSubtype" placeholder="请输入产品细类" disabled/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最高额度(万)" prop="maxAmount">
<el-input-number v-model="form.maxAmount" placeholder="请输入最高额度(万)" style="width: 100%;" :min="0"
disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="还款周期" prop="repaymentCycle">
<el-input v-model="form.repaymentCycle" placeholder="请输入还款周期" disabled/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="还款方式" prop="repaymentMethod">
<el-input v-model="form.repaymentMethod" placeholder="请输入还款方式" disabled/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="综合费率" prop="combinedRates">
<el-input v-model="form.combinedRates" placeholder="请输入综合费率" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="上架时间起" prop="listBegin">
<el-date-picker clearable
disabled
v-model="form.listBegin"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间起"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="上架时间止" prop="listEnd">
<el-date-picker clearable
disabled
v-model="form.listEnd"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间止"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="状态" prop="status">
<el-select style="width: 100%;" v-model="form.status" placeholder="选择状态" clearable disabled>
<el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="展业城市" prop="businessCityByName">
<el-input v-model="form.businessCityByName" placeholder="选择展业城市" style="width: 100%;" readonly>
<el-button slot="append" icon="el-icon-arrow-down" @click="openModal"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年利率(单利%)" prop="interestRateBegin">
<el-input-number v-model="form.interestRateBegin" style="width: 150px;" :min="0" :precision="2" disabled/>
-
<el-input-number v-model="form.interestRateEnd" style="width: 150px;" :min="0" :precision="2" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品简介" prop="productIntro">
<editor v-model="form.productIntro" :min-height="92" disabled/>
<!-- <el-input v-model="form.productIntro" type="textarea" placeholder="请输入内容"/>-->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品详情" prop="productDetail">
<editor v-model="form.productDetail" :min-height="152" disabled/>
<!-- <el-input v-model="form.productDetail" type="textarea" placeholder="请输入内容"/>-->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" disabled/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" v-if="!readonly"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :title="title" :visible.sync="openByAdd" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-row>
<el-col :span="8" v-show="brokerId">
<el-form-item label="所属代理商" prop="brokerId" >
<treeselect v-model="form.brokerId" :options="brokerList" props="lable" :show-count="true"
:disabled="readonly"
:defaultExpandLevel="Infinity" disabled
placeholder="请选择归属部门" :normalizer="tenantIdnormalizer"/>
</el-form-item>
</el-col>
<el-col :span="8" v-show="userId">
<el-form-item label="所属经纪人" prop="userId" >
<el-select style="width: 100%;" v-model="form.userId" clearable disabled>
<el-option v-for="info in userInfoList" :key="info.userId" :label="info.userName"
:value="info.userId"/>
</el-select>
<!-- <el-input v-model="form.userId" placeholder="请输入所属经纪人" disabled/>-->
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品名称" prop="ids">
<el-select style="width: 100%;" filterable multiple v-model="form.ids" placeholder="请选择产品名称"
:disabled="readonly"
clearable>
<el-option v-for="info in infoListAll" :key="info.id" :label="info.productName"
:value="info.id"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormByAdd" v-if="!readonly"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改代理商经纪对话框 -->
<el-dialog :visible.sync="showModal" title="选择城市" @close="closeModal">
<el-row>
<el-col :span="12">
<h3 class="section-title">城市列表</h3>
<el-input v-model="searchText" placeholder="请输入城市名称" clearable></el-input>
<div class="city-tree-container">
<el-tree
:data="filteredCities"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree"
node-key="id"
:default-expand-all="false"
highlight-current
>
<template v-slot="{ node, data }">
<div class="city-item">
<span>{{ node.label }}</span>
<!-- <el-button @click="selectCity(data)" type="text" size="mini" class="add-button">添加</el-button>-->
</div>
</template>
</el-tree>
</div>
</el-col>
<el-col :span="12">
<h3 class="section-title">已选择城市</h3>
<ul class="selected-city-list">
<li v-for="(city, index) in selectedCities" :key="index">
<div class="selected-city-item">
{{ city.name }}
<!-- <el-button @click="removeCity(index)" type="text" size="mini">移除</el-button>-->
</div>
</li>
</ul>
</el-col>
</el-row>
<div slot="footer">
<el-button @click="confirmSelection"></el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import AutoTableHeight from '@/views/broker/AutoTableHeight';
import {
pageListInfo,
getInfo,
delInfo,
addInfo,
updateInfo,
listInfo,
editByBroker,
editByBrokers,
delInfoByBroker,
listByBroker,
getInfoByBroker,
listByUserId,
} from "@/api/product/info";
import {listArea} from "@/api/system/area";
import {listBrokerByTree} from "@/api/broker/broker";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {getUser} from "@/api/system/user";
import {
listUserAll
} from "@/api/system/user";
export default {
name: "BrokerUser",
mixins: [AutoTableHeight],
dicts: ['product_type', "product_status"],
components: {
Treeselect,
},
props: {
rowData: {
type: Object,
default: () => ({})
}
},
data() {
return {
openByAddAndUser: false,
readonly:false,
// isReadOnly: false,
brokerList: [],
userInfoList: [],
infoListAll: [],
brokerId: null,
userId: null,
//
dateRange: [],
rowDataNew: {},
defaultProps: {
children: "children",
label: "name"
},
searchText: '',
showModal: false,
selectedCities: [],
cityList: [],
//
loading: true,
//
ids: [],
//
names: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
infoList: [],
//
title: "",
//
open: false,
openByAdd: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
productName: null,
simpleName: null,
productType: null,
productSubtype: null,
maxAmount: null,
interestRate: null,
productIntro: null,
productDetail: null,
listBegin: null,
listEnd: null,
status: null,
maxAmountBegin: undefined,
maxAmountEnd: undefined,
},
//
form: {},
//
rules: {
id: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
ids: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
simpleName: [
{required: true, message: "产品简称不能为空", trigger: "blur"}
],
productType: [
{required: true, message: "产品类型不能为空", trigger: "change"}
],
// productSubtype: [
// {required: true, message: "", trigger: "change"}
// ],
maxAmount: [
{required: true, message: "最高额度(万)不能为空", trigger: "blur"}
],
interestRateBegin: [
{required: true, message: "年利率(单利)不能为空", trigger: "blur"}
],
status: [
{required: true, message: "状态不能为空", trigger: "change"}
],
// remark: [
// {required: true, message: "", trigger: "blur"}
// ],
}
};
},
mounted() {
// rowData row
this.rowDataNew = this.rowData;
},
watch: {
// rowData
rowData: function (newVal, oldVal) {
// rowData row
this.rowDataNew = newVal;
this.brokerId = this.rowDataNew.id;
this.userId = this.rowDataNew.userId;
// const allIds = this.getAllIds(this.rowDataNew);
this.queryParams.brokerIds = this.brokerId;
this.queryParams.userId = this.rowDataNew.userId;
this.getList();
},
},
computed: {
filteredCities() {
//
return this.cityList.filter(city => city.name.includes(this.searchText));
}
},
created() {
this.getList();
this.getAreaList();
},
methods: {
tenantIdnormalizer(node, instanceId) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.id,
label: node.brokerName,
children: node.children
}
},
getbrokerList() {
listBrokerByTree().then(response => {
this.brokerList = response.data;
});
},
handleChange() {
getInfo(this.form.id).then(response => {
var brokerId = this.form.brokerId;
this.form = response.data;
this.form.brokerId = brokerId;
this.getAllInfo();
this.getList();
});
},
getUserInfoList() {
var params = {
userType:"jj"
}
listUserAll(params).then(response => {
this.userInfoList = response.data;
});
},
getAllInfo(id) {
// var params = {
// selectByBroker: "1",
// id: id
// }
listInfo().then(response => {
this.infoListAll = response.data;
});
},
getAllInfoByUser(id) {
// selectByBroker: "1",
// var params = {
// selectByBroker: "1",
// id: id
// }
listInfo().then(response => {
this.infoListAll = response.data;
});
},
getAllIds(data) {
let ids = [];
ids.push(data.id);
if (data.children && Array.isArray(data.children)) {
// children
data.children.forEach(child => {
// getAllIds id ids
ids = ids.concat(this.getAllIds(child));
});
}
return ids.join(',');
},
filterNode(value, data) {
if (!value) return true;
return data.name.indexOf(value) !== -1;
},
openModal() {
this.showModal = true;
let selectedCities = [];
let businessCities = this.form.businessCity.split(',');
businessCities.forEach(cityId => {
let matchedCity = this.cityList.find(city => city.areaId == cityId);
if (matchedCity) {
selectedCities.push({
areaId: matchedCity.areaId,
name: matchedCity.name
});
}
});
this.selectedCities = selectedCities;
},
closeModal() {
//
this.showModal = false;
this.searchText = '';
this.selectedCities = [];
},
selectCity(city) {
//
if (this.isCitySelected(city)) {
this.$message.warning('该城市已经添加过了!');
} else {
this.selectedCities.push(city);
this.$message.success('成功添加城市!');
}
},
isCitySelected(city) {
//
return this.selectedCities.some(selectedCity => selectedCity.areaId == city.areaId);
},
removeCity(index) {
//
this.selectedCities.splice(index, 1);
},
confirmSelection() {
//
this.form.businessCity = this.selectedCities.map(city => city.areaId).join(',');
this.form.businessCityByName = this.selectedCities.map(city => city.name).join(',');
this.showModal = false;
},
getAreaList() {
listArea().then(response => {
this.cityList = this.buildTree(response.data);
});
},
buildTree(data) {
let tree = [];
let map = {};
data.forEach(node => {
map[node.areaId] = node;
node.children = [];
});
//
if (map[0]) {
tree.push(map[0]);
delete map[0];
}
data.forEach(node => {
if (node.parentId != 0) {
const parent = map[node.parentId];
if (parent) {
parent.children.push(node);
}
} else if (node.areaId != 0) {
tree.push(node);
}
});
return tree;
},
/** 查询产品信息列表 */
getList() {
this.loading = true;
this.queryParams.selectByBroker = "1";
this.queryParams.isSelectBroker = "1";
pageListInfo(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.infoList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(e => {
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.openByAdd = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
productName: null,
simpleName: null,
productType: null,
productSubtype: null,
maxAmount: null,
interestRateBegin: null,
interestRateEnd: null,
productIntro: null,
productDetail: null,
listBegin: null,
listEnd: null,
status: null,
remark: null,
userId: null,
maxAmountBegin: null,
maxAmountEnd: null,
};
this.resetForm("form");
},
//
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.queryParams.maxAmountBegin = undefined;
this.queryParams.maxAmountEnd = undefined;
this.queryParams.interestRateEnd = undefined;
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.names = selection.map(item => item.productName);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
if (this.brokerId) {
this.getAllInfo();
this.getbrokerList();
this.readonly = false;
this.form.brokerId = this.brokerId;
this.openByAdd = true;
// this.isReadOnly = false;
this.title = "添加产品信息";
} else {
this.getAllInfoByUser();
this.getUserInfoList();
this.readonly = false;
this.form.userId = this.userId;
// this.form.brokerId = this.brokerId;
this.openByAdd = true;
// this.isReadOnly = false;
this.title = "添加产品信息";
}
},
handleRead(row) {
this.reset();
this.getbrokerList();
const id = row.id || this.ids;
var param = {
id: id,
brokerId: this.brokerId
};
getInfoByBroker(param).then(response => {
this.form = response.data;
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id);
}
this.open = true;
this.readonly = true;
this.title = "查看产品信息";
// this.isReadOnly = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getbrokerList();
const id = row.id || this.ids;
var param = {
id: id,
brokerId: this.brokerId,
userId: this.userId
};
getInfoByBroker(param).then(response => {
this.form = response.data;
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id);
}
this.open = true;
this.readonly = false;
this.title = "修改产品信息";
// this.isReadOnly = true;
});
// getInfo(id).then(response => {
// this.form = response.data;
// this.form.brokerId = this.brokerId;
// this.getAllInfo(id);
// this.open = true;
// this.title = "";
// });
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
editByBroker(this.form).then(response => {
if (response.code === 200) {
this.$modal.msgSuccess("保存成功");
this.open = false;
this.openByAdd = false;
this.getList();
} else {
this.$modal.msgError(response.msg);
}
});
}
});
},
submitFormByAdd() {
this.$refs["form"].validate(valid => {
if (valid) {
editByBrokers(this.form).then(response => {
if (response.code === 200) {
this.$modal.msgSuccess("保存成功");
this.open = false;
this.openByAdd = false;
this.getList();
} else {
this.$modal.msgError(response.msg);
}
});
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const rowIds = Array.isArray(row.id) ? row.id : [row.id];
const ids = [...rowIds, ...this.ids];
const names = row.id || this.names;
var param = {
ids: ids,
brokerId: this.brokerId,
userId: this.userId
};
this.$modal.confirm('是否确认移除产品信息为"' + names + '"的数据项?').then(function () {
return delInfoByBroker(param);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
this.download('product/info/export', {
...this.queryParams
}, `产品信息数据_${new Date().getTime()}.xlsx`)
}
}
}
;
</script>
<style scoped>
.add-button {
margin-left: 10px; /* 将添加按钮向右移动 */
}
.section-title {
font-size: 16px;
margin-bottom: 10px;
}
.city-tree-container {
flex: 1;
overflow-y: auto;
max-height: 400px; /* 设置最大高度 */
}
.city-item {
display: flex;
align-items: center;
justify-content: space-between;
margin-right: 10px;
}
.city-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
}
.selected-city-list {
list-style: none;
padding: 0;
margin: 0;
max-height: 440px; /* 设置最大高度 */
flex: 1;
overflow-y: auto;
}
.selected-city-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
}
</style>

@ -83,7 +83,7 @@
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> --> </el-row> -->
<el-table v-loading="loading" :data="brokerList" @sort-change="handleSortChange" :height="tableHeight - 150" <el-table v-loading="loading" :data="brokerList" @sort-change="handleSortChange" :height="370"
@selection-change="handleSelectionChange" row-key="id" :highlight-current-row="true" @row-click="handleRowClick" @selection-change="handleSelectionChange" row-key="id" :highlight-current-row="true" @row-click="handleRowClick"
default-expand-all default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"> :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
@ -349,6 +349,9 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
clearSelection() {
this.resetQuery();
},
tenantIdnormalizer(node, instanceId) { tenantIdnormalizer(node, instanceId) {
if (node.children && !node.children.length) { if (node.children && !node.children.length) {
delete node.children delete node.children

@ -0,0 +1,178 @@
<template>
<div ref="list">
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="95px" >
<el-form-item label="经纪人" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入经纪人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="370" ref="table"
@selection-change="handleSelectionChange" row-key="id" :highlight-current-row="true" @row-click="handleRowClick" >
<el-table-column label="经纪人" prop="userName" sortable='custom' min-width="200px"/>
</el-table>
<pagination
size="small"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
layout=" prev, pager,next"
@pagination="getList"
/>
</div>
</template>
<script>
import {
listUser
} from "@/api/system/user";
import AutoTableHeight from '@/views/broker/AutoTableHeight';
import {changeUserStatus} from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "DfBrokerUser",
mixins: [AutoTableHeight],
dicts: ["df_broker_staus","sys_yes_no"],
components: {Treeselect},
data() {
return {
readonly:false,
//
loading: true,
//
ids: [],
//
names: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
userList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined,
userType: "jj",
},
//
form: {},
//
rules: {
brokerName: [
{required: true, message: "代理商名称不能为空", trigger: "blur"}
],
isInstitution: [
{required: true, message: "是否机构不能为空", trigger: "blur"}
],
staus: [
{required: true, message: "状态不能为空", trigger: "blur"}
],
}
};
},
created() {
this.getList();
},
methods: {
clearSelection() {
this.resetQuery();
},
tenantIdnormalizer(node, instanceId) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.id,
label: node.brokerName,
children: node.children
}
},
//
handleRowClick(row) {
this.$emit('row-click', row);
},
/** 查询代理商经纪列表 */
getList() {
this.loading = true;
this.queryParams.isBroker = "Y";
listUser(this.queryParams).then(response => {
this.userList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(e => {
this.loading = false;
});
// listBrokerByTree().then(response => {
// this.brokerOptions = response.data;
// });
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
parentId: null,
brokerName: null,
brokerAddress: null,
brokerDesc: null,
orderNum: null,
chargePerson: null,
contactPhone: null,
email: null,
isInstitution: null,
staus: null,
remark: null,
};
this.resetForm("form");
},
//
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.names = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
}
};
</script>

@ -1,31 +1,79 @@
<template> <template>
<my-page :left-style="{width: '20vw'}"> <my-page :left-style="{width: '20vw'}">
<template slot="left"> <template slot="left">
<DfBroker ref="dfBroker" style="height: 100%;width: 100%;" @row-click="handleRowClick"></DfBroker> <el-collapse v-model="activeName" accordion @change="handleCollapseChange">
<el-collapse-item title="代理商" name="1">
<DfBroker ref="dfBroker" style="height: 100%; width: 100%;" @row-click="handleRowClick"></DfBroker>
</el-collapse-item>
<el-collapse-item title="经纪人" name="2">
<DfBrokerUser ref="dfBrokerUser" style="height: 100%; width: 100%;" @row-click="handleRowClick"></DfBrokerUser>
</el-collapse-item>
</el-collapse>
</template> </template>
<BrokerProduct ref="brokerUser" :extraHeight="100" style="height: 97%;margin-left: 8px;"
<BrokerProduct v-if="!isUser" ref="brokerUser" :extraHeight="100" style="height: 97%;margin-left: 8px;"
:rowData="rowData"></BrokerProduct> :rowData="rowData"></BrokerProduct>
<div v-if="isUser" style="display: flex; height: 97%; margin-left: 8px;">
<BrokerProductByUserId
v-if="isUser"
ref="brokerUser"
:extraHeight="100"
style="flex: 1; margin-right: 8px; height: 100%; width: 40%;"
:rowData="rowData"
></BrokerProductByUserId>
<BrokerProductTwo
v-if="isUser"
ref="brokerUser"
:extraHeight="100"
style="flex: 1; height: 100%; width: 40%;"
:rowData="rowData"
></BrokerProductTwo>
</div>
</my-page> </my-page>
</template> </template>
<script> <script>
import BrokerProduct from './components/BrokerProduct.vue'; import BrokerProduct from './components/BrokerProduct.vue';
import BrokerProductTwo from './components/BrokerProductTwo.vue';
import BrokerProductByUserId from './components/BrokerProductByUserId';
import DfBroker from './components/DfBroker.vue'; import DfBroker from './components/DfBroker.vue';
import DfBrokerUser from './components/DfBrokerUser.vue';
export default { export default {
name: "Product", name: "Product",
components: { components: {
BrokerProduct, BrokerProduct,
BrokerProductTwo,
BrokerProductByUserId,
DfBrokerUser,
DfBroker, DfBroker,
}, },
data() { data() {
return { return {
isUser: false,
activeName: '1',
rowData: null rowData: null
}; };
}, },
methods: { methods: {
handleCollapseChange(newActiveName) {
this.isUser = newActiveName === '2';
if (this.$refs.dfBrokerUser) {
this.$refs.dfBrokerUser.clearSelection();
}
if (this.$refs.dfBroker) {
this.$refs.dfBroker.clearSelection();
}
},
handleRowClick(row) { handleRowClick(row) {
this.rowData = null;
this.rowData = row; this.rowData = row;
if (this.rowData.userId) {
this.isUser = true;
} else {
this.isUser = false;
}
} }
} }
}; };

@ -7,10 +7,10 @@
append-to-body append-to-body
> >
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" label-width="100px"> <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" label-width="100px">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -35,7 +35,7 @@
<i v-if="scope.row.userId === selectionUserId" style="color: #1890ff;" class="el-icon-circle-check"></i> <i v-if="scope.row.userId === selectionUserId" style="color: #1890ff;" class="el-icon-circle-check"></i>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户名称" key="userName" prop="userName" <el-table-column label="登陆账号" key="userName" prop="userName"
:show-overflow-tooltip="true" /> :show-overflow-tooltip="true" />
<el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/> <el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/>
<el-table-column label="用户昵称" key="nickName" prop="nickName" <el-table-column label="用户昵称" key="nickName" prop="nickName"

@ -1,10 +1,18 @@
<template> <template>
<div ref="list"> <div ref="list">
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px"> <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="真实姓名" prop="realName">
<el-input
v-model="queryParams.realName"
placeholder="请输入真实姓名"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -52,12 +60,13 @@
<el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="tableHeight - 150" <el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <el-table-column type="selection" width="50" align="center"/>
<el-table-column label="用户名称" key="userName" prop="userName" v-if="columns[1].visible" <el-table-column label="登陆账号" key="userName" prop="userName" v-if="columns[1].visible"
:show-overflow-tooltip="true" fixed="left"/> :show-overflow-tooltip="true" fixed="left"/>
<el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/> <el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/>
<el-table-column label="用户编号" key="userId" prop="userId" v-if="columns[0].visible"/> <el-table-column label="用户编号" key="userId" prop="userId" v-if="columns[0].visible"/>
<el-table-column label="用户昵称" key="nickName" prop="nickName" v-if="columns[2].visible" <el-table-column label="用户昵称" key="nickName" prop="nickName" v-if="columns[2].visible"
:show-overflow-tooltip="true"/> :show-overflow-tooltip="true"/>
<el-table-column label="真实姓名" key="realName" prop="realName" :show-overflow-tooltip="true"/>
<!-- <el-table-column label="身份证号" prop="identityCard" /> --> <!-- <el-table-column label="身份证号" prop="identityCard" /> -->
<el-table-column label="城市" prop="city" /> <el-table-column label="城市" prop="city" />
<el-table-column label="注册时间" prop="registrationTime" width="100" > <el-table-column label="注册时间" prop="registrationTime" width="100" >
@ -138,8 +147,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName"> <el-form-item v-if="form.userId == undefined" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" :disabled="readonly"/> <el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30" :disabled="readonly"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -356,7 +365,7 @@ export default {
// //
columns: [ columns: [
{key: 0, label: `用户编号`, visible: true}, {key: 0, label: `用户编号`, visible: true},
{key: 1, label: `用户名称`, visible: true}, {key: 1, label: `登陆账号`, visible: true},
{key: 2, label: `用户昵称`, visible: true}, {key: 2, label: `用户昵称`, visible: true},
{key: 3, label: `部门`, visible: true}, {key: 3, label: `部门`, visible: true},
{key: 4, label: `手机号码`, visible: true}, {key: 4, label: `手机号码`, visible: true},
@ -366,8 +375,8 @@ export default {
// //
rules: { rules: {
userName: [ userName: [
{required: true, message: "用户名称不能为空", trigger: "blur"}, {required: true, message: "登陆账号不能为空", trigger: "blur"},
{min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur'} {min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur'}
], ],
nickName: [ nickName: [
{required: true, message: "用户昵称不能为空", trigger: "blur"} {required: true, message: "用户昵称不能为空", trigger: "blur"}

@ -10,10 +10,10 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable clearable
style="width: 240px;" style="width: 240px;"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
@ -101,7 +101,7 @@
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange"> <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="访问编号" align="center" prop="infoId" /> <el-table-column label="访问编号" align="center" prop="infoId" />
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> <el-table-column label="登陆账号" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" /> <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" /> <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" /> <el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />

@ -9,10 +9,10 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />

@ -1,10 +1,10 @@
<template> <template>
<div ref="list"> <div ref="list">
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px"> <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -112,7 +112,7 @@
:highlight-current-row="true" @row-click="handleRowClick" :highlight-current-row="true" @row-click="handleRowClick"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <el-table-column type="selection" width="50" align="center"/>
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" <el-table-column label="登陆账号" align="center" key="userName" prop="userName" v-if="columns[1].visible"
:show-overflow-tooltip="true" fixed="left"/> :show-overflow-tooltip="true" fixed="left"/>
<el-table-column label="所属代理商" align="center" prop="deptName" :show-overflow-tooltip="true" width="120"/> <el-table-column label="所属代理商" align="center" prop="deptName" :show-overflow-tooltip="true" width="120"/>
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible"/> <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible"/>
@ -212,8 +212,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName"> <el-form-item v-if="form.userId == undefined" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30"/> <el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -392,7 +392,7 @@ export default {
// //
columns: [ columns: [
{key: 0, label: `用户编号`, visible: true}, {key: 0, label: `用户编号`, visible: true},
{key: 1, label: `用户名称`, visible: true}, {key: 1, label: `登陆账号`, visible: true},
{key: 2, label: `用户昵称`, visible: true}, {key: 2, label: `用户昵称`, visible: true},
{key: 3, label: `部门`, visible: true}, {key: 3, label: `部门`, visible: true},
{key: 4, label: `手机号码`, visible: true}, {key: 4, label: `手机号码`, visible: true},
@ -405,8 +405,8 @@ export default {
// {required: true, message: "", trigger: "blur"} // {required: true, message: "", trigger: "blur"}
// ], // ],
userName: [ userName: [
{required: true, message: "用户名称不能为空", trigger: "blur"}, {required: true, message: "登陆账号不能为空", trigger: "blur"},
{min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur'} {min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur'}
], ],
nickName: [ nickName: [
{required: true, message: "用户昵称不能为空", trigger: "blur"} {required: true, message: "用户昵称不能为空", trigger: "blur"}

@ -125,7 +125,7 @@
<el-table-column label="订单号" prop="orderNo" sortable='custom' width="100px"/> <el-table-column label="订单号" prop="orderNo" sortable='custom' width="100px"/>
<el-table-column label="客户" width="120" prop="userName"/> <el-table-column label="客户" width="120" prop="userName"/>
<el-table-column label="联系方式" width="110" prop="phone"/> <el-table-column label="联系方式" width="110" prop="phone"/>
<el-table-column label="经人" prop="brokerName" width="120"/> <el-table-column label="经人" prop="brokerName" width="120"/>
<el-table-column label="产品名称" prop="productName" sortable='custom' width="100px"/> <el-table-column label="产品名称" prop="productName" sortable='custom' width="100px"/>
<el-table-column label="申请额" prop="applyAmount" sortable='custom' width="90px"/> <el-table-column label="申请额" prop="applyAmount" sortable='custom' width="90px"/>
<el-table-column label="授信额" prop="limitAmount" sortable='custom' width="90px"/> <el-table-column label="授信额" prop="limitAmount" sortable='custom' width="90px"/>
@ -191,8 +191,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="经人" prop="brokerName"> <el-form-item label="经人" prop="brokerName">
<el-input v-model="form.brokerName" placeholder="请输入经人" style="width: 100%" :disabled="readonly"/> <el-input v-model="form.brokerName" placeholder="请输入经人" style="width: 100%" :disabled="readonly"/>
<!-- <el-input v-model="form.brokerId" placeholder="请输入代理商"/>--> <!-- <el-input v-model="form.brokerId" placeholder="请输入代理商"/>-->
</el-form-item> </el-form-item>
</el-col> </el-col>

@ -1,10 +1,10 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable clearable
style="width: 240px" style="width: 240px"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
@ -61,7 +61,7 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" /> <el-table-column label="登陆账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" /> <el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" /> <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" /> <el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />

@ -2,10 +2,10 @@
<!-- 授权用户 --> <!-- 授权用户 -->
<el-dialog title="选择用户" :visible.sync="visible" width="800px" top="5vh" append-to-body> <el-dialog title="选择用户" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -26,7 +26,7 @@
<el-row> <el-row>
<el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px"> <el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px">
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" /> <el-table-column label="登陆账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" /> <el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" /> <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" /> <el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />

@ -30,10 +30,19 @@
<!--用户数据--> <!--用户数据-->
<el-col :span="20" :xs="24"> <el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="登陆账号" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入登陆账号"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="真实姓名" prop="realName">
<el-input
v-model="queryParams.realName"
placeholder="请输入真实姓名"
clearable clearable
style="width: 240px" style="width: 240px"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
@ -139,7 +148,8 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column label="登陆账号" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="真实姓名" align="center" key="realName" prop="realName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" /> <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
@ -231,8 +241,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName"> <el-form-item v-if="form.userId == undefined" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" /> <el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -294,6 +304,25 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="12">
<el-form-item label="真实姓名" prop="realName">
<el-input v-model="form.realName" placeholder="请输入真实姓名" maxlength="50" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核状态">
<el-radio-group v-model="form.reviewStatus" :disabled="readonly">
<el-radio
v-for="dict in dict.type.review_status"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注"> <el-form-item label="备注">
@ -348,7 +377,7 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default { export default {
name: "User", name: "User",
dicts: ['sys_normal_disable', 'sys_user_sex'], dicts: ['sys_normal_disable', 'sys_user_sex', 'review_status'],
components: { Treeselect }, components: { Treeselect },
data() { data() {
return { return {
@ -408,6 +437,7 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
userName: undefined, userName: undefined,
realName: undefined,
phonenumber: undefined, phonenumber: undefined,
status: undefined, status: undefined,
deptId: undefined deptId: undefined
@ -415,7 +445,7 @@ export default {
// //
columns: [ columns: [
{ key: 0, label: `用户编号`, visible: true }, { key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true }, { key: 1, label: `登陆账号`, visible: true },
{ key: 2, label: `用户昵称`, visible: true }, { key: 2, label: `用户昵称`, visible: true },
{ key: 3, label: `部门`, visible: true }, { key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true }, { key: 4, label: `手机号码`, visible: true },
@ -425,8 +455,8 @@ export default {
// //
rules: { rules: {
userName: [ userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" }, { required: true, message: "登陆账号不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' } { min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur' }
], ],
nickName: [ nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" } { required: true, message: "用户昵称不能为空", trigger: "blur" }

@ -12,7 +12,7 @@
</div> </div>
<ul class="list-group list-group-striped"> <ul class="list-group list-group-striped">
<li class="list-group-item"> <li class="list-group-item">
<svg-icon icon-class="user" />用户名称 <svg-icon icon-class="user" />登陆账号
<div class="pull-right">{{ user.userName }}</div> <div class="pull-right">{{ user.userName }}</div>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">

Loading…
Cancel
Save