源码提交
parent
788dc1c25f
commit
0918911368
@ -0,0 +1,11 @@
|
||||
[0428/095632.212:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095632.217:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095632.397:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095632.684:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095911.511:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095911.517:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095911.557:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0428/095911.676:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0506/163040.088:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0506/163043.808:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
[0506/163057.058:ERROR:registration_protocol_win.cc(107)] CreateFile: 系统找不到指定的文件。 (0x2)
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,132 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="display: flex;margin-bottom: 10px">
|
||||
<div></div>
|
||||
<div class="flex" style="margin-left: auto;align-items: center;" >
|
||||
<el-select v-model="pageInfo.type" placeholder="服务类型" @change="init" clearable style="width: 150px;margin-right: 10px" >
|
||||
<el-option
|
||||
v-for="item in [{label:'月结',value:1},{label:'日结',value:0}]"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
style="margin-right: 10px;width: 250px;"
|
||||
v-model="date"
|
||||
type="daterange"
|
||||
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
@change="init"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
<el-input size="medium" class="form-width-ms" v-model="pageInfo.staffName" placeholder="输入要查询的员工姓名" @change="init" clearable style="margin-right:10px"></el-input >
|
||||
<el-button size="mini" type="primary" @click='init'>查询</el-button>
|
||||
<el-button size="mini" type="warning" @click='exportError' :loading="exportLoading">导出</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="displsy-mod">
|
||||
<el-table :data="list" v-loading="loading" stripe style="width: 100%" :header-cell-style="{background: 'linear-gradient(#6cb3ff, #1873d4)',color:'#eeeeee'}">
|
||||
<el-table-column align="center" prop="attendanceTime" label="考勤时间" >
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.attendanceTime.substring(0,10) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="staffNum" label="员工编码" ></el-table-column>
|
||||
<el-table-column align="center" prop="staffName" label="员工名称" ></el-table-column>
|
||||
<el-table-column align="center" prop="staffName" label="服务类型" >
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.type?'月结':'日结' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="checkTime" label="首打卡时间" ></el-table-column>
|
||||
<el-table-column align="center" prop="checkEndTime" label="尾打卡时间" ></el-table-column>
|
||||
<el-table-column align="center" prop="recordType" label="考勤状态" ></el-table-column>
|
||||
</el-table>
|
||||
<div class="block" style="margin-top:15px;">
|
||||
<el-pagination align="left" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageInfo.pageNum" :page-sizes="[10,20,30,40,50]" :page-size="pageInfo.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { abnormalPage,exportErrorDetail } from "../../../api/storeManage.js";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list:[],
|
||||
total: 0, //分页总条数
|
||||
pageInfo: {
|
||||
page: 1,
|
||||
size: 10
|
||||
},
|
||||
queryFome:{},
|
||||
date:[],
|
||||
loading:false,
|
||||
exportLoading:false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
exportError(){
|
||||
let params = {...this.pageInfo}
|
||||
try{
|
||||
if(this.date.length){
|
||||
params.enterStartTime = this.formatTime(this.date[0],"YYYY-MM-DD 00:00:00");
|
||||
params.enterEndTime = this.formatTime(this.date[1],"YYYY-MM-DD 23:59:59" );
|
||||
}
|
||||
}catch(err){
|
||||
params.enterStartTime = null
|
||||
params.enterEndTime = null
|
||||
}
|
||||
params.page = 1
|
||||
params.size = 9999
|
||||
this.exportLoading = true
|
||||
exportErrorDetail(params).then(res=>{
|
||||
this.exportLoading = false
|
||||
let blob = new Blob([res]);
|
||||
var a = document.createElement("a");
|
||||
var url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = "临时工异常打卡导出表.xlsx";
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
})
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.pageInfo.size = val
|
||||
this.init();
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.pageInfo.page = val
|
||||
this.init();
|
||||
},
|
||||
init(){
|
||||
let params = {...this.pageInfo}
|
||||
try{
|
||||
if(this.date.length){
|
||||
params.enterStartTime = this.formatTime(this.date[0],"YYYY-MM-DD 00:00:00");
|
||||
params.enterEndTime = this.formatTime(this.date[1],"YYYY-MM-DD 23:59:59" );
|
||||
}
|
||||
}catch(err){
|
||||
params.enterStartTime = null
|
||||
params.enterEndTime = null
|
||||
}
|
||||
if(!params.staffName)params.staffName = null //过滤空字符
|
||||
this.loading = true
|
||||
abnormalPage(params).then(res=>{
|
||||
this.loading = false
|
||||
this.list = res.pageInfo.list
|
||||
this.total = res.pageInfo.total
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,81 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog title="获取最新" :visible.sync="dataDialog" width="600px">
|
||||
<el-form :model="form" :rules="rules" ref="form">
|
||||
<el-form-item label="选择日期:" label-width="120px">
|
||||
<div class="searchDiv">
|
||||
<el-date-picker
|
||||
v-model="form.date"
|
||||
:picker-options="pickerOptions"
|
||||
type="date"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="mini" type="primary" plain @click="dataDialog = false">取 消</el-button>
|
||||
<el-button type="primary" size="mini" :loading="loading" @click="confirm">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataDialog:false,
|
||||
form:{},
|
||||
rules:{
|
||||
date: [
|
||||
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
|
||||
],
|
||||
},
|
||||
loading:false,
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return time.getTime() > Date.now(); // 禁用今天之后的日期
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getNextDate(dateStr) {
|
||||
let date = new Date(dateStr);
|
||||
date.setDate(date.getDate() + 1);
|
||||
let Y = date.getFullYear();
|
||||
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
|
||||
let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
|
||||
return Y + '-' + M + '-' + D;
|
||||
},
|
||||
confirm(){
|
||||
this.$refs['form'].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
let params = {
|
||||
starttime : this.formatTime(this.form.date,"YYYY-MM-DD 03:00:00"),
|
||||
endtime : this.getNextDate(this.form.date,"YYYY-MM-DD" ) + ' 03:00:00',
|
||||
}
|
||||
this.$emit('handleSelectNew',params)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
formatDate(date) {
|
||||
let Y = date.getFullYear() + '-';
|
||||
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
|
||||
let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
|
||||
return Y + M + D;
|
||||
},
|
||||
show(){
|
||||
this.form = {}
|
||||
this.dataDialog = true
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -1,123 +1,287 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog title="录入临时工" :visible.sync="searchDialog" width="600px">
|
||||
<el-form :model="searchForm">
|
||||
<el-form-item label="姓名:" label-width="120px">
|
||||
<div>
|
||||
<el-dialog :title="title" :visible.sync="searchDialog" width="600px" :close-on-click-modal="false">
|
||||
<el-form :model="searchForm" ref="form" :rules="rules">
|
||||
|
||||
<el-form-item label="人员编码:" label-width="120px" v-if="title != '录入临时工'">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.staffNum" placeholder="输入人员编码" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="姓名:" label-width="120px" prop="staffName">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.staffName" placeholder="输入姓名" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="手机号:" label-width="120px" prop="mobilePhone">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.mobilePhone" placeholder="输入手机号" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="身份证:" label-width="120px" prop="identityCard">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.identityCard" placeholder="输入身份证" clearable @change="getGenderFromIdCard"></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="性别:" label-width="120px" prop="sex">
|
||||
<div class="searchDiv">
|
||||
<el-radio-group v-model="searchForm.sex" fill="#f78989">
|
||||
<el-radio :label="0" size="medium" type="primary">男</el-radio>
|
||||
<el-radio :label="1" size="medium" type="primary">女</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="紧急联系人:" label-width="120px" prop="urgentName">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.urgentName" placeholder="输入紧急联系人" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="紧急联系人电话:" label-width="120px" prop="urgentPhone">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.urgentPhone" placeholder="输入紧急联系人电话" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="紧急联系人关系:" label-width="120px" prop="urgentRelationship">
|
||||
<div class="searchDiv">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.staffName" placeholder="输入要姓名" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号:" label-width="120px">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.mobilePhone" placeholder="输入要手机号" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证:" label-width="120px">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.identityCard" placeholder="输入要身份证" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱:" label-width="120px">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.email" placeholder="输入要邮箱" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别:" label-width="120px">
|
||||
<div class="searchDiv">
|
||||
<el-radio-group v-model="searchForm.sex" fill="#f78989">
|
||||
<el-radio label="0" size="medium" type="primary">男</el-radio>
|
||||
<el-radio label="1" size="medium" type="primary">女</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="结算:" label-width="120px">
|
||||
<div class="searchDiv">
|
||||
<el-radio-group v-model="searchForm.job" fill="#f78989">
|
||||
<el-radio label="0" size="medium" type="primary">日结</el-radio>
|
||||
<el-radio label="1" size="medium" type="primary">月结</el-radio>
|
||||
<el-radio-group v-model="searchForm.urgentRelationship" fill="#f78989">
|
||||
<el-radio label="配偶" size="medium" type="primary">配偶</el-radio>
|
||||
<el-radio label="父母" size="medium" type="primary">父母</el-radio>
|
||||
<el-radio label="子女" size="medium" type="primary">子女</el-radio>
|
||||
<el-radio label="兄弟姐妹" size="medium" type="primary">兄弟姐妹</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="上传附件:"
|
||||
:rules="[{ required: true, message: '请上传附件!', trigger: 'blur' }]"
|
||||
prop="file"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-upload
|
||||
style="width:400px"
|
||||
action=""
|
||||
v-model="searchForm.fileList"
|
||||
multiple
|
||||
:http-request="uploadFile"
|
||||
list-type="picture"
|
||||
ref="upload"
|
||||
>
|
||||
<el-button size="mini" type="danger ">点击上传人像</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="mini" type="primary" plain @click="searchDialog = false">取 消</el-button>
|
||||
<el-button type="primary" size="mini" :loading="loading" @click="search()">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { addStaffs } from "../../../api/storeManage.js";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loading:false,
|
||||
searchForm:{
|
||||
storeId: sessionStorage.getItem("parentId")
|
||||
},
|
||||
searchDialog:false,
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="状态:" label-width="120px" v-if='title != "录入临时工"' prop="state">
|
||||
<div class="searchDiv">
|
||||
<el-radio-group v-model="searchForm.state" fill="#f78989">
|
||||
<el-radio :label="0" size="medium" type="primary">正常</el-radio>
|
||||
<el-radio :label="1" size="medium" type="primary">异常</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="服务类型:" label-width="120px" :prop="title == '录入临时工'?'job':'type'">
|
||||
<div class="searchDiv">
|
||||
<el-radio-group v-model="searchForm.job" fill="#f78989" v-if='title == "录入临时工"'>
|
||||
<el-radio :label="0" size="medium" type="primary">日结</el-radio>
|
||||
<el-radio :label="1" size="medium" type="primary">月结</el-radio>
|
||||
</el-radio-group>
|
||||
<el-radio-group v-model="searchForm.type" fill="#f78989" v-else>
|
||||
<el-radio :label="0" size="medium" type="primary">日结</el-radio>
|
||||
<el-radio :label="1" size="medium" type="primary">月结</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="入场时间:" label-width="120px" prop="ruzhiTime">
|
||||
<div class="searchDiv">
|
||||
<el-date-picker
|
||||
v-model="searchForm.ruzhiTime"
|
||||
type="date"
|
||||
placeholder="选择日期时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="外包服务商:" label-width="120px" prop="remark">
|
||||
<div class="searchDiv">
|
||||
<el-input size="medium" v-model="searchForm.remark" placeholder="输入外服务商" clearable></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="上传头像:" label-width="120px">
|
||||
<el-upload
|
||||
style="width:400px"
|
||||
action="#"
|
||||
v-model="searchForm.fileList"
|
||||
:http-request="uploadFile"
|
||||
:file-list="fileList"
|
||||
list-type="picture"
|
||||
ref="upload">
|
||||
<el-button size="mini" type="danger ">点击上传人像</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="mini" type="primary" plain @click="searchDialog = false">取 消</el-button>
|
||||
<el-button type="primary" size="mini" :loading="loading" @click="search()">确 定</el-button>
|
||||
</span>
|
||||
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { addStaffs,updateById } from "../../../api/storeManage.js";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
fileList:[],
|
||||
rules:{
|
||||
staffName: [
|
||||
{ required: true, message: '请输入输入姓名', trigger: 'blur' },
|
||||
],
|
||||
mobilePhone: [
|
||||
{ required: true, message: '请输入输入手机号', trigger: 'blur' },
|
||||
],
|
||||
identityCard: [
|
||||
{ required: true, message: '请输入输入身份证', trigger: 'blur' },
|
||||
],
|
||||
sex: [
|
||||
{ required: true, message: '请选择性别', trigger: 'change' },
|
||||
],
|
||||
urgentName: [
|
||||
{ required: true, message: '请输入紧急联系人', trigger: 'change' },
|
||||
],
|
||||
urgentPhone: [
|
||||
{ required: true, message: '请输入紧急联系人电话', trigger: 'change' },
|
||||
],
|
||||
urgentRelationship: [
|
||||
{ required: true, message: '请选择紧急联系人关系', trigger: 'change' },
|
||||
],
|
||||
job:[
|
||||
{ required: true, message: '请选择服务类型', trigger: 'change' },
|
||||
],
|
||||
type:[
|
||||
{ required: true, message: '请选择服务类型', trigger: 'change' },
|
||||
],
|
||||
ruzhiTime:[
|
||||
{ required: true, message: '请选择入场时间', trigger: 'change' },
|
||||
],
|
||||
remark:[
|
||||
{ required: true, message: '请输入输入外包服务商', trigger: 'blur' },
|
||||
]
|
||||
},
|
||||
loading:false,
|
||||
searchForm:{
|
||||
storeId: sessionStorage.getItem("parentId")
|
||||
},
|
||||
searchDialog:false,
|
||||
title:''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getGenderFromIdCard(idCard) {
|
||||
if (idCard.length == 18) {
|
||||
const genderDigit = parseInt(idCard.charAt(idCard.length - 2)) % 2;
|
||||
if (genderDigit === 0) {
|
||||
this.$set(this.searchForm,'sex',1)
|
||||
} else {
|
||||
this.$set(this.searchForm,'sex',0)
|
||||
}
|
||||
}else{
|
||||
this.$set(this.searchForm,'sex','')
|
||||
}
|
||||
},
|
||||
fileToBase64(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onloadend = function() {
|
||||
const base64Data = reader.result;
|
||||
resolve(base64Data);
|
||||
};
|
||||
reader.onerror = function() {
|
||||
reject(reader.error);
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
},
|
||||
uploadFile(file) {
|
||||
const isLt500K = file.file.size / 1024 ;
|
||||
if (isLt500K>500) {
|
||||
this.$message.error('上传的图片大小不能超过 500KB!');
|
||||
this.fileList = []
|
||||
}else{
|
||||
this.fileToBase64(file.file).then(res=>{
|
||||
this.searchForm.facesInformation = res
|
||||
})
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fileToBase64(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onloadend = function() {
|
||||
const base64Data = reader.result;
|
||||
resolve(base64Data);
|
||||
};
|
||||
reader.onerror = function() {
|
||||
reject(reader.error);
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
search(){
|
||||
if(!this.searchForm.facesInformation){
|
||||
return this.$alert('请上传人像照片', "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {},
|
||||
});
|
||||
},
|
||||
uploadFile(file) {
|
||||
this.fileToBase64(file.file).then(res=>{
|
||||
this.searchForm.facesInformation = res
|
||||
})
|
||||
},
|
||||
search(){
|
||||
this.loading = true
|
||||
addStaffs(this.searchForm).then(res=>{
|
||||
this.loading = false
|
||||
if(res.code == '000000'){
|
||||
this.searchDialog = false
|
||||
this.$message.success({ message: '添加成功' });
|
||||
this.$emit('init')
|
||||
}else{
|
||||
this.$alert(res.message, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {},
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
show(){
|
||||
this.searchDialog = true
|
||||
}
|
||||
this.$refs['form'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
if(this.title == '录入临时工'){
|
||||
this.searchForm.ruzhiTime = this.formatTime(
|
||||
this.searchForm.ruzhiTime,
|
||||
"YYYY-MM-DD 09:00:00"
|
||||
);
|
||||
addStaffs(this.searchForm).then(res=>{
|
||||
this.loading = false
|
||||
if(res.code == '000000'){
|
||||
this.searchDialog = false
|
||||
this.$message.success({ message: '添加成功' });
|
||||
this.$emit('init')
|
||||
}else{
|
||||
this.$alert(res.message, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {},
|
||||
});
|
||||
}
|
||||
})
|
||||
}else{
|
||||
this.searchForm.ruzhiTime = this.formatTime(
|
||||
this.searchForm.ruzhiTime,
|
||||
"YYYY-MM-DD 09:00:00"
|
||||
);
|
||||
updateById(this.searchForm).then(res=>{
|
||||
this.loading = false
|
||||
if(res.code == '000000'){
|
||||
this.searchDialog = false
|
||||
this.$message.success({ message: '修改成功' });
|
||||
this.$emit('init')
|
||||
}else{
|
||||
this.$alert(res.message, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {},
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped></style>
|
||||
show(title,row){
|
||||
Object.assign(this.$data, this.$options.data.call(this));
|
||||
this.searchDialog = true
|
||||
this.title = title
|
||||
if(title == '录入临时工'){
|
||||
this.$nextTick(()=>{
|
||||
this.fileList = []
|
||||
this.$refs['form'].resetFields();
|
||||
this.searchForm = { storeId: sessionStorage.getItem("parentId")}
|
||||
})
|
||||
}else{
|
||||
this.searchForm = { ...row }
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped></style>
|
||||
@ -1,89 +1,89 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog title="北森停用" :visible.sync="dialogVisible" width="600px">
|
||||
<el-form :model="searchForm" :rules="rules" ref='form'>
|
||||
<el-form-item label="停用时间:" label-width="120px" prop="beisenDimissionDate">
|
||||
<el-date-picker
|
||||
v-model="searchForm.beisenDimissionDate"
|
||||
type="date"
|
||||
:picker-options="pickerOptions"
|
||||
style='width:200px'
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="mini" type="primary" plain @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" size="mini" :loading="loading" @click="search">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { delSendBeisenDimission } from "../../../api/storeManage.js";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
const today = new Date();
|
||||
const selectedDate = new Date(time.getFullYear(), time.getMonth(), time.getDate());
|
||||
return selectedDate.getTime() < today.getTime();
|
||||
},
|
||||
},
|
||||
searchForm:{
|
||||
},
|
||||
rules:{
|
||||
beisenDimissionDate:[
|
||||
{ required: true, message: '请选择结束日期', trigger: 'change' }
|
||||
]
|
||||
},
|
||||
dialogVisible:false,
|
||||
mulSelect:[],
|
||||
loading:false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show(row){
|
||||
this.dialogVisible = true
|
||||
this.searchForm = {}
|
||||
this.mulSelect = row
|
||||
},
|
||||
search(){
|
||||
this.$refs['form'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
this.mulSelect = this.mulSelect.map(item=>{
|
||||
return {
|
||||
...item,
|
||||
beisenDimissionDate:this.formatTime(this.searchForm.beisenDimissionDate,"YYYY-MM-DD hh:mm:ss"),
|
||||
}
|
||||
})
|
||||
delSendBeisenDimission(this.mulSelect).then(res=>{
|
||||
this.loading = false
|
||||
if(res.code == '000000'){
|
||||
this.$message.success({ message: "已从北森离职成功!" });
|
||||
this.dialogVisible = false
|
||||
this.$emit('init')
|
||||
}else{
|
||||
this.$alert(res.message, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {
|
||||
},
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
<div>
|
||||
<el-dialog title="北森停用" :visible.sync="dialogVisible" width="600px">
|
||||
<el-form :model="searchForm" :rules="rules" ref='form'>
|
||||
<el-form-item label="停用时间:" label-width="120px" prop="beisenDimissionDate">
|
||||
<el-date-picker
|
||||
v-model="searchForm.beisenDimissionDate"
|
||||
type="date"
|
||||
:picker-options="pickerOptions"
|
||||
style='width:200px'
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="mini" type="primary" plain @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" size="mini" :loading="loading" @click="search">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { delSendBeisenDimission } from "../../../api/storeManage.js";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(date) {
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0); // 设置为今天的零点
|
||||
return date < today;
|
||||
}
|
||||
},
|
||||
searchForm:{
|
||||
},
|
||||
rules:{
|
||||
beisenDimissionDate:[
|
||||
{ required: true, message: '请选择结束日期', trigger: 'change' }
|
||||
]
|
||||
},
|
||||
dialogVisible:false,
|
||||
mulSelect:[],
|
||||
loading:false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show(row){
|
||||
this.dialogVisible = true
|
||||
this.searchForm = {}
|
||||
this.mulSelect = row
|
||||
},
|
||||
search(){
|
||||
this.$refs['form'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
this.mulSelect = this.mulSelect.map(item=>{
|
||||
return {
|
||||
...item,
|
||||
beisenDimissionDate:this.formatTime(this.searchForm.beisenDimissionDate,"YYYY-MM-DD hh:mm:ss"),
|
||||
}
|
||||
})
|
||||
delSendBeisenDimission(this.mulSelect).then(res=>{
|
||||
this.loading = false
|
||||
if(res.code == '000000'){
|
||||
this.$message.success({ message: "已从北森离职成功!" });
|
||||
this.dialogVisible = false
|
||||
this.$emit('init')
|
||||
}else{
|
||||
this.$alert(res.message, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {
|
||||
},
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,103 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog title="批量更新" :visible.sync="searchDialog" width="500px">
|
||||
<el-form :model="form" :rules="rules" ref="ruleForm">
|
||||
<el-form-item label="入场日期:" label-width="120px" prop="ruzhiTime">
|
||||
<div class="searchDiv">
|
||||
<el-date-picker
|
||||
value-format="yyyy-MM-dd"
|
||||
v-model="form.ruzhiTime"
|
||||
:picker-options="pickerOptions"
|
||||
type="date"
|
||||
style='width:200px'
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务类型:" label-width="120px" prop="type">
|
||||
<div class="searchDiv">
|
||||
<el-radio-group v-model="form.type">
|
||||
<el-radio label="0">日结</el-radio>
|
||||
<el-radio label="1">月结</el-radio>
|
||||
</el-radio-group>
|
||||
<!-- <el-radio v-model="form.type" label="0">日结</el-radio>
|
||||
<el-radio v-model="form.type" label="1">月结</el-radio> -->
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="mini" type="primary" plain @click="searchDialog = false">取 消</el-button>
|
||||
<el-button type="primary" size="mini" @click="confirm" :loading="configLoing">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { updateByIds } from "../../../api/storeManage.js"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return time.getTime() < Date.now() - 24 * 60 * 60 * 1000;
|
||||
}
|
||||
},
|
||||
configLoing:false,
|
||||
rules:{
|
||||
type:[
|
||||
{ required: true, message: '请选择劳务类型', trigger: 'change' }
|
||||
],
|
||||
ruzhiTime:[
|
||||
{ required: true, message: '请选择人员入职时间', trigger: 'change' }
|
||||
],
|
||||
},
|
||||
form:{},
|
||||
searchDialog:false,
|
||||
list:[]
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
show(list){
|
||||
this.searchDialog = true
|
||||
this.list = list
|
||||
this.$nextTick(()=>{
|
||||
this.form = {}
|
||||
this.$refs['ruleForm'].resetFields();
|
||||
})
|
||||
},
|
||||
confirm(){
|
||||
this.$refs['ruleForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
let params = {
|
||||
...this.form,
|
||||
ids:this.list.map(item=>item.id)
|
||||
}
|
||||
params.ruzhiTime = params.ruzhiTime + ' 08:00:00'
|
||||
updateByIds(params).then(res=>{
|
||||
if(res.code == '000000'){
|
||||
this.searchDialog = false
|
||||
this.$emit('init')
|
||||
}else{
|
||||
this.$alert(res.message, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
confirmButtonClass: "confirmbtnFalses",
|
||||
type: "warning",
|
||||
center: true,
|
||||
callback: (action) => {
|
||||
},
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
/deep/.el-cascader .el-input .el-input__inner{
|
||||
width:192px !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,278 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="60%" center
|
||||
@close="close" :close-on-click-modal="false" :append-to-body="true">
|
||||
<div class="head">
|
||||
<div class="content flex">
|
||||
<div class="role-size-color">操作人: <span class="role-size">{{ form.staffName }}</span></div>
|
||||
<div class="role-size-color">操作时间: <span class="role-size">{{ form.mobilePhone }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="box">
|
||||
<div class="table-header">
|
||||
<span class="table-header-title"></span>
|
||||
<div class='table-header-topSize'>修改前</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<el-table :data="list" :header-cell-style="{ background: 'linear-gradient(#6cb3ff, #1873d4)',color: '#eeeeee'}">
|
||||
<el-table-column align="center" prop="staffName" label="姓名"></el-table-column>
|
||||
<el-table-column align="center" prop="staffNum" label="人员编号"></el-table-column>
|
||||
<el-table-column align="center" prop="sex" label="性别">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.sex?'女':'男' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="mobilePhone" label="手机号" width="110px"></el-table-column>
|
||||
<el-table-column align="center" prop="identityCard" label="证件号" width="160px"></el-table-column>
|
||||
<el-table-column align="center" prop="type" label="服务类型">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.type ==0?'日结':'月结' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="state" label="状态">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.state ==0?'正常':'异常' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="remark" label="外包服务商" width="150px"></el-table-column>
|
||||
<el-table-column align="center" label="图像" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
<el-image
|
||||
style="width: 20px; height: 20px"
|
||||
:src="scope.row.facesInformation"
|
||||
:preview-src-list="[scope.row.facesInformation]">
|
||||
</el-image>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="table-header">
|
||||
<span class="table-header-title"></span>
|
||||
<div class='table-header-topSize'>修改后</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<el-table :data="[list.staffTemporary]" :header-cell-style="{ background: 'linear-gradient(#6cb3ff, #1873d4)',color: '#eeeeee'}">
|
||||
<el-table-column align="center" prop="staffName" label="姓名"></el-table-column>
|
||||
<el-table-column align="center" prop="staffNum" label="人员编号"></el-table-column>
|
||||
<el-table-column align="center" prop="sex" label="性别">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.sex?'女':'男' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="mobilePhone" label="手机号" width="110px"></el-table-column>
|
||||
<el-table-column align="center" prop="identityCard" label="证件号" width="160px"></el-table-column>
|
||||
<el-table-column align="center" prop="type" label="服务类型">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.type ==0?'日结':'月结' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="state" label="状态">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.state ==0?'正常':'异常' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="remark" label="外包服务商" width="150px"></el-table-column>
|
||||
<el-table-column align="center" label="图像" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
<el-image
|
||||
style="width: 20px; height: 20px"
|
||||
:src="scope.row.facesInformation"
|
||||
:preview-src-list="[scope.row.facesInformation]">
|
||||
</el-image>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width: 100%;text-align:center;margin-top: 20px;">
|
||||
<el-button size="small" @click="dialogVisible = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
title:"修改记录",
|
||||
saveLoad:false,
|
||||
dialogVisible:false,
|
||||
list:[]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show(row){
|
||||
this.dialogVisible = true
|
||||
this.list = [...row]
|
||||
console.log(this.list)
|
||||
},
|
||||
close(){
|
||||
this.dialogVisible = false
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.role-size-color{
|
||||
font-weight: 600;
|
||||
color: #092553
|
||||
}
|
||||
.role-size{
|
||||
font-weight: 600;
|
||||
color: #000;
|
||||
}
|
||||
.head{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.box{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.body{
|
||||
max-height: 500px;
|
||||
overflow: auto;
|
||||
}
|
||||
.checkout{
|
||||
width: 110px;
|
||||
margin-bottom: 8px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.myRedCheckBox{
|
||||
zoom: 1.1;
|
||||
}
|
||||
/deep/.myRedCheckBox .checkbox__input.is-indeterminate .el-checkbox__inner{
|
||||
background: #28bd9c !important;
|
||||
border-color: #28bd9c !important;
|
||||
z-index: 99999;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner{
|
||||
background: #28bd9c !important;
|
||||
border-color: #28bd9c !important;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__input.is-checked .el-checkbox__inner, .myRedCheckBox .el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
||||
background: #28bd9c;
|
||||
border-color: #28bd9c;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__label{
|
||||
font-size: 14px !important;
|
||||
color: #092553 !important;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__input.is-checked + .el-checkbox__label {
|
||||
color: #092553 !important;
|
||||
font-size: 14px;
|
||||
}
|
||||
.content{
|
||||
background: rgb(242,244,248);
|
||||
border-radius: 4px;
|
||||
padding: 16px 28px;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.table-header-topSize{
|
||||
font-size: 16px;
|
||||
}
|
||||
.table-header {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.table-header-title {
|
||||
border-radius: 2.5px;
|
||||
width: 5px;
|
||||
height: 16px;
|
||||
margin-right: 15px;
|
||||
background-color: #28bd9c;
|
||||
}
|
||||
|
||||
.amount {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.flex {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.left-amout {
|
||||
font-size: 14px;
|
||||
color: #8994af;
|
||||
width: 70px;
|
||||
}
|
||||
.right-amout {
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
.right {
|
||||
margin-left: auto;
|
||||
font-size: 16px;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
}
|
||||
.pay {
|
||||
color: #22ab8c;
|
||||
background-color: #eefaf7;
|
||||
}
|
||||
.Late {
|
||||
background-color: #ffeded;
|
||||
color: #f91515;
|
||||
}
|
||||
.status {
|
||||
font-size: 14px;
|
||||
padding: 0 5px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
border-radius: 4px
|
||||
}
|
||||
|
||||
.center {
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/deep/ .el-dialog__title {
|
||||
font-size: 18px;
|
||||
color: #092553;
|
||||
position: relative;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.top {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
box-sizing: border-box;
|
||||
background-color: #f2f4f8;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,142 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="header_flex">
|
||||
<div></div>
|
||||
<div>
|
||||
<el-date-picker
|
||||
style="width:220px"
|
||||
v-model="date"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
<el-input v-model="pageInfo.staffNum" placeholder="请输入员工编码"></el-input>
|
||||
<el-input v-model="pageInfo.staffName" placeholder="请输入员工姓名"></el-input>
|
||||
<!-- <el-input v-model="pageInfo.mobilePhone" placeholder="请输入员工手机号"></el-input>
|
||||
<el-input v-model="pageInfo.identityCard" placeholder="请输入员工身份证"></el-input> -->
|
||||
<el-button type="primary" size="mini" @click="init">查询</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table style="margin-top:20px" :data="list" v-loading="loading" :header-cell-style="{ background: 'linear-gradient(#6cb3ff, #1873d4)',color: '#eeeeee'}">
|
||||
<el-table-column align="center" prop="staffNum" label="员工编码"></el-table-column>
|
||||
<el-table-column align="center" prop="staffName" label="员工名字"></el-table-column>
|
||||
<!-- <el-table-column align="center" prop="mobilePhone" label="员工手机"></el-table-column>
|
||||
<el-table-column align="center" prop="identityCard" label="身份证"></el-table-column> -->
|
||||
<!-- <el-table-column align="center" prop="sex" label="性别">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.sex?'女':'男' }}
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<!-- <el-table-column align="center" prop="urgentName" label="紧急联系人"></el-table-column>
|
||||
<el-table-column align="center" prop="urgentPhone" label="紧急联系人联系方式"></el-table-column>
|
||||
<el-table-column align="center" prop="urgentRelationship" label="紧急联系人联系关系"></el-table-column>
|
||||
<el-table-column align="center" label="图像" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
<el-image
|
||||
style="width: 20px; height: 20px"
|
||||
:src="scope.row.facesInformation"
|
||||
:preview-src-list="[scope.row.facesInformation]">
|
||||
</el-image>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column align="center" prop="updateDate" label="修改时间" fixed="right"></el-table-column>
|
||||
<el-table-column align="center" label="修改记录" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
<el-button type="text" @click="handleShow(scope.row)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column align="center" prop="updateDate" label="修改时间" fixed="right"></el-table-column>
|
||||
<el-table-column align="center" prop="updateName" label="修改人" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.updateName?scope.row.updateName:'本人' }}
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
</el-table>
|
||||
<div class="block" style="margin-top: 10px">
|
||||
<el-pagination
|
||||
align="left"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="pageInfo.pageNum"
|
||||
:page-sizes="[10, 20, 30, 40, 50]"
|
||||
:page-size="pageInfo.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<updateList ref="updateList"></updateList>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { staffTemporaryUpdate } from "../../../api/storeManage.js"
|
||||
import updateList from './updateList.vue';
|
||||
export default {
|
||||
components:{
|
||||
updateList
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list:[],
|
||||
pageInfo:{
|
||||
pageNum:1,
|
||||
pageSize:10
|
||||
},
|
||||
total:0,
|
||||
loading:false,
|
||||
date:[]
|
||||
};
|
||||
},
|
||||
methods:{
|
||||
handleShow(row){
|
||||
this.$refs.updateList.show(row)
|
||||
},
|
||||
handleCurrentChange(current){
|
||||
this.pageInfo.pageNum = current
|
||||
this.init()
|
||||
},
|
||||
handleSizeChange(size){
|
||||
this.pageInfo.pageSize = size
|
||||
this.init()
|
||||
},
|
||||
init(){
|
||||
this.loading = true
|
||||
let params = { ...this.pageInfo }
|
||||
try{
|
||||
if(this.date.length){
|
||||
params.startTime = this.formatTime(this.date[0],"YYYY-MM-DD 00:00:00");
|
||||
params.endTime = this.formatTime(this.date[1],"YYYY-MM-DD 23:59:59" );
|
||||
}
|
||||
}catch(err){''
|
||||
params.startTime = null
|
||||
params.endTime = null
|
||||
}
|
||||
params.staffNum = params.staffNum||null
|
||||
params.staffName = params.staffName||null
|
||||
params.mobilePhone = params.mobilePhone||null
|
||||
params.identityCard = params.identityCard||null
|
||||
staffTemporaryUpdate(params).then(res=>{
|
||||
console.log(res)
|
||||
this.loading = false
|
||||
if(res.code == '000000'){
|
||||
this.list = res.pageInfo.list
|
||||
this.total = res.pageInfo.total
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.init()
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-button {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.el-input {
|
||||
width: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,334 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="70%" center
|
||||
@close="close" :close-on-click-modal="false" :append-to-body="true">
|
||||
<div class="head">
|
||||
<div class="content flex">
|
||||
<div class="role-size-color">操作人: <span class="role-size">{{ listBefore[0].updateName?listBefore[0].updateName:listBefore[0].staffName }}</span></div>
|
||||
<div class="role-size-color">操作时间: <span class="role-size">{{ listBefore[0].updateDate }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="box">
|
||||
<div class="table-header">
|
||||
<span class="table-header-title"></span>
|
||||
<div class='table-header-topSize'>修改前</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<el-table :data="listBefore" :header-cell-style="{ background: 'linear-gradient(#6cb3ff, #1873d4)',color: '#eeeeee'}">
|
||||
<el-table-column align="center" prop="staffName" label="姓名"></el-table-column>
|
||||
<el-table-column align="center" prop="staffNum" label="人员编号"></el-table-column>
|
||||
<el-table-column align="center" prop="sex" label="性别">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.sex?'女':'男' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="mobilePhone" label="手机号" width="110px"></el-table-column>
|
||||
<el-table-column align="center" prop="identityCard" label="证件号" width="165px"></el-table-column>
|
||||
<el-table-column align="center" prop="type" label="服务类型">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.type ==0?'日结':'月结' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="remark" label="外包服务商" width="150px"></el-table-column>
|
||||
<el-table-column align="center" prop="urgentName" label="紧急联系人" min-width="90"></el-table-column>
|
||||
<el-table-column align="center" prop="urgentPhone" label="紧急联系人电话" min-width="110"></el-table-column>
|
||||
<el-table-column align="center" prop="urgentRelationship" label="紧急联系人关系"></el-table-column>
|
||||
<el-table-column align="center" prop="ruzhiTime" label="入场时间" width="135px">
|
||||
<template slot-scope='scope'>
|
||||
{{ scope.row.ruzhiTime }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="图像" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
<el-image
|
||||
style="width: 20px; height: 20px"
|
||||
:src="scope.row.facesInformation"
|
||||
:preview-src-list="[scope.row.facesInformation]">
|
||||
</el-image>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="table-header">
|
||||
<span class="table-header-title"></span>
|
||||
<div class='table-header-topSize'>修改后</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<el-table :data="listAfter" :header-cell-style="{ background: 'linear-gradient(#6cb3ff, #1873d4)',color: '#eeeeee'}">
|
||||
<el-table-column align="center" prop="staffName" label="姓名">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.staffName !=listBefore[0].staffName }">{{ scope.row.staffName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="staffNum" label="人员编号">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.staffNum !=listBefore[0].staffNum }">{{ scope.row.staffNum }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="sex" label="性别">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.sex !=listBefore[0].sex }">{{ scope.row.sex?'女':'男' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="mobilePhone" label="手机号" width="110px">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.mobilePhone !=listBefore[0].mobilePhone }">{{ scope.row.mobilePhone }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="identityCard" label="证件号" width="165px">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.identityCard !=listBefore[0].identityCard }">{{ scope.row.identityCard }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="type" label="服务类型">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.type !=listBefore[0].type }">{{ scope.row.type ==0?'日结':'月结' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="remark" label="外包服务商" width="150px">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.remark !=listBefore[0].remark }">{{ scope.row.remark }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="urgentName" label="紧急联系人" min-width="90">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.urgentName !=listBefore[0].urgentName }">{{ scope.row.urgentName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="urgentPhone" label="紧急联系人电话" min-width="110">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.urgentPhone !=listBefore[0].urgentPhone }">{{ scope.row.urgentPhone }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="urgentRelationship" label="紧急联系人关系">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.urgentRelationship !=listBefore[0].urgentRelationship }">{{ scope.row.urgentRelationship }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="ruzhiTime" label="入场时间" width="135px">
|
||||
<template slot-scope='scope'>
|
||||
<span :class="{ 'isUpdate':scope.row.ruzhiTime != listBefore[0].ruzhiTime }">{{ scope.row.ruzhiTime }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="图像" fixed="right">
|
||||
<template slot-scope='scope'>
|
||||
<el-image
|
||||
style="width: 20px; height: 20px"
|
||||
:src="scope.row.facesInformation"
|
||||
:preview-src-list="[scope.row.facesInformation]">
|
||||
</el-image>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width: 100%;text-align:center;margin-top: 20px;">
|
||||
<el-button size="small" @click="dialogVisible = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
title:"更新记录",
|
||||
saveLoad:false,
|
||||
dialogVisible:false,
|
||||
listBefore:[{}],
|
||||
listAfter:[{}]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show(row){
|
||||
this.dialogVisible = true
|
||||
this.listBefore = [{...row}]
|
||||
this.listAfter = [{...row.staffTemporary}]
|
||||
this.listBefore[0].ruzhiTime = this.timestampToTime(this.listBefore[0].ruzhiTime)
|
||||
this.listAfter[0].ruzhiTime = this.timestampToTime(this.listAfter[0].ruzhiTime )
|
||||
},
|
||||
timestampToTime(timestamp) {
|
||||
timestamp = timestamp ? timestamp : null;
|
||||
let date = new Date(timestamp);
|
||||
let Y = date.getFullYear() + '-';
|
||||
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
|
||||
let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
|
||||
let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
|
||||
let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
|
||||
let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
|
||||
return Y + M + D;
|
||||
},
|
||||
close(){
|
||||
this.dialogVisible = false
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.isUpdate{
|
||||
display: inline-block;
|
||||
font-weight: 600;
|
||||
color: red;
|
||||
}
|
||||
.role-size-color{
|
||||
font-weight: 600;
|
||||
color: #092553
|
||||
}
|
||||
.role-size{
|
||||
font-weight: 600;
|
||||
color: #000;
|
||||
}
|
||||
.head{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.box{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.body{
|
||||
max-height: 500px;
|
||||
overflow: auto;
|
||||
}
|
||||
.checkout{
|
||||
width: 110px;
|
||||
margin-bottom: 8px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.myRedCheckBox{
|
||||
zoom: 1.1;
|
||||
}
|
||||
/deep/.myRedCheckBox .checkbox__input.is-indeterminate .el-checkbox__inner{
|
||||
background: #28bd9c !important;
|
||||
border-color: #28bd9c !important;
|
||||
z-index: 99999;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner{
|
||||
background: #28bd9c !important;
|
||||
border-color: #28bd9c !important;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__input.is-checked .el-checkbox__inner, .myRedCheckBox .el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
||||
background: #28bd9c;
|
||||
border-color: #28bd9c;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__label{
|
||||
font-size: 14px !important;
|
||||
color: #092553 !important;
|
||||
}
|
||||
/deep/.myRedCheckBox .el-checkbox__input.is-checked + .el-checkbox__label {
|
||||
color: #092553 !important;
|
||||
font-size: 14px;
|
||||
}
|
||||
.content{
|
||||
background: rgb(242,244,248);
|
||||
border-radius: 4px;
|
||||
padding: 16px 28px;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.table-header-topSize{
|
||||
font-size: 16px;
|
||||
}
|
||||
.table-header {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
.table-header-title {
|
||||
border-radius: 2.5px;
|
||||
width: 5px;
|
||||
height: 16px;
|
||||
margin-right: 15px;
|
||||
background-color: #28bd9c;
|
||||
}
|
||||
|
||||
.amount {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.flex {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.left-amout {
|
||||
font-size: 14px;
|
||||
color: #8994af;
|
||||
width: 70px;
|
||||
}
|
||||
.right-amout {
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
.right {
|
||||
margin-left: auto;
|
||||
font-size: 16px;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
}
|
||||
.pay {
|
||||
color: #22ab8c;
|
||||
background-color: #eefaf7;
|
||||
}
|
||||
.Late {
|
||||
background-color: #ffeded;
|
||||
color: #f91515;
|
||||
}
|
||||
.status {
|
||||
font-size: 14px;
|
||||
padding: 0 5px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
border-radius: 4px
|
||||
}
|
||||
|
||||
.center {
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/deep/ .el-dialog__title {
|
||||
font-size: 18px;
|
||||
color: #092553;
|
||||
position: relative;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.top {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
box-sizing: border-box;
|
||||
background-color: #f2f4f8;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: SourceHanSansCN-Medium;
|
||||
color: #092553;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in New Issue