JayChou 2 weeks ago
commit 638495607d
  1. 5
      jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  2. 63
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expert/controller/ExpertController.java
  3. 6
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expert/entity/Expert.java
  4. 5
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expert/mapper/ExpertMapper.java
  5. 2
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expert/service/IExpertService.java
  6. 5
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expert/service/impl/ExpertServiceImpl.java
  7. 9
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expproject/controller/ExpprojectController.java
  8. 28
      jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
  9. 1
      jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
  10. 47
      jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
  11. 8
      jeecgboot-vue3/src/api/common/api.ts
  12. 207
      jeecgboot-vue3/src/components/Form/src/jeecg/components/JSelectDept4FaRen.vue
  13. 131
      jeecgboot-vue3/src/components/Form/src/jeecg/components/modal/DeptSelectModal4FaRen.vue
  14. 5
      jeecgboot-vue3/src/views/expert/admin/Expert.api.ts
  15. 32
      jeecgboot-vue3/src/views/expert/admin/ExpertList.vue
  16. 188
      jeecgboot-vue3/src/views/expert/admin/components/ExpertForm1.vue
  17. 78
      jeecgboot-vue3/src/views/expert/admin/components/ExpertModal1.vue
  18. 7
      jeecgboot-vue3/src/views/expert/county/Expert.api.ts
  19. 19
      jeecgboot-vue3/src/views/expert/county/ExpertList.vue
  20. 182
      jeecgboot-vue3/src/views/expert/county/components/ExpertForm1.vue
  21. 77
      jeecgboot-vue3/src/views/expert/county/components/ExpertModal1.vue
  22. 2
      jeecgboot-vue3/src/views/expert/firm/components/ExpertForm.vue
  23. 4
      jeecgboot-vue3/src/views/expert/self/components/ExpertForm.vue
  24. 3
      jeecgboot-vue3/src/views/system/loginmini/MiniRegister4faren.vue

@ -185,7 +185,10 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/sys/user/userRegister4Faren", "anon"); //法人注册接口
filterChainDefinitionMap.put("/sys/user/userRegister4Shenbaoren", "anon");//申报人注册
filterChainDefinitionMap.put("/sys/sysDepart/queryDepartTreeSync", "anon");//申报人用户注册
filterChainDefinitionMap.put("/sys/sysDepart/queryDepartTreeSync", "anon");//申报人注册时,选择部门列表
filterChainDefinitionMap.put("/sys/sysDepart/queryDepartTreeSync4FaRen", "anon");//法人注册时,选择部门列表

@ -193,6 +193,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
String depid = expertService.getdeps(sysUser.getId());
SysDepart sysDepart = sysDepartService.getById(depid);
experttemp.setRealname(sysUser.getRealname());
experttemp.setSepsd(sysUser.getPassword());
experttemp.setWorkon(sysUser.getWorkNo());
experttemp.setSex(sysUser.getSex());
experttemp.setTopPic(sysUser.getAvatar());
@ -394,7 +395,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
expert.setCompopen("2");
//开始添加到用户表
SysUser user = new SysUser();
/* SysUser user = new SysUser();
user.setAvatar(expert.getTopPic());
user.setSex(expert.getSex());
user.setRealname(expert.getRealname());
@ -409,7 +410,8 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
user.setPassword(passwordEncode);
user.setStatus(1);
user.setDelFlag(CommonConstant.DEL_FLAG_0);
sysUserService.saveUser(user, "1843478958968647681", expert.getSsdep(), "");
sysUserService.saveUser(user, "1843478958968647681", expert.getSsdep(), "");*/
expertService.updateuser(expert.getTopPic(),expert.getSex(),expert.getSeusername());
expertService.save(expert);
//
return Result.OK("添加成功!");
@ -438,7 +440,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
public Result<String> edit(@RequestBody Expert expert) {
expertService.updateById(expert);
//开始添加到用户表
SysUser user = new SysUser();
/*SysUser user = new SysUser();
user.setAvatar(expert.getTopPic());
user.setSex(expert.getSex());
user.setRealname(expert.getRealname());
@ -453,7 +455,8 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
user.setPassword(passwordEncode);
user.setStatus(1);
user.setDelFlag(CommonConstant.DEL_FLAG_0);
sysUserService.editUser(user,"1843478958968647681", expert.getSsdep(), "", "");
sysUserService.editUser(user,"1843478958968647681", expert.getSsdep(), "", "");*/
expertService.updateuser(expert.getTopPic(),expert.getSex(),expert.getSeusername());
return Result.OK("编辑成功!");
}
@ -472,23 +475,6 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
expert.setErrinfo("");
}
expertService.updateById(expert);
//开始添加到用户表
SysUser user = new SysUser();
user.setAvatar(expert.getTopPic());
user.setSex(expert.getSex());
user.setRealname(expert.getRealname());
user.setUsername(expert.getSeusername());
user.setWorkNo(expert.getWorkon());
user.setEmail(expert.getEmails());
user.setPhone(expert.getPhone());
user.setCreateTime(new Date());//设置创建时间
String salt = oConvertUtils.randomGen(8);
user.setSalt(salt);
String passwordEncode = PasswordUtil.encrypt(expert.getSeusername(), expert.getPsd(), salt);
user.setPassword(passwordEncode);
user.setStatus(1);
user.setDelFlag(CommonConstant.DEL_FLAG_0);
sysUserService.editUser(user,"1843478958968647681", expert.getSsdep(), "", "");
return Result.OK("编辑成功!");
}
@ -507,7 +493,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
expert.setCompopen("1");
expertService.updateById(expert);
//开始添加到用户表
SysUser user = new SysUser();
/* SysUser user = new SysUser();
user.setAvatar(expert.getTopPic());
user.setSex(expert.getSex());
user.setRealname(expert.getRealname());
@ -522,7 +508,8 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
user.setPassword(passwordEncode);
user.setStatus(1);
user.setDelFlag(CommonConstant.DEL_FLAG_0);
sysUserService.editUser(user,"1843478958968647681", expert.getSsdep(), "", "");
sysUserService.editUser(user,"1843478958968647681", expert.getSsdep(), "", "");*/
expertService.updateuser(expert.getTopPic(),expert.getSex(),expert.getSeusername());
return Result.OK("编辑成功!");
}
@ -625,7 +612,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
public Result<String> handleupupfirm(@RequestParam(name="id",required=true) String id) {
String str ="";
Expert expert =expertService.getById(id);
if (expert.getCompopen().equals("1")) {
if (expert.getCompopen().equals("1") ||expert.getCompopen().equals("3")) {
//修改提交审核状态
expertService.handleupupfirm(id);
str ="通过审核";
@ -645,7 +632,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
if (expert.getCompopen().equals("1")) {
//修改提交审核状态
expertService.handlebackbackfirm(id);
str ="驳回审核!请到编辑页面确定问题数据并填写驳回原因";
str ="驳回审核!";
} else if (expert.getCompopen().equals("3") || expert.getCompopen().equals("2") ) {
str ="已驳回或者是已通过审核";
}
@ -655,11 +642,11 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
//这个是专家的上级管理员审核
@AutoLog(value = "专家管理-这个是上级管理员的通过审核")
@ApiOperation(value="专家管理-这个是上级管理员的通过审核", notes="专家管理-这个是上级管理员的通过审核")
@GetMapping(value = "handleupcount")
@GetMapping(value = "/handleupcount")
public Result<String> handleupcount(@RequestParam(name="id",required=true) String id) {
String str ="";
Expert expert =expertService.getById(id);
if (expert.getCompopen().equals("2") && expert.getAdminopen().equals("1")) {
if ((expert.getCompopen().equals("2") && expert.getAdminopen().equals("1")) || (expert.getCompopen().equals("2") && expert.getAdminopen().equals("3"))) {
//修改提交审核状态
expertService.handleupcount(id);
str ="审核通过";
@ -871,7 +858,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
@ApiOperation(value="管理员专家数据---专家待提交/未审核", notes="管理员专家数据---专家待提交/未审核")
@GetMapping(value = "/expdatawtjsh")
public Result<Integer> expdatawtjsh() {
List<Expert> expertList = expertService.query().eq("adminopen","1").or().eq("compopen","1").or().eq("isdone","N").list();
List<Expert> expertList = expertService.query().eq("adminopen","1").or().eq("compopen","1").or().eq("adminopen","3").or().eq("compopen","3").or().eq("isdone","N").list();
return Result.OK(expertList.size());
}
@ -931,4 +918,24 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
}
@AutoLog(value = "专家管理-市局/县区管理员驳回")
@ApiOperation(value="专家管理-市局/县区管理员驳回", notes="专家管理-市局/县区管理员驳回")
@RequestMapping(value = "/saveOrUpdateadminbh", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> saveOrUpdateadminbh(@RequestBody Expert expert) {
expert.setAdminopen("3");
expert.setCompopen("3");
expert.setIsdone("N");
expertService.updateById(expert);
return Result.OK("驳回成功,已责令专家重新编辑!");
}
@AutoLog(value = "专家管理-公司驳回")
@ApiOperation(value="专家管理-公司驳回", notes="专家管理-公司驳回")
@RequestMapping(value = "/saveOrUpdatefimebh", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> saveOrUpdatefimebh(@RequestBody Expert expert) {
expert.setCompopen("3");
expertService.updateById(expert);
return Result.OK("编辑成功!");
}
}

@ -102,6 +102,7 @@ public class Expert implements Serializable {
private String phone;
@TableField(exist = false)
private String emails;
@Dict(dicCode = "sex")
@TableField(exist = false)
private Integer sex;
@TableField(exist = false)
@ -140,4 +141,9 @@ public class Expert implements Serializable {
@ApiModelProperty(value = "职称")
private java.lang.String zc;
/**驳回原因*/
@Excel(name = "驳回原因", width = 15)
@ApiModelProperty(value = "驳回原因")
private java.lang.String backinfo;
}

@ -44,7 +44,7 @@ public interface ExpertMapper extends BaseMapper<Expert> {
@Select("SELECT user_id FROM sys_user_role WHERE role_id =#{number}")
List<String> userbyrole(String number);
@Update("UPDATE expert SET isdone = 'Y' WHERE id = #{id}")
@Update("UPDATE expert SET isdone = 'Y' , backinfo = '' WHERE id = #{id}")
void updatetj(String id);
@Update("UPDATE expert SET compopen = '2' WHERE id = #{id}")
@ -58,4 +58,7 @@ public interface ExpertMapper extends BaseMapper<Expert> {
@Update("UPDATE expert SET adminopen = '3' , isdone = 'N' WHERE id = #{id}")
void handlebackcount(String id);
@Update("UPDATE sys_user SET sex = #{sex} , avatar = #{topPic} WHERE username = #{seusername}")
void updateuser(String topPic, Integer sex, String seusername);
}

@ -43,4 +43,6 @@ public interface IExpertService extends IService<Expert> {
void handleupcount(String id);
void handlebackcount(String id);
void updateuser(String topPic, Integer sex, String seusername);
}

@ -107,4 +107,9 @@ public class ExpertServiceImpl extends ServiceImpl<ExpertMapper, Expert> impleme
public void handlebackcount(String id) {
expertMapper.handlebackcount(id);
}
@Override
public void updateuser(String topPic, Integer sex, String seusername) {
expertMapper.updateuser(topPic,sex,seusername);
}
}

@ -172,7 +172,14 @@ public class ExpprojectController {
if(expprojectEntity==null) {
return Result.error("未找到对应数据");
}
if (expproject.getNeedexp()>=expprojectPage.getExpandproList().size()) {
int a=0;
if ( expprojectPage.getExpandproList() != null && !expprojectPage.getExpandproList().isEmpty()) {
a=expprojectPage.getExpandproList().size();
}else {
a=0;
}
if (expproject.getNeedexp()>=a) {
expprojectService.updateMain(expproject, expprojectPage.getExpandproList());
return Result.OK("编辑成功!");
}else {

@ -44,6 +44,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
@ -170,6 +171,33 @@ public class SysDepartController {
return result;
}
/**
* @description: 法人注册时只显示市和县区科技局不显示下属单位
* @param: [parentId, ids, primaryKey]
* @return: org.jeecg.common.api.vo.Result<java.util.List<org.jeecg.modules.system.model.SysDepartTreeModel>>
* @author: z.h.c
* @date: 24/11/9 16:07
*/
@RequestMapping(value = "/queryDepartTreeSync4FaRen", method = RequestMethod.GET)
public Result<List<SysDepartTreeModel>> queryDepartTreeSync4FaRen(@RequestParam(name = "pid", required = false) String parentId,
@RequestParam(name = "ids", required = false) String ids,
@RequestParam(name = "primaryKey", required = false) String primaryKey) {
Result<List<SysDepartTreeModel>> result = new Result<>();
try {
// parentId = "1839495887972130817";
List<SysDepart> sysDeparts = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getParentId, "1839495887972130817"));
ids = Optional.ofNullable(sysDeparts).orElse(new LinkedList<>()).stream().map(e -> e.getId()).collect(Collectors.joining(","));
List<SysDepartTreeModel> list = sysDepartService.queryTreeListByPid4FaRen(parentId, ids, primaryKey);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(), e);
result.setSuccess(false);
result.setMessage("查询失败");
}
return result;
}
/**
* 获取某个部门的所有父级部门的ID
*

@ -148,6 +148,7 @@ public interface ISysDepartService extends IService<SysDepart>{
* @return
*/
List<SysDepartTreeModel> queryTreeListByPid(String parentId,String ids, String primaryKey);
List<SysDepartTreeModel> queryTreeListByPid4FaRen(String parentId,String ids, String primaryKey);
/**
* 获取某个部门的所有父级部门的ID

@ -645,6 +645,53 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
return records;
}
public List<SysDepartTreeModel> queryTreeListByPid4FaRen(String parentId,String ids, String primaryKey) {
/*Consumer<LambdaQueryWrapper<SysDepart>> square = i -> {
if (oConvertUtils.isNotEmpty(ids)) {
if (CommonConstant.DEPART_KEY_ORG_CODE.equals(primaryKey)) {
i.in(SysDepart::getOrgCode, ids.split(SymbolConstant.COMMA));
} else {
i.in(SysDepart::getId, ids.split(SymbolConstant.COMMA));
}
} else {
if(oConvertUtils.isEmpty(parentId)){
i.and(q->q.isNull(true,SysDepart::getParentId).or().eq(true,SysDepart::getParentId,""));
}else{
i.eq(true,SysDepart::getParentId,parentId);
}
}
};*/
LambdaQueryWrapper<SysDepart> lqw=new LambdaQueryWrapper<>();
lqw.in(SysDepart::getId,ids.split(SymbolConstant.COMMA));
// i.in(SysDepart::getOrgCode, ids.split(SymbolConstant.COMMA));
//------------------------------------------------------------------------------------------------
//是否开启系统管理模块的 SASS 控制
/*if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
lqw.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0));
}*/
//------------------------------------------------------------------------------------------------
lqw.eq(true,SysDepart::getDelFlag,CommonConstant.DEL_FLAG_0.toString());
// lqw.func(square);
//update-begin---author:wangshuai ---date:20220527 for:[VUEN-1143]排序不对,vue3和2应该都有问题,应该按照升序排------------
lqw.orderByAsc(SysDepart::getDepartOrder);
//update-end---author:wangshuai ---date:20220527 for:[VUEN-1143]排序不对,vue3和2应该都有问题,应该按照升序排--------------
List<SysDepart> list = list(lqw);
//update-begin---author:wangshuai ---date:20220316 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
//设置用户id,让前台显示
// this.setUserIdsByDepList(list);
//update-end---author:wangshuai ---date:20220316 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
List<SysDepartTreeModel> records = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
SysDepart depart = list.get(i);
SysDepartTreeModel treeModel = new SysDepartTreeModel(depart);
//TODO 异步树加载key拼接__+时间戳,以便于每次展开节点会刷新数据
//treeModel.setKey(treeModel.getKey()+"__"+System.currentTimeMillis());
records.add(treeModel);
}
return records;
}
@Override
public JSONObject queryAllParentIdByDepartId(String departId) {
JSONObject result = new JSONObject();

@ -8,6 +8,7 @@ enum Api {
userList = '/sys/user/list',
roleList = '/sys/role/list',
queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',
queryDepartTreeSync4FaRen = '/sys/sysDepart/queryDepartTreeSync4FaRen',
queryTreeList = '/sys/sysDepart/queryTreeList',
loadTreeData = '/sys/category/loadTreeData',
loadDictItem = '/sys/category/loadDictItem/',
@ -51,6 +52,13 @@ export const getRoleList = (params) => {
export const queryDepartTreeSync = (params?) => {
return defHttp.get({ url: Api.queryDepartTreeSync, params });
};
// add by zhc 11.10
export const queryDepartTreeSync4FaRen = (params?) => {
return defHttp.get({ url: Api.queryDepartTreeSync4FaRen, params });
};
/**
* 获取部门树列表
*/

@ -0,0 +1,207 @@
<!--部门选择组件-->
<template>
<div class="JSelectDept">
<JSelectBiz @change="handleSelectChange" @handleOpen="handleOpen" :loading="loadingEcho" v-bind="attrs"/>
<!-- update-begin--author:liaozhiyang---date:20240515---forQQYUN-9260必填模式下会影响到弹窗内antd组件的样式 -->
<a-form-item>
<DeptSelectModal4FaRen @register="regModal" @getSelectResult="setValue" v-bind="getBindValue" :multiple="multiple" @close="handleClose"/>
</a-form-item>
<!-- update-end--author:liaozhiyang---date:20240515---forQQYUN-9260必填模式下会影响到弹窗内antd组件的样式 -->
</div>
</template>
<script lang="ts">
import DeptSelectModal4FaRen from './modal/DeptSelectModal4FaRen.vue';
import JSelectBiz from './base/JSelectBiz.vue';
import { defineComponent, ref, reactive, watchEffect, watch, provide, unref, toRaw } from 'vue';
import { useModal } from '/@/components/Modal';
import { propTypes } from '/@/utils/propTypes';
import { useRuleFormItem } from '/@/hooks/component/useFormItem';
import { useAttrs } from '/@/hooks/core/useAttrs';
import { SelectValue } from 'ant-design-vue/es/select';
import { cloneDeep } from 'lodash-es';
export default defineComponent({
name: 'JSelectDept4FaRen',
components: {
DeptSelectModal4FaRen,
JSelectBiz,
},
inheritAttrs: false,
props: {
value: propTypes.oneOfType([propTypes.string, propTypes.array]),
// true
multiple: propTypes.bool.def(true),
},
emits: ['options-change', 'change', 'select', 'update:value'],
setup(props, { emit, refs }) {
const emitData = ref<any[]>();
//model
const [regModal, { openModal }] = useModal();
//
// const [state] = useRuleFormItem(props, 'value', 'change', emitData);
//
const selectOptions = ref<SelectValue>([]);
//
let selectValues = reactive<Recordable>({
value: [],
});
let tempSave: any = [];
//
const loadingEcho = ref<boolean>(false);
// selectOptions,xxxBiz
provide('selectOptions', selectOptions);
// selectValues,xxxBiz
provide('selectValues', selectValues);
// loadingEcho,xxxBiz
provide('loadingEcho', loadingEcho);
const tag = ref(false);
const attrs = useAttrs();
/**
* 监听组件值
*/
watchEffect(() => {
// update-begin--author:liaozhiyang---date:20240611---forTV360X-576JSelectDept
//update-begin-author:liusq---date:2024-06-03--for: [TV360X-840]
tempSave = [];
//update-end-author:liusq---date:2024-06-03--for:[TV360X-840]
// update-end--author:liaozhiyang---date:20240611---forTV360X-576JSelectDept
props.value && initValue();
});
//update-begin-author:liusq---date:20220609--for: form ---
watch(
() => props.value,
() => {
initValue();
}
);
//update-end-author:liusq---date:20220609--for: form ---
/**
* 监听selectValues变化
*/
// update-begin--author:liaozhiyang---date:20240527---forTV360X-414(JSelectUser)
// watch(selectValues, () => {
// if (selectValues) {
// state.value = selectValues.value;
// }
// });
// update-end--author:liaozhiyang---date:20240527---forTV360X-414(JSelectUser)
/**
* 监听selectOptions变化
*/
watch(selectOptions, () => {
if (selectOptions) {
emit('select', toRaw(unref(selectOptions)), toRaw(unref(selectValues)));
}
});
/**
* 打卡弹出框
*/
function handleOpen() {
tag.value = true;
openModal(true, {
isUpdate: false,
});
}
/**
* 将字符串值转化为数组
*/
function initValue() {
let value = props.value ? props.value : [];
if (value && typeof value === 'string') {
// state.value = value.split(',');
selectValues.value = value.split(',');
tempSave = value.split(',');
} else {
// VUEN-857
selectValues.value = value;
tempSave = cloneDeep(value);
}
}
/**
* 设置下拉框的值
*/
function setValue(options, values) {
selectOptions.value = options;
//emitData.value = values.join(",");
// state.value = values;
selectValues.value = values;
send(values);
}
const getBindValue = Object.assign({}, unref(props), unref(attrs));
// update-begin--author:liaozhiyang---date:20240527---forTV360X-414(JSelectUser)
const handleClose = () => {
if (tempSave.length) {
selectValues.value = cloneDeep(tempSave);
} else {
send(tempSave);
}
};
const handleSelectChange = (values) => {
tempSave = cloneDeep(values);
send(tempSave);
};
const send = (values) => {
let result = typeof props.value == 'string' ? values.join(',') : values;
emit('update:value', result);
emit('change', result);
// update-begin--author:liaozhiyang---date:20240627---forTV360X-1648
if (!values || values.length == 0) {
emit('select', null, null);
}
// update-end--author:liaozhiyang---date:20240627---forTV360X-1648
};
// update-end--author:liaozhiyang---date:20240527---forTV360X-414(JSelectUser)
return {
// state,
attrs,
selectOptions,
selectValues,
loadingEcho,
getBindValue,
tag,
regModal,
setValue,
handleOpen,
handleClose,
handleSelectChange,
};
},
});
</script>
<style lang="less" scoped>
// update-begin--author:liaozhiyang---date:20240515---forQQYUN-9260antd
.JSelectDept {
> .ant-form-item {
display: none;
}
}
// update-end--author:liaozhiyang---date:20240515---forQQYUN-9260antd
.j-select-row {
@width: 82px;
.left {
width: calc(100% - @width - 8px);
}
.right {
width: @width;
}
.full {
width: 100%;
}
:deep(.ant-select-search__field) {
display: none !important;
}
}
</style>

@ -0,0 +1,131 @@
<!--部门选择框-->
<template>
<div>
<BasicModal v-bind="$attrs" @register="register" :title="modalTitle" width="500px" :maxHeight="maxHeight" @ok="handleOk" destroyOnClose @visible-change="visibleChange">
<BasicTree
ref="treeRef"
:treeData="treeData"
:load-data="sync == false ? null : onLoadData"
v-bind="getBindValue"
@select="onSelect"
@check="onCheck"
:fieldNames="fieldNames"
:checkedKeys="checkedKeys"
:multiple="multiple"
:checkStrictly="getCheckStrictly"
/>
<!--树操作部分-->
<!-- <template #insertFooter>
<a-dropdown placement="top">
<template #overlay>
<a-menu>
<a-menu-item v-if="multiple" key="1" @click="checkALL(true)">全部勾选</a-menu-item>
<a-menu-item v-if="multiple" key="2" @click="checkALL(false)">取消全选</a-menu-item>
<a-menu-item key="3" @click="expandAll(true)">展开全部</a-menu-item>
<a-menu-item key="4" @click="expandAll(false)">折叠全部</a-menu-item>
</a-menu>
</template>
<a-button style="float: left"> 树操作 <Icon icon="ant-design:up-outlined" /> </a-button>
</a-dropdown>
</template>-->
</BasicModal>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, unref } from 'vue';
import { BasicModal, useModalInner } from '/@/components/Modal';
import { queryDepartTreeSync4FaRen, queryTreeList } from '/@/api/common/api';
import { useAttrs } from '/@/hooks/core/useAttrs';
import { treeProps } from '/@/components/Form/src/jeecg/props/props';
import { BasicTree, TreeActionType } from '/@/components/Tree';
import { useTreeBiz } from '/@/components/Form/src/jeecg/hooks/useTreeBiz';
import {propTypes} from "/@/utils/propTypes";
import { omit } from 'lodash-es';
export default defineComponent({
name: 'DeptSelectModal4FaRen',
components: {
BasicModal,
BasicTree,
},
props: {
...treeProps,
//
modalTitle: {
type: String,
default: '单位选择',
},
// update-begin--author:liaozhiyang---date:20231220---forQQYUN-7678
maxHeight: {
type: Number,
default: 500,
},
// update-end--author:liaozhiyang---date:20231220---forQQYUN-7678
value: propTypes.oneOfType([propTypes.string, propTypes.array])
},
emits: ['register', 'getSelectResult', 'close'],
setup(props, { emit, refs }) {
//
const [register, { closeModal }] = useModalInner();
const attrs = useAttrs();
const treeRef = ref<Nullable<TreeActionType>>(null);
//update-begin-author:taoyan date:2022-10-28 for:
let propValue = props.value === ''?[]:props.value;
//update-begin-author:liusq date:2023-05-26 for: [issues/538]JSelectDept dynamicDisabled
let temp = Object.assign({}, unref(props), unref(attrs), {value: propValue},{disabled: false});
const getBindValue = omit(temp, 'multiple');
//update-end-author:liusq date:2023-05-26 for: [issues/538]JSelectDept dynamicDisabled
//update-end-author:taoyan date:2022-10-28 for:
const queryUrl = getQueryUrl();
const [{ visibleChange, checkedKeys, getCheckStrictly, getSelectTreeData, onCheck, onLoadData, treeData, checkALL, expandAll, onSelect }] =
useTreeBiz(treeRef, queryUrl, getBindValue, props, emit);
const searchInfo = ref(props.params);
const tree = ref([]);
//treeNodekeytreeData
const fieldNames = {
key: props.rowKey,
};
// {children:'children', title:'title', key:'key' }
/**
* 确定选择
*/
function handleOk() {
getSelectTreeData((options, values) => {
//
emit('getSelectResult', options, values);
//
closeModal();
});
}
/** 获取查询数据方法 */
function getQueryUrl() {
let queryFn = props.sync ? queryDepartTreeSync4FaRen : queryTreeList;
//update-begin-author:taoyan date:2022-7-4 for: issues/I5F3P4 online
return (params) => queryFn(Object.assign({}, params, { primaryKey: props.rowKey }));
//update-end-author:taoyan date:2022-7-4 for: issues/I5F3P4 online
}
return {
tree,
handleOk,
searchInfo,
treeRef,
treeData,
onCheck,
onSelect,
checkALL,
expandAll,
fieldNames,
checkedKeys,
register,
getBindValue,
getCheckStrictly,
visibleChange,
onLoadData,
};
},
});
</script>

@ -13,6 +13,7 @@ enum Api {
exportXls = '/expert/expert/exportXls',
handleadminback = '/expert/expert/handleadminback',
handleadminup = '/expert/expert/handleadminup',
saveOrUpdateadminbhapi= '/expert/expert/saveOrUpdateadminbh',
}
/**
@ -89,3 +90,7 @@ export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({ url: url, params }, { isTransformResponse: false });
}
export const saveOrUpdateadminbh = (params, isUpdate) => {
let url = isUpdate ? Api.saveOrUpdateadminbhapi : Api.save;
return defHttp.post({ url: url, params }, { isTransformResponse: false });
}

@ -79,6 +79,7 @@
</BasicTable>
<!-- 表单区域 -->
<ExpertModal ref="registerModal" @success="handleSuccess"></ExpertModal>
<ExpertModal1 ref="registerModal1zbc" @success="handleSuccess"></ExpertModal1>
</div>
</template>
@ -90,6 +91,7 @@
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl,handleadminup,handleadminback } from './Expert.api';
import { downloadFile } from '/src/utils/common/renderUtils';
import ExpertModal from './components/ExpertModal.vue'
import ExpertModal1 from './components/ExpertModal1.vue'
import { useUserStore } from '/src/store/modules/user';
import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSwitch from '/src/components/Form/src/jeecg/components/JSwitch.vue';
@ -99,6 +101,7 @@
const queryParam = reactive<any>({});
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref();
const registerModal1zbc = ref();
const userStore = useUserStore();
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
@ -166,6 +169,13 @@
registerModal.value.disableSubmit = false;
registerModal.value.edit(record);
}
function handleEdit1zbc(record: Recordable) {
registerModal1zbc.value.disableSubmit = false;
console.log(registerModal1zbc.value,'registerForm.value')
registerModal1zbc.value.edit(record);
}
/**
* 详情
@ -237,14 +247,10 @@
confirm: handleupadmin.bind(null, record),
placement: 'topLeft',
},
}, {
label: '驳回审核',
popConfirm: {
title: '是否驳回',
confirm: handlebackadmin.bind(null, record),
placement: 'topLeft',
},
}
}, {
label: '驳回',
onClick: handleEdit1zbc.bind(null, record),
},
];
}
@ -271,13 +277,9 @@
placement: 'topLeft',
},
}, {
label: '驳回审核',
popConfirm: {
title: '是否驳回',
confirm: handlebackadmin.bind(null, record),
placement: 'topLeft',
},
}
label: '驳回',
onClick: handleEdit1zbc.bind(null, record),
},
]
}

@ -0,0 +1,188 @@
<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="ExpertForm">
<a-row>
<a-col :span="24">
<a-form-item label="驳回原因" v-bind="validateInfos.errinfo" id="ExpertForm-backinfo" name="backinfo">
<a-input v-model:value="formData.backinfo" placeholder="请输入驳回原因" allow-clear ></a-input>
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</a-spin>
</template>
<script lang="ts" setup>
import { usePermission } from '/@/hooks/web/usePermission';
const { hasPermission } = usePermission();
import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSelectDept from '/src/components/Form/src/jeecg/components/JSelectDept.vue';
import JImageUpload from '/src/components/Form/src/jeecg/components/JImageUpload.vue';
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/src/utils/http/axios';
import { useMessage } from '/src/hooks/web/useMessage';
import JSwitch from '/src/components/Form/src/jeecg/components/JSwitch.vue';
import { getValueType } from '/src/utils';
import { saveOrUpdateadminbh } from '../Expert.api';
import { Form } from 'ant-design-vue';
import JFormContainer from '/src/components/Form/src/container/JFormContainer.vue';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => ({})},
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
seusername: '',
psd: '',
sepsd: '',
realname: '',
workon: '',
sex: '',
ssdep: '',
topPic: '',
phone: '',
emails: '',
colleges: '',
major: '',
directioncal: '',
research: '',
educationcal: '',
expinfo: '',
compopen: '',
adminopen: '',
backinfo: '',
zc: '',
expsture: '',
errinfo: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
psd: [{ required: true, message: '请输入密码!'},],
sepsd: [{ required: true, message: '请输入确认密码!'},],
workon: [{ required: true, message: '请输入工号!'},],
ssdep: [{ required: true, message: '请输入部门!'},],
emails: [{ required: true, message: '请输入邮箱!'},],
phone: [{ required: true, message: '请输入电话!'},],
seusername: [{ required: true, message: '请输入用户名!'},],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
//
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
const isEit = ref(false)
function add() {
isEit.value = true
console.log(11111)
// edit({});
}
/**
* 编辑
*/
function edit(record) {
isEit.value = false
console.log(22222)
nextTick(() => {
resetFields();
const tmpData = {};
Object.keys(formData).forEach((key) => {
if(record.hasOwnProperty(key)){
tmpData[key] = record[key]
}
})
//
Object.assign(formData, tmpData);
});
}
/**
* 提交数据
*/
async function submitForm() {
try {
//
await validate();
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
}
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
await saveOrUpdateadminbh(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px;
}
</style>

@ -0,0 +1,78 @@
<template>
<j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<ExpertForm1 ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ExpertForm1>
</j-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import ExpertForm1 from './ExpertForm1.vue'
import JModal from '/src/components/Modal/src/JModal/JModal.vue';
const title = ref<string>('');
const width = ref<number>(800);
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 新增
*/
function add() {
title.value = '新增';
visible.value = true;
nextTick(() => {
registerForm.value.add();
});
}
/**
* 编辑
* @param record
*/
function edit(record) {
console.log(record,'record')
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style lang="less">
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>
<style lang="less" scoped></style>

@ -13,6 +13,7 @@ enum Api {
exportXls = '/expert/expert/exportXls',
handleupcount = '/expert/expert/handleupcount',
handlebackcoount = '/expert/expert/handlebackcoount',
saveOrUpdateadminbhapi= '/expert/expert/saveOrUpdateadminbh',
}
/**
@ -88,3 +89,9 @@ export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({ url: url, params }, { isTransformResponse: false });
}
export const saveOrUpdateadminbh = (params, isUpdate) => {
let url = isUpdate ? Api.saveOrUpdateadminbhapi : Api.save;
return defHttp.post({ url: url, params }, { isTransformResponse: false });
}

@ -69,6 +69,7 @@
</BasicTable>
<!-- 表单区域 -->
<ExpertModal ref="registerModal" @success="handleSuccess"></ExpertModal>
<ExpertModal1 ref="registerModal1" @success="handleSuccess"></ExpertModal1>
</div>
</template>
@ -80,6 +81,7 @@
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl,handleupcount,handlebackco } from './Expert.api';
import { downloadFile } from '/src/utils/common/renderUtils';
import ExpertModal from './components/ExpertModal.vue'
import ExpertModal1 from './components/ExpertModal1.vue'
import { useUserStore } from '/src/store/modules/user';
import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSwitch from '/src/components/Form/src/jeecg/components/JSwitch.vue';
@ -90,6 +92,7 @@
const queryParam = reactive<any>({});
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref();
const registerModal1 = ref();
const userStore = useUserStore();
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
@ -158,6 +161,14 @@
registerModal.value.edit(record);
}
/**
* 编辑事件
*/
function handleEdit1(record: Recordable) {
registerModal1.value.disableSubmit = false;
registerModal1.value.edit(record);
}
/**
* 详情
*/
@ -229,12 +240,8 @@
},
}, {
label: '驳回',
popConfirm: {
title: '是否确认通过审核',
confirm: handlebackcount.bind(null, record),
placement: 'topLeft',
},
}
onClick: handleEdit1.bind(null, record),
},
];
}

@ -0,0 +1,182 @@
<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="ExpertForm">
<a-row>
<a-col :span="24">
<a-form-item label="驳回原因" v-bind="validateInfos.errinfo" id="ExpertForm-backinfo" name="backinfo">
<a-input v-model:value="formData.backinfo" placeholder="请输入驳回原因" allow-clear ></a-input>
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</a-spin>
</template>
<script lang="ts" setup>
import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSelectDept from '/src/components/Form/src/jeecg/components/JSelectDept.vue';
import JImageUpload from '/src/components/Form/src/jeecg/components/JImageUpload.vue';
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/src/utils/http/axios';
import { useMessage } from '/src/hooks/web/useMessage';
import JSwitch from '/src/components/Form/src/jeecg/components/JSwitch.vue';
import { getValueType } from '/src/utils';
import { saveOrUpdateadminbh } from '../Expert.api';
import { Form } from 'ant-design-vue';
import JFormContainer from '/src/components/Form/src/container/JFormContainer.vue';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => ({})},
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
seusername: '',
psd: '',
sepsd: '',
realname: '',
workon: '',
sex: '',
ssdep: '',
topPic: '',
phone: '',
emails: '',
colleges: '',
major: '',
directioncal: '',
research: '',
educationcal: '',
expinfo: '',
compopen: '',
adminopen: '',
errinfo: '',
expsture: '',
backinfo: '',
zc: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
psd: [{ required: true, message: '请输入密码!'},],
sepsd: [{ required: true, message: '请输入确认密码!'},],
workon: [{ required: true, message: '请输入工号!'},],
ssdep: [{ required: true, message: '请输入部门!'},],
emails: [{ required: true, message: '请输入邮箱!'},],
phone: [{ required: true, message: '请输入电话!'},],
seusername: [{ required: true, message: '请输入用户名!'},],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
//
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
const isEit = ref(false)
function add() {
isEit.value = true
// edit({});
}
/**
* 编辑
*/
function edit(record) {
isEit.value = false
nextTick(() => {
resetFields();
const tmpData = {};
Object.keys(formData).forEach((key) => {
if(record.hasOwnProperty(key)){
tmpData[key] = record[key]
}
})
//
Object.assign(formData, tmpData);
});
}
/**
* 提交数据
*/
async function submitForm() {
try {
//
await validate();
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
}
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
await saveOrUpdateadminbh(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px;
}
</style>

@ -0,0 +1,77 @@
<template>
<j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<ExpertForm1 ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ExpertForm1>
</j-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import ExpertForm1 from './ExpertForm1.vue'
import JModal from '/src/components/Modal/src/JModal/JModal.vue';
const title = ref<string>('');
const width = ref<number>(800);
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 新增
*/
function add() {
title.value = '新增';
visible.value = true;
nextTick(() => {
registerForm.value.add();
});
}
/**
* 编辑
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style lang="less">
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>
<style lang="less" scoped></style>

@ -98,7 +98,7 @@
<a-col :span="24" v-if="formData.adminopen === '3' || formData.compopen === '3'">
<a-form-item label="驳回原因" v-bind="validateInfos.errinfo" id="ExpertForm-backinfo" name="backinfo">
<a-input v-model:value="formData.backinfo" placeholder="请输入驳回原因" allow-clear ></a-input>
<a-input v-model:value="formData.backinfo" placeholder="请输入驳回原因" allow-clear disabled="true"></a-input>
</a-form-item>
</a-col>

@ -94,8 +94,8 @@
</a-col>
<a-col :span="24" v-if="formData.adminopen === '3' || formData.compopen === '3'">
<a-form-item label="异常备注" v-bind="validateInfos.errinfo" id="ExpertForm-backinfo" name="backinfo">
<a-input v-model:value="formData.backinfo" placeholder="请输入异常备注" allow-clear ></a-input>
<a-form-item label="驳回原因" v-bind="validateInfos.errinfo" id="ExpertForm-backinfo" name="backinfo">
<a-input v-model:value="formData.backinfo" placeholder="请输入驳回原因" allow-clear disabled="true"></a-input>
</a-form-item>
</a-col>

@ -41,7 +41,7 @@
</a-form-item>
<a-form-item>
<div class="aui-input-line">
<JSelectDept :placeholder="t('sys.login.selectorgPlaceholder4Kejiju')" v-model:value="formData.department" :multiple="false" />
<JSelectDept4FaRen :placeholder="t('sys.login.selectorgPlaceholder4Kejiju')" v-model:value="formData.department" :multiple="false" />
</div>
</a-form-item>
<a-form-item>
@ -126,6 +126,7 @@
import eyeKImg from '/@/assets/loginmini/icon/icon-eye-k.png';
import eyeGImg from '/@/assets/loginmini/icon/icon-eye-g.png';
import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
import JSelectDept4FaRen from '/@/components/Form/src/jeecg/components/JSelectDept4FaRen.vue';
import { useI18n } from '/@/hooks/web/useI18n';
import codeImg from '/@/assets/images/checkcode.png';

Loading…
Cancel
Save