Commit c53922a6 authored by dll's avatar dll

海康打卡 假期余额

parent ba2fd033
...@@ -219,8 +219,8 @@ export default { ...@@ -219,8 +219,8 @@ export default {
// 查看天数 // 查看天数
formatterDay(row, column, val) { formatterDay(row, column, val) {
return <el-tag onClick={() => { return <el-tag onClick={() => {
this.handleCountDays(row,column) this.handleCountDays(row,column,val)
}}>{((val || 0) / 1000).toFixed(2)}</el-tag> }}>{val}</el-tag>
}, },
// 格式化单元格数据 // 格式化单元格数据
formatterDate(row, column) { formatterDate(row, column) {
......
...@@ -35,14 +35,13 @@ instance.interceptors.request.use(config => { ...@@ -35,14 +35,13 @@ instance.interceptors.request.use(config => {
// 温 // 温
// http://192.168.0.116/17500 // http://192.168.0.116/17500
// 代 // 代
// http://192.168.0.108/17500 // http://192.168.0.108/17500
const hostname = '192.168.0.116' const hostname = '192.168.0.116'
const port = '17500' const port = '17500'
// const hostname = '192.168.0.98' // const hostname = '192.168.0.108'
// const port = '11039' // const port = '11039'
// 动态修改请求地址 // 动态修改请求地址
......
...@@ -40,3 +40,4 @@ export const transFormTime = (num) => { ...@@ -40,3 +40,4 @@ export const transFormTime = (num) => {
return "0:00"; return "0:00";
} }
} }
// 时间戳 转 yyyy-MM-dd
\ No newline at end of file
// 前端正则验证方法 // 前端正则验证方法
export default { export default {
day(rule, value, callback) {
if(!value) return callback();
if (/^[0-9]+\.{0,1}[0-9]{0,1}$/.test(value)) {
callback();
} else {
callback(new Error('请输入正确的金额如 1.5'));
}
},
// 手机号码 // 手机号码
phone(rule, value, callback) { phone(rule, value, callback) {
if (/^1[3456789][0-9]{9}$/.test(value)) { if (/^1[3456789][0-9]{9}$/.test(value)) {
......
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
<el-form-item :label="label" :prop="prop" class='my-form-field'> <el-form-item :label="label" :prop="prop" class='my-form-field'>
<slot> <slot>
<el-input :maxlength="maxLength" :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" @focus="emit" v-if='type === "text"' :class="inputClass" :clearable='clearable'></el-input> <el-input show-word-limit :maxlength="maxLength" :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" @focus="emit" v-if='type === "text"' :class="inputClass" :clearable='clearable'></el-input>
<el-input :maxlength="maxLength" :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" type='password' v-if='type === "password"'></el-input> <el-input show-word-limit :maxlength="maxLength" :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" type='password' v-if='type === "password"'></el-input>
<el-input-number :disabled='disabled' v-model="field" size="small" :placeholder='placeholder' @change="emit" @input="emit" v-if='type === "num"'></el-input-number> <el-input-number :disabled='disabled' v-model="field" size="small" :placeholder='placeholder' @change="emit" @input="emit" v-if='type === "num"'></el-input-number>
<el-input :disabled='disabled' :placeholder='placeholder' v-model="field" :maxlength="maxLength" <el-input show-word-limit :disabled='disabled' :placeholder='placeholder' v-model="field" :maxlength="maxLength"
@change="emit" :rows='rows' @input="emit" v-if='type === "textarea"' type='textarea' :autosize="textareaSize" :class="inputClass"></el-input> @change="emit" :rows='rows' @input="emit" v-if='type === "textarea"' type='textarea' :autosize="textareaSize" :class="inputClass"></el-input>
<!-- 一级 --> <!-- 一级 -->
......
...@@ -230,7 +230,6 @@ export default { ...@@ -230,7 +230,6 @@ export default {
//初始化查询表单 //初始化查询表单
let newFormData = {}; let newFormData = {};
// this.form = this.encode(data, this.form); // this.form = this.encode(data, this.form);
console.log(this.search,'ddd')
this.search.forEach((item) => { this.search.forEach((item) => {
//复选框 //复选框
if (item.type === "checkbox") { if (item.type === "checkbox") {
...@@ -256,7 +255,7 @@ export default { ...@@ -256,7 +255,7 @@ export default {
}); });
this.form = Object.assign({}, this.form, newFormData); this.form = Object.assign({}, this.form, newFormData);
this.form = Object.assign({}, this.form, data); this.form = Object.assign({}, this.form, data);
console.log(this.form,'dddddd') // console.log(this.form,'dddddd')
}, },
cleanForm() { cleanForm() {
this.clean(); this.clean();
...@@ -276,11 +275,18 @@ export default { ...@@ -276,11 +275,18 @@ export default {
}, },
onSubmit() { onSubmit() {
let { path, query } = this.$route; let { path, query } = this.$route;
if(this.form.attendanceDateStart && this.form.attendanceDateEnd){
let startValue = Date.parse(this.form.attendanceDateStart)
let endValue = Date.parse(this.form.attendanceDateEnd)
if(startValue>endValue){
this.$message.error('查询-结束的日期需大于开始日期')
this.form.attendanceDateEnd = ''
return false
}
}
let params = JSON.parse(JSON.stringify(this.form)) //不更改原始数据 let params = JSON.parse(JSON.stringify(this.form)) //不更改原始数据
console.log(this.form,'form参数') // console.log(this.form,'form参数')
let data = this.decode(params); let data = this.decode(params);
console.log(data,'参数')
// Object.assign({}, query, data) // Object.assign({}, query, data)
this.$router.push({ this.$router.push({
path: path, path: path,
...@@ -369,11 +375,11 @@ export default { ...@@ -369,11 +375,11 @@ export default {
data() { data() {
return { return {
form: { form: {
groupList: [], // groupList: [],
}, },
remoteOptions: {}, remoteOptions: {},
}; }
}, }
}; };
</script> </script>
......
<template>
<!-- 弹出框表单 -->
<el-drawer
title="批量处理"
:visible.sync="open"
:direction="direction"
size="50%">
<div>
已选择6个:
</div>
<div class="staffList">
<div v-for="item in 5" :key="item" class="mt10">
<span>刘德华</span>
<span>的下班时间18:00打卡异常状态</span>
<span class="ml10">缺卡</span>
<span class="ml10">修改为</span>
</div>
<div>
<!-- 处理异常状态 -->
<el-select>
<el-option></el-option>
</el-select>
<!-- 早退/迟到 -->
<el-input style="width:220px" placeholder="请输入数字">
<template slot="append">分钟</template>
</el-input>
</div>
<div>
<span>备注:</span>
<el-input placeholder="请输入备注" v-model="dealParams.remark"></el-input>
</div>
</div>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
name: "AttendanceRecordDetail",
mixins: [form],
components: {
},
created() {
this.changePath("attendance/record")
},
data() {
return {
// 子表选中数据
checkedAttendanceRecordDetail: [],
// 考勤打卡记录详细信息表格数据
attendanceRecordDetailList: [],
// 遮罩层
loading: true,
// 弹出层标题
title: "考勤打卡记录信息",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
],
toDate:[
"attendanceDate",
],
// 表单校验
rules: {
staffName: [
{required: true,message: "请输入员工姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
createTime: [
{required: true,message: "请选择创建时间" },
],
},
dealParams:{
remark:'',
errorStatus:''
}
}
},
methods: {
/** 考勤打卡记录详细信息序号 */
rowAttendanceRecordDetailIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
/** 考勤打卡记录详细信息添加按钮操作 */
handleAddAttendanceRecordDetail() {
let obj = {};
obj.shiftsId = "";
obj.shiftsName = "";
obj.goWorkDate = "";
obj.goWorkResult = "";
obj.offWorkDate = "";
obj.offWorkResult = "";
obj.remark = "";
obj.createUserId = "";
obj.createTime = "";
obj.updateUserId = "";
obj.updateTime = "";
this.attendanceRecordDetailList.push(obj);
},
/** 考勤打卡记录详细信息删除按钮操作 */
handleDeleteAttendanceRecordDetail() {
if (this.checkedAttendanceRecordDetail.length == 0) {
this.$alert("请先选择要删除的考勤打卡记录详细信息数据", "提示", { confirmButtonText: "确定", });
} else {
this.attendanceRecordDetailList.splice(this.checkedAttendanceRecordDetail[0].index - 1, 1);
}
},
/** 单选框选中数据 */
handleAttendanceRecordDetailSelectionChange(selection) {
if (selection.length > 1) {
this.$refs.attendanceRecordDetail.clearSelection();
this.$refs.attendanceRecordDetail.toggleRowSelection(selection.pop());
} else {
this.checkedAttendanceRecordDetail = selection;
}
},
// 渲染前置处理
beforeRender(data) {
if(data.entity.attendanceRecordDetailList) {
this.attendanceRecordDetailList = data.entity.attendanceRecordDetailList;
}
return data
},
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改考勤打卡记录信息";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "attendance/record/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增考勤打卡记录信息";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/view";
this.getData();
this.pageInfo.type="view"
this.title = "考勤打卡记录信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
staffId : null,
staffName : "",
workNum : "",
deptId : null,
deptName : "",
positionId : null,
positionName : "",
attendanceGroupId : null,
attendanceGroupName : "",
shiftsId : null,
shiftsName : "",
attendanceDate : null,
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
...@@ -10,6 +10,14 @@ ...@@ -10,6 +10,14 @@
>批量处理</el-button> >批量处理</el-button>
</LayoutTable> </LayoutTable>
<dialog-show ref="dialogform" @ok="getData" /> <dialog-show ref="dialogform" @ok="getData" />
<!-- 撤销提示 -->
<el-dialog :visible.sync="dialogVisible" title="提示" width="40%">
<div>撤销异常处理结果后,当天的考勤结果将会重新计算,系统需要花费一点时间。</div>
<div class="flex flex_end">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="resetError">确定</el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
...@@ -21,33 +29,44 @@ ...@@ -21,33 +29,44 @@
name: "AttendanceRecordErrorList", name: "AttendanceRecordErrorList",
components: { components: {
dialogShow dialogShow
}, },
mixins: [table], mixins: [table],
created() { created() {
}, },
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { // toAdd(row) {
this.$refs.dialogform.add(row); // this.$refs.dialogform.add(row);
}, // },
/** 重写编辑方法 */ // /** 重写编辑方法 */
toEdit(row) { // toEdit(row) {
this.$refs.dialogform.edit(row); // this.$refs.dialogform.edit(row);
}, // },
/** 重写查看方法 */ // /** 重写查看方法 */
toView(row) { // toView(row) {
this.$refs.dialogform.view(row); // this.$refs.dialogform.view(row);
}, // },
morehandle(){ // morehandle(row){
console.log(this.selection) // console.log(this.selection)
}, // this.$refs.dialogform.edit(row);
// },
// 处理 // 处理
handle(err){ handle(err){
console.log(err) console.log(err)
this.$refs.dialogform.edit(err);
}, },
// 撤销 // 撤销
reCancle(err){ reCancle(err){
console.log(err) console.log(err)
this.dialogVisible = true
},
resetError(data){
this.$get('attendance/record/error/delete',{id:data.id}).then(res => {
if(res.code == 1){
this.dialogVisible = false
this.getData()
}
})
} }
}, },
data() { data() {
...@@ -59,57 +78,55 @@ ...@@ -59,57 +78,55 @@
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部部门", label: "全部部门",
fuzzy: true fuzzy: false
}, },
{ {
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部考勤组", label: "全部考勤组",
fuzzy: true fuzzy: false
}, },
{ {
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部班次", label: "全部班次",
fuzzy: true fuzzy: false
}, },
{ {
name: "errorStatus", name: "errorStatus",
type: "select", type: "select",
label: "全部异常状态", label: "全部异常状态",
fuzzy: true fuzzy: false
}, },
{ {
name: "errorStatus", name: "processStatus",
type: "select", type: "select",
label: "全部处理状态", label: "全部处理状态",
fuzzy: true fuzzy: false
}, },
{ {
name:'startTime', name:'startTime',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤开始时间", label: "考勤开始时间",
fuzzy: true fuzzy: false
}, },
{ {
name:'endTime', name:'endTime',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤结束时间", label: "考勤结束时间",
fuzzy: true fuzzy: false
}, },
{ {
name: "staffName", name: "staffName",
type: "text", type: "text",
label: "员工姓名", label: "员工姓名",
fuzzy: true fuzzy: false
}, },
{ {
name: "phoneNumber", name: "phoneNumber",
type: "text", type: "text",
label: "手机号", label: "手机号",
fuzzy: true fuzzy: false
}, },
], ],
columns: [ columns: [
...@@ -138,17 +155,18 @@ ...@@ -138,17 +155,18 @@
<span> <span>
<el-button type="text" size='mini' onClick={(row) => { <el-button type="text" size='mini' onClick={(row) => {
this.handle(row) this.handle(row)
}}>处理</el-button> }} v-if={row.processStatus == 0}>处理</el-button>
<el-button type="text" size='mini' onClick={(row) => { <el-button type="text" size='mini' onClick={(row) => {
this.reCancle(row) this.reCancle(row)
}}>撤销</el-button> }} v-else>撤销</el-button>
</span> </span>
) )
} }
} }
] ]
},
dialogVisible:false
} }
};
} }
}; };
</script> </script>
\ No newline at end of file
...@@ -73,13 +73,32 @@ ...@@ -73,13 +73,32 @@
:visible.sync="drawerhistory" :visible.sync="drawerhistory"
:direction="direction"> :direction="direction">
<div class="hisList"> <div class="hisList">
<div class="list mt10" v-for="item in 10" :key="item"> <div class="list mt10" v-for="(item,index) in exportList" :key="index" @click="changeStatus(item)">
<div class="flex flex-align-center flex-pack-justify"> <div class="flex flex-align-center flex-pack-justify">
<div>打卡记录汇总</div> <div>打卡记录汇总</div>
<el-button type="text">导出成功</el-button> <el-button type="text">导出成功</el-button>
</div> </div>
<div class="times"> <div class="details" v-if="item.islook">
导出时间:2020-08-13 <div class="mt10" v-if="item.recordIdList">
选择列表id: {{item.recordIdList}}
</div>
<div class="mt10" v-if="item.deptName">
选择部门:{{item.deptName}}
</div>
<div class="mt10" v-if="item.groupName">
选择考勤组:{{item.groupName}}
</div>
<div class="mt10" v-if="item.className">
选择班次:{{item.className}}
</div>
<div class="mt10">
<el-link :href="baseUrl+item.filePath" target="_blank" type="primary">重新下载</el-link>
</div>
</div>
<div class="times mt10">
导出时间:{{item.createTime}}
</div> </div>
</div> </div>
</div> </div>
...@@ -91,6 +110,7 @@ ...@@ -91,6 +110,7 @@
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
import {timestampToTime} from '@/assets/utils/dateFormat'
export default { export default {
name: "AttendanceRecordHikList", name: "AttendanceRecordHikList",
components: { components: {
...@@ -101,7 +121,26 @@ ...@@ -101,7 +121,26 @@
// console.log(this.$route.query,'sssss') // console.log(this.$route.query,'sssss')
}, },
methods: { methods: {
// 更改状态
changeStatus(item){
this.$set(
item,
'islook',
!item.islook
)
},
// 导出记录
lookexportHis(){ lookexportHis(){
this.$post('/attendance/export/record/list',{type:1,page:1,size:-1}).then(res => {
if(res.code == 1){
let arr = res.data.data
this.exportList = arr.map(item => {
item.createTime = timestampToTime(item.createTime)
item.islook = false
return item
})
}
})
// 导出记录 // 导出记录
this.drawerhistory = true this.drawerhistory = true
}, },
...@@ -139,8 +178,19 @@ ...@@ -139,8 +178,19 @@
/** 导出Excel */ /** 导出Excel */
doExport() { doExport() {
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/attendance/record/hik/exportExcel", { this.$download("/attendance/record/hik/exportExcel", {
"idList": this.selection, ...params,
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
...@@ -184,45 +234,43 @@ ...@@ -184,45 +234,43 @@
name: "staffName", name: "staffName",
type: "text", type: "text",
label: "员工姓名", label: "员工姓名",
fuzzy: true fuzzy: false
}, },
{ {
name:'workName', name:'workNum',
type:'text', type:'text',
label:'工号', label:'工号',
fuzzy: true fuzzy: false
},
{
name: "deptId",
type: "select",
label: "所属部门",
fuzzy: true
},
{
name: "attendanceGroupId",
type: "select",
label: "所属考勤组",
fuzzy: true
},
{
name: "shiftsId",
type: "select",
label: "班次",
fuzzy: true
}, },
// {
// name: "deptId",
// type: "select",
// label: "所属部门",
// fuzzy: false
// },
// {
// name: "attendanceGroupId",
// type: "select",
// label: "所属考勤组",
// fuzzy: false
// },
// {
// name: "shiftsId",
// type: "select",
// label: "班次",
// fuzzy: false
// },
{ {
name:'startTime', name:'attendanceDateStart',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤开始时间", label: "考勤开始时间",
fuzzy: true fuzzy: false
}, },
{ {
name:'endTime', name:'attendanceDateEnd',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤结束时间", label: "考勤结束时间",
fuzzy: true fuzzy: false
} }
], ],
columns: [ columns: [
...@@ -230,27 +278,29 @@ ...@@ -230,27 +278,29 @@
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "员工姓名", prop: "staffName"}, {label: "员工姓名", prop: "staffName"},
{label: "工号", prop: "workNum"}, {label: "工号", prop: "workNum"},
{label: "部门", prop: "deptName"}, // {label: "部门", prop: "deptName"},
{label: "考勤组", prop: "attendanceGroupName"}, // {label: "考勤组", prop: "attendanceGroupName"},
{label: "职位", prop: "positionName"}, // {label: "职位", prop: "positionName"},
{label: "班次", prop: "shiftsName"}, // {label: "班次", prop: "shiftsName"},
{label: "考勤时间", prop: "attendanceDate",formatter: this.formatterDate}, {label: "考勤时间", prop: "attendanceDate",formatter: this.formatterDate},
{label: "考勤点名称", prop: "attendanceAddress"}, {label: "考勤点名称", prop: "attendanceAddress"},
{label: "事件源", prop: "eventSource"}, {label: "事件源", prop: "eventSource"},
{ // {
label: "操作", // label: "操作",
width: 240, // width: 240,
formatter: row => { // formatter: row => {
return ( // return (
<table-buttons noAdd noDel noEdit noView row={row} // <table-buttons noAdd noDel noEdit noView row={row}
onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> // onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
) // )
} // }
} // }
] ]
}, },
drawerhistory:false drawerhistory:false,
}; exportList:[],
baseUrl:process.env.VUE_APP_API_BASE_URL+'/'
}
} }
}; };
</script> </script>
...@@ -266,6 +316,11 @@ ...@@ -266,6 +316,11 @@
font-size: 12px; font-size: 12px;
color: #999; color: #999;
} }
cursor: pointer;
} }
}
.details{
cursor: pointer;
} }
</style> </style>
\ No newline at end of file
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
size="mini" size="mini"
@click="setdialog" @click="setdialog"
>表格设置</el-button> >表格设置</el-button>
</LayoutTable> </LayoutTable>
<drawer-show ref="drawerform" @ok="getData" /> <drawer-show ref="drawerform" @ok="getData" />
<!-- 导出记录查看 --> <!-- 导出记录查看 -->
...@@ -181,8 +182,18 @@ ...@@ -181,8 +182,18 @@
/** 导出Excel */ /** 导出Excel */
doExport() { doExport() {
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/attendance/record/exportExcel", { this.$download("/attendance/record/exportExcel", {
"idList": this.selection, ...params
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
...@@ -278,13 +289,13 @@ ...@@ -278,13 +289,13 @@
fuzzy: true fuzzy: true
}, },
{ {
name: "attendanceGroupId", name: "groupId",
type: "select", type: "select",
label: "所属考勤组", label: "所属考勤组",
fuzzy: true fuzzy: true
}, },
{ {
name: "shiftsId", name: "classId",
type: "select", type: "select",
label: "班次", label: "班次",
fuzzy: true fuzzy: true
...@@ -292,14 +303,12 @@ ...@@ -292,14 +303,12 @@
{ {
name:'startTime', name:'startTime',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤开始时间", label: "考勤开始时间",
fuzzy: true fuzzy: true
}, },
{ {
name:'endTime', name:'endTime',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤结束时间", label: "考勤结束时间",
fuzzy: true fuzzy: true
} }
...@@ -313,31 +322,31 @@ ...@@ -313,31 +322,31 @@
{label: "部门", prop: "deptName"}, {label: "部门", prop: "deptName"},
{label: "职位", prop: "positionName"}, {label: "职位", prop: "positionName"},
{label: "班次", prop: "shiftsName"}, {label: "班次", prop: "shiftsName"},
{label: "考勤打卡记录详细信息", // {label: "考勤打卡记录详细信息",
width: 120, // width: 120,
prop: "subColumns", // prop: "subColumns",
formatter: (row) => { // formatter: (row) => {
let widthsize = this.columnSet.reduce((pre, cur) => { // let widthsize = this.columnSet.reduce((pre, cur) => {
return pre + Number(cur.width); // return pre + Number(cur.width);
}, 50); // }, 50);
return ( // return (
<el-popover placement="right" width={widthsize} trigger="click"> // <el-popover placement="right" width={widthsize} trigger="click">
{this.renderTable(row.attendanceRecordDetailList)} // {this.renderTable(row.attendanceRecordDetailList)}
<el-button type="text" slot="reference">详细</el-button> // <el-button type="text" slot="reference">详细</el-button>
</el-popover> // </el-popover>
); // );
}, // },
}, // },
{ // {
label: "操作", // label: "操作",
width: 240, // width: 240,
formatter: row => { // formatter: row => {
return ( // return (
<table-buttons noAdd noEdit noView noDel // <table-buttons noAdd noEdit noView noDel
row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> // row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
); // );
} // }
} // }
] ]
}, },
drawerhistory:false, drawerhistory:false,
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
name: "staffName", name: "staffName",
type: "text", type: "text",
label: "员工姓名", label: "员工姓名",
fuzzy: true fuzzy: false
}, },
], ],
columns: [ columns: [
......
...@@ -94,8 +94,17 @@ ...@@ -94,8 +94,17 @@
/** 导出Excel */ /** 导出Excel */
doExport() { doExport() {
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/attendance/stat/exportExcel", { this.$download("/attendance/stat/exportExcel", {
"idList": this.selection, ...params
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
...@@ -111,45 +120,43 @@ ...@@ -111,45 +120,43 @@
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部部门", label: "全部部门",
fuzzy: true fuzzy: false
}, },
{ {
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部考勤组", label: "全部考勤组",
fuzzy: true fuzzy: false
}, },
{ {
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部班次", label: "全部班次",
fuzzy: true fuzzy: false
}, },
{ {
name:'startTime', name:'startTime',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤开始时间", label: "考勤开始时间",
fuzzy: true fuzzy: false
}, },
{ {
name:'endTime', name:'endTime',
type: "date", type: "date",
valueFormat:'YYYY-dd-MM',
label: "考勤结束时间", label: "考勤结束时间",
fuzzy: true fuzzy: false
}, },
{ {
name: "staffName", name: "staffName",
type: "text", type: "text",
label: "员工姓名", label: "员工姓名",
fuzzy: true fuzzy: false
}, },
{ {
name: "phoneNumber", name: "phoneNumber",
type: "text", type: "text",
label: "手机号", label: "手机号",
fuzzy: true fuzzy: false
} }
], ],
columns: [ columns: [
...@@ -162,59 +169,59 @@ ...@@ -162,59 +169,59 @@
{label: "员工姓名", prop: "staffName"}, {label: "员工姓名", prop: "staffName"},
{label: "回单位(天)", prop: "backToUnit", formatter: this.formatterMoney}, {label: "回单位(天)", prop: "backToUnit"},
{label: "因公请假(天)", prop: "onDutyLeave", formatter: this.formatterMoney}, {label: "因公请假(天)", prop: "onDutyLeave"},
{label: "外出勘验(天)", prop: "outOfOffice", formatter: this.formatterMoney}, {label: "外出勘验(天)", prop: "outOfOffice"},
{label: "值班补班(天)", prop: "shiftCompensation", formatter: this.formatterMoney}, {label: "值班补班(天)", prop: "shiftCompensation"},
{label: "体检(天)", prop: "physicalExamination", formatter: this.formatterMoney}, {label: "体检(天)", prop: "physicalExamination"},
{label: "隔离(天)", prop: "quarantine", formatter: this.formatterMoney}, {label: "隔离(天)", prop: "quarantine"},
{label: "因公外出(与窗口工作无关/天)", prop: "businessTrip", formatter: this.formatterMoney}, {label: "因公外出(与窗口工作无关/天)", prop: "businessTrip"},
{label: "公休(天)", prop: "publicHoliday", formatter: this.formatterMoney}, {label: "公休(天)", prop: "publicHoliday"},
{label: "病假(天)", prop: "sickLeave", formatter: this.formatterMoney}, {label: "病假(天)", prop: "sickLeave"},
{label: "丧假(天)", prop: "funeralLeave", formatter: this.formatterMoney}, {label: "丧假(天)", prop: "funeralLeave"},
{label: "婚假(天)", prop: "marriageLeave", formatter: this.formatterMoney}, {label: "婚假(天)", prop: "marriageLeave"},
{label: "育儿假(天)", prop: "childRearingLeave", formatter: this.formatterMoney}, {label: "育儿假(天)", prop: "childRearingLeave"},
{label: "产假(陪护假/天)", prop: "maternityLeave", formatter: this.formatterMoney}, {label: "产假(陪护假/天)", prop: "maternityLeave"},
{label: "调回单位(或离职/天)", prop: "transferBack", formatter: this.formatterMoney}, {label: "调回单位(或离职/天)", prop: "transferBack"},
{label: "探亲假(天)", prop: "homeLeave", formatter: this.formatterMoney}, {label: "探亲假(天)", prop: "homeLeave"},
{label: "事假(天)", prop: "personalLeave", formatter: this.formatterMoney}, {label: "事假(天)", prop: "personalLeave"},
{label: "旷工(天)", prop: "absenteeismDays", formatter: this.formatterMoney}, {label: "旷工(天)", prop: "absenteeismDays"},
{label: "其他(天)", prop: "otherDays", formatter: this.formatterMoney}, {label: "其他(天)", prop: "otherDays"},
{label: "出勤率%", prop: "attendanceRate", formatter: this.formatterMoney}, {label: "出勤率%", prop: "attendanceRate"},
{label: "未按规定打卡(含忘记打卡)", prop: "nonCompliancePunch", formatter: this.formatterMoney}, {label: "未按规定打卡(含忘记打卡)", prop: "nonCompliancePunch"},
{label: "迟到(次)", prop: "lateTimes",formatter: this.formatter}, {label: "迟到(次)", prop: "lateTimes"},
{label: "上网耍手机(次)", prop: "surfingMobileTimes",formatter: this.formatter}, {label: "上网耍手机(次)", prop: "surfingMobileTimes"},
{label: "溜班(次)", prop: "overtimeTimes",formatter: this.formatter}, {label: "溜班(次)", prop: "overtimeTimes"},
{label: "空岗(次)", prop: "vacancy", formatter: this.formatterMoney}, {label: "空岗(次)", prop: "vacancy"},
{label: "未规范着装(次)", prop: "nonStandardDressTimes",formatter: this.formatter}, {label: "未规范着装(次)", prop: "nonStandardDressTimes"},
{label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence", formatter: this.formatterMoney}, {label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence"},
{label: "会议早退", prop: "earlyLeaveMeeting", formatter: this.formatterMoney}, {label: "会议早退", prop: "earlyLeaveMeeting"},
// {label: "创建用户", prop: "createUserId", formatter: this.formatter}, // {label: "创建用户", prop: "createUserId", formatter: this.formatter},
{ {
......
<template> <template>
<div>
<!-- 弹出框表单 --> <!-- 弹出框表单 -->
<el-drawer <el-drawer
title="假期使用记录" title="假期使用记录"
:visible.sync="open" :visible.sync="open"
:direction="direction" :direction="direction"
size="50%"> size="50%">
<div style="padding:20px">
<div class="mt20"> <div class="mt20">
<span>当前假期余额:20</span> <span>当前假期余额:{{days}}</span>
<el-tag type="success" size="mini">修改余额</el-tag> <el-button type="success" size="mini" class="ml20" @click="editFn">修改余额</el-button>
</div> </div>
<div class="mt20"> <div class="mt20">
<el-steps direction="vertical" :active="1"> <el-steps direction="vertical">
<el-step title="步骤 1"></el-step> <el-step :title="item.createTime"
<el-step title="步骤 2"></el-step> v-for="(item,index) in recordList" :key="index"
<el-step title="步骤 3" description="这是一段很长很长很长的描述性文字"></el-step> >
<i class="el-icon-timer" slot="icon"></i>
<template slot="description">
<div>
<span style="color:#000">{{item.subOrAddDays}}</span>
<span class="ml20">{{item.validityPeriod}}有效</span>
</div>
<div>
<span style="color:#000">{{item.content}}</span>
</div>
<div>
<span style="color:#000">理由: {{item.reason}}</span>
</div>
</template>
</el-step>
</el-steps> </el-steps>
</div> </div>
<div class="tips mt20"> <div class="tips mt20">
当前病假规则:每年1月1日自动发放 30天 当前病假规则:每年1月1日自动发放 30天
</div> </div>
<!-- <el-form ref="form" :model="form" :rules="rules" label-width="120px"> </div>
<el-row>
<Field label="员工id" prop="staffId" v-model="form.staffId" placeholder="请输入员工id"/>
<Field label="员工姓名" prop="staffName" v-model="form.staffName" type="textarea" placeholder="请输入员工姓名"/>
<Field label="部门id" prop="deptId" v-model="form.deptId" placeholder="请输入部门id"/>
<Field label="部门名称" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入部门名称"/>
<Field label="入职时间" prop="entryTime" v-model="form.entryTime" type="date" />
<Field label="事假" prop="personalLeaveDays" v-model="form.personalLeaveDays" placeholder="请输入事假"/>
<Field label="调休" prop="compensatedLeaveDays" v-model="form.compensatedLeaveDays" placeholder="请输入调休"/>
<Field label="病假" prop="sickLeaveDays" v-model="form.sickLeaveDays" placeholder="请输入病假"/>
<Field label="年假" prop="annualLeaveDays" v-model="form.annualLeaveDays" placeholder="请输入年假"/>
<Field label="婚假" prop="marriageLeaveDays" v-model="form.marriageLeaveDays" placeholder="请输入婚假"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row>
<form-buttons @submit='submitForm' noCancelBtn />
</el-form> -->
</el-drawer> </el-drawer>
<el-dialog title="修改余额" :show-close="false" :visible.sync="isedit">
<el-form ref="form" :model="editParams" :rules="rules" label-width="120px">
<el-form-item label="修改类型" prop="subAddType">
<el-select v-model="editParams.subAddType">
<el-option
v-for='($label, $value) in dict.subAddType'
:key="$value"
:label="$label"
:value="$value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="修改天数" prop="subOrAddDays">
<el-input v-model="editParams.subOrAddDays" style="width:220px"></el-input>
<span></span>
</el-form-item>
<el-form-item label="修改理由" prop="reason">
<el-input type="textarea" placeholder="请输入理由"
v-model="editParams.reason"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="subMit" type="primary" size="mini">确认</el-button>
<el-button @click="cancle" size="mini">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import {timestampToTime} from '@/assets/utils/dateFormat'
export default { export default {
name: "AttendanceVacationBalanceDetail", name: "AttendanceVacationBalanceDetail",
mixins: [form],
components: {}, components: {},
created() { created() {
this.changePath("attendance/vacation/balance") // this.changePath("attendance/vacation/record")
}, },
data() { data() {
var day = (rule, value, callback) => {
if(!value) return callback();
if (/^[0-9]+\.{0,1}[0-9]{0,1}$/.test(value)) {
callback();
} else {
callback(new Error('请输入正确的金额如 1.5'));
}
}
return { return {
days:0,
// 遮罩层 // 遮罩层
loading: true, loading: true,
// 弹出层标题 // 弹出层标题
title: "员工假期余额信息", title: "员工假期余额信息",
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
isedit:false,
direction:"rtl", direction:"rtl",
toString:[ toString:[
], ],
...@@ -62,36 +103,83 @@ export default { ...@@ -62,36 +103,83 @@ export default {
], ],
// 表单校验 // 表单校验
rules: { rules: {
subAddType:[
{required: true,message: "请选择类型",trigger:'change'},
],
subOrAddDays:[
{required: true,message: "请输入天数"},
{validator: day, trigger: 'blur' }
],
reason:[
{
required:true,message:'请输入理由'
} }
}; ]
}, },
recordList:[],
methods: { editParams:{
/** 编辑 */ // id:'',
edit(row) { staffId:"",
this.reset() type:'',
this.query = { id: row.id }; subAddType:"",
this.urls.currUrl ="attendance/vacation/balance/edit"; subOrAddDays:'',
this.getData(); reason:"",
this.pageInfo.type="edit"
this.title = "修改员工假期余额信息";
}, },
/** 新增 */ dict:{},//字典
add(row) { }
this.reset()
this.urls.currUrl = "attendance/vacation/balance/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增员工假期余额信息";
}, },
methods: {
/** 查看*/ /** 查看*/
view(row) { view(row) {
this.reset() this.editParams.type = row.type
this.query = { id: row.id }; this.editParams.staffId = row.staffId
this.urls.currUrl ="attendance/vacation/balance/view"; // this.editParams.id = row.id
this.getData(); this.days = row.val
this.pageInfo.type="view" this.$post("/attendance/vacation/record/list", {
this.title = "员工假期余额信息详细"; page: 1,
size: -1,
type:row.type,
staffId:row.staffId
})
.then((res) => {
if (res.code == 1) {
this.open = true
let arr = res.data.data
this.recordList = arr.map(item => {
item.createTime = timestampToTime(item.createTime)
return item
})
this.dict = res.data.dict
}
})
.catch((error) => {
this.$message.error(error.msg);
})
},
// 修改余额
editFn(){
this.isedit = true
},
subMit(){
this.$refs['form'].validate((valid) => {
if(valid){
this.$post('attendance/vacation/record/save',this.editParams).then(res => {
if(res.code == 1){
this.afterSubmit()
}else{
this.$message.error(res.msg)
}
})
}
})
},
cancle(){
this.editParams.subAddType = ''
this.editParams.subOrAddDays = ''
this.editParams.reason = ''
this.isedit = false
}, },
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
...@@ -101,41 +189,13 @@ export default { ...@@ -101,41 +189,13 @@ export default {
afterRender(data) { afterRender(data) {
this.open = true; this.open = true;
}, },
afterSubmit(data) { afterSubmit(data) {
this.isedit = false
this.open = false; this.open = false;
this.$emit("ok"); this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
staffId : null,
staffName : "",
deptId : null,
deptName : "",
entryTime : null,
personalLeaveDays : 0,
compensatedLeaveDays : 0,
sickLeaveDays : 0,
annualLeaveDays : 0,
maternityLeaveDays : 0,
paternityLeaveDays : 0,
marriageLeaveDays : 0,
menstrualLeaveDays : 0,
breastfeedingLeaveDays : 0,
bereavementLeaveDays : 0,
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
} }
}, }
}, }
};
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.tips{ .tips{
......
...@@ -24,42 +24,29 @@ export default { ...@@ -24,42 +24,29 @@ export default {
// 导出 // 导出
doExport(){ doExport(){
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/attendance/vacation/balance/exportExcel", { this.$download("/attendance/vacation/balance/exportExcel", {
"idList": this.selection, ...params
'name': this.$route.query['name'],
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
}) })
}, },
/** 重写新增方法 */
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
/** 查看不同类型假期记录 */ /** 查看不同类型假期记录 */
handleCountDays(row,leavetype){ handleCountDays(row,column,val){
this.$post("/attendance/vacation/record/list", { this.$refs.drawerform.view({
page: 1, type:this.util_formatter('AllHolidays',column.property),
size: -1, staffId:row.staffId,
type:leavetype, id:row.id,
staffId:row.staffId val
})
.then((res) => {
if (res.code == 1) {
//todo 抽屉打开 假期明细信息
//this.$message.success("激活设备成功!");
}
})
.catch((error) => {
this.$message.error(error.message);
}) })
} }
...@@ -93,17 +80,18 @@ export default { ...@@ -93,17 +80,18 @@ export default {
{label: "病假(天)", prop: "sickLeaveDays", formatter: this.formatterDay}, {label: "病假(天)", prop: "sickLeaveDays", formatter: this.formatterDay},
{label: "年假(天)", prop: "annualLeaveDays", formatter: this.formatterDay}, {label: "年假(天)", prop: "annualLeaveDays", formatter: this.formatterDay},
{label: "婚假(天)", prop: "marriageLeaveDays", formatter: this.formatterDay}, {label: "婚假(天)", prop: "marriageLeaveDays", formatter: this.formatterDay},
{label: "哺乳假(天)", prop: "breastfeedingLeaveDays", formatter: this.formatterDay},
// {label: "创建用户", prop: "createUserId", formatter: this.formatter}, // {label: "创建用户", prop: "createUserId", formatter: this.formatter},
{ // {
label: "操作", // label: "操作",
width: 240, // width: 240,
formatter: row => { // formatter: row => {
return ( // return (
<table-buttons noAdd noEdit noView noDel row={row} // <table-buttons noAdd noEdit noView noDel row={row}
onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> // onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
) // )
} // }
} // }
], ],
isExport:false isExport:false
} }
......
...@@ -8,12 +8,13 @@ ...@@ -8,12 +8,13 @@
<el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:20px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:20px">
<el-row> <el-row>
<Field v-if="title == '新增职位信息'" label="分组" prop="groupId" v-model="form.groupId" type="select" placeholder="请选择分组"/> <Field v-if="title == '新增职位信息'" label="分组" prop="groupId" v-model="form.groupId" type="select" placeholder="请选择分组"/>
<Field label="分组名称" prop="groupName" v-model="form.groupName" placeholder="请输入分组名称" :maxLength="10" v-if="title == '新增分组信息'"/>
<Field label="职位编码" prop="jobCode" :maxLength="10" v-model="form.jobCode" placeholder="请输入职位编码" v-if="title == '新增职位信息'"/>
<Field label="职位名称" prop="jobName" :maxLength="10" v-model="form.jobName" placeholder="请输入职位名称" v-if="title == '新增职位信息'" />
<Field label="分组名称" prop="groupName" v-model="form.groupName" placeholder="请输入分组名称"/>
<Field label="职位编码" prop="jobCode" v-model="form.jobCode" placeholder="请输入职位编码"/>
<Field label="职位名称" prop="jobName" v-model="form.jobName" placeholder="请输入职位名称"/>
<Field label="类型" prop="type" v-model="form.type" type="select" :enumData="dict.type" placeholder="请选择类型"/> <Field label="类型" prop="type" v-model="form.type" type="select" :enumData="dict.type" placeholder="请选择类型"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> <Field label="备注" prop="remark" :maxLength="50" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row> </el-row>
<form-buttons @submit='submitForm' noCancelBtn /> <form-buttons @submit='submitForm' noCancelBtn />
</el-form> </el-form>
...@@ -88,9 +89,9 @@ ...@@ -88,9 +89,9 @@
}, },
/**获取数据后弹框 */ /**获取数据后弹框 */
afterRender(data) { afterRender(data) {
this.form.type = this.form.type.toString()
this.open = true; this.open = true;
}, },
afterSubmit(data) { afterSubmit(data) {
this.open = false; this.open = false;
this.$emit("ok"); this.$emit("ok");
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<el-button type="success" size="mini" @click="saveFn('position')">新增职位</el-button> <el-button type="success" size="mini" @click="saveFn('position')">新增职位</el-button>
</div> </div>
<el-scrollbar style="height: 100%"> <el-scrollbar style="height: 100%">
<!-- 区分分组和职位 -->
<el-tree <el-tree
size="mini" size="mini"
ref="siteTree" ref="siteTree"
...@@ -25,6 +26,13 @@ ...@@ -25,6 +26,13 @@
:render-content="renderContent" :render-content="renderContent"
@node-click="handleNodeClick" @node-click="handleNodeClick"
> >
<span slot-scope="{ node, data }">
<span style="font-size:14px">{{ node.label }}</span>
<span>
<i class="el-icon-edit" style="color:#409EFF" @click="editJob(node)"></i>
<i class="el-icon-delete" style="color:#F56C6C" @click="deleteFn(node)"></i>
</span>
</span>
</el-tree> </el-tree>
</el-scrollbar> </el-scrollbar>
</el-col> </el-col>
...@@ -90,9 +98,17 @@ ...@@ -90,9 +98,17 @@
}, },
doExport(){ doExport(){
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/job/exportExcel", { this.$download("/job/exportExcel", {
"idList": this.selection, ...params
'name': this.$route.query['name'],
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
...@@ -123,6 +139,29 @@ ...@@ -123,6 +139,29 @@
path:key path:key
}) })
}, },
// 职位
editJob(row){
// 编辑职位/分组
this.toEdit(row)
},
// 删除
deleteFn(row){
this.$confirm('此操作将永久删除该信息, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(res => {
// 删除操作
this.$post('/job/delete',{id:row.id}).then(data => {
if(data.code === 1){
this.$message({
type: 'success',
message: '删除成功!'
})
}
})
})
}
}, },
data() { data() {
return { return {
...@@ -157,17 +196,18 @@ ...@@ -157,17 +196,18 @@
// {label: "职位编码", prop: "jobCode"}, // {label: "职位编码", prop: "jobCode"},
// {label: "职位名称", prop: "jobName"}, // {label: "职位名称", prop: "jobName"},
{label: "姓名", prop: "jobName"}, {label: "姓名", prop: "staffName"},
{label: "部门", prop: "jobName"}, {label: "部门", prop: "deptName"},
{label: "员工类型", prop: "jobName"}, {label: "员工类型", prop: "staffType",formatter: this.formatterType},
{label: "手机号", prop: "jobName"}, {label: "手机号", prop: "phoneNumber"},
{label: "添加时间", prop: "jobName"}, {label: "添加时间", prop: "createTime",formatter:this.formatterDateOnly},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
formatter: row => { formatter: row => {
return ( return (
<table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons noAdd noView noEdit row={row}
onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
) )
} }
} }
......
...@@ -20,9 +20,9 @@ ...@@ -20,9 +20,9 @@
</el-form> </el-form>
</div> </div>
<div class="footer"> <!-- <div class="footer">
登陆 &copy; <a href="">信宏翔网络科技有限公司</a> 出品 登陆 &copy; <a href="">信宏翔网络科技有限公司</a> 出品
</div> </div> -->
</div> </div>
</template> </template>
......
...@@ -162,11 +162,17 @@ export default { ...@@ -162,11 +162,17 @@ export default {
/** 导出Excel */ /** 导出Excel */
doExport() { doExport() {
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/staff/care/exportExcel", { this.$download("/staff/care/exportExcel", {
"idList": this.selection, ...params
'staffName': this.$route.query['staffName'],
'careType': this.$route.query['careType'],
'sendStatus': this.$route.query['sendStatus'],
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
......
...@@ -18,15 +18,15 @@ ...@@ -18,15 +18,15 @@
<!-- <Field label="政治面貌 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="请选择政治面貌 "/> --> <!-- <Field label="政治面貌 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="请选择政治面貌 "/> -->
<!-- <Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称"/> --> <!-- <Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称"/> -->
<Field label="员工姓名" prop="name" v-model="form.name" placeholder="请输入员工姓名"/> <Field label="员工姓名" :maxLength="10" prop="name" v-model="form.name" placeholder="请输入员工姓名"/>
<Field label="手机号码" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入联系电话"/> <Field label="手机号码" :maxLength="11" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入联系电话"/>
<Field label="所属部门" prop="deptName" v-model="form.deptName" placeholder="请选择所属部门" @focus="ishowBumen = true"/> <Field label="所属部门" :maxLength="10" prop="deptName" v-model="form.deptName" placeholder="请选择所属部门" @focus="ishowBumen = true"/>
<Field label="职位" prop="positionId" v-model="form.positionId" :enumData="dict.positionId" type="select" placeholder="请选择职位" /> <Field label="职位" prop="positionId" v-model="form.positionId" :enumData="dict.positionId" type="select" placeholder="请选择职位" />
<Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/> <Field label="工号" :maxLength="15" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/>
<!-- <Field label="是否在政务大厅" prop="positionId" v-model="form.positionId" placeholder="请选择" type="select"/> --> <!-- <Field label="是否在政务大厅" prop="positionId" v-model="form.positionId" placeholder="请选择" type="select"/> -->
<!-- <Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/> --> <!-- <Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/> -->
...@@ -101,7 +101,6 @@ ...@@ -101,7 +101,6 @@
}, },
created() { created() {
this.changePath("staff") this.changePath("staff")
this.getjobSelect()
}, },
data() { data() {
return { return {
...@@ -175,9 +174,6 @@ ...@@ -175,9 +174,6 @@
}, },
// 点击 // 点击
handleNodeClick(node) { handleNodeClick(node) {
if(node.children.length>0){
return
}
this.deptnode = node this.deptnode = node
}, },
comfirmbument(){ comfirmbument(){
...@@ -257,11 +253,6 @@ ...@@ -257,11 +253,6 @@
}, },
cancledept(){ cancledept(){
this.deptnode = {} this.deptnode = {}
},
getjobSelect(){
this.$post('/job/list').then(res => {
console.log(res)
})
} }
} }
} }
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<el-button type="text" @click="lookDetailHis">历史花名册</el-button> <el-button type="text" @click="lookDetailHis">历史花名册</el-button>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item> <el-dropdown-item>
<el-button type="text">自定义列表字段</el-button> <el-button type="text" @click="SelectEXport">自定义列表字段</el-button>
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
<!-- 花名册记录查看 --> <!-- 花名册记录查看 -->
<el-drawer <el-drawer
title="花名册记录" title="历史花名册"
:visible.sync="drawerhistory" :visible.sync="drawerhistory"
direction="rtl"> direction="rtl">
<div class="hisList"> <div class="hisList">
...@@ -133,6 +133,19 @@ ...@@ -133,6 +133,19 @@
</div> </div>
</el-drawer> </el-drawer>
<!-- 表格设置 -->
<el-dialog :visible.sync="isdialog" title="自定义列表字段设置">
<div class="tipsword">请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。</div>
<el-checkbox-group v-model="checkList">
<el-checkbox v-for="(item,index) in setcolum" :key="index" :label="item.label">
</el-checkbox>
</el-checkbox-group>
<div class="mt20" style="text-align:right">
<el-button>取消</el-button>
<el-button type="primary">确定</el-button>
</div>
</el-dialog>
<drawer-show ref="drawerform" @ok="getData" :bumentree="areaData" /> <drawer-show ref="drawerform" @ok="getData" :bumentree="areaData" />
</div> </div>
</template> </template>
...@@ -156,6 +169,11 @@ ...@@ -156,6 +169,11 @@
}) })
}, },
methods: { methods: {
// 自定义字段
SelectEXport(){
this.setcolum = this.config.columns.filter(item => item.label&&item.prop)
this.isdialog = true
},
/** 导入 */ /** 导入 */
handleImport() { handleImport() {
this.upload.title = "员工导入"; this.upload.title = "员工导入";
...@@ -197,24 +215,49 @@ ...@@ -197,24 +215,49 @@
}, },
doExport(){ doExport(){
this.isExport = true; this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/staff/exportExcel", { this.$download("/staff/exportExcel", {
"idList": this.selection, ...params
'name': this.$route.query['name'],
}, { type: "excel" }).then(() => this.isExport = false).catch(error => { }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false; this.isExport = false;
this.$message.error(error.message); this.$message.error(error.message);
}) })
}, },
/** 下载模板操作 */
downloadTemplate() {
this.isExport = true;
this.$download("/staff/downloadTemplate", {}, { type: "excel" })
.then(() => (this.isExport = false))
.catch((error) => {
this.isExport = false;
this.$message.error(error.message);
})
},
// 导出花名册 // 导出花名册
lookDetailHis(){ lookDetailHis(){
console.log('1111') console.log('1111')
this.drawerhistory = true this.drawerhistory = true
} },
/** 提交上传文件 */
submitFileForm() {
this.$refs.upload.submit();
},
}, },
data() { data() {
return { return {
// 用户导入参数 // 用户导入参数
upload: { upload: {
headers:{
Authorization:window.sessionStorage.getItem('token') || ''
},
// 是否显示弹出层(员工关怀信息导入) // 是否显示弹出层(员工关怀信息导入)
open: false, open: false,
// 弹出层标题(员工关怀信息导入) // 弹出层标题(员工关怀信息导入)
...@@ -224,7 +267,7 @@ ...@@ -224,7 +267,7 @@
// 是否更新已经存在的数据 // 是否更新已经存在的数据
updateSupport: 0, updateSupport: 0,
// 上传的地址 // 上传的地址
url: "/attendance/staff/list/importData", url: process.env.VUE_APP_API_BASE_URL+"/staff/importData",
}, },
config: { config: {
search: [ search: [
...@@ -232,13 +275,13 @@ ...@@ -232,13 +275,13 @@
name: "name", name: "name",
type: "text", type: "text",
label: "员工姓名", label: "员工姓名",
fuzzy: true fuzzy: false
}, },
{ {
name:'phoneNumber', name:'phoneNumber',
type:'text', type:'text',
label:'手机号', label:'手机号',
fuzzy:true fuzzy:false
} }
], ],
columns: [ columns: [
...@@ -247,11 +290,11 @@ ...@@ -247,11 +290,11 @@
{label: "员工姓名", prop: "name"}, {label: "员工姓名", prop: "name"},
{label: "工号", prop: "workNum"}, {label: "工号", prop: "workNum"},
{label: "部门", prop: "deptName"}, {label: "部门", prop: "deptName"},
{label: "职位", prop: "positionName"}, {label: "职位", prop: "positionName",formatter:this.formatters},
{label: "员工类型", prop: "staffType",formatter: this.formatterType}, {label: "员工类型", prop: "staffType",formatter: this.formatterType},
{label: "员工状态", prop: "status",formatter: this.formatter}, {label: "员工状态", prop: "status",formatter: this.formatter},
{label: "是否在政务中心", prop: "source",formatter: this.formatterSource},//未对 {label: "是否在政务中心", prop: "source",formatter: this.formatterSource},//未对
{label: "手机号", prop: "phoneNumber"}, {label: "手机号", prop: "phoneNumber",formatter:this.formatters},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
...@@ -268,7 +311,10 @@ ...@@ -268,7 +311,10 @@
personData:[], personData:[],
isExport:false, isExport:false,
staffInfo:{}, staffInfo:{},
drawerhistory:false drawerhistory:false,
checkList:[],
setcolum:[],
isdialog:false
} }
}, },
computed:{ computed:{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment