修改代理产品权限

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")
public AjaxResult changeUserId(@RequestBody DfBizClue dfBizClue) {
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.utils.SecurityUtils;
import com.bs.df.domain.DfProductPoster;
import com.bs.df.mapper.DfBrokerMapper;
import com.bs.df.utils.HtmlUtils;
import com.bs.system.service.ISysUserService;
import io.swagger.annotations.Api;
@ -50,6 +51,9 @@ public class DfBrokerController extends BaseController {
private IDfBrokerService dfBrokerService;
@Resource
private ISysUserService sysUserService;
@Resource
private DfBrokerMapper dfBrokerMapper;
/**
*
*/
@ -221,6 +225,9 @@ public class DfBrokerController extends BaseController {
@Log(title = "代理商经纪修改", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody DfBroker dfBroker) {
if (null == dfBroker.getParentId()) {
dfBrokerMapper.updateByNull(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.DfProductPoster;
import com.bs.df.utils.HtmlUtils;
import com.bs.system.mapper.SysUserMapper;
import com.bs.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -56,6 +57,8 @@ public class DfProductArticleController extends BaseController {
private ICmAttachService cmAttachService;
@Resource
private ISysUserService userService;
@Autowired
private SysUserMapper sysUserMapper;
/**
*
*/
@ -63,6 +66,11 @@ public class DfProductArticleController extends BaseController {
@GetMapping("/pageList")
public TableDataInfo pageList(DfProductArticle dfProductArticle) {
startPage();
SysUser sysUser = sysUserMapper.selectById(getUserId());
String reviewStatus = sysUser.getReviewStatus();
if ("1".equals(reviewStatus)) {
return null;
}
LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper();
boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId());
if (!admin) {

@ -75,10 +75,33 @@ public class DfProductInfoController extends BaseController {
@GetMapping("/pageList")
public TableDataInfo pageList(DfProductInfo dfProductInfo) {
startPage();
SysUser sysUser = sysUserMapper.selectById(getUserId());
String reviewStatus = sysUser.getReviewStatus();
if ("1".equals(reviewStatus)) {
return null;
}
LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper();
String brokerIds = dfProductInfo.getBrokerIds();
if ("1".equals(dfProductInfo.getSelectByBroker())) {
queryWrapper.inSql(DfProductInfo::getId,"select product_id from df_broker_product where broker_id in (" + brokerIds + ") and del_flag = '0' and staus = '1'");
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'");
}
}
if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
List<Long> productIdsByBrokerId = dfBrokerService.getProductIdsByBrokerId();
@ -117,10 +140,14 @@ public class DfProductInfoController extends BaseController {
for (DfArea city : allCities) {
cityMap.put(city.getAreaId(), city.getName());
}
Map<Long, String> brokerProductMap = new HashMap<>();
DfBroker byId = null;
SysUser userInfo = null;
if ("1".equals(dfProductInfo.getSelectByBroker())) {
byId = dfBrokerService.getById(brokerIds);
if (Validator.isNotEmpty(dfProductInfo.getUserId())) {
userInfo = sysUserMapper.selectById(dfProductInfo.getUserId());
} else {
byId = dfBrokerService.getById(brokerIds);
}
}
for (DfProductInfo productInfo : list) {
productInfo.setInterestRate(productInfo.getInterestRateBegin() + "%-" + productInfo.getInterestRateEnd() + "%");
@ -142,8 +169,17 @@ public class DfProductInfoController extends BaseController {
productInfo.setBusinessCity(translatedCities.toString());
}
if ("1".equals(dfProductInfo.getSelectByBroker())) {
productInfo.setBrokerName(byId.getBrokerName());
// productInfo.setBrokerName(brokerProductMap.get(productInfo.getId()));
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());
}
}
}
return getDataTable(list);
@ -166,6 +202,27 @@ public class DfProductInfoController extends BaseController {
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
@ -183,7 +240,8 @@ public class DfProductInfoController extends BaseController {
List<Long> productIds = listBrokerProduct.stream()
.map(DfBrokerProduct::getProductId)
.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) {
productIds.add(0L);
}
@ -363,24 +421,46 @@ public class DfProductInfoController extends BaseController {
@PutMapping(value = "/getInfoByBroker")
@Anonymous
public AjaxResult getInfoByBroker(@RequestBody DfProductInfo dfProductInfo) {
DfProductInfo byId = dfProductInfoService.getById(dfProductInfo.getId());
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.eq(DfBrokerProduct::getBrokerId, dfProductInfo.getBrokerId())
.eq(DfBrokerProduct::getProductId, dfProductInfo.getId()));
if (list.size() > 0 && list != null) {
byId.setBrokerId(list.get(0).getBrokerId());
}
String businessCity = byId.getBusinessCity();
if (Validator.isEmpty(businessCity)) {
if(Validator.isNotEmpty(dfProductInfo.getBrokerId())) {
DfProductInfo byId = dfProductInfoService.getById(dfProductInfo.getId());
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.eq(DfBrokerProduct::getBrokerId, dfProductInfo.getBrokerId())
.eq(DfBrokerProduct::getProductId, dfProductInfo.getId()));
if (list.size() > 0 && list != null) {
byId.setBrokerId(list.get(0).getBrokerId());
}
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);
} 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);
}
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,17 +629,22 @@ public class DfProductInfoController extends BaseController {
public AjaxResult removeByBroker(@RequestBody DfProductInfo dfProductInfo) {
Long[] ids = dfProductInfo.getIds();
Long brokerId = dfProductInfo.getBrokerId();
// List<DfBroker> list = dfBrokerService.list(new LambdaQueryWrapper<DfBroker>().eq(DfBroker::getParentId, brokerId));
List<DfBroker> allSubordinates = dfBrokerService.findAllSubordinates(brokerId);
// List<DfBroker> allSubordinates = findAllSubordinates(brokerId);
List<Long> brokerIds = allSubordinates.stream()
.map(DfBroker::getId)
.collect(Collectors.toList());
brokerIds.add(brokerId);
boolean remove = dfBrokerProductService.remove(new LambdaQueryWrapper<DfBrokerProduct>()
.in(DfBrokerProduct::getProductId, ids)
.in(DfBrokerProduct::getBrokerId, brokerIds));
return toAjax(remove);
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<Long> brokerIds = allSubordinates.stream()
.map(DfBroker::getId)
.collect(Collectors.toList());
brokerIds.add(brokerId);
boolean remove = dfBrokerProductService.remove(new LambdaQueryWrapper<DfBrokerProduct>()
.in(DfBrokerProduct::getProductId, ids)
.in(DfBrokerProduct::getBrokerId, brokerIds));
return toAjax(remove);
}
}

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

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

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

@ -180,6 +180,10 @@ public class DfProductInfo extends BaseEntity{
@TableField(exist = false)
private Long brokerId;
@TableField(exist = false)
private String userId;
@TableField(exist = false)
private Long[] ids;
@ -188,4 +192,7 @@ public class DfProductInfo extends BaseEntity{
@TableField(exist = false)
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.df.domain.DfBroker;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
@ -11,4 +12,5 @@ import com.bs.df.domain.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();
/**
* id
* @return
*/
public List<Long> filterByUserId(Long userId);
/**
* id
* @return

@ -72,7 +72,9 @@ public class DfBrokerServiceImpl extends MPJBaseServiceImpl<DfBrokerMapper, DfB
List<Long> longs = filterByUser();
List<DfBrokerProduct> list = dfBrokerProductService.list(new LambdaQueryWrapper<DfBrokerProduct>()
.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());
}

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

@ -1,5 +1,20 @@
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.web.bind.annotation.PostMapping;
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.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
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")
public AjaxResult register(@RequestBody RegisterBody user)
{
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
{
return error("当前系统没有开启注册功能!");
}
// if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
// {
// return error("当前系统没有开启注册功能!");
// }
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);
}
@GetMapping("/listUserAll")
public AjaxResult listUserAll(SysUser user) {
List<SysUser> list = userService.selectUserList(user);
return success(list);
}
@GetMapping("/listByType")
public TableDataInfo listByType(SysUser user) {
if (!"1".equals(user.getSelectAll())) {
@ -355,6 +361,18 @@ public class SysUserController extends BaseController {
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());
}
//真实姓名
if(Validator.isNotEmpty(sysUser.getRealName())){
queryWrapper.like(SysUser::getRealName,sysUser.getRealName());
}
//用户性别0男 1女 2未知
if(Validator.isNotEmpty(sysUser.getSex())){
queryWrapper.eq(SysUser::getSex,sysUser.getSex());

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

@ -4,4 +4,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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>

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

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

@ -1,8 +1,11 @@
package com.bs.common.core.domain.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.bs.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
/**
*
*
@ -15,6 +18,12 @@ public class LoginBody
*/
private String username;
/** 手机号码 */
private String phonenumber;
/** 推荐注册人 */
private String shareUser;
/**
*
*/
@ -70,7 +79,6 @@ public class LoginBody
private String fromType;
private String shareUser;
private String businessLinks;
@ -235,5 +243,9 @@ public class LoginBody
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();
SysUser sysUser = new SysUser();
sysUser.setUserName(username);
sysUser.setReviewStatus("1");
// 验证码开关
boolean captchaEnabled = configService.selectCaptchaEnabled();
if (captchaEnabled)
{
validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
}
if (StringUtils.isEmpty(username))
{
msg = "用户名不能为空";
@ -75,6 +74,17 @@ public class SysRegisterService
}
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.setPassword(SecurityUtils.encryptPassword(password));
boolean regFlag = userService.registerUser(sysUser);

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

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.bs.common.core.domain.entity.SysUser;
import com.bs.common.mybatis.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -42,9 +43,9 @@ public interface SysUserMapper extends BaseMapperX<SysUser> {
/**
*
*
*
* @param userName
* @param userName
* @return
*/
public SysUser checkUserNameUnique(String userName);
@ -67,4 +68,7 @@ public interface SysUserMapper extends BaseMapperX<SysUser> {
* @return
*/
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);
/**
*
*
*
* @param userName
* @param userName
* @param user
* @return 线
*/
public SysUserOnline selectOnlineByUserName(String userName, LoginUser user);
/**
* /
* /
*
* @param ipaddr
* @param userName
* @param userName
* @param user
* @return 线
*/

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

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

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

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

@ -178,8 +178,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate()
)
</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})
<update id="updateUser" parameterType="SysUser">
</insert>
<update id="updateUser" parameterType="SysUser">
update sys_user
<set>
<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>

@ -18,6 +18,15 @@ export function listInfo(query) {
})
}
// 根据userId查询产品信息列表
export function listByUserId(query) {
return request({
url: '/product/info/listByUserId',
method: 'get',
params: query
})
}
// 根据代理商经纪id查询产品信息列表
export function listByBroker(query) {
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) {

@ -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) {
return request({
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() {
return request({

@ -1,14 +1,22 @@
<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="userName">
<el-form-item label="登陆账号" prop="userName">
<el-input
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
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
<el-input
v-model="queryParams.phonenumber"
@ -111,12 +119,13 @@
<el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange">
<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"/>
<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"
: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="手机号码" key="phonenumber" prop="phonenumber" v-if="columns[4].visible"
width="120"/>
@ -132,6 +141,16 @@
></el-switch>
</template>
</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">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
@ -210,29 +229,34 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" :disabled="readonly"/>
<el-form-item label="真实姓名" prop="realName">
<el-input v-model="form.realName" placeholder="请输入真实姓名" maxlength="30" :disabled="readonly"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" :disabled="readonly"/>
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" :disabled="readonly"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="title == '添加用户'" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" :disabled="readonly"/>
<el-form-item v-if="title == '添加用户'" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password :disabled="readonly"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="title == '添加用户'" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password :disabled="readonly"/>
<el-form-item v-if="title == '添加用户'" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30" :disabled="readonly"/>
</el-form-item>
</el-col>
</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-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%" :disabled="readonly">
@ -245,20 +269,20 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status" :disabled="readonly">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择岗位" style="width: 100%" :disabled="readonly">
@ -272,43 +296,45 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="角色" prop="roleIds">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%" :disabled="readonly">
<el-option
v-for="item in roleOptions"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
:disabled="item.status == 1"
v-for="item in roleOptions"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" :disabled="readonly"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="公司" prop="company">
<el-input v-model="form.company" placeholder="请输入公司" :disabled="readonly"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" :disabled="readonly"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<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.sys_normal_disable"
v-for="dict in dict.type.review_status"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
@ -352,6 +378,7 @@ import {
resetUserPwd,
changeUserStatus,
deptTreeSelect,
changeUserReviewStatus,
} from "@/api/system/user";
import {getToken} from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
@ -361,7 +388,7 @@ import {getMoment} from "@/api/moment/moment";
export default {
name: "BrokerUser",
// mixins: [AutoTableHeight],
dicts: ['sys_normal_disable', 'sys_user_sex'],
dicts: ['sys_normal_disable', 'sys_user_sex', 'review_status'],
components: {Treeselect},
props: {
rowData: {
@ -440,7 +467,7 @@ export default {
//
columns: [
{key: 0, label: `用户编号`, visible: true},
{key: 1, label: `用户名称`, visible: true},
{key: 1, label: `登陆账号`, visible: true},
{key: 2, label: `用户昵称`, visible: true},
{key: 3, label: `部门`, visible: true},
{key: 4, label: `手机号码`, visible: true},
@ -453,8 +480,8 @@ export default {
{required: true, message: "角色不能为空", trigger: "blur"}
],
userName: [
{required: true, message: "用户名称不能为空", trigger: "blur"},
{min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur'}
{required: true, message: "登陆账号不能为空", trigger: "blur"},
{min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur'}
],
nickName: [
{required: true, message: "用户昵称不能为空", trigger: "blur"}
@ -578,6 +605,17 @@ export default {
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() {
this.open = false;
@ -595,6 +633,7 @@ export default {
email: undefined,
sex: undefined,
status: "0",
reviewStatus: "0",
remark: undefined,
postIds: [],
roleIds: []

@ -225,10 +225,6 @@
>{{ dict.label }}
</el-radio>
</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-col>
</el-row>
@ -393,6 +389,7 @@ export default {
this.loading = false;
});
listBrokerByTree().then(response => {
response.data.unshift({ id: null, brokerName: '无' });
this.brokerOptions = response.data;
});
// listBroker().then(response => {

@ -63,23 +63,11 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
:disabled="!brokerId"
:disabled="!brokerId && !userId"
v-hasPermi="['product:info:add']"
>选择
</el-button>
</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-button
type="danger"
@ -92,23 +80,12 @@
>移除
</el-button>
</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>
</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" 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="simpleName" sortable='custom' width="100"/>
<el-table-column label="产品类型" prop="productType" sortable='custom' width="100">
@ -153,14 +130,14 @@
@click="handleRead(scope.row)"
>查看
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['product:info:edit']"
>修改
</el-button>
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['product:info:edit']"-->
<!-- >修改-->
<!-- </el-button>-->
<el-button
size="mini"
type="text"
@ -179,8 +156,6 @@
: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>
@ -328,6 +303,46 @@
<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">
@ -385,15 +400,20 @@ import {
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",
@ -408,10 +428,14 @@ export default {
},
data() {
return {
openByAddAndUser: false,
readonly:false,
// isReadOnly: false,
brokerList: [],
userInfoList: [],
infoListAll: [],
brokerId: null,
userId: null,
//
dateRange: [],
rowDataNew: {},
@ -443,6 +467,7 @@ export default {
title: "",
//
open: false,
openByAdd: false,
//
queryParams: {
pageNum: 1,
@ -468,6 +493,9 @@ export default {
id: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
ids: [
{required: true, message: "产品名称不能为空", trigger: "blur"}
],
simpleName: [
{required: true, message: "产品简称不能为空", trigger: "blur"}
],
@ -514,8 +542,9 @@ export default {
// rowData row
this.rowDataNew = newVal;
this.brokerId = this.rowDataNew.id;
// const allIds = this.getAllIds(this.rowDataNew);
this.userId = this.rowDataNew.userId;
this.queryParams.brokerIds = this.brokerId;
this.queryParams.userId = this.rowDataNew.userId;
this.getList();
},
},
@ -554,6 +583,14 @@ export default {
this.getList();
});
},
getUserInfoList() {
var params = {
userType:"jj"
}
listUserAll(params).then(response => {
this.userInfoList = response.data;
});
},
getAllInfo(id) {
var params = {
selectByBroker: "1",
@ -564,6 +601,17 @@ export default {
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);
@ -668,6 +716,7 @@ export default {
//
cancel() {
this.open = false;
this.openByAdd = false;
this.reset();
},
//
@ -687,6 +736,7 @@ export default {
listEnd: null,
status: null,
remark: null,
userId: null,
maxAmountBegin: null,
maxAmountEnd: null,
};
@ -721,13 +771,24 @@ export default {
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.getAllInfo();
this.getbrokerList();
this.readonly = false;
this.form.brokerId = this.brokerId;
this.open = true;
// this.isReadOnly = false;
this.title = "添加产品信息";
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();
@ -739,7 +800,11 @@ export default {
};
getInfoByBroker(param).then(response => {
this.form = response.data;
this.getAllInfo(id);
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id);
}
this.open = true;
this.readonly = true;
this.title = "查看产品信息";
@ -753,11 +818,16 @@ export default {
const id = row.id || this.ids;
var param = {
id: id,
brokerId: this.brokerId
brokerId: this.brokerId,
userId: this.userId
};
getInfoByBroker(param).then(response => {
this.form = response.data;
this.getAllInfo(id);
if (this.userId) {
this.getAllInfoByUser(id);
} else {
this.getAllInfo(id);
}
this.open = true;
this.readonly = false;
this.title = "修改产品信息";
@ -779,6 +849,23 @@ export default {
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);
@ -794,7 +881,8 @@ export default {
const names = row.id || this.names;
var param = {
ids: ids,
brokerId: this.brokerId
brokerId: this.brokerId,
userId: this.userId
};
this.$modal.confirm('是否确认移除产品信息为"' + names + '"的数据项?').then(function () {
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>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</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"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
@ -349,6 +349,9 @@ export default {
this.getList();
},
methods: {
clearSelection() {
this.resetQuery();
},
tenantIdnormalizer(node, instanceId) {
if (node.children && !node.children.length) {
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>
<my-page :left-style="{width: '20vw'}">
<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>
<BrokerProduct ref="brokerUser" :extraHeight="100" style="height: 97%;margin-left: 8px;"
:rowData="rowData"></BrokerProduct>
<BrokerProduct v-if="!isUser" ref="brokerUser" :extraHeight="100" style="height: 97%;margin-left: 8px;"
: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>
</template>
<script>
import BrokerProduct from './components/BrokerProduct.vue';
import BrokerProductTwo from './components/BrokerProductTwo.vue';
import BrokerProductByUserId from './components/BrokerProductByUserId';
import DfBroker from './components/DfBroker.vue';
import DfBrokerUser from './components/DfBrokerUser.vue';
export default {
name: "Product",
components: {
BrokerProduct,
BrokerProductTwo,
BrokerProductByUserId,
DfBrokerUser,
DfBroker,
},
data() {
return {
isUser: false,
activeName: '1',
rowData: null
};
},
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) {
this.rowData = null;
this.rowData = row;
if (this.rowData.userId) {
this.isUser = true;
} else {
this.isUser = false;
}
}
}
};

@ -7,10 +7,10 @@
append-to-body
>
<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
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入登陆账号"
clearable
@keyup.enter.native="handleQuery"
/>
@ -35,7 +35,7 @@
<i v-if="scope.row.userId === selectionUserId" style="color: #1890ff;" class="el-icon-circle-check"></i>
</template>
</el-table-column>
<el-table-column label="用户名称" key="userName" prop="userName"
<el-table-column label="登陆账号" key="userName" prop="userName"
:show-overflow-tooltip="true" />
<el-table-column label="所属代理商" prop="deptName" :show-overflow-tooltip="true" width="120"/>
<el-table-column label="用户昵称" key="nickName" prop="nickName"
@ -55,7 +55,7 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</template>
<script>
@ -124,7 +124,7 @@ export default {
},
// handleSelectionChange(sel) {
// // this.selection = sel || [];
// },
// handleSelect(row) {
// this.selection.forEach(val => {
@ -143,7 +143,7 @@ export default {
// // this.$nextTick(() => {
// // this.selection = [row];
// // })
// });
// });
// },
// handleSelectAll() {
@ -182,4 +182,4 @@ export default {
<style>
</style>
</style>

@ -1,10 +1,18 @@
<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="userName">
<el-form-item label="登陆账号" prop="userName">
<el-input
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
@keyup.enter.native="handleQuery"
/>
@ -48,16 +56,17 @@
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="userList" @sort-change="handleSortChange" :height="tableHeight - 150"
@selection-change="handleSelectionChange">
<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"/>
<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="nickName" prop="nickName" v-if="columns[2].visible"
: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="city" />
<el-table-column label="注册时间" prop="registrationTime" width="100" >
@ -138,8 +147,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" :disabled="readonly"/>
<el-form-item v-if="form.userId == undefined" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30" :disabled="readonly"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -356,7 +365,7 @@ export default {
//
columns: [
{key: 0, label: `用户编号`, visible: true},
{key: 1, label: `用户名称`, visible: true},
{key: 1, label: `登陆账号`, visible: true},
{key: 2, label: `用户昵称`, visible: true},
{key: 3, label: `部门`, visible: true},
{key: 4, label: `手机号码`, visible: true},
@ -366,8 +375,8 @@ export default {
//
rules: {
userName: [
{required: true, message: "用户名称不能为空", trigger: "blur"},
{min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur'}
{required: true, message: "登陆账号不能为空", trigger: "blur"},
{min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur'}
],
nickName: [
{required: true, message: "用户昵称不能为空", trigger: "blur"}

@ -10,10 +10,10 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户名称" prop="userName">
<el-form-item label="登陆账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入登陆账号"
clearable
style="width: 240px;"
@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-column type="selection" width="55" align="center" />
<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="loginLocation" :show-overflow-tooltip="true" />
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />

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

@ -1,10 +1,10 @@
<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="userName">
<el-form-item label="登陆账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入登陆账号"
clearable
@keyup.enter.native="handleQuery"
/>
@ -112,7 +112,7 @@
:highlight-current-row="true" @row-click="handleRowClick"
@selection-change="handleSelectionChange">
<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"/>
<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"/>
@ -212,8 +212,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30"/>
<el-form-item v-if="form.userId == undefined" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -392,7 +392,7 @@ export default {
//
columns: [
{key: 0, label: `用户编号`, visible: true},
{key: 1, label: `用户名称`, visible: true},
{key: 1, label: `登陆账号`, visible: true},
{key: 2, label: `用户昵称`, visible: true},
{key: 3, label: `部门`, visible: true},
{key: 4, label: `手机号码`, visible: true},
@ -405,8 +405,8 @@ export default {
// {required: true, message: "", trigger: "blur"}
// ],
userName: [
{required: true, message: "用户名称不能为空", trigger: "blur"},
{min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur'}
{required: true, message: "登陆账号不能为空", trigger: "blur"},
{min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur'}
],
nickName: [
{required: true, message: "用户昵称不能为空", trigger: "blur"}

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

@ -1,10 +1,10 @@
<template>
<div class="app-container">
<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
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入登陆账号"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
@ -61,7 +61,7 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<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="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
@ -196,4 +196,4 @@ export default {
}
}
};
</script>
</script>

@ -2,10 +2,10 @@
<!-- 授权用户 -->
<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-item label="用户名称" prop="userName">
<el-form-item label="登陆账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入登陆账号"
clearable
@keyup.enter.native="handleQuery"
/>
@ -26,7 +26,7 @@
<el-row>
<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 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="email" :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-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
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
style="width: 240px"
@keyup.enter.native="handleQuery"
@ -139,7 +148,8 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<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="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="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" />
@ -231,8 +241,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
<el-form-item v-if="form.userId == undefined" label="登陆账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入登陆账号" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -294,6 +304,25 @@
</el-form-item>
</el-col>
</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-col :span="24">
<el-form-item label="备注">
@ -348,7 +377,7 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "User",
dicts: ['sys_normal_disable', 'sys_user_sex'],
dicts: ['sys_normal_disable', 'sys_user_sex', 'review_status'],
components: { Treeselect },
data() {
return {
@ -408,6 +437,7 @@ export default {
pageNum: 1,
pageSize: 10,
userName: undefined,
realName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
@ -415,7 +445,7 @@ export default {
//
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 1, label: `登陆账号`, visible: true },
{ key: 2, label: `用户昵称`, visible: true },
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
@ -425,8 +455,8 @@ export default {
//
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
{ required: true, message: "登陆账号不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '登陆账号长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }

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

Loading…
Cancel
Save