fixed bug
This commit is contained in:
@@ -37,13 +37,13 @@ public class BizModule extends BaseEntity
|
|||||||
private String assignee;
|
private String assignee;
|
||||||
|
|
||||||
/** 接取时间 */
|
/** 接取时间 */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
@Excel(name = "接取时间", width = 30, dateFormat = "yyyy-MM-dd")
|
@Excel(name = "接取时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date assignTime;
|
private Date assignTime;
|
||||||
|
|
||||||
/** 完成时间 */
|
/** 完成时间 */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
@Excel(name = "完成时间", width = 30, dateFormat = "yyyy-MM-dd")
|
@Excel(name = "完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date finishTime;
|
private Date finishTime;
|
||||||
|
|
||||||
/** 删除标志0=正常,2=软删除 */
|
/** 删除标志0=正常,2=软删除 */
|
||||||
|
@@ -11,6 +11,8 @@ import com.ruoyi.models.domain.BizModule;
|
|||||||
import com.ruoyi.models.service.IBizModuleService;
|
import com.ruoyi.models.service.IBizModuleService;
|
||||||
import com.ruoyi.project.domain.BizProject;
|
import com.ruoyi.project.domain.BizProject;
|
||||||
import com.ruoyi.project.service.IBizProjectService;
|
import com.ruoyi.project.service.IBizProjectService;
|
||||||
|
import com.ruoyi.system.service.ISysUserService;
|
||||||
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模块Service业务层处理
|
* 模块Service业务层处理
|
||||||
@@ -26,6 +28,9 @@ public class BizModuleServiceImpl implements IBizModuleService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IBizProjectService projectService;
|
private IBizProjectService projectService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISysUserService sysUserService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询模块
|
* 查询模块
|
||||||
*
|
*
|
||||||
@@ -140,9 +145,17 @@ public class BizModuleServiceImpl implements IBizModuleService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.setStatus("1"); // 进行中
|
module.setStatus("1"); // 进行中
|
||||||
// 这里需要设置用户名而不是用户ID,但我们需要查询用户名
|
// 设置接取人为用户名(非ID)
|
||||||
// 暂时设置为用户ID,后续需要优化
|
try {
|
||||||
|
SysUser u = sysUserService.selectUserById(userId);
|
||||||
|
if (u != null && u.getUserName() != null) {
|
||||||
|
module.setAssignee(u.getUserName());
|
||||||
|
} else {
|
||||||
module.setAssignee(String.valueOf(userId));
|
module.setAssignee(String.valueOf(userId));
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
module.setAssignee(String.valueOf(userId));
|
||||||
|
}
|
||||||
module.setAssignTime(DateUtils.getNowDate());
|
module.setAssignTime(DateUtils.getNowDate());
|
||||||
return updateBizModule(module);
|
return updateBizModule(module);
|
||||||
}
|
}
|
||||||
|
@@ -20,10 +20,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectBizModuleVo">
|
<sql id="selectBizModuleVo">
|
||||||
select m.module_id, m.project_id, m.module_name, m.status, m.assignee, m.assign_time, m.finish_time,
|
select m.module_id,
|
||||||
m.del_flag, m.create_by, m.create_time, m.designated_user, p.project_name
|
m.project_id,
|
||||||
|
m.module_name,
|
||||||
|
m.status,
|
||||||
|
COALESCE(u1.nick_name, u1.user_name, u2.nick_name, u2.user_name, m.assignee) as assignee,
|
||||||
|
m.assign_time,
|
||||||
|
m.finish_time,
|
||||||
|
m.del_flag,
|
||||||
|
m.create_by,
|
||||||
|
m.create_time,
|
||||||
|
m.designated_user,
|
||||||
|
p.project_name
|
||||||
from biz_module m
|
from biz_module m
|
||||||
left join biz_project p on m.project_id = p.project_id
|
left join biz_project p on m.project_id = p.project_id
|
||||||
|
left join sys_user u1 on u1.user_id = CAST(m.assignee AS UNSIGNED)
|
||||||
|
left join sys_user u2 on u2.user_name = m.assignee
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectBizModuleList" parameterType="BizModule" resultMap="BizModuleResult">
|
<select id="selectBizModuleList" parameterType="BizModule" resultMap="BizModuleResult">
|
||||||
@@ -129,11 +141,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</update>
|
</update>
|
||||||
|
|
||||||
<select id="selectAssignedModules" parameterType="Long" resultMap="BizModuleResult">
|
<select id="selectAssignedModules" parameterType="Long" resultMap="BizModuleResult">
|
||||||
select m.module_id, m.project_id, m.module_name, m.status, m.assignee, m.assign_time, m.finish_time,
|
select m.module_id,
|
||||||
m.del_flag, m.create_by, m.create_time, m.designated_user, m.update_by, m.update_time,
|
m.project_id,
|
||||||
|
m.module_name,
|
||||||
|
m.status,
|
||||||
|
COALESCE(u1.nick_name, u1.user_name, u2.nick_name, u2.user_name, m.assignee) as assignee,
|
||||||
|
m.assign_time,
|
||||||
|
m.finish_time,
|
||||||
|
m.del_flag,
|
||||||
|
m.create_by,
|
||||||
|
m.create_time,
|
||||||
|
m.designated_user,
|
||||||
|
m.update_by,
|
||||||
|
m.update_time,
|
||||||
p.project_name
|
p.project_name
|
||||||
from biz_module m
|
from biz_module m
|
||||||
left join biz_project p on m.project_id = p.project_id
|
left join biz_project p on m.project_id = p.project_id
|
||||||
|
left join sys_user u1 on u1.user_id = CAST(m.assignee AS UNSIGNED)
|
||||||
|
left join sys_user u2 on u2.user_name = m.assignee
|
||||||
where m.designated_user = #{userId} and m.del_flag = '0'
|
where m.designated_user = #{userId} and m.del_flag = '0'
|
||||||
order by m.create_time desc
|
order by m.create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
@@ -248,10 +248,11 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
async initProjects() {
|
async initProjects() {
|
||||||
try {
|
try {
|
||||||
|
let options = []
|
||||||
if (this.isProjectAdmin) {
|
if (this.isProjectAdmin) {
|
||||||
// 管理员/项目管理员:读取全部可管理项目
|
// 管理员/项目管理员:读取全部可管理项目
|
||||||
const { rows } = await listProject({ pageNum: 1, pageSize: 9999 })
|
const { rows } = await listProject({ pageNum: 1, pageSize: 9999 })
|
||||||
this.projectOptions = rows || []
|
options = rows || []
|
||||||
} else if (this.isNormalUser) {
|
} else if (this.isNormalUser) {
|
||||||
// 普通用户:从“我的模块”汇总所属项目
|
// 普通用户:从“我的模块”汇总所属项目
|
||||||
const { rows } = await getMyModules({ pageNum: 1, pageSize: 9999 })
|
const { rows } = await getMyModules({ pageNum: 1, pageSize: 9999 })
|
||||||
@@ -261,7 +262,35 @@ export default {
|
|||||||
map.set(m.projectId, { projectId: m.projectId, projectName: m.projectName })
|
map.set(m.projectId, { projectId: m.projectId, projectName: m.projectName })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
this.projectOptions = Array.from(map.values())
|
options = Array.from(map.values())
|
||||||
|
}
|
||||||
|
// 兼容:若管理员接口无数据,则回退到“我的模块”聚合
|
||||||
|
if ((!options || options.length === 0)) {
|
||||||
|
const { rows } = await getMyModules({ pageNum: 1, pageSize: 9999 })
|
||||||
|
const map = new Map()
|
||||||
|
;(rows || []).forEach(m => {
|
||||||
|
if (m.projectId && m.projectName && !map.has(m.projectId)) {
|
||||||
|
map.set(m.projectId, { projectId: m.projectId, projectName: m.projectName })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
options = Array.from(map.values())
|
||||||
|
}
|
||||||
|
// 如果路由带有项目上下文,但下拉没有,补入一项,避免空列表
|
||||||
|
if ((this.currentContext.projectId && this.currentContext.projectName) && !options.some(p => String(p.projectId) === String(this.currentContext.projectId))) {
|
||||||
|
options.unshift({ projectId: this.currentContext.projectId, projectName: this.currentContext.projectName })
|
||||||
|
}
|
||||||
|
this.projectOptions = options
|
||||||
|
|
||||||
|
// 预选项目(优先使用路由上下文),并联动加载模块下拉
|
||||||
|
if (!this.upload.meta.projectId) {
|
||||||
|
if (this.currentContext.projectId) {
|
||||||
|
this.upload.meta.projectId = this.currentContext.projectId
|
||||||
|
} else if (this.projectOptions && this.projectOptions.length > 0) {
|
||||||
|
this.upload.meta.projectId = this.projectOptions[0].projectId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.upload.meta.projectId) {
|
||||||
|
await this.handleProjectChange(this.upload.meta.projectId)
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.projectOptions = []
|
this.projectOptions = []
|
||||||
@@ -287,7 +316,8 @@ export default {
|
|||||||
this.currentContext.moduleName = query.moduleName;
|
this.currentContext.moduleName = query.moduleName;
|
||||||
}
|
}
|
||||||
if (query.projectId) {
|
if (query.projectId) {
|
||||||
this.currentContext.projectId = query.projectId;
|
// 统一为数字,避免 el-select 由于类型不一致显示原始ID
|
||||||
|
this.currentContext.projectId = parseInt(query.projectId);
|
||||||
}
|
}
|
||||||
if (query.projectName) {
|
if (query.projectName) {
|
||||||
this.currentContext.projectName = query.projectName;
|
this.currentContext.projectName = query.projectName;
|
||||||
@@ -364,12 +394,30 @@ export default {
|
|||||||
this.multiple = !selection.length;
|
this.multiple = !selection.length;
|
||||||
},
|
},
|
||||||
/** 上传按钮操作 */
|
/** 上传按钮操作 */
|
||||||
handleUpload() {
|
async handleUpload() {
|
||||||
if (this.currentContext.moduleName) {
|
if (this.currentContext.moduleName) {
|
||||||
this.uploadTitle = `上传文档 - ${this.currentContext.moduleName}`;
|
this.uploadTitle = `上传文档 - ${this.currentContext.moduleName}`;
|
||||||
} else {
|
} else {
|
||||||
this.uploadTitle = "上传文档";
|
this.uploadTitle = "上传文档";
|
||||||
}
|
}
|
||||||
|
// 确保项目选项已加载,再设置默认值,避免首次显示为纯ID
|
||||||
|
if (!this.projectOptions || this.projectOptions.length === 0) {
|
||||||
|
await this.initProjects()
|
||||||
|
}
|
||||||
|
// 预选:优先使用路由上下文;否则选第一项
|
||||||
|
if (this.currentContext.projectId) {
|
||||||
|
this.upload.meta.projectId = this.currentContext.projectId
|
||||||
|
} else {
|
||||||
|
// 默认不选任何项目,避免显示成固定ID
|
||||||
|
this.upload.meta.projectId = null
|
||||||
|
}
|
||||||
|
if (this.upload.meta.projectId) {
|
||||||
|
await this.handleProjectChange(this.upload.meta.projectId)
|
||||||
|
} else {
|
||||||
|
// 无默认项目时清空模块下拉
|
||||||
|
this.moduleOptions = []
|
||||||
|
this.upload.meta.moduleId = null
|
||||||
|
}
|
||||||
this.uploadOpen = true;
|
this.uploadOpen = true;
|
||||||
},
|
},
|
||||||
/** 下载按钮操作 */
|
/** 下载按钮操作 */
|
||||||
|
@@ -43,7 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="moduleList" @selection-change="handleSelectionChange" @row-click="handleRowClick" @cell-click="handleCellClick">
|
<el-table v-loading="loading" :data="moduleList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="模块ID" align="center" prop="moduleId" />
|
<el-table-column label="模块ID" align="center" prop="moduleId" />
|
||||||
<el-table-column label="模块名称" align="center" prop="moduleName">
|
<el-table-column label="模块名称" align="center" prop="moduleName">
|
||||||
|
@@ -322,7 +322,6 @@ import { assignModule } from "@/api/project/module";
|
|||||||
import { listUser } from "@/api/system/user";
|
import { listUser } from "@/api/system/user";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import {getUserRole} from "@/api/system/role";
|
import {getUserRole} from "@/api/system/role";
|
||||||
import {getSysUser} from "@/api/system/user";
|
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { downloadDoc } from "@/api/doc/doc";
|
import { downloadDoc } from "@/api/doc/doc";
|
||||||
import { getToken } from "@/utils/auth";
|
import { getToken } from "@/utils/auth";
|
||||||
@@ -401,7 +400,11 @@ export default {
|
|||||||
{required: true, message: "模块名称不能为空", trigger: "blur"}
|
{required: true, message: "模块名称不能为空", trigger: "blur"}
|
||||||
],
|
],
|
||||||
deadline: [
|
deadline: [
|
||||||
{required: true, message: "截止日期不能为空", trigger: "blur"}
|
{required: true, message: "截止日期不能为空", trigger: "blur"},
|
||||||
|
{ validator: (rule, value, callback) => { try { const st = this.form.startTime ? moment(this.form.startTime, 'YYYY-MM-DD') : null; const dl = value ? moment(value, 'YYYY-MM-DD') : null; if (st && dl && st.isAfter(dl)) { callback(new Error('截止日期不能早于起始日期')); } else { callback(); } } catch(e){ callback(); } }, trigger: 'change' }
|
||||||
|
],
|
||||||
|
startTime: [
|
||||||
|
{ validator: (rule, value, callback) => { try { const st = value ? moment(value, 'YYYY-MM-DD') : null; const dl = this.form.deadline ? moment(this.form.deadline, 'YYYY-MM-DD') : null; if (st && dl && st.isAfter(dl)) { callback(new Error('起始日期不能晚于截止日期')); } else { callback(); } } catch(e){ callback(); } }, trigger: 'change' }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -576,21 +579,36 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
//添加模块
|
// 添加/修改模块(根据是否存在 moduleId 判断)
|
||||||
subMitModel() {
|
subMitModel() {
|
||||||
this.modelsForm.projectId = this.projectId;
|
this.modelsForm.projectId = this.projectId;
|
||||||
this.modelsForm.status = 0;//待接取
|
const isEdit = !!this.modelsForm.moduleId;
|
||||||
getSysUser(Cookies.get("username")).then(res => {
|
if (!isEdit) {
|
||||||
this.modelsForm.create_by = res.sysUser.nickName;
|
// 新增:默认待接取
|
||||||
})
|
this.modelsForm.status = 0;
|
||||||
|
// 使用当前登录用户名作为创建人
|
||||||
|
this.modelsForm.create_by = (this.$store && this.$store.state && this.$store.state.user && this.$store.state.user.name) || undefined;
|
||||||
addModels(this.modelsForm).then(res => {
|
addModels(this.modelsForm).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
this.$message.success("添加完成");
|
this.$message.success("添加完成");
|
||||||
location.reload();
|
this.Models = false;
|
||||||
|
this.getModuleList();
|
||||||
} else {
|
} else {
|
||||||
this.$message.error("添加失败,请重试")
|
this.$message.error("添加失败,请重试")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
// 修改:保留原状态/接取信息,仅更新可编辑字段
|
||||||
|
updateModels(this.modelsForm).then(res => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$message.success("修改完成");
|
||||||
|
this.Models = false;
|
||||||
|
this.getModuleList();
|
||||||
|
} else {
|
||||||
|
this.$message.error("修改失败,请重试")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
//接取模块
|
//接取模块
|
||||||
@@ -598,14 +616,12 @@ export default {
|
|||||||
this.modelsForm.moduleId = row.moduleId
|
this.modelsForm.moduleId = row.moduleId
|
||||||
//修改状态
|
//修改状态
|
||||||
this.modelsForm.status = 1; //已接取
|
this.modelsForm.status = 1; //已接取
|
||||||
getSysUser(Cookies.get("username")).then(res => {
|
this.modelsForm.assignee = (this.$store && this.$store.state && this.$store.state.user && this.$store.state.user.name) || undefined;
|
||||||
this.modelsForm.assignee = res.sysUser.nickName;
|
|
||||||
this.modelsForm.assignTime = moment().format('YYYY-MM-DD HH:mm:ss');
|
this.modelsForm.assignTime = moment().format('YYYY-MM-DD HH:mm:ss');
|
||||||
updateModels(this.modelsForm).then(ress => {
|
updateModels(this.modelsForm).then(ress => {
|
||||||
this.$message.success("已接取")
|
this.$message.success("已接取")
|
||||||
location.reload();
|
location.reload();
|
||||||
})
|
})
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
//获取当前用户角色
|
//获取当前用户角色
|
||||||
@@ -725,6 +741,13 @@ export default {
|
|||||||
this.$refs["form"].validate(valid => {
|
this.$refs["form"].validate(valid => {
|
||||||
this.finishDialog = false;
|
this.finishDialog = false;
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
// 运行时校验:起始日期不得晚于截止日期
|
||||||
|
const st = this.form.startTime ? moment(this.form.startTime, 'YYYY-MM-DD') : null
|
||||||
|
const dl = this.form.deadline ? moment(this.form.deadline, 'YYYY-MM-DD') : null
|
||||||
|
if (st && dl && st.isAfter(dl)) {
|
||||||
|
this.$modal.msgError('起始日期不能晚于截止日期')
|
||||||
|
return
|
||||||
|
}
|
||||||
if (this.form.projectId != null) {
|
if (this.form.projectId != null) {
|
||||||
console.log(this.form)
|
console.log(this.form)
|
||||||
// this.form.status = (this.form.status === '已完成' ? '1' : '0');
|
// this.form.status = (this.form.status === '已完成' ? '1' : '0');
|
||||||
@@ -824,7 +847,17 @@ export default {
|
|||||||
},
|
},
|
||||||
// 编辑模块
|
// 编辑模块
|
||||||
editModule(row) {
|
editModule(row) {
|
||||||
this.modelsForm = { ...this.modelsForm, ...row }
|
// 只拷贝前端可编辑字段,避免误传无关数据导致新增
|
||||||
|
this.modelsForm = {
|
||||||
|
moduleId: row.moduleId,
|
||||||
|
projectId: this.projectId,
|
||||||
|
moduleName: row.moduleName,
|
||||||
|
deadline: row.deadline,
|
||||||
|
status: row.status,
|
||||||
|
assignee: row.assignee,
|
||||||
|
assignTime: row.assignTime,
|
||||||
|
finishTime: row.finishTime
|
||||||
|
}
|
||||||
this.Models = true
|
this.Models = true
|
||||||
this.title = '修改模块'
|
this.title = '修改模块'
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user