dev_xd
姜玉琦 2025-02-11 23:12:01 +08:00
commit e6cc6dbf52
6 changed files with 230 additions and 164 deletions

View File

@ -21,17 +21,17 @@ public class GreenCarbonItem extends BaseEntity
@Excel(name = "ID(有ID进行更新,无ID进行增加)") @Excel(name = "ID(有ID进行更新,无ID进行增加)")
private Long id; private Long id;
@Excel(name = "公司")
private String compName; private String compName;
/** 公司主键 */ /** 公司主键 */
@Excel(name = "公司ID")
private Long comId; private Long comId;
@Excel(name = "分包单位")
private String projectName; private String projectName;
/** $column.columnComment */ /** $column.columnComment */
/** 分包单位 */ /** 分包单位 */
@Excel(name = "分包单位ID")
private Long projectId; private Long projectId;
/** 碳因子类型 */ /** 碳因子类型 */

View File

@ -80,7 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_ext ex on u.user_id=ex.user_id left join sys_user_ext ex on u.user_id=ex.user_id
where u.del_flag = '0' and u.user_type= '00' where u.del_flag = '0'
<if test="userId != null and userId != 0"> <if test="userId != null and userId != 0">
AND u.user_id = #{userId} AND u.user_id = #{userId}
</if> </if>

View File

@ -4,6 +4,7 @@ import java.io.*;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.List; import java.util.List;
import cn.hutool.core.util.NumberUtil;
import com.yanzhu.common.core.utils.poi.ExcelUtil; import com.yanzhu.common.core.utils.poi.ExcelUtil;
import com.yanzhu.common.core.web.controller.BaseController; import com.yanzhu.common.core.web.controller.BaseController;
import com.yanzhu.common.core.web.domain.AjaxResult; import com.yanzhu.common.core.web.domain.AjaxResult;
@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/** /**
@ -80,12 +82,20 @@ public class GreenCarbonItemController extends BaseController
@RequiresPermissions("manage:greenCarbonItem:import") @RequiresPermissions("manage:greenCarbonItem:import")
@Log(title = "碳因子管理", businessType = BusinessType.IMPORT) @Log(title = "碳因子管理", businessType = BusinessType.IMPORT)
@PostMapping("/import") @PostMapping("/import")
public AjaxResult importData(HttpServletResponse response,MultipartFile file) throws Exception { public AjaxResult importData(HttpServletResponse response, MultipartFile file, HttpServletRequest request) throws Exception {
ExcelUtil<GreenCarbonItem> util = new ExcelUtil<GreenCarbonItem>(GreenCarbonItem.class); ExcelUtil<GreenCarbonItem> util = new ExcelUtil<GreenCarbonItem>(GreenCarbonItem.class);
List<GreenCarbonItem> list= util.importExcel(file.getInputStream()); List<GreenCarbonItem> list= util.importExcel(file.getInputStream());
GreenCarbonItem where=new GreenCarbonItem(); GreenCarbonItem where=new GreenCarbonItem();
List<GreenCarbonItem> findList; List<GreenCarbonItem> findList;
long prjId= NumberUtil.parseLong(request.getParameter("prjId"),0l);
long comId= NumberUtil.parseLong(request.getParameter("comId"),0l);
for (GreenCarbonItem item : list){ for (GreenCarbonItem item : list){
if(prjId==0||comId==0){
item.setRemark("无效的项目ID或租户ID");
continue;
}
item.setProjectId(prjId);
item.setComId(comId);
if(item.getId()==null|| item.getId().equals(0l)){ if(item.getId()==null|| item.getId().equals(0l)){
where.setComId(item.getComId()); where.setComId(item.getComId());
where.setProjectId(item.getProjectId()); where.setProjectId(item.getProjectId());
@ -93,7 +103,12 @@ public class GreenCarbonItemController extends BaseController
where.setCarbonFactorType(item.getCarbonFactorType()); where.setCarbonFactorType(item.getCarbonFactorType());
findList=greenCarbonItemService.selectGreenCarbonItemList(where); findList=greenCarbonItemService.selectGreenCarbonItemList(where);
if(findList.size()>0){ if(findList.size()>0){
item.setRemark("当前项目已存在相同数据!"); findList.stream().forEach(item1->{
item1.setUnit(item.getUnit());
item1.setCarbonFactor(item.getCarbonFactor());
greenCarbonItemService.updateGreenCarbonItem(item1);
});
item.setRemark("修改成功!当前项目已存在相同数据!");
} else{ } else{
greenCarbonItemService.insertGreenCarbonItem(item); greenCarbonItemService.insertGreenCarbonItem(item);
item.setRemark("增加成功!"); item.setRemark("增加成功!");
@ -103,8 +118,8 @@ public class GreenCarbonItemController extends BaseController
if(old==null){ if(old==null){
item.setRemark("无效ID"); item.setRemark("无效ID");
}else{ }else{
where.setComId(item.getComId()); where.setComId(old.getComId());
where.setProjectId(item.getProjectId()); where.setProjectId(old.getProjectId());
where.setCarbonName(item.getCarbonName()); where.setCarbonName(item.getCarbonName());
where.setCarbonFactorType(item.getCarbonFactorType()); where.setCarbonFactorType(item.getCarbonFactorType());
findList = greenCarbonItemService.selectGreenCarbonItemList(where); findList = greenCarbonItemService.selectGreenCarbonItemList(where);

View File

@ -36,14 +36,14 @@
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['manage:greenCarbonItem:remove']">删除</el-button> v-hasPermi="['manage:greenCarbonItem:remove']">删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5" v-if="userStore.currentPrjId">
<el-upload ref="uploadRef" :limit="1" accept=".xlsx" :headers="upload.headers" v-hasPermi="['manage:greenCarbonItem:import']" <el-upload ref="uploadRef" :limit="1" accept=".xlsx" :headers="upload.headers" v-hasPermi="['manage:greenCarbonItem:import']"
:action="upload.url" :disabled="upload.isUploading" :action="upload.url" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="true"> :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="true">
<el-button type="primary" v-loading="upload.isUploading" >导入</el-button> <el-button type="primary" v-loading="upload.isUploading" >导入</el-button>
</el-upload> </el-upload>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5" v-if="userStore.currentPrjId">
<el-button type="success" plain icon="Download" @click="handleExport" <el-button type="success" plain icon="Download" @click="handleExport"
v-hasPermi="['manage:greenCarbonItem:export']">导出</el-button> v-hasPermi="['manage:greenCarbonItem:export']">导出</el-button>
</el-col> </el-col>
@ -132,7 +132,7 @@
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer" style="text-align: center;"> <div class="dialog-footer" style="text-align: center;">
<el-button type="primary" @click="data.openImport=false"> </el-button> <el-button type="primary" @click="doImportOk"> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -364,10 +364,15 @@ const handleFileSuccess = (response, file, fileList) => {
} }
}; };
function doImportOk(){
data.openImport=false
getList();
}
getProjectList(()=>{ getProjectList(()=>{
getList(); getList();
upload.url=import.meta.env.VITE_APP_BASE_API + "/manage/greenCarbonItem/import?prjId="+userStore.currentPrjId+"&comId="+userStore.currentComId;
}); });
</script> </script>
<style type="scss"> <style type="scss">

View File

@ -95,12 +95,18 @@
<el-table-column label="三级安全教育" align="center" class-name="small-padding fixed-width" width="100"> <el-table-column label="三级安全教育" align="center" class-name="small-padding fixed-width" width="100">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.subDeptType == '4' || scope.row.subDeptType == '5'"> <div v-if="scope.row.subDeptType == '4' || scope.row.subDeptType == '5'">
<el-button v-if="scope.row.eduStatus=='0'" link type="primary" icon="Link" @click="handleDownloadFile(scope.row)"></el-button> <el-button v-if="scope.row.eduStatus == '0'" link type="primary" icon="Link"
@click="handleDownloadFile(scope.row)">查看</el-button>
<el-button v-if="scope.row.eduStatus != '0'" link type="warning" disabled>未完成</el-button> <el-button v-if="scope.row.eduStatus != '0'" link type="warning" disabled>未完成</el-button>
</div> </div>
<el-button v-if="scope.row.subDeptType != '4' && scope.row.subDeptType != '5'" link disabled> - </el-button> <el-button v-if="scope.row.subDeptType != '4' && scope.row.subDeptType != '5'" link disabled> - </el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="人员岗位" align="center" prop="craftPost">
<template #default="scope">
{{ getWorkType(scope.row.workType) }}
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="useStatus"> <el-table-column label="状态" align="center" prop="useStatus">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.useStatus == 0" style="color: green;"></span> <span v-if="scope.row.useStatus == 0" style="color: green;"></span>
@ -133,7 +139,7 @@
<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" <el-form v-loading="loading" ref="proProjectInfoSubdeptsUsersRef" :model="form" :rules="rules" label-width="120px"
style="position: relative;"> style="position: relative;">
<el-row v-if="data.phoneState || true"> <el-row v-if="data.phoneState || true">
@ -194,13 +200,14 @@
<span style="margin-left:10px;color:#999;">此电话号码将用作登录</span> <span style="margin-left:10px;color:#999;">此电话号码将用作登录</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="form.userPost==66">
<el-form-item label="用户岗位" prop="workType"> <el-form-item label="用户岗位" prop="workType">
<el-select v-model="form.userWorkType" style="width:40%" @change="doWorkTypeChange"> <el-select v-model="form.userWorkType" style="width:40%" @change="doWorkTypeChange">
<el-option v-for="item in data.prjWorkCategories" :key="item" :label="item" <el-option v-for="item in data.prjWorkCategories" :key="item" :label="item"
:value="item"></el-option> :value="item"></el-option>
</el-select> </el-select>
<el-select v-model="form.workType" placeholder="请选择用户岗位" style="width:calc(60% - 12px);margin-left:10px;"> <el-select v-model="form.workType" placeholder="请选择用户岗位"
style="width:calc(60% - 12px);margin-left:10px;">
<el-option v-for="item in data.prjWorkTypes" :key="item.value" :label="item.label" <el-option v-for="item in data.prjWorkTypes" :key="item.value" :label="item.label"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
@ -225,8 +232,8 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="工种" v-if="data.isManager" prop="craftPost"> <el-form-item label="工种" v-if="data.isManager" prop="craftPost">
<el-select v-model="form.craftPost"> <el-select v-model="form.craftPost">
<el-option v-for="dict in data.craftPostList" :key="dict.value" <el-option v-for="dict in data.craftPostList" :key="dict.value" :label="dict.label"
:label="dict.label" :value="dict.value" /> :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="工种" v-else> <el-form-item label="工种" v-else>
@ -241,7 +248,8 @@
</el-form-item></el-col> </el-form-item></el-col>
<el-col :span="12"><el-form-item label="性别"> <el-col :span="12"><el-form-item label="性别">
<el-radio-group v-model="form.sex"> <el-radio-group v-model="form.sex">
<el-radio v-for="(dict, idx) in sys_user_sex" :key="idx" :label="dict.label" :value="dict.value">{{ dict.label }}</el-radio> <el-radio v-for="(dict, idx) in sys_user_sex" :key="idx" :label="dict.label" :value="dict.value">{{
dict.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item></el-col> </el-form-item></el-col>
<el-col :span="12"><el-form-item label="文件程度"> <el-col :span="12"><el-form-item label="文件程度">
@ -279,7 +287,7 @@
</el-row> </el-row>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer" v-loading="loading">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
@ -349,7 +357,6 @@ const data = reactive({
rules: { rules: {
subDeptId: [{ required: true, trigger: ['blur', 'change'], message: "请选择所属单位" }], subDeptId: [{ required: true, trigger: ['blur', 'change'], message: "请选择所属单位" }],
userName: [{ required: true, trigger: ['blur', 'change'], message: "请输入姓名" }], userName: [{ required: true, trigger: ['blur', 'change'], message: "请输入姓名" }],
workType: [{ 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' },
@ -562,6 +569,8 @@ function reset() {
bankName: '',// bankName: '',//
bankCardNo: '',// bankCardNo: '',//
bankOffice: '',// bankOffice: '',//
userWorkType: '',//
workType: '',//
}; };
proxy.resetForm("proProjectInfoSubdeptsUsersRef"); proxy.resetForm("proProjectInfoSubdeptsUsersRef");
data.phoneState = ""; data.phoneState = "";
@ -694,6 +703,7 @@ function handleAdd() {
open.value = true; open.value = true;
title.value = "添加劳务人员信息"; title.value = "添加劳务人员信息";
reset(); reset();
loading.value=true;
loadSubDepts(() => { loadSubDepts(() => {
data.editData = null; data.editData = null;
data.mode = 'add'; data.mode = 'add';
@ -703,6 +713,7 @@ function handleAdd() {
form.value.projectName = userStore.currentProName; form.value.projectName = userStore.currentProName;
form.value.nation = data.nationOpts[0]; form.value.nation = data.nationOpts[0];
form.value.sex = "0"; form.value.sex = "0";
loading.value=false;
}); });
} }
@ -714,6 +725,7 @@ function handleUpdate(row) {
data.editData = row; data.editData = row;
open.value = true; open.value = true;
title.value = "修改劳务人员信息"; title.value = "修改劳务人员信息";
loading.value=true;
loadSubDepts(() => { loadSubDepts(() => {
getProProjectInfoSubdeptsUsers(_id).then(response => { getProProjectInfoSubdeptsUsers(_id).then(response => {
let obj = JSON.parse(JSON.stringify(response.data)); let obj = JSON.parse(JSON.stringify(response.data));
@ -734,13 +746,20 @@ function handleUpdate(row) {
obj.certificatePhoto2 = obj.info.certificatePhoto2; obj.certificatePhoto2 = obj.info.certificatePhoto2;
obj.faceImage = obj.userPicture; obj.faceImage = obj.userPicture;
obj.educationalType = obj.degreeGrade obj.educationalType = obj.degreeGrade
obj.userPost=obj.userPost;
form.value = obj; form.value = obj;
form.value.userId = obj.userId; form.value.userId = obj.userId;
form.value.projectId = row.projectId; form.value.projectId = row.projectId;
form.value.projectName = row.projectName; form.value.projectName = row.projectName;
form.value.workType = form.value.workType ? "" + form.value.workType : "";
let tmps = user_work_type.value.filter(d => d.value == form.value.workType);
if (tmps.length > 0) {
form.value.userWorkType = tmps[0].remark;
data.prjWorkTypes = data.prjWorkTypeObj[form.value.userWorkType];
}
//showEditUser(obj.user); //showEditUser(obj.user);
data.phoneState = "edit"; data.phoneState = "edit";
loading.value=false;
doImageUpload(); doImageUpload();
//doDeptGroupChange(); //doDeptGroupChange();
@ -748,7 +767,6 @@ function handleUpdate(row) {
doSubDeptChange(); doSubDeptChange();
setTimeout(() => { setTimeout(() => {
form.value.craftPost = response.data.craftPost; form.value.craftPost = response.data.craftPost;
console.log("++++++>",form.value.craftPost)
}, 400) }, 400)
}, 400); }, 400);
@ -756,6 +774,15 @@ function handleUpdate(row) {
}); });
} }
function getWorkType(wt) {
if (wt) {
let tmps = user_work_type.value.filter(d => d.value == wt);
if (tmps.length > 0) {
return tmps[0].remark + " - " + tmps[0].label;
}
}
return "";
}
function showEditUser(user) { function showEditUser(user) {
user = user || {}; user = user || {};
let info = tryToJson(user?.userInfos || "{}") let info = tryToJson(user?.userInfos || "{}")
@ -827,6 +854,7 @@ function submitForm() {
userInfos: JSON.stringify(info), userInfos: JSON.stringify(info),
craftType: form.value.craftType, craftType: form.value.craftType,
craftPost: form.value.craftPost, craftPost: form.value.craftPost,
workType: form.value.workType,
}; };
if (form.value.id != null) { if (form.value.id != null) {

View File

@ -80,6 +80,11 @@
</el-table-column> </el-table-column>
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber"
v-if="columns[5].visible" width="120" /> v-if="columns[5].visible" width="120" />
<el-table-column label="人员岗位" align="center" prop="craftPost">
<template #default="scope">
{{ getWorkType(scope.row.workType) }}
</template>
</el-table-column>
<el-table-column label="用户状态" align="center" key="status" v-if="columns[6].visible"> <el-table-column label="用户状态" align="center" key="status" v-if="columns[6].visible">
<template #default="scope"> <template #default="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
@ -132,8 +137,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="用户姓名" prop="nickName"> <el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户名称" maxlength="30" <el-input v-model="form.nickName" placeholder="请输入用户名称" maxlength="30" style="width: 150px;" />
style="width: 150px;" />
<!-- <!--
<el-button v-if="data.mode == 'add' && !data.editUser" type="primary" style="margin-left: 10px;" <el-button v-if="data.mode == 'add' && !data.editUser" type="primary" style="margin-left: 10px;"
@click="doQueryUserByName">查询</el-button> @click="doQueryUserByName">查询</el-button>
@ -163,7 +167,8 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="登录密码" prop="password"> <el-form-item label="登录密码" prop="password">
<el-input v-model="form.password" placeholder="请输入登录密码" type="password" maxlength="20" <el-input v-model="form.password" placeholder="请输入登录密码" type="password" maxlength="20"
:disabled="form.userId" :show-password="!form.userId" autocomplete="new-password" disableautocomplete /> :disabled="form.userId" :show-password="!form.userId" autocomplete="new-password"
disableautocomplete />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -184,16 +189,19 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="用户岗位" prop="workType"> <el-form-item label="用户岗位" prop="workType">
<el-select v-model="form.workType" v-if="form.userType=='00'" placeholder="请选择用户岗位" style="width:100%"> <el-select v-model="form.workType" v-if="form.userType == '00'" placeholder="请选择用户岗位"
style="width:100%">
<el-option v-for="item in data.sysWorkTypes" :key="item.value" :label="item.label" <el-option v-for="item in data.sysWorkTypes" :key="item.value" :label="item.label"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
<el-select v-model="form.userWorkType" v-if="form.userType!='00'" style="width:40%" @change="doWorkTypeChange"> <el-select v-model="form.userWorkType" v-if="form.userType != '00'" style="width:40%"
@change="doWorkTypeChange">
<el-option v-for="item in data.prjWorkCategories" :key="item" :label="item" <el-option v-for="item in data.prjWorkCategories" :key="item" :label="item"
:value="item"></el-option> :value="item"></el-option>
</el-select> </el-select>
<el-select v-model="form.workType" v-if="form.userType!='00'" placeholder="请选择用户岗位" style="width:calc(60% - 12px);margin-left:10px;"> <el-select v-model="form.workType" v-if="form.userType != '00'" placeholder="请选择用户岗位"
style="width:calc(60% - 12px);margin-left:10px;">
<el-option v-for="item in data.prjWorkTypes" :key="item.value" :label="item.label" <el-option v-for="item in data.prjWorkTypes" :key="item.value" :label="item.label"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
@ -666,6 +674,16 @@ function handleUpdate(row) {
handleChangeDept(row.deptId); handleChangeDept(row.deptId);
}; };
function getWorkType(wt) {
if (wt) {
let tmps = user_work_type.value.filter(d => d.value == wt);
if (tmps.length > 0) {
return tmps[0].remark ? tmps[0].remark + " - " + tmps[0].label : tmps[0].label;
}
}
return "";
}
/** 根据单位选择角色 */ /** 根据单位选择角色 */
function handleChangeDept(value) { function handleChangeDept(value) {
form.value.roleIds = []; form.value.roleIds = [];