<template> <div class="app-container" > <el-row :gutter="20"> <!--部门数据--> <el-col :span="4" :xs="24"> <div style="height: 810px; border: solid 1px #e6ebf5;overflow-y:auto"> <div class="head-container" style = "padding: 10px"> <el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search" /> </div> <div class="head-container" style = "padding: 10px"> <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" highlight-current ref="tree" default-expand-all @node-click="handleNodeClick" /> </div> </div> </el-col> <!--员工数据--> <el-col :span="20" :xs="24"> <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="员工编号" prop="staffCode"> <el-input v-model="queryParams.staffCode" placeholder="请输入员工编号" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="员工姓名" prop="staffName"> <el-input v-model="queryParams.staffName" placeholder="请输入员工姓名" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="创建时间"> <el-date-picker v-model="dateRange" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" ></el-date-picker> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" >新增</el-button> </el-col> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-row> <el-table v-loading="loading" :data="staffList" @selection-change="handleSelectionChange"> <!-- <el-table-column type="selection" width="50" align="center" />--> <el-table-column label="员工编号" align="center" prop="staffCode" /> <el-table-column label="员工姓名" align="center" prop="staffName" /> <el-table-column label="员工性别" align="center" prop="sex" width="100"> <template slot-scope="scope"> <span v-if="scope.row.sex == '0'">男</span> <span v-if="scope.row.sex == '1'">女</span> <span v-if="scope.row.sex == '2'">未知</span> </template> </el-table-column> <el-table-column label="归属部门" align="center" prop="deptName" /> <el-table-column label="岗位" align="center" prop="postName" /> <el-table-column label="手机号码" align="center" prop="phonenumber"/> <el-table-column label="证书有效日期" align="center" width="200"> <template slot-scope="scope"> <span v-if="scope.row.effectiveDate != null && scope.row.effectiveDate != '' && getDays(scope.row.effectiveDate, new Date())<30" style="color: red;"> {{ scope.row.effectiveDate }}(即将到期) </span> <span v-if="scope.row.effectiveDate != null && scope.row.effectiveDate != '' && getDays(scope.row.effectiveDate, new Date())>30"> {{ scope.row.effectiveDate }} </span> <span v-if="scope.row.effectiveDate == null || scope.row.effectiveDate == ''">-</span> </template> </el-table-column> <el-table-column label="创建时间" align="center" width="160"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime) }}</span> </template> </el-table-column> <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width" > <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button> <el-button size="mini" type="text" icon="el-icon-edit" @click="showDetail(scope.row)" >详情</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" >删除</el-button> </template> </el-table-column> </el-table> <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> </el-col> </el-row> <!-- 档案信息对话框 --> <el-dialog title="档案信息" width="1200px" :visible.sync="dialogTableVisible"> <template> <el-descriptions class="margin-top" :column="3" :size="size" border> <el-descriptions-item> <template slot="label"> 姓名 </template> {{form.staffName}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 性别 </template> <p v-if="form.sex==0">男</p> <p v-if="form.sex==1">女</p> <p v-if="form.sex==2">未知</p> </el-descriptions-item> <el-descriptions-item> <template slot="label"> 手机号码 </template> {{form.phonenumber}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 归属部门 </template> {{form.deptName}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 职称 </template> {{form.positionalTitles}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 岗位 </template> {{form.postName}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 工种 </template> {{form.profession}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 是否为特种作业人员 </template> <p v-if="form.specialOperators=='Y'">是</p> <p v-if="form.specialOperators=='N'">否</p> </el-descriptions-item> <el-descriptions-item> <template slot="label"> 人像照片 </template> <el-image style="width: 100px; height: 100px" :src="form.certificateUrl"></el-image> <!-- <MyFileUpload--> <!-- listType="picture-card"--> <!-- @resFun="getFileInfo"--> <!-- :fileArr="fileList"--> <!-- />--> </el-descriptions-item> <el-descriptions-item> <template slot="label"> 证书名称 </template> {{form.certificateName}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 证书有效日期 </template> {{form.effectiveDate}} </el-descriptions-item> <el-descriptions-item> <template slot="label"> 备注 </template> {{form.remark}} </el-descriptions-item> </el-descriptions> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane label="培训信息" name="first"> <el-table v-loading="loading" :data="examinationList" @selection-change="handleSelectionChange"> <el-table-column label="培训课程" align="center" prop="courseName" > <span slot-scope="scope" v-if="scope.row.courseName">{{scope.row.courseName}}</span> <span v-else>-</span> </el-table-column> <el-table-column label="是否完成" align="center" prop="trainState"> <template slot-scope="scope"> <span v-if="scope.row.trainState == '0'">未完成</span> <span v-if="scope.row.trainState == '1'">已完成</span> </template> </el-table-column> <el-table-column label="培训时长(分钟)" align="center" prop="finishDuration" /> <el-table-column label="考试开始时间" align="center" prop="testStartTime" /> <el-table-column label="考试结束时间" align="center" prop="testEndTime" /> </el-table> <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getListS" /> </el-tab-pane> <el-tab-pane label="考试信息" name="second"> <el-table v-loading="loading" :data="examinationList" @selection-change="handleSelectionChange"> <el-table-column label="培训课程" align="center" prop="courseName" > <span slot-scope="scope" v-if="scope.row.courseName">{{scope.row.courseName}}</span> <span v-else>-</span> </el-table-column> <el-table-column label="考试" align="center" prop="state"> <template slot-scope="scope"> <span v-if="scope.row.state == 0">未考试</span> <span v-if="scope.row.state == 1">未通过</span> <span v-if="scope.row.state == 2">已通过</span> <span v-if="scope.row.state == 3||scope.row.state ==4">未考试</span> </template> </el-table-column> <el-table-column label="考试开始时间" align="center" prop="testStartTime" /> <el-table-column label="考试结束时间" align="center" prop="testEndTime" /> </el-table> <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getListS" /> </el-tab-pane> </el-tabs> </template> </el-dialog> <!-- 添加参数配置对话框 --> <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row> <el-col :span="11"> <el-form-item label="姓名" prop="staffName"> <el-input v-model="form.staffName" placeholder="请输入员工姓名" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="性别" prop="sex" label-width="140px"> <el-select v-model="form.sex" placeholder="请选择员工性别" style="width: 100%"> <el-option v-for="dict in sexOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" ></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row > <el-col :span="11"> <el-form-item label="账号" prop="userName"> <el-input v-model="form.userName" placeholder="请输账号" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="密码" prop="password" label-width="140px"> <el-input v-model="form.password" placeholder="请输入密码" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="手机号码" prop="phonenumber"> <el-input v-model="form.phonenumber" placeholder="请输入手机号码" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="归属部门" prop="deptId" label-width="140px"> <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="岗位" prop="postId"> <el-select v-model="form.postId" placeholder="请选择岗位" style="width: 100%"> <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId" :disabled="item.status == 1" ></el-option> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="职称" prop="positionalTitles" label-width="140px"> <el-input v-model="form.positionalTitles" placeholder="请输入员工职称" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="工种" prop="profession"> <el-input v-model="form.profession" placeholder="请输入员工工种" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="是否为特种作业人员" label-width="140px"> <el-select v-model="form.specialOperators" placeholder="请选择是否为特种作业人员" style="width: 100%"> <el-option v-for="dict in specialOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" ></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="角色"> <el-select v-model="form.roleIds" multiple placeholder="请选择"> <el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1" ></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="23"> <el-form-item label="证书照片" prop="certificateUrl"> <MyFileUpload listType="picture-card" @resFun="getFileInfo" @remove="listRemove" :fileArr="fileList" /> <el-input v-show="false" disabled v-model="form.certificateUrl"></el-input> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="证书名称" prop="certificateName"> <el-input v-model="form.certificateName" placeholder="请输入证书名称" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="证书有效日期" prop="effectiveDate" label-width="140px"> <el-date-picker clearable v-model="form.effectiveDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择证书有效日期" style="width: 100%"> </el-date-picker> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="23"> <el-form-item label="备注"> <el-input v-model="form.remark" type="textarea" placeholder="请输入备注信息"></el-input> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog> <!-- 修改参数配置对话框 --> <el-dialog :title="title" :visible.sync="opens" width="900px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row> <el-col :span="11"> <el-form-item label="姓名" prop="staffName"> <el-input v-model="form.staffName" placeholder="请输入员工姓名" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="性别" prop="sex" label-width="140px"> <el-select v-model="form.sex" placeholder="请选择员工性别" style="width: 100%"> <el-option v-for="dict in sexOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" ></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="手机号码" prop="phonenumber"> <el-input v-model="form.phonenumber" placeholder="请输入手机号码" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="归属部门" prop="deptId" label-width="140px"> <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="岗位" prop="postId"> <el-select v-model="form.postId" placeholder="请选择岗位" style="width: 100%"> <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId" :disabled="item.status == 1" ></el-option> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="职称" prop="positionalTitles" label-width="140px"> <el-input v-model="form.positionalTitles" placeholder="请输入员工职称" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="工种" prop="profession"> <el-input v-model="form.profession" placeholder="请输入员工工种" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="是否为特种作业人员" label-width="140px"> <el-select v-model="form.specialOperators" placeholder="请选择是否为特种作业人员" style="width: 100%"> <el-option v-for="dict in specialOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" ></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <!-- <el-form-item label="角色">--> <!-- <el-select v-model="form.roleId" placeholder="请选择角色" style="width: 100%">--> <!-- <el-option--> <!-- v-for="item in roleOptions"--> <!-- :key="item.roleId"--> <!-- :label="item.roleName"--> <!-- :value="item.roleId"--> <!-- :disabled="item.status == 1"--> <!-- ></el-option>--> <!-- </el-select>--> <!-- </el-form-item>--> <el-form-item label="角色"> <el-select v-model="form.roleIds" multiple placeholder="请选择"> <el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1" ></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="23"> <el-form-item label="人像照片" prop="certificateUrl"> <MyFileUpload listType="picture-card" @resFun="getFileInfo" @remove="listRemove" :fileArr="fileList" /> <el-input v-show="false" disabled v-model="form.certificateUrl"></el-input> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="11"> <el-form-item label="证书名称" prop="certificateName"> <el-input v-model="form.certificateName" placeholder="请输入证书名称" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="证书有效日期" prop="effectiveDate" label-width="140px"> <el-date-picker clearable v-model="form.effectiveDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择证书有效日期" style="width: 100%"> </el-date-picker> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="23"> <el-form-item label="备注"> <el-input v-model="form.remark" type="textarea" placeholder="请输入备注信息"></el-input> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog> </div> </template> <script> import { listStaff, getStaff, delStaff, addStaff, updateStaff, exportStaff,TStaffLisst } from "@/api/safetyManagement/staff"; import { treeselect } from "@/api/system/dept"; import MyFileUpload from '@/components/MyFileUpload'; import Treeselect from "@riophae/vue-treeselect"; import { listUser, getUser, delUser, addUser, updateUser, exportUser, resetUserPwd, changeUserStatus, importTemplate } from "@/api/system/user"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; export default { name: "staff", components: { Treeselect, MyFileUpload }, data() { return { staffId:0, //详情标签页使用 activeName: 'second', //用户详细信息遮罩层 dialogTableVisible : false, // 遮罩层 loading: true, // 导出遮罩层 exportLoading: false, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 员工表格数据 staffList: null, //考试信息 examinationList:null, // 弹出层标题 title: "", titleDetail: "", // 部门树选项 deptOptions: undefined, // 是否显示弹出层 open: false, // 修改是否显示弹出层 opens: false, openDetail: false, // 部门名称 deptName: undefined, // 日期范围 dateRange: [], // 性别状态字典 sexOptions: [], // 是否特种作业人员字典 specialOptions: [], // 岗位选项 postOptions: [], // 角色选项 roleOptions: [], // 上传文件列表 fileList: [], // 表单参数 form: {}, detailForm: {}, defaultProps: { children: "children", label: "label" }, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, staffName: null, phonenumber: null, sex: null, deptId: null, staffId:0, dataKind:1, }, // 表单校验 rules: { staffName: [ { required: true, message: "姓名不能为空", trigger: "blur" } ], userName: [ { required: true, message: "账号不能为空", trigger: "blur" } ], password: [ { required: true, message: "密码不能为空", trigger: "blur" } ], phonenumber: [ { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" } ] } }; }, watch: { // 根据名称筛选部门树 deptName(val) { this.$refs.tree.filter(val); } }, created() { this.getList(); this.getTreeselect(); this.getDicts("sys_user_sex").then(response => { this.sexOptions = response.data; }); this.getDicts("sys_yes_no").then(response => { this.specialOptions = response.data; }); }, methods: { /***/ handleClick(tab, event) { this.queryParams.dataKind=tab.index TStaffLisst(this.queryParams).then(response => { this.examinationList = response.rows; this.total = response.total; this.loading = false; }); }, /**查看详情*/ showDetail(row){ this.dialogTableVisible=true; //获取id const staffId = row.staffId || this.ids; getUser().then(response => { this.roleOptions = response.roles; }); getStaff(staffId).then(response => { this.form = response.data; this.postOptions = response.posts; if (this.form.certificateUrl) { this.fileList.push({ url: this.form.certificateUrl, }); } }); this.queryParams.staffId=row.staffId; TStaffLisst(this.queryParams).then(response => { this.examinationList = response.rows; this.total = response.total; this.loading = false; }); }, /** 查询员工列表 */ getListS() { this.loading = true; TStaffLisst(this.queryParams).then(response => { this.examinationList = response.rows; this.total = response.total; this.loading = false; }); }, /** 查询员工列表 */ getList() { this.loading = true; listStaff(this.addDateRange(this.queryParams, this.dateRange)).then(response => { this.staffList = response.rows; this.total = response.total; this.loading = false; } ); }, /** 查询部门下拉树结构 */ getTreeselect() { treeselect().then(response => { this.deptOptions = response.data; }); }, // 筛选节点 filterNode(value, data) { if (!value) return true; return data.label.indexOf(value) !== -1; }, // 节点单击事件 handleNodeClick(data) { this.queryParams.deptId = data.id; this.getList(); }, // 取消按钮 cancel() { this.open = false; this.opens = false; this.reset(); }, cancelDetail() { this.openDetail = false; this.resetDetail(); }, // 表单重置 reset() { this.form = { staffId: null, deptId: null, staffName: null, staffCode: null, phonenumber: null, sex: null, roleId: null, postId: null, effectiveDate: null, isDel: null, remark: null }; this.resetForm("form"); this.fileList = []; }, resetDetail() { this.detailForm = { staffId: null, deptId: null, staffName: null, staffCode: null, phonenumber: null, sex: null, roleId: null, postId: null, effectiveDate: null, isDel: null, remark: null }; this.resetForm("detailForm"); this.fileList = []; }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.page = 1; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.dateRange = []; this.resetForm("queryForm"); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { console.log(selection) this.ids = selection.map(item => item.staffId); this.single = selection.length != 1; this.multiple = !selection.length; }, /** 新增按钮操作 */ handleAdd() { this.reset(); this.getTreeselect(); // this.open = true; // this.title = "添加员工信息"; // getStaff().then(response => { // this.postOptions = response.posts; // this.roleOptions = response.roles; // this.open = true; // this.title = "添加员工信息"; // }); getUser().then(response => { this.postOptions = response.posts; this.roleOptions = response.roles; this.open = true; this.title = "添加员工信息"; }); }, /** 修改按钮操作 */ handleUpdate(row) { this.reset(); this.getTreeselect(); const staffId = row.staffId || this.ids; getUser().then(response => { this.roleOptions = response.roles; }); getStaff(staffId).then(response => { this.form = response.data; this.postOptions = response.posts; if (this.form.certificateUrl) { this.fileList.push({ url: this.form.certificateUrl, }); } this.opens = true; this.title = "修改员工信息"; }); }, /** 提交按钮 */ submitForm: function() { this.$refs["form"].validate(valid => { if (valid) { if (this.form.staffId != null) { updateStaff(this.form).then(response => { this.msgSuccess("修改成功"); this.opens = false; this.getList(); }); } else { addStaff(this.form).then(response => { this.msgSuccess("新增成功"); this.open = false; this.getList(); }); } } }); }, /** 删除按钮操作 */ handleDelete(row) { // const staffIds = row.staffId || this.ids; row.isDel = "1"; this.$confirm('是否确认删除 ' + row.staffName + '(' + row.staffCode + ') 的员工信息?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(function() { return updateStaff(row); }).then(() => { this.getList(); this.msgSuccess("删除成功"); }).catch(() => {}); }, getFileInfo(res){ this.form.certificateUrl = res.url; //this.$set(this.feedBookForm,'iconUrl',res.url) }, listRemove(e) { this.form.certificateUrl = ""; this.fileList = []; }, /** 详细信息跳转 */ /*showDetail(row) { this.resetDetail(); getStaff(row.staffId).then(response => { this.detailForm = response.data; this.postOptions = response.posts; this.roleOptions = response.roles; this.openDetail = true; this.titleDetail = "员工信息详情"; }); },*/ getDays(date1 , date2){ var time = new Date(date1).getTime() - date2.getTime(); var days = parseInt(time/1000/60/60/24); return days; } } }; </script>