考勤设备表修改

dev_xd
lj7788 2026-03-30 18:12:23 +08:00
parent e2c98b0c3a
commit 4c0425a73c
14 changed files with 214 additions and 65 deletions

View File

@ -30,3 +30,38 @@ AND enabled = 1
LIMIT 1
)
WHERE a.cfg_id IS NULL;
### 3.性能优化
-- 主表复合索引
CREATE INDEX idx_pro_mobile_attendance_project_att ON pro_mobile_attendance_data(project_id, att_date DESC, id DESC);
-- 用户表索引
CREATE INDEX idx_pro_project_users_id ON pro_project_info_subdepts_users(user_id);
-- 字典表索引
CREATE INDEX idx_sys_dict_type_value ON sys_dict_data(dict_type, dict_value);
### 4.给attendance_cfg表中增加cfg_name varchar(100) 用于保存配置名称,前端是必填
更新历史数据
update attendance_cfg set cfg_name='默认配置'
### 5.attendance_ubi_device表增加cfg_id int 配置编号
更新历史数据
UPDATE attendance_ubi_device ud
SET cfg_id = (
SELECT id
FROM attendance_cfg
WHERE project_id = ud.project_id
AND com_id = ud.com_id
AND is_default = 1
AND enabled = 1
LIMIT 1
)
WHERE ud.cfg_id IS NULL;

View File

@ -0,0 +1,12 @@
-- 更新attendance_ubi_device表的cfg_id根据project_id和com_id从attendance_cfg中找到默认配置ID
UPDATE attendance_ubi_device ud
SET cfg_id = (
SELECT id
FROM attendance_cfg
WHERE project_id = ud.project_id
AND com_id = ud.com_id
AND is_default = 1
AND enabled = 1
LIMIT 1
)
WHERE ud.cfg_id IS NULL;

View File

@ -25,6 +25,10 @@ public class AttendanceCfg extends BaseEntity
@Excel(name = "分包单位")
private Long projectId;
/** 配置名称 */
@Excel(name = "配置名称")
private String cfgName;
/** 厂商编号(参考字典attendance_vendors) */
@Excel(name = " 厂商编号(参考字典attendance_vendors)")
private String vendorsCode;
@ -95,6 +99,15 @@ public class AttendanceCfg extends BaseEntity
{
return projectId;
}
public void setCfgName(String cfgName)
{
this.cfgName = cfgName;
}
public String getCfgName()
{
return cfgName;
}
public void setVendorsCode(String vendorsCode)
{
this.vendorsCode = vendorsCode;

View File

@ -47,6 +47,10 @@ public class AttendanceUbiDevice extends BaseEntity
@Excel(name = "设备序列号")
private String deviceNo;
/** 配置编号 */
@Excel(name = "配置编号")
private Long cfgId;
/** 扩展字段uface 设备recType 设备的识别方式, 默认为 1 */
@Excel(name = "扩展字段", readConverterExp = "u=face,设=备recType,设=备的识别方式,,默=认为,1=")
private String addition;
@ -225,6 +229,15 @@ public class AttendanceUbiDevice extends BaseEntity
{
return deviceNo;
}
public void setCfgId(Long cfgId)
{
this.cfgId = cfgId;
}
public Long getCfgId()
{
return cfgId;
}
public void setAddition(String addition)
{
this.addition = addition;

View File

@ -70,8 +70,4 @@ public interface AttendanceCfgMapper
*/
AttendanceCfg selectDefaultCfgByProjectAndCom(@Param("projectId") Long projectId, @Param("comId") Long comId);
/**
*
*/
AttendanceCfg selectDefaultCfgByDeviceNo(@Param("deviceNo") String deviceNo);
}

View File

@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="comId" column="com_id" />
<result property="deptId" column="dept_id" />
<result property="projectId" column="project_id" />
<result property="cfgName" column="cfg_name" />
<result property="vendorsCode" column="vendors_code" />
<result property="vendorsParameter" column="vendors_parameter" />
<result property="enabled" column="enabled" />
@ -27,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectAttendanceCfgVo">
SELECT ac.id, ac.com_id, ac.project_id, ac.vendors_code, ac.vendors_parameter, ac.enabled, ac.is_default, ac.state, ac.remark, ac.is_del, ac.create_by, ac.create_time, ac.update_by
SELECT ac.id, ac.com_id, ac.project_id, ac.cfg_name, ac.vendors_code, ac.vendors_parameter, ac.enabled, ac.is_default, 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,sd.sub_dept_name dept_name,ac.dept_id
FROM attendance_cfg ac
LEFT JOIN sys_dept dp ON ac.`com_id`=dp.`dept_id`
@ -46,6 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="enabled != null "> and ac.enabled = #{enabled}</if>
<if test="state != null "> and ac.state = #{state}</if>
<if test="isDel != null "> and ac.is_del = #{isDel}</if>
<if test="cfgName != null and cfgName != ''"> and ac.cfg_name = #{cfgName}</if>
</where>
</select>
@ -64,6 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="vendorsParameter != null">vendors_parameter,</if>
<if test="enabled != null">enabled,</if>
<if test="isDefault != null">is_default,</if>
<if test="cfgName != null">cfg_name,</if>
<if test="state != null">state,</if>
<if test="remark != null">remark,</if>
<if test="isDel != null">is_del,</if>
@ -80,6 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="vendorsParameter != null">#{vendorsParameter},</if>
<if test="enabled != null">#{enabled},</if>
<if test="isDefault != null">#{isDefault},</if>
<if test="cfgName != null">#{cfgName},</if>
<if test="state != null">#{state},</if>
<if test="remark != null">#{remark},</if>
<if test="isDel != null">#{isDel},</if>
@ -100,6 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="vendorsParameter != null">vendors_parameter = #{vendorsParameter},</if>
<if test="enabled != null">enabled = #{enabled},</if>
<if test="isDefault != null">is_default = #{isDefault},</if>
<if test="cfgName != null">cfg_name = #{cfgName},</if>
<if test="state != null">state = #{state},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="isDel != null">is_del = #{isDel},</if>
@ -130,16 +135,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where ac.project_id = #{projectId} and ac.com_id = #{comId} and ac.is_default = 1 and ac.enabled = 1
limit 1
</select>
<select id="selectDefaultCfgByDeviceNo" resultMap="AttendanceCfgResult">
<include refid="selectAttendanceCfgVo"/>
where exists (
select 1 from attendance_ubi_device ad
where ad.device_no = #{deviceNo}
and ad.project_id = ac.project_id
and ad.com_id = ac.com_id
)
and ac.is_default = 1 and ac.enabled = 1
limit 1
</select>
</mapper>

View File

@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="sceneGuid" column="scene_guid" />
<result property="source" column="source" />
<result property="deviceNo" column="device_no" />
<result property="cfgId" column="cfg_id" />
<result property="addition" column="addition" />
<result property="bindDefaultScene" column="bind_default_scene" />
<result property="forceEmptyDevice" column="force_empty_device" />
@ -41,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectAttendanceUbiDeviceVo">
select ud.id, ud.com_id, ud.project_id, ud.name, ud.tag, ud.scene_guid, ud.source, ud.device_no, ud.addition, ud.bind_default_scene, ud.force_empty_device,
select ud.id, ud.com_id, ud.project_id, ud.name, ud.tag, ud.scene_guid, ud.source, ud.device_no, ud.cfg_id, ud.addition, ud.bind_default_scene, ud.force_empty_device,
ud.direction,ud.channel,
ud.work_area_id,
ud.device_model, ud.device_state, ud.rec_type, ud.online_state, ud.version_no, ud.last_active_time, ud.has_register, ud.state, ud.remark, ud.is_del,
@ -75,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="hasRegister != null "> and ud.has_register = #{hasRegister}</if>
<if test="state != null "> and ud.state = #{state}</if>
<if test="isDel != null "> and ud.is_del = #{isDel}</if>
<if test="cfgId != null "> and ud.cfg_id = #{cfgId}</if>
</where>
</select>
@ -93,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="id != null">id,</if>
<if test="comId != null">com_id,</if>
<if test="projectId != null">project_id,</if>
<if test="cfgId != null">cfg_id,</if>
<if test="name != null">name,</if>
<if test="tag != null">tag,</if>
<if test="sceneGuid != null">scene_guid,</if>
@ -124,6 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="id != null">#{id},</if>
<if test="comId != null">#{comId},</if>
<if test="projectId != null">#{projectId},</if>
<if test="cfgId != null">#{cfgId},</if>
<if test="name != null">#{name},</if>
<if test="tag != null">#{tag},</if>
<if test="sceneGuid != null">#{sceneGuid},</if>
@ -158,11 +162,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="SET" suffixOverrides=",">
<if test="comId != null">com_id = #{comId},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="cfgId != null">cfg_id = #{cfgId},</if>
<if test="name != null">name = #{name},</if>
<if test="tag != null">tag = #{tag},</if>
<if test="sceneGuid != null">scene_guid = #{sceneGuid},</if>
<if test="source != null">source = #{source},</if>
<if test="deviceNo != null">device_no = #{deviceNo},</if>
<if test="cfgId != null">cfg_id = #{cfgId},</if>
<if test="addition != null">addition = #{addition},</if>
<if test="bindDefaultScene != null">bind_default_scene = #{bindDefaultScene},</if>
<if test="forceEmptyDevice != null">force_empty_device = #{forceEmptyDevice},</if>

View File

@ -128,8 +128,7 @@ public class UniCallBackController {
return AjaxResult.error("没有查询到设备No");
}
AttendanceCfg cfg = attendanceCfgService.selectDefaultCfgByDeviceNo(deviceNo);
Long cfgId = (cfg != null && cfg.getId() != null) ? cfg.getId() : 0L;
Long cfgId =device.getCfgId();
ProMobileAttendanceData attendanceData=new ProMobileAttendanceData();
attendanceData.setCfgId(cfgId);
if(list.size()==0){

View File

@ -74,8 +74,4 @@ public interface IAttendanceCfgService
*/
AttendanceCfg getDefaultAttendanceCfg(Long projectId, Long comId);
/**
*
*/
AttendanceCfg selectDefaultCfgByDeviceNo(String deviceNo);
}

View File

@ -56,15 +56,18 @@ public class AttendanceCfgServiceImpl implements IAttendanceCfgService
@Override
public int insertAttendanceCfg(AttendanceCfg attendanceCfg)
{
// 检查配置名称在同一项目下是否唯一
AttendanceCfg query = new AttendanceCfg();
query.setProjectId(attendanceCfg.getProjectId());
query.setComId(attendanceCfg.getComId());
query.setCfgName(attendanceCfg.getCfgName());
List<AttendanceCfg> cfgs = attendanceCfgMapper.selectAttendanceCfgList(query);
if(cfgs.size()>0){
throw new ServiceException("当前项目已配置考勤信息...");
throw new ServiceException("当前项目存在相同名称的配置...");
}
if(attendanceCfg.getEnabled() != null || attendanceCfg.getEnabled() == 0L){
if(attendanceCfg.getEnabled() != null && attendanceCfg.getEnabled() == 0L){
attendanceCfg.setIsDefault(0L);
} else if(attendanceCfg.getIsDefault() == null){
attendanceCfg.setIsDefault(1L);
@ -84,8 +87,23 @@ public class AttendanceCfgServiceImpl implements IAttendanceCfgService
@Override
public int updateAttendanceCfg(AttendanceCfg attendanceCfg)
{
if(attendanceCfg.getIsDefault() != null && attendanceCfg.getIsDefault() == 1L){
// 检查配置名称在同一项目下是否唯一(排除当前配置)
AttendanceCfg currentCfg = attendanceCfgMapper.selectAttendanceCfgById(attendanceCfg.getId());
if(currentCfg != null && !currentCfg.getCfgName().equals(attendanceCfg.getCfgName())){
AttendanceCfg query = new AttendanceCfg();
query.setProjectId(currentCfg.getProjectId());
query.setComId(currentCfg.getComId());
query.setCfgName(attendanceCfg.getCfgName());
List<AttendanceCfg> cfgs = attendanceCfgMapper.selectAttendanceCfgList(query);
for(AttendanceCfg cfg : cfgs){
if(!cfg.getId().equals(attendanceCfg.getId())){
throw new ServiceException("当前项目下已存在相同名称的配置...");
}
}
}
if(attendanceCfg.getIsDefault() != null && attendanceCfg.getIsDefault() == 1L){
if(currentCfg != null && currentCfg.getProjectId() != null){
AttendanceCfg query = new AttendanceCfg();
query.setProjectId(currentCfg.getProjectId());
@ -99,8 +117,9 @@ public class AttendanceCfgServiceImpl implements IAttendanceCfgService
}
}
AttendanceCfg currentCfg = attendanceCfgMapper.selectAttendanceCfgById(attendanceCfg.getId());
if(currentCfg != null && currentCfg.getIsDefault() != null && currentCfg.getIsDefault() == 1L && attendanceCfg.getIsDefault() != null){
// 已在方法开头获取过currentCfg无需重复获取
// AttendanceCfg currentCfg = attendanceCfgMapper.selectAttendanceCfgById(attendanceCfg.getId());
if(currentCfg != null && currentCfg.getIsDefault() != null && currentCfg.getIsDefault() == 1L && attendanceCfg.getIsDefault() != null && attendanceCfg.getIsDefault() == 0L){
throw new ServiceException("不能修改唯一默认配置为非默认");
}
@ -185,11 +204,4 @@ public class AttendanceCfgServiceImpl implements IAttendanceCfgService
return attendanceCfgMapper.selectDefaultCfgByProjectAndCom(projectId, comId);
}
/**
*
*/
@Override
public AttendanceCfg selectDefaultCfgByDeviceNo(String deviceNo) {
return attendanceCfgMapper.selectDefaultCfgByDeviceNo(deviceNo);
}
}

View File

@ -7,6 +7,7 @@ import okhttp3.*;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class UniUtils {
public static final String UNIBASE="http://wo-api.uni-ubi.com/";
@ -26,6 +27,12 @@ public class UniUtils {
public static final String AUTHDEVICE=UNIBASE+"v2/auth/device";
public static final String AUTHDEVICEUPDATE=UNIBASE+"v2/auth/device/update";
public static final String AUTHDEVICEREVOKE=UNIBASE+"v2/auth/device/revoke";
private static final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.build();
public static String getAuthUrl(String projectGuid){
return UNIBASE+ "/v1/"+projectGuid+"/auth";
}
@ -47,7 +54,6 @@ public class UniUtils {
}
public static String getResult(Request request) {
OkHttpClient client = new OkHttpClient();
Response response;
try {
response = client.newCall(request).execute();

View File

@ -5,13 +5,17 @@
<el-input v-model="queryParams.comId" placeholder="请输入所属公司" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="所属项目" prop="projectId">
<el-select :disabled="data.currentPrjId != ''" v-model="queryParams.projectId" placeholder="请选择所属项目" clearable style="width:192px;" @change="handleQuery">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id"></el-option>
<el-select :disabled="data.currentPrjId != ''" v-model="queryParams.projectId" placeholder="请选择所属项目"
clearable style="width:192px;" @change="handleQuery">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName"
:value="prj.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="考勤厂商" prop="vendorsCode">
<el-select v-model="queryParams.vendorsCode" placeholder="请选择厂商" clearable @change="handleQuery" style="width:192px;">
<el-option v-for="dict in attendance_vendors" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
<el-select v-model="queryParams.vendorsCode" placeholder="请选择厂商" clearable @change="handleQuery"
style="width:192px;">
<el-option v-for="dict in attendance_vendors" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="启停状态" prop="enabled">
@ -28,7 +32,8 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:attendance_cfg:add']"></el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:attendance_cfg:add']">新增</el-button>
</el-col>
<!--
<el-col :span="1.5">
@ -51,6 +56,7 @@
<el-table-column label="NO." align="center" prop="id" />
<el-table-column label="所属公司" align="center" prop="compName" />
<el-table-column label="所属项目" align="center" prop="projectName" />
<el-table-column label="配置名称" align="center" prop="cfgName" />
<el-table-column label="考勤厂商" align="center" prop="vendorsName">
<template #default="scope">
<span style="color: var(--el-color-warning);">{{ scope.row.vendorsName }}</span>
@ -67,7 +73,8 @@
</el-table-column>
<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>
<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" prop="isDefault">
@ -85,26 +92,40 @@
<el-table-column label="添加用户" align="center" prop="createBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="240">
<template #default="scope">
<el-button link type="primary" v-if="scope.row.vendorsCode=='uni'" icon="Football" @click="handleDeviceList(scope.row)" v-hasPermi="['manage:attendance_cfg:edit']"></el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:attendance_cfg:edit']"></el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:attendance_cfg:remove']"></el-button>
<el-button link type="primary" v-if="scope.row.vendorsCode == 'uni'" icon="Football"
@click="handleDeviceList(scope.row)"
v-hasPermi="['manage:attendance_cfg:edit']">设备列表</el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:attendance_cfg:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['manage:attendance_cfg:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
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="120px" :key="data.formKey">
<el-form-item label="配置名称" prop="cfgName" required>
<el-input v-model="form.cfgName" placeholder="请输入配置名称" style="width:300px;" />
</el-form-item>
<el-form-item label="所属项目" prop="projectId">
<el-select :disabled="data.currentPrjId != ''||data.mode=='edit'" v-model="form.projectId" placeholder="请选择项目" style="width:300px;">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id"></el-option>
<el-select :disabled="data.currentPrjId != '' || data.mode == 'edit'" v-model="form.projectId"
placeholder="请选择项目" style="width:300px;">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName"
:value="prj.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="考勤厂商" prop="vendorsCode">
<el-select v-model="form.vendorsCode" placeholder="请选择厂商" @change="vendorsCodeChange" :disabled="data.mode=='edit'">
<el-option v-for="dict in attendance_vendors" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
<el-select v-model="form.vendorsCode" placeholder="请选择厂商" @change="vendorsCodeChange"
:disabled="data.mode == 'edit'">
<el-option v-for="dict in attendance_vendors" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<template v-if="form.vendorsCode == 'uni'">
@ -211,6 +232,7 @@ const data = reactive({
})
let rules = reactive({
projectId: [{ required: true, trigger: ['blur', 'change'], message: '请选择所属项目' }],
cfgName: [{ required: true, trigger: ['blur', 'change'], message: '请输入配置名称' }],
vendorsCode: [{ required: true, trigger: ['blur', 'change'], message: '请选择考勤厂商' }],
AppKey: [{ required: true, trigger: ['blur', 'change'], message: '请输入应用KEY' }],
AppSecret: [{ required: true, trigger: ['blur', 'change'], message: '请输入应用Secret' }],
@ -223,6 +245,7 @@ function vendorsCodeChange() {
if (form.value.vendorsCode == 'uni') {
rules = {
projectId: [{ required: true, trigger: ['blur', 'change'], message: '请选择所属项目' }],
cfgName: [{ required: true, trigger: ['blur', 'change'], message: '请输入配置名称' }],
vendorsCode: [{ required: true, trigger: ['blur', 'change'], message: '请选择考勤厂商' }],
AppKey: [{ required: true, trigger: ['blur', 'change'], message: '请输入应用KEY' }],
AppSecret: [{ required: true, trigger: ['blur', 'change'], message: '请输入应用Secret' }],
@ -231,6 +254,7 @@ function vendorsCodeChange() {
} else if (form.value.vendorsCode == 'jgw') {
rules = {
projectId: [{ required: true, trigger: 'blur', message: '请选择' }],
cfgName: [{ required: true, trigger: 'blur', message: '请输入配置名称' }],
subDeptId: [{ required: true, trigger: 'blur', message: '请选择' }],
appId: [{ required: true, trigger: 'blur', message: '请输入' }],
secret: [{ required: true, trigger: 'blur', message: '请输入' }],
@ -241,6 +265,7 @@ function vendorsCodeChange() {
} else if (form.value.vendorsCode == 'szj') {
rules = {
projectId: [{ required: true, trigger: 'blur', message: '请选择' }],
cfgName: [{ required: true, trigger: 'blur', message: '请输入配置名称' }],
subDeptId: [{ required: true, trigger: 'blur', message: '请选择' }],
appId: [{ required: true, trigger: 'blur', message: '请输入' }],
secret: [{ required: true, trigger: 'blur', message: '请输入' }],
@ -249,6 +274,7 @@ function vendorsCodeChange() {
} else if (form.value.vendorsCode == 'gld') {
rules = {
projectId: [{ required: true, trigger: 'blur', message: '请选择' }],
cfgName: [{ required: true, trigger: 'blur', message: '请输入配置名称' }],
subDeptId: [{ required: true, trigger: 'blur', message: '请选择' }],
appId: [{ required: true, trigger: 'blur', message: '请输入' }],
secret: [{ required: true, trigger: 'blur', message: '请输入' }],
@ -258,6 +284,7 @@ function vendorsCodeChange() {
} else {
rules = {
projectId: [{ required: true, trigger: 'blur', message: '请选择' }],
cfgName: [{ required: true, trigger: 'blur', message: '请输入配置名称' }],
subDeptId: [{ required: true, trigger: 'blur', message: '请选择' }],
appId: [{ required: true, trigger: 'blur', message: '请输入' }],
secret: [{ required: true, trigger: 'blur', message: '请输入' }],

View File

@ -8,6 +8,12 @@
:value="prj.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="考勤配置" prop="cfgId" v-if="data.cfgOptions.length > 0">
<el-select v-model="queryParams.cfgId" placeholder="请选择考勤配置" clearable style="width: 300px;">
<el-option v-for="cfg in data.cfgOptions" :key="cfg.id" :label="cfg.cfgName"
:value="cfg.id" />
</el-select>
</el-form-item>
<el-form-item label="设备名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
@ -132,6 +138,12 @@
:props="{ value: 'id', label: 'title', children: 'children' }" value-key="id"
placeholder="请选择工区" clearable style="width:300px;" />
</el-form-item>
<el-form-item label="考勤配置" prop="cfgId" v-if="data.cfgOptions.length > 0">
<el-select v-model="form.cfgId" placeholder="请选择考勤配置" clearable style="width: 300px;">
<el-option v-for="cfg in data.cfgOptions" :key="cfg.id" :label="cfg.cfgName"
:value="cfg.id" />
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
@ -155,6 +167,7 @@ import {
updateAttendance_ubi_device,
authAttendance_ubi_device,
} from '@/api/manage/attendanceubidevice'
import { listAttendance_cfg } from '@/api/manage/attendancecfg'
import useUserStore from '@/store/modules/user'
import { findMyProjectList } from '@/api/publics'
import { workAreaTree, transformTreeData } from '@/api/system/workAarea'
@ -181,6 +194,7 @@ const data = reactive({
projectId: null,
name: null,
tag: null,
cfgId: null,
sceneGuid: null,
source: null,
deviceNo: null,
@ -204,12 +218,14 @@ const data = reactive({
source: [{ required: true, trigger: ['blur', 'change'], message: '请选择设备来源' }],
deviceNo: [{ required: true, trigger: ['blur', 'change'], message: '请输入设备序列号' }],
workAreaId: [{ required: false, trigger: 'blur', message: '请选择所属工区' }],
cfgId: [{ required: true, trigger: ['blur', 'change'], message: '请选择考勤配置' }],
},
projects: [],
currentPrjId: '',
mode: '',
workAreaOptions: [],
submitLoading: false,
cfgOptions: [],
})
const { queryParams, form, rules } = toRefs(data)
@ -279,6 +295,7 @@ function reset() {
remark: null,
isDel: null,
workAreaId: null,
cfgId: null,
createBy: null,
createTime: null,
updateBy: null,
@ -316,6 +333,7 @@ function handleAdd() {
form.value.projectId = userStore.currentPrjId
form.value.projectName = userStore.currentProName
form.value.source = ubi_device_source.value[0].value
getCfgList()
open.value = true
title.value = '添加宇泛的设备信息'
}
@ -330,6 +348,7 @@ function handleUpdate(row) {
const _id = row.id || ids.value
getAttendance_ubi_device(_id).then((response) => {
form.value = response.data
getCfgList()
open.value = true
title.value = '修改宇泛的设备信息'
})
@ -395,8 +414,18 @@ function getWorkAreaTree() {
});
}
/** 查询配置项列表 */
function getCfgList() {
listAttendance_cfg({ projectId: userStore.currentPrjId, pageNum: 1, pageSize: 100 }).then(response => {
data.cfgOptions = response.rows || []
queryParams.value.cfgId = data.cfgOptions[0]?.id || null
getList()
});
}
getProjectList()
getWorkAreaTree()
getCfgList()
</script>

View File

@ -110,7 +110,8 @@
</el-select>
</el-form-item>
<el-form-item label="所属工区" prop="workAreaId" v-if="data.workAreaOptions && data.workAreaOptions.length > 0">
<el-form-item label="所属工区" prop="workAreaId"
v-if="data.workAreaOptions && data.workAreaOptions.length > 0">
<el-tree-select v-model="form.workAreaId" :data="data.workAreaOptions"
:props="{ value: 'id', label: 'title', children: 'children' }" value-key="id"
placeholder="请选择工区" clearable style="width:300px;" />
@ -122,8 +123,8 @@
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm" :loading="submitLoading"> </el-button>
<el-button @click="cancel" :disabled="submitLoading"> </el-button>
</div>
</template>
</el-dialog>
@ -144,6 +145,7 @@ const workAreaList = ref([]);
const workAreaOptions = ref([]);
const open = ref(false);
const loading = ref(true);
const submitLoading = ref(false);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
@ -191,6 +193,8 @@ function handleAuth(row) {
/** 查询宇泛的设备信息列表 */
function getList() {
queryParams.value.cfgId = data.row.id;
queryParams.value.projectId = data.row.projectId
loading.value = true;
listAttendance_ubi_device(queryParams.value).then(response => {
@ -288,19 +292,27 @@ function handleUpdate(row) {
function submitForm() {
proxy.$refs["attendance_ubi_deviceRef"].validate(valid => {
if (valid) {
submitLoading.value = true;
form.value.comId = data.row.comId;
form.value.name = form.value.deviceNo;
form.value.cfgId = data.row.id;
if (form.value.id != null) {
updateAttendance_ubi_device(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
submitLoading.value = false;
getList();
}).catch(() => {
submitLoading.value = false;
});
} else {
addAttendance_ubi_device(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
submitLoading.value = false;
getList();
}).catch(() => {
submitLoading.value = false;
});
}
}