update code

dev_xd
lijun 2024-10-10 00:34:39 +08:00
parent 822d4add1f
commit 7fcd920b52
13 changed files with 643 additions and 175 deletions

View File

@ -61,6 +61,6 @@ public interface RemoteUserService
@PostMapping("/user/register") @PostMapping("/user/register")
public R<Long> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public R<Long> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
@PutMapping("/user/register") @PutMapping("/user")
public R<Long> updateUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public R<Long> updateUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
} }

View File

@ -77,4 +77,6 @@ public class CacheConstants
* cache key * cache key
*/ */
public static final String PRO_PROJECT = "pro_project:"; public static final String PRO_PROJECT = "pro_project:";
public static final String UNI_AUTH = "pro_project_uni_auth2:";
} }

View File

@ -118,6 +118,34 @@ public class AttendanceCfg extends BaseEntity
return isDel; return isDel;
} }
private String compName;
private String projectName;
private String vendorsName;
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getVendorsName() {
return vendorsName;
}
public void setVendorsName(String vendorsName) {
this.vendorsName = vendorsName;
}
public String getCompName() {
return compName;
}
public void setCompName(String compName) {
this.compName = compName;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -18,28 +18,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="compName" column="comp_name"/>
<result property="projectName" column="project_name"/>
<result property="vendorsName" column="vendors_name"/>
</resultMap> </resultMap>
<sql id="selectAttendanceCfgVo"> <sql id="selectAttendanceCfgVo">
select id, com_id, project_id, vendors_code, vendors_parameter, enabled, state, remark, is_del, create_by, create_time, update_by, update_time from attendance_cfg SELECT ac.id, ac.com_id, ac.project_id, ac.vendors_code, ac.vendors_parameter, ac.enabled, ac.state, ac.remark, ac.is_del, ac.create_by, ac.create_time, ac.update_by
, ac.update_time,dp.`dept_name` comp_name,pp.`project_name`,dic.`dict_label` vendors_name
FROM attendance_cfg ac
LEFT JOIN sys_dept dp ON ac.`com_id`=dp.`dept_id`
LEFT JOIN pro_project_info pp ON ac.`project_id`=pp.`id`
LEFT JOIN sys_dict_data dic ON ac.`vendors_code`=dic.`dict_value` AND dic.`dict_type`='attendance_vendors'
</sql> </sql>
<select id="selectAttendanceCfgList" parameterType="AttendanceCfg" resultMap="AttendanceCfgResult"> <select id="selectAttendanceCfgList" parameterType="AttendanceCfg" resultMap="AttendanceCfgResult">
<include refid="selectAttendanceCfgVo"/> <include refid="selectAttendanceCfgVo"/>
<where> <where>
<if test="comId != null "> and com_id = #{comId}</if> <if test="comId != null "> and ac.com_id = #{comId}</if>
<if test="projectId != null "> and project_id = #{projectId}</if> <if test="projectId != null "> and ac.project_id = #{projectId}</if>
<if test="vendorsCode != null and vendorsCode != ''"> and vendors_code = #{vendorsCode}</if> <if test="vendorsCode != null and vendorsCode != ''"> and ac.vendors_code = #{vendorsCode}</if>
<if test="vendorsParameter != null and vendorsParameter != ''"> and vendors_parameter = #{vendorsParameter}</if> <if test="vendorsParameter != null and vendorsParameter != ''"> and ac.vendors_parameter = #{vendorsParameter}</if>
<if test="enabled != null "> and enabled = #{enabled}</if> <if test="enabled != null "> and ac.enabled = #{enabled}</if>
<if test="state != null "> and state = #{state}</if> <if test="state != null "> and ac.state = #{state}</if>
<if test="isDel != null "> and is_del = #{isDel}</if> <if test="isDel != null "> and ac.is_del = #{isDel}</if>
</where> </where>
</select> </select>
<select id="selectAttendanceCfgById" parameterType="Long" resultMap="AttendanceCfgResult"> <select id="selectAttendanceCfgById" parameterType="Long" resultMap="AttendanceCfgResult">
<include refid="selectAttendanceCfgVo"/> <include refid="selectAttendanceCfgVo"/>
where id = #{id} where ac.id = #{id}
</select> </select>
<insert id="insertAttendanceCfg" parameterType="AttendanceCfg" useGeneratedKeys="true" keyProperty="id"> <insert id="insertAttendanceCfg" parameterType="AttendanceCfg" useGeneratedKeys="true" keyProperty="id">

View File

@ -89,6 +89,12 @@
<version>2.7.0</version> <version>2.7.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
<!-- YanZhu Common Swagger --> <!-- YanZhu Common Swagger -->
<dependency> <dependency>
<groupId>com.yanzhu</groupId> <groupId>com.yanzhu</groupId>

View File

@ -58,4 +58,6 @@ public interface IProProjectInfoSubdeptsUsersService
* @return * @return
*/ */
public int deleteProProjectInfoSubdeptsUsersById(Long id); public int deleteProProjectInfoSubdeptsUsersById(Long id);
} }

View File

@ -1,6 +1,11 @@
package com.yanzhu.manage.service; package com.yanzhu.manage.service;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
/** /**
* *
@ -11,42 +16,42 @@ public interface IUniService {
* @param data * @param data
* @return * @return
*/ */
public String auth(JSON data); public Map<String,String> auth(long projectId) throws NoSuchAlgorithmException;
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON admitCreate(JSON data); public String admitCreate(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON admitUpdate(JSON data); public boolean admitUpdate(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON admitDeletee(JSON data); public boolean admitDeletee(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON admitDetail(JSON data); public JSONObject admitDetail(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON admitPage(JSON data); public JSONObject admitPage(JSONObject data);
/** /**
@ -54,7 +59,7 @@ public interface IUniService {
* @param data * @param data
* @return * @return
*/ */
public JSON faceRegister(JSON data); public JSONObject faceRegister(JSONObject data);
@ -63,56 +68,56 @@ public interface IUniService {
* @param data * @param data
* @return * @return
*/ */
public JSON faceDelete(JSON data); public boolean faceDelete(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON faceDetail(JSON data); public JSONObject faceDetail(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON deviceCreate(JSON data); public JSONObject deviceCreate(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON deviceUpdate(JSON data); public JSONObject deviceUpdate(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON deviceDelete(JSON data); public JSONObject deviceDelete(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON deviceDetail(JSON data); public JSONObject deviceDetail(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON authDevice(JSON data); public JSONObject authDevice(JSONObject data);
/** /**
* - * -
* @param data * @param data
* @return * @return
*/ */
public JSON authDeviceUpdate(JSON data); public JSONObject authDeviceUpdate(JSONObject data);
/** /**
@ -120,6 +125,13 @@ public interface IUniService {
* @param data * @param data
* @return * @return
*/ */
public JSON authDeviceRevoke(JSON data); public JSONObject authDeviceRevoke(JSONObject data);
/**
*
* @param userId
* @param projectId
*/
public Long syncUniUser(Long userId, ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers);
} }

View File

@ -6,6 +6,7 @@ import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper; import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService; import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService;
import com.yanzhu.manage.service.IUniService;
import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser; import com.yanzhu.system.api.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -28,6 +29,8 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Autowired @Autowired
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@Autowired
private IUniService uniService;
/** /**
* *
* *
@ -71,6 +74,7 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
}else{ }else{
remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData(); remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData();
} }
uniService.syncUniUser(user.getUserId(),proProjectInfoSubdeptsUsers);
return proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers); return proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
} }
@ -93,9 +97,12 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
}else{ }else{
remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData(); remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData();
} }
uniService.syncUniUser(user.getUserId(),proProjectInfoSubdeptsUsers);
return proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers); return proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
} }
/** /**
* *
* *

View File

@ -0,0 +1,268 @@
package com.yanzhu.manage.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.common.utils.MD5Utils;
import com.yanzhu.common.core.constant.CacheConstants;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.redis.service.RedisService;
import com.yanzhu.manage.domain.AttendanceCfg;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.mapper.AttendanceCfgMapper;
import com.yanzhu.manage.service.IUniService;
import com.yanzhu.manage.utils.UniUtils;
import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import okhttp3.Request;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
public class UniServiceImpl implements IUniService{
@Autowired
private RedisService redisService;
@Autowired
private AttendanceCfgMapper attendanceCfgMapper;
@Autowired
private RemoteUserService remoteUserService;
@Override
public Map<String,String> auth(long projectId) {
String cacheKey=CacheConstants.UNI_AUTH+projectId;
Map<String,String> authMap = redisService.getCacheObject(cacheKey);
String authInfo="404";
String projectGuid="404";
if(authMap!=null){
return authMap;
}else{
authMap=new HashMap<>();
}
AttendanceCfg where=new AttendanceCfg();
where.setProjectId(projectId);
List<AttendanceCfg> list=attendanceCfgMapper.selectAttendanceCfgList(where);
if(list.size()>0){
AttendanceCfg cfg=list.get(0);
if(cfg.getVendorsCode().equals("uni") && StringUtils.isNotEmpty(cfg.getVendorsParameter())){
JSONObject json=JSON.parseObject(cfg.getVendorsParameter());
String appKey=json.getString("AppKey");
String appSecret=json.getString("AppSecret");
projectGuid=json.getString("projectGuid");
String timestamp=""+new Date().getTime();
Map<String, String> headerParams=new HashMap<>();
headerParams.put("appKey",appKey);
headerParams.put("timestamp",timestamp);
String sign=appKey+timestamp+appSecret;
headerParams.put("sign", UniUtils.md5(sign).toLowerCase());
Request request = new Request.Builder()
.url(UniUtils.getAuthUrl(projectGuid))
.get().headers(UniUtils.setHeaderParams(headerParams))
.build();
String str=UniUtils.getResult(request);
JSONObject jo=JSON.parseObject(str);
String data= jo.getString("data");
if(StringUtils.isNotEmpty(data)){
authInfo=data;
authMap.put("token",authInfo);
authMap.put("projectGuid",projectGuid);
redisService.setCacheObject(cacheKey, authMap, 20l, TimeUnit.HOURS);//缓存20小时
}
}
}
return authMap;
}
@Override
public String admitCreate(JSONObject data) {
long projectId=data.getLong("projectId");
data.remove("projectId");
Request request=new Request.Builder()
.url(UniUtils.ADMITCREATE)
.post(UniUtils.toJsonBody(data))
.headers(UniUtils.setHeaderParams(auth(projectId)))
.build();
String res=UniUtils.getResult(request);
JSONObject jo=JSON.parseObject(res);
if(jo.getLong("result").intValue()==1){
return jo.getJSONObject("data").getString("admitGuid");
}
return null;
}
@Override
public boolean admitUpdate(JSONObject data) {
long projectId=data.getLong("projectId");
data.remove("projectId");
Request request=new Request.Builder()
.url(UniUtils.ADMITUPDATE)
.post(UniUtils.toJsonBody(data))
.headers(UniUtils.setHeaderParams(auth(projectId)))
.build();
String res=UniUtils.getResult(request);
JSONObject jo=JSON.parseObject(res);
return jo.getLong("result").intValue()==1;
}
@Override
public boolean admitDeletee(JSONObject data) {
long projectId=data.getLong("projectId");
data.remove("projectId");
Request request=new Request.Builder()
.url(UniUtils.ADMITDELETE)
.post(UniUtils.toJsonBody(data))
.headers(UniUtils.setHeaderParams(auth(projectId)))
.build();
String res=UniUtils.getResult(request);
JSONObject jo=JSON.parseObject(res);
return jo.getLong("result").intValue()==1;
}
@Override
public JSONObject admitDetail(JSONObject data) {
return null;
}
@Override
public JSONObject admitPage(JSONObject data) {
return null;
}
@Override
public JSONObject faceRegister(JSONObject data) {
long projectId=data.getLong("projectId");
data.remove("projectId");
Request request=new Request.Builder()
.url(UniUtils.FACEREGISTER)
.post(UniUtils.toJsonBody(data))
.headers(UniUtils.setHeaderParams(auth(projectId)))
.build();
String res=UniUtils.getResult(request);
JSONObject jo=JSON.parseObject(res);
if(jo.getLong("result").intValue()==1){
return jo.getJSONObject("data");
}
return null;
}
@Override
public boolean faceDelete(JSONObject data) {
long projectId=data.getLong("projectId");
data.remove("projectId");
Request request=new Request.Builder()
.url(UniUtils.FACEDELETE)
.post(UniUtils.toJsonBody(data))
.headers(UniUtils.setHeaderParams(auth(projectId)))
.build();
String res=UniUtils.getResult(request);
JSONObject jo=JSON.parseObject(res);
return jo.getLong("result").intValue()==1;
}
@Override
public JSONObject faceDetail(JSONObject data) {
return null;
}
@Override
public JSONObject deviceCreate(JSONObject data) {
return null;
}
@Override
public JSONObject deviceUpdate(JSONObject data) {
return null;
}
@Override
public JSONObject deviceDelete(JSONObject data) {
return null;
}
@Override
public JSONObject deviceDetail(JSONObject data) {
return null;
}
@Override
public JSONObject authDevice(JSONObject data) {
return null;
}
@Override
public JSONObject authDeviceUpdate(JSONObject data) {
return null;
}
@Override
public JSONObject authDeviceRevoke(JSONObject data) {
return null;
}
@Override
public Long syncUniUser(Long userId, ProProjectInfoSubdeptsUsers prjUser) {
SysUser user=remoteUserService.getSysUserInfo(userId, SecurityConstants.INNER).getData();
JSONObject jo=JSON.parseObject(user.getUserInfos());
String admitGuid=jo.getString("admitGuid");
JSONObject userJo=new JSONObject();
userJo.put("projectId",prjUser.getProjectId());
userJo.put("name",user.getUserName());
userJo.put("phone",user.getPhonenumber());
userJo.put("tag",prjUser.getActiveProjectName());
userJo.put("cardNo",user.getUserId());
userJo.put("idCardNo",user.getCardCode());
userJo.put("password","123456");
userJo.put("addition","");
boolean hasUpdate=false;
if(StringUtils.isEmpty(admitGuid)){
//未注册人员
admitGuid=admitCreate(userJo);
jo.put("admitGuid",admitGuid);
hasUpdate=true;
}else{
//已注册
admitUpdate(userJo);
}
JSONObject faceJo=new JSONObject();
faceJo.put("projectId",prjUser.getProjectId());
faceJo.put("base64","");
faceJo.put("admitGuid",admitGuid);
faceJo.put("url",user.getUserPicture());
faceJo.put("faceTag","");
HttpServletRequest request =((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String url= request.getRemoteAddr();
//注册图像
JSONObject faceRes= faceRegister(faceJo);
if(faceRes!=null) {
jo.put("faceGuid", faceRes.getString("faceGuid"));
jo.put("uniFaceInfo", faceRes.toJSONString());
hasUpdate=true;
}
user.setUserInfos(jo.toJSONString());
if(hasUpdate){
Long ret= remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData();
if(ret==null){
return 0l;
}
return ret.longValue();
}
return 0l;
}
}

View File

@ -0,0 +1,75 @@
package com.yanzhu.manage.utils;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.common.utils.MD5Utils;
import com.yanzhu.common.core.utils.StringUtils;
import okhttp3.*;
import java.io.IOException;
import java.util.Map;
public class UniUtils {
public static final String UNIBASE="http://wo-api.uni-ubi.com/";
public static final String ADMITCREATE=UNIBASE+"v2/admit/create";
public static final String ADMITUPDATE=UNIBASE+"v2/admit/update";
public static final String ADMITDELETE=UNIBASE+"v2/admit/delete";
public static final String ADMITDETAIL=UNIBASE+"v2/admit/detail";
public static final String FACEREGISTER=UNIBASE+"v2/face/register";
public static final String FACEDELETE=UNIBASE+"v2/face/delete";
public static final String FACEDETAIL=UNIBASE+"v2/face/detail";
public static final String DEVICECREATE=UNIBASE+"v2/device/create";
public static final String DEVICEUPATE=UNIBASE+"v2/device/update";
public static final String DEVICEDELETE=UNIBASE+"v2/device/delete";
public static final String DEVICEDETAIL=UNIBASE+"v2/device/detail";
public static final String AUTHDEVICE=UNIBASE+"v2/auth/device";
public static final String AUTHDEVICEUPDATE=UNIBASE+"v2/auth/device/update";
public static String getAuthUrl(String projectGuid){
return UNIBASE+ "/v1/"+projectGuid+"/auth";
}
public static Headers setHeaderParams(Map<String, String> headerParams) {
Headers headers = null;
Headers.Builder headersbuilder = new Headers.Builder();
if (headerParams != null && headerParams.size() > 0) {
for (String key : headerParams.keySet()) {
if (!StringUtils.isEmpty(key) && !StringUtils.isEmpty(headerParams.get(key))) {
//如果参数不是null并且不是"",就拼接起来
headersbuilder.add(key, headerParams.get(key));
}
}
}
headers = headersbuilder.build();
return headers;
}
public static String getResult(Request request) {
OkHttpClient client = new OkHttpClient();
Response response;
try {
response = client.newCall(request).execute();
if (response.body() != null) {
return response.body().string();
} else {
return "";
}
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static RequestBody toJsonBody(JSONObject data) {
return RequestBody.create(MediaType.parse("application/json"),data.toJSONString());
}
public static String md5(String data){
try {
return MD5Utils.md5Hex(data.getBytes());
}catch (Exception ex){
return "";
}
}
}

View File

@ -57,6 +57,16 @@ app.config.globalProperties.handleTree = handleTree
app.config.globalProperties.addDateRange = addDateRange app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels app.config.globalProperties.selectDictLabels = selectDictLabels
app.config.globalProperties.$tryToJson=(str,df)=>{
try{
if(!str){
return df||{};
}
return JSON.parse(str)||(df||{});
}catch{
return (df||{});
}
}
// 全局组件挂载 // 全局组件挂载
app.component('DictTag', DictTag) app.component('DictTag', DictTag)

View File

@ -5,7 +5,8 @@
<el-input v-model="queryParams.comId" placeholder="请输入公司主键" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.comId" placeholder="请输入公司主键" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="项目" prop="projectId"> <el-form-item label="项目" prop="projectId">
<el-select :disabled="data.currentProId!=''" v-model="queryParams.projectId" placeholder="请选择项目" clearable @change="handleQuery"> <el-select :disabled="data.currentProId != ''" v-model="queryParams.projectId" placeholder="请选择项目" clearable
@change="handleQuery">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id"> <el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id">
</el-option> </el-option>
</el-select> </el-select>
@ -52,10 +53,14 @@
<el-table v-loading="loading" :data="attendance_cfgList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="attendance_cfgList" @selection-change="handleSelectionChange">
<el-table-column label="NO." align="center" prop="id" /> <el-table-column label="NO." align="center" prop="id" />
<el-table-column label="所属公司" align="center" prop="comId" /> <el-table-column label="所属公司" align="center" prop="compName" />
<el-table-column label="所属项目" align="center" prop="projectId" /> <el-table-column label="所属项目" align="center" prop="projectName" />
<el-table-column label="考勤厂商" align="center" prop="vendorsCode" /> <el-table-column label="考勤厂商" align="center" prop="vendorsName" />
<el-table-column label="是否启用" align="center" prop="enabled" /> <el-table-column label="是否启用" align="center" prop="enabled">
<template #default="scope">
<el-switch v-model="scope.row.enabled" :active-value="1" @change="doUpdateRow(scope.row)" :inactive-value="0"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
@ -70,16 +75,17 @@
v-model:limit="queryParams.pageSize" @pagination="getList" /> v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改考勤配置对话框 --> <!-- 添加或修改考勤配置对话框 -->
<el-dialog :title="title" v-model="open" width="800px" append-to-body :close-on-click-modal="false" :close-on-press-escape="false"> <el-dialog :title="title" v-model="open" width="800px" append-to-body :close-on-click-modal="false"
:close-on-press-escape="false">
<el-form ref="attendance_cfgRef" :model="form" :rules="rules" label-width="100px"> <el-form ref="attendance_cfgRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="所属项目" prop="projectId"> <el-form-item label="所属项目" prop="projectId">
<el-select :disabled="data.currentProId!=''" v-model="form.projectId" placeholder="请选择项目"> <el-select :disabled="data.currentProId != ''||data.mode=='edit'" v-model="form.projectId" placeholder="请选择项目">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id"> <el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="考勤厂商" prop="vendorsCode"> <el-form-item label="考勤厂商" prop="vendorsCode">
<el-select v-model="form.vendorsCode" placeholder="请选择厂商" clearable> <el-select v-model="form.vendorsCode" placeholder="请选择厂商">
<el-option v-for="dict in attendance_vendors" :key="dict.value" :label="dict.label" :value="dict.value"> <el-option v-for="dict in attendance_vendors" :key="dict.value" :label="dict.label" :value="dict.value">
</el-option> </el-option>
</el-select> </el-select>
@ -89,15 +95,15 @@
<el-input v-model="form.AppKey" placeholder="请输入内容" /> <el-input v-model="form.AppKey" placeholder="请输入内容" />
</el-form-item> </el-form-item>
<el-form-item label="应用Secret" prop="AppSecret"> <el-form-item label="应用Secret" prop="AppSecret">
<el-input v-model="form.AppSecret" placeholder="请输入内容" /> <el-input v-model="form.AppSecret" placeholder="请输入内容" />
</el-form-item> </el-form-item>
<el-form-item label="项目Guid" prop="projectGuid"> <el-form-item label="项目Guid" prop="projectGuid">
<el-input v-model="form.projectGuid" placeholder="请输入内容" /> <el-input v-model="form.projectGuid" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</template> </template>
<el-form-item label="已启用" prop="enabled"> <el-form-item label="已启用" prop="enabled">
<el-switch v-model="form.enabled" /> <el-switch v-model="form.enabled" :active-value="1" :inactive-value="0"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -143,25 +149,31 @@ const data = reactive({
isDel: null, isDel: null,
}, },
rules: { rules: {
projectId:[{ required: true, trigger: ['blur', 'change'], message: "请选择所属项目" }], projectId: [{ required: true, trigger: ['blur', 'change'], message: "请选择所属项目" }],
vendorsCode:[{ required: true, trigger: ['blur', 'change'], message: "请选择考勤厂商" }], vendorsCode: [{ required: true, trigger: ['blur', 'change'], message: "请选择考勤厂商" }],
AppKey:[{ required: true, trigger: ['blur', 'change'], message: "请输入应用KEY" }], AppKey: [{ required: true, trigger: ['blur', 'change'], message: "请输入应用KEY" }],
AppSecret:[{ required: true, trigger: ['blur', 'change'], message: "请输入应用Secret" }], AppSecret: [{ required: true, trigger: ['blur', 'change'], message: "请输入应用Secret" }],
projectGuid:[{ required: true, trigger: ['blur', 'change'], message: "请输入项目Guid" }], projectGuid: [{ required: true, trigger: ['blur', 'change'], message: "请输入项目Guid" }],
}, },
projects: [], projects: [],
currentProId:'', currentProId: '',
mode:'',
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
function doUpdateRow(row){
updateAttendance_cfg(row).then(d=>{
proxy.$modal.msgSuccess("修改成功");
});
}
/** 查询项目列表 */ /** 查询项目列表 */
function getProjectList() { function getProjectList() {
findMyProjectList({ pageNum: 1, pageSize: 100 }).then(response => { findMyProjectList({ pageNum: 1, pageSize: 100 }).then(response => {
data.projects = response.rows; data.projects = response.rows;
if (userStore.currentProId) { if (userStore.currentProId) {
queryParams.value.projectId=userStore.currentProId queryParams.value.projectId = userStore.currentProId
data.currentProId=userStore.currentProId; data.currentProId = userStore.currentProId;
} }
}); });
} }
@ -189,11 +201,11 @@ function reset() {
comId: null, comId: null,
projectId: data.currentProId, projectId: data.currentProId,
vendorsCode: 'uni', vendorsCode: 'uni',
AppKey:'', AppKey: '',
AppSecret:'', AppSecret: '',
projectGuid:'', projectGuid: '',
vendorsParameter: null, vendorsParameter: null,
enabled: true, enabled: 1,
state: null, state: null,
remark: null, remark: null,
isDel: null, isDel: null,
@ -226,6 +238,7 @@ function handleSelectionChange(selection) {
/** 新增按钮操作 */ /** 新增按钮操作 */
function handleAdd() { function handleAdd() {
data.mode="add"
reset(); reset();
open.value = true; open.value = true;
title.value = "添加考勤配置"; title.value = "添加考勤配置";
@ -233,10 +246,16 @@ function handleAdd() {
/** 修改按钮操作 */ /** 修改按钮操作 */
function handleUpdate(row) { function handleUpdate(row) {
data.mode="edit"
reset(); reset();
const _id = row.id || ids.value const _id = row.id || ids.value
getAttendance_cfg(_id).then(response => { getAttendance_cfg(_id).then(response => {
form.value = response.data; let obj=response.data;
let info=proxy.$tryToJson(obj.vendorsParameter||"{}");
form.value =obj;
form.value.AppKey=info.AppKey;
form.value.AppSecret=info.AppSecret;
form.value.projectGuid=info.projectGuid;
open.value = true; open.value = true;
title.value = "修改考勤配置"; title.value = "修改考勤配置";
}); });
@ -246,12 +265,12 @@ function handleUpdate(row) {
function submitForm() { function submitForm() {
proxy.$refs["attendance_cfgRef"].validate(valid => { proxy.$refs["attendance_cfgRef"].validate(valid => {
if (valid) { if (valid) {
form.value.vendorsParameter=JSON.stringify({ form.value.vendorsParameter = JSON.stringify({
AppKey:form.value.AppKey, AppKey: form.value.AppKey,
AppSecret:form.value.AppSecret, AppSecret: form.value.AppSecret,
projectGuid:form.value.projectGuid, projectGuid: form.value.projectGuid,
}) })
form.value.enabled=form.value.enabled?1:0; form.value.enabled = form.value.enabled;
if (form.value.id != null) { if (form.value.id != null) {
updateAttendance_cfg(form.value).then(response => { updateAttendance_cfg(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功");

View File

@ -9,8 +9,8 @@
</el-form-item> </el-form-item>
<el-form-item label="班组" prop="subDeptName"> <el-form-item label="班组" prop="subDeptName">
<el-select v-model="queryParams.subDeptGroup" placeholder="请选择班组" @change="doDeptGroupChange" clearable> <el-select v-model="queryParams.subDeptGroup" placeholder="请选择班组" @change="doDeptGroupChange" clearable>
<el-option v-for="(it, idx) in data.queryDeptGroups" :key="idx" :label="it.groupName" :value="it.id" /> <el-option v-for="(it, idx) in data.queryDeptGroups" :key="idx" :label="it.groupName" :value="it.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="姓名" prop="userName"> <el-form-item label="姓名" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.userName" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" />
@ -25,7 +25,9 @@
</el-form-item> </el-form-item>
<el-form-item label="工种岗位" prop="craftPost"> <el-form-item label="工种岗位" prop="craftPost">
<el-select v-model="queryParams.craftPost" placeholder="请选择工种岗位" clearable> <el-select v-model="queryParams.craftPost" placeholder="请选择工种岗位" clearable>
<el-option v-for="dict in (queryParams.craftType?pro_craft_post.filter(d=>d.remark==queryParams.craftType):[])" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option
v-for="dict in (queryParams.craftType ? pro_craft_post.filter(d => d.remark == queryParams.craftType) : [])"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
@ -60,6 +62,11 @@
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="所属单位" align="center" prop="subDeptName" /> <el-table-column label="所属单位" align="center" prop="subDeptName" />
<el-table-column label="姓名" align="center" prop="user.userName" /> <el-table-column label="姓名" align="center" prop="user.userName" />
<el-table-column label="头像" align="center">
<template #default="scope">
<el-image :src="scope.row.user.userPicture" style="height:80px;" :preview-teleported="true" :preview-src-list="[scope.row.user.userPicture]"></el-image>
</template>
</el-table-column>
<el-table-column label="联系电话" align="center" prop="user.phonenumber" /> <el-table-column label="联系电话" align="center" prop="user.phonenumber" />
<el-table-column label="班组" align="center" prop="subDeptGroupName" /> <el-table-column label="班组" align="center" prop="subDeptGroupName" />
<el-table-column label="工种类型" align="center" prop="craftType"> <el-table-column label="工种类型" align="center" prop="craftType">
@ -91,16 +98,21 @@
v-model:limit="queryParams.pageSize" @pagination="getList" /> v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改分包单位工人对话框 --> <!-- 添加或修改分包单位工人对话框 -->
<el-drawer v-model="open" size="960px" class="edit-drawer"> <el-drawer v-model="open" size="960px" class="edit-drawer">
<template #header> <template #header>
<div style="position: relative;">{{ title }}</div> <div style="position: relative;">{{ title }}</div>
</template> </template>
<el-form ref="proProjectInfoSubdeptsUsersRef" :model="form" :rules="rules" label-width="120px" style="position: relative;"> <el-form ref="proProjectInfoSubdeptsUsersRef" :model="form" :rules="rules" label-width="120px"
style="position: relative;">
<div style="width: 50%;"> <div style="width: 50%;">
<el-form-item label="联系电话" prop="userPhone"> <el-form-item label="联系电话" prop="userPhone">
<el-input v-model="form.userPhone" :disabled="data.mode!='edit'" placeholder="请输入联系电话" minlength="11" maxlength="11" style="width: 200px;" /> <el-input v-model="form.userPhone" disabled v-if="data.mode == 'edit'" placeholder="请输入联系电话" minlength="11"
<el-button type="primary" v-if="data.mode!='edit'" style="margin-left:10px;" @click="queryPhone"></el-button> maxlength="11" style="width: 200px;" />
</el-form-item> <el-input v-model="form.userPhone" v-else placeholder="请输入联系电话" minlength="11" maxlength="11"
style="width: 200px;" />
<el-button type="primary" v-if="data.mode != 'edit'" style="margin-left:10px;"
@click="queryPhone">查询</el-button>
</el-form-item>
</div> </div>
<el-row v-if="data.phoneState"> <el-row v-if="data.phoneState">
<el-col :span="12"> <el-col :span="12">
@ -248,10 +260,10 @@ const multiple = ref(true);
const total = ref(0); const total = ref(0);
const title = ref(""); const title = ref("");
const validatePhone=(rule, value, callback)=>{ const validatePhone = (rule, value, callback) => {
if(!/^1\d{10}$/.test(value)){ if (!/^1\d{10}$/.test(value)) {
callback(new Error('请输入有效手机号码!')) callback(new Error('请输入有效手机号码!'))
}else{ } else {
callback() callback()
} }
} }
@ -286,8 +298,8 @@ const data = reactive({
userName: [{ required: true, trigger: ['blur', 'change'], message: "请输入姓名" }], userName: [{ required: true, trigger: ['blur', 'change'], message: "请输入姓名" }],
userPhone: [ userPhone: [
{ required: true, trigger: ['blur', 'change'], message: "请输入手机号码" }, { required: true, trigger: ['blur', 'change'], message: "请输入手机号码" },
{ min: 11, max: 11, message: '请输入有效手机号码', trigger: 'blur' }, { min: 11, max: 11, message: '请输入有效手机号码', trigger: 'blur' },
{ validator: validatePhone, trigger: 'blur' }], { validator: validatePhone, trigger: 'blur' }],
certificateCode: [{ required: true, trigger: ['blur', 'change'], message: "请输入证件号码" }], certificateCode: [{ required: true, trigger: ['blur', 'change'], message: "请输入证件号码" }],
craftPost: [{ required: true, trigger: ['blur', 'change'], message: "请输选择工种" }], craftPost: [{ required: true, trigger: ['blur', 'change'], message: "请输选择工种" }],
identificationCard: [{ required: true, trigger: ['blur', 'change'], message: "请上传身份证信息" }], identificationCard: [{ required: true, trigger: ['blur', 'change'], message: "请上传身份证信息" }],
@ -300,9 +312,9 @@ const data = reactive({
nationOpts: '汉族,壮族,满族,回族,苗族,维吾尔族,土家族,彝族,蒙古族,藏族,布依族,侗族,瑶族,朝鲜族,白族,哈尼族,哈萨克族,黎族,傣族,畲族,傈僳族,仡佬族,东乡族,高山族,拉祜族,水族,佤族,纳西族,羌族,土族,仫佬族,锡伯族,柯尔克孜族,达斡尔族,景颇族,毛南族,撒拉族,布朗族,塔吉克族,阿昌族,普米族,鄂温克族,怒族,京族,基诺族,德昂族,保安族,俄罗斯族,裕固族,乌孜别克族,门巴族,鄂伦春族,独龙族,塔塔尔族,赫哲族,珞巴族'.split(","), nationOpts: '汉族,壮族,满族,回族,苗族,维吾尔族,土家族,彝族,蒙古族,藏族,布依族,侗族,瑶族,朝鲜族,白族,哈尼族,哈萨克族,黎族,傣族,畲族,傈僳族,仡佬族,东乡族,高山族,拉祜族,水族,佤族,纳西族,羌族,土族,仫佬族,锡伯族,柯尔克孜族,达斡尔族,景颇族,毛南族,撒拉族,布朗族,塔吉克族,阿昌族,普米族,鄂温克族,怒族,京族,基诺族,德昂族,保安族,俄罗斯族,裕固族,乌孜别克族,门巴族,鄂伦春族,独龙族,塔塔尔族,赫哲族,珞巴族'.split(","),
sexOpts: "男,女".split(","), sexOpts: "男,女".split(","),
isManager: false, isManager: false,
phoneState:'', phoneState: '',
userInfo:null, userInfo: null,
mode:'', mode: '',
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
@ -315,26 +327,27 @@ function doImageUpload() {
} }
// //
function queryPhone(){ function queryPhone() {
listUser({phonenumber:form.value.userPhone}).then(d=>{ listUser({ phonenumber: form.value.userPhone }).then(d => {
if(d.rows.length>0){ let userPhone=form.value.userPhone;
let user=d.rows[0]; if (d.rows.length > 0) {
data.userInfo=user; let user = d.rows[0];
data.phoneState="edit"; data.userInfo = user;
form.value.userName=user.nickName||'' data.phoneState = "edit";
form.value.certificateType=user.cardType||''; showEditUser(user);
form.value.certificateCode=user.cardCode||'' } else {
}else{ data.userInfo = null;
data.userInfo=null; showEditUser({});
data.phoneState="add"; data.phoneState = "add";
} }
form.value.userPhone=userPhone;
}); });
} }
function tryToJson(str){ function tryToJson(str) {
try{ try {
return JSON.parse(str); return JSON.parse(str);
}catch{ } catch {
return {}; return {};
} }
} }
@ -342,13 +355,13 @@ function tryToJson(str){
function getList() { function getList() {
loading.value = true; loading.value = true;
listProProjectInfoSubdeptsUsers(queryParams.value).then(response => { listProProjectInfoSubdeptsUsers(queryParams.value).then(response => {
proProjectInfoSubdeptsUsersList.value = (response.rows || []).map(d=>{ proProjectInfoSubdeptsUsersList.value = (response.rows || []).map(d => {
d.info=tryToJson(d.user?.userInfos||"{}") d.info = tryToJson(d.user?.userInfos || "{}")
d.user=d.user||{}; d.user = d.user || {};
if(d.info.birthDay){ if (d.info.birthDay) {
let birthDay=dayjs(d.info.birthDay).format("YYYY-MM-DD"); let birthDay = dayjs(d.info.birthDay).format("YYYY-MM-DD");
d.info.birthDayStr=birthDay; d.info.birthDayStr = birthDay;
d.info.age=dayjs(new Date()).diff(d.info.birthDay,'year'); d.info.age = dayjs(new Date()).diff(d.info.birthDay, 'year');
} }
return d; return d;
}); });
@ -394,18 +407,18 @@ function reset() {
bankOffice: '',// bankOffice: '',//
}; };
proxy.resetForm("proProjectInfoSubdeptsUsersRef"); proxy.resetForm("proProjectInfoSubdeptsUsersRef");
data.phoneState=""; data.phoneState = "";
data.userInfo=null; data.userInfo = null;
} }
// //
function doSubDeptChange(type) { function doSubDeptChange(type) {
if(type=="query"){ if (type == "query") {
if(!queryParams.value.subDeptId){ if (!queryParams.value.subDeptId) {
data.queryDeptGroups=[]; data.queryDeptGroups = [];
return; return;
} }
}else{ } else {
if ( !form.value.subDeptId) { if (!form.value.subDeptId) {
data.deptGroups = []; data.deptGroups = [];
form.value.subDeptGroup = ""; form.value.subDeptGroup = "";
form.value.groupName = ""; form.value.groupName = "";
@ -415,8 +428,8 @@ function doSubDeptChange(type) {
form.value.craftPost = ""; form.value.craftPost = "";
return; return;
} }
} }
listProProjectInfoSubdeptsGroup({ subDeptId:type=="query"?queryParams.value.subDeptId: form.value.subDeptId, pageNum: 1, pageSize: 100 }).then(d => { listProProjectInfoSubdeptsGroup({ subDeptId: type == "query" ? queryParams.value.subDeptId : form.value.subDeptId, pageNum: 1, pageSize: 100 }).then(d => {
if (type == "query") { if (type == "query") {
data.queryDeptGroups = d.rows || []; data.queryDeptGroups = d.rows || [];
} else { } else {
@ -440,7 +453,7 @@ function doDeptGroupChange() {
data.isManager = false data.isManager = false
if (!form.value.subDeptGroup) { if (!form.value.subDeptGroup) {
form.value.groupName = ""; form.value.groupName = "";
form.value.subDeptGroup =""; form.value.subDeptGroup = "";
form.value.craftPostName = ""; form.value.craftPostName = "";
form.value.craftTypeName = ""; form.value.craftTypeName = "";
form.value.craftType = ""; form.value.craftType = "";
@ -492,7 +505,7 @@ function loadSubDepts(cb) {
data.subdepts = d.rows || []; data.subdepts = d.rows || [];
if (data.subdepts.length > 0) { if (data.subdepts.length > 0) {
let sd = data.subdepts[0]; let sd = data.subdepts[0];
form.value.subDeptId = ""+sd.id; form.value.subDeptId = "" + sd.id;
doSubDeptChange(); doSubDeptChange();
} }
cb && cb(); cb && cb();
@ -506,7 +519,7 @@ function handleAdd() {
return false; return false;
} }
reset(); reset();
data.mode='add'; data.mode = 'add';
form.value.certificateType = ""; form.value.certificateType = "";
form.value.projectId = userStore.currentProId; form.value.projectId = userStore.currentProId;
form.value.projectName = userStore.currentProName; form.value.projectName = userStore.currentProName;
@ -524,39 +537,19 @@ function handleUpdate(row) {
} }
reset(); reset();
const _id = row.id || ids.value const _id = row.id || ids.value
data.mode='edit' data.mode = 'edit'
getProProjectInfoSubdeptsUsers(_id).then(response => { getProProjectInfoSubdeptsUsers(_id).then(response => {
let obj = JSON.parse(JSON.stringify(response.data)); let obj = JSON.parse(JSON.stringify(response.data));
obj.info=tryToJson(obj.user?.userInfos||"{}") obj.info = tryToJson(obj.user?.userInfos || "{}")
obj.user=obj.user||{}; obj.user = obj.user || {};
if(obj.info.birthDay){
let birthDay=dayjs(obj.info.birthDay).format("YYYY-MM-DD"); form.value = obj;
obj.info.birthDayStr=birthDay; form.value.userId = obj.userId;
obj.info.age=dayjs(new Date()).diff(obj.info.birthDay,'year');
}
form.value=obj;
form.value.userId=obj.userId;
form.value.userPhone=obj.user.phonenumber
form.value.projectId = userStore.currentProId; form.value.projectId = userStore.currentProId;
form.value.projectName = userStore.currentProName; form.value.projectName = userStore.currentProName;
form.value.userName=obj.user.userName; showEditUser(obj.user);
form.value.certificateType=obj.user.cardType; data.phoneState = "edit";
form.value.certificateCode=obj.user.cardCode;
form.value.faceImage=obj.user.userPicture;
form.value.certificatePhoto1=obj.user.cardImgPos;
form.value.certificatePhoto2=obj.user.cardImgInv;
form.value.nation=obj.info.nation;
form.value.sex=obj.user.sex;
form.value.educationalType=obj.info.educationalType;
form.value.birthDay=obj.info.birthDay;
form.value.nativePlace=obj.info.nativePlace;
form.value.address=obj.info.address;
form.value.emergencyContact=obj.info.emergencyContact;
form.value.contactPhone=obj.info.contactPhone;
form.value.bankName=obj.info.bankName;
form.value.bankCardNo=obj.info.bankCardNo;
form.value.bankOffice=obj.info.bankOffice;
data.phoneState="edit";
open.value = true; open.value = true;
title.value = "修改劳务人员信息"; title.value = "修改劳务人员信息";
doImageUpload(); doImageUpload();
@ -567,6 +560,41 @@ function handleUpdate(row) {
}); });
} }
function showEditUser(user) {
user = user || {};
let info = tryToJson(user?.userInfos || "{}")
if (info.birthDay) {
let birthDay = dayjs(info.birthDay).format("YYYY-MM-DD");
info.birthDayStr = birthDay;
info.age = dayjs(new Date()).diff(info.birthDay, 'year');
}
form.value.userPhone = user.phonenumber
form.value.userName = user.userName;
form.value.certificateType = user.cardType;
form.value.certificateCode = user.cardCode;
form.value.faceImage = user.userPicture;
form.value.certificatePhoto1 = user.cardImgPos;
form.value.certificatePhoto2 = user.cardImgInv;
form.value.nation = info.nation;
form.value.sex = user.sex;
form.value.educationalType = info.educationalType;
form.value.birthDay = info.birthDay;
form.value.nativePlace = info.nativePlace;
form.value.address = info.address;
form.value.emergencyContact = info.emergencyContact;
form.value.contactPhone = info.contactPhone;
form.value.bankName = info.bankName;
form.value.bankCardNo = info.bankCardNo;
form.value.bankOffice = info.bankOffice;
}
function imgUrl(url){
if(url.indexOf("http://")>=0||url.indexOf("https://")>=0){
return url;
}
return location.origin+url;
}
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["proProjectInfoSubdeptsUsersRef"].validate(valid => { proxy.$refs["proProjectInfoSubdeptsUsersRef"].validate(valid => {
@ -576,36 +604,37 @@ function submitForm() {
form.value.comId = depts.length > 0 ? depts[0].comId : ''; form.value.comId = depts.length > 0 ? depts[0].comId : '';
let groups = data.deptGroups.filter(d => d.id == form.value.subDeptGroup); let groups = data.deptGroups.filter(d => d.id == form.value.subDeptGroup);
form.value.subDeptGroupName = groups.length > 0 ? groups[0].groupName : ''; form.value.subDeptGroupName = groups.length > 0 ? groups[0].groupName : '';
form.value.userId=data.userInfo?data.userInfo.userId:''; form.value.userId = data.userInfo ? data.userInfo.userId : '';
form.value.user={ form.value.user = {
userId:data.userInfo?data.userInfo.userId:'', userId: data.userInfo ? data.userInfo.userId : '',
comId:form.value.comId, comId: form.value.comId,
deptId:form.value.projectId, deptId: form.value.projectId,
nickName:form.value.userName, nickName: form.value.userName,
userName:form.value.userName, userName: form.value.userName,
userType:99, userType: 99,
cardType:form.value.certificateType, cardType: form.value.certificateType,
cardCode:form.value.certificateCode, cardCode: form.value.certificateCode,
userPicture:form.value.faceImage, userPicture: imgUrl(form.value.faceImage),
cardImgPos:form.value.certificatePhoto1, cardImgPos: form.value.certificatePhoto1,
cardImgInv:form.value.certificatePhoto2, cardImgInv: form.value.certificatePhoto2,
userInfos:JSON.stringify({nation:form.value.nation, userInfos: JSON.stringify({
educationalType:form.value.educationalType, nation: form.value.nation,
birthDay:form.value.birthDay, educationalType: form.value.educationalType,
nativePlace:form.value.nativePlace, birthDay: form.value.birthDay,
address:form.value.address, nativePlace: form.value.nativePlace,
emergencyContact:form.value.emergencyContact, address: form.value.address,
contactPhone:form.value.contactPhone, emergencyContact: form.value.emergencyContact,
bankName:form.value.bankName, contactPhone: form.value.contactPhone,
bankCardNo:form.value.bankCardNo, bankName: form.value.bankName,
bankOffice:form.value.bankOffice bankCardNo: form.value.bankCardNo,
bankOffice: form.value.bankOffice
}), }),
phonenumber:form.value.userPhone, phonenumber: form.value.userPhone,
sex:form.value.sex, sex: form.value.sex,
avatar:form.value.faceImage avatar: form.value.faceImage
}; };
if (form.value.id != null) { if (form.value.id != null) {
form.value.user.userId=form.value.userId; form.value.user.userId = form.value.userId;
updateProProjectInfoSubdeptsUsers(form.value).then(response => { updateProProjectInfoSubdeptsUsers(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功");
open.value = false; open.value = false;
@ -682,9 +711,10 @@ loadSubDepts();
.el-upload__tip { .el-upload__tip {
display: none; display: none;
} }
.el-upload-list--picture-card{
.el-upload-list__item{ .el-upload-list--picture-card {
width:240px; .el-upload-list__item {
width: 240px;
} }
} }
} }
@ -705,9 +735,10 @@ loadSubDepts();
.el-upload__tip { .el-upload__tip {
display: none; display: none;
} }
.el-upload-list--picture-card{
.el-upload-list__item{ .el-upload-list--picture-card {
width:240px; .el-upload-list__item {
width: 240px;
} }
} }
} }